algebra.indicator_function
⟷
Mathlib.Algebra.Function.Indicator
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -407,8 +407,7 @@ theorem mulIndicator_preimage_of_not_mem (s : Set α) (f : α → M) {t : Set M}
@[to_additive]
theorem mem_range_mulIndicator {r : M} {s : Set α} {f : α → M} :
r ∈ range (mulIndicator s f) ↔ r = 1 ∧ s ≠ univ ∨ r ∈ f '' s := by
- simp [mul_indicator, ite_eq_iff, exists_or, eq_univ_iff_forall, and_comm', or_comm',
- @eq_comm _ r 1]
+ simp [mul_indicator, ite_eq_iff, exists_or, eq_univ_iff_forall, and_comm, or_comm, @eq_comm _ r 1]
#align set.mem_range_mul_indicator Set.mem_range_mulIndicator
#align set.mem_range_indicator Set.mem_range_indicator
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2020 Zhouhang Zhou. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Zhouhang Zhou
-/
-import Algebra.Support
+import Algebra.Function.Support
#align_import algebra.indicator_function from "leanprover-community/mathlib"@"327c3c0d9232d80e250dc8f65e7835b82b266ea5"
@@ -884,7 +884,7 @@ theorem mulIndicator_apply_le' (hfg : a ∈ s → f a ≤ y) (hg : a ∉ s → 1
#align set.indicator_apply_le' Set.indicator_apply_le'
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (a «expr ∉ » s) -/
#print Set.mulIndicator_le' /-
@[to_additive]
theorem mulIndicator_le' (hfg : ∀ a ∈ s, f a ≤ g a) (hg : ∀ (a) (_ : a ∉ s), 1 ≤ g a) :
@@ -902,7 +902,7 @@ theorem le_mulIndicator_apply {y} (hfg : a ∈ s → y ≤ g a) (hf : a ∉ s
#align set.le_indicator_apply Set.le_indicator_apply
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (a «expr ∉ » s) -/
#print Set.le_mulIndicator /-
@[to_additive]
theorem le_mulIndicator (hfg : ∀ a ∈ s, f a ≤ g a) (hf : ∀ (a) (_ : a ∉ s), f a ≤ 1) :
@@ -968,7 +968,7 @@ theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤
#align set.indicator_le_indicator_of_subset Set.indicator_le_indicator_of_subset
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x «expr ∉ » s) -/
#print Set.mulIndicator_le_self' /-
@[to_additive]
theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndicator s f ≤ f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -985,12 +985,12 @@ theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥
by
by_cases hx : x ∈ ⋃ i, s i
· rw [mul_indicator_of_mem hx]
- rw [mem_Union] at hx
+ rw [mem_Union] at hx
refine' le_antisymm _ (iSup_le fun i => mul_indicator_le_self' (fun x hx => h1 ▸ bot_le) x)
rcases hx with ⟨i, hi⟩
exact le_iSup_of_le i (ge_of_eq <| mul_indicator_of_mem hi _)
· rw [mul_indicator_of_not_mem hx]
- simp only [mem_Union, not_exists] at hx
+ simp only [mem_Union, not_exists] at hx
simp [hx, ← h1]
#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_apply
#align set.indicator_Union_apply Set.indicator_iUnion_apply
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -356,7 +356,10 @@ theorem mulIndicator_preimage (s : Set α) (f : α → M) (B : Set M) :
#print Set.mulIndicator_one_preimage /-
@[to_additive]
theorem mulIndicator_one_preimage (s : Set M) :
- t.mulIndicator 1 ⁻¹' s ∈ ({Set.univ, ∅} : Set (Set α)) := by classical
+ t.mulIndicator 1 ⁻¹' s ∈ ({Set.univ, ∅} : Set (Set α)) := by
+ classical
+ rw [mul_indicator_one', preimage_one]
+ split_ifs <;> simp
#align set.mul_indicator_one_preimage Set.mulIndicator_one_preimage
#align set.indicator_zero_preimage Set.indicator_zero_preimage
-/
@@ -376,7 +379,10 @@ theorem mulIndicator_const_preimage_eq_union (U : Set α) (s : Set M) (a : M) [D
#print Set.mulIndicator_const_preimage /-
@[to_additive]
theorem mulIndicator_const_preimage (U : Set α) (s : Set M) (a : M) :
- (U.mulIndicator fun x => a) ⁻¹' s ∈ ({Set.univ, U, Uᶜ, ∅} : Set (Set α)) := by classical
+ (U.mulIndicator fun x => a) ⁻¹' s ∈ ({Set.univ, U, Uᶜ, ∅} : Set (Set α)) := by
+ classical
+ rw [mul_indicator_const_preimage_eq_union]
+ split_ifs <;> simp
#align set.mul_indicator_const_preimage Set.mulIndicator_const_preimage
#align set.indicator_const_preimage Set.indicator_const_preimage
-/
@@ -755,7 +761,19 @@ theorem mulIndicator_prod (I : Finset ι) (s : Set α) (f : ι → α → M) :
theorem mulIndicator_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
(∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) →
mulIndicator (⋃ i ∈ I, s i) f = fun a => ∏ i in I, mulIndicator (s i) f a :=
- by classical
+ by
+ classical
+ refine' Finset.induction_on I _ _
+ · intro h; funext; simp
+ intro a I haI ih hI
+ funext
+ rw [Finset.prod_insert haI, Finset.set_biUnion_insert, mul_indicator_union_of_not_mem_inter, ih _]
+ · intro i hi j hj hij
+ exact hI i (Finset.mem_insert_of_mem hi) j (Finset.mem_insert_of_mem hj) hij
+ simp only [not_exists, exists_prop, mem_Union, mem_inter_iff, not_and]
+ intro hx a' ha'
+ refine' disjoint_left.1 (hI a (Finset.mem_insert_self _ _) a' (Finset.mem_insert_of_mem ha') _) hx
+ exact (ne_of_mem_of_not_mem ha' haI).symm
#align set.mul_indicator_finset_bUnion Finset.mulIndicator_biUnion
#align set.indicator_finset_bUnion Finset.indicator_biUnion
-/
@@ -820,7 +838,8 @@ theorem inter_indicator_one {s t : Set α} :
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
#print Set.indicator_prod_one /-
theorem indicator_prod_one {s : Set α} {t : Set β} {x : α} {y : β} :
- (s ×ˢ t).indicator (1 : _ → M) (x, y) = s.indicator 1 x * t.indicator 1 y := by classical
+ (s ×ˢ t).indicator (1 : _ → M) (x, y) = s.indicator 1 x * t.indicator 1 y := by
+ classical simp [indicator_apply, ← ite_and]
#align set.indicator_prod_one Set.indicator_prod_one
-/
@@ -828,13 +847,13 @@ variable (M) [Nontrivial M]
#print Set.indicator_eq_zero_iff_not_mem /-
theorem indicator_eq_zero_iff_not_mem {U : Set α} {x : α} : indicator U 1 x = (0 : M) ↔ x ∉ U := by
- classical
+ classical simp [indicator_apply, imp_false]
#align set.indicator_eq_zero_iff_not_mem Set.indicator_eq_zero_iff_not_mem
-/
#print Set.indicator_eq_one_iff_mem /-
theorem indicator_eq_one_iff_mem {U : Set α} {x : α} : indicator U 1 x = (1 : M) ↔ x ∈ U := by
- classical
+ classical simp [indicator_apply, imp_false]
#align set.indicator_eq_one_iff_mem Set.indicator_eq_one_iff_mem
-/
@@ -1017,6 +1036,12 @@ theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set
by
intro x
classical
+ simp_rw [indicator_apply]
+ split_ifs
+ · exact le_rfl
+ · exact (not_le.mp h_1).le
+ · exact h_1
+ · exact le_rfl
#align set.indicator_le_indicator_nonneg Set.indicator_le_indicator_nonneg
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -356,10 +356,7 @@ theorem mulIndicator_preimage (s : Set α) (f : α → M) (B : Set M) :
#print Set.mulIndicator_one_preimage /-
@[to_additive]
theorem mulIndicator_one_preimage (s : Set M) :
- t.mulIndicator 1 ⁻¹' s ∈ ({Set.univ, ∅} : Set (Set α)) := by
- classical
- rw [mul_indicator_one', preimage_one]
- split_ifs <;> simp
+ t.mulIndicator 1 ⁻¹' s ∈ ({Set.univ, ∅} : Set (Set α)) := by classical
#align set.mul_indicator_one_preimage Set.mulIndicator_one_preimage
#align set.indicator_zero_preimage Set.indicator_zero_preimage
-/
@@ -379,10 +376,7 @@ theorem mulIndicator_const_preimage_eq_union (U : Set α) (s : Set M) (a : M) [D
#print Set.mulIndicator_const_preimage /-
@[to_additive]
theorem mulIndicator_const_preimage (U : Set α) (s : Set M) (a : M) :
- (U.mulIndicator fun x => a) ⁻¹' s ∈ ({Set.univ, U, Uᶜ, ∅} : Set (Set α)) := by
- classical
- rw [mul_indicator_const_preimage_eq_union]
- split_ifs <;> simp
+ (U.mulIndicator fun x => a) ⁻¹' s ∈ ({Set.univ, U, Uᶜ, ∅} : Set (Set α)) := by classical
#align set.mul_indicator_const_preimage Set.mulIndicator_const_preimage
#align set.indicator_const_preimage Set.indicator_const_preimage
-/
@@ -761,19 +755,7 @@ theorem mulIndicator_prod (I : Finset ι) (s : Set α) (f : ι → α → M) :
theorem mulIndicator_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
(∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) →
mulIndicator (⋃ i ∈ I, s i) f = fun a => ∏ i in I, mulIndicator (s i) f a :=
- by
- classical
- refine' Finset.induction_on I _ _
- · intro h; funext; simp
- intro a I haI ih hI
- funext
- rw [Finset.prod_insert haI, Finset.set_biUnion_insert, mul_indicator_union_of_not_mem_inter, ih _]
- · intro i hi j hj hij
- exact hI i (Finset.mem_insert_of_mem hi) j (Finset.mem_insert_of_mem hj) hij
- simp only [not_exists, exists_prop, mem_Union, mem_inter_iff, not_and]
- intro hx a' ha'
- refine' disjoint_left.1 (hI a (Finset.mem_insert_self _ _) a' (Finset.mem_insert_of_mem ha') _) hx
- exact (ne_of_mem_of_not_mem ha' haI).symm
+ by classical
#align set.mul_indicator_finset_bUnion Finset.mulIndicator_biUnion
#align set.indicator_finset_bUnion Finset.indicator_biUnion
-/
@@ -838,8 +820,7 @@ theorem inter_indicator_one {s t : Set α} :
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
#print Set.indicator_prod_one /-
theorem indicator_prod_one {s : Set α} {t : Set β} {x : α} {y : β} :
- (s ×ˢ t).indicator (1 : _ → M) (x, y) = s.indicator 1 x * t.indicator 1 y := by
- classical simp [indicator_apply, ← ite_and]
+ (s ×ˢ t).indicator (1 : _ → M) (x, y) = s.indicator 1 x * t.indicator 1 y := by classical
#align set.indicator_prod_one Set.indicator_prod_one
-/
@@ -847,13 +828,13 @@ variable (M) [Nontrivial M]
#print Set.indicator_eq_zero_iff_not_mem /-
theorem indicator_eq_zero_iff_not_mem {U : Set α} {x : α} : indicator U 1 x = (0 : M) ↔ x ∉ U := by
- classical simp [indicator_apply, imp_false]
+ classical
#align set.indicator_eq_zero_iff_not_mem Set.indicator_eq_zero_iff_not_mem
-/
#print Set.indicator_eq_one_iff_mem /-
theorem indicator_eq_one_iff_mem {U : Set α} {x : α} : indicator U 1 x = (1 : M) ↔ x ∈ U := by
- classical simp [indicator_apply, imp_false]
+ classical
#align set.indicator_eq_one_iff_mem Set.indicator_eq_one_iff_mem
-/
@@ -1036,12 +1017,6 @@ theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set
by
intro x
classical
- simp_rw [indicator_apply]
- split_ifs
- · exact le_rfl
- · exact (not_le.mp h_1).le
- · exact h_1
- · exact le_rfl
#align set.indicator_le_indicator_nonneg Set.indicator_le_indicator_nonneg
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -686,7 +686,7 @@ section CommMonoid
variable [CommMonoid M]
-#print Set.prod_mulIndicator_subset_of_eq_one /-
+#print Finset.prod_mulIndicator_subset_of_eq_one /-
/-- Consider a product of `g i (f i)` over a `finset`. Suppose `g` is a
function such as `pow`, which maps a second argument of `1` to
`1`. Then if `f` is replaced by the corresponding multiplicative indicator
@@ -706,8 +706,8 @@ theorem prod_mulIndicator_subset_of_eq_one [One N] (f : α → N) (g : α → N
· refine' fun i hi hn => _
convert hg i
exact mul_indicator_of_not_mem hn _
-#align set.prod_mul_indicator_subset_of_eq_one Set.prod_mulIndicator_subset_of_eq_one
-#align set.sum_indicator_subset_of_eq_zero Set.sum_indicator_subset_of_eq_zero
+#align set.prod_mul_indicator_subset_of_eq_one Finset.prod_mulIndicator_subset_of_eq_one
+#align set.sum_indicator_subset_of_eq_zero Finset.sum_indicator_subset_of_eq_zero
-/
/-- Consider a sum of `g i (f i)` over a `finset`. Suppose `g` is a
@@ -717,9 +717,9 @@ function such as multiplication, which maps a second argument of 0 to
function `h`.) Then if `f` is replaced by the corresponding indicator
function, the `finset` may be replaced by a possibly larger `finset`
without changing the value of the sum. -/
-add_decl_doc Set.sum_indicator_subset_of_eq_zero
+add_decl_doc Finset.sum_indicator_subset_of_eq_zero
-#print Set.prod_mulIndicator_subset /-
+#print Finset.prod_mulIndicator_subset /-
/-- Taking the product of an indicator function over a possibly larger `finset` is the same as
taking the original function over the original `finset`. -/
@[to_additive
@@ -727,8 +727,8 @@ taking the original function over the original `finset`. -/
theorem prod_mulIndicator_subset (f : α → M) {s t : Finset α} (h : s ⊆ t) :
∏ i in s, f i = ∏ i in t, mulIndicator (↑s) f i :=
prod_mulIndicator_subset_of_eq_one _ (fun a b => b) h fun _ => rfl
-#align set.prod_mul_indicator_subset Set.prod_mulIndicator_subset
-#align set.sum_indicator_subset Set.sum_indicator_subset
+#align set.prod_mul_indicator_subset Finset.prod_mulIndicator_subset
+#align set.sum_indicator_subset Finset.sum_indicator_subset
-/
#print Finset.prod_mulIndicator_eq_prod_filter /-
@@ -747,18 +747,18 @@ theorem Finset.prod_mulIndicator_eq_prod_filter (s : Finset ι) (f : ι → α
#align finset.sum_indicator_eq_sum_filter Finset.sum_indicator_eq_sum_filter
-/
-#print Set.mulIndicator_finset_prod /-
+#print Finset.mulIndicator_prod /-
@[to_additive]
-theorem mulIndicator_finset_prod (I : Finset ι) (s : Set α) (f : ι → α → M) :
+theorem mulIndicator_prod (I : Finset ι) (s : Set α) (f : ι → α → M) :
mulIndicator s (∏ i in I, f i) = ∏ i in I, mulIndicator s (f i) :=
(mulIndicatorHom M s).map_prod _ _
-#align set.mul_indicator_finset_prod Set.mulIndicator_finset_prod
-#align set.indicator_finset_sum Set.indicator_finset_sum
+#align set.mul_indicator_finset_prod Finset.mulIndicator_prod
+#align set.indicator_finset_sum Finset.indicator_sum
-/
-#print Set.mulIndicator_finset_biUnion /-
+#print Finset.mulIndicator_biUnion /-
@[to_additive]
-theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
+theorem mulIndicator_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
(∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) →
mulIndicator (⋃ i ∈ I, s i) f = fun a => ∏ i in I, mulIndicator (s i) f a :=
by
@@ -774,18 +774,18 @@ theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f
intro hx a' ha'
refine' disjoint_left.1 (hI a (Finset.mem_insert_self _ _) a' (Finset.mem_insert_of_mem ha') _) hx
exact (ne_of_mem_of_not_mem ha' haI).symm
-#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_biUnion
-#align set.indicator_finset_bUnion Set.indicator_finset_biUnion
+#align set.mul_indicator_finset_bUnion Finset.mulIndicator_biUnion
+#align set.indicator_finset_bUnion Finset.indicator_biUnion
-/
-#print Set.mulIndicator_finset_biUnion_apply /-
+#print Finset.mulIndicator_biUnion_apply /-
@[to_additive]
-theorem mulIndicator_finset_biUnion_apply {ι} (I : Finset ι) (s : ι → Set α) {f : α → M}
+theorem mulIndicator_biUnion_apply {ι} (I : Finset ι) (s : ι → Set α) {f : α → M}
(h : ∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) (x : α) :
mulIndicator (⋃ i ∈ I, s i) f x = ∏ i in I, mulIndicator (s i) f x := by
- rw [Set.mulIndicator_finset_biUnion I s h]
-#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_biUnion_apply
-#align set.indicator_finset_bUnion_apply Set.indicator_finset_biUnion_apply
+ rw [Finset.mulIndicator_biUnion I s h]
+#align set.mul_indicator_finset_bUnion_apply Finset.mulIndicator_biUnion_apply
+#align set.indicator_finset_bUnion_apply Finset.indicator_biUnion_apply
-/
end CommMonoid
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -998,9 +998,9 @@ theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥
end Order
-section CanonicallyOrderedCommMonoid
+section CanonicallyOrderedAddCommMonoid
-variable [CanonicallyOrderedCommMonoid M]
+variable [CanonicallyOrderedAddCommMonoid M]
#print Set.mulIndicator_le_self /-
@[to_additive]
@@ -1028,7 +1028,7 @@ theorem mulIndicator_le {s : Set α} {f g : α → M} (hfg : ∀ a ∈ s, f a
#align set.indicator_le Set.indicator_le
-/
-end CanonicallyOrderedCommMonoid
+end CanonicallyOrderedAddCommMonoid
#print Set.indicator_le_indicator_nonneg /-
theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -998,9 +998,9 @@ theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥
end Order
-section CanonicallyOrderedMonoid
+section CanonicallyOrderedCommMonoid
-variable [CanonicallyOrderedMonoid M]
+variable [CanonicallyOrderedCommMonoid M]
#print Set.mulIndicator_le_self /-
@[to_additive]
@@ -1028,7 +1028,7 @@ theorem mulIndicator_le {s : Set α} {f g : α → M} (hfg : ∀ a ∈ s, f a
#align set.indicator_le Set.indicator_le
-/
-end CanonicallyOrderedMonoid
+end CanonicallyOrderedCommMonoid
#print Set.indicator_le_indicator_nonneg /-
theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright (c) 2020 Zhouhang Zhou. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Zhouhang Zhou
-/
-import Mathbin.Algebra.Support
+import Algebra.Support
#align_import algebra.indicator_function from "leanprover-community/mathlib"@"327c3c0d9232d80e250dc8f65e7835b82b266ea5"
@@ -884,7 +884,7 @@ theorem mulIndicator_apply_le' (hfg : a ∈ s → f a ≤ y) (hg : a ∉ s → 1
#align set.indicator_apply_le' Set.indicator_apply_le'
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a «expr ∉ » s) -/
#print Set.mulIndicator_le' /-
@[to_additive]
theorem mulIndicator_le' (hfg : ∀ a ∈ s, f a ≤ g a) (hg : ∀ (a) (_ : a ∉ s), 1 ≤ g a) :
@@ -902,7 +902,7 @@ theorem le_mulIndicator_apply {y} (hfg : a ∈ s → y ≤ g a) (hf : a ∉ s
#align set.le_indicator_apply Set.le_indicator_apply
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a «expr ∉ » s) -/
#print Set.le_mulIndicator /-
@[to_additive]
theorem le_mulIndicator (hfg : ∀ a ∈ s, f a ≤ g a) (hf : ∀ (a) (_ : a ∉ s), f a ≤ 1) :
@@ -968,7 +968,7 @@ theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤
#align set.indicator_le_indicator_of_subset Set.indicator_le_indicator_of_subset
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x «expr ∉ » s) -/
#print Set.mulIndicator_le_self' /-
@[to_additive]
theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndicator s f ≤ f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
Copyright (c) 2020 Zhouhang Zhou. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Zhouhang Zhou
-
-! This file was ported from Lean 3 source module algebra.indicator_function
-! leanprover-community/mathlib commit 327c3c0d9232d80e250dc8f65e7835b82b266ea5
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.Support
+#align_import algebra.indicator_function from "leanprover-community/mathlib"@"327c3c0d9232d80e250dc8f65e7835b82b266ea5"
+
/-!
# Indicator function
@@ -887,7 +884,7 @@ theorem mulIndicator_apply_le' (hfg : a ∈ s → f a ≤ y) (hg : a ∉ s → 1
#align set.indicator_apply_le' Set.indicator_apply_le'
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
#print Set.mulIndicator_le' /-
@[to_additive]
theorem mulIndicator_le' (hfg : ∀ a ∈ s, f a ≤ g a) (hg : ∀ (a) (_ : a ∉ s), 1 ≤ g a) :
@@ -905,7 +902,7 @@ theorem le_mulIndicator_apply {y} (hfg : a ∈ s → y ≤ g a) (hf : a ∉ s
#align set.le_indicator_apply Set.le_indicator_apply
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
#print Set.le_mulIndicator /-
@[to_additive]
theorem le_mulIndicator (hfg : ∀ a ∈ s, f a ≤ g a) (hf : ∀ (a) (_ : a ∉ s), f a ≤ 1) :
@@ -971,7 +968,7 @@ theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤
#align set.indicator_le_indicator_of_subset Set.indicator_le_indicator_of_subset
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x «expr ∉ » s) -/
#print Set.mulIndicator_le_self' /-
@[to_additive]
theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndicator s f ≤ f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -69,32 +69,41 @@ noncomputable def mulIndicator (s : Set α) (f : α → M) : α → M
#align set.indicator Set.indicator
-/
+#print Set.piecewise_eq_mulIndicator /-
@[simp, to_additive]
theorem piecewise_eq_mulIndicator [DecidablePred (· ∈ s)] : s.piecewise f 1 = s.mulIndicator f :=
funext fun x => @if_congr _ _ _ _ (id _) _ _ _ _ Iff.rfl rfl rfl
#align set.piecewise_eq_mul_indicator Set.piecewise_eq_mulIndicator
#align set.piecewise_eq_indicator Set.piecewise_eq_indicator
+-/
+#print Set.mulIndicator_apply /-
@[to_additive]
theorem mulIndicator_apply (s : Set α) (f : α → M) (a : α) [Decidable (a ∈ s)] :
mulIndicator s f a = if a ∈ s then f a else 1 := by convert rfl
#align set.mul_indicator_apply Set.mulIndicator_apply
#align set.indicator_apply Set.indicator_apply
+-/
+#print Set.mulIndicator_of_mem /-
@[simp, to_additive]
theorem mulIndicator_of_mem (h : a ∈ s) (f : α → M) : mulIndicator s f a = f a :=
letI := Classical.dec (a ∈ s)
if_pos h
#align set.mul_indicator_of_mem Set.mulIndicator_of_mem
#align set.indicator_of_mem Set.indicator_of_mem
+-/
+#print Set.mulIndicator_of_not_mem /-
@[simp, to_additive]
theorem mulIndicator_of_not_mem (h : a ∉ s) (f : α → M) : mulIndicator s f a = 1 :=
letI := Classical.dec (a ∈ s)
if_neg h
#align set.mul_indicator_of_not_mem Set.mulIndicator_of_not_mem
#align set.indicator_of_not_mem Set.indicator_of_not_mem
+-/
+#print Set.mulIndicator_eq_one_or_self /-
@[to_additive]
theorem mulIndicator_eq_one_or_self (s : Set α) (f : α → M) (a : α) :
mulIndicator s f a = 1 ∨ mulIndicator s f a = f a :=
@@ -104,6 +113,7 @@ theorem mulIndicator_eq_one_or_self (s : Set α) (f : α → M) (a : α) :
· exact Or.inl (mul_indicator_of_not_mem h f)
#align set.mul_indicator_eq_one_or_self Set.mulIndicator_eq_one_or_self
#align set.indicator_eq_zero_or_self Set.indicator_eq_zero_or_self
+-/
#print Set.mulIndicator_apply_eq_self /-
@[simp, to_additive]
@@ -114,17 +124,21 @@ theorem mulIndicator_apply_eq_self : s.mulIndicator f a = f a ↔ a ∉ s → f
#align set.indicator_apply_eq_self Set.indicator_apply_eq_self
-/
+#print Set.mulIndicator_eq_self /-
@[simp, to_additive]
theorem mulIndicator_eq_self : s.mulIndicator f = f ↔ mulSupport f ⊆ s := by
simp only [funext_iff, subset_def, mem_mul_support, mul_indicator_apply_eq_self, not_imp_comm]
#align set.mul_indicator_eq_self Set.mulIndicator_eq_self
#align set.indicator_eq_self Set.indicator_eq_self
+-/
+#print Set.mulIndicator_eq_self_of_superset /-
@[to_additive]
theorem mulIndicator_eq_self_of_superset (h1 : s.mulIndicator f = f) (h2 : s ⊆ t) :
t.mulIndicator f = f := by rw [mul_indicator_eq_self] at h1 ⊢; exact subset.trans h1 h2
#align set.mul_indicator_eq_self_of_superset Set.mulIndicator_eq_self_of_superset
#align set.indicator_eq_self_of_superset Set.indicator_eq_self_of_superset
+-/
#print Set.mulIndicator_apply_eq_one /-
@[simp, to_additive]
@@ -135,31 +149,39 @@ theorem mulIndicator_apply_eq_one : mulIndicator s f a = 1 ↔ a ∈ s → f a =
#align set.indicator_apply_eq_zero Set.indicator_apply_eq_zero
-/
+#print Set.mulIndicator_eq_one /-
@[simp, to_additive]
theorem mulIndicator_eq_one : (mulIndicator s f = fun x => 1) ↔ Disjoint (mulSupport f) s := by
simp only [funext_iff, mul_indicator_apply_eq_one, Set.disjoint_left, mem_mul_support,
not_imp_not]
#align set.mul_indicator_eq_one Set.mulIndicator_eq_one
#align set.indicator_eq_zero Set.indicator_eq_zero
+-/
+#print Set.mulIndicator_eq_one' /-
@[simp, to_additive]
theorem mulIndicator_eq_one' : mulIndicator s f = 1 ↔ Disjoint (mulSupport f) s :=
mulIndicator_eq_one
#align set.mul_indicator_eq_one' Set.mulIndicator_eq_one'
#align set.indicator_eq_zero' Set.indicator_eq_zero'
+-/
+#print Set.mulIndicator_apply_ne_one /-
@[to_additive]
theorem mulIndicator_apply_ne_one {a : α} : s.mulIndicator f a ≠ 1 ↔ a ∈ s ∩ mulSupport f := by
simp only [Ne.def, mul_indicator_apply_eq_one, not_imp, mem_inter_iff, mem_mul_support]
#align set.mul_indicator_apply_ne_one Set.mulIndicator_apply_ne_one
#align set.indicator_apply_ne_zero Set.indicator_apply_ne_zero
+-/
+#print Set.mulSupport_mulIndicator /-
@[simp, to_additive]
theorem mulSupport_mulIndicator :
Function.mulSupport (s.mulIndicator f) = s ∩ Function.mulSupport f :=
ext fun x => by simp [Function.mem_mulSupport, mul_indicator_apply_eq_one]
#align set.mul_support_mul_indicator Set.mulSupport_mulIndicator
#align set.support_indicator Set.support_indicator
+-/
#print Set.mem_of_mulIndicator_ne_one /-
/-- If a multiplicative indicator function is not equal to `1` at a point, then that point is in the
@@ -172,22 +194,28 @@ theorem mem_of_mulIndicator_ne_one (h : mulIndicator s f a ≠ 1) : a ∈ s :=
#align set.mem_of_indicator_ne_zero Set.mem_of_indicator_ne_zero
-/
+#print Set.eqOn_mulIndicator /-
@[to_additive]
theorem eqOn_mulIndicator : EqOn (mulIndicator s f) f s := fun x hx => mulIndicator_of_mem hx f
#align set.eq_on_mul_indicator Set.eqOn_mulIndicator
#align set.eq_on_indicator Set.eqOn_indicator
+-/
+#print Set.mulSupport_mulIndicator_subset /-
@[to_additive]
theorem mulSupport_mulIndicator_subset : mulSupport (s.mulIndicator f) ⊆ s := fun x hx =>
hx.imp_symm fun h => mulIndicator_of_not_mem h f
#align set.mul_support_mul_indicator_subset Set.mulSupport_mulIndicator_subset
#align set.support_indicator_subset Set.support_indicator_subset
+-/
+#print Set.mulIndicator_mulSupport /-
@[simp, to_additive]
theorem mulIndicator_mulSupport : mulIndicator (mulSupport f) f = f :=
mulIndicator_eq_self.2 Subset.rfl
#align set.mul_indicator_mul_support Set.mulIndicator_mulSupport
#align set.indicator_support Set.indicator_support
+-/
#print Set.mulIndicator_range_comp /-
@[simp, to_additive]
@@ -199,46 +227,59 @@ theorem mulIndicator_range_comp {ι : Sort _} (f : ι → α) (g : α → M) :
#align set.indicator_range_comp Set.indicator_range_comp
-/
+#print Set.mulIndicator_congr /-
@[to_additive]
theorem mulIndicator_congr (h : EqOn f g s) : mulIndicator s f = mulIndicator s g :=
funext fun x => by simp only [mul_indicator]; split_ifs; · exact h h_1; rfl
#align set.mul_indicator_congr Set.mulIndicator_congr
#align set.indicator_congr Set.indicator_congr
+-/
+#print Set.mulIndicator_univ /-
@[simp, to_additive]
theorem mulIndicator_univ (f : α → M) : mulIndicator (univ : Set α) f = f :=
mulIndicator_eq_self.2 <| subset_univ _
#align set.mul_indicator_univ Set.mulIndicator_univ
#align set.indicator_univ Set.indicator_univ
+-/
+#print Set.mulIndicator_empty /-
@[simp, to_additive]
theorem mulIndicator_empty (f : α → M) : mulIndicator (∅ : Set α) f = fun a => 1 :=
mulIndicator_eq_one.2 <| disjoint_empty _
#align set.mul_indicator_empty Set.mulIndicator_empty
#align set.indicator_empty Set.indicator_empty
+-/
+#print Set.mulIndicator_empty' /-
@[to_additive]
theorem mulIndicator_empty' (f : α → M) : mulIndicator (∅ : Set α) f = 1 :=
mulIndicator_empty f
#align set.mul_indicator_empty' Set.mulIndicator_empty'
#align set.indicator_empty' Set.indicator_empty'
+-/
variable (M)
+#print Set.mulIndicator_one /-
@[simp, to_additive]
theorem mulIndicator_one (s : Set α) : (mulIndicator s fun x => (1 : M)) = fun x => (1 : M) :=
mulIndicator_eq_one.2 <| by simp only [mul_support_one, empty_disjoint]
#align set.mul_indicator_one Set.mulIndicator_one
#align set.indicator_zero Set.indicator_zero
+-/
+#print Set.mulIndicator_one' /-
@[simp, to_additive]
theorem mulIndicator_one' {s : Set α} : s.mulIndicator (1 : α → M) = 1 :=
mulIndicator_one M s
#align set.mul_indicator_one' Set.mulIndicator_one'
#align set.indicator_zero' Set.indicator_zero'
+-/
variable {M}
+#print Set.mulIndicator_mulIndicator /-
@[to_additive]
theorem mulIndicator_mulIndicator (s t : Set α) (f : α → M) :
mulIndicator s (mulIndicator t f) = mulIndicator (s ∩ t) f :=
@@ -246,34 +287,43 @@ theorem mulIndicator_mulIndicator (s t : Set α) (f : α → M) :
repeat' simp_all (config := { contextual := true })
#align set.mul_indicator_mul_indicator Set.mulIndicator_mulIndicator
#align set.indicator_indicator Set.indicator_indicator
+-/
+#print Set.mulIndicator_inter_mulSupport /-
@[simp, to_additive]
theorem mulIndicator_inter_mulSupport (s : Set α) (f : α → M) :
mulIndicator (s ∩ mulSupport f) f = mulIndicator s f := by
rw [← mul_indicator_mul_indicator, mul_indicator_mul_support]
#align set.mul_indicator_inter_mul_support Set.mulIndicator_inter_mulSupport
#align set.indicator_inter_support Set.indicator_inter_support
+-/
+#print Set.comp_mulIndicator /-
@[to_additive]
theorem comp_mulIndicator (h : M → β) (f : α → M) {s : Set α} {x : α} [DecidablePred (· ∈ s)] :
h (s.mulIndicator f x) = s.piecewise (h ∘ f) (const α (h 1)) x := by
letI := Classical.decPred (· ∈ s) <;> convert s.apply_piecewise f (const α 1) fun _ => h
#align set.comp_mul_indicator Set.comp_mulIndicator
#align set.comp_indicator Set.comp_indicator
+-/
+#print Set.mulIndicator_comp_right /-
@[to_additive]
theorem mulIndicator_comp_right {s : Set α} (f : β → α) {g : α → M} {x : β} :
mulIndicator (f ⁻¹' s) (g ∘ f) x = mulIndicator s g (f x) := by simp only [mul_indicator];
split_ifs <;> rfl
#align set.mul_indicator_comp_right Set.mulIndicator_comp_right
#align set.indicator_comp_right Set.indicator_comp_right
+-/
+#print Set.mulIndicator_image /-
@[to_additive]
theorem mulIndicator_image {s : Set α} {f : β → M} {g : α → β} (hg : Injective g) {x : α} :
mulIndicator (g '' s) f (g x) = mulIndicator s (f ∘ g) x := by
rw [← mul_indicator_comp_right, preimage_image_eq _ hg]
#align set.mul_indicator_image Set.mulIndicator_image
#align set.indicator_image Set.indicator_image
+-/
#print Set.mulIndicator_comp_of_one /-
@[to_additive]
@@ -296,6 +346,7 @@ theorem comp_mulIndicator_const (c : M) (f : M → N) (hf : f 1 = 1) :
#align set.comp_indicator_const Set.comp_indicator_const
-/
+#print Set.mulIndicator_preimage /-
@[to_additive]
theorem mulIndicator_preimage (s : Set α) (f : α → M) (B : Set M) :
mulIndicator s f ⁻¹' B = s.ite (f ⁻¹' B) (1 ⁻¹' B) :=
@@ -303,6 +354,7 @@ theorem mulIndicator_preimage (s : Set α) (f : α → M) (B : Set M) :
piecewise_preimage s f 1 B
#align set.mul_indicator_preimage Set.mulIndicator_preimage
#align set.indicator_preimage Set.indicator_preimage
+-/
#print Set.mulIndicator_one_preimage /-
@[to_additive]
@@ -315,6 +367,7 @@ theorem mulIndicator_one_preimage (s : Set M) :
#align set.indicator_zero_preimage Set.indicator_zero_preimage
-/
+#print Set.mulIndicator_const_preimage_eq_union /-
@[to_additive]
theorem mulIndicator_const_preimage_eq_union (U : Set α) (s : Set M) (a : M) [Decidable (a ∈ s)]
[Decidable ((1 : M) ∈ s)] :
@@ -324,7 +377,9 @@ theorem mulIndicator_const_preimage_eq_union (U : Set α) (s : Set M) (a : M) [D
split_ifs <;> simp [← compl_eq_univ_diff]
#align set.mul_indicator_const_preimage_eq_union Set.mulIndicator_const_preimage_eq_union
#align set.indicator_const_preimage_eq_union Set.indicator_const_preimage_eq_union
+-/
+#print Set.mulIndicator_const_preimage /-
@[to_additive]
theorem mulIndicator_const_preimage (U : Set α) (s : Set M) (a : M) :
(U.mulIndicator fun x => a) ⁻¹' s ∈ ({Set.univ, U, Uᶜ, ∅} : Set (Set α)) := by
@@ -333,19 +388,25 @@ theorem mulIndicator_const_preimage (U : Set α) (s : Set M) (a : M) :
split_ifs <;> simp
#align set.mul_indicator_const_preimage Set.mulIndicator_const_preimage
#align set.indicator_const_preimage Set.indicator_const_preimage
+-/
+#print Set.indicator_one_preimage /-
theorem indicator_one_preimage [Zero M] (U : Set α) (s : Set M) :
U.indicator 1 ⁻¹' s ∈ ({Set.univ, U, Uᶜ, ∅} : Set (Set α)) :=
indicator_const_preimage _ _ 1
#align set.indicator_one_preimage Set.indicator_one_preimage
+-/
+#print Set.mulIndicator_preimage_of_not_mem /-
@[to_additive]
theorem mulIndicator_preimage_of_not_mem (s : Set α) (f : α → M) {t : Set M} (ht : (1 : M) ∉ t) :
mulIndicator s f ⁻¹' t = f ⁻¹' t ∩ s := by
simp [mul_indicator_preimage, Pi.one_def, Set.preimage_const_of_not_mem ht]
#align set.mul_indicator_preimage_of_not_mem Set.mulIndicator_preimage_of_not_mem
#align set.indicator_preimage_of_not_mem Set.indicator_preimage_of_not_mem
+-/
+#print Set.mem_range_mulIndicator /-
@[to_additive]
theorem mem_range_mulIndicator {r : M} {s : Set α} {f : α → M} :
r ∈ range (mulIndicator s f) ↔ r = 1 ∧ s ≠ univ ∨ r ∈ f '' s := by
@@ -353,6 +414,7 @@ theorem mem_range_mulIndicator {r : M} {s : Set α} {f : α → M} :
@eq_comm _ r 1]
#align set.mem_range_mul_indicator Set.mem_range_mulIndicator
#align set.mem_range_indicator Set.mem_range_indicator
+-/
#print Set.mulIndicator_rel_mulIndicator /-
@[to_additive]
@@ -369,76 +431,97 @@ section Monoid
variable [MulOneClass M] {s t : Set α} {f g : α → M} {a : α}
+#print Set.mulIndicator_union_mul_inter_apply /-
@[to_additive]
theorem mulIndicator_union_mul_inter_apply (f : α → M) (s t : Set α) (a : α) :
mulIndicator (s ∪ t) f a * mulIndicator (s ∩ t) f a = mulIndicator s f a * mulIndicator t f a :=
by by_cases hs : a ∈ s <;> by_cases ht : a ∈ t <;> simp [*]
#align set.mul_indicator_union_mul_inter_apply Set.mulIndicator_union_mul_inter_apply
#align set.indicator_union_add_inter_apply Set.indicator_union_add_inter_apply
+-/
+#print Set.mulIndicator_union_mul_inter /-
@[to_additive]
theorem mulIndicator_union_mul_inter (f : α → M) (s t : Set α) :
mulIndicator (s ∪ t) f * mulIndicator (s ∩ t) f = mulIndicator s f * mulIndicator t f :=
funext <| mulIndicator_union_mul_inter_apply f s t
#align set.mul_indicator_union_mul_inter Set.mulIndicator_union_mul_inter
#align set.indicator_union_add_inter Set.indicator_union_add_inter
+-/
+#print Set.mulIndicator_union_of_not_mem_inter /-
@[to_additive]
theorem mulIndicator_union_of_not_mem_inter (h : a ∉ s ∩ t) (f : α → M) :
mulIndicator (s ∪ t) f a = mulIndicator s f a * mulIndicator t f a := by
rw [← mul_indicator_union_mul_inter_apply f s t, mul_indicator_of_not_mem h, mul_one]
#align set.mul_indicator_union_of_not_mem_inter Set.mulIndicator_union_of_not_mem_inter
#align set.indicator_union_of_not_mem_inter Set.indicator_union_of_not_mem_inter
+-/
+#print Set.mulIndicator_union_of_disjoint /-
@[to_additive]
theorem mulIndicator_union_of_disjoint (h : Disjoint s t) (f : α → M) :
mulIndicator (s ∪ t) f = fun a => mulIndicator s f a * mulIndicator t f a :=
funext fun a => mulIndicator_union_of_not_mem_inter (fun ha => h.le_bot ha) _
#align set.mul_indicator_union_of_disjoint Set.mulIndicator_union_of_disjoint
#align set.indicator_union_of_disjoint Set.indicator_union_of_disjoint
+-/
+#print Set.mulIndicator_mul /-
@[to_additive]
theorem mulIndicator_mul (s : Set α) (f g : α → M) :
(mulIndicator s fun a => f a * g a) = fun a => mulIndicator s f a * mulIndicator s g a := by
funext; simp only [mul_indicator]; split_ifs; · rfl; rw [mul_one]
#align set.mul_indicator_mul Set.mulIndicator_mul
#align set.indicator_add Set.indicator_add
+-/
+#print Set.mulIndicator_mul' /-
@[to_additive]
theorem mulIndicator_mul' (s : Set α) (f g : α → M) :
mulIndicator s (f * g) = mulIndicator s f * mulIndicator s g :=
mulIndicator_mul s f g
#align set.mul_indicator_mul' Set.mulIndicator_mul'
#align set.indicator_add' Set.indicator_add'
+-/
+#print Set.mulIndicator_compl_mul_self_apply /-
@[simp, to_additive]
theorem mulIndicator_compl_mul_self_apply (s : Set α) (f : α → M) (a : α) :
mulIndicator (sᶜ) f a * mulIndicator s f a = f a :=
by_cases (fun ha : a ∈ s => by simp [ha]) fun ha => by simp [ha]
#align set.mul_indicator_compl_mul_self_apply Set.mulIndicator_compl_mul_self_apply
#align set.indicator_compl_add_self_apply Set.indicator_compl_add_self_apply
+-/
+#print Set.mulIndicator_compl_mul_self /-
@[simp, to_additive]
theorem mulIndicator_compl_mul_self (s : Set α) (f : α → M) :
mulIndicator (sᶜ) f * mulIndicator s f = f :=
funext <| mulIndicator_compl_mul_self_apply s f
#align set.mul_indicator_compl_mul_self Set.mulIndicator_compl_mul_self
#align set.indicator_compl_add_self Set.indicator_compl_add_self
+-/
+#print Set.mulIndicator_self_mul_compl_apply /-
@[simp, to_additive]
theorem mulIndicator_self_mul_compl_apply (s : Set α) (f : α → M) (a : α) :
mulIndicator s f a * mulIndicator (sᶜ) f a = f a :=
by_cases (fun ha : a ∈ s => by simp [ha]) fun ha => by simp [ha]
#align set.mul_indicator_self_mul_compl_apply Set.mulIndicator_self_mul_compl_apply
#align set.indicator_self_add_compl_apply Set.indicator_self_add_compl_apply
+-/
+#print Set.mulIndicator_self_mul_compl /-
@[simp, to_additive]
theorem mulIndicator_self_mul_compl (s : Set α) (f : α → M) :
mulIndicator s f * mulIndicator (sᶜ) f = f :=
funext <| mulIndicator_self_mul_compl_apply s f
#align set.mul_indicator_self_mul_compl Set.mulIndicator_self_mul_compl
#align set.indicator_self_add_compl Set.indicator_self_add_compl
+-/
+#print Set.mulIndicator_mul_eq_left /-
@[to_additive]
theorem mulIndicator_mul_eq_left {f g : α → M} (h : Disjoint (mulSupport f) (mulSupport g)) :
(mulSupport f).mulIndicator (f * g) = f :=
@@ -448,7 +531,9 @@ theorem mulIndicator_mul_eq_left {f g : α → M} (h : Disjoint (mulSupport f) (
rw [Pi.mul_apply, this, mul_one]
#align set.mul_indicator_mul_eq_left Set.mulIndicator_mul_eq_left
#align set.indicator_add_eq_left Set.indicator_add_eq_left
+-/
+#print Set.mulIndicator_mul_eq_right /-
@[to_additive]
theorem mulIndicator_mul_eq_right {f g : α → M} (h : Disjoint (mulSupport f) (mulSupport g)) :
(mulSupport g).mulIndicator (f * g) = g :=
@@ -458,7 +543,9 @@ theorem mulIndicator_mul_eq_right {f g : α → M} (h : Disjoint (mulSupport f)
rw [Pi.mul_apply, this, one_mul]
#align set.mul_indicator_mul_eq_right Set.mulIndicator_mul_eq_right
#align set.indicator_add_eq_right Set.indicator_add_eq_right
+-/
+#print Set.mulIndicator_mul_compl_eq_piecewise /-
@[to_additive]
theorem mulIndicator_mul_compl_eq_piecewise [DecidablePred (· ∈ s)] (f g : α → M) :
s.mulIndicator f * sᶜ.mulIndicator g = s.piecewise f g :=
@@ -473,6 +560,7 @@ theorem mulIndicator_mul_compl_eq_piecewise [DecidablePred (· ∈ s)] (f g : α
Set.mulIndicator_of_mem (Set.mem_compl h), one_mul]
#align set.mul_indicator_mul_compl_eq_piecewise Set.mulIndicator_mul_compl_eq_piecewise
#align set.indicator_add_compl_eq_piecewise Set.indicator_add_compl_eq_piecewise
+-/
#print Set.mulIndicatorHom /-
/-- `set.mul_indicator` as a `monoid_hom`. -/
@@ -492,25 +580,33 @@ section DistribMulAction
variable {A : Type _} [AddMonoid A] [Monoid M] [DistribMulAction M A]
+#print Set.indicator_smul_apply /-
theorem indicator_smul_apply (s : Set α) (r : α → M) (f : α → A) (x : α) :
indicator s (fun x => r x • f x) x = r x • indicator s f x := by dsimp only [indicator];
split_ifs; exacts [rfl, (smul_zero (r x)).symm]
#align set.indicator_smul_apply Set.indicator_smul_apply
+-/
+#print Set.indicator_smul /-
theorem indicator_smul (s : Set α) (r : α → M) (f : α → A) :
(indicator s fun x : α => r x • f x) = fun x : α => r x • indicator s f x :=
funext <| indicator_smul_apply s r f
#align set.indicator_smul Set.indicator_smul
+-/
+#print Set.indicator_const_smul_apply /-
theorem indicator_const_smul_apply (s : Set α) (r : M) (f : α → A) (x : α) :
indicator s (fun x => r • f x) x = r • indicator s f x :=
indicator_smul_apply s (fun x => r) f x
#align set.indicator_const_smul_apply Set.indicator_const_smul_apply
+-/
+#print Set.indicator_const_smul /-
theorem indicator_const_smul (s : Set α) (r : M) (f : α → A) :
(indicator s fun x : α => r • f x) = fun x : α => r • indicator s f x :=
funext <| indicator_const_smul_apply s r f
#align set.indicator_const_smul Set.indicator_const_smul
+-/
end DistribMulAction
@@ -518,44 +614,57 @@ section Group
variable {G : Type _} [Group G] {s t : Set α} {f g : α → G} {a : α}
+#print Set.mulIndicator_inv' /-
@[to_additive]
theorem mulIndicator_inv' (s : Set α) (f : α → G) : mulIndicator s f⁻¹ = (mulIndicator s f)⁻¹ :=
(mulIndicatorHom G s).map_inv f
#align set.mul_indicator_inv' Set.mulIndicator_inv'
#align set.indicator_neg' Set.indicator_neg'
+-/
+#print Set.mulIndicator_inv /-
@[to_additive]
theorem mulIndicator_inv (s : Set α) (f : α → G) :
(mulIndicator s fun a => (f a)⁻¹) = fun a => (mulIndicator s f a)⁻¹ :=
mulIndicator_inv' s f
#align set.mul_indicator_inv Set.mulIndicator_inv
#align set.indicator_neg Set.indicator_neg
+-/
+#print Set.mulIndicator_div /-
@[to_additive]
theorem mulIndicator_div (s : Set α) (f g : α → G) :
(mulIndicator s fun a => f a / g a) = fun a => mulIndicator s f a / mulIndicator s g a :=
(mulIndicatorHom G s).map_div f g
#align set.mul_indicator_div Set.mulIndicator_div
#align set.indicator_sub Set.indicator_sub
+-/
+#print Set.mulIndicator_div' /-
@[to_additive]
theorem mulIndicator_div' (s : Set α) (f g : α → G) :
mulIndicator s (f / g) = mulIndicator s f / mulIndicator s g :=
mulIndicator_div s f g
#align set.mul_indicator_div' Set.mulIndicator_div'
#align set.indicator_sub' Set.indicator_sub'
+-/
+#print Set.mulIndicator_compl /-
@[to_additive indicator_compl']
theorem mulIndicator_compl (s : Set α) (f : α → G) :
mulIndicator (sᶜ) f = f * (mulIndicator s f)⁻¹ :=
eq_mul_inv_of_mul_eq <| s.mulIndicator_compl_mul_self f
#align set.mul_indicator_compl Set.mulIndicator_compl
#align set.indicator_compl' Set.indicator_compl'
+-/
+#print Set.indicator_compl /-
theorem indicator_compl {G} [AddGroup G] (s : Set α) (f : α → G) :
indicator (sᶜ) f = f - indicator s f := by rw [sub_eq_add_neg, indicator_compl']
#align set.indicator_compl Set.indicator_compl
+-/
+#print Set.mulIndicator_diff /-
@[to_additive indicator_diff']
theorem mulIndicator_diff (h : s ⊆ t) (f : α → G) :
mulIndicator (t \ s) f = mulIndicator t f * (mulIndicator s f)⁻¹ :=
@@ -566,10 +675,13 @@ theorem mulIndicator_diff (h : s ⊆ t) (f : α → G) :
exact disjoint_sdiff_self_left
#align set.mul_indicator_diff Set.mulIndicator_diff
#align set.indicator_diff' Set.indicator_diff'
+-/
+#print Set.indicator_diff /-
theorem indicator_diff {G : Type _} [AddGroup G] {s t : Set α} (h : s ⊆ t) (f : α → G) :
indicator (t \ s) f = indicator t f - indicator s f := by rw [indicator_diff' h, sub_eq_add_neg]
#align set.indicator_diff Set.indicator_diff
+-/
end Group
@@ -577,6 +689,7 @@ section CommMonoid
variable [CommMonoid M]
+#print Set.prod_mulIndicator_subset_of_eq_one /-
/-- Consider a product of `g i (f i)` over a `finset`. Suppose `g` is a
function such as `pow`, which maps a second argument of `1` to
`1`. Then if `f` is replaced by the corresponding multiplicative indicator
@@ -598,6 +711,7 @@ theorem prod_mulIndicator_subset_of_eq_one [One N] (f : α → N) (g : α → N
exact mul_indicator_of_not_mem hn _
#align set.prod_mul_indicator_subset_of_eq_one Set.prod_mulIndicator_subset_of_eq_one
#align set.sum_indicator_subset_of_eq_zero Set.sum_indicator_subset_of_eq_zero
+-/
/-- Consider a sum of `g i (f i)` over a `finset`. Suppose `g` is a
function such as multiplication, which maps a second argument of 0 to
@@ -608,6 +722,7 @@ function, the `finset` may be replaced by a possibly larger `finset`
without changing the value of the sum. -/
add_decl_doc Set.sum_indicator_subset_of_eq_zero
+#print Set.prod_mulIndicator_subset /-
/-- Taking the product of an indicator function over a possibly larger `finset` is the same as
taking the original function over the original `finset`. -/
@[to_additive
@@ -617,7 +732,9 @@ theorem prod_mulIndicator_subset (f : α → M) {s t : Finset α} (h : s ⊆ t)
prod_mulIndicator_subset_of_eq_one _ (fun a b => b) h fun _ => rfl
#align set.prod_mul_indicator_subset Set.prod_mulIndicator_subset
#align set.sum_indicator_subset Set.sum_indicator_subset
+-/
+#print Finset.prod_mulIndicator_eq_prod_filter /-
@[to_additive]
theorem Finset.prod_mulIndicator_eq_prod_filter (s : Finset ι) (f : ι → α → M) (t : ι → Set α)
(g : ι → α) [DecidablePred fun i => g i ∈ t i] :
@@ -631,14 +748,18 @@ theorem Finset.prod_mulIndicator_eq_prod_filter (s : Finset ι) (f : ι → α
(Finset.prod_eq_one fun x hx => mul_indicator_of_not_mem (Finset.mem_filter.1 hx).2 _)
#align finset.prod_mul_indicator_eq_prod_filter Finset.prod_mulIndicator_eq_prod_filter
#align finset.sum_indicator_eq_sum_filter Finset.sum_indicator_eq_sum_filter
+-/
+#print Set.mulIndicator_finset_prod /-
@[to_additive]
theorem mulIndicator_finset_prod (I : Finset ι) (s : Set α) (f : ι → α → M) :
mulIndicator s (∏ i in I, f i) = ∏ i in I, mulIndicator s (f i) :=
(mulIndicatorHom M s).map_prod _ _
#align set.mul_indicator_finset_prod Set.mulIndicator_finset_prod
#align set.indicator_finset_sum Set.indicator_finset_sum
+-/
+#print Set.mulIndicator_finset_biUnion /-
@[to_additive]
theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
(∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) →
@@ -658,7 +779,9 @@ theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f
exact (ne_of_mem_of_not_mem ha' haI).symm
#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_biUnion
#align set.indicator_finset_bUnion Set.indicator_finset_biUnion
+-/
+#print Set.mulIndicator_finset_biUnion_apply /-
@[to_additive]
theorem mulIndicator_finset_biUnion_apply {ι} (I : Finset ι) (s : ι → Set α) {f : α → M}
(h : ∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) (x : α) :
@@ -666,6 +789,7 @@ theorem mulIndicator_finset_biUnion_apply {ι} (I : Finset ι) (s : ι → Set
rw [Set.mulIndicator_finset_biUnion I s h]
#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_biUnion_apply
#align set.indicator_finset_bUnion_apply Set.indicator_finset_biUnion_apply
+-/
end CommMonoid
@@ -673,25 +797,33 @@ section MulZeroClass
variable [MulZeroClass M] {s t : Set α} {f g : α → M} {a : α}
+#print Set.indicator_mul /-
theorem indicator_mul (s : Set α) (f g : α → M) :
(indicator s fun a => f a * g a) = fun a => indicator s f a * indicator s g a := by funext;
simp only [indicator]; split_ifs; · rfl; rw [MulZeroClass.mul_zero]
#align set.indicator_mul Set.indicator_mul
+-/
+#print Set.indicator_mul_left /-
theorem indicator_mul_left (s : Set α) (f g : α → M) :
indicator s (fun a => f a * g a) a = indicator s f a * g a := by simp only [indicator];
split_ifs; · rfl; rw [MulZeroClass.zero_mul]
#align set.indicator_mul_left Set.indicator_mul_left
+-/
+#print Set.indicator_mul_right /-
theorem indicator_mul_right (s : Set α) (f g : α → M) :
indicator s (fun a => f a * g a) a = f a * indicator s g a := by simp only [indicator];
split_ifs; · rfl; rw [MulZeroClass.mul_zero]
#align set.indicator_mul_right Set.indicator_mul_right
+-/
+#print Set.inter_indicator_mul /-
theorem inter_indicator_mul {t1 t2 : Set α} (f g : α → M) (x : α) :
(t1 ∩ t2).indicator (fun x => f x * g x) x = t1.indicator f x * t2.indicator g x := by
rw [← Set.indicator_indicator]; simp [indicator]
#align set.inter_indicator_mul Set.inter_indicator_mul
+-/
end MulZeroClass
@@ -699,30 +831,40 @@ section MulZeroOneClass
variable [MulZeroOneClass M]
+#print Set.inter_indicator_one /-
theorem inter_indicator_one {s t : Set α} :
(s ∩ t).indicator (1 : _ → M) = s.indicator 1 * t.indicator 1 :=
funext fun _ => by simpa only [← inter_indicator_mul, Pi.mul_apply, Pi.one_apply, one_mul]
#align set.inter_indicator_one Set.inter_indicator_one
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Set.indicator_prod_one /-
theorem indicator_prod_one {s : Set α} {t : Set β} {x : α} {y : β} :
(s ×ˢ t).indicator (1 : _ → M) (x, y) = s.indicator 1 x * t.indicator 1 y := by
classical simp [indicator_apply, ← ite_and]
#align set.indicator_prod_one Set.indicator_prod_one
+-/
variable (M) [Nontrivial M]
+#print Set.indicator_eq_zero_iff_not_mem /-
theorem indicator_eq_zero_iff_not_mem {U : Set α} {x : α} : indicator U 1 x = (0 : M) ↔ x ∉ U := by
classical simp [indicator_apply, imp_false]
#align set.indicator_eq_zero_iff_not_mem Set.indicator_eq_zero_iff_not_mem
+-/
+#print Set.indicator_eq_one_iff_mem /-
theorem indicator_eq_one_iff_mem {U : Set α} {x : α} : indicator U 1 x = (1 : M) ↔ x ∈ U := by
classical simp [indicator_apply, imp_false]
#align set.indicator_eq_one_iff_mem Set.indicator_eq_one_iff_mem
+-/
+#print Set.indicator_one_inj /-
theorem indicator_one_inj {U V : Set α} (h : indicator U (1 : α → M) = indicator V 1) : U = V := by
ext; simp_rw [← indicator_eq_one_iff_mem M, h]
#align set.indicator_one_inj Set.indicator_one_inj
+-/
end MulZeroOneClass
@@ -734,6 +876,7 @@ section
variable [LE M]
+#print Set.mulIndicator_apply_le' /-
@[to_additive]
theorem mulIndicator_apply_le' (hfg : a ∈ s → f a ≤ y) (hg : a ∉ s → 1 ≤ y) :
mulIndicator s f a ≤ y := by
@@ -742,55 +885,70 @@ theorem mulIndicator_apply_le' (hfg : a ∈ s → f a ≤ y) (hg : a ∉ s → 1
· simpa [ha] using hg ha
#align set.mul_indicator_apply_le' Set.mulIndicator_apply_le'
#align set.indicator_apply_le' Set.indicator_apply_le'
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a «expr ∉ » s) -/
+#print Set.mulIndicator_le' /-
@[to_additive]
theorem mulIndicator_le' (hfg : ∀ a ∈ s, f a ≤ g a) (hg : ∀ (a) (_ : a ∉ s), 1 ≤ g a) :
mulIndicator s f ≤ g := fun a => mulIndicator_apply_le' (hfg _) (hg _)
#align set.mul_indicator_le' Set.mulIndicator_le'
#align set.indicator_le' Set.indicator_le'
+-/
+#print Set.le_mulIndicator_apply /-
@[to_additive]
theorem le_mulIndicator_apply {y} (hfg : a ∈ s → y ≤ g a) (hf : a ∉ s → y ≤ 1) :
y ≤ mulIndicator s g a :=
@mulIndicator_apply_le' α Mᵒᵈ ‹_› _ _ _ _ _ hfg hf
#align set.le_mul_indicator_apply Set.le_mulIndicator_apply
#align set.le_indicator_apply Set.le_indicator_apply
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a «expr ∉ » s) -/
+#print Set.le_mulIndicator /-
@[to_additive]
theorem le_mulIndicator (hfg : ∀ a ∈ s, f a ≤ g a) (hf : ∀ (a) (_ : a ∉ s), f a ≤ 1) :
f ≤ mulIndicator s g := fun a => le_mulIndicator_apply (hfg _) (hf _)
#align set.le_mul_indicator Set.le_mulIndicator
#align set.le_indicator Set.le_indicator
+-/
end
variable [Preorder M]
+#print Set.one_le_mulIndicator_apply /-
@[to_additive indicator_apply_nonneg]
theorem one_le_mulIndicator_apply (h : a ∈ s → 1 ≤ f a) : 1 ≤ mulIndicator s f a :=
le_mulIndicator_apply h fun _ => le_rfl
#align set.one_le_mul_indicator_apply Set.one_le_mulIndicator_apply
#align set.indicator_apply_nonneg Set.indicator_apply_nonneg
+-/
+#print Set.one_le_mulIndicator /-
@[to_additive indicator_nonneg]
theorem one_le_mulIndicator (h : ∀ a ∈ s, 1 ≤ f a) (a : α) : 1 ≤ mulIndicator s f a :=
one_le_mulIndicator_apply (h a)
#align set.one_le_mul_indicator Set.one_le_mulIndicator
#align set.indicator_nonneg Set.indicator_nonneg
+-/
+#print Set.mulIndicator_apply_le_one /-
@[to_additive]
theorem mulIndicator_apply_le_one (h : a ∈ s → f a ≤ 1) : mulIndicator s f a ≤ 1 :=
mulIndicator_apply_le' h fun _ => le_rfl
#align set.mul_indicator_apply_le_one Set.mulIndicator_apply_le_one
#align set.indicator_apply_nonpos Set.indicator_apply_nonpos
+-/
+#print Set.mulIndicator_le_one /-
@[to_additive]
theorem mulIndicator_le_one (h : ∀ a ∈ s, f a ≤ 1) (a : α) : mulIndicator s f a ≤ 1 :=
mulIndicator_apply_le_one (h a)
#align set.mul_indicator_le_one Set.mulIndicator_le_one
#align set.indicator_nonpos Set.indicator_nonpos
+-/
#print Set.mulIndicator_le_mulIndicator /-
@[to_additive]
@@ -802,6 +960,7 @@ theorem mulIndicator_le_mulIndicator (h : f a ≤ g a) : mulIndicator s f a ≤
attribute [mono] mul_indicator_le_mul_indicator indicator_le_indicator
+#print Set.mulIndicator_le_mulIndicator_of_subset /-
@[to_additive]
theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤ f a) (a : α) :
mulIndicator s f a ≤ mulIndicator t f a :=
@@ -810,14 +969,18 @@ theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤
one_le_mulIndicator_apply fun _ => hf _
#align set.mul_indicator_le_mul_indicator_of_subset Set.mulIndicator_le_mulIndicator_of_subset
#align set.indicator_le_indicator_of_subset Set.indicator_le_indicator_of_subset
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x «expr ∉ » s) -/
+#print Set.mulIndicator_le_self' /-
@[to_additive]
theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndicator s f ≤ f :=
mulIndicator_le' (fun _ _ => le_rfl) hf
#align set.mul_indicator_le_self' Set.mulIndicator_le_self'
#align set.indicator_le_self' Set.indicator_le_self'
+-/
+#print Set.mulIndicator_iUnion_apply /-
@[to_additive]
theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥ : M) = 1)
(s : ι → Set α) (f : α → M) (x : α) :
@@ -834,6 +997,7 @@ theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥
simp [hx, ← h1]
#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_apply
#align set.indicator_Union_apply Set.indicator_iUnion_apply
+-/
end Order
@@ -841,25 +1005,31 @@ section CanonicallyOrderedMonoid
variable [CanonicallyOrderedMonoid M]
+#print Set.mulIndicator_le_self /-
@[to_additive]
theorem mulIndicator_le_self (s : Set α) (f : α → M) : mulIndicator s f ≤ f :=
mulIndicator_le_self' fun _ _ => one_le _
#align set.mul_indicator_le_self Set.mulIndicator_le_self
#align set.indicator_le_self Set.indicator_le_self
+-/
+#print Set.mulIndicator_apply_le /-
@[to_additive]
theorem mulIndicator_apply_le {a : α} {s : Set α} {f g : α → M} (hfg : a ∈ s → f a ≤ g a) :
mulIndicator s f a ≤ g a :=
mulIndicator_apply_le' hfg fun _ => one_le _
#align set.mul_indicator_apply_le Set.mulIndicator_apply_le
#align set.indicator_apply_le Set.indicator_apply_le
+-/
+#print Set.mulIndicator_le /-
@[to_additive]
theorem mulIndicator_le {s : Set α} {f g : α → M} (hfg : ∀ a ∈ s, f a ≤ g a) :
mulIndicator s f ≤ g :=
mulIndicator_le' hfg fun _ _ => one_le _
#align set.mul_indicator_le Set.mulIndicator_le
#align set.indicator_le Set.indicator_le
+-/
end CanonicallyOrderedMonoid
@@ -887,10 +1057,12 @@ theorem indicator_nonpos_le_indicator {β} [LinearOrder β] [Zero β] (s : Set
end Set
+#print MonoidHom.map_mulIndicator /-
@[to_additive]
theorem MonoidHom.map_mulIndicator {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M →* N)
(s : Set α) (g : α → M) (x : α) : f (s.mulIndicator g x) = s.mulIndicator (f ∘ g) x :=
congr_fun (Set.mulIndicator_comp_of_one f.map_one).symm x
#align monoid_hom.map_mul_indicator MonoidHom.map_mulIndicator
#align add_monoid_hom.map_indicator AddMonoidHom.map_indicator
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -585,7 +585,7 @@ without changing the value of the sum. -/
@[to_additive]
theorem prod_mulIndicator_subset_of_eq_one [One N] (f : α → N) (g : α → N → M) {s t : Finset α}
(h : s ⊆ t) (hg : ∀ a, g a 1 = 1) :
- (∏ i in s, g i (f i)) = ∏ i in t, g i (mulIndicator (↑s) f i) :=
+ ∏ i in s, g i (f i) = ∏ i in t, g i (mulIndicator (↑s) f i) :=
by
rw [← Finset.prod_subset h _]
· apply Finset.prod_congr rfl
@@ -613,7 +613,7 @@ taking the original function over the original `finset`. -/
@[to_additive
"Summing an indicator function over a possibly larger `finset` is the same as summing\nthe original function over the original `finset`."]
theorem prod_mulIndicator_subset (f : α → M) {s t : Finset α} (h : s ⊆ t) :
- (∏ i in s, f i) = ∏ i in t, mulIndicator (↑s) f i :=
+ ∏ i in s, f i = ∏ i in t, mulIndicator (↑s) f i :=
prod_mulIndicator_subset_of_eq_one _ (fun a b => b) h fun _ => rfl
#align set.prod_mul_indicator_subset Set.prod_mulIndicator_subset
#align set.sum_indicator_subset Set.sum_indicator_subset
@@ -621,7 +621,7 @@ theorem prod_mulIndicator_subset (f : α → M) {s t : Finset α} (h : s ⊆ t)
@[to_additive]
theorem Finset.prod_mulIndicator_eq_prod_filter (s : Finset ι) (f : ι → α → M) (t : ι → Set α)
(g : ι → α) [DecidablePred fun i => g i ∈ t i] :
- (∏ i in s, mulIndicator (t i) (f i) (g i)) = ∏ i in s.filterₓ fun i => g i ∈ t i, f i (g i) :=
+ ∏ i in s, mulIndicator (t i) (f i) (g i) = ∏ i in s.filterₓ fun i => g i ∈ t i, f i (g i) :=
by
refine' (Finset.prod_filter_mul_prod_filter_not s (fun i => g i ∈ t i) _).symm.trans _
refine' Eq.trans _ (mul_one _)
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -743,7 +743,7 @@ theorem mulIndicator_apply_le' (hfg : a ∈ s → f a ≤ y) (hg : a ∉ s → 1
#align set.mul_indicator_apply_le' Set.mulIndicator_apply_le'
#align set.indicator_apply_le' Set.indicator_apply_le'
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a «expr ∉ » s) -/
@[to_additive]
theorem mulIndicator_le' (hfg : ∀ a ∈ s, f a ≤ g a) (hg : ∀ (a) (_ : a ∉ s), 1 ≤ g a) :
mulIndicator s f ≤ g := fun a => mulIndicator_apply_le' (hfg _) (hg _)
@@ -757,7 +757,7 @@ theorem le_mulIndicator_apply {y} (hfg : a ∈ s → y ≤ g a) (hf : a ∉ s
#align set.le_mul_indicator_apply Set.le_mulIndicator_apply
#align set.le_indicator_apply Set.le_indicator_apply
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a «expr ∉ » s) -/
@[to_additive]
theorem le_mulIndicator (hfg : ∀ a ∈ s, f a ≤ g a) (hf : ∀ (a) (_ : a ∉ s), f a ≤ 1) :
f ≤ mulIndicator s g := fun a => le_mulIndicator_apply (hfg _) (hf _)
@@ -811,7 +811,7 @@ theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤
#align set.mul_indicator_le_mul_indicator_of_subset Set.mulIndicator_le_mulIndicator_of_subset
#align set.indicator_le_indicator_of_subset Set.indicator_le_indicator_of_subset
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x «expr ∉ » s) -/
@[to_additive]
theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndicator s f ≤ f :=
mulIndicator_le' (fun _ _ => le_rfl) hf
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -309,8 +309,8 @@ theorem mulIndicator_preimage (s : Set α) (f : α → M) (B : Set M) :
theorem mulIndicator_one_preimage (s : Set M) :
t.mulIndicator 1 ⁻¹' s ∈ ({Set.univ, ∅} : Set (Set α)) := by
classical
- rw [mul_indicator_one', preimage_one]
- split_ifs <;> simp
+ rw [mul_indicator_one', preimage_one]
+ split_ifs <;> simp
#align set.mul_indicator_one_preimage Set.mulIndicator_one_preimage
#align set.indicator_zero_preimage Set.indicator_zero_preimage
-/
@@ -329,8 +329,8 @@ theorem mulIndicator_const_preimage_eq_union (U : Set α) (s : Set M) (a : M) [D
theorem mulIndicator_const_preimage (U : Set α) (s : Set M) (a : M) :
(U.mulIndicator fun x => a) ⁻¹' s ∈ ({Set.univ, U, Uᶜ, ∅} : Set (Set α)) := by
classical
- rw [mul_indicator_const_preimage_eq_union]
- split_ifs <;> simp
+ rw [mul_indicator_const_preimage_eq_union]
+ split_ifs <;> simp
#align set.mul_indicator_const_preimage Set.mulIndicator_const_preimage
#align set.indicator_const_preimage Set.indicator_const_preimage
@@ -645,19 +645,17 @@ theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f
mulIndicator (⋃ i ∈ I, s i) f = fun a => ∏ i in I, mulIndicator (s i) f a :=
by
classical
- refine' Finset.induction_on I _ _
- · intro h; funext; simp
- intro a I haI ih hI
- funext
- rw [Finset.prod_insert haI, Finset.set_biUnion_insert, mul_indicator_union_of_not_mem_inter,
- ih _]
- · intro i hi j hj hij
- exact hI i (Finset.mem_insert_of_mem hi) j (Finset.mem_insert_of_mem hj) hij
- simp only [not_exists, exists_prop, mem_Union, mem_inter_iff, not_and]
- intro hx a' ha'
- refine'
- disjoint_left.1 (hI a (Finset.mem_insert_self _ _) a' (Finset.mem_insert_of_mem ha') _) hx
- exact (ne_of_mem_of_not_mem ha' haI).symm
+ refine' Finset.induction_on I _ _
+ · intro h; funext; simp
+ intro a I haI ih hI
+ funext
+ rw [Finset.prod_insert haI, Finset.set_biUnion_insert, mul_indicator_union_of_not_mem_inter, ih _]
+ · intro i hi j hj hij
+ exact hI i (Finset.mem_insert_of_mem hi) j (Finset.mem_insert_of_mem hj) hij
+ simp only [not_exists, exists_prop, mem_Union, mem_inter_iff, not_and]
+ intro hx a' ha'
+ refine' disjoint_left.1 (hI a (Finset.mem_insert_self _ _) a' (Finset.mem_insert_of_mem ha') _) hx
+ exact (ne_of_mem_of_not_mem ha' haI).symm
#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_biUnion
#align set.indicator_finset_bUnion Set.indicator_finset_biUnion
@@ -867,22 +865,22 @@ end CanonicallyOrderedMonoid
#print Set.indicator_le_indicator_nonneg /-
theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
- s.indicator f ≤ { x | 0 ≤ f x }.indicator f :=
+ s.indicator f ≤ {x | 0 ≤ f x}.indicator f :=
by
intro x
classical
- simp_rw [indicator_apply]
- split_ifs
- · exact le_rfl
- · exact (not_le.mp h_1).le
- · exact h_1
- · exact le_rfl
+ simp_rw [indicator_apply]
+ split_ifs
+ · exact le_rfl
+ · exact (not_le.mp h_1).le
+ · exact h_1
+ · exact le_rfl
#align set.indicator_le_indicator_nonneg Set.indicator_le_indicator_nonneg
-/
#print Set.indicator_nonpos_le_indicator /-
theorem indicator_nonpos_le_indicator {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
- { x | f x ≤ 0 }.indicator f ≤ s.indicator f :=
+ {x | f x ≤ 0}.indicator f ≤ s.indicator f :=
@indicator_le_indicator_nonneg α βᵒᵈ _ _ s f
#align set.indicator_nonpos_le_indicator Set.indicator_nonpos_le_indicator
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -122,7 +122,7 @@ theorem mulIndicator_eq_self : s.mulIndicator f = f ↔ mulSupport f ⊆ s := by
@[to_additive]
theorem mulIndicator_eq_self_of_superset (h1 : s.mulIndicator f = f) (h2 : s ⊆ t) :
- t.mulIndicator f = f := by rw [mul_indicator_eq_self] at h1⊢; exact subset.trans h1 h2
+ t.mulIndicator f = f := by rw [mul_indicator_eq_self] at h1 ⊢; exact subset.trans h1 h2
#align set.mul_indicator_eq_self_of_superset Set.mulIndicator_eq_self_of_superset
#align set.indicator_eq_self_of_superset Set.indicator_eq_self_of_superset
@@ -358,7 +358,7 @@ theorem mem_range_mulIndicator {r : M} {s : Set α} {f : α → M} :
@[to_additive]
theorem mulIndicator_rel_mulIndicator {r : M → M → Prop} (h1 : r 1 1) (ha : a ∈ s → r (f a) (g a)) :
r (mulIndicator s f a) (mulIndicator s g a) := by simp only [mul_indicator];
- split_ifs with has has; exacts[ha has, h1]
+ split_ifs with has has; exacts [ha has, h1]
#align set.mul_indicator_rel_mul_indicator Set.mulIndicator_rel_mulIndicator
#align set.indicator_rel_indicator Set.indicator_rel_indicator
-/
@@ -494,7 +494,7 @@ variable {A : Type _} [AddMonoid A] [Monoid M] [DistribMulAction M A]
theorem indicator_smul_apply (s : Set α) (r : α → M) (f : α → A) (x : α) :
indicator s (fun x => r x • f x) x = r x • indicator s f x := by dsimp only [indicator];
- split_ifs; exacts[rfl, (smul_zero (r x)).symm]
+ split_ifs; exacts [rfl, (smul_zero (r x)).symm]
#align set.indicator_smul_apply Set.indicator_smul_apply
theorem indicator_smul (s : Set α) (r : α → M) (f : α → A) :
@@ -827,12 +827,12 @@ theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥
by
by_cases hx : x ∈ ⋃ i, s i
· rw [mul_indicator_of_mem hx]
- rw [mem_Union] at hx
+ rw [mem_Union] at hx
refine' le_antisymm _ (iSup_le fun i => mul_indicator_le_self' (fun x hx => h1 ▸ bot_le) x)
rcases hx with ⟨i, hi⟩
exact le_iSup_of_le i (ge_of_eq <| mul_indicator_of_mem hi _)
· rw [mul_indicator_of_not_mem hx]
- simp only [mem_Union, not_exists] at hx
+ simp only [mem_Union, not_exists] at hx
simp [hx, ← h1]
#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_apply
#align set.indicator_Union_apply Set.indicator_iUnion_apply
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -37,7 +37,7 @@ indicator, characteristic
-/
-open BigOperators
+open scoped BigOperators
open Function
@@ -794,11 +794,13 @@ theorem mulIndicator_le_one (h : ∀ a ∈ s, f a ≤ 1) (a : α) : mulIndicator
#align set.mul_indicator_le_one Set.mulIndicator_le_one
#align set.indicator_nonpos Set.indicator_nonpos
+#print Set.mulIndicator_le_mulIndicator /-
@[to_additive]
theorem mulIndicator_le_mulIndicator (h : f a ≤ g a) : mulIndicator s f a ≤ mulIndicator s g a :=
mulIndicator_rel_mulIndicator le_rfl fun _ => h
#align set.mul_indicator_le_mul_indicator Set.mulIndicator_le_mulIndicator
#align set.indicator_le_indicator Set.indicator_le_indicator
+-/
attribute [mono] mul_indicator_le_mul_indicator indicator_le_indicator
@@ -863,6 +865,7 @@ theorem mulIndicator_le {s : Set α} {f g : α → M} (hfg : ∀ a ∈ s, f a
end CanonicallyOrderedMonoid
+#print Set.indicator_le_indicator_nonneg /-
theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
s.indicator f ≤ { x | 0 ≤ f x }.indicator f :=
by
@@ -875,11 +878,14 @@ theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set
· exact h_1
· exact le_rfl
#align set.indicator_le_indicator_nonneg Set.indicator_le_indicator_nonneg
+-/
+#print Set.indicator_nonpos_le_indicator /-
theorem indicator_nonpos_le_indicator {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
{ x | f x ≤ 0 }.indicator f ≤ s.indicator f :=
@indicator_le_indicator_nonneg α βᵒᵈ _ _ s f
#align set.indicator_nonpos_le_indicator Set.indicator_nonpos_le_indicator
+-/
end Set
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -69,36 +69,18 @@ noncomputable def mulIndicator (s : Set α) (f : α → M) : α → M
#align set.indicator Set.indicator
-/
-/- warning: set.piecewise_eq_mul_indicator -> Set.piecewise_eq_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_3 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x s)], Eq.{max (succ u1) (succ u2)} (α -> M) (Set.piecewise.{u1, succ u2} α (fun (ᾰ : α) => M) s f (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (i : α) => M) (fun (i : α) => _inst_1))))) (fun (j : α) => _inst_3 j)) (Set.mulIndicator.{u1, u2} α M _inst_1 s f)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} [_inst_3 : DecidablePred.{succ u2} α (fun (_x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) _x s)], Eq.{max (succ u2) (succ u1)} (α -> M) (Set.piecewise.{u2, succ u1} α (fun (ᾰ : α) => M) s f (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (i : α) => M) (fun (i : α) => _inst_1)))) (fun (j : α) => _inst_3 j)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f)
-Case conversion may be inaccurate. Consider using '#align set.piecewise_eq_mul_indicator Set.piecewise_eq_mulIndicatorₓ'. -/
@[simp, to_additive]
theorem piecewise_eq_mulIndicator [DecidablePred (· ∈ s)] : s.piecewise f 1 = s.mulIndicator f :=
funext fun x => @if_congr _ _ _ _ (id _) _ _ _ _ Iff.rfl rfl rfl
#align set.piecewise_eq_mul_indicator Set.piecewise_eq_mulIndicator
#align set.piecewise_eq_indicator Set.piecewise_eq_indicator
-/- warning: set.mul_indicator_apply -> Set.mulIndicator_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (s : Set.{u1} α) (f : α -> M) (a : α) [_inst_3 : Decidable (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s)], Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (ite.{succ u2} M (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) _inst_3 (f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (s : Set.{u2} α) (f : α -> M) (a : α) [_inst_3 : Decidable (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s)], Eq.{succ u1} M (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (ite.{succ u1} M (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) _inst_3 (f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_apply Set.mulIndicator_applyₓ'. -/
@[to_additive]
theorem mulIndicator_apply (s : Set α) (f : α → M) (a : α) [Decidable (a ∈ s)] :
mulIndicator s f a = if a ∈ s then f a else 1 := by convert rfl
#align set.mul_indicator_apply Set.mulIndicator_apply
#align set.indicator_apply Set.indicator_apply
-/- warning: set.mul_indicator_of_mem -> Set.mulIndicator_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {a : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (forall (f : α -> M), Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (f a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {a : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (forall (f : α -> M), Eq.{succ u1} M (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (f a))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_of_mem Set.mulIndicator_of_memₓ'. -/
@[simp, to_additive]
theorem mulIndicator_of_mem (h : a ∈ s) (f : α → M) : mulIndicator s f a = f a :=
letI := Classical.dec (a ∈ s)
@@ -106,12 +88,6 @@ theorem mulIndicator_of_mem (h : a ∈ s) (f : α → M) : mulIndicator s f a =
#align set.mul_indicator_of_mem Set.mulIndicator_of_mem
#align set.indicator_of_mem Set.indicator_of_mem
-/- warning: set.mul_indicator_of_not_mem -> Set.mulIndicator_of_not_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {a : α}, (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s)) -> (forall (f : α -> M), Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {a : α}, (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s)) -> (forall (f : α -> M), Eq.{succ u1} M (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_of_not_mem Set.mulIndicator_of_not_memₓ'. -/
@[simp, to_additive]
theorem mulIndicator_of_not_mem (h : a ∉ s) (f : α → M) : mulIndicator s f a = 1 :=
letI := Classical.dec (a ∈ s)
@@ -119,12 +95,6 @@ theorem mulIndicator_of_not_mem (h : a ∉ s) (f : α → M) : mulIndicator s f
#align set.mul_indicator_of_not_mem Set.mulIndicator_of_not_mem
#align set.indicator_of_not_mem Set.indicator_of_not_mem
-/- warning: set.mul_indicator_eq_one_or_self -> Set.mulIndicator_eq_one_or_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (s : Set.{u1} α) (f : α -> M) (a : α), Or (Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1)))) (Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (f a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (s : Set.{u2} α) (f : α -> M) (a : α), Or (Eq.{succ u1} M (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1))) (Eq.{succ u1} M (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (f a))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_eq_one_or_self Set.mulIndicator_eq_one_or_selfₓ'. -/
@[to_additive]
theorem mulIndicator_eq_one_or_self (s : Set α) (f : α → M) (a : α) :
mulIndicator s f a = 1 ∨ mulIndicator s f a = f a :=
@@ -144,24 +114,12 @@ theorem mulIndicator_apply_eq_self : s.mulIndicator f a = f a ↔ a ∉ s → f
#align set.indicator_apply_eq_self Set.indicator_apply_eq_self
-/
-/- warning: set.mul_indicator_eq_self -> Set.mulIndicator_eq_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M}, Iff (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 s f) f) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Function.mulSupport.{u1, u2} α M _inst_1 f) s)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M}, Iff (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) f) (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (Function.mulSupport.{u2, u1} α M _inst_1 f) s)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_eq_self Set.mulIndicator_eq_selfₓ'. -/
@[simp, to_additive]
theorem mulIndicator_eq_self : s.mulIndicator f = f ↔ mulSupport f ⊆ s := by
simp only [funext_iff, subset_def, mem_mul_support, mul_indicator_apply_eq_self, not_imp_comm]
#align set.mul_indicator_eq_self Set.mulIndicator_eq_self
#align set.indicator_eq_self Set.indicator_eq_self
-/- warning: set.mul_indicator_eq_self_of_superset -> Set.mulIndicator_eq_self_of_superset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α} {f : α -> M}, (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 s f) f) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 t f) f)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α} {f : α -> M}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) f) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s t) -> (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 t f) f)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_eq_self_of_superset Set.mulIndicator_eq_self_of_supersetₓ'. -/
@[to_additive]
theorem mulIndicator_eq_self_of_superset (h1 : s.mulIndicator f = f) (h2 : s ⊆ t) :
t.mulIndicator f = f := by rw [mul_indicator_eq_self] at h1⊢; exact subset.trans h1 h2
@@ -177,12 +135,6 @@ theorem mulIndicator_apply_eq_one : mulIndicator s f a = 1 ↔ a ∈ s → f a =
#align set.indicator_apply_eq_zero Set.indicator_apply_eq_zero
-/
-/- warning: set.mul_indicator_eq_one -> Set.mulIndicator_eq_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M}, Iff (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 s f) (fun (x : α) => OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1)))) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Function.mulSupport.{u1, u2} α M _inst_1 f) s)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M}, Iff (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) (fun (x : α) => OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1))) (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (Function.mulSupport.{u2, u1} α M _inst_1 f) s)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_eq_one Set.mulIndicator_eq_oneₓ'. -/
@[simp, to_additive]
theorem mulIndicator_eq_one : (mulIndicator s f = fun x => 1) ↔ Disjoint (mulSupport f) s := by
simp only [funext_iff, mul_indicator_apply_eq_one, Set.disjoint_left, mem_mul_support,
@@ -190,36 +142,18 @@ theorem mulIndicator_eq_one : (mulIndicator s f = fun x => 1) ↔ Disjoint (mulS
#align set.mul_indicator_eq_one Set.mulIndicator_eq_one
#align set.indicator_eq_zero Set.indicator_eq_zero
-/- warning: set.mul_indicator_eq_one' -> Set.mulIndicator_eq_one' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M}, Iff (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 s f) (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)))))) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Function.mulSupport.{u1, u2} α M _inst_1 f) s)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M}, Iff (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.159 : α) => M) (fun (i : α) => _inst_1))))) (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (Function.mulSupport.{u2, u1} α M _inst_1 f) s)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_eq_one' Set.mulIndicator_eq_one'ₓ'. -/
@[simp, to_additive]
theorem mulIndicator_eq_one' : mulIndicator s f = 1 ↔ Disjoint (mulSupport f) s :=
mulIndicator_eq_one
#align set.mul_indicator_eq_one' Set.mulIndicator_eq_one'
#align set.indicator_eq_zero' Set.indicator_eq_zero'
-/- warning: set.mul_indicator_apply_ne_one -> Set.mulIndicator_apply_ne_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {a : α}, Iff (Ne.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1)))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Function.mulSupport.{u1, u2} α M _inst_1 f)))
-but is expected to have type
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {a : α}, Iff (Ne.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) a (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s (Function.mulSupport.{u1, u2} α M _inst_1 f)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_apply_ne_one Set.mulIndicator_apply_ne_oneₓ'. -/
@[to_additive]
theorem mulIndicator_apply_ne_one {a : α} : s.mulIndicator f a ≠ 1 ↔ a ∈ s ∩ mulSupport f := by
simp only [Ne.def, mul_indicator_apply_eq_one, not_imp, mem_inter_iff, mem_mul_support]
#align set.mul_indicator_apply_ne_one Set.mulIndicator_apply_ne_one
#align set.indicator_apply_ne_zero Set.indicator_apply_ne_zero
-/- warning: set.mul_support_mul_indicator -> Set.mulSupport_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M}, Eq.{succ u1} (Set.{u1} α) (Function.mulSupport.{u1, u2} α M _inst_1 (Set.mulIndicator.{u1, u2} α M _inst_1 s f)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Function.mulSupport.{u1, u2} α M _inst_1 f))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M}, Eq.{succ u2} (Set.{u2} α) (Function.mulSupport.{u2, u1} α M _inst_1 (Set.mulIndicator.{u2, u1} α M _inst_1 s f)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s (Function.mulSupport.{u2, u1} α M _inst_1 f))
-Case conversion may be inaccurate. Consider using '#align set.mul_support_mul_indicator Set.mulSupport_mulIndicatorₓ'. -/
@[simp, to_additive]
theorem mulSupport_mulIndicator :
Function.mulSupport (s.mulIndicator f) = s ∩ Function.mulSupport f :=
@@ -238,35 +172,17 @@ theorem mem_of_mulIndicator_ne_one (h : mulIndicator s f a ≠ 1) : a ∈ s :=
#align set.mem_of_indicator_ne_zero Set.mem_of_indicator_ne_zero
-/
-/- warning: set.eq_on_mul_indicator -> Set.eqOn_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M}, Set.EqOn.{u1, u2} α M (Set.mulIndicator.{u1, u2} α M _inst_1 s f) f s
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M}, Set.EqOn.{u2, u1} α M (Set.mulIndicator.{u2, u1} α M _inst_1 s f) f s
-Case conversion may be inaccurate. Consider using '#align set.eq_on_mul_indicator Set.eqOn_mulIndicatorₓ'. -/
@[to_additive]
theorem eqOn_mulIndicator : EqOn (mulIndicator s f) f s := fun x hx => mulIndicator_of_mem hx f
#align set.eq_on_mul_indicator Set.eqOn_mulIndicator
#align set.eq_on_indicator Set.eqOn_indicator
-/- warning: set.mul_support_mul_indicator_subset -> Set.mulSupport_mulIndicator_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M}, HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Function.mulSupport.{u1, u2} α M _inst_1 (Set.mulIndicator.{u1, u2} α M _inst_1 s f)) s
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M}, HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (Function.mulSupport.{u2, u1} α M _inst_1 (Set.mulIndicator.{u2, u1} α M _inst_1 s f)) s
-Case conversion may be inaccurate. Consider using '#align set.mul_support_mul_indicator_subset Set.mulSupport_mulIndicator_subsetₓ'. -/
@[to_additive]
theorem mulSupport_mulIndicator_subset : mulSupport (s.mulIndicator f) ⊆ s := fun x hx =>
hx.imp_symm fun h => mulIndicator_of_not_mem h f
#align set.mul_support_mul_indicator_subset Set.mulSupport_mulIndicator_subset
#align set.support_indicator_subset Set.support_indicator_subset
-/- warning: set.mul_indicator_mul_support -> Set.mulIndicator_mulSupport is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {f : α -> M}, Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 (Function.mulSupport.{u1, u2} α M _inst_1 f) f) f
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {f : α -> M}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 (Function.mulSupport.{u2, u1} α M _inst_1 f) f) f
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_mul_support Set.mulIndicator_mulSupportₓ'. -/
@[simp, to_additive]
theorem mulIndicator_mulSupport : mulIndicator (mulSupport f) f = f :=
mulIndicator_eq_self.2 Subset.rfl
@@ -283,48 +199,24 @@ theorem mulIndicator_range_comp {ι : Sort _} (f : ι → α) (g : α → M) :
#align set.indicator_range_comp Set.indicator_range_comp
-/
-/- warning: set.mul_indicator_congr -> Set.mulIndicator_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M}, (Set.EqOn.{u1, u2} α M f g s) -> (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 s f) (Set.mulIndicator.{u1, u2} α M _inst_1 s g))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {g : α -> M}, (Set.EqOn.{u2, u1} α M f g s) -> (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) (Set.mulIndicator.{u2, u1} α M _inst_1 s g))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_congr Set.mulIndicator_congrₓ'. -/
@[to_additive]
theorem mulIndicator_congr (h : EqOn f g s) : mulIndicator s f = mulIndicator s g :=
funext fun x => by simp only [mul_indicator]; split_ifs; · exact h h_1; rfl
#align set.mul_indicator_congr Set.mulIndicator_congr
#align set.indicator_congr Set.indicator_congr
-/- warning: set.mul_indicator_univ -> Set.mulIndicator_univ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 (Set.univ.{u1} α) f) f
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 (Set.univ.{u2} α) f) f
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_univ Set.mulIndicator_univₓ'. -/
@[simp, to_additive]
theorem mulIndicator_univ (f : α → M) : mulIndicator (univ : Set α) f = f :=
mulIndicator_eq_self.2 <| subset_univ _
#align set.mul_indicator_univ Set.mulIndicator_univ
#align set.indicator_univ Set.indicator_univ
-/- warning: set.mul_indicator_empty -> Set.mulIndicator_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α)) f) (fun (a : α) => OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 (EmptyCollection.emptyCollection.{u2} (Set.{u2} α) (Set.instEmptyCollectionSet.{u2} α)) f) (fun (a : α) => OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_empty Set.mulIndicator_emptyₓ'. -/
@[simp, to_additive]
theorem mulIndicator_empty (f : α → M) : mulIndicator (∅ : Set α) f = fun a => 1 :=
mulIndicator_eq_one.2 <| disjoint_empty _
#align set.mul_indicator_empty Set.mulIndicator_empty
#align set.indicator_empty Set.indicator_empty
-/- warning: set.mul_indicator_empty' -> Set.mulIndicator_empty' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α)) f) (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)))))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 (EmptyCollection.emptyCollection.{u2} (Set.{u2} α) (Set.instEmptyCollectionSet.{u2} α)) f) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.159 : α) => M) (fun (i : α) => _inst_1))))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_empty' Set.mulIndicator_empty'ₓ'. -/
@[to_additive]
theorem mulIndicator_empty' (f : α → M) : mulIndicator (∅ : Set α) f = 1 :=
mulIndicator_empty f
@@ -333,24 +225,12 @@ theorem mulIndicator_empty' (f : α → M) : mulIndicator (∅ : Set α) f = 1 :
variable (M)
-/- warning: set.mul_indicator_one -> Set.mulIndicator_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : One.{u2} M] (s : Set.{u1} α), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 s (fun (x : α) => OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1)))) (fun (x : α) => OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1)))
-but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : One.{u1} M] (s : Set.{u2} α), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s (fun (x : α) => OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1))) (fun (x : α) => OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_one Set.mulIndicator_oneₓ'. -/
@[simp, to_additive]
theorem mulIndicator_one (s : Set α) : (mulIndicator s fun x => (1 : M)) = fun x => (1 : M) :=
mulIndicator_eq_one.2 <| by simp only [mul_support_one, empty_disjoint]
#align set.mul_indicator_one Set.mulIndicator_one
#align set.indicator_zero Set.indicator_zero
-/- warning: set.mul_indicator_one' -> Set.mulIndicator_one' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : One.{u2} M] {s : Set.{u1} α}, Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 s (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)))))) (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)))))
-but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : One.{u1} M] {s : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.1615 : α) => M) (fun (i : α) => _inst_1))))) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.1615 : α) => M) (fun (i : α) => _inst_1))))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_one' Set.mulIndicator_one'ₓ'. -/
@[simp, to_additive]
theorem mulIndicator_one' {s : Set α} : s.mulIndicator (1 : α → M) = 1 :=
mulIndicator_one M s
@@ -359,12 +239,6 @@ theorem mulIndicator_one' {s : Set α} : s.mulIndicator (1 : α → M) = 1 :=
variable {M}
-/- warning: set.mul_indicator_mul_indicator -> Set.mulIndicator_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (s : Set.{u1} α) (t : Set.{u1} α) (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 s (Set.mulIndicator.{u1, u2} α M _inst_1 t f)) (Set.mulIndicator.{u1, u2} α M _inst_1 (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t) f)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (s : Set.{u2} α) (t : Set.{u2} α) (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s (Set.mulIndicator.{u2, u1} α M _inst_1 t f)) (Set.mulIndicator.{u2, u1} α M _inst_1 (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) f)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_mul_indicator Set.mulIndicator_mulIndicatorₓ'. -/
@[to_additive]
theorem mulIndicator_mulIndicator (s t : Set α) (f : α → M) :
mulIndicator s (mulIndicator t f) = mulIndicator (s ∩ t) f :=
@@ -373,12 +247,6 @@ theorem mulIndicator_mulIndicator (s t : Set α) (f : α → M) :
#align set.mul_indicator_mul_indicator Set.mulIndicator_mulIndicator
#align set.indicator_indicator Set.indicator_indicator
-/- warning: set.mul_indicator_inter_mul_support -> Set.mulIndicator_inter_mulSupport is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (s : Set.{u1} α) (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Function.mulSupport.{u1, u2} α M _inst_1 f)) f) (Set.mulIndicator.{u1, u2} α M _inst_1 s f)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (s : Set.{u2} α) (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s (Function.mulSupport.{u2, u1} α M _inst_1 f)) f) (Set.mulIndicator.{u2, u1} α M _inst_1 s f)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_inter_mul_support Set.mulIndicator_inter_mulSupportₓ'. -/
@[simp, to_additive]
theorem mulIndicator_inter_mulSupport (s : Set α) (f : α → M) :
mulIndicator (s ∩ mulSupport f) f = mulIndicator s f := by
@@ -386,12 +254,6 @@ theorem mulIndicator_inter_mulSupport (s : Set α) (f : α → M) :
#align set.mul_indicator_inter_mul_support Set.mulIndicator_inter_mulSupport
#align set.indicator_inter_support Set.indicator_inter_support
-/- warning: set.comp_mul_indicator -> Set.comp_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {M : Type.{u3}} [_inst_1 : One.{u3} M] (h : M -> β) (f : α -> M) {s : Set.{u1} α} {x : α} [_inst_3 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x s)], Eq.{succ u2} β (h (Set.mulIndicator.{u1, u3} α M _inst_1 s f x)) (Set.piecewise.{u1, succ u2} α (fun (ᾰ : α) => β) s (Function.comp.{succ u1, succ u3, succ u2} α M β h f) (Function.const.{succ u2, succ u1} β α (h (OfNat.ofNat.{u3} M 1 (OfNat.mk.{u3} M 1 (One.one.{u3} M _inst_1))))) (fun (j : α) => _inst_3 j) x)
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (h : M -> β) (f : α -> M) {s : Set.{u3} α} {x : α} [_inst_3 : DecidablePred.{succ u3} α (fun (_x : α) => Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) _x s)], Eq.{succ u2} β (h (Set.mulIndicator.{u3, u1} α M _inst_1 s f x)) (Set.piecewise.{u3, succ u2} α (fun (ᾰ : α) => β) s (Function.comp.{succ u3, succ u1, succ u2} α M β h f) (Function.const.{succ u2, succ u3} β α (h (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))) (fun (j : α) => _inst_3 j) x)
-Case conversion may be inaccurate. Consider using '#align set.comp_mul_indicator Set.comp_mulIndicatorₓ'. -/
@[to_additive]
theorem comp_mulIndicator (h : M → β) (f : α → M) {s : Set α} {x : α} [DecidablePred (· ∈ s)] :
h (s.mulIndicator f x) = s.piecewise (h ∘ f) (const α (h 1)) x := by
@@ -399,12 +261,6 @@ theorem comp_mulIndicator (h : M → β) (f : α → M) {s : Set α} {x : α} [D
#align set.comp_mul_indicator Set.comp_mulIndicator
#align set.comp_indicator Set.comp_indicator
-/- warning: set.mul_indicator_comp_right -> Set.mulIndicator_comp_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {M : Type.{u3}} [_inst_1 : One.{u3} M] {s : Set.{u1} α} (f : β -> α) {g : α -> M} {x : β}, Eq.{succ u3} M (Set.mulIndicator.{u2, u3} β M _inst_1 (Set.preimage.{u2, u1} β α f s) (Function.comp.{succ u2, succ u1, succ u3} β α M g f) x) (Set.mulIndicator.{u1, u3} α M _inst_1 s g (f x))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u3} α} (f : β -> α) {g : α -> M} {x : β}, Eq.{succ u2} M (Set.mulIndicator.{u1, u2} β M _inst_1 (Set.preimage.{u1, u3} β α f s) (Function.comp.{succ u1, succ u3, succ u2} β α M g f) x) (Set.mulIndicator.{u3, u2} α M _inst_1 s g (f x))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_comp_right Set.mulIndicator_comp_rightₓ'. -/
@[to_additive]
theorem mulIndicator_comp_right {s : Set α} (f : β → α) {g : α → M} {x : β} :
mulIndicator (f ⁻¹' s) (g ∘ f) x = mulIndicator s g (f x) := by simp only [mul_indicator];
@@ -412,12 +268,6 @@ theorem mulIndicator_comp_right {s : Set α} (f : β → α) {g : α → M} {x :
#align set.mul_indicator_comp_right Set.mulIndicator_comp_right
#align set.indicator_comp_right Set.indicator_comp_right
-/- warning: set.mul_indicator_image -> Set.mulIndicator_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {M : Type.{u3}} [_inst_1 : One.{u3} M] {s : Set.{u1} α} {f : β -> M} {g : α -> β}, (Function.Injective.{succ u1, succ u2} α β g) -> (forall {x : α}, Eq.{succ u3} M (Set.mulIndicator.{u2, u3} β M _inst_1 (Set.image.{u1, u2} α β g s) f (g x)) (Set.mulIndicator.{u1, u3} α M _inst_1 s (Function.comp.{succ u1, succ u2, succ u3} α β M f g) x))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u3} α} {f : β -> M} {g : α -> β}, (Function.Injective.{succ u3, succ u2} α β g) -> (forall {x : α}, Eq.{succ u1} M (Set.mulIndicator.{u2, u1} β M _inst_1 (Set.image.{u3, u2} α β g s) f (g x)) (Set.mulIndicator.{u3, u1} α M _inst_1 s (Function.comp.{succ u3, succ u2, succ u1} α β M f g) x))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_image Set.mulIndicator_imageₓ'. -/
@[to_additive]
theorem mulIndicator_image {s : Set α} {f : β → M} {g : α → β} (hg : Injective g) {x : α} :
mulIndicator (g '' s) f (g x) = mulIndicator s (f ∘ g) x := by
@@ -446,12 +296,6 @@ theorem comp_mulIndicator_const (c : M) (f : M → N) (hf : f 1 = 1) :
#align set.comp_indicator_const Set.comp_indicator_const
-/
-/- warning: set.mul_indicator_preimage -> Set.mulIndicator_preimage is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (s : Set.{u1} α) (f : α -> M) (B : Set.{u2} M), Eq.{succ u1} (Set.{u1} α) (Set.preimage.{u1, u2} α M (Set.mulIndicator.{u1, u2} α M _inst_1 s f) B) (Set.ite.{u1} α s (Set.preimage.{u1, u2} α M f B) (Set.preimage.{u1, u2} α M (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1))))) B))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (s : Set.{u2} α) (f : α -> M) (B : Set.{u1} M), Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α M (Set.mulIndicator.{u2, u1} α M _inst_1 s f) B) (Set.ite.{u2} α s (Set.preimage.{u2, u1} α M f B) (Set.preimage.{u2, u1} α M (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Data.Set.Image._hyg.26 : α) => M) (fun (i : α) => _inst_1)))) B))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_preimage Set.mulIndicator_preimageₓ'. -/
@[to_additive]
theorem mulIndicator_preimage (s : Set α) (f : α → M) (B : Set M) :
mulIndicator s f ⁻¹' B = s.ite (f ⁻¹' B) (1 ⁻¹' B) :=
@@ -471,12 +315,6 @@ theorem mulIndicator_one_preimage (s : Set M) :
#align set.indicator_zero_preimage Set.indicator_zero_preimage
-/
-/- warning: set.mul_indicator_const_preimage_eq_union -> Set.mulIndicator_const_preimage_eq_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (U : Set.{u1} α) (s : Set.{u2} M) (a : M) [_inst_3 : Decidable (Membership.Mem.{u2, u2} M (Set.{u2} M) (Set.hasMem.{u2} M) a s)] [_inst_4 : Decidable (Membership.Mem.{u2, u2} M (Set.{u2} M) (Set.hasMem.{u2} M) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) s)], Eq.{succ u1} (Set.{u1} α) (Set.preimage.{u1, u2} α M (Set.mulIndicator.{u1, u2} α M _inst_1 U (fun (x : α) => a)) s) (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (ite.{succ u1} (Set.{u1} α) (Membership.Mem.{u2, u2} M (Set.{u2} M) (Set.hasMem.{u2} M) a s) _inst_3 U (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (ite.{succ u1} (Set.{u1} α) (Membership.Mem.{u2, u2} M (Set.{u2} M) (Set.hasMem.{u2} M) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) s) _inst_4 (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) U) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (U : Set.{u2} α) (s : Set.{u1} M) (a : M) [_inst_3 : Decidable (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) a s)] [_inst_4 : Decidable (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) s)], Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α M (Set.mulIndicator.{u2, u1} α M _inst_1 U (fun (x : α) => a)) s) (Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) (ite.{succ u2} (Set.{u2} α) (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) a s) _inst_3 U (EmptyCollection.emptyCollection.{u2} (Set.{u2} α) (Set.instEmptyCollectionSet.{u2} α))) (ite.{succ u2} (Set.{u2} α) (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) s) _inst_4 (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) U) (EmptyCollection.emptyCollection.{u2} (Set.{u2} α) (Set.instEmptyCollectionSet.{u2} α))))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_const_preimage_eq_union Set.mulIndicator_const_preimage_eq_unionₓ'. -/
@[to_additive]
theorem mulIndicator_const_preimage_eq_union (U : Set α) (s : Set M) (a : M) [Decidable (a ∈ s)]
[Decidable ((1 : M) ∈ s)] :
@@ -487,12 +325,6 @@ theorem mulIndicator_const_preimage_eq_union (U : Set α) (s : Set M) (a : M) [D
#align set.mul_indicator_const_preimage_eq_union Set.mulIndicator_const_preimage_eq_union
#align set.indicator_const_preimage_eq_union Set.indicator_const_preimage_eq_union
-/- warning: set.mul_indicator_const_preimage -> Set.mulIndicator_const_preimage is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (U : Set.{u1} α) (s : Set.{u2} M) (a : M), Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) (Set.preimage.{u1, u2} α M (Set.mulIndicator.{u1, u2} α M _inst_1 U (fun (x : α) => a)) s) (Insert.insert.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasInsert.{u1} (Set.{u1} α)) (Set.univ.{u1} α) (Insert.insert.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasInsert.{u1} (Set.{u1} α)) U (Insert.insert.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasInsert.{u1} (Set.{u1} α)) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) U) (Singleton.singleton.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasSingleton.{u1} (Set.{u1} α)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))))))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (U : Set.{u2} α) (s : Set.{u1} M) (a : M), Membership.mem.{u2, u2} (Set.{u2} α) (Set.{u2} (Set.{u2} α)) (Set.instMembershipSet.{u2} (Set.{u2} α)) (Set.preimage.{u2, u1} α M (Set.mulIndicator.{u2, u1} α M _inst_1 U (fun (x : α) => a)) s) (Insert.insert.{u2, u2} (Set.{u2} α) (Set.{u2} (Set.{u2} α)) (Set.instInsertSet.{u2} (Set.{u2} α)) (Set.univ.{u2} α) (Insert.insert.{u2, u2} (Set.{u2} α) (Set.{u2} (Set.{u2} α)) (Set.instInsertSet.{u2} (Set.{u2} α)) U (Insert.insert.{u2, u2} (Set.{u2} α) (Set.{u2} (Set.{u2} α)) (Set.instInsertSet.{u2} (Set.{u2} α)) (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) U) (Singleton.singleton.{u2, u2} (Set.{u2} α) (Set.{u2} (Set.{u2} α)) (Set.instSingletonSet.{u2} (Set.{u2} α)) (EmptyCollection.emptyCollection.{u2} (Set.{u2} α) (Set.instEmptyCollectionSet.{u2} α))))))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_const_preimage Set.mulIndicator_const_preimageₓ'. -/
@[to_additive]
theorem mulIndicator_const_preimage (U : Set α) (s : Set M) (a : M) :
(U.mulIndicator fun x => a) ⁻¹' s ∈ ({Set.univ, U, Uᶜ, ∅} : Set (Set α)) := by
@@ -502,23 +334,11 @@ theorem mulIndicator_const_preimage (U : Set α) (s : Set M) (a : M) :
#align set.mul_indicator_const_preimage Set.mulIndicator_const_preimage
#align set.indicator_const_preimage Set.indicator_const_preimage
-/- warning: set.indicator_one_preimage -> Set.indicator_one_preimage is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] [_inst_3 : Zero.{u2} M] (U : Set.{u1} α) (s : Set.{u2} M), Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) (Set.preimage.{u1, u2} α M (Set.indicator.{u1, u2} α M _inst_3 U (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)))))) s) (Insert.insert.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasInsert.{u1} (Set.{u1} α)) (Set.univ.{u1} α) (Insert.insert.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasInsert.{u1} (Set.{u1} α)) U (Insert.insert.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasInsert.{u1} (Set.{u1} α)) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) U) (Singleton.singleton.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasSingleton.{u1} (Set.{u1} α)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))))))
-but is expected to have type
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] [_inst_3 : Zero.{u2} M] (U : Set.{u1} α) (s : Set.{u2} M), Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) (Set.preimage.{u1, u2} α M (Set.indicator.{u1, u2} α M _inst_3 U (OfNat.ofNat.{max u1 u2} (α -> M) 1 (One.toOfNat1.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => _inst_1))))) s) (Insert.insert.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instInsertSet.{u1} (Set.{u1} α)) (Set.univ.{u1} α) (Insert.insert.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instInsertSet.{u1} (Set.{u1} α)) U (Insert.insert.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instInsertSet.{u1} (Set.{u1} α)) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) U) (Singleton.singleton.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instSingletonSet.{u1} (Set.{u1} α)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))))))
-Case conversion may be inaccurate. Consider using '#align set.indicator_one_preimage Set.indicator_one_preimageₓ'. -/
theorem indicator_one_preimage [Zero M] (U : Set α) (s : Set M) :
U.indicator 1 ⁻¹' s ∈ ({Set.univ, U, Uᶜ, ∅} : Set (Set α)) :=
indicator_const_preimage _ _ 1
#align set.indicator_one_preimage Set.indicator_one_preimage
-/- warning: set.mul_indicator_preimage_of_not_mem -> Set.mulIndicator_preimage_of_not_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (s : Set.{u1} α) (f : α -> M) {t : Set.{u2} M}, (Not (Membership.Mem.{u2, u2} M (Set.{u2} M) (Set.hasMem.{u2} M) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) t)) -> (Eq.{succ u1} (Set.{u1} α) (Set.preimage.{u1, u2} α M (Set.mulIndicator.{u1, u2} α M _inst_1 s f) t) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (Set.preimage.{u1, u2} α M f t) s))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (s : Set.{u2} α) (f : α -> M) {t : Set.{u1} M}, (Not (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) t)) -> (Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α M (Set.mulIndicator.{u2, u1} α M _inst_1 s f) t) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (Set.preimage.{u2, u1} α M f t) s))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_preimage_of_not_mem Set.mulIndicator_preimage_of_not_memₓ'. -/
@[to_additive]
theorem mulIndicator_preimage_of_not_mem (s : Set α) (f : α → M) {t : Set M} (ht : (1 : M) ∉ t) :
mulIndicator s f ⁻¹' t = f ⁻¹' t ∩ s := by
@@ -526,12 +346,6 @@ theorem mulIndicator_preimage_of_not_mem (s : Set α) (f : α → M) {t : Set M}
#align set.mul_indicator_preimage_of_not_mem Set.mulIndicator_preimage_of_not_mem
#align set.indicator_preimage_of_not_mem Set.indicator_preimage_of_not_mem
-/- warning: set.mem_range_mul_indicator -> Set.mem_range_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {r : M} {s : Set.{u1} α} {f : α -> M}, Iff (Membership.Mem.{u2, u2} M (Set.{u2} M) (Set.hasMem.{u2} M) r (Set.range.{u2, succ u1} M α (Set.mulIndicator.{u1, u2} α M _inst_1 s f))) (Or (And (Eq.{succ u2} M r (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1)))) (Ne.{succ u1} (Set.{u1} α) s (Set.univ.{u1} α))) (Membership.Mem.{u2, u2} M (Set.{u2} M) (Set.hasMem.{u2} M) r (Set.image.{u1, u2} α M f s)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {r : M} {s : Set.{u2} α} {f : α -> M}, Iff (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) r (Set.range.{u1, succ u2} M α (Set.mulIndicator.{u2, u1} α M _inst_1 s f))) (Or (And (Eq.{succ u1} M r (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1))) (Ne.{succ u2} (Set.{u2} α) s (Set.univ.{u2} α))) (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) r (Set.image.{u2, u1} α M f s)))
-Case conversion may be inaccurate. Consider using '#align set.mem_range_mul_indicator Set.mem_range_mulIndicatorₓ'. -/
@[to_additive]
theorem mem_range_mulIndicator {r : M} {s : Set α} {f : α → M} :
r ∈ range (mulIndicator s f) ↔ r = 1 ∧ s ≠ univ ∨ r ∈ f '' s := by
@@ -555,12 +369,6 @@ section Monoid
variable [MulOneClass M] {s t : Set α} {f g : α → M} {a : α}
-/- warning: set.mul_indicator_union_mul_inter_apply -> Set.mulIndicator_union_mul_inter_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] (f : α -> M) (s : Set.{u1} α) (t : Set.{u1} α) (a : α), Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M _inst_1)) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t) f a) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t) f a)) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M _inst_1)) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f a) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) t f a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (f : α -> M) (s : Set.{u2} α) (t : Set.{u2} α) (a : α), Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) s t) f a) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) f a)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f a) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) t f a))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_union_mul_inter_apply Set.mulIndicator_union_mul_inter_applyₓ'. -/
@[to_additive]
theorem mulIndicator_union_mul_inter_apply (f : α → M) (s t : Set α) (a : α) :
mulIndicator (s ∪ t) f a * mulIndicator (s ∩ t) f a = mulIndicator s f a * mulIndicator t f a :=
@@ -568,12 +376,6 @@ theorem mulIndicator_union_mul_inter_apply (f : α → M) (s t : Set α) (a : α
#align set.mul_indicator_union_mul_inter_apply Set.mulIndicator_union_mul_inter_apply
#align set.indicator_union_add_inter_apply Set.indicator_union_add_inter_apply
-/- warning: set.mul_indicator_union_mul_inter -> Set.mulIndicator_union_mul_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] (f : α -> M) (s : Set.{u1} α) (t : Set.{u1} α), Eq.{succ (max u1 u2)} (α -> M) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasMul.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t) f) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t) f)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasMul.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) t f))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (f : α -> M) (s : Set.{u2} α) (t : Set.{u2} α), Eq.{max (succ u2) (succ u1)} (α -> M) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toMul.{u1} M _inst_1))) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) s t) f) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) f)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toMul.{u1} M _inst_1))) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) t f))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_union_mul_inter Set.mulIndicator_union_mul_interₓ'. -/
@[to_additive]
theorem mulIndicator_union_mul_inter (f : α → M) (s t : Set α) :
mulIndicator (s ∪ t) f * mulIndicator (s ∩ t) f = mulIndicator s f * mulIndicator t f :=
@@ -581,12 +383,6 @@ theorem mulIndicator_union_mul_inter (f : α → M) (s t : Set α) :
#align set.mul_indicator_union_mul_inter Set.mulIndicator_union_mul_inter
#align set.indicator_union_add_inter Set.indicator_union_add_inter
-/- warning: set.mul_indicator_union_of_not_mem_inter -> Set.mulIndicator_union_of_not_mem_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α} {a : α}, (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t))) -> (forall (f : α -> M), Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t) f a) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M _inst_1)) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f a) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) t f a)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α} {a : α}, (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t))) -> (forall (f : α -> M), Eq.{succ u1} M (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) s t) f a) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f a) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) t f a)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_union_of_not_mem_inter Set.mulIndicator_union_of_not_mem_interₓ'. -/
@[to_additive]
theorem mulIndicator_union_of_not_mem_inter (h : a ∉ s ∩ t) (f : α → M) :
mulIndicator (s ∪ t) f a = mulIndicator s f a * mulIndicator t f a := by
@@ -594,12 +390,6 @@ theorem mulIndicator_union_of_not_mem_inter (h : a ∉ s ∩ t) (f : α → M) :
#align set.mul_indicator_union_of_not_mem_inter Set.mulIndicator_union_of_not_mem_inter
#align set.indicator_union_of_not_mem_inter Set.indicator_union_of_not_mem_inter
-/- warning: set.mul_indicator_union_of_disjoint -> Set.mulIndicator_union_of_disjoint is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (forall (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t) f) (fun (a : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M _inst_1)) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f a) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) t f a)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) s t) -> (forall (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) s t) f) (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f a) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) t f a)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_union_of_disjoint Set.mulIndicator_union_of_disjointₓ'. -/
@[to_additive]
theorem mulIndicator_union_of_disjoint (h : Disjoint s t) (f : α → M) :
mulIndicator (s ∪ t) f = fun a => mulIndicator s f a * mulIndicator t f a :=
@@ -607,12 +397,6 @@ theorem mulIndicator_union_of_disjoint (h : Disjoint s t) (f : α → M) :
#align set.mul_indicator_union_of_disjoint Set.mulIndicator_union_of_disjoint
#align set.indicator_union_of_disjoint Set.indicator_union_of_disjoint
-/- warning: set.mul_indicator_mul -> Set.mulIndicator_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] (s : Set.{u1} α) (f : α -> M) (g : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s (fun (a : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M _inst_1)) (f a) (g a))) (fun (a : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M _inst_1)) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f a) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s g a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (s : Set.{u2} α) (f : α -> M) (g : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (f a) (g a))) (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f a) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s g a))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_mul Set.mulIndicator_mulₓ'. -/
@[to_additive]
theorem mulIndicator_mul (s : Set α) (f g : α → M) :
(mulIndicator s fun a => f a * g a) = fun a => mulIndicator s f a * mulIndicator s g a := by
@@ -620,12 +404,6 @@ theorem mulIndicator_mul (s : Set α) (f g : α → M) :
#align set.mul_indicator_mul Set.mulIndicator_mul
#align set.indicator_add Set.indicator_add
-/- warning: set.mul_indicator_mul' -> Set.mulIndicator_mul' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] (s : Set.{u1} α) (f : α -> M) (g : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasMul.{u2} M _inst_1))) f g)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasMul.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s g))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (s : Set.{u2} α) (f : α -> M) (g : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toMul.{u1} M _inst_1))) f g)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toMul.{u1} M _inst_1))) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s g))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_mul' Set.mulIndicator_mul'ₓ'. -/
@[to_additive]
theorem mulIndicator_mul' (s : Set α) (f g : α → M) :
mulIndicator s (f * g) = mulIndicator s f * mulIndicator s g :=
@@ -633,12 +411,6 @@ theorem mulIndicator_mul' (s : Set α) (f g : α → M) :
#align set.mul_indicator_mul' Set.mulIndicator_mul'
#align set.indicator_add' Set.indicator_add'
-/- warning: set.mul_indicator_compl_mul_self_apply -> Set.mulIndicator_compl_mul_self_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] (s : Set.{u1} α) (f : α -> M) (a : α), Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M _inst_1)) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f a) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f a)) (f a)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (s : Set.{u2} α) (f : α -> M) (a : α), Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) s) f a) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f a)) (f a)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_compl_mul_self_apply Set.mulIndicator_compl_mul_self_applyₓ'. -/
@[simp, to_additive]
theorem mulIndicator_compl_mul_self_apply (s : Set α) (f : α → M) (a : α) :
mulIndicator (sᶜ) f a * mulIndicator s f a = f a :=
@@ -646,12 +418,6 @@ theorem mulIndicator_compl_mul_self_apply (s : Set α) (f : α → M) (a : α) :
#align set.mul_indicator_compl_mul_self_apply Set.mulIndicator_compl_mul_self_apply
#align set.indicator_compl_add_self_apply Set.indicator_compl_add_self_apply
-/- warning: set.mul_indicator_compl_mul_self -> Set.mulIndicator_compl_mul_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] (s : Set.{u1} α) (f : α -> M), Eq.{succ (max u1 u2)} (α -> M) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasMul.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f)) f
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (s : Set.{u2} α) (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toMul.{u1} M _inst_1))) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) s) f) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f)) f
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_compl_mul_self Set.mulIndicator_compl_mul_selfₓ'. -/
@[simp, to_additive]
theorem mulIndicator_compl_mul_self (s : Set α) (f : α → M) :
mulIndicator (sᶜ) f * mulIndicator s f = f :=
@@ -659,12 +425,6 @@ theorem mulIndicator_compl_mul_self (s : Set α) (f : α → M) :
#align set.mul_indicator_compl_mul_self Set.mulIndicator_compl_mul_self
#align set.indicator_compl_add_self Set.indicator_compl_add_self
-/- warning: set.mul_indicator_self_mul_compl_apply -> Set.mulIndicator_self_mul_compl_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] (s : Set.{u1} α) (f : α -> M) (a : α), Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M _inst_1)) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f a) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f a)) (f a)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (s : Set.{u2} α) (f : α -> M) (a : α), Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f a) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) s) f a)) (f a)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_self_mul_compl_apply Set.mulIndicator_self_mul_compl_applyₓ'. -/
@[simp, to_additive]
theorem mulIndicator_self_mul_compl_apply (s : Set α) (f : α → M) (a : α) :
mulIndicator s f a * mulIndicator (sᶜ) f a = f a :=
@@ -672,12 +432,6 @@ theorem mulIndicator_self_mul_compl_apply (s : Set α) (f : α → M) (a : α) :
#align set.mul_indicator_self_mul_compl_apply Set.mulIndicator_self_mul_compl_apply
#align set.indicator_self_add_compl_apply Set.indicator_self_add_compl_apply
-/- warning: set.mul_indicator_self_mul_compl -> Set.mulIndicator_self_mul_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] (s : Set.{u1} α) (f : α -> M), Eq.{succ (max u1 u2)} (α -> M) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasMul.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f)) f
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (s : Set.{u2} α) (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toMul.{u1} M _inst_1))) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) s) f)) f
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_self_mul_compl Set.mulIndicator_self_mul_complₓ'. -/
@[simp, to_additive]
theorem mulIndicator_self_mul_compl (s : Set α) (f : α → M) :
mulIndicator s f * mulIndicator (sᶜ) f = f :=
@@ -685,12 +439,6 @@ theorem mulIndicator_self_mul_compl (s : Set α) (f : α → M) :
#align set.mul_indicator_self_mul_compl Set.mulIndicator_self_mul_compl
#align set.indicator_self_add_compl Set.indicator_self_add_compl
-/- warning: set.mul_indicator_mul_eq_left -> Set.mulIndicator_mul_eq_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {f : α -> M} {g : α -> M}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Function.mulSupport.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) f) (Function.mulSupport.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) g)) -> (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (Function.mulSupport.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) f) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasMul.{u2} M _inst_1))) f g)) f)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {f : α -> M} {g : α -> M}, (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (Function.mulSupport.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) f) (Function.mulSupport.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) g)) -> (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (Function.mulSupport.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) f) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toMul.{u1} M _inst_1))) f g)) f)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_mul_eq_left Set.mulIndicator_mul_eq_leftₓ'. -/
@[to_additive]
theorem mulIndicator_mul_eq_left {f g : α → M} (h : Disjoint (mulSupport f) (mulSupport g)) :
(mulSupport f).mulIndicator (f * g) = f :=
@@ -701,12 +449,6 @@ theorem mulIndicator_mul_eq_left {f g : α → M} (h : Disjoint (mulSupport f) (
#align set.mul_indicator_mul_eq_left Set.mulIndicator_mul_eq_left
#align set.indicator_add_eq_left Set.indicator_add_eq_left
-/- warning: set.mul_indicator_mul_eq_right -> Set.mulIndicator_mul_eq_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {f : α -> M} {g : α -> M}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Function.mulSupport.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) f) (Function.mulSupport.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) g)) -> (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (Function.mulSupport.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) g) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasMul.{u2} M _inst_1))) f g)) g)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {f : α -> M} {g : α -> M}, (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (Function.mulSupport.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) f) (Function.mulSupport.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) g)) -> (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (Function.mulSupport.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) g) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toMul.{u1} M _inst_1))) f g)) g)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_mul_eq_right Set.mulIndicator_mul_eq_rightₓ'. -/
@[to_additive]
theorem mulIndicator_mul_eq_right {f g : α → M} (h : Disjoint (mulSupport f) (mulSupport g)) :
(mulSupport g).mulIndicator (f * g) = g :=
@@ -717,12 +459,6 @@ theorem mulIndicator_mul_eq_right {f g : α → M} (h : Disjoint (mulSupport f)
#align set.mul_indicator_mul_eq_right Set.mulIndicator_mul_eq_right
#align set.indicator_add_eq_right Set.indicator_add_eq_right
-/- warning: set.mul_indicator_mul_compl_eq_piecewise -> Set.mulIndicator_mul_compl_eq_piecewise is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {s : Set.{u1} α} [_inst_2 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x s)] (f : α -> M) (g : α -> M), Eq.{succ (max u1 u2)} (α -> M) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasMul.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s f) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) g)) (Set.piecewise.{u1, succ u2} α (fun (ᾰ : α) => M) s f g (fun (j : α) => _inst_2 j))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {s : Set.{u2} α} [_inst_2 : DecidablePred.{succ u2} α (fun (_x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) _x s)] (f : α -> M) (g : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toMul.{u1} M _inst_1))) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) s f) (Set.mulIndicator.{u2, u1} α M (MulOneClass.toOne.{u1} M _inst_1) (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) s) g)) (Set.piecewise.{u2, succ u1} α (fun (ᾰ : α) => M) s f g (fun (j : α) => _inst_2 j))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_mul_compl_eq_piecewise Set.mulIndicator_mul_compl_eq_piecewiseₓ'. -/
@[to_additive]
theorem mulIndicator_mul_compl_eq_piecewise [DecidablePred (· ∈ s)] (f g : α → M) :
s.mulIndicator f * sᶜ.mulIndicator g = s.piecewise f g :=
@@ -756,45 +492,21 @@ section DistribMulAction
variable {A : Type _} [AddMonoid A] [Monoid M] [DistribMulAction M A]
-/- warning: set.indicator_smul_apply -> Set.indicator_smul_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} {A : Type.{u3}} [_inst_1 : AddMonoid.{u3} A] [_inst_2 : Monoid.{u2} M] [_inst_3 : DistribMulAction.{u2, u3} M A _inst_2 _inst_1] (s : Set.{u1} α) (r : α -> M) (f : α -> A) (x : α), Eq.{succ u3} A (Set.indicator.{u1, u3} α A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) s (fun (x : α) => SMul.smul.{u2, u3} M A (SMulZeroClass.toHasSmul.{u2, u3} M A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) (DistribSMul.toSmulZeroClass.{u2, u3} M A (AddMonoid.toAddZeroClass.{u3} A _inst_1) (DistribMulAction.toDistribSMul.{u2, u3} M A _inst_2 _inst_1 _inst_3))) (r x) (f x)) x) (SMul.smul.{u2, u3} M A (SMulZeroClass.toHasSmul.{u2, u3} M A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) (DistribSMul.toSmulZeroClass.{u2, u3} M A (AddMonoid.toAddZeroClass.{u3} A _inst_1) (DistribMulAction.toDistribSMul.{u2, u3} M A _inst_2 _inst_1 _inst_3))) (r x) (Set.indicator.{u1, u3} α A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) s f x))
-but is expected to have type
- forall {α : Type.{u3}} {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : AddMonoid.{u2} A] [_inst_2 : Monoid.{u1} M] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_2 _inst_1] (s : Set.{u3} α) (r : α -> M) (f : α -> A) (x : α), Eq.{succ u2} A (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s (fun (x : α) => HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) (r x) (f x)) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) (r x) (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s f x))
-Case conversion may be inaccurate. Consider using '#align set.indicator_smul_apply Set.indicator_smul_applyₓ'. -/
theorem indicator_smul_apply (s : Set α) (r : α → M) (f : α → A) (x : α) :
indicator s (fun x => r x • f x) x = r x • indicator s f x := by dsimp only [indicator];
split_ifs; exacts[rfl, (smul_zero (r x)).symm]
#align set.indicator_smul_apply Set.indicator_smul_apply
-/- warning: set.indicator_smul -> Set.indicator_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} {A : Type.{u3}} [_inst_1 : AddMonoid.{u3} A] [_inst_2 : Monoid.{u2} M] [_inst_3 : DistribMulAction.{u2, u3} M A _inst_2 _inst_1] (s : Set.{u1} α) (r : α -> M) (f : α -> A), Eq.{max (succ u1) (succ u3)} (α -> A) (Set.indicator.{u1, u3} α A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) s (fun (x : α) => SMul.smul.{u2, u3} M A (SMulZeroClass.toHasSmul.{u2, u3} M A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) (DistribSMul.toSmulZeroClass.{u2, u3} M A (AddMonoid.toAddZeroClass.{u3} A _inst_1) (DistribMulAction.toDistribSMul.{u2, u3} M A _inst_2 _inst_1 _inst_3))) (r x) (f x))) (fun (x : α) => SMul.smul.{u2, u3} M A (SMulZeroClass.toHasSmul.{u2, u3} M A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) (DistribSMul.toSmulZeroClass.{u2, u3} M A (AddMonoid.toAddZeroClass.{u3} A _inst_1) (DistribMulAction.toDistribSMul.{u2, u3} M A _inst_2 _inst_1 _inst_3))) (r x) (Set.indicator.{u1, u3} α A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) s f x))
-but is expected to have type
- forall {α : Type.{u3}} {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : AddMonoid.{u2} A] [_inst_2 : Monoid.{u1} M] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_2 _inst_1] (s : Set.{u3} α) (r : α -> M) (f : α -> A), Eq.{max (succ u3) (succ u2)} (α -> A) (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s (fun (x : α) => HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) (r x) (f x))) (fun (x : α) => HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) (r x) (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s f x))
-Case conversion may be inaccurate. Consider using '#align set.indicator_smul Set.indicator_smulₓ'. -/
theorem indicator_smul (s : Set α) (r : α → M) (f : α → A) :
(indicator s fun x : α => r x • f x) = fun x : α => r x • indicator s f x :=
funext <| indicator_smul_apply s r f
#align set.indicator_smul Set.indicator_smul
-/- warning: set.indicator_const_smul_apply -> Set.indicator_const_smul_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} {A : Type.{u3}} [_inst_1 : AddMonoid.{u3} A] [_inst_2 : Monoid.{u2} M] [_inst_3 : DistribMulAction.{u2, u3} M A _inst_2 _inst_1] (s : Set.{u1} α) (r : M) (f : α -> A) (x : α), Eq.{succ u3} A (Set.indicator.{u1, u3} α A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) s (fun (x : α) => SMul.smul.{u2, u3} M A (SMulZeroClass.toHasSmul.{u2, u3} M A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) (DistribSMul.toSmulZeroClass.{u2, u3} M A (AddMonoid.toAddZeroClass.{u3} A _inst_1) (DistribMulAction.toDistribSMul.{u2, u3} M A _inst_2 _inst_1 _inst_3))) r (f x)) x) (SMul.smul.{u2, u3} M A (SMulZeroClass.toHasSmul.{u2, u3} M A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) (DistribSMul.toSmulZeroClass.{u2, u3} M A (AddMonoid.toAddZeroClass.{u3} A _inst_1) (DistribMulAction.toDistribSMul.{u2, u3} M A _inst_2 _inst_1 _inst_3))) r (Set.indicator.{u1, u3} α A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) s f x))
-but is expected to have type
- forall {α : Type.{u3}} {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : AddMonoid.{u2} A] [_inst_2 : Monoid.{u1} M] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_2 _inst_1] (s : Set.{u3} α) (r : M) (f : α -> A) (x : α), Eq.{succ u2} A (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s (fun (x : α) => HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) r (f x)) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) r (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s f x))
-Case conversion may be inaccurate. Consider using '#align set.indicator_const_smul_apply Set.indicator_const_smul_applyₓ'. -/
theorem indicator_const_smul_apply (s : Set α) (r : M) (f : α → A) (x : α) :
indicator s (fun x => r • f x) x = r • indicator s f x :=
indicator_smul_apply s (fun x => r) f x
#align set.indicator_const_smul_apply Set.indicator_const_smul_apply
-/- warning: set.indicator_const_smul -> Set.indicator_const_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} {A : Type.{u3}} [_inst_1 : AddMonoid.{u3} A] [_inst_2 : Monoid.{u2} M] [_inst_3 : DistribMulAction.{u2, u3} M A _inst_2 _inst_1] (s : Set.{u1} α) (r : M) (f : α -> A), Eq.{max (succ u1) (succ u3)} (α -> A) (Set.indicator.{u1, u3} α A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) s (fun (x : α) => SMul.smul.{u2, u3} M A (SMulZeroClass.toHasSmul.{u2, u3} M A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) (DistribSMul.toSmulZeroClass.{u2, u3} M A (AddMonoid.toAddZeroClass.{u3} A _inst_1) (DistribMulAction.toDistribSMul.{u2, u3} M A _inst_2 _inst_1 _inst_3))) r (f x))) (fun (x : α) => SMul.smul.{u2, u3} M A (SMulZeroClass.toHasSmul.{u2, u3} M A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) (DistribSMul.toSmulZeroClass.{u2, u3} M A (AddMonoid.toAddZeroClass.{u3} A _inst_1) (DistribMulAction.toDistribSMul.{u2, u3} M A _inst_2 _inst_1 _inst_3))) r (Set.indicator.{u1, u3} α A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A _inst_1)) s f x))
-but is expected to have type
- forall {α : Type.{u3}} {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : AddMonoid.{u2} A] [_inst_2 : Monoid.{u1} M] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_2 _inst_1] (s : Set.{u3} α) (r : M) (f : α -> A), Eq.{max (succ u3) (succ u2)} (α -> A) (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s (fun (x : α) => HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) r (f x))) (fun (x : α) => HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) r (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s f x))
-Case conversion may be inaccurate. Consider using '#align set.indicator_const_smul Set.indicator_const_smulₓ'. -/
theorem indicator_const_smul (s : Set α) (r : M) (f : α → A) :
(indicator s fun x : α => r • f x) = fun x : α => r • indicator s f x :=
funext <| indicator_const_smul_apply s r f
@@ -806,24 +518,12 @@ section Group
variable {G : Type _} [Group G] {s t : Set α} {f g : α → G} {a : α}
-/- warning: set.mul_indicator_inv' -> Set.mulIndicator_inv' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_1 : Group.{u2} G] (s : Set.{u1} α) (f : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s (Inv.inv.{max u1 u2} (α -> G) (Pi.instInv.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) f)) (Inv.inv.{max u1 u2} (α -> G) (Pi.instInv.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s f))
-but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_1 : Group.{u1} G] (s : Set.{u2} α) (f : α -> G), Eq.{max (succ u2) (succ u1)} (α -> G) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s (Inv.inv.{max u2 u1} (α -> G) (Pi.instInv.{u2, u1} α (fun (ᾰ : α) => G) (fun (i : α) => InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1))))) f)) (Inv.inv.{max u1 u2} (α -> G) (Pi.instInv.{u2, u1} α (fun (ᾰ : α) => G) (fun (i : α) => InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1))))) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s f))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_inv' Set.mulIndicator_inv'ₓ'. -/
@[to_additive]
theorem mulIndicator_inv' (s : Set α) (f : α → G) : mulIndicator s f⁻¹ = (mulIndicator s f)⁻¹ :=
(mulIndicatorHom G s).map_inv f
#align set.mul_indicator_inv' Set.mulIndicator_inv'
#align set.indicator_neg' Set.indicator_neg'
-/- warning: set.mul_indicator_inv -> Set.mulIndicator_inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_1 : Group.{u2} G] (s : Set.{u1} α) (f : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s (fun (a : α) => Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)) (f a))) (fun (a : α) => Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s f a))
-but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_1 : Group.{u1} G] (s : Set.{u2} α) (f : α -> G), Eq.{max (succ u2) (succ u1)} (α -> G) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s (fun (a : α) => Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) (f a))) (fun (a : α) => Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s f a))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_inv Set.mulIndicator_invₓ'. -/
@[to_additive]
theorem mulIndicator_inv (s : Set α) (f : α → G) :
(mulIndicator s fun a => (f a)⁻¹) = fun a => (mulIndicator s f a)⁻¹ :=
@@ -831,12 +531,6 @@ theorem mulIndicator_inv (s : Set α) (f : α → G) :
#align set.mul_indicator_inv Set.mulIndicator_inv
#align set.indicator_neg Set.indicator_neg
-/- warning: set.mul_indicator_div -> Set.mulIndicator_div is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_1 : Group.{u2} G] (s : Set.{u1} α) (f : α -> G) (g : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s (fun (a : α) => HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (f a) (g a))) (fun (a : α) => HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s f a) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s g a))
-but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_1 : Group.{u1} G] (s : Set.{u2} α) (f : α -> G) (g : α -> G), Eq.{max (succ u2) (succ u1)} (α -> G) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s (fun (a : α) => HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (f a) (g a))) (fun (a : α) => HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s f a) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s g a))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_div Set.mulIndicator_divₓ'. -/
@[to_additive]
theorem mulIndicator_div (s : Set α) (f g : α → G) :
(mulIndicator s fun a => f a / g a) = fun a => mulIndicator s f a / mulIndicator s g a :=
@@ -844,12 +538,6 @@ theorem mulIndicator_div (s : Set α) (f g : α → G) :
#align set.mul_indicator_div Set.mulIndicator_div
#align set.indicator_sub Set.indicator_sub
-/- warning: set.mul_indicator_div' -> Set.mulIndicator_div' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_1 : Group.{u2} G] (s : Set.{u1} α) (f : α -> G) (g : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> G) (α -> G) (α -> G) (instHDiv.{max u1 u2} (α -> G) (Pi.instDiv.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) f g)) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> G) (α -> G) (α -> G) (instHDiv.{max u1 u2} (α -> G) (Pi.instDiv.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s f) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s g))
-but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_1 : Group.{u1} G] (s : Set.{u2} α) (f : α -> G) (g : α -> G), Eq.{max (succ u2) (succ u1)} (α -> G) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> G) (α -> G) (α -> G) (instHDiv.{max u2 u1} (α -> G) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => G) (fun (i : α) => DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) f g)) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> G) (α -> G) (α -> G) (instHDiv.{max u2 u1} (α -> G) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => G) (fun (i : α) => DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s f) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s g))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_div' Set.mulIndicator_div'ₓ'. -/
@[to_additive]
theorem mulIndicator_div' (s : Set α) (f g : α → G) :
mulIndicator s (f / g) = mulIndicator s f / mulIndicator s g :=
@@ -857,12 +545,6 @@ theorem mulIndicator_div' (s : Set α) (f g : α → G) :
#align set.mul_indicator_div' Set.mulIndicator_div'
#align set.indicator_sub' Set.indicator_sub'
-/- warning: set.mul_indicator_compl -> Set.mulIndicator_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_1 : Group.{u2} G] (s : Set.{u1} α) (f : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> G) (α -> G) (α -> G) (instHMul.{max u1 u2} (α -> G) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))))) f (Inv.inv.{max u1 u2} (α -> G) (Pi.instInv.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s f)))
-but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_1 : Group.{u1} G] (s : Set.{u2} α) (f : α -> G), Eq.{max (succ u2) (succ u1)} (α -> G) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) s) f) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> G) (α -> G) (α -> G) (instHMul.{max u2 u1} (α -> G) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => G) (fun (i : α) => MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) f (Inv.inv.{max u1 u2} (α -> G) (Pi.instInv.{u2, u1} α (fun (ᾰ : α) => G) (fun (i : α) => InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1))))) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s f)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_compl Set.mulIndicator_complₓ'. -/
@[to_additive indicator_compl']
theorem mulIndicator_compl (s : Set α) (f : α → G) :
mulIndicator (sᶜ) f = f * (mulIndicator s f)⁻¹ :=
@@ -870,22 +552,10 @@ theorem mulIndicator_compl (s : Set α) (f : α → G) :
#align set.mul_indicator_compl Set.mulIndicator_compl
#align set.indicator_compl' Set.indicator_compl'
-/- warning: set.indicator_compl -> Set.indicator_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : AddGroup.{u2} G] (s : Set.{u1} α) (f : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.indicator.{u1, u2} α G (AddZeroClass.toHasZero.{u2} G (AddMonoid.toAddZeroClass.{u2} G (SubNegMonoid.toAddMonoid.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_2)))) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (α -> G) (α -> G) (α -> G) (instHSub.{max u1 u2} (α -> G) (Pi.instSub.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => SubNegMonoid.toHasSub.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_2)))) f (Set.indicator.{u1, u2} α G (AddZeroClass.toHasZero.{u2} G (AddMonoid.toAddZeroClass.{u2} G (SubNegMonoid.toAddMonoid.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_2)))) s f))
-but is expected to have type
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : AddGroup.{u2} G] (s : Set.{u1} α) (f : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.indicator.{u1, u2} α G (NegZeroClass.toZero.{u2} G (SubNegZeroMonoid.toNegZeroClass.{u2} G (SubtractionMonoid.toSubNegZeroMonoid.{u2} G (AddGroup.toSubtractionMonoid.{u2} G _inst_2)))) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s) f) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (α -> G) (α -> G) (α -> G) (instHSub.{max u1 u2} (α -> G) (Pi.instSub.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => SubNegMonoid.toSub.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_2)))) f (Set.indicator.{u1, u2} α G (NegZeroClass.toZero.{u2} G (SubNegZeroMonoid.toNegZeroClass.{u2} G (SubtractionMonoid.toSubNegZeroMonoid.{u2} G (AddGroup.toSubtractionMonoid.{u2} G _inst_2)))) s f))
-Case conversion may be inaccurate. Consider using '#align set.indicator_compl Set.indicator_complₓ'. -/
theorem indicator_compl {G} [AddGroup G] (s : Set α) (f : α → G) :
indicator (sᶜ) f = f - indicator s f := by rw [sub_eq_add_neg, indicator_compl']
#align set.indicator_compl Set.indicator_compl
-/- warning: set.mul_indicator_diff -> Set.mulIndicator_diff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_1 : Group.{u2} G] {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (forall (f : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) t s) f) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> G) (α -> G) (α -> G) (instHMul.{max u1 u2} (α -> G) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))))) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) t f) (Inv.inv.{max u1 u2} (α -> G) (Pi.instInv.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))) (Set.mulIndicator.{u1, u2} α G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1)))) s f))))
-but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_1 : Group.{u1} G] {s : Set.{u2} α} {t : Set.{u2} α}, (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s t) -> (forall (f : α -> G), Eq.{max (succ u2) (succ u1)} (α -> G) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) (SDiff.sdiff.{u2} (Set.{u2} α) (Set.instSDiffSet.{u2} α) t s) f) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> G) (α -> G) (α -> G) (instHMul.{max u2 u1} (α -> G) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => G) (fun (i : α) => MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) t f) (Inv.inv.{max u1 u2} (α -> G) (Pi.instInv.{u2, u1} α (fun (ᾰ : α) => G) (fun (i : α) => InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1))))) (Set.mulIndicator.{u2, u1} α G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) s f))))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_diff Set.mulIndicator_diffₓ'. -/
@[to_additive indicator_diff']
theorem mulIndicator_diff (h : s ⊆ t) (f : α → G) :
mulIndicator (t \ s) f = mulIndicator t f * (mulIndicator s f)⁻¹ :=
@@ -897,12 +567,6 @@ theorem mulIndicator_diff (h : s ⊆ t) (f : α → G) :
#align set.mul_indicator_diff Set.mulIndicator_diff
#align set.indicator_diff' Set.indicator_diff'
-/- warning: set.indicator_diff -> Set.indicator_diff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : AddGroup.{u2} G] {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (forall (f : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.indicator.{u1, u2} α G (AddZeroClass.toHasZero.{u2} G (AddMonoid.toAddZeroClass.{u2} G (SubNegMonoid.toAddMonoid.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_2)))) (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) t s) f) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (α -> G) (α -> G) (α -> G) (instHSub.{max u1 u2} (α -> G) (Pi.instSub.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => SubNegMonoid.toHasSub.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_2)))) (Set.indicator.{u1, u2} α G (AddZeroClass.toHasZero.{u2} G (AddMonoid.toAddZeroClass.{u2} G (SubNegMonoid.toAddMonoid.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_2)))) t f) (Set.indicator.{u1, u2} α G (AddZeroClass.toHasZero.{u2} G (AddMonoid.toAddZeroClass.{u2} G (SubNegMonoid.toAddMonoid.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_2)))) s f)))
-but is expected to have type
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : AddGroup.{u2} G] {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (forall (f : α -> G), Eq.{max (succ u1) (succ u2)} (α -> G) (Set.indicator.{u1, u2} α G (NegZeroClass.toZero.{u2} G (SubNegZeroMonoid.toNegZeroClass.{u2} G (SubtractionMonoid.toSubNegZeroMonoid.{u2} G (AddGroup.toSubtractionMonoid.{u2} G _inst_2)))) (SDiff.sdiff.{u1} (Set.{u1} α) (Set.instSDiffSet.{u1} α) t s) f) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (α -> G) (α -> G) (α -> G) (instHSub.{max u1 u2} (α -> G) (Pi.instSub.{u1, u2} α (fun (ᾰ : α) => G) (fun (i : α) => SubNegMonoid.toSub.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_2)))) (Set.indicator.{u1, u2} α G (NegZeroClass.toZero.{u2} G (SubNegZeroMonoid.toNegZeroClass.{u2} G (SubtractionMonoid.toSubNegZeroMonoid.{u2} G (AddGroup.toSubtractionMonoid.{u2} G _inst_2)))) t f) (Set.indicator.{u1, u2} α G (NegZeroClass.toZero.{u2} G (SubNegZeroMonoid.toNegZeroClass.{u2} G (SubtractionMonoid.toSubNegZeroMonoid.{u2} G (AddGroup.toSubtractionMonoid.{u2} G _inst_2)))) s f)))
-Case conversion may be inaccurate. Consider using '#align set.indicator_diff Set.indicator_diffₓ'. -/
theorem indicator_diff {G : Type _} [AddGroup G] {s t : Set α} (h : s ⊆ t) (f : α → G) :
indicator (t \ s) f = indicator t f - indicator s f := by rw [indicator_diff' h, sub_eq_add_neg]
#align set.indicator_diff Set.indicator_diff
@@ -913,12 +577,6 @@ section CommMonoid
variable [CommMonoid M]
-/- warning: set.prod_mul_indicator_subset_of_eq_one -> Set.prod_mulIndicator_subset_of_eq_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : CommMonoid.{u2} M] [_inst_2 : One.{u3} N] (f : α -> N) (g : α -> N -> M) {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t) -> (forall (a : α), Eq.{succ u2} M (g a (OfNat.ofNat.{u3} N 1 (OfNat.mk.{u3} N 1 (One.one.{u3} N _inst_2)))) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))))))) -> (Eq.{succ u2} M (Finset.prod.{u2, u1} M α _inst_1 s (fun (i : α) => g i (f i))) (Finset.prod.{u2, u1} M α _inst_1 t (fun (i : α) => g i (Set.mulIndicator.{u1, u3} α N _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s) f i))))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} {N : Type.{u3}} [_inst_1 : CommMonoid.{u1} M] [_inst_2 : One.{u3} N] (f : α -> N) (g : α -> N -> M) {s : Finset.{u2} α} {t : Finset.{u2} α}, (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s t) -> (forall (a : α), Eq.{succ u1} M (g a (OfNat.ofNat.{u3} N 1 (One.toOfNat1.{u3} N _inst_2))) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1))))) -> (Eq.{succ u1} M (Finset.prod.{u1, u2} M α _inst_1 s (fun (i : α) => g i (f i))) (Finset.prod.{u1, u2} M α _inst_1 t (fun (i : α) => g i (Set.mulIndicator.{u2, u3} α N _inst_2 (Finset.toSet.{u2} α s) f i))))
-Case conversion may be inaccurate. Consider using '#align set.prod_mul_indicator_subset_of_eq_one Set.prod_mulIndicator_subset_of_eq_oneₓ'. -/
/-- Consider a product of `g i (f i)` over a `finset`. Suppose `g` is a
function such as `pow`, which maps a second argument of `1` to
`1`. Then if `f` is replaced by the corresponding multiplicative indicator
@@ -950,12 +608,6 @@ function, the `finset` may be replaced by a possibly larger `finset`
without changing the value of the sum. -/
add_decl_doc Set.sum_indicator_subset_of_eq_zero
-/- warning: set.prod_mul_indicator_subset -> Set.prod_mulIndicator_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] (f : α -> M) {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t) -> (Eq.{succ u2} M (Finset.prod.{u2, u1} M α _inst_1 s (fun (i : α) => f i)) (Finset.prod.{u2, u1} M α _inst_1 t (fun (i : α) => Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s) f i)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (f : α -> M) {s : Finset.{u2} α} {t : Finset.{u2} α}, (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s t) -> (Eq.{succ u1} M (Finset.prod.{u1, u2} M α _inst_1 s (fun (i : α) => f i)) (Finset.prod.{u1, u2} M α _inst_1 t (fun (i : α) => Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (Finset.toSet.{u2} α s) f i)))
-Case conversion may be inaccurate. Consider using '#align set.prod_mul_indicator_subset Set.prod_mulIndicator_subsetₓ'. -/
/-- Taking the product of an indicator function over a possibly larger `finset` is the same as
taking the original function over the original `finset`. -/
@[to_additive
@@ -966,12 +618,6 @@ theorem prod_mulIndicator_subset (f : α → M) {s t : Finset α} (h : s ⊆ t)
#align set.prod_mul_indicator_subset Set.prod_mulIndicator_subset
#align set.sum_indicator_subset Set.sum_indicator_subset
-/- warning: finset.prod_mul_indicator_eq_prod_filter -> Finset.prod_mulIndicator_eq_prod_filter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {M : Type.{u3}} [_inst_1 : CommMonoid.{u3} M] (s : Finset.{u2} ι) (f : ι -> α -> M) (t : ι -> (Set.{u1} α)) (g : ι -> α) [_inst_2 : DecidablePred.{succ u2} ι (fun (i : ι) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (g i) (t i))], Eq.{succ u3} M (Finset.prod.{u3, u2} M ι _inst_1 s (fun (i : ι) => Set.mulIndicator.{u1, u3} α M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_1))) (t i) (f i) (g i))) (Finset.prod.{u3, u2} M ι _inst_1 (Finset.filter.{u2} ι (fun (i : ι) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (g i) (t i)) (fun (a : ι) => _inst_2 a) s) (fun (i : ι) => f i (g i)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u3}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (s : Finset.{u3} ι) (f : ι -> α -> M) (t : ι -> (Set.{u2} α)) (g : ι -> α) [_inst_2 : DecidablePred.{succ u3} ι (fun (i : ι) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (g i) (t i))], Eq.{succ u1} M (Finset.prod.{u1, u3} M ι _inst_1 s (fun (i : ι) => Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (t i) (f i) (g i))) (Finset.prod.{u1, u3} M ι _inst_1 (Finset.filter.{u3} ι (fun (i : ι) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (g i) (t i)) (fun (a : ι) => _inst_2 a) s) (fun (i : ι) => f i (g i)))
-Case conversion may be inaccurate. Consider using '#align finset.prod_mul_indicator_eq_prod_filter Finset.prod_mulIndicator_eq_prod_filterₓ'. -/
@[to_additive]
theorem Finset.prod_mulIndicator_eq_prod_filter (s : Finset ι) (f : ι → α → M) (t : ι → Set α)
(g : ι → α) [DecidablePred fun i => g i ∈ t i] :
@@ -986,12 +632,6 @@ theorem Finset.prod_mulIndicator_eq_prod_filter (s : Finset ι) (f : ι → α
#align finset.prod_mul_indicator_eq_prod_filter Finset.prod_mulIndicator_eq_prod_filter
#align finset.sum_indicator_eq_sum_filter Finset.sum_indicator_eq_sum_filter
-/- warning: set.mul_indicator_finset_prod -> Set.mulIndicator_finset_prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {M : Type.{u3}} [_inst_1 : CommMonoid.{u3} M] (I : Finset.{u2} ι) (s : Set.{u1} α) (f : ι -> α -> M), Eq.{max (succ u1) (succ u3)} (α -> M) (Set.mulIndicator.{u1, u3} α M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_1))) s (Finset.prod.{max u1 u3, u2} (α -> M) ι (Pi.commMonoid.{u1, u3} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)) I (fun (i : ι) => f i))) (Finset.prod.{max u1 u3, u2} (α -> M) ι (Pi.commMonoid.{u1, u3} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)) I (fun (i : ι) => Set.mulIndicator.{u1, u3} α M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_1))) s (f i)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u3}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (I : Finset.{u3} ι) (s : Set.{u2} α) (f : ι -> α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) s (Finset.prod.{max u2 u1, u3} (α -> M) ι (Pi.commMonoid.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)) I (fun (i : ι) => f i))) (Finset.prod.{max u1 u2, u3} (α -> M) ι (Pi.commMonoid.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)) I (fun (i : ι) => Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) s (f i)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_finset_prod Set.mulIndicator_finset_prodₓ'. -/
@[to_additive]
theorem mulIndicator_finset_prod (I : Finset ι) (s : Set α) (f : ι → α → M) :
mulIndicator s (∏ i in I, f i) = ∏ i in I, mulIndicator s (f i) :=
@@ -999,12 +639,6 @@ theorem mulIndicator_finset_prod (I : Finset ι) (s : Set α) (f : ι → α →
#align set.mul_indicator_finset_prod Set.mulIndicator_finset_prod
#align set.indicator_finset_sum Set.indicator_finset_sum
-/- warning: set.mul_indicator_finset_bUnion -> Set.mulIndicator_finset_biUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u1} α)) {f : α -> M}, (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) -> (forall (j : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (s i) (s j)))) -> (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) => s i))) f) (fun (a : α) => Finset.prod.{u2, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (s i) f a)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u2} α)) {f : α -> M}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) -> (forall (j : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (s i) (s j)))) -> (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (Set.iUnion.{u2, succ u3} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) => s i))) f) (fun (a : α) => Finset.prod.{u1, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (s i) f a)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_biUnionₓ'. -/
@[to_additive]
theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
(∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) →
@@ -1027,12 +661,6 @@ theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f
#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_biUnion
#align set.indicator_finset_bUnion Set.indicator_finset_biUnion
-/- warning: set.mul_indicator_finset_bUnion_apply -> Set.mulIndicator_finset_biUnion_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u1} α)) {f : α -> M}, (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) -> (forall (j : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (s i) (s j)))) -> (forall (x : α), Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) => s i))) f x) (Finset.prod.{u2, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (s i) f x)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u2} α)) {f : α -> M}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) -> (forall (j : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (s i) (s j)))) -> (forall (x : α), Eq.{succ u1} M (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (Set.iUnion.{u2, succ u3} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) => s i))) f x) (Finset.prod.{u1, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (s i) f x)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_biUnion_applyₓ'. -/
@[to_additive]
theorem mulIndicator_finset_biUnion_apply {ι} (I : Finset ι) (s : ι → Set α) {f : α → M}
(h : ∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) (x : α) :
@@ -1047,45 +675,21 @@ section MulZeroClass
variable [MulZeroClass M] {s t : Set α} {f g : α → M} {a : α}
-/- warning: set.indicator_mul -> Set.indicator_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulZeroClass.{u2} M] (s : Set.{u1} α) (f : α -> M) (g : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) s (fun (a : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toHasMul.{u2} M _inst_1)) (f a) (g a))) (fun (a : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toHasMul.{u2} M _inst_1)) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) s f a) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) s g a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroClass.{u1} M] (s : Set.{u2} α) (f : α -> M) (g : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f a) (g a))) (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s f a) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s g a))
-Case conversion may be inaccurate. Consider using '#align set.indicator_mul Set.indicator_mulₓ'. -/
theorem indicator_mul (s : Set α) (f g : α → M) :
(indicator s fun a => f a * g a) = fun a => indicator s f a * indicator s g a := by funext;
simp only [indicator]; split_ifs; · rfl; rw [MulZeroClass.mul_zero]
#align set.indicator_mul Set.indicator_mul
-/- warning: set.indicator_mul_left -> Set.indicator_mul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulZeroClass.{u2} M] {a : α} (s : Set.{u1} α) (f : α -> M) (g : α -> M), Eq.{succ u2} M (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) s (fun (a : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toHasMul.{u2} M _inst_1)) (f a) (g a)) a) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toHasMul.{u2} M _inst_1)) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) s f a) (g a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroClass.{u1} M] {a : α} (s : Set.{u2} α) (f : α -> M) (g : α -> M), Eq.{succ u1} M (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f a) (g a)) a) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s f a) (g a))
-Case conversion may be inaccurate. Consider using '#align set.indicator_mul_left Set.indicator_mul_leftₓ'. -/
theorem indicator_mul_left (s : Set α) (f g : α → M) :
indicator s (fun a => f a * g a) a = indicator s f a * g a := by simp only [indicator];
split_ifs; · rfl; rw [MulZeroClass.zero_mul]
#align set.indicator_mul_left Set.indicator_mul_left
-/- warning: set.indicator_mul_right -> Set.indicator_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulZeroClass.{u2} M] {a : α} (s : Set.{u1} α) (f : α -> M) (g : α -> M), Eq.{succ u2} M (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) s (fun (a : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toHasMul.{u2} M _inst_1)) (f a) (g a)) a) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toHasMul.{u2} M _inst_1)) (f a) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) s g a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroClass.{u1} M] {a : α} (s : Set.{u2} α) (f : α -> M) (g : α -> M), Eq.{succ u1} M (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f a) (g a)) a) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f a) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s g a))
-Case conversion may be inaccurate. Consider using '#align set.indicator_mul_right Set.indicator_mul_rightₓ'. -/
theorem indicator_mul_right (s : Set α) (f g : α → M) :
indicator s (fun a => f a * g a) a = f a * indicator s g a := by simp only [indicator];
split_ifs; · rfl; rw [MulZeroClass.mul_zero]
#align set.indicator_mul_right Set.indicator_mul_right
-/- warning: set.inter_indicator_mul -> Set.inter_indicator_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulZeroClass.{u2} M] {t1 : Set.{u1} α} {t2 : Set.{u1} α} (f : α -> M) (g : α -> M) (x : α), Eq.{succ u2} M (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) t1 t2) (fun (x : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toHasMul.{u2} M _inst_1)) (f x) (g x)) x) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toHasMul.{u2} M _inst_1)) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) t1 f x) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M _inst_1) t2 g x))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroClass.{u1} M] {t1 : Set.{u2} α} {t2 : Set.{u2} α} (f : α -> M) (g : α -> M) (x : α), Eq.{succ u1} M (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) t1 t2) (fun (x : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f x) (g x)) x) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) t1 f x) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) t2 g x))
-Case conversion may be inaccurate. Consider using '#align set.inter_indicator_mul Set.inter_indicator_mulₓ'. -/
theorem inter_indicator_mul {t1 t2 : Set α} (f g : α → M) (x : α) :
(t1 ∩ t2).indicator (fun x => f x * g x) x = t1.indicator f x * t2.indicator g x := by
rw [← Set.indicator_indicator]; simp [indicator]
@@ -1097,23 +701,11 @@ section MulZeroOneClass
variable [MulZeroOneClass M]
-/- warning: set.inter_indicator_one -> Set.inter_indicator_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulZeroOneClass.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α}, Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t) (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toHasMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) s (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) t (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7408 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7408 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7408 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))))
-Case conversion may be inaccurate. Consider using '#align set.inter_indicator_one Set.inter_indicator_oneₓ'. -/
theorem inter_indicator_one {s t : Set α} :
(s ∩ t).indicator (1 : _ → M) = s.indicator 1 * t.indicator 1 :=
funext fun _ => by simpa only [← inter_indicator_mul, Pi.mul_apply, Pi.one_apply, one_mul]
#align set.inter_indicator_one Set.inter_indicator_one
-/- warning: set.indicator_prod_one -> Set.indicator_prod_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {M : Type.{u3}} [_inst_1 : MulZeroOneClass.{u3} M] {s : Set.{u1} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u3} M (Set.indicator.{max u1 u2, u3} (Prod.{u1, u2} α β) M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) (Set.prod.{u1, u2} α β s t) (OfNat.ofNat.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) 1 (OfNat.mk.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) 1 (One.one.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) (Pi.instOne.{max u1 u2, u3} (Prod.{u1, u2} α β) (fun (ᾰ : Prod.{u1, u2} α β) => M) (fun (i : Prod.{u1, u2} α β) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) (Prod.mk.{u1, u2} α β x y)) (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulZeroClass.toHasMul.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1))) (Set.indicator.{u1, u3} α M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) s (OfNat.ofNat.{max u1 u3} (α -> M) 1 (OfNat.mk.{max u1 u3} (α -> M) 1 (One.one.{max u1 u3} (α -> M) (Pi.instOne.{u1, u3} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) x) (Set.indicator.{u2, u3} β M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) t (OfNat.ofNat.{max u2 u3} (β -> M) 1 (OfNat.mk.{max u2 u3} (β -> M) 1 (One.one.{max u2 u3} (β -> M) (Pi.instOne.{u2, u3} β (fun (ᾰ : β) => M) (fun (i : β) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) y))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u3} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u1} M (Set.indicator.{max u3 u2, u1} (Prod.{u3, u2} α β) M (MulZeroOneClass.toZero.{u1} M _inst_1) (Set.prod.{u3, u2} α β s t) (OfNat.ofNat.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) 1 (One.toOfNat1.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) (Pi.instOne.{max u3 u2, u1} (Prod.{u3, u2} α β) (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7467 : Prod.{u3, u2} α β) => M) (fun (i : Prod.{u3, u2} α β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) (Prod.mk.{u3, u2} α β x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1))) (Set.indicator.{u3, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u3 u1} (α -> M) 1 (One.toOfNat1.{max u3 u1} (α -> M) (Pi.instOne.{u3, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) x) (Set.indicator.{u2, u1} β M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (β -> M) 1 (One.toOfNat1.{max u2 u1} (β -> M) (Pi.instOne.{u2, u1} β (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : β) => M) (fun (i : β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) y))
-Case conversion may be inaccurate. Consider using '#align set.indicator_prod_one Set.indicator_prod_oneₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem indicator_prod_one {s : Set α} {t : Set β} {x : α} {y : β} :
(s ×ˢ t).indicator (1 : _ → M) (x, y) = s.indicator 1 x * t.indicator 1 y := by
@@ -1122,32 +714,14 @@ theorem indicator_prod_one {s : Set α} {t : Set β} {x : α} {y : β} :
variable (M) [Nontrivial M]
-/- warning: set.indicator_eq_zero_iff_not_mem -> Set.indicator_eq_zero_iff_not_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : Nontrivial.{u2} M] {U : Set.{u1} α} {x : α}, Iff (Eq.{succ u2} M (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) U (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)))))) x) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)))))) (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x U))
-but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {x : α}, Iff (Eq.{succ u1} M (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) x) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (MulZeroOneClass.toZero.{u1} M _inst_1)))) (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x U))
-Case conversion may be inaccurate. Consider using '#align set.indicator_eq_zero_iff_not_mem Set.indicator_eq_zero_iff_not_memₓ'. -/
theorem indicator_eq_zero_iff_not_mem {U : Set α} {x : α} : indicator U 1 x = (0 : M) ↔ x ∉ U := by
classical simp [indicator_apply, imp_false]
#align set.indicator_eq_zero_iff_not_mem Set.indicator_eq_zero_iff_not_mem
-/- warning: set.indicator_eq_one_iff_mem -> Set.indicator_eq_one_iff_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : Nontrivial.{u2} M] {U : Set.{u1} α} {x : α}, Iff (Eq.{succ u2} M (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) U (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)))))) x) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M (MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)))))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x U)
-but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {x : α}, Iff (Eq.{succ u1} M (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) x) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x U)
-Case conversion may be inaccurate. Consider using '#align set.indicator_eq_one_iff_mem Set.indicator_eq_one_iff_memₓ'. -/
theorem indicator_eq_one_iff_mem {U : Set α} {x : α} : indicator U 1 x = (1 : M) ↔ x ∈ U := by
classical simp [indicator_apply, imp_false]
#align set.indicator_eq_one_iff_mem Set.indicator_eq_one_iff_mem
-/- warning: set.indicator_one_inj -> Set.indicator_one_inj is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : Nontrivial.{u2} M] {U : Set.{u1} α} {V : Set.{u1} α}, (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) U (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) V (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)))))))) -> (Eq.{succ u1} (Set.{u1} α) U V)
-but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7782 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7782 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
-Case conversion may be inaccurate. Consider using '#align set.indicator_one_inj Set.indicator_one_injₓ'. -/
theorem indicator_one_inj {U V : Set α} (h : indicator U (1 : α → M) = indicator V 1) : U = V := by
ext; simp_rw [← indicator_eq_one_iff_mem M, h]
#align set.indicator_one_inj Set.indicator_one_inj
@@ -1162,12 +736,6 @@ section
variable [LE M]
-/- warning: set.mul_indicator_apply_le' -> Set.mulIndicator_apply_le' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {a : α} {y : M} [_inst_2 : LE.{u2} M], ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M _inst_2 (f a) y)) -> ((Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s)) -> (LE.le.{u2} M _inst_2 (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) y)) -> (LE.le.{u2} M _inst_2 (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) y)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {a : α} {y : M} [_inst_2 : LE.{u1} M], ((Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M _inst_2 (f a) y)) -> ((Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s)) -> (LE.le.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) y)) -> (LE.le.{u1} M _inst_2 (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) y)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_apply_le' Set.mulIndicator_apply_le'ₓ'. -/
@[to_additive]
theorem mulIndicator_apply_le' (hfg : a ∈ s → f a ≤ y) (hg : a ∉ s → 1 ≤ y) :
mulIndicator s f a ≤ y := by
@@ -1177,12 +745,6 @@ theorem mulIndicator_apply_le' (hfg : a ∈ s → f a ≤ y) (hg : a ∉ s → 1
#align set.mul_indicator_apply_le' Set.mulIndicator_apply_le'
#align set.indicator_apply_le' Set.indicator_apply_le'
-/- warning: set.mul_indicator_le' -> Set.mulIndicator_le' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M} [_inst_2 : LE.{u2} M], (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M _inst_2 (f a) (g a))) -> (forall (a : α), (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s)) -> (LE.le.{u2} M _inst_2 (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (g a))) -> (LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_2)) (Set.mulIndicator.{u1, u2} α M _inst_1 s f) g)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {g : α -> M} [_inst_2 : LE.{u1} M], (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M _inst_2 (f a) (g a))) -> (forall (a : α), (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s)) -> (LE.le.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (g a))) -> (LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_2)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) g)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le' Set.mulIndicator_le'ₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
@[to_additive]
theorem mulIndicator_le' (hfg : ∀ a ∈ s, f a ≤ g a) (hg : ∀ (a) (_ : a ∉ s), 1 ≤ g a) :
@@ -1190,12 +752,6 @@ theorem mulIndicator_le' (hfg : ∀ a ∈ s, f a ≤ g a) (hg : ∀ (a) (_ : a
#align set.mul_indicator_le' Set.mulIndicator_le'
#align set.indicator_le' Set.indicator_le'
-/- warning: set.le_mul_indicator_apply -> Set.le_mulIndicator_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {g : α -> M} {a : α} [_inst_2 : LE.{u2} M] {y : M}, ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M _inst_2 y (g a))) -> ((Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s)) -> (LE.le.{u2} M _inst_2 y (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))) -> (LE.le.{u2} M _inst_2 y (Set.mulIndicator.{u1, u2} α M _inst_1 s g a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {g : α -> M} {a : α} [_inst_2 : LE.{u1} M] {y : M}, ((Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M _inst_2 y (g a))) -> ((Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s)) -> (LE.le.{u1} M _inst_2 y (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))) -> (LE.le.{u1} M _inst_2 y (Set.mulIndicator.{u2, u1} α M _inst_1 s g a))
-Case conversion may be inaccurate. Consider using '#align set.le_mul_indicator_apply Set.le_mulIndicator_applyₓ'. -/
@[to_additive]
theorem le_mulIndicator_apply {y} (hfg : a ∈ s → y ≤ g a) (hf : a ∉ s → y ≤ 1) :
y ≤ mulIndicator s g a :=
@@ -1203,12 +759,6 @@ theorem le_mulIndicator_apply {y} (hfg : a ∈ s → y ≤ g a) (hf : a ∉ s
#align set.le_mul_indicator_apply Set.le_mulIndicator_apply
#align set.le_indicator_apply Set.le_indicator_apply
-/- warning: set.le_mul_indicator -> Set.le_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M} [_inst_2 : LE.{u2} M], (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M _inst_2 (f a) (g a))) -> (forall (a : α), (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s)) -> (LE.le.{u2} M _inst_2 (f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))) -> (LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_2)) f (Set.mulIndicator.{u1, u2} α M _inst_1 s g))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {g : α -> M} [_inst_2 : LE.{u1} M], (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M _inst_2 (f a) (g a))) -> (forall (a : α), (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s)) -> (LE.le.{u1} M _inst_2 (f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))) -> (LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_2)) f (Set.mulIndicator.{u2, u1} α M _inst_1 s g))
-Case conversion may be inaccurate. Consider using '#align set.le_mul_indicator Set.le_mulIndicatorₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
@[to_additive]
theorem le_mulIndicator (hfg : ∀ a ∈ s, f a ≤ g a) (hf : ∀ (a) (_ : a ∉ s), f a ≤ 1) :
@@ -1220,60 +770,30 @@ end
variable [Preorder M]
-/- warning: set.one_le_mul_indicator_apply -> Set.one_le_mulIndicator_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f a))) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u1} M], ((Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (f a))) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a))
-Case conversion may be inaccurate. Consider using '#align set.one_le_mul_indicator_apply Set.one_le_mulIndicator_applyₓ'. -/
@[to_additive indicator_apply_nonneg]
theorem one_le_mulIndicator_apply (h : a ∈ s → 1 ≤ f a) : 1 ≤ mulIndicator s f a :=
le_mulIndicator_apply h fun _ => le_rfl
#align set.one_le_mul_indicator_apply Set.one_le_mulIndicator_apply
#align set.indicator_apply_nonneg Set.indicator_apply_nonneg
-/- warning: set.one_le_mul_indicator -> Set.one_le_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f a))) -> (forall (a : α), LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} [_inst_2 : Preorder.{u1} M], (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (f a))) -> (forall (a : α), LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a))
-Case conversion may be inaccurate. Consider using '#align set.one_le_mul_indicator Set.one_le_mulIndicatorₓ'. -/
@[to_additive indicator_nonneg]
theorem one_le_mulIndicator (h : ∀ a ∈ s, 1 ≤ f a) (a : α) : 1 ≤ mulIndicator s f a :=
one_le_mulIndicator_apply (h a)
#align set.one_le_mul_indicator Set.one_le_mulIndicator
#align set.indicator_nonneg Set.indicator_nonneg
-/- warning: set.mul_indicator_apply_le_one -> Set.mulIndicator_apply_le_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u1} M], ((Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_apply_le_one Set.mulIndicator_apply_le_oneₓ'. -/
@[to_additive]
theorem mulIndicator_apply_le_one (h : a ∈ s → f a ≤ 1) : mulIndicator s f a ≤ 1 :=
mulIndicator_apply_le' h fun _ => le_rfl
#align set.mul_indicator_apply_le_one Set.mulIndicator_apply_le_one
#align set.indicator_apply_nonpos Set.indicator_apply_nonpos
-/- warning: set.mul_indicator_le_one -> Set.mulIndicator_le_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))) -> (forall (a : α), LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} [_inst_2 : Preorder.{u1} M], (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))) -> (forall (a : α), LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_one Set.mulIndicator_le_oneₓ'. -/
@[to_additive]
theorem mulIndicator_le_one (h : ∀ a ∈ s, f a ≤ 1) (a : α) : mulIndicator s f a ≤ 1 :=
mulIndicator_apply_le_one (h a)
#align set.mul_indicator_le_one Set.mulIndicator_le_one
#align set.indicator_nonpos Set.indicator_nonpos
-/- warning: set.mul_indicator_le_mul_indicator -> Set.mulIndicator_le_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (f a) (g a)) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (Set.mulIndicator.{u1, u2} α M _inst_1 s g a))
-but is expected to have type
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (f a) (g a)) -> (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (Set.mulIndicator.{u1, u2} α M _inst_1 s g a))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_mul_indicator Set.mulIndicator_le_mulIndicatorₓ'. -/
@[to_additive]
theorem mulIndicator_le_mulIndicator (h : f a ≤ g a) : mulIndicator s f a ≤ mulIndicator s g a :=
mulIndicator_rel_mulIndicator le_rfl fun _ => h
@@ -1282,12 +802,6 @@ theorem mulIndicator_le_mulIndicator (h : f a ≤ g a) : mulIndicator s f a ≤
attribute [mono] mul_indicator_le_mul_indicator indicator_le_indicator
-/- warning: set.mul_indicator_le_mul_indicator_of_subset -> Set.mulIndicator_le_mulIndicator_of_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (forall (a : α), LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f a)) -> (forall (a : α), LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (Set.mulIndicator.{u1, u2} α M _inst_1 t f a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α} {f : α -> M} [_inst_2 : Preorder.{u1} M], (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s t) -> (forall (a : α), LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (f a)) -> (forall (a : α), LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (Set.mulIndicator.{u2, u1} α M _inst_1 t f a))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_mul_indicator_of_subset Set.mulIndicator_le_mulIndicator_of_subsetₓ'. -/
@[to_additive]
theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤ f a) (a : α) :
mulIndicator s f a ≤ mulIndicator t f a :=
@@ -1297,12 +811,6 @@ theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤
#align set.mul_indicator_le_mul_indicator_of_subset Set.mulIndicator_le_mulIndicator_of_subset
#align set.indicator_le_indicator_of_subset Set.indicator_le_indicator_of_subset
-/- warning: set.mul_indicator_le_self' -> Set.mulIndicator_le_self' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (forall (x : α), (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s)) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f x))) -> (LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toHasLe.{u2} M _inst_2)) (Set.mulIndicator.{u1, u2} α M _inst_1 s f) f)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} [_inst_2 : Preorder.{u1} M], (forall (x : α), (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s)) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (f x))) -> (LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u1} M _inst_2)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) f)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_self' Set.mulIndicator_le_self'ₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x «expr ∉ » s) -/
@[to_additive]
theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndicator s f ≤ f :=
@@ -1310,12 +818,6 @@ theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndic
#align set.mul_indicator_le_self' Set.mulIndicator_le_self'
#align set.indicator_le_self' Set.indicator_le_self'
-/- warning: set.mul_indicator_Union_apply -> Set.mulIndicator_iUnion_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {M : Type.{u3}} [_inst_3 : CompleteLattice.{u3} M] [_inst_4 : One.{u3} M], (Eq.{succ u3} M (Bot.bot.{u3} M (CompleteLattice.toHasBot.{u3} M _inst_3)) (OfNat.ofNat.{u3} M 1 (OfNat.mk.{u3} M 1 (One.one.{u3} M _inst_4)))) -> (forall (s : ι -> (Set.{u1} α)) (f : α -> M) (x : α), Eq.{succ u3} M (Set.mulIndicator.{u1, u3} α M _inst_4 (Set.iUnion.{u1, u2} α ι (fun (i : ι) => s i)) f x) (iSup.{u3, u2} M (ConditionallyCompleteLattice.toHasSup.{u3} M (CompleteLattice.toConditionallyCompleteLattice.{u3} M _inst_3)) ι (fun (i : ι) => Set.mulIndicator.{u1, u3} α M _inst_4 (s i) f x)))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Sort.{u3}} {M : Type.{u2}} [_inst_3 : CompleteLattice.{u2} M] [_inst_4 : One.{u2} M], (Eq.{succ u2} M (Bot.bot.{u2} M (CompleteLattice.toBot.{u2} M _inst_3)) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_4))) -> (forall (s : ι -> (Set.{u1} α)) (f : α -> M) (x : α), Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_4 (Set.iUnion.{u1, u3} α ι (fun (i : ι) => s i)) f x) (iSup.{u2, u3} M (ConditionallyCompleteLattice.toSupSet.{u2} M (CompleteLattice.toConditionallyCompleteLattice.{u2} M _inst_3)) ι (fun (i : ι) => Set.mulIndicator.{u1, u2} α M _inst_4 (s i) f x)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_applyₓ'. -/
@[to_additive]
theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥ : M) = 1)
(s : ι → Set α) (f : α → M) (x : α) :
@@ -1339,24 +841,12 @@ section CanonicallyOrderedMonoid
variable [CanonicallyOrderedMonoid M]
-/- warning: set.mul_indicator_le_self -> Set.mulIndicator_le_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CanonicallyOrderedMonoid.{u2} M] (s : Set.{u1} α) (f : α -> M), LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M (OrderedCommMonoid.toCommMonoid.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) s f) f
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CanonicallyOrderedMonoid.{u1} M] (s : Set.{u2} α) (f : α -> M), LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1))))) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) s f) f
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_self Set.mulIndicator_le_selfₓ'. -/
@[to_additive]
theorem mulIndicator_le_self (s : Set α) (f : α → M) : mulIndicator s f ≤ f :=
mulIndicator_le_self' fun _ _ => one_le _
#align set.mul_indicator_le_self Set.mulIndicator_le_self
#align set.indicator_le_self Set.indicator_le_self
-/- warning: set.mul_indicator_apply_le -> Set.mulIndicator_apply_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CanonicallyOrderedMonoid.{u2} M] {a : α} {s : Set.{u1} α} {f : α -> M} {g : α -> M}, ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1)))) (f a) (g a))) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1)))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M (OrderedCommMonoid.toCommMonoid.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) s f a) (g a))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CanonicallyOrderedMonoid.{u1} M] {a : α} {s : Set.{u2} α} {f : α -> M} {g : α -> M}, ((Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) (f a) (g a))) -> (LE.le.{u1} M (Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) s f a) (g a))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_apply_le Set.mulIndicator_apply_leₓ'. -/
@[to_additive]
theorem mulIndicator_apply_le {a : α} {s : Set α} {f g : α → M} (hfg : a ∈ s → f a ≤ g a) :
mulIndicator s f a ≤ g a :=
@@ -1364,12 +854,6 @@ theorem mulIndicator_apply_le {a : α} {s : Set α} {f g : α → M} (hfg : a
#align set.mul_indicator_apply_le Set.mulIndicator_apply_le
#align set.indicator_apply_le Set.indicator_apply_le
-/- warning: set.mul_indicator_le -> Set.mulIndicator_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CanonicallyOrderedMonoid.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M}, (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1)))) (f a) (g a))) -> (LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M (OrderedCommMonoid.toCommMonoid.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) s f) g)
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CanonicallyOrderedMonoid.{u1} M] {s : Set.{u2} α} {f : α -> M} {g : α -> M}, (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) (f a) (g a))) -> (LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1))))) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) s f) g)
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le Set.mulIndicator_leₓ'. -/
@[to_additive]
theorem mulIndicator_le {s : Set α} {f g : α → M} (hfg : ∀ a ∈ s, f a ≤ g a) :
mulIndicator s f ≤ g :=
@@ -1379,12 +863,6 @@ theorem mulIndicator_le {s : Set α} {f g : α → M} (hfg : ∀ a ∈ s, f a
end CanonicallyOrderedMonoid
-/- warning: set.indicator_le_indicator_nonneg -> Set.indicator_le_indicator_nonneg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] [_inst_2 : Zero.{u2} β] (s : Set.{u1} α) (f : α -> β), LE.le.{max u1 u2} (α -> β) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1)))))) (Set.indicator.{u1, u2} α β _inst_2 s f) (Set.indicator.{u1, u2} α β _inst_2 (setOf.{u1} α (fun (x : α) => LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (OfNat.ofNat.{u2} β 0 (OfNat.mk.{u2} β 0 (Zero.zero.{u2} β _inst_2))) (f x))) f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] [_inst_2 : Zero.{u2} β] (s : Set.{u1} α) (f : α -> β), LE.le.{max u1 u2} (α -> β) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1))))))) (Set.indicator.{u1, u2} α β _inst_2 s f) (Set.indicator.{u1, u2} α β _inst_2 (setOf.{u1} α (fun (x : α) => LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (OfNat.ofNat.{u2} β 0 (Zero.toOfNat0.{u2} β _inst_2)) (f x))) f)
-Case conversion may be inaccurate. Consider using '#align set.indicator_le_indicator_nonneg Set.indicator_le_indicator_nonnegₓ'. -/
theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
s.indicator f ≤ { x | 0 ≤ f x }.indicator f :=
by
@@ -1398,12 +876,6 @@ theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set
· exact le_rfl
#align set.indicator_le_indicator_nonneg Set.indicator_le_indicator_nonneg
-/- warning: set.indicator_nonpos_le_indicator -> Set.indicator_nonpos_le_indicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] [_inst_2 : Zero.{u2} β] (s : Set.{u1} α) (f : α -> β), LE.le.{max u1 u2} (α -> β) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1)))))) (Set.indicator.{u1, u2} α β _inst_2 (setOf.{u1} α (fun (x : α) => LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f x) (OfNat.ofNat.{u2} β 0 (OfNat.mk.{u2} β 0 (Zero.zero.{u2} β _inst_2))))) f) (Set.indicator.{u1, u2} α β _inst_2 s f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] [_inst_2 : Zero.{u2} β] (s : Set.{u1} α) (f : α -> β), LE.le.{max u1 u2} (α -> β) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1))))))) (Set.indicator.{u1, u2} α β _inst_2 (setOf.{u1} α (fun (x : α) => LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f x) (OfNat.ofNat.{u2} β 0 (Zero.toOfNat0.{u2} β _inst_2)))) f) (Set.indicator.{u1, u2} α β _inst_2 s f)
-Case conversion may be inaccurate. Consider using '#align set.indicator_nonpos_le_indicator Set.indicator_nonpos_le_indicatorₓ'. -/
theorem indicator_nonpos_le_indicator {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
{ x | f x ≤ 0 }.indicator f ≤ s.indicator f :=
@indicator_le_indicator_nonneg α βᵒᵈ _ _ s f
@@ -1411,12 +883,6 @@ theorem indicator_nonpos_le_indicator {β} [LinearOrder β] [Zero β] (s : Set
end Set
-/- warning: monoid_hom.map_mul_indicator -> MonoidHom.map_mulIndicator is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] (f : MonoidHom.{u2, u3} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u3} N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u2, u3} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N _inst_1 _inst_2) f (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s g x)) (Set.mulIndicator.{u1, u3} α N (MulOneClass.toHasOne.{u3} N _inst_2) s (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u2, u3} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N _inst_1 _inst_2) f) g) x)
-but is expected to have type
- forall {α : Type.{u1}} {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (Set.mulIndicator.{u1, u2} α N (MulOneClass.toOne.{u2} N _inst_2) s (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f) g) x)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul_indicator MonoidHom.map_mulIndicatorₓ'. -/
@[to_additive]
theorem MonoidHom.map_mulIndicator {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M →* N)
(s : Set α) (g : α → M) (x : α) : f (s.mulIndicator g x) = s.mulIndicator (f ∘ g) x :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -164,9 +164,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_eq_self_of_superset Set.mulIndicator_eq_self_of_supersetₓ'. -/
@[to_additive]
theorem mulIndicator_eq_self_of_superset (h1 : s.mulIndicator f = f) (h2 : s ⊆ t) :
- t.mulIndicator f = f := by
- rw [mul_indicator_eq_self] at h1⊢
- exact subset.trans h1 h2
+ t.mulIndicator f = f := by rw [mul_indicator_eq_self] at h1⊢; exact subset.trans h1 h2
#align set.mul_indicator_eq_self_of_superset Set.mulIndicator_eq_self_of_superset
#align set.indicator_eq_self_of_superset Set.indicator_eq_self_of_superset
@@ -293,11 +291,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_congr Set.mulIndicator_congrₓ'. -/
@[to_additive]
theorem mulIndicator_congr (h : EqOn f g s) : mulIndicator s f = mulIndicator s g :=
- funext fun x => by
- simp only [mul_indicator]
- split_ifs
- · exact h h_1
- rfl
+ funext fun x => by simp only [mul_indicator]; split_ifs; · exact h h_1; rfl
#align set.mul_indicator_congr Set.mulIndicator_congr
#align set.indicator_congr Set.indicator_congr
@@ -374,9 +368,7 @@ Case conversion may be inaccurate. Consider using '#align set.mul_indicator_mul_
@[to_additive]
theorem mulIndicator_mulIndicator (s t : Set α) (f : α → M) :
mulIndicator s (mulIndicator t f) = mulIndicator (s ∩ t) f :=
- funext fun x => by
- simp only [mul_indicator]
- split_ifs
+ funext fun x => by simp only [mul_indicator]; split_ifs;
repeat' simp_all (config := { contextual := true })
#align set.mul_indicator_mul_indicator Set.mulIndicator_mulIndicator
#align set.indicator_indicator Set.indicator_indicator
@@ -415,9 +407,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_comp_right Set.mulIndicator_comp_rightₓ'. -/
@[to_additive]
theorem mulIndicator_comp_right {s : Set α} (f : β → α) {g : α → M} {x : β} :
- mulIndicator (f ⁻¹' s) (g ∘ f) x = mulIndicator s g (f x) :=
- by
- simp only [mul_indicator]
+ mulIndicator (f ⁻¹' s) (g ∘ f) x = mulIndicator s g (f x) := by simp only [mul_indicator];
split_ifs <;> rfl
#align set.mul_indicator_comp_right Set.mulIndicator_comp_right
#align set.indicator_comp_right Set.indicator_comp_right
@@ -553,11 +543,8 @@ theorem mem_range_mulIndicator {r : M} {s : Set α} {f : α → M} :
#print Set.mulIndicator_rel_mulIndicator /-
@[to_additive]
theorem mulIndicator_rel_mulIndicator {r : M → M → Prop} (h1 : r 1 1) (ha : a ∈ s → r (f a) (g a)) :
- r (mulIndicator s f a) (mulIndicator s g a) :=
- by
- simp only [mul_indicator]
- split_ifs with has has
- exacts[ha has, h1]
+ r (mulIndicator s f a) (mulIndicator s g a) := by simp only [mul_indicator];
+ split_ifs with has has; exacts[ha has, h1]
#align set.mul_indicator_rel_mul_indicator Set.mulIndicator_rel_mulIndicator
#align set.indicator_rel_indicator Set.indicator_rel_indicator
-/
@@ -628,13 +615,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_mul Set.mulIndicator_mulₓ'. -/
@[to_additive]
theorem mulIndicator_mul (s : Set α) (f g : α → M) :
- (mulIndicator s fun a => f a * g a) = fun a => mulIndicator s f a * mulIndicator s g a :=
- by
- funext
- simp only [mul_indicator]
- split_ifs
- · rfl
- rw [mul_one]
+ (mulIndicator s fun a => f a * g a) = fun a => mulIndicator s f a * mulIndicator s g a := by
+ funext; simp only [mul_indicator]; split_ifs; · rfl; rw [mul_one]
#align set.mul_indicator_mul Set.mulIndicator_mul
#align set.indicator_add Set.indicator_add
@@ -781,11 +763,8 @@ but is expected to have type
forall {α : Type.{u3}} {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : AddMonoid.{u2} A] [_inst_2 : Monoid.{u1} M] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_2 _inst_1] (s : Set.{u3} α) (r : α -> M) (f : α -> A) (x : α), Eq.{succ u2} A (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s (fun (x : α) => HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) (r x) (f x)) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_1) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_2 _inst_1 _inst_3)))) (r x) (Set.indicator.{u3, u2} α A (AddMonoid.toZero.{u2} A _inst_1) s f x))
Case conversion may be inaccurate. Consider using '#align set.indicator_smul_apply Set.indicator_smul_applyₓ'. -/
theorem indicator_smul_apply (s : Set α) (r : α → M) (f : α → A) (x : α) :
- indicator s (fun x => r x • f x) x = r x • indicator s f x :=
- by
- dsimp only [indicator]
- split_ifs
- exacts[rfl, (smul_zero (r x)).symm]
+ indicator s (fun x => r x • f x) x = r x • indicator s f x := by dsimp only [indicator];
+ split_ifs; exacts[rfl, (smul_zero (r x)).symm]
#align set.indicator_smul_apply Set.indicator_smul_apply
/- warning: set.indicator_smul -> Set.indicator_smul is a dubious translation:
@@ -1033,9 +1012,7 @@ theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f
by
classical
refine' Finset.induction_on I _ _
- · intro h
- funext
- simp
+ · intro h; funext; simp
intro a I haI ih hI
funext
rw [Finset.prod_insert haI, Finset.set_biUnion_insert, mul_indicator_union_of_not_mem_inter,
@@ -1077,13 +1054,8 @@ but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroClass.{u1} M] (s : Set.{u2} α) (f : α -> M) (g : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f a) (g a))) (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s f a) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s g a))
Case conversion may be inaccurate. Consider using '#align set.indicator_mul Set.indicator_mulₓ'. -/
theorem indicator_mul (s : Set α) (f g : α → M) :
- (indicator s fun a => f a * g a) = fun a => indicator s f a * indicator s g a :=
- by
- funext
- simp only [indicator]
- split_ifs
- · rfl
- rw [MulZeroClass.mul_zero]
+ (indicator s fun a => f a * g a) = fun a => indicator s f a * indicator s g a := by funext;
+ simp only [indicator]; split_ifs; · rfl; rw [MulZeroClass.mul_zero]
#align set.indicator_mul Set.indicator_mul
/- warning: set.indicator_mul_left -> Set.indicator_mul_left is a dubious translation:
@@ -1093,12 +1065,8 @@ but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroClass.{u1} M] {a : α} (s : Set.{u2} α) (f : α -> M) (g : α -> M), Eq.{succ u1} M (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f a) (g a)) a) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s f a) (g a))
Case conversion may be inaccurate. Consider using '#align set.indicator_mul_left Set.indicator_mul_leftₓ'. -/
theorem indicator_mul_left (s : Set α) (f g : α → M) :
- indicator s (fun a => f a * g a) a = indicator s f a * g a :=
- by
- simp only [indicator]
- split_ifs
- · rfl
- rw [MulZeroClass.zero_mul]
+ indicator s (fun a => f a * g a) a = indicator s f a * g a := by simp only [indicator];
+ split_ifs; · rfl; rw [MulZeroClass.zero_mul]
#align set.indicator_mul_left Set.indicator_mul_left
/- warning: set.indicator_mul_right -> Set.indicator_mul_right is a dubious translation:
@@ -1108,12 +1076,8 @@ but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroClass.{u1} M] {a : α} (s : Set.{u2} α) (f : α -> M) (g : α -> M), Eq.{succ u1} M (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s (fun (a : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f a) (g a)) a) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f a) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) s g a))
Case conversion may be inaccurate. Consider using '#align set.indicator_mul_right Set.indicator_mul_rightₓ'. -/
theorem indicator_mul_right (s : Set α) (f g : α → M) :
- indicator s (fun a => f a * g a) a = f a * indicator s g a :=
- by
- simp only [indicator]
- split_ifs
- · rfl
- rw [MulZeroClass.mul_zero]
+ indicator s (fun a => f a * g a) a = f a * indicator s g a := by simp only [indicator];
+ split_ifs; · rfl; rw [MulZeroClass.mul_zero]
#align set.indicator_mul_right Set.indicator_mul_right
/- warning: set.inter_indicator_mul -> Set.inter_indicator_mul is a dubious translation:
@@ -1123,10 +1087,8 @@ but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroClass.{u1} M] {t1 : Set.{u2} α} {t2 : Set.{u2} α} (f : α -> M) (g : α -> M) (x : α), Eq.{succ u1} M (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) t1 t2) (fun (x : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (f x) (g x)) x) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M _inst_1)) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) t1 f x) (Set.indicator.{u2, u1} α M (MulZeroClass.toZero.{u1} M _inst_1) t2 g x))
Case conversion may be inaccurate. Consider using '#align set.inter_indicator_mul Set.inter_indicator_mulₓ'. -/
theorem inter_indicator_mul {t1 t2 : Set α} (f g : α → M) (x : α) :
- (t1 ∩ t2).indicator (fun x => f x * g x) x = t1.indicator f x * t2.indicator g x :=
- by
- rw [← Set.indicator_indicator]
- simp [indicator]
+ (t1 ∩ t2).indicator (fun x => f x * g x) x = t1.indicator f x * t2.indicator g x := by
+ rw [← Set.indicator_indicator]; simp [indicator]
#align set.inter_indicator_mul Set.inter_indicator_mul
end MulZeroClass
@@ -1186,10 +1148,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7782 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7782 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
Case conversion may be inaccurate. Consider using '#align set.indicator_one_inj Set.indicator_one_injₓ'. -/
-theorem indicator_one_inj {U V : Set α} (h : indicator U (1 : α → M) = indicator V 1) : U = V :=
- by
- ext
- simp_rw [← indicator_eq_one_iff_mem M, h]
+theorem indicator_one_inj {U V : Set α} (h : indicator U (1 : α → M) = indicator V 1) : U = V := by
+ ext; simp_rw [← indicator_eq_one_iff_mem M, h]
#align set.indicator_one_inj Set.indicator_one_inj
end MulZeroOneClass
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -1455,7 +1455,7 @@ end Set
lean 3 declaration is
forall {α : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] (f : MonoidHom.{u2, u3} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u3} N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u2, u3} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N _inst_1 _inst_2) f (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s g x)) (Set.mulIndicator.{u1, u3} α N (MulOneClass.toHasOne.{u3} N _inst_2) s (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u2, u3} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N _inst_1 _inst_2) f) g) x)
but is expected to have type
- forall {α : Type.{u1}} {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (Set.mulIndicator.{u1, u2} α N (MulOneClass.toOne.{u2} N _inst_2) s (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f) g) x)
+ forall {α : Type.{u1}} {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (Set.mulIndicator.{u1, u2} α N (MulOneClass.toOne.{u2} N _inst_2) s (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f) g) x)
Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul_indicator MonoidHom.map_mulIndicatorₓ'. -/
@[to_additive]
theorem MonoidHom.map_mulIndicator {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M →* N)
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -1262,7 +1262,7 @@ variable [Preorder M]
/- warning: set.one_le_mul_indicator_apply -> Set.one_le_mulIndicator_apply is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f a))) -> (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a))
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f a))) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a))
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u1} M], ((Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (f a))) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a))
Case conversion may be inaccurate. Consider using '#align set.one_le_mul_indicator_apply Set.one_le_mulIndicator_applyₓ'. -/
@@ -1274,7 +1274,7 @@ theorem one_le_mulIndicator_apply (h : a ∈ s → 1 ≤ f a) : 1 ≤ mulIndicat
/- warning: set.one_le_mul_indicator -> Set.one_le_mulIndicator is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f a))) -> (forall (a : α), LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a))
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f a))) -> (forall (a : α), LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a))
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} [_inst_2 : Preorder.{u1} M], (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (f a))) -> (forall (a : α), LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a))
Case conversion may be inaccurate. Consider using '#align set.one_le_mul_indicator Set.one_le_mulIndicatorₓ'. -/
@@ -1286,7 +1286,7 @@ theorem one_le_mulIndicator (h : ∀ a ∈ s, 1 ≤ f a) (a : α) : 1 ≤ mulInd
/- warning: set.mul_indicator_apply_le_one -> Set.mulIndicator_apply_le_one is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))) -> (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {a : α} [_inst_2 : Preorder.{u1} M], ((Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_apply_le_one Set.mulIndicator_apply_le_oneₓ'. -/
@@ -1298,7 +1298,7 @@ theorem mulIndicator_apply_le_one (h : a ∈ s → f a ≤ 1) : mulIndicator s f
/- warning: set.mul_indicator_le_one -> Set.mulIndicator_le_one is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))) -> (forall (a : α), LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))) -> (forall (a : α), LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))))
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} [_inst_2 : Preorder.{u1} M], (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))) -> (forall (a : α), LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_one Set.mulIndicator_le_oneₓ'. -/
@@ -1308,19 +1308,23 @@ theorem mulIndicator_le_one (h : ∀ a ∈ s, f a ≤ 1) (a : α) : mulIndicator
#align set.mul_indicator_le_one Set.mulIndicator_le_one
#align set.indicator_nonpos Set.indicator_nonpos
-#print Set.mulIndicator_le_mulIndicator /-
+/- warning: set.mul_indicator_le_mul_indicator -> Set.mulIndicator_le_mulIndicator is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (f a) (g a)) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (Set.mulIndicator.{u1, u2} α M _inst_1 s g a))
+but is expected to have type
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M} {a : α} [_inst_2 : Preorder.{u2} M], (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (f a) (g a)) -> (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (Set.mulIndicator.{u1, u2} α M _inst_1 s g a))
+Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_mul_indicator Set.mulIndicator_le_mulIndicatorₓ'. -/
@[to_additive]
theorem mulIndicator_le_mulIndicator (h : f a ≤ g a) : mulIndicator s f a ≤ mulIndicator s g a :=
mulIndicator_rel_mulIndicator le_rfl fun _ => h
#align set.mul_indicator_le_mul_indicator Set.mulIndicator_le_mulIndicator
#align set.indicator_le_indicator Set.indicator_le_indicator
--/
attribute [mono] mul_indicator_le_mul_indicator indicator_le_indicator
/- warning: set.mul_indicator_le_mul_indicator_of_subset -> Set.mulIndicator_le_mulIndicator_of_subset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (forall (a : α), LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f a)) -> (forall (a : α), LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (Set.mulIndicator.{u1, u2} α M _inst_1 t f a))
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (forall (a : α), LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f a)) -> (forall (a : α), LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (Set.mulIndicator.{u1, u2} α M _inst_1 s f a) (Set.mulIndicator.{u1, u2} α M _inst_1 t f a))
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α} {f : α -> M} [_inst_2 : Preorder.{u1} M], (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s t) -> (forall (a : α), LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (f a)) -> (forall (a : α), LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (Set.mulIndicator.{u2, u1} α M _inst_1 s f a) (Set.mulIndicator.{u2, u1} α M _inst_1 t f a))
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_mul_indicator_of_subset Set.mulIndicator_le_mulIndicator_of_subsetₓ'. -/
@@ -1335,7 +1339,7 @@ theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤
/- warning: set.mul_indicator_le_self' -> Set.mulIndicator_le_self' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (forall (x : α), (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s)) -> (LE.le.{u2} M (Preorder.toLE.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f x))) -> (LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u2} M _inst_2)) (Set.mulIndicator.{u1, u2} α M _inst_1 s f) f)
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] {s : Set.{u1} α} {f : α -> M} [_inst_2 : Preorder.{u2} M], (forall (x : α), (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s)) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M _inst_2) (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M _inst_1))) (f x))) -> (LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toHasLe.{u2} M _inst_2)) (Set.mulIndicator.{u1, u2} α M _inst_1 s f) f)
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} [_inst_2 : Preorder.{u1} M], (forall (x : α), (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s)) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (f x))) -> (LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u1} M _inst_2)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) f)
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_self' Set.mulIndicator_le_self'ₓ'. -/
@@ -1377,7 +1381,7 @@ variable [CanonicallyOrderedMonoid M]
/- warning: set.mul_indicator_le_self -> Set.mulIndicator_le_self is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CanonicallyOrderedMonoid.{u2} M] (s : Set.{u1} α) (f : α -> M), LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M (OrderedCommMonoid.toCommMonoid.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) s f) f
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CanonicallyOrderedMonoid.{u2} M] (s : Set.{u1} α) (f : α -> M), LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M (OrderedCommMonoid.toCommMonoid.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) s f) f
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CanonicallyOrderedMonoid.{u1} M] (s : Set.{u2} α) (f : α -> M), LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1))))) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) s f) f
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_self Set.mulIndicator_le_selfₓ'. -/
@@ -1389,7 +1393,7 @@ theorem mulIndicator_le_self (s : Set α) (f : α → M) : mulIndicator s f ≤
/- warning: set.mul_indicator_apply_le -> Set.mulIndicator_apply_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CanonicallyOrderedMonoid.{u2} M] {a : α} {s : Set.{u1} α} {f : α -> M} {g : α -> M}, ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toLE.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1)))) (f a) (g a))) -> (LE.le.{u2} M (Preorder.toLE.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1)))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M (OrderedCommMonoid.toCommMonoid.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) s f a) (g a))
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CanonicallyOrderedMonoid.{u2} M] {a : α} {s : Set.{u1} α} {f : α -> M} {g : α -> M}, ((Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1)))) (f a) (g a))) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1)))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M (OrderedCommMonoid.toCommMonoid.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) s f a) (g a))
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CanonicallyOrderedMonoid.{u1} M] {a : α} {s : Set.{u2} α} {f : α -> M} {g : α -> M}, ((Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) (f a) (g a))) -> (LE.le.{u1} M (Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) s f a) (g a))
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_apply_le Set.mulIndicator_apply_leₓ'. -/
@@ -1402,7 +1406,7 @@ theorem mulIndicator_apply_le {a : α} {s : Set α} {f g : α → M} (hfg : a
/- warning: set.mul_indicator_le -> Set.mulIndicator_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CanonicallyOrderedMonoid.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M}, (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toLE.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1)))) (f a) (g a))) -> (LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M (OrderedCommMonoid.toCommMonoid.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) s f) g)
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CanonicallyOrderedMonoid.{u2} M] {s : Set.{u1} α} {f : α -> M} {g : α -> M}, (forall (a : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) a s) -> (LE.le.{u2} M (Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1)))) (f a) (g a))) -> (LE.le.{max u1 u2} (α -> M) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toHasLe.{u2} M (PartialOrder.toPreorder.{u2} M (OrderedCommMonoid.toPartialOrder.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M (OrderedCommMonoid.toCommMonoid.{u2} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u2} M _inst_1))))) s f) g)
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CanonicallyOrderedMonoid.{u1} M] {s : Set.{u2} α} {f : α -> M} {g : α -> M}, (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M (Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) (f a) (g a))) -> (LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u1} M (PartialOrder.toPreorder.{u1} M (OrderedCommMonoid.toPartialOrder.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1))))) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (CanonicallyOrderedMonoid.toOrderedCommMonoid.{u1} M _inst_1)))) s f) g)
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le Set.mulIndicator_leₓ'. -/
@@ -1415,7 +1419,12 @@ theorem mulIndicator_le {s : Set α} {f g : α → M} (hfg : ∀ a ∈ s, f a
end CanonicallyOrderedMonoid
-#print Set.indicator_le_indicator_nonneg /-
+/- warning: set.indicator_le_indicator_nonneg -> Set.indicator_le_indicator_nonneg is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] [_inst_2 : Zero.{u2} β] (s : Set.{u1} α) (f : α -> β), LE.le.{max u1 u2} (α -> β) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1)))))) (Set.indicator.{u1, u2} α β _inst_2 s f) (Set.indicator.{u1, u2} α β _inst_2 (setOf.{u1} α (fun (x : α) => LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (OfNat.ofNat.{u2} β 0 (OfNat.mk.{u2} β 0 (Zero.zero.{u2} β _inst_2))) (f x))) f)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] [_inst_2 : Zero.{u2} β] (s : Set.{u1} α) (f : α -> β), LE.le.{max u1 u2} (α -> β) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1))))))) (Set.indicator.{u1, u2} α β _inst_2 s f) (Set.indicator.{u1, u2} α β _inst_2 (setOf.{u1} α (fun (x : α) => LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (OfNat.ofNat.{u2} β 0 (Zero.toOfNat0.{u2} β _inst_2)) (f x))) f)
+Case conversion may be inaccurate. Consider using '#align set.indicator_le_indicator_nonneg Set.indicator_le_indicator_nonnegₓ'. -/
theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
s.indicator f ≤ { x | 0 ≤ f x }.indicator f :=
by
@@ -1428,14 +1437,17 @@ theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set
· exact h_1
· exact le_rfl
#align set.indicator_le_indicator_nonneg Set.indicator_le_indicator_nonneg
--/
-#print Set.indicator_nonpos_le_indicator /-
+/- warning: set.indicator_nonpos_le_indicator -> Set.indicator_nonpos_le_indicator is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] [_inst_2 : Zero.{u2} β] (s : Set.{u1} α) (f : α -> β), LE.le.{max u1 u2} (α -> β) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1)))))) (Set.indicator.{u1, u2} α β _inst_2 (setOf.{u1} α (fun (x : α) => LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (LinearOrder.toLattice.{u2} β _inst_1))))) (f x) (OfNat.ofNat.{u2} β 0 (OfNat.mk.{u2} β 0 (Zero.zero.{u2} β _inst_2))))) f) (Set.indicator.{u1, u2} α β _inst_2 s f)
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : LinearOrder.{u2} β] [_inst_2 : Zero.{u2} β] (s : Set.{u1} α) (f : α -> β), LE.le.{max u1 u2} (α -> β) (Pi.hasLe.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1))))))) (Set.indicator.{u1, u2} α β _inst_2 (setOf.{u1} α (fun (x : α) => LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (SemilatticeInf.toPartialOrder.{u2} β (Lattice.toSemilatticeInf.{u2} β (DistribLattice.toLattice.{u2} β (instDistribLattice.{u2} β _inst_1)))))) (f x) (OfNat.ofNat.{u2} β 0 (Zero.toOfNat0.{u2} β _inst_2)))) f) (Set.indicator.{u1, u2} α β _inst_2 s f)
+Case conversion may be inaccurate. Consider using '#align set.indicator_nonpos_le_indicator Set.indicator_nonpos_le_indicatorₓ'. -/
theorem indicator_nonpos_le_indicator {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
{ x | f x ≤ 0 }.indicator f ≤ s.indicator f :=
@indicator_le_indicator_nonneg α βᵒᵈ _ _ s f
#align set.indicator_nonpos_le_indicator Set.indicator_nonpos_le_indicator
--/
end Set
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -1020,14 +1020,14 @@ theorem mulIndicator_finset_prod (I : Finset ι) (s : Set α) (f : ι → α →
#align set.mul_indicator_finset_prod Set.mulIndicator_finset_prod
#align set.indicator_finset_sum Set.indicator_finset_sum
-/- warning: set.mul_indicator_finset_bUnion -> Set.mulIndicator_finset_bunionᵢ is a dubious translation:
+/- warning: set.mul_indicator_finset_bUnion -> Set.mulIndicator_finset_biUnion is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u1} α)) {f : α -> M}, (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) -> (forall (j : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (s i) (s j)))) -> (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) => s i))) f) (fun (a : α) => Finset.prod.{u2, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (s i) f a)))
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u1} α)) {f : α -> M}, (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) -> (forall (j : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (s i) (s j)))) -> (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) => s i))) f) (fun (a : α) => Finset.prod.{u2, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (s i) f a)))
but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u2} α)) {f : α -> M}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) -> (forall (j : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (s i) (s j)))) -> (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (Set.unionᵢ.{u2, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) => s i))) f) (fun (a : α) => Finset.prod.{u1, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (s i) f a)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_bunionᵢₓ'. -/
+ forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u2} α)) {f : α -> M}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) -> (forall (j : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (s i) (s j)))) -> (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (Set.iUnion.{u2, succ u3} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) => s i))) f) (fun (a : α) => Finset.prod.{u1, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (s i) f a)))
+Case conversion may be inaccurate. Consider using '#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_biUnionₓ'. -/
@[to_additive]
-theorem mulIndicator_finset_bunionᵢ {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
+theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
(∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) →
mulIndicator (⋃ i ∈ I, s i) f = fun a => ∏ i in I, mulIndicator (s i) f a :=
by
@@ -1038,7 +1038,7 @@ theorem mulIndicator_finset_bunionᵢ {ι} (I : Finset ι) (s : ι → Set α) {
simp
intro a I haI ih hI
funext
- rw [Finset.prod_insert haI, Finset.set_bunionᵢ_insert, mul_indicator_union_of_not_mem_inter,
+ rw [Finset.prod_insert haI, Finset.set_biUnion_insert, mul_indicator_union_of_not_mem_inter,
ih _]
· intro i hi j hj hij
exact hI i (Finset.mem_insert_of_mem hi) j (Finset.mem_insert_of_mem hj) hij
@@ -1047,22 +1047,22 @@ theorem mulIndicator_finset_bunionᵢ {ι} (I : Finset ι) (s : ι → Set α) {
refine'
disjoint_left.1 (hI a (Finset.mem_insert_self _ _) a' (Finset.mem_insert_of_mem ha') _) hx
exact (ne_of_mem_of_not_mem ha' haI).symm
-#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_bunionᵢ
-#align set.indicator_finset_bUnion Set.indicator_finset_bunionᵢ
+#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_biUnion
+#align set.indicator_finset_bUnion Set.indicator_finset_biUnion
-/- warning: set.mul_indicator_finset_bUnion_apply -> Set.mulIndicator_finset_bunionᵢ_apply is a dubious translation:
+/- warning: set.mul_indicator_finset_bUnion_apply -> Set.mulIndicator_finset_biUnion_apply is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u1} α)) {f : α -> M}, (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) -> (forall (j : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (s i) (s j)))) -> (forall (x : α), Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (Set.unionᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) => s i))) f x) (Finset.prod.{u2, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (s i) f x)))
+ forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u1} α)) {f : α -> M}, (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) -> (forall (j : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (s i) (s j)))) -> (forall (x : α), Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (Set.iUnion.{u1, succ u3} α ι (fun (i : ι) => Set.iUnion.{u1, 0} α (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i I) => s i))) f x) (Finset.prod.{u2, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1))) (s i) f x)))
but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u2} α)) {f : α -> M}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) -> (forall (j : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (s i) (s j)))) -> (forall (x : α), Eq.{succ u1} M (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (Set.unionᵢ.{u2, succ u3} α ι (fun (i : ι) => Set.unionᵢ.{u2, 0} α (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) => s i))) f x) (Finset.prod.{u1, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (s i) f x)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_bunionᵢ_applyₓ'. -/
+ forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] {ι : Type.{u3}} (I : Finset.{u3} ι) (s : ι -> (Set.{u2} α)) {f : α -> M}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) -> (forall (j : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) j I) -> (Ne.{succ u3} ι i j) -> (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (s i) (s j)))) -> (forall (x : α), Eq.{succ u1} M (Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (Set.iUnion.{u2, succ u3} α ι (fun (i : ι) => Set.iUnion.{u2, 0} α (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i I) => s i))) f x) (Finset.prod.{u1, u3} M ι _inst_1 I (fun (i : ι) => Set.mulIndicator.{u2, u1} α M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)) (s i) f x)))
+Case conversion may be inaccurate. Consider using '#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_biUnion_applyₓ'. -/
@[to_additive]
-theorem mulIndicator_finset_bunionᵢ_apply {ι} (I : Finset ι) (s : ι → Set α) {f : α → M}
+theorem mulIndicator_finset_biUnion_apply {ι} (I : Finset ι) (s : ι → Set α) {f : α → M}
(h : ∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) (x : α) :
mulIndicator (⋃ i ∈ I, s i) f x = ∏ i in I, mulIndicator (s i) f x := by
- rw [Set.mulIndicator_finset_bunionᵢ I s h]
-#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_bunionᵢ_apply
-#align set.indicator_finset_bUnion_apply Set.indicator_finset_bunionᵢ_apply
+ rw [Set.mulIndicator_finset_biUnion I s h]
+#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_biUnion_apply
+#align set.indicator_finset_bUnion_apply Set.indicator_finset_biUnion_apply
end CommMonoid
@@ -1346,28 +1346,28 @@ theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndic
#align set.mul_indicator_le_self' Set.mulIndicator_le_self'
#align set.indicator_le_self' Set.indicator_le_self'
-/- warning: set.mul_indicator_Union_apply -> Set.mulIndicator_unionᵢ_apply is a dubious translation:
+/- warning: set.mul_indicator_Union_apply -> Set.mulIndicator_iUnion_apply is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {M : Type.{u3}} [_inst_3 : CompleteLattice.{u3} M] [_inst_4 : One.{u3} M], (Eq.{succ u3} M (Bot.bot.{u3} M (CompleteLattice.toHasBot.{u3} M _inst_3)) (OfNat.ofNat.{u3} M 1 (OfNat.mk.{u3} M 1 (One.one.{u3} M _inst_4)))) -> (forall (s : ι -> (Set.{u1} α)) (f : α -> M) (x : α), Eq.{succ u3} M (Set.mulIndicator.{u1, u3} α M _inst_4 (Set.unionᵢ.{u1, u2} α ι (fun (i : ι) => s i)) f x) (supᵢ.{u3, u2} M (ConditionallyCompleteLattice.toHasSup.{u3} M (CompleteLattice.toConditionallyCompleteLattice.{u3} M _inst_3)) ι (fun (i : ι) => Set.mulIndicator.{u1, u3} α M _inst_4 (s i) f x)))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {M : Type.{u3}} [_inst_3 : CompleteLattice.{u3} M] [_inst_4 : One.{u3} M], (Eq.{succ u3} M (Bot.bot.{u3} M (CompleteLattice.toHasBot.{u3} M _inst_3)) (OfNat.ofNat.{u3} M 1 (OfNat.mk.{u3} M 1 (One.one.{u3} M _inst_4)))) -> (forall (s : ι -> (Set.{u1} α)) (f : α -> M) (x : α), Eq.{succ u3} M (Set.mulIndicator.{u1, u3} α M _inst_4 (Set.iUnion.{u1, u2} α ι (fun (i : ι) => s i)) f x) (iSup.{u3, u2} M (ConditionallyCompleteLattice.toHasSup.{u3} M (CompleteLattice.toConditionallyCompleteLattice.{u3} M _inst_3)) ι (fun (i : ι) => Set.mulIndicator.{u1, u3} α M _inst_4 (s i) f x)))
but is expected to have type
- forall {α : Type.{u1}} {ι : Sort.{u3}} {M : Type.{u2}} [_inst_3 : CompleteLattice.{u2} M] [_inst_4 : One.{u2} M], (Eq.{succ u2} M (Bot.bot.{u2} M (CompleteLattice.toBot.{u2} M _inst_3)) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_4))) -> (forall (s : ι -> (Set.{u1} α)) (f : α -> M) (x : α), Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_4 (Set.unionᵢ.{u1, u3} α ι (fun (i : ι) => s i)) f x) (supᵢ.{u2, u3} M (ConditionallyCompleteLattice.toSupSet.{u2} M (CompleteLattice.toConditionallyCompleteLattice.{u2} M _inst_3)) ι (fun (i : ι) => Set.mulIndicator.{u1, u2} α M _inst_4 (s i) f x)))
-Case conversion may be inaccurate. Consider using '#align set.mul_indicator_Union_apply Set.mulIndicator_unionᵢ_applyₓ'. -/
+ forall {α : Type.{u1}} {ι : Sort.{u3}} {M : Type.{u2}} [_inst_3 : CompleteLattice.{u2} M] [_inst_4 : One.{u2} M], (Eq.{succ u2} M (Bot.bot.{u2} M (CompleteLattice.toBot.{u2} M _inst_3)) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_4))) -> (forall (s : ι -> (Set.{u1} α)) (f : α -> M) (x : α), Eq.{succ u2} M (Set.mulIndicator.{u1, u2} α M _inst_4 (Set.iUnion.{u1, u3} α ι (fun (i : ι) => s i)) f x) (iSup.{u2, u3} M (ConditionallyCompleteLattice.toSupSet.{u2} M (CompleteLattice.toConditionallyCompleteLattice.{u2} M _inst_3)) ι (fun (i : ι) => Set.mulIndicator.{u1, u2} α M _inst_4 (s i) f x)))
+Case conversion may be inaccurate. Consider using '#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_applyₓ'. -/
@[to_additive]
-theorem mulIndicator_unionᵢ_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥ : M) = 1)
+theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥ : M) = 1)
(s : ι → Set α) (f : α → M) (x : α) :
mulIndicator (⋃ i, s i) f x = ⨆ i, mulIndicator (s i) f x :=
by
by_cases hx : x ∈ ⋃ i, s i
· rw [mul_indicator_of_mem hx]
rw [mem_Union] at hx
- refine' le_antisymm _ (supᵢ_le fun i => mul_indicator_le_self' (fun x hx => h1 ▸ bot_le) x)
+ refine' le_antisymm _ (iSup_le fun i => mul_indicator_le_self' (fun x hx => h1 ▸ bot_le) x)
rcases hx with ⟨i, hi⟩
- exact le_supᵢ_of_le i (ge_of_eq <| mul_indicator_of_mem hi _)
+ exact le_iSup_of_le i (ge_of_eq <| mul_indicator_of_mem hi _)
· rw [mul_indicator_of_not_mem hx]
simp only [mem_Union, not_exists] at hx
simp [hx, ← h1]
-#align set.mul_indicator_Union_apply Set.mulIndicator_unionᵢ_apply
-#align set.indicator_Union_apply Set.indicator_unionᵢ_apply
+#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_apply
+#align set.indicator_Union_apply Set.indicator_iUnion_apply
end Order
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -1139,7 +1139,7 @@ variable [MulZeroOneClass M]
lean 3 declaration is
forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulZeroOneClass.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α}, Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t) (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toHasMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) s (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) t (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))))
but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7410 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7410 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7410 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))))
+ forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7408 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7408 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7408 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align set.inter_indicator_one Set.inter_indicator_oneₓ'. -/
theorem inter_indicator_one {s t : Set α} :
(s ∩ t).indicator (1 : _ → M) = s.indicator 1 * t.indicator 1 :=
@@ -1150,7 +1150,7 @@ theorem inter_indicator_one {s t : Set α} :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {M : Type.{u3}} [_inst_1 : MulZeroOneClass.{u3} M] {s : Set.{u1} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u3} M (Set.indicator.{max u1 u2, u3} (Prod.{u1, u2} α β) M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) (Set.prod.{u1, u2} α β s t) (OfNat.ofNat.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) 1 (OfNat.mk.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) 1 (One.one.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) (Pi.instOne.{max u1 u2, u3} (Prod.{u1, u2} α β) (fun (ᾰ : Prod.{u1, u2} α β) => M) (fun (i : Prod.{u1, u2} α β) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) (Prod.mk.{u1, u2} α β x y)) (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulZeroClass.toHasMul.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1))) (Set.indicator.{u1, u3} α M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) s (OfNat.ofNat.{max u1 u3} (α -> M) 1 (OfNat.mk.{max u1 u3} (α -> M) 1 (One.one.{max u1 u3} (α -> M) (Pi.instOne.{u1, u3} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) x) (Set.indicator.{u2, u3} β M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) t (OfNat.ofNat.{max u2 u3} (β -> M) 1 (OfNat.mk.{max u2 u3} (β -> M) 1 (One.one.{max u2 u3} (β -> M) (Pi.instOne.{u2, u3} β (fun (ᾰ : β) => M) (fun (i : β) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) y))
but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u3} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u1} M (Set.indicator.{max u3 u2, u1} (Prod.{u3, u2} α β) M (MulZeroOneClass.toZero.{u1} M _inst_1) (Set.prod.{u3, u2} α β s t) (OfNat.ofNat.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) 1 (One.toOfNat1.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) (Pi.instOne.{max u3 u2, u1} (Prod.{u3, u2} α β) (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7469 : Prod.{u3, u2} α β) => M) (fun (i : Prod.{u3, u2} α β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) (Prod.mk.{u3, u2} α β x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1))) (Set.indicator.{u3, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u3 u1} (α -> M) 1 (One.toOfNat1.{max u3 u1} (α -> M) (Pi.instOne.{u3, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) x) (Set.indicator.{u2, u1} β M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (β -> M) 1 (One.toOfNat1.{max u2 u1} (β -> M) (Pi.instOne.{u2, u1} β (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : β) => M) (fun (i : β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) y))
+ forall {α : Type.{u3}} {β : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u3} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u1} M (Set.indicator.{max u3 u2, u1} (Prod.{u3, u2} α β) M (MulZeroOneClass.toZero.{u1} M _inst_1) (Set.prod.{u3, u2} α β s t) (OfNat.ofNat.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) 1 (One.toOfNat1.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) (Pi.instOne.{max u3 u2, u1} (Prod.{u3, u2} α β) (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7467 : Prod.{u3, u2} α β) => M) (fun (i : Prod.{u3, u2} α β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) (Prod.mk.{u3, u2} α β x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1))) (Set.indicator.{u3, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u3 u1} (α -> M) 1 (One.toOfNat1.{max u3 u1} (α -> M) (Pi.instOne.{u3, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) x) (Set.indicator.{u2, u1} β M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (β -> M) 1 (One.toOfNat1.{max u2 u1} (β -> M) (Pi.instOne.{u2, u1} β (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : β) => M) (fun (i : β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) y))
Case conversion may be inaccurate. Consider using '#align set.indicator_prod_one Set.indicator_prod_oneₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem indicator_prod_one {s : Set α} {t : Set β} {x : α} {y : β} :
@@ -1184,7 +1184,7 @@ theorem indicator_eq_one_iff_mem {U : Set α} {x : α} : indicator U 1 x = (1 :
lean 3 declaration is
forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : Nontrivial.{u2} M] {U : Set.{u1} α} {V : Set.{u1} α}, (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) U (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) V (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)))))))) -> (Eq.{succ u1} (Set.{u1} α) U V)
but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7786 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7786 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
+ forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7782 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7782 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
Case conversion may be inaccurate. Consider using '#align set.indicator_one_inj Set.indicator_one_injₓ'. -/
theorem indicator_one_inj {U V : Set α} (h : indicator U (1 : α → M) = indicator V 1) : U = V :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/57e09a1296bfb4330ddf6624f1028ba186117d82
@@ -355,7 +355,7 @@ theorem mulIndicator_one (s : Set α) : (mulIndicator s fun x => (1 : M)) = fun
lean 3 declaration is
forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : One.{u2} M] {s : Set.{u1} α}, Eq.{max (succ u1) (succ u2)} (α -> M) (Set.mulIndicator.{u1, u2} α M _inst_1 s (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)))))) (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1)))))
but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : One.{u1} M] {s : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.1615 : α) => M) (fun (i : α) => _inst_1))))) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.159 : α) => M) (fun (i : α) => _inst_1))))
+ forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : One.{u1} M] {s : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.mulIndicator.{u2, u1} α M _inst_1 s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.1615 : α) => M) (fun (i : α) => _inst_1))))) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.1615 : α) => M) (fun (i : α) => _inst_1))))
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_one' Set.mulIndicator_one'ₓ'. -/
@[simp, to_additive]
theorem mulIndicator_one' {s : Set α} : s.mulIndicator (1 : α → M) = 1 :=
@@ -1139,7 +1139,7 @@ variable [MulZeroOneClass M]
lean 3 declaration is
forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulZeroOneClass.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α}, Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t) (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toHasMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) s (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) t (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))))
but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7410 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))))
+ forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7410 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7410 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7410 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align set.inter_indicator_one Set.inter_indicator_oneₓ'. -/
theorem inter_indicator_one {s t : Set α} :
(s ∩ t).indicator (1 : _ → M) = s.indicator 1 * t.indicator 1 :=
@@ -1184,7 +1184,7 @@ theorem indicator_eq_one_iff_mem {U : Set α} {x : α} : indicator U 1 x = (1 :
lean 3 declaration is
forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : Nontrivial.{u2} M] {U : Set.{u1} α} {V : Set.{u1} α}, (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) U (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) V (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)))))))) -> (Eq.{succ u1} (Set.{u1} α) U V)
but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7786 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
+ forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7786 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7786 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
Case conversion may be inaccurate. Consider using '#align set.indicator_one_inj Set.indicator_one_injₓ'. -/
theorem indicator_one_inj {U V : Set α} (h : indicator U (1 : α → M) = indicator V 1) : U = V :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -1139,7 +1139,7 @@ variable [MulZeroOneClass M]
lean 3 declaration is
forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulZeroOneClass.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α}, Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t) (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toHasMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) s (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) t (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))))
but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7302 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))))
+ forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7410 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align set.inter_indicator_one Set.inter_indicator_oneₓ'. -/
theorem inter_indicator_one {s t : Set α} :
(s ∩ t).indicator (1 : _ → M) = s.indicator 1 * t.indicator 1 :=
@@ -1150,7 +1150,7 @@ theorem inter_indicator_one {s t : Set α} :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {M : Type.{u3}} [_inst_1 : MulZeroOneClass.{u3} M] {s : Set.{u1} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u3} M (Set.indicator.{max u1 u2, u3} (Prod.{u1, u2} α β) M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) (Set.prod.{u1, u2} α β s t) (OfNat.ofNat.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) 1 (OfNat.mk.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) 1 (One.one.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) (Pi.instOne.{max u1 u2, u3} (Prod.{u1, u2} α β) (fun (ᾰ : Prod.{u1, u2} α β) => M) (fun (i : Prod.{u1, u2} α β) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) (Prod.mk.{u1, u2} α β x y)) (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulZeroClass.toHasMul.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1))) (Set.indicator.{u1, u3} α M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) s (OfNat.ofNat.{max u1 u3} (α -> M) 1 (OfNat.mk.{max u1 u3} (α -> M) 1 (One.one.{max u1 u3} (α -> M) (Pi.instOne.{u1, u3} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) x) (Set.indicator.{u2, u3} β M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) t (OfNat.ofNat.{max u2 u3} (β -> M) 1 (OfNat.mk.{max u2 u3} (β -> M) 1 (One.one.{max u2 u3} (β -> M) (Pi.instOne.{u2, u3} β (fun (ᾰ : β) => M) (fun (i : β) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) y))
but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u3} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u1} M (Set.indicator.{max u3 u2, u1} (Prod.{u3, u2} α β) M (MulZeroOneClass.toZero.{u1} M _inst_1) (Set.prod.{u3, u2} α β s t) (OfNat.ofNat.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) 1 (One.toOfNat1.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) (Pi.instOne.{max u3 u2, u1} (Prod.{u3, u2} α β) (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7361 : Prod.{u3, u2} α β) => M) (fun (i : Prod.{u3, u2} α β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) (Prod.mk.{u3, u2} α β x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1))) (Set.indicator.{u3, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u3 u1} (α -> M) 1 (One.toOfNat1.{max u3 u1} (α -> M) (Pi.instOne.{u3, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) x) (Set.indicator.{u2, u1} β M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (β -> M) 1 (One.toOfNat1.{max u2 u1} (β -> M) (Pi.instOne.{u2, u1} β (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : β) => M) (fun (i : β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) y))
+ forall {α : Type.{u3}} {β : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u3} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u1} M (Set.indicator.{max u3 u2, u1} (Prod.{u3, u2} α β) M (MulZeroOneClass.toZero.{u1} M _inst_1) (Set.prod.{u3, u2} α β s t) (OfNat.ofNat.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) 1 (One.toOfNat1.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) (Pi.instOne.{max u3 u2, u1} (Prod.{u3, u2} α β) (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7469 : Prod.{u3, u2} α β) => M) (fun (i : Prod.{u3, u2} α β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) (Prod.mk.{u3, u2} α β x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1))) (Set.indicator.{u3, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u3 u1} (α -> M) 1 (One.toOfNat1.{max u3 u1} (α -> M) (Pi.instOne.{u3, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) x) (Set.indicator.{u2, u1} β M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (β -> M) 1 (One.toOfNat1.{max u2 u1} (β -> M) (Pi.instOne.{u2, u1} β (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : β) => M) (fun (i : β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) y))
Case conversion may be inaccurate. Consider using '#align set.indicator_prod_one Set.indicator_prod_oneₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem indicator_prod_one {s : Set α} {t : Set β} {x : α} {y : β} :
@@ -1184,7 +1184,7 @@ theorem indicator_eq_one_iff_mem {U : Set α} {x : α} : indicator U 1 x = (1 :
lean 3 declaration is
forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : Nontrivial.{u2} M] {U : Set.{u1} α} {V : Set.{u1} α}, (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) U (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) V (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)))))))) -> (Eq.{succ u1} (Set.{u1} α) U V)
but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7678 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
+ forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7786 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
Case conversion may be inaccurate. Consider using '#align set.indicator_one_inj Set.indicator_one_injₓ'. -/
theorem indicator_one_inj {U V : Set α} (h : indicator U (1 : α → M) = indicator V 1) : U = V :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -1443,7 +1443,7 @@ end Set
lean 3 declaration is
forall {α : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] (f : MonoidHom.{u2, u3} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u3} N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u2, u3} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N _inst_1 _inst_2) f (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s g x)) (Set.mulIndicator.{u1, u3} α N (MulOneClass.toHasOne.{u3} N _inst_2) s (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u2, u3} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N _inst_1 _inst_2) f) g) x)
but is expected to have type
- forall {α : Type.{u1}} {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (Set.mulIndicator.{u1, u2} α N (MulOneClass.toOne.{u2} N _inst_2) s (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f) g) x)
+ forall {α : Type.{u1}} {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (Set.mulIndicator.{u1, u2} α N (MulOneClass.toOne.{u2} N _inst_2) s (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f) g) x)
Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul_indicator MonoidHom.map_mulIndicatorₓ'. -/
@[to_additive]
theorem MonoidHom.map_mulIndicator {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M →* N)
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -1083,7 +1083,7 @@ theorem indicator_mul (s : Set α) (f g : α → M) :
simp only [indicator]
split_ifs
· rfl
- rw [mul_zero]
+ rw [MulZeroClass.mul_zero]
#align set.indicator_mul Set.indicator_mul
/- warning: set.indicator_mul_left -> Set.indicator_mul_left is a dubious translation:
@@ -1098,7 +1098,7 @@ theorem indicator_mul_left (s : Set α) (f g : α → M) :
simp only [indicator]
split_ifs
· rfl
- rw [zero_mul]
+ rw [MulZeroClass.zero_mul]
#align set.indicator_mul_left Set.indicator_mul_left
/- warning: set.indicator_mul_right -> Set.indicator_mul_right is a dubious translation:
@@ -1113,7 +1113,7 @@ theorem indicator_mul_right (s : Set α) (f g : α → M) :
simp only [indicator]
split_ifs
· rfl
- rw [mul_zero]
+ rw [MulZeroClass.mul_zero]
#align set.indicator_mul_right Set.indicator_mul_right
/- warning: set.inter_indicator_mul -> Set.inter_indicator_mul is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -1443,7 +1443,7 @@ end Set
lean 3 declaration is
forall {α : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] (f : MonoidHom.{u2, u3} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u3} N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u2, u3} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N _inst_1 _inst_2) f (Set.mulIndicator.{u1, u2} α M (MulOneClass.toHasOne.{u2} M _inst_1) s g x)) (Set.mulIndicator.{u1, u3} α N (MulOneClass.toHasOne.{u3} N _inst_2) s (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u2, u3} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N _inst_1 _inst_2) f) g) x)
but is expected to have type
- forall {α : Type.{u1}} {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (Set.mulIndicator.{u1, u2} α N (MulOneClass.toOne.{u2} N _inst_2) s (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f) g) x)
+ forall {α : Type.{u1}} {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (s : Set.{u1} α) (g : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f (Set.mulIndicator.{u1, u3} α M (MulOneClass.toOne.{u3} M _inst_1) s g x)) (Set.mulIndicator.{u1, u2} α N (MulOneClass.toOne.{u2} N _inst_2) s (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f) g) x)
Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul_indicator MonoidHom.map_mulIndicatorₓ'. -/
@[to_additive]
theorem MonoidHom.map_mulIndicator {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M →* N)
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -1139,7 +1139,7 @@ variable [MulZeroOneClass M]
lean 3 declaration is
forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : MulZeroOneClass.{u2} M] {s : Set.{u1} α} {t : Set.{u1} α}, Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s t) (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> M) (α -> M) (α -> M) (instHMul.{max u1 u2} (α -> M) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toHasMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) s (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) t (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))))
but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7307 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))))
+ forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u2} α} {t : Set.{u2} α}, Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s t) (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7302 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> M) (α -> M) (α -> M) (instHMul.{max u2 u1} (α -> M) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align set.inter_indicator_one Set.inter_indicator_oneₓ'. -/
theorem inter_indicator_one {s t : Set α} :
(s ∩ t).indicator (1 : _ → M) = s.indicator 1 * t.indicator 1 :=
@@ -1150,7 +1150,7 @@ theorem inter_indicator_one {s t : Set α} :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {M : Type.{u3}} [_inst_1 : MulZeroOneClass.{u3} M] {s : Set.{u1} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u3} M (Set.indicator.{max u1 u2, u3} (Prod.{u1, u2} α β) M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) (Set.prod.{u1, u2} α β s t) (OfNat.ofNat.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) 1 (OfNat.mk.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) 1 (One.one.{max (max u1 u2) u3} ((Prod.{u1, u2} α β) -> M) (Pi.instOne.{max u1 u2, u3} (Prod.{u1, u2} α β) (fun (ᾰ : Prod.{u1, u2} α β) => M) (fun (i : Prod.{u1, u2} α β) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) (Prod.mk.{u1, u2} α β x y)) (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulZeroClass.toHasMul.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1))) (Set.indicator.{u1, u3} α M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) s (OfNat.ofNat.{max u1 u3} (α -> M) 1 (OfNat.mk.{max u1 u3} (α -> M) 1 (One.one.{max u1 u3} (α -> M) (Pi.instOne.{u1, u3} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) x) (Set.indicator.{u2, u3} β M (MulZeroClass.toHasZero.{u3} M (MulZeroOneClass.toMulZeroClass.{u3} M _inst_1)) t (OfNat.ofNat.{max u2 u3} (β -> M) 1 (OfNat.mk.{max u2 u3} (β -> M) 1 (One.one.{max u2 u3} (β -> M) (Pi.instOne.{u2, u3} β (fun (ᾰ : β) => M) (fun (i : β) => MulOneClass.toHasOne.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)))))) y))
but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u3} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u1} M (Set.indicator.{max u3 u2, u1} (Prod.{u3, u2} α β) M (MulZeroOneClass.toZero.{u1} M _inst_1) (Set.prod.{u3, u2} α β s t) (OfNat.ofNat.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) 1 (One.toOfNat1.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) (Pi.instOne.{max u3 u2, u1} (Prod.{u3, u2} α β) (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7366 : Prod.{u3, u2} α β) => M) (fun (i : Prod.{u3, u2} α β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) (Prod.mk.{u3, u2} α β x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1))) (Set.indicator.{u3, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u3 u1} (α -> M) 1 (One.toOfNat1.{max u3 u1} (α -> M) (Pi.instOne.{u3, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) x) (Set.indicator.{u2, u1} β M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (β -> M) 1 (One.toOfNat1.{max u2 u1} (β -> M) (Pi.instOne.{u2, u1} β (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : β) => M) (fun (i : β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) y))
+ forall {α : Type.{u3}} {β : Type.{u2}} {M : Type.{u1}} [_inst_1 : MulZeroOneClass.{u1} M] {s : Set.{u3} α} {t : Set.{u2} β} {x : α} {y : β}, Eq.{succ u1} M (Set.indicator.{max u3 u2, u1} (Prod.{u3, u2} α β) M (MulZeroOneClass.toZero.{u1} M _inst_1) (Set.prod.{u3, u2} α β s t) (OfNat.ofNat.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) 1 (One.toOfNat1.{max (max u3 u2) u1} ((Prod.{u3, u2} α β) -> M) (Pi.instOne.{max u3 u2, u1} (Prod.{u3, u2} α β) (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7361 : Prod.{u3, u2} α β) => M) (fun (i : Prod.{u3, u2} α β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) (Prod.mk.{u3, u2} α β x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulZeroClass.toMul.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1))) (Set.indicator.{u3, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) s (OfNat.ofNat.{max u3 u1} (α -> M) 1 (One.toOfNat1.{max u3 u1} (α -> M) (Pi.instOne.{u3, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) x) (Set.indicator.{u2, u1} β M (MulZeroOneClass.toZero.{u1} M _inst_1) t (OfNat.ofNat.{max u2 u1} (β -> M) 1 (One.toOfNat1.{max u2 u1} (β -> M) (Pi.instOne.{u2, u1} β (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : β) => M) (fun (i : β) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))) y))
Case conversion may be inaccurate. Consider using '#align set.indicator_prod_one Set.indicator_prod_oneₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem indicator_prod_one {s : Set α} {t : Set β} {x : α} {y : β} :
@@ -1184,7 +1184,7 @@ theorem indicator_eq_one_iff_mem {U : Set α} {x : α} : indicator U 1 x = (1 :
lean 3 declaration is
forall {α : Type.{u1}} (M : Type.{u2}) [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : Nontrivial.{u2} M] {U : Set.{u1} α} {V : Set.{u1} α}, (Eq.{max (succ u1) (succ u2)} (α -> M) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) U (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))))) (Set.indicator.{u1, u2} α M (MulZeroClass.toHasZero.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1)) V (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => MulOneClass.toHasOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)))))))) -> (Eq.{succ u1} (Set.{u1} α) U V)
but is expected to have type
- forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7683 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
+ forall {α : Type.{u2}} (M : Type.{u1}) [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : Nontrivial.{u1} M] {U : Set.{u2} α} {V : Set.{u2} α}, (Eq.{max (succ u2) (succ u1)} (α -> M) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) U (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.7678 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)))))) (Set.indicator.{u2, u1} α M (MulZeroOneClass.toZero.{u1} M _inst_1) V (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : α) => M) (fun (i : α) => MulOneClass.toOne.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))))))) -> (Eq.{succ u2} (Set.{u2} α) U V)
Case conversion may be inaccurate. Consider using '#align set.indicator_one_inj Set.indicator_one_injₓ'. -/
theorem indicator_one_inj {U V : Set α} (h : indicator U (1 : α → M) = indicator V 1) : U = V :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -1223,7 +1223,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {g : α -> M} [_inst_2 : LE.{u1} M], (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M _inst_2 (f a) (g a))) -> (forall (a : α), (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s)) -> (LE.le.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (g a))) -> (LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_2)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) g)
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le' Set.mulIndicator_le'ₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
@[to_additive]
theorem mulIndicator_le' (hfg : ∀ a ∈ s, f a ≤ g a) (hg : ∀ (a) (_ : a ∉ s), 1 ≤ g a) :
mulIndicator s f ≤ g := fun a => mulIndicator_apply_le' (hfg _) (hg _)
@@ -1249,7 +1249,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} {g : α -> M} [_inst_2 : LE.{u1} M], (forall (a : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s) -> (LE.le.{u1} M _inst_2 (f a) (g a))) -> (forall (a : α), (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) a s)) -> (LE.le.{u1} M _inst_2 (f a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)))) -> (LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_2)) f (Set.mulIndicator.{u2, u1} α M _inst_1 s g))
Case conversion may be inaccurate. Consider using '#align set.le_mul_indicator Set.le_mulIndicatorₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (a «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a «expr ∉ » s) -/
@[to_additive]
theorem le_mulIndicator (hfg : ∀ a ∈ s, f a ≤ g a) (hf : ∀ (a) (_ : a ∉ s), f a ≤ 1) :
f ≤ mulIndicator s g := fun a => le_mulIndicator_apply (hfg _) (hf _)
@@ -1339,7 +1339,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] {s : Set.{u2} α} {f : α -> M} [_inst_2 : Preorder.{u1} M], (forall (x : α), (Not (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s)) -> (LE.le.{u1} M (Preorder.toLE.{u1} M _inst_2) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M _inst_1)) (f x))) -> (LE.le.{max u2 u1} (α -> M) (Pi.hasLe.{u2, u1} α (fun (ᾰ : α) => M) (fun (i : α) => Preorder.toLE.{u1} M _inst_2)) (Set.mulIndicator.{u2, u1} α M _inst_1 s f) f)
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_le_self' Set.mulIndicator_le_self'ₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x «expr ∉ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x «expr ∉ » s) -/
@[to_additive]
theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndicator s f ≤ f :=
mulIndicator_le' (fun _ _ => le_rfl) hf
mathlib commit https://github.com/leanprover-community/mathlib/commit/22131150f88a2d125713ffa0f4693e3355b1eb49
@@ -460,7 +460,7 @@ theorem comp_mulIndicator_const (c : M) (f : M → N) (hf : f 1 = 1) :
lean 3 declaration is
forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : One.{u2} M] (s : Set.{u1} α) (f : α -> M) (B : Set.{u2} M), Eq.{succ u1} (Set.{u1} α) (Set.preimage.{u1, u2} α M (Set.mulIndicator.{u1, u2} α M _inst_1 s f) B) (Set.ite.{u1} α s (Set.preimage.{u1, u2} α M f B) (Set.preimage.{u1, u2} α M (OfNat.ofNat.{max u1 u2} (α -> M) 1 (OfNat.mk.{max u1 u2} (α -> M) 1 (One.one.{max u1 u2} (α -> M) (Pi.instOne.{u1, u2} α (fun (ᾰ : α) => M) (fun (i : α) => _inst_1))))) B))
but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (s : Set.{u2} α) (f : α -> M) (B : Set.{u1} M), Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α M (Set.mulIndicator.{u2, u1} α M _inst_1 s f) B) (Set.ite.{u2} α s (Set.preimage.{u2, u1} α M f B) (Set.preimage.{u2, u1} α M (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Data.Set.Image._hyg.23 : α) => M) (fun (i : α) => _inst_1)))) B))
+ forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : One.{u1} M] (s : Set.{u2} α) (f : α -> M) (B : Set.{u1} M), Eq.{succ u2} (Set.{u2} α) (Set.preimage.{u2, u1} α M (Set.mulIndicator.{u2, u1} α M _inst_1 s f) B) (Set.ite.{u2} α s (Set.preimage.{u2, u1} α M f B) (Set.preimage.{u2, u1} α M (OfNat.ofNat.{max u2 u1} (α -> M) 1 (One.toOfNat1.{max u2 u1} (α -> M) (Pi.instOne.{u2, u1} α (fun (a._@.Mathlib.Data.Set.Image._hyg.26 : α) => M) (fun (i : α) => _inst_1)))) B))
Case conversion may be inaccurate. Consider using '#align set.mul_indicator_preimage Set.mulIndicator_preimageₓ'. -/
@[to_additive]
theorem mulIndicator_preimage (s : Set α) (f : α → M) (B : Set M) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
These are changes from #11997, the latest adaptation PR for nightly-2024-04-07, which can be made directly on master.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>
@@ -127,7 +127,7 @@ theorem mulIndicator_eq_one' : mulIndicator s f = 1 ↔ Disjoint (mulSupport f)
@[to_additive]
theorem mulIndicator_apply_ne_one {a : α} : s.mulIndicator f a ≠ 1 ↔ a ∈ s ∩ mulSupport f := by
- simp only [Ne.def, mulIndicator_apply_eq_one, not_imp, mem_inter_iff, mem_mulSupport]
+ simp only [Ne, mulIndicator_apply_eq_one, not_imp, mem_inter_iff, mem_mulSupport]
#align set.mul_indicator_apply_ne_one Set.mulIndicator_apply_ne_one
#align set.indicator_apply_ne_zero Set.indicator_apply_ne_zero
@@ -322,18 +322,8 @@ theorem mulIndicator_preimage_of_not_mem (s : Set α) (f : α → M) {t : Set M}
@[to_additive]
theorem mem_range_mulIndicator {r : M} {s : Set α} {f : α → M} :
r ∈ range (mulIndicator s f) ↔ r = 1 ∧ s ≠ univ ∨ r ∈ f '' s := by
--- Porting note: This proof used to be:
- -- simp [mulIndicator, ite_eq_iff, exists_or, eq_univ_iff_forall, and_comm, or_comm,
- -- @eq_comm _ r 1]
- simp only [mem_range, mulIndicator, ne_eq, mem_image]
- rw [eq_univ_iff_forall, not_forall]
- refine ⟨?_, ?_⟩
- · rintro ⟨y, hy⟩
- split_ifs at hy with hys
- · tauto
- · left
- tauto
- · rintro (⟨hr, ⟨x, hx⟩⟩ | ⟨x, ⟨hx, hxs⟩⟩) <;> use x <;> split_ifs <;> tauto
+ simp [mulIndicator, ite_eq_iff, exists_or, eq_univ_iff_forall, and_comm, or_comm,
+ @eq_comm _ r 1]
#align set.mem_range_mul_indicator Set.mem_range_mulIndicator
#align set.mem_range_indicator Set.mem_range_indicator
Rename
Data.Pi.Algebra
to Algebra.Group.Pi.Basic
Algebra.Group.Pi
to Algebra.Group.Pi.Lemmas
Move a few instances from the latter to the former, the goal being that Algebra.Group.Pi.Basic
is about all the pi instances of the classes defined in Algebra.Group.Defs
. Algebra.Group.Pi.Lemmas
will need further rearranging.
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Zhouhang Zhou
-/
import Mathlib.Algebra.Function.Support
+import Mathlib.Algebra.Group.Pi.Lemmas
#align_import algebra.indicator_function from "leanprover-community/mathlib"@"2445c98ae4b87eabebdde552593519b9b6dc350c"
Those notations are not scoped whereas the file is very low in the import hierarchy.
@@ -380,6 +380,7 @@ theorem mulIndicator_union_of_disjoint (h : Disjoint s t) (f : α → M) :
#align set.mul_indicator_union_of_disjoint Set.mulIndicator_union_of_disjoint
#align set.indicator_union_of_disjoint Set.indicator_union_of_disjoint
+open scoped symmDiff in
@[to_additive]
theorem mulIndicator_symmDiff (s t : Set α) (f : α → M) :
mulIndicator (s ∆ t) f = mulIndicator (s \ t) f * mulIndicator (t \ s) f :=
@@ -532,6 +533,7 @@ theorem mulIndicator_diff' (h : s ⊆ t) (f : α → G) :
rw [mulIndicator_diff h, div_eq_mul_inv]
#align set.indicator_diff Set.indicator_diff
+open scoped symmDiff in
@[to_additive]
theorem apply_mulIndicator_symmDiff {g : G → β} (hg : ∀ x, g x⁻¹ = g x)
(s t : Set α) (f : α → G) (x : α):
Algebra.Support
down the import tree (#8919)
Function.support
is a very basic definition. Nevertheless, it is a pretty heavy import because it imports most objects a support
lemma can be written about.
This PR reverses the dependencies between those objects and Function.support
, so that the latter can become a much more lightweight import.
Only two import could not easily be reversed, namely the ones to Data.Set.Finite
and Order.ConditionallyCompleteLattice.Basic
, so I created two new files instead.
I credit:
@@ -3,7 +3,7 @@ Copyright (c) 2020 Zhouhang Zhou. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Zhouhang Zhou
-/
-import Mathlib.Algebra.Support
+import Mathlib.Algebra.Function.Support
#align_import algebra.indicator_function from "leanprover-community/mathlib"@"2445c98ae4b87eabebdde552593519b9b6dc350c"
@@ -30,8 +30,6 @@ arguments. This is in contrast with the design of `Pi.single` or `Set.piecewise`
indicator, characteristic
-/
-open BigOperators
-
open Function
variable {α β ι M N : Type*}
@@ -475,58 +473,6 @@ noncomputable def mulIndicatorHom {α} (M) [MulOneClass M] (s : Set α) : (α
end Monoid
-section DistribMulAction
-
-variable {A : Type*} [AddMonoid A] [Monoid M] [DistribMulAction M A]
-
-theorem indicator_smul_apply (s : Set α) (r : α → M) (f : α → A) (x : α) :
- indicator s (fun x => r x • f x) x = r x • indicator s f x := by
- dsimp only [indicator]
- split_ifs
- exacts [rfl, (smul_zero (r x)).symm]
-#align set.indicator_smul_apply Set.indicator_smul_apply
-
-theorem indicator_smul (s : Set α) (r : α → M) (f : α → A) :
- (indicator s fun x : α => r x • f x) = fun x : α => r x • indicator s f x :=
- funext <| indicator_smul_apply s r f
-#align set.indicator_smul Set.indicator_smul
-
-theorem indicator_const_smul_apply (s : Set α) (r : M) (f : α → A) (x : α) :
- indicator s (fun x => r • f x) x = r • indicator s f x :=
- indicator_smul_apply s (fun _ => r) f x
-#align set.indicator_const_smul_apply Set.indicator_const_smul_apply
-
-theorem indicator_const_smul (s : Set α) (r : M) (f : α → A) :
- (indicator s fun x : α => r • f x) = fun x : α => r • indicator s f x :=
- funext <| indicator_const_smul_apply s r f
-#align set.indicator_const_smul Set.indicator_const_smul
-
-end DistribMulAction
-
-section SMulWithZero
-
-variable {A : Type*} [Zero A] [Zero M] [SMulWithZero M A]
-
-theorem indicator_smul_apply_left (s : Set α) (r : α → M) (f : α → A) (x : α) :
- indicator s (fun x => r x • f x) x = indicator s r x • f x := by
- dsimp only [indicator]
- split_ifs
- exacts [rfl, (zero_smul _ (f x)).symm]
-
-theorem indicator_smul_left (s : Set α) (r : α → M) (f : α → A) :
- (indicator s fun x : α => r x • f x) = fun x : α => indicator s r x • f x :=
- funext <| indicator_smul_apply_left s r f
-
-theorem indicator_smul_const_apply (s : Set α) (r : α → M) (a : A) (x : α) :
- indicator s (fun x => r x • a) x = indicator s r x • a :=
- indicator_smul_apply_left s r (fun _ => a) x
-
-theorem indicator_smul_const (s : Set α) (r : α → M) (a : A) :
- (indicator s fun x : α => r x • a) = fun x : α => indicator s r x • a :=
- funext <| indicator_smul_const_apply s r a
-
-end SMulWithZero
-
section Group
variable {G : Type*} [Group G] {s t : Set α} {f g : α → G} {a : α}
@@ -594,111 +540,6 @@ theorem apply_mulIndicator_symmDiff {g : G → β} (hg : ∀ x, g x⁻¹ = g x)
end Group
-theorem abs_indicator_symmDiff {G : Type*} [LinearOrderedAddCommGroup G]
- (s t : Set α) (f : α → G) (x : α) :
- |indicator (s ∆ t) f x| = |indicator s f x - indicator t f x| :=
- apply_indicator_symmDiff abs_neg s t f x
-
-section CommMonoid
-
-variable [CommMonoid M]
-
-/-- Consider a product of `g i (f i)` over a `Finset`. Suppose `g` is a
-function such as `Pow`, which maps a second argument of `1` to
-`1`. Then if `f` is replaced by the corresponding multiplicative indicator
-function, the `Finset` may be replaced by a possibly larger `Finset`
-without changing the value of the sum. -/
-@[to_additive]
-theorem prod_mulIndicator_subset_of_eq_one [One N] (f : α → N) (g : α → N → M) {s t : Finset α}
- (h : s ⊆ t) (hg : ∀ a, g a 1 = 1) :
- (∏ i in s, g i (f i)) = ∏ i in t, g i (mulIndicator (↑s) f i) := by
- rw [← Finset.prod_subset h _]
- · apply Finset.prod_congr rfl
- intro i hi
- congr
- symm
- -- Porting note: This did not use to need the implicit argument
- exact mulIndicator_of_mem (α := α) hi f
- · refine' fun i _ hn => _
- convert hg i
- -- Porting note: This did not use to need the implicit argument
- exact mulIndicator_of_not_mem (α := α) hn f
-#align set.prod_mul_indicator_subset_of_eq_one Set.prod_mulIndicator_subset_of_eq_one
-#align set.sum_indicator_subset_of_eq_zero Set.sum_indicator_subset_of_eq_zero
-
-/-- Consider a sum of `g i (f i)` over a `Finset`. Suppose `g` is a
-function such as multiplication, which maps a second argument of 0 to
-0. (A typical use case would be a weighted sum of `f i * h i` or `f i • h i`,
-where `f` gives the weights that are multiplied by some other
-function `h`.) Then if `f` is replaced by the corresponding indicator
-function, the `Finset` may be replaced by a possibly larger `Finset`
-without changing the value of the sum. -/
-add_decl_doc Set.sum_indicator_subset_of_eq_zero
-
-/-- Taking the product of an indicator function over a possibly larger `Finset` is the same as
-taking the original function over the original `Finset`. -/
-@[to_additive
- "Summing an indicator function over a possibly larger `Finset` is the same as summing
- the original function over the original `finset`."]
-theorem prod_mulIndicator_subset (f : α → M) {s t : Finset α} (h : s ⊆ t) :
- ∏ i in s, f i = ∏ i in t, mulIndicator (↑s) f i :=
- prod_mulIndicator_subset_of_eq_one _ (fun _ b => b) h fun _ => rfl
-#align set.prod_mul_indicator_subset Set.prod_mulIndicator_subset
-#align set.sum_indicator_subset Set.sum_indicator_subset
-
-@[to_additive]
-theorem _root_.Finset.prod_mulIndicator_eq_prod_filter (s : Finset ι) (f : ι → α → M)
- (t : ι → Set α) (g : ι → α) [DecidablePred fun i => g i ∈ t i] :
- (∏ i in s, mulIndicator (t i) (f i) (g i)) = ∏ i in s.filter fun i => g i ∈ t i, f i (g i) := by
- refine' (Finset.prod_filter_mul_prod_filter_not s (fun i => g i ∈ t i) _).symm.trans _
- refine' Eq.trans _ (mul_one _)
- exact
- congr_arg₂ (· * ·)
- (Finset.prod_congr rfl fun x hx => mulIndicator_of_mem (Finset.mem_filter.1 hx).2 _)
- (Finset.prod_eq_one fun x hx => mulIndicator_of_not_mem (Finset.mem_filter.1 hx).2 _)
-#align finset.prod_mul_indicator_eq_prod_filter Finset.prod_mulIndicator_eq_prod_filter
-#align finset.sum_indicator_eq_sum_filter Finset.sum_indicator_eq_sum_filter
-
-@[to_additive]
-theorem mulIndicator_finset_prod (I : Finset ι) (s : Set α) (f : ι → α → M) :
- mulIndicator s (∏ i in I, f i) = ∏ i in I, mulIndicator s (f i) :=
- map_prod (mulIndicatorHom M s) _ _
-#align set.mul_indicator_finset_prod Set.mulIndicator_finset_prod
-#align set.indicator_finset_sum Set.indicator_finset_sum
-
-@[to_additive]
-theorem mulIndicator_finset_biUnion (I : Finset ι) (s : ι → Set α) {f : α → M} :
- (∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) →
- mulIndicator (⋃ i ∈ I, s i) f = fun a => ∏ i in I, mulIndicator (s i) f a := by
- classical
- refine' Finset.induction_on I _ _
- · intro
- funext
- simp
- intro a I haI ih hI
- funext
- rw [Finset.prod_insert haI, Finset.set_biUnion_insert, mulIndicator_union_of_not_mem_inter,
- ih _]
- · intro i hi j hj hij
- exact hI i (Finset.mem_insert_of_mem hi) j (Finset.mem_insert_of_mem hj) hij
- simp only [not_exists, exists_prop, mem_iUnion, mem_inter_iff, not_and]
- intro hx a' ha'
- refine'
- disjoint_left.1 (hI a (Finset.mem_insert_self _ _) a' (Finset.mem_insert_of_mem ha') _) hx
- exact (ne_of_mem_of_not_mem ha' haI).symm
-#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_biUnion
-#align set.indicator_finset_bUnion Set.indicator_finset_biUnion
-
-@[to_additive]
-theorem mulIndicator_finset_biUnion_apply (I : Finset ι) (s : ι → Set α) {f : α → M}
- (h : ∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) (x : α) :
- mulIndicator (⋃ i ∈ I, s i) f x = ∏ i in I, mulIndicator (s i) f x := by
- rw [Set.mulIndicator_finset_biUnion I s h]
-#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_biUnion_apply
-#align set.indicator_finset_bUnion_apply Set.indicator_finset_biUnion_apply
-
-end CommMonoid
-
section MulZeroClass
variable [MulZeroClass M] {s t : Set α} {f g : α → M} {a : α}
@@ -773,170 +614,6 @@ theorem indicator_one_inj {U V : Set α} (h : indicator U (1 : α → M) = indic
end MulZeroOneClass
-section Order
-
-variable [One M] {s t : Set α} {f g : α → M} {a : α} {y : M}
-
-section
-
-variable [LE M]
-
-@[to_additive]
-theorem mulIndicator_apply_le' (hfg : a ∈ s → f a ≤ y) (hg : a ∉ s → 1 ≤ y) :
- mulIndicator s f a ≤ y := by
- by_cases ha : a ∈ s
- · simpa [ha] using hfg ha
- · simpa [ha] using hg ha
-#align set.mul_indicator_apply_le' Set.mulIndicator_apply_le'
-#align set.indicator_apply_le' Set.indicator_apply_le'
-
-/- ./././Mathport/Syntax/Translate/Basic.lean:632:2:
-warning: expanding binder collection (a «expr ∉ » s) -/
-@[to_additive]
-theorem mulIndicator_le' (hfg : ∀ a ∈ s, f a ≤ g a) (hg : ∀ (a) (_ : a ∉ s), 1 ≤ g a) :
- mulIndicator s f ≤ g := fun _ => mulIndicator_apply_le' (hfg _) (hg _)
-#align set.mul_indicator_le' Set.mulIndicator_le'
-#align set.indicator_le' Set.indicator_le'
-
-@[to_additive]
-theorem le_mulIndicator_apply {y} (hfg : a ∈ s → y ≤ g a) (hf : a ∉ s → y ≤ 1) :
- y ≤ mulIndicator s g a :=
- @mulIndicator_apply_le' α Mᵒᵈ ‹_› _ _ _ _ _ hfg hf
-#align set.le_mul_indicator_apply Set.le_mulIndicator_apply
-#align set.le_indicator_apply Set.le_indicator_apply
-
-@[to_additive]
-theorem le_mulIndicator (hfg : ∀ a ∈ s, f a ≤ g a) (hf : ∀ (a) (_ : a ∉ s), f a ≤ 1) :
- f ≤ mulIndicator s g := fun _ => le_mulIndicator_apply (hfg _) (hf _)
-#align set.le_mul_indicator Set.le_mulIndicator
-#align set.le_indicator Set.le_indicator
-
-end
-
-variable [Preorder M]
-
-@[to_additive indicator_apply_nonneg]
-theorem one_le_mulIndicator_apply (h : a ∈ s → 1 ≤ f a) : 1 ≤ mulIndicator s f a :=
- le_mulIndicator_apply h fun _ => le_rfl
-#align set.one_le_mul_indicator_apply Set.one_le_mulIndicator_apply
-#align set.indicator_apply_nonneg Set.indicator_apply_nonneg
-
-@[to_additive indicator_nonneg]
-theorem one_le_mulIndicator (h : ∀ a ∈ s, 1 ≤ f a) (a : α) : 1 ≤ mulIndicator s f a :=
- one_le_mulIndicator_apply (h a)
-#align set.one_le_mul_indicator Set.one_le_mulIndicator
-#align set.indicator_nonneg Set.indicator_nonneg
-
-@[to_additive]
-theorem mulIndicator_apply_le_one (h : a ∈ s → f a ≤ 1) : mulIndicator s f a ≤ 1 :=
- mulIndicator_apply_le' h fun _ => le_rfl
-#align set.mul_indicator_apply_le_one Set.mulIndicator_apply_le_one
-#align set.indicator_apply_nonpos Set.indicator_apply_nonpos
-
-@[to_additive]
-theorem mulIndicator_le_one (h : ∀ a ∈ s, f a ≤ 1) (a : α) : mulIndicator s f a ≤ 1 :=
- mulIndicator_apply_le_one (h a)
-#align set.mul_indicator_le_one Set.mulIndicator_le_one
-#align set.indicator_nonpos Set.indicator_nonpos
-
-@[to_additive]
-theorem mulIndicator_le_mulIndicator (h : f a ≤ g a) : mulIndicator s f a ≤ mulIndicator s g a :=
- mulIndicator_rel_mulIndicator le_rfl fun _ => h
-#align set.mul_indicator_le_mul_indicator Set.mulIndicator_le_mulIndicator
-#align set.indicator_le_indicator Set.indicator_le_indicator
-
-attribute [mono] mulIndicator_le_mulIndicator indicator_le_indicator
-
-@[to_additive]
-theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤ f a) (a : α) :
- mulIndicator s f a ≤ mulIndicator t f a :=
- mulIndicator_apply_le'
- (fun ha => le_mulIndicator_apply (fun _ => le_rfl) fun hat => (hat <| h ha).elim) fun _ =>
- one_le_mulIndicator_apply fun _ => hf _
-#align set.mul_indicator_le_mul_indicator_of_subset Set.mulIndicator_le_mulIndicator_of_subset
-#align set.indicator_le_indicator_of_subset Set.indicator_le_indicator_of_subset
-
-@[to_additive]
-theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndicator s f ≤ f :=
- mulIndicator_le' (fun _ _ => le_rfl) hf
-#align set.mul_indicator_le_self' Set.mulIndicator_le_self'
-#align set.indicator_le_self' Set.indicator_le_self'
-
-@[to_additive]
-theorem mulIndicator_iUnion_apply {ι : Sort*} {M : Type*} [CompleteLattice M] [One M]
- (h1 : (⊥ : M) = 1) (s : ι → Set α) (f : α → M) (x : α) :
- mulIndicator (⋃ i, s i) f x = ⨆ i, mulIndicator (s i) f x := by
- by_cases hx : x ∈ ⋃ i, s i
- · rw [mulIndicator_of_mem hx]
- rw [mem_iUnion] at hx
- refine' le_antisymm _ (iSup_le fun i => mulIndicator_le_self' (fun x _ => h1 ▸ bot_le) x)
- rcases hx with ⟨i, hi⟩
- exact le_iSup_of_le i (ge_of_eq <| mulIndicator_of_mem hi _)
- · rw [mulIndicator_of_not_mem hx]
- simp only [mem_iUnion, not_exists] at hx
- simp [hx, ← h1]
-#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_apply
-#align set.indicator_Union_apply Set.indicator_iUnion_apply
-
-@[to_additive] lemma mulIndicator_iInter_apply {ι : Sort*} {M : Type*} [Nonempty ι]
- [CompleteLattice M] [One M] (h1 : (⊥ : M) = 1) (s : ι → Set α) (f : α → M) (x : α) :
- mulIndicator (⋂ i, s i) f x = ⨅ i, mulIndicator (s i) f x := by
- by_cases hx : x ∈ ⋂ i, s i
- · rw [mulIndicator_of_mem hx]
- rw [mem_iInter] at hx
- refine le_antisymm ?_ (by simp only [mulIndicator_of_mem (hx _), ciInf_const, le_refl])
- exact le_iInf (fun j ↦ by simp only [mulIndicator_of_mem (hx j), le_refl])
- · rw [mulIndicator_of_not_mem hx]
- simp only [mem_iInter, not_exists, not_forall] at hx
- rcases hx with ⟨j, hj⟩
- refine le_antisymm (by simp only [← h1, le_iInf_iff, bot_le, forall_const]) ?_
- simpa [mulIndicator_of_not_mem hj] using (iInf_le (fun i ↦ (s i).mulIndicator f) j) x
-
-end Order
-
-section CanonicallyOrderedCommMonoid
-
-variable [CanonicallyOrderedCommMonoid M]
-
-@[to_additive]
-theorem mulIndicator_le_self (s : Set α) (f : α → M) : mulIndicator s f ≤ f :=
- mulIndicator_le_self' fun _ _ => one_le _
-#align set.mul_indicator_le_self Set.mulIndicator_le_self
-#align set.indicator_le_self Set.indicator_le_self
-
-@[to_additive]
-theorem mulIndicator_apply_le {a : α} {s : Set α} {f g : α → M} (hfg : a ∈ s → f a ≤ g a) :
- mulIndicator s f a ≤ g a :=
- mulIndicator_apply_le' hfg fun _ => one_le _
-#align set.mul_indicator_apply_le Set.mulIndicator_apply_le
-#align set.indicator_apply_le Set.indicator_apply_le
-
-@[to_additive]
-theorem mulIndicator_le {s : Set α} {f g : α → M} (hfg : ∀ a ∈ s, f a ≤ g a) :
- mulIndicator s f ≤ g :=
- mulIndicator_le' hfg fun _ _ => one_le _
-#align set.mul_indicator_le Set.mulIndicator_le
-#align set.indicator_le Set.indicator_le
-
-end CanonicallyOrderedCommMonoid
-
-theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
- s.indicator f ≤ { x | 0 ≤ f x }.indicator f := by
- intro x
- classical
- simp_rw [indicator_apply]
- split_ifs with h_1 h_2 h_3
- · exact le_rfl
- · exact (not_le.mp h_2).le
- · exact h_3
- · exact le_rfl
-#align set.indicator_le_indicator_nonneg Set.indicator_le_indicator_nonneg
-
-theorem indicator_nonpos_le_indicator {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
- { x | f x ≤ 0 }.indicator f ≤ s.indicator f :=
- @indicator_le_indicator_nonneg α βᵒᵈ _ _ s f
-#align set.indicator_nonpos_le_indicator Set.indicator_nonpos_le_indicator
-
end Set
@[to_additive]
@@ -662,7 +662,7 @@ theorem _root_.Finset.prod_mulIndicator_eq_prod_filter (s : Finset ι) (f : ι
@[to_additive]
theorem mulIndicator_finset_prod (I : Finset ι) (s : Set α) (f : ι → α → M) :
mulIndicator s (∏ i in I, f i) = ∏ i in I, mulIndicator s (f i) :=
- (mulIndicatorHom M s).map_prod _ _
+ map_prod (mulIndicatorHom M s) _ _
#align set.mul_indicator_finset_prod Set.mulIndicator_finset_prod
#align set.indicator_finset_sum Set.indicator_finset_sum
@@ -355,8 +355,9 @@ variable [MulOneClass M] {s t : Set α} {f g : α → M} {a : α}
@[to_additive]
theorem mulIndicator_union_mul_inter_apply (f : α → M) (s t : Set α) (a : α) :
- mulIndicator (s ∪ t) f a * mulIndicator (s ∩ t) f a = mulIndicator s f a * mulIndicator t f a :=
- by by_cases hs : a ∈ s <;> by_cases ht : a ∈ t <;> simp [*]
+ mulIndicator (s ∪ t) f a * mulIndicator (s ∩ t) f a
+ = mulIndicator s f a * mulIndicator t f a := by
+ by_cases hs : a ∈ s <;> by_cases ht : a ∈ t <;> simp [*]
#align set.mul_indicator_union_mul_inter_apply Set.mulIndicator_union_mul_inter_apply
#align set.indicator_union_add_inter_apply Set.indicator_union_add_inter_apply
Renames:
CanonicallyOrderedMonoid
->
CanonicallyOrderedCommMonoid
CanonicallyOrderedAddMonoid
->
CanonicallyOrderedAddCommMonoid
CanonicallyLinearOrderedMonoid
->
CanonicallyLinearOrderedCommMonoid
CanonicallyLinearOrderedAddMonoid
->
CanonicallyLinearOrderedAddCommMonoid
@@ -893,9 +893,9 @@ theorem mulIndicator_iUnion_apply {ι : Sort*} {M : Type*} [CompleteLattice M] [
end Order
-section CanonicallyOrderedMonoid
+section CanonicallyOrderedCommMonoid
-variable [CanonicallyOrderedMonoid M]
+variable [CanonicallyOrderedCommMonoid M]
@[to_additive]
theorem mulIndicator_le_self (s : Set α) (f : α → M) : mulIndicator s f ≤ f :=
@@ -917,7 +917,7 @@ theorem mulIndicator_le {s : Set α} {f g : α → M} (hfg : ∀ a ∈ s, f a
#align set.mul_indicator_le Set.mulIndicator_le
#align set.indicator_le Set.indicator_le
-end CanonicallyOrderedMonoid
+end CanonicallyOrderedCommMonoid
theorem indicator_le_indicator_nonneg {β} [LinearOrder β] [Zero β] (s : Set α) (f : α → β) :
s.indicator f ≤ { x | 0 ≤ f x }.indicator f := by
@@ -381,6 +381,11 @@ theorem mulIndicator_union_of_disjoint (h : Disjoint s t) (f : α → M) :
#align set.mul_indicator_union_of_disjoint Set.mulIndicator_union_of_disjoint
#align set.indicator_union_of_disjoint Set.indicator_union_of_disjoint
+@[to_additive]
+theorem mulIndicator_symmDiff (s t : Set α) (f : α → M) :
+ mulIndicator (s ∆ t) f = mulIndicator (s \ t) f * mulIndicator (t \ s) f :=
+ mulIndicator_union_of_disjoint (disjoint_sdiff_self_right.mono_left sdiff_le) _
+
@[to_additive]
theorem mulIndicator_mul (s : Set α) (f g : α → M) :
(mulIndicator s fun a => f a * g a) = fun a => mulIndicator s f a * mulIndicator s g a := by
@@ -580,8 +585,19 @@ theorem mulIndicator_diff' (h : s ⊆ t) (f : α → G) :
rw [mulIndicator_diff h, div_eq_mul_inv]
#align set.indicator_diff Set.indicator_diff
+@[to_additive]
+theorem apply_mulIndicator_symmDiff {g : G → β} (hg : ∀ x, g x⁻¹ = g x)
+ (s t : Set α) (f : α → G) (x : α):
+ g (mulIndicator (s ∆ t) f x) = g (mulIndicator s f x / mulIndicator t f x) := by
+ by_cases hs : x ∈ s <;> by_cases ht : x ∈ t <;> simp [mem_symmDiff, *]
+
end Group
+theorem abs_indicator_symmDiff {G : Type*} [LinearOrderedAddCommGroup G]
+ (s t : Set α) (f : α → G) (x : α) :
+ |indicator (s ∆ t) f x| = |indicator s f x - indicator t f x| :=
+ apply_indicator_symmDiff abs_neg s t f x
+
section CommMonoid
variable [CommMonoid M]
Type*
in variable
, explicitly use Sort*
.to_additive
to generate the additive version.Set.mulIndicator_diff'
,
the multiplicative version of Set.indicator_diff
.@@ -10,8 +10,8 @@ import Mathlib.Algebra.Support
/-!
# Indicator function
-- `indicator (s : Set α) (f : α → β) (a : α)` is `f a` if `a ∈ s` and is `0` otherwise.
-- `mulIndicator (s : Set α) (f : α → β) (a : α)` is `f a` if `a ∈ s` and is `1` otherwise.
+- `Set.indicator (s : Set α) (f : α → β) (a : α)` is `f a` if `a ∈ s` and is `0` otherwise.
+- `Set.mulIndicator (s : Set α) (f : α → β) (a : α)` is `f a` if `a ∈ s` and is `1` otherwise.
## Implementation note
@@ -21,10 +21,10 @@ used to indicate membership of an element in a set `s`,
having the value `1` for all elements of `s` and the value `0` otherwise.
But since it is usually used to restrict a function to a certain set `s`,
we let the indicator function take the value `f x` for some function `f`, instead of `1`.
-If the usual indicator function is needed, just set `f` to be the constant function `λx, 1`.
+If the usual indicator function is needed, just set `f` to be the constant function `fun _ ↦ 1`.
The indicator function is implemented non-computably, to avoid having to pass around `Decidable`
-arguments. This is in contrast with the design of `Pi.Single` or `Set.Piecewise`.
+arguments. This is in contrast with the design of `Pi.single` or `Set.piecewise`.
## Tags
indicator, characteristic
@@ -34,7 +34,7 @@ open BigOperators
open Function
-variable {α β ι M N : Type _}
+variable {α β ι M N : Type*}
namespace Set
@@ -42,19 +42,11 @@ section One
variable [One M] [One N] {s t : Set α} {f g : α → M} {a : α}
-/-- `indicator s f a` is `f a` if `a ∈ s`, `0` otherwise. -/
-noncomputable def indicator {M} [Zero M] (s : Set α) (f : α → M) : α → M
- | x =>
- haveI := Classical.decPred (· ∈ s)
- if x ∈ s then f x else 0
-#align set.indicator Set.indicator
-
-/-- `mulIndicator s f a` is `f a` if `a ∈ s`, `1` otherwise. -/
-@[to_additive existing]
-noncomputable def mulIndicator (s : Set α) (f : α → M) : α → M
- | x =>
- haveI := Classical.decPred (· ∈ s)
- if x ∈ s then f x else 1
+/-- `Set.mulIndicator s f a` is `f a` if `a ∈ s`, `1` otherwise. -/
+@[to_additive "`Set.indicator s f a` is `f a` if `a ∈ s`, `0` otherwise."]
+noncomputable def mulIndicator (s : Set α) (f : α → M) (x : α) : M :=
+ haveI := Classical.decPred (· ∈ s)
+ if x ∈ s then f x else 1
#align set.mul_indicator Set.mulIndicator
@[to_additive (attr := simp)]
@@ -67,21 +59,19 @@ theorem piecewise_eq_mulIndicator [DecidablePred (· ∈ s)] : s.piecewise f 1 =
@[to_additive]
theorem mulIndicator_apply (s : Set α) (f : α → M) (a : α) [Decidable (a ∈ s)] :
mulIndicator s f a = if a ∈ s then f a else 1 := by
- unfold mulIndicator
- split_ifs with h <;> simp
+ unfold mulIndicator
+ congr
#align set.mul_indicator_apply Set.mulIndicator_apply
#align set.indicator_apply Set.indicator_apply
@[to_additive (attr := simp)]
theorem mulIndicator_of_mem (h : a ∈ s) (f : α → M) : mulIndicator s f a = f a :=
- letI := Classical.dec (a ∈ s)
if_pos h
#align set.mul_indicator_of_mem Set.mulIndicator_of_mem
#align set.indicator_of_mem Set.indicator_of_mem
@[to_additive (attr := simp)]
theorem mulIndicator_of_not_mem (h : a ∉ s) (f : α → M) : mulIndicator s f a = 1 :=
- letI := Classical.dec (a ∈ s)
if_neg h
#align set.mul_indicator_of_not_mem Set.mulIndicator_of_not_mem
#align set.indicator_of_not_mem Set.indicator_of_not_mem
@@ -233,8 +223,7 @@ theorem mulIndicator_mulIndicator (s t : Set α) (f : α → M) :
mulIndicator s (mulIndicator t f) = mulIndicator (s ∩ t) f :=
funext fun x => by
simp only [mulIndicator]
- split_ifs
- repeat' simp_all (config := { contextual := true })
+ split_ifs <;> simp_all (config := { contextual := true })
#align set.mul_indicator_mul_indicator Set.mulIndicator_mulIndicator
#align set.indicator_indicator Set.indicator_indicator
@@ -570,8 +559,9 @@ theorem mulIndicator_compl (s : Set α) (f : α → G) :
#align set.mul_indicator_compl Set.mulIndicator_compl
#align set.indicator_compl' Set.indicator_compl'
-theorem indicator_compl {G} [AddGroup G] (s : Set α) (f : α → G) :
- indicator sᶜ f = f - indicator s f := by rw [sub_eq_add_neg, indicator_compl']
+@[to_additive indicator_compl]
+theorem mulIndicator_compl' (s : Set α) (f : α → G) :
+ mulIndicator sᶜ f = f / mulIndicator s f := by rw [div_eq_mul_inv, mulIndicator_compl]
#align set.indicator_compl Set.indicator_compl
@[to_additive indicator_diff']
@@ -584,8 +574,10 @@ theorem mulIndicator_diff (h : s ⊆ t) (f : α → G) :
#align set.mul_indicator_diff Set.mulIndicator_diff
#align set.indicator_diff' Set.indicator_diff'
-theorem indicator_diff {G : Type*} [AddGroup G] {s t : Set α} (h : s ⊆ t) (f : α → G) :
- indicator (t \ s) f = indicator t f - indicator s f := by rw [indicator_diff' h, sub_eq_add_neg]
+@[to_additive indicator_diff]
+theorem mulIndicator_diff' (h : s ⊆ t) (f : α → G) :
+ mulIndicator (t \ s) f = mulIndicator t f / mulIndicator s f := by
+ rw [mulIndicator_diff h, div_eq_mul_inv]
#align set.indicator_diff Set.indicator_diff
end Group
@@ -658,7 +650,7 @@ theorem mulIndicator_finset_prod (I : Finset ι) (s : Set α) (f : ι → α →
#align set.indicator_finset_sum Set.indicator_finset_sum
@[to_additive]
-theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
+theorem mulIndicator_finset_biUnion (I : Finset ι) (s : ι → Set α) {f : α → M} :
(∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) →
mulIndicator (⋃ i ∈ I, s i) f = fun a => ∏ i in I, mulIndicator (s i) f a := by
classical
@@ -681,7 +673,7 @@ theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f
#align set.indicator_finset_bUnion Set.indicator_finset_biUnion
@[to_additive]
-theorem mulIndicator_finset_biUnion_apply {ι} (I : Finset ι) (s : ι → Set α) {f : α → M}
+theorem mulIndicator_finset_biUnion_apply (I : Finset ι) (s : ι → Set α) {f : α → M}
(h : ∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) (x : α) :
mulIndicator (⋃ i ∈ I, s i) f x = ∏ i in I, mulIndicator (s i) f x := by
rw [Set.mulIndicator_finset_biUnion I s h]
@@ -854,8 +846,8 @@ theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndic
#align set.indicator_le_self' Set.indicator_le_self'
@[to_additive]
-theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥ : M) = 1)
- (s : ι → Set α) (f : α → M) (x : α) :
+theorem mulIndicator_iUnion_apply {ι : Sort*} {M : Type*} [CompleteLattice M] [One M]
+ (h1 : (⊥ : M) = 1) (s : ι → Set α) (f : α → M) (x : α) :
mulIndicator (⋃ i, s i) f x = ⨆ i, mulIndicator (s i) f x := by
by_cases hx : x ∈ ⋃ i, s i
· rw [mulIndicator_of_mem hx]
@@ -869,8 +861,8 @@ theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥
#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_apply
#align set.indicator_Union_apply Set.indicator_iUnion_apply
-@[to_additive] lemma mulIndicator_iInter_apply {ι M} [Nonempty ι] [CompleteLattice M] [One M]
- (h1 : (⊥ : M) = 1) (s : ι → Set α) (f : α → M) (x : α) :
+@[to_additive] lemma mulIndicator_iInter_apply {ι : Sort*} {M : Type*} [Nonempty ι]
+ [CompleteLattice M] [One M] (h1 : (⊥ : M) = 1) (s : ι → Set α) (f : α → M) (x : α) :
mulIndicator (⋂ i, s i) f x = ⨅ i, mulIndicator (s i) f x := by
by_cases hx : x ∈ ⋂ i, s i
· rw [mulIndicator_of_mem hx]
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -177,7 +177,7 @@ theorem mulIndicator_mulSupport : mulIndicator (mulSupport f) f = f :=
#align set.indicator_support Set.indicator_support
@[to_additive (attr := simp)]
-theorem mulIndicator_range_comp {ι : Sort _} (f : ι → α) (g : α → M) :
+theorem mulIndicator_range_comp {ι : Sort*} (f : ι → α) (g : α → M) :
mulIndicator (range f) g ∘ f = g ∘ f :=
letI := Classical.decPred (· ∈ range f)
piecewise_range_comp _ _ _
@@ -482,7 +482,7 @@ end Monoid
section DistribMulAction
-variable {A : Type _} [AddMonoid A] [Monoid M] [DistribMulAction M A]
+variable {A : Type*} [AddMonoid A] [Monoid M] [DistribMulAction M A]
theorem indicator_smul_apply (s : Set α) (r : α → M) (f : α → A) (x : α) :
indicator s (fun x => r x • f x) x = r x • indicator s f x := by
@@ -510,7 +510,7 @@ end DistribMulAction
section SMulWithZero
-variable {A : Type _} [Zero A] [Zero M] [SMulWithZero M A]
+variable {A : Type*} [Zero A] [Zero M] [SMulWithZero M A]
theorem indicator_smul_apply_left (s : Set α) (r : α → M) (f : α → A) (x : α) :
indicator s (fun x => r x • f x) x = indicator s r x • f x := by
@@ -534,7 +534,7 @@ end SMulWithZero
section Group
-variable {G : Type _} [Group G] {s t : Set α} {f g : α → G} {a : α}
+variable {G : Type*} [Group G] {s t : Set α} {f g : α → G} {a : α}
@[to_additive]
theorem mulIndicator_inv' (s : Set α) (f : α → G) : mulIndicator s f⁻¹ = (mulIndicator s f)⁻¹ :=
@@ -584,7 +584,7 @@ theorem mulIndicator_diff (h : s ⊆ t) (f : α → G) :
#align set.mul_indicator_diff Set.mulIndicator_diff
#align set.indicator_diff' Set.indicator_diff'
-theorem indicator_diff {G : Type _} [AddGroup G] {s t : Set α} (h : s ⊆ t) (f : α → G) :
+theorem indicator_diff {G : Type*} [AddGroup G] {s t : Set α} (h : s ⊆ t) (f : α → G) :
indicator (t \ s) f = indicator t f - indicator s f := by rw [indicator_diff' h, sub_eq_add_neg]
#align set.indicator_diff Set.indicator_diff
@@ -931,7 +931,7 @@ theorem indicator_nonpos_le_indicator {β} [LinearOrder β] [Zero β] (s : Set
end Set
@[to_additive]
-theorem MonoidHom.map_mulIndicator {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M →* N)
+theorem MonoidHom.map_mulIndicator {M N : Type*} [MulOneClass M] [MulOneClass N] (f : M →* N)
(s : Set α) (g : α → M) (x : α) : f (s.mulIndicator g x) = s.mulIndicator (f ∘ g) x := by
simp [Set.mulIndicator_comp_of_one]
#align monoid_hom.map_mul_indicator MonoidHom.map_mulIndicator
Add lemma mulIndicator_iInter_apply
and its additive version indicator_iInter_apply
. These are entirely parallel to the existing mulIndicator_iUnion_apply
and its additive version indicator_iUnion_apply
.
@@ -869,6 +869,20 @@ theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥
#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_apply
#align set.indicator_Union_apply Set.indicator_iUnion_apply
+@[to_additive] lemma mulIndicator_iInter_apply {ι M} [Nonempty ι] [CompleteLattice M] [One M]
+ (h1 : (⊥ : M) = 1) (s : ι → Set α) (f : α → M) (x : α) :
+ mulIndicator (⋂ i, s i) f x = ⨅ i, mulIndicator (s i) f x := by
+ by_cases hx : x ∈ ⋂ i, s i
+ · rw [mulIndicator_of_mem hx]
+ rw [mem_iInter] at hx
+ refine le_antisymm ?_ (by simp only [mulIndicator_of_mem (hx _), ciInf_const, le_refl])
+ exact le_iInf (fun j ↦ by simp only [mulIndicator_of_mem (hx j), le_refl])
+ · rw [mulIndicator_of_not_mem hx]
+ simp only [mem_iInter, not_exists, not_forall] at hx
+ rcases hx with ⟨j, hj⟩
+ refine le_antisymm (by simp only [← h1, le_iInf_iff, bot_le, forall_const]) ?_
+ simpa [mulIndicator_of_not_mem hj] using (iInf_le (fun i ↦ (s i).mulIndicator f) j) x
+
end Order
section CanonicallyOrderedMonoid
@@ -2,14 +2,11 @@
Copyright (c) 2020 Zhouhang Zhou. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Zhouhang Zhou
-
-! This file was ported from Lean 3 source module algebra.indicator_function
-! leanprover-community/mathlib commit 2445c98ae4b87eabebdde552593519b9b6dc350c
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.Support
+#align_import algebra.indicator_function from "leanprover-community/mathlib"@"2445c98ae4b87eabebdde552593519b9b6dc350c"
+
/-!
# Indicator function
@@ -511,6 +511,30 @@ theorem indicator_const_smul (s : Set α) (r : M) (f : α → A) :
end DistribMulAction
+section SMulWithZero
+
+variable {A : Type _} [Zero A] [Zero M] [SMulWithZero M A]
+
+theorem indicator_smul_apply_left (s : Set α) (r : α → M) (f : α → A) (x : α) :
+ indicator s (fun x => r x • f x) x = indicator s r x • f x := by
+ dsimp only [indicator]
+ split_ifs
+ exacts [rfl, (zero_smul _ (f x)).symm]
+
+theorem indicator_smul_left (s : Set α) (r : α → M) (f : α → A) :
+ (indicator s fun x : α => r x • f x) = fun x : α => indicator s r x • f x :=
+ funext <| indicator_smul_apply_left s r f
+
+theorem indicator_smul_const_apply (s : Set α) (r : α → M) (a : A) (x : α) :
+ indicator s (fun x => r x • a) x = indicator s r x • a :=
+ indicator_smul_apply_left s r (fun _ => a) x
+
+theorem indicator_smul_const (s : Set α) (r : α → M) (a : A) :
+ (indicator s fun x : α => r x • a) = fun x : α => indicator s r x • a :=
+ funext <| indicator_smul_const_apply s r a
+
+end SMulWithZero
+
section Group
variable {G : Type _} [Group G] {s t : Set α} {f g : α → G} {a : α}
This PR is the result of running
find . -type f -name "*.lean" -exec sed -i -E 's/^( +)\. /\1· /' {} \;
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^( +·)\n +(.*)$/\1 \2/;P;D' {} \;
which firstly replaces .
focusing dots with ·
and secondly removes isolated instances of such dots, unifying them with the following line. A new rule is placed in the style linter to verify this.
@@ -464,11 +464,9 @@ theorem mulIndicator_mul_compl_eq_piecewise [DecidablePred (· ∈ s)] (f g : α
s.mulIndicator f * sᶜ.mulIndicator g = s.piecewise f g := by
ext x
by_cases h : x ∈ s
- ·
- rw [piecewise_eq_of_mem _ _ _ h, Pi.mul_apply, Set.mulIndicator_of_mem h,
+ · rw [piecewise_eq_of_mem _ _ _ h, Pi.mul_apply, Set.mulIndicator_of_mem h,
Set.mulIndicator_of_not_mem (Set.not_mem_compl_iff.2 h), mul_one]
- ·
- rw [piecewise_eq_of_not_mem _ _ _ h, Pi.mul_apply, Set.mulIndicator_of_not_mem h,
+ · rw [piecewise_eq_of_not_mem _ _ _ h, Pi.mul_apply, Set.mulIndicator_of_not_mem h,
Set.mulIndicator_of_mem (Set.mem_compl h), one_mul]
#align set.mul_indicator_mul_compl_eq_piecewise Set.mulIndicator_mul_compl_eq_piecewise
#align set.indicator_add_compl_eq_piecewise Set.indicator_add_compl_eq_piecewise
∑'
precedence (#5615)
∑
, ∏
and variants).([^a-zA-Zα-ωΑ-Ω'𝓝ℳ₀𝕂ₛ)]) \(([∑∏][^()∑∏]*,[^()∑∏:]*)\) ([⊂⊆=<≤])
replaced by $1 $2 $3
@@ -613,7 +613,7 @@ taking the original function over the original `Finset`. -/
"Summing an indicator function over a possibly larger `Finset` is the same as summing
the original function over the original `finset`."]
theorem prod_mulIndicator_subset (f : α → M) {s t : Finset α} (h : s ⊆ t) :
- (∏ i in s, f i) = ∏ i in t, mulIndicator (↑s) f i :=
+ ∏ i in s, f i = ∏ i in t, mulIndicator (↑s) f i :=
prod_mulIndicator_subset_of_eq_one _ (fun _ b => b) h fun _ => rfl
#align set.prod_mul_indicator_subset Set.prod_mulIndicator_subset
#align set.sum_indicator_subset Set.sum_indicator_subset
@@ -415,28 +415,28 @@ theorem mulIndicator_mul' (s : Set α) (f g : α → M) :
@[to_additive (attr := simp)]
theorem mulIndicator_compl_mul_self_apply (s : Set α) (f : α → M) (a : α) :
- mulIndicator (sᶜ) f a * mulIndicator s f a = f a :=
+ mulIndicator sᶜ f a * mulIndicator s f a = f a :=
by_cases (fun ha : a ∈ s => by simp [ha]) fun ha => by simp [ha]
#align set.mul_indicator_compl_mul_self_apply Set.mulIndicator_compl_mul_self_apply
#align set.indicator_compl_add_self_apply Set.indicator_compl_add_self_apply
@[to_additive (attr := simp)]
theorem mulIndicator_compl_mul_self (s : Set α) (f : α → M) :
- mulIndicator (sᶜ) f * mulIndicator s f = f :=
+ mulIndicator sᶜ f * mulIndicator s f = f :=
funext <| mulIndicator_compl_mul_self_apply s f
#align set.mul_indicator_compl_mul_self Set.mulIndicator_compl_mul_self
#align set.indicator_compl_add_self Set.indicator_compl_add_self
@[to_additive (attr := simp)]
theorem mulIndicator_self_mul_compl_apply (s : Set α) (f : α → M) (a : α) :
- mulIndicator s f a * mulIndicator (sᶜ) f a = f a :=
+ mulIndicator s f a * mulIndicator sᶜ f a = f a :=
by_cases (fun ha : a ∈ s => by simp [ha]) fun ha => by simp [ha]
#align set.mul_indicator_self_mul_compl_apply Set.mulIndicator_self_mul_compl_apply
#align set.indicator_self_add_compl_apply Set.indicator_self_add_compl_apply
@[to_additive (attr := simp)]
theorem mulIndicator_self_mul_compl (s : Set α) (f : α → M) :
- mulIndicator s f * mulIndicator (sᶜ) f = f :=
+ mulIndicator s f * mulIndicator sᶜ f = f :=
funext <| mulIndicator_self_mul_compl_apply s f
#align set.mul_indicator_self_mul_compl Set.mulIndicator_self_mul_compl
#align set.indicator_self_add_compl Set.indicator_self_add_compl
@@ -546,13 +546,13 @@ theorem mulIndicator_div' (s : Set α) (f g : α → G) :
@[to_additive indicator_compl']
theorem mulIndicator_compl (s : Set α) (f : α → G) :
- mulIndicator (sᶜ) f = f * (mulIndicator s f)⁻¹ :=
+ mulIndicator sᶜ f = f * (mulIndicator s f)⁻¹ :=
eq_mul_inv_of_mul_eq <| s.mulIndicator_compl_mul_self f
#align set.mul_indicator_compl Set.mulIndicator_compl
#align set.indicator_compl' Set.indicator_compl'
theorem indicator_compl {G} [AddGroup G] (s : Set α) (f : α → G) :
- indicator (sᶜ) f = f - indicator s f := by rw [sub_eq_add_neg, indicator_compl']
+ indicator sᶜ f = f - indicator s f := by rw [sub_eq_add_neg, indicator_compl']
#align set.indicator_compl Set.indicator_compl
@[to_additive indicator_diff']
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -114,7 +114,7 @@ theorem mulIndicator_eq_self : s.mulIndicator f = f ↔ mulSupport f ⊆ s := by
@[to_additive]
theorem mulIndicator_eq_self_of_superset (h1 : s.mulIndicator f = f) (h2 : s ⊆ t) :
t.mulIndicator f = f := by
- rw [mulIndicator_eq_self] at h1⊢
+ rw [mulIndicator_eq_self] at h1 ⊢
exact Subset.trans h1 h2
#align set.mul_indicator_eq_self_of_superset Set.mulIndicator_eq_self_of_superset
#align set.indicator_eq_self_of_superset Set.indicator_eq_self_of_superset
@@ -357,7 +357,7 @@ theorem mulIndicator_rel_mulIndicator {r : M → M → Prop} (h1 : r 1 1) (ha :
r (mulIndicator s f a) (mulIndicator s g a) := by
simp only [mulIndicator]
split_ifs with has
- exacts[ha has, h1]
+ exacts [ha has, h1]
#align set.mul_indicator_rel_mul_indicator Set.mulIndicator_rel_mulIndicator
#align set.indicator_rel_indicator Set.indicator_rel_indicator
@@ -493,7 +493,7 @@ theorem indicator_smul_apply (s : Set α) (r : α → M) (f : α → A) (x : α)
indicator s (fun x => r x • f x) x = r x • indicator s f x := by
dsimp only [indicator]
split_ifs
- exacts[rfl, (smul_zero (r x)).symm]
+ exacts [rfl, (smul_zero (r x)).symm]
#align set.indicator_smul_apply Set.indicator_smul_apply
theorem indicator_smul (s : Set α) (r : α → M) (f : α → A) :
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -639,7 +639,7 @@ theorem mulIndicator_finset_prod (I : Finset ι) (s : Set α) (f : ι → α →
#align set.indicator_finset_sum Set.indicator_finset_sum
@[to_additive]
-theorem mulIndicator_finset_bunionᵢ {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
+theorem mulIndicator_finset_biUnion {ι} (I : Finset ι) (s : ι → Set α) {f : α → M} :
(∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) →
mulIndicator (⋃ i ∈ I, s i) f = fun a => ∏ i in I, mulIndicator (s i) f a := by
classical
@@ -649,25 +649,25 @@ theorem mulIndicator_finset_bunionᵢ {ι} (I : Finset ι) (s : ι → Set α) {
simp
intro a I haI ih hI
funext
- rw [Finset.prod_insert haI, Finset.set_bunionᵢ_insert, mulIndicator_union_of_not_mem_inter,
+ rw [Finset.prod_insert haI, Finset.set_biUnion_insert, mulIndicator_union_of_not_mem_inter,
ih _]
· intro i hi j hj hij
exact hI i (Finset.mem_insert_of_mem hi) j (Finset.mem_insert_of_mem hj) hij
- simp only [not_exists, exists_prop, mem_unionᵢ, mem_inter_iff, not_and]
+ simp only [not_exists, exists_prop, mem_iUnion, mem_inter_iff, not_and]
intro hx a' ha'
refine'
disjoint_left.1 (hI a (Finset.mem_insert_self _ _) a' (Finset.mem_insert_of_mem ha') _) hx
exact (ne_of_mem_of_not_mem ha' haI).symm
-#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_bunionᵢ
-#align set.indicator_finset_bUnion Set.indicator_finset_bunionᵢ
+#align set.mul_indicator_finset_bUnion Set.mulIndicator_finset_biUnion
+#align set.indicator_finset_bUnion Set.indicator_finset_biUnion
@[to_additive]
-theorem mulIndicator_finset_bunionᵢ_apply {ι} (I : Finset ι) (s : ι → Set α) {f : α → M}
+theorem mulIndicator_finset_biUnion_apply {ι} (I : Finset ι) (s : ι → Set α) {f : α → M}
(h : ∀ i ∈ I, ∀ j ∈ I, i ≠ j → Disjoint (s i) (s j)) (x : α) :
mulIndicator (⋃ i ∈ I, s i) f x = ∏ i in I, mulIndicator (s i) f x := by
- rw [Set.mulIndicator_finset_bunionᵢ I s h]
-#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_bunionᵢ_apply
-#align set.indicator_finset_bUnion_apply Set.indicator_finset_bunionᵢ_apply
+ rw [Set.mulIndicator_finset_biUnion I s h]
+#align set.mul_indicator_finset_bUnion_apply Set.mulIndicator_finset_biUnion_apply
+#align set.indicator_finset_bUnion_apply Set.indicator_finset_biUnion_apply
end CommMonoid
@@ -835,20 +835,20 @@ theorem mulIndicator_le_self' (hf : ∀ (x) (_ : x ∉ s), 1 ≤ f x) : mulIndic
#align set.indicator_le_self' Set.indicator_le_self'
@[to_additive]
-theorem mulIndicator_unionᵢ_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥ : M) = 1)
+theorem mulIndicator_iUnion_apply {ι M} [CompleteLattice M] [One M] (h1 : (⊥ : M) = 1)
(s : ι → Set α) (f : α → M) (x : α) :
mulIndicator (⋃ i, s i) f x = ⨆ i, mulIndicator (s i) f x := by
by_cases hx : x ∈ ⋃ i, s i
· rw [mulIndicator_of_mem hx]
- rw [mem_unionᵢ] at hx
- refine' le_antisymm _ (supᵢ_le fun i => mulIndicator_le_self' (fun x _ => h1 ▸ bot_le) x)
+ rw [mem_iUnion] at hx
+ refine' le_antisymm _ (iSup_le fun i => mulIndicator_le_self' (fun x _ => h1 ▸ bot_le) x)
rcases hx with ⟨i, hi⟩
- exact le_supᵢ_of_le i (ge_of_eq <| mulIndicator_of_mem hi _)
+ exact le_iSup_of_le i (ge_of_eq <| mulIndicator_of_mem hi _)
· rw [mulIndicator_of_not_mem hx]
- simp only [mem_unionᵢ, not_exists] at hx
+ simp only [mem_iUnion, not_exists] at hx
simp [hx, ← h1]
-#align set.mul_indicator_Union_apply Set.mulIndicator_unionᵢ_apply
-#align set.indicator_Union_apply Set.indicator_unionᵢ_apply
+#align set.mul_indicator_Union_apply Set.mulIndicator_iUnion_apply
+#align set.indicator_Union_apply Set.indicator_iUnion_apply
end Order
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -306,9 +306,8 @@ theorem mulIndicator_one_preimage (s : Set M) :
@[to_additive]
theorem mulIndicator_const_preimage_eq_union (U : Set α) (s : Set M) (a : M) [Decidable (a ∈ s)]
- [Decidable ((1 : M) ∈ s)] :
- (U.mulIndicator fun _ => a) ⁻¹' s = (if a ∈ s then U else ∅) ∪ if (1 : M) ∈ s then Uᶜ else ∅ :=
- by
+ [Decidable ((1 : M) ∈ s)] : (U.mulIndicator fun _ => a) ⁻¹' s =
+ (if a ∈ s then U else ∅) ∪ if (1 : M) ∈ s then Uᶜ else ∅ := by
rw [mulIndicator_preimage, preimage_one, preimage_const]
split_ifs <;> simp [← compl_eq_univ_diff]
#align set.mul_indicator_const_preimage_eq_union Set.mulIndicator_const_preimage_eq_union
@@ -559,8 +558,7 @@ theorem indicator_compl {G} [AddGroup G] (s : Set α) (f : α → G) :
@[to_additive indicator_diff']
theorem mulIndicator_diff (h : s ⊆ t) (f : α → G) :
mulIndicator (t \ s) f = mulIndicator t f * (mulIndicator s f)⁻¹ :=
- eq_mul_inv_of_mul_eq <|
- by
+ eq_mul_inv_of_mul_eq <| by
rw [Pi.mul_def, ← mulIndicator_union_of_disjoint, diff_union_self,
union_eq_self_of_subset_right h]
exact disjoint_sdiff_self_left
congr!
and improvement to convert
(#2566)
This introduces a tactic congr!
that is an analogue to mathlib 3's congr'
. It is a more insistent version of congr
that makes use of more congruence lemmas (including user congruence lemmas), propext
, funext
, and Subsingleton
instances. It also has a feature to lift reflexive relations to equalities. Along with funext
, the tactic does intros
, allowing congr!
to get access to function bodies; the introduced variables can be named using rename_i
if needed.
This also modifies convert
to use congr!
rather than congr
, which makes it work more like the mathlib3 version of the tactic.
@@ -252,7 +252,7 @@ theorem mulIndicator_inter_mulSupport (s : Set α) (f : α → M) :
theorem comp_mulIndicator (h : M → β) (f : α → M) {s : Set α} {x : α} [DecidablePred (· ∈ s)] :
h (s.mulIndicator f x) = s.piecewise (h ∘ f) (const α (h 1)) x := by
letI := Classical.decPred (· ∈ s)
- convert s.apply_piecewise f (const α 1) (fun _ => h) (x := x)
+ convert s.apply_piecewise f (const α 1) (fun _ => h) (x := x) using 2
#align set.comp_mul_indicator Set.comp_mulIndicator
#align set.comp_indicator Set.comp_indicator
@@ -819,8 +819,7 @@ theorem mulIndicator_le_mulIndicator (h : f a ≤ g a) : mulIndicator s f a ≤
#align set.mul_indicator_le_mul_indicator Set.mulIndicator_le_mulIndicator
#align set.indicator_le_indicator Set.indicator_le_indicator
--- Porting note: Unknown attribute mono
---attribute [mono] mulIndicator_le_mulIndicator indicator_le_indicator
+attribute [mono] mulIndicator_le_mulIndicator indicator_le_indicator
@[to_additive]
theorem mulIndicator_le_mulIndicator_of_subset (h : s ⊆ t) (hf : ∀ a, 1 ≤ f a) (a : α) :
@@ -53,7 +53,7 @@ noncomputable def indicator {M} [Zero M] (s : Set α) (f : α → M) : α → M
#align set.indicator Set.indicator
/-- `mulIndicator s f a` is `f a` if `a ∈ s`, `1` otherwise. -/
-@[to_additive]
+@[to_additive existing]
noncomputable def mulIndicator (s : Set α) (f : α → M) : α → M
| x =>
haveI := Classical.decPred (· ∈ s)
@@ -33,8 +33,7 @@ arguments. This is in contrast with the design of `Pi.Single` or `Set.Piecewise`
indicator, characteristic
-/
--- Porting note: unknown namespace BigOperators
--- open BigOperators
+open BigOperators
open Function
Implements a linter for lean 3 declarations containing capital letters (as suggested on Zulip).
Co-authored-by: Mario Carneiro <di.gama@gmail.com>
@@ -472,7 +472,7 @@ theorem mulIndicator_mul_compl_eq_piecewise [DecidablePred (· ∈ s)] (f g : α
·
rw [piecewise_eq_of_not_mem _ _ _ h, Pi.mul_apply, Set.mulIndicator_of_not_mem h,
Set.mulIndicator_of_mem (Set.mem_compl h), one_mul]
-#align set.mulIndicator_mul_compl_eq_piecewise Set.mulIndicator_mul_compl_eq_piecewise
+#align set.mul_indicator_mul_compl_eq_piecewise Set.mulIndicator_mul_compl_eq_piecewise
#align set.indicator_add_compl_eq_piecewise Set.indicator_add_compl_eq_piecewise
/-- `Set.mulIndicator` as a `monoidHom`. -/
Some mathport warning to pay attention to, and some proofs required some work explicitly using split_ifs
which was not necessary in lean3, but otherwise straightforward.
Co-authored-by: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com> Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com>
The unported dependencies are