Skip to content

Commit 202f489

Browse files
committed
feat(Algebra/BigOperators): product of MulHom over nonempty multisets (#16602)
Co-authored-by: Bhavik Mehta <bm489@cam.ac.uk>
1 parent d46e364 commit 202f489

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

Mathlib/Algebra/BigOperators/Group/Multiset.lean

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ lemma prod_eq_one (h : ∀ x ∈ s, x = (1 : α)) : s.prod = 1 := by
122122
theorem pow_count [DecidableEq α] (a : α) : a ^ s.count a = (s.filter (Eq a)).prod := by
123123
rw [filter_eq, prod_replicate]
124124

125+
@[to_additive]
126+
theorem prod_hom_ne_zero {s : Multiset α} (hs : s ≠ 0) {F : Type*} [FunLike F α β]
127+
[MulHomClass F α β] (f : F) :
128+
(s.map f).prod = f s.prod := by
129+
induction s using Quot.inductionOn; aesop (add simp List.prod_hom_nonempty)
130+
125131
@[to_additive]
126132
theorem prod_hom (s : Multiset α) {F : Type*} [FunLike F α β]
127133
[MonoidHomClass F α β] (f : F) :
@@ -135,6 +141,12 @@ theorem prod_hom' (s : Multiset ι) {F : Type*} [FunLike F α β]
135141
convert (s.map g).prod_hom f
136142
exact (map_map _ _ _).symm
137143

144+
@[to_additive]
145+
theorem prod_hom₂_ne_zero [CommMonoid γ] {s : Multiset ι} (hs : s ≠ 0) (f : α → β → γ)
146+
(hf : ∀ a b c d, f (a * b) (c * d) = f a c * f b d) (f₁ : ι → α) (f₂ : ι → β) :
147+
(s.map fun i => f (f₁ i) (f₂ i)).prod = f (s.map f₁).prod (s.map f₂).prod := by
148+
induction s using Quotient.inductionOn; aesop (add simp List.prod_hom₂_nonempty)
149+
138150
@[to_additive]
139151
theorem prod_hom₂ [CommMonoid γ] (s : Multiset ι) (f : α → β → γ)
140152
(hf : ∀ a b c d, f (a * b) (c * d) = f a c * f b d) (hf' : f 1 1 = 1) (f₁ : ι → α)
@@ -194,10 +206,19 @@ theorem prod_dvd_prod_of_le (h : s ≤ t) : s.prod ∣ t.prod := by
194206
lemma _root_.map_multiset_prod [FunLike F α β] [MonoidHomClass F α β] (f : F) (s : Multiset α) :
195207
f s.prod = (s.map f).prod := (s.prod_hom f).symm
196208

209+
@[to_additive]
210+
lemma _root_.map_multiset_ne_zero_prod [FunLike F α β] [MulHomClass F α β] (f : F)
211+
{s : Multiset α} (hs : s ≠ 0):
212+
f s.prod = (s.map f).prod := (s.prod_hom_ne_zero hs f).symm
213+
197214
@[to_additive]
198215
protected lemma _root_.MonoidHom.map_multiset_prod (f : α →* β) (s : Multiset α) :
199216
f s.prod = (s.map f).prod := (s.prod_hom f).symm
200217

218+
@[to_additive]
219+
protected lemma _root_.MulHom.map_multiset_ne_zero_prod (f : α →ₙ* β) (s : Multiset α)
220+
(hs : s ≠ 0) : f s.prod = (s.map f).prod := (s.prod_hom_ne_zero hs f).symm
221+
201222
lemma dvd_prod : a ∈ s → a ∣ s.prod :=
202223
Quotient.inductionOn s (fun l a h ↦ by simpa using List.dvd_prod h) a
203224

0 commit comments

Comments
 (0)