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

Commit 84c0132

Browse files
committed
chore(data/indicator_function): a few more simp lemmas (#5293)
* drop `indicator_of_support_subset` in favor of the new `indicator_eq_self`; * add a few more lemmas: `indicator_apply_eq_self`, `indicator_apply_eq_zero`, `indicator_eq_zero`, `indicator_eq_zero'`
1 parent bf25d26 commit 84c0132

File tree

4 files changed

+26
-19
lines changed

4 files changed

+26
-19
lines changed

src/data/indicator_function.lean

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,23 @@ lemma eq_on_indicator : eq_on (indicator s f) f s := λ x hx, indicator_of_mem h
6363
lemma support_indicator : function.support (s.indicator f) ⊆ s :=
6464
λ x hx, hx.imp_symm (λ h, indicator_of_not_mem h f)
6565

66-
lemma indicator_of_support_subset (h : support f ⊆ s) : s.indicator f = f :=
67-
begin
68-
ext x,
69-
by_cases hx : f x = 0,
70-
{ rw hx,
71-
by_contradiction H,
72-
have := mem_of_indicator_ne_zero H,
73-
rw [indicator_of_mem this f, hx] at H,
74-
exact H rfl },
75-
{ exact indicator_of_mem (h hx) f }
76-
end
66+
@[simp] lemma indicator_apply_eq_self : s.indicator f a = f a ↔ (a ∉ s → f a = 0) :=
67+
ite_eq_left_iff.trans $ by rw [@eq_comm _ (f a)]
68+
69+
@[simp] lemma indicator_eq_self : s.indicator f = f ↔ support f ⊆ s :=
70+
by simp only [funext_iff, subset_def, mem_support, indicator_apply_eq_self, not_imp_comm]
7771

7872
@[simp] lemma indicator_support : (support f).indicator f = f :=
79-
indicator_of_support_subset $ subset.refl _
73+
indicator_eq_self.2 $ subset.refl _
74+
75+
@[simp] lemma indicator_apply_eq_zero : indicator s f a = 0 ↔ (a ∈ s → f a = 0) :=
76+
ite_eq_right_iff
77+
78+
@[simp] lemma indicator_eq_zero : indicator s f = (λ x, 0) ↔ disjoint (support f) s :=
79+
by simp only [funext_iff, indicator_apply_eq_zero, set.disjoint_left, mem_support, not_imp_not]
80+
81+
@[simp] lemma indicator_eq_zero' : indicator s f = 0 ↔ disjoint (support f) s :=
82+
indicator_eq_zero
8083

8184
@[simp] lemma indicator_range_comp {ι : Sort*} (f : ι → α) (g : α → β) :
8285
indicator (range f) g ∘ f = g ∘ f :=
@@ -86,22 +89,23 @@ lemma indicator_congr (h : ∀ a ∈ s, f a = g a) : indicator s f = indicator s
8689
funext $ λx, by { simp only [indicator], split_ifs, { exact h _ h_1 }, refl }
8790

8891
@[simp] lemma indicator_univ (f : α → β) : indicator (univ : set α) f = f :=
89-
funext $ λx, indicator_of_mem (mem_univ _) f
92+
indicator_eq_self.2 $ subset_univ _
9093

9194
@[simp] lemma indicator_empty (f : α → β) : indicator (∅ : set α) f = λa, 0 :=
92-
funext $ λx, indicator_of_not_mem (not_mem_empty _) f
95+
indicator_eq_zero.2 $ disjoint_empty _
9396

9497
variable (β)
9598

9699
@[simp] lemma indicator_zero (s : set α) : indicator s (λx, (0:β)) = λx, (0:β) :=
97-
funext $ λx, by { simp only [indicator], split_ifs, refl, refl }
100+
indicator_eq_zero.2 $ by simp only [support_zero, empty_disjoint]
98101

99102
@[simp] lemma indicator_zero' {s : set α} : s.indicator (0 : α → β) = 0 :=
100103
indicator_zero β s
101104

102105
variable {β}
103106

104-
lemma indicator_indicator (s t : set α) (f : α → β) : indicator s (indicator t f) = indicator (s ∩ t) f :=
107+
lemma indicator_indicator (s t : set α) (f : α → β) :
108+
indicator s (indicator t f) = indicator (s ∩ t) f :=
105109
funext $ λx, by { simp only [indicator], split_ifs, repeat {simp * at * {contextual := tt}} }
106110

107111
lemma comp_indicator (h : β → γ) (f : α → β) {s : set α} {x : α} :

src/data/set/function.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,10 @@ by simp [piecewise, hi]
580580
lemma piecewise_eq_of_not_mem {i : α} (hi : i ∉ s) : s.piecewise f g i = g i :=
581581
by simp [piecewise, hi]
582582

583+
lemma piecewise_singleton (x : α) [Π y, decidable (y ∈ ({x} : set α))] [decidable_eq α]
584+
(f g : α → β) : piecewise {x} f g = function.update g x (f x) :=
585+
by { ext y, by_cases hy : y = x, { subst y, simp }, { simp [hy] } }
586+
583587
lemma piecewise_eq_on (f g : α → β) : eq_on (s.piecewise f g) f s :=
584588
λ _, piecewise_eq_of_mem _ _ _
585589

src/measure_theory/interval_integral.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,7 @@ lemma integral_eq_integral_of_support_subset {f : α → E} {a b} (h : function.
461461
begin
462462
by_cases hfm : measurable f,
463463
{ cases le_total a b with hab hab,
464-
{ rw [integral_of_le hab, ← integral_indicator hfm is_measurable_Ioc,
465-
indicator_of_support_subset h] },
464+
{ rw [integral_of_le hab, ← integral_indicator hfm is_measurable_Ioc, indicator_eq_self.2 h] },
466465
{ rw [Ioc_eq_empty hab, subset_empty_iff, function.support_eq_empty_iff] at h,
467466
simp [h] } },
468467
{ rw [integral_non_measurable hfm, measure_theory.integral_non_measurable hfm] },

src/measure_theory/set_integral.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ lemma continuous.integrable_of_compact_closure_support
470470
(hfc : is_compact (closure $ support f)) :
471471
integrable f μ :=
472472
begin
473-
rw [← indicator_of_support_subset (@subset_closure _ _ (support f)),
473+
rw [← indicator_eq_self.2 (@subset_closure _ _ (support f)),
474474
integrable_indicator_iff hf.measurable is_closed_closure.is_measurable],
475475
exact hf.integrable_on_compact hfc
476476
end

0 commit comments

Comments
 (0)