Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 3566cbb

Browse files
committed
feat(*): add more lemmas about set.piecewise (#6862)
1 parent ef7fe6f commit 3566cbb

File tree

4 files changed

+68
-3
lines changed

4 files changed

+68
-3
lines changed

src/algebra/group/pi.lean

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Simon Hudon, Patrick Massot
55
-/
66
import data.pi
7+
import data.set.function
78
import tactic.pi_instances
89
import algebra.group.defs
910
import algebra.group.hom
@@ -202,3 +203,25 @@ lemma pi.single_mul [Π i, monoid_with_zero $ f i] (i : I) (x y : f i) :
202203
(mul_hom.single f i).map_mul x y
203204

204205
end single
206+
207+
section piecewise
208+
209+
@[to_additive]
210+
lemma set.piecewise_mul [Π i, has_mul (f i)] (s : set I) [Π i, decidable (i ∈ s)]
211+
(f₁ f₂ g₁ g₂ : Π i, f i) :
212+
s.piecewise (f₁ * f₂) (g₁ * g₂) = s.piecewise f₁ g₁ * s.piecewise f₂ g₂ :=
213+
s.piecewise_op₂ _ _ _ _ (λ _, (*))
214+
215+
@[to_additive]
216+
lemma pi.piecewise_inv [Π i, has_inv (f i)] (s : set I) [Π i, decidable (i ∈ s)]
217+
(f₁ g₁ : Π i, f i) :
218+
s.piecewise (f₁⁻¹) (g₁⁻¹) = (s.piecewise f₁ g₁)⁻¹ :=
219+
s.piecewise_op f₁ g₁ (λ _ x, x⁻¹)
220+
221+
@[to_additive]
222+
lemma pi.piecewise_div [Π i, has_div (f i)] (s : set I) [Π i, decidable (i ∈ s)]
223+
(f₁ f₂ g₁ g₂ : Π i, f i) :
224+
s.piecewise (f₁ / f₂) (g₁ / g₂) = s.piecewise f₁ g₁ / s.piecewise f₂ g₂ :=
225+
s.piecewise_op₂ _ _ _ _ (λ _, (/))
226+
227+
end piecewise

src/data/indicator_function.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ by rw [← mul_indicator_mul_indicator, mul_indicator_mul_support]
138138

139139
@[to_additive] lemma comp_mul_indicator (h : M → β) (f : α → M) {s : set α} {x : α} :
140140
h (s.mul_indicator f x) = s.piecewise (h ∘ f) (const α (h 1)) x :=
141-
s.comp_piecewise h
141+
s.apply_piecewise _ _ (λ _, h)
142142

143143
@[to_additive] lemma mul_indicator_comp_right {s : set α} (f : β → α) {g : α → M} {x : β} :
144144
mul_indicator (f ⁻¹' s) (g ∘ f) x = mul_indicator s g (f x) :=

src/data/set/function.lean

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,22 @@ lemma piecewise_eq_on (f g : α → β) : eq_on (s.piecewise f g) f s :=
666666
lemma piecewise_eq_on_compl (f g : α → β) : eq_on (s.piecewise f g) g sᶜ :=
667667
λ _, piecewise_eq_of_not_mem _ _ _
668668

669+
lemma piecewise_le {δ : α → Type*} [Π i, preorder (δ i)] {s : set α} [Π j, decidable (j ∈ s)]
670+
{f₁ f₂ g : Π i, δ i} (h₁ : ∀ i ∈ s, f₁ i ≤ g i) (h₂ : ∀ i ∉ s, f₂ i ≤ g i) :
671+
s.piecewise f₁ f₂ ≤ g :=
672+
λ i, if h : i ∈ s then by simp * else by simp *
673+
674+
lemma le_piecewise {δ : α → Type*} [Π i, preorder (δ i)] {s : set α} [Π j, decidable (j ∈ s)]
675+
{f₁ f₂ g : Π i, δ i} (h₁ : ∀ i ∈ s, g i ≤ f₁ i) (h₂ : ∀ i ∉ s, g i ≤ f₂ i) :
676+
g ≤ s.piecewise f₁ f₂ :=
677+
@piecewise_le α (λ i, order_dual (δ i)) _ s _ _ _ _ h₁ h₂
678+
679+
lemma piecewise_le_piecewise {δ : α → Type*} [Π i, preorder (δ i)] {s : set α}
680+
[Π j, decidable (j ∈ s)] {f₁ f₂ g₁ g₂ : Π i, δ i} (h₁ : ∀ i ∈ s, f₁ i ≤ g₁ i)
681+
(h₂ : ∀ i ∉ s, f₂ i ≤ g₂ i) :
682+
s.piecewise f₁ f₂ ≤ s.piecewise g₁ g₂ :=
683+
by apply piecewise_le; intros; simp *
684+
669685
@[simp, priority 990]
670686
lemma piecewise_insert_of_ne {i j : α} (h : i ≠ j) [∀i, decidable (i ∈ insert j s)] :
671687
(insert j s).piecewise f g i = s.piecewise f g i :=
@@ -710,10 +726,25 @@ lemma piecewise_preimage (f g : α → β) (t) :
710726
s.piecewise f g ⁻¹' t = s.ite (f ⁻¹' t) (g ⁻¹' t) :=
711727
ext $ λ x, by by_cases x ∈ s; simp [*, set.ite]
712728

713-
lemma comp_piecewise (h : β → γ) {f g : α → β} {x : α} :
714-
h (s.piecewise f g x) = s.piecewise (h ∘ f) (h ∘ g) x :=
729+
lemma apply_piecewise {δ' : α → Sort*} (h : Π i, δ i → δ' i) {x : α} :
730+
h x (s.piecewise f g x) = s.piecewise (λ x, h x (f x)) (λ x, h x (g x)) x :=
731+
by by_cases hx : x ∈ s; simp [hx]
732+
733+
lemma apply_piecewise₂ {δ' δ'' : α → Sort*} (f' g' : Π i, δ' i) (h : Π i, δ i → δ' i → δ'' i)
734+
{x : α} :
735+
h x (s.piecewise f g x) (s.piecewise f' g' x) =
736+
s.piecewise (λ x, h x (f x) (f' x)) (λ x, h x (g x) (g' x)) x :=
715737
by by_cases hx : x ∈ s; simp [hx]
716738

739+
lemma piecewise_op {δ' : α → Sort*} (h : Π i, δ i → δ' i) :
740+
s.piecewise (λ x, h x (f x)) (λ x, h x (g x)) = λ x, h x (s.piecewise f g x) :=
741+
funext $ λ x, (apply_piecewise _ _ _ _).symm
742+
743+
lemma piecewise_op₂ {δ' δ'' : α → Sort*} (f' g' : Π i, δ' i) (h : Π i, δ i → δ' i → δ'' i) :
744+
s.piecewise (λ x, h x (f x) (f' x)) (λ x, h x (g x) (g' x)) =
745+
λ x, h x (s.piecewise f g x) (s.piecewise f' g' x) :=
746+
funext $ λ x, (apply_piecewise₂ _ _ _ _ _ _).symm
747+
717748
@[simp] lemma piecewise_same : s.piecewise f f = f :=
718749
by { ext x, by_cases hx : x ∈ s; simp [hx] }
719750

src/data/set/intervals/pi.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ ext $ λ y, by simp [pi.le_def]
3131
@[simp] lemma pi_univ_Icc : pi univ (λ i, Icc (x i) (y i)) = Icc x y :=
3232
ext $ λ y, by simp [pi.le_def, forall_and_distrib]
3333

34+
lemma piecewise_mem_Icc {s : set ι} [Π j, decidable (j ∈ s)] {f₁ f₂ g₁ g₂ : Π i, α i}
35+
(h₁ : ∀ i ∈ s, f₁ i ∈ Icc (g₁ i) (g₂ i)) (h₂ : ∀ i ∉ s, f₂ i ∈ Icc (g₁ i) (g₂ i)) :
36+
s.piecewise f₁ f₂ ∈ Icc g₁ g₂ :=
37+
⟨le_piecewise (λ i hi, (h₁ i hi).1) (λ i hi, (h₂ i hi).1),
38+
piecewise_le (λ i hi, (h₁ i hi).2) (λ i hi, (h₂ i hi).2)⟩
39+
40+
lemma piecewise_mem_Icc' {s : set ι} [Π j, decidable (j ∈ s)] {f₁ f₂ g₁ g₂ : Π i, α i}
41+
(h₁ : f₁ ∈ Icc g₁ g₂) (h₂ : f₂ ∈ Icc g₁ g₂) :
42+
s.piecewise f₁ f₂ ∈ Icc g₁ g₂ :=
43+
piecewise_mem_Icc (λ i hi, ⟨h₁.1 _, h₁.2 _⟩) (λ i hi, ⟨h₂.1 _, h₂.2 _⟩)
44+
3445
section nonempty
3546

3647
variable [nonempty ι]

0 commit comments

Comments
 (0)