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

Commit a10cb2f

Browse files
feat(algebra/big_operators/associated): dvd_prod_iff for finset and finsupp (#10675)
Adding the counterparts of `dvd_prod_iff` (in #10624) for `finset` and `finsupp`.
1 parent a813cf5 commit a10cb2f

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

src/algebra/big_operators/associated.lean

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ Authors: Johannes Hölzl, Jens Wagemaker, Anne Baanen
66

77
import algebra.associated
88
import algebra.big_operators.basic
9+
import data.finsupp.basic
910

1011
/-!
1112
# Products of associated, prime, and irreducible elements.
1213
1314
This file contains some theorems relating definitions in `algebra.associated`
14-
and products of multisets and finsets.
15+
and products of multisets, finsets, and finsupps.
1516
1617
-/
1718

@@ -120,8 +121,22 @@ multiset.prod_ne_zero (λ h0, prime.ne_zero (h 0 h0) rfl)
120121

121122
end multiset
122123

124+
open finset finsupp
125+
126+
section comm_monoid_with_zero
127+
128+
variables {M : Type*} [comm_monoid_with_zero M]
129+
130+
lemma prime.dvd_finset_prod_iff {S : finset α} {p : M} (pp : prime p) (g : α → M) :
131+
p ∣ S.prod g ↔ ∃ a ∈ S, p ∣ g a :=
132+
⟨pp.exists_mem_finset_dvd, λ ⟨a, ha1, ha2⟩, dvd_trans ha2 (dvd_prod_of_mem g ha1)⟩
133+
134+
lemma prime.dvd_finsupp_prod_iff {f: α →₀ M} {g : α → M → ℕ} {p : ℕ} (pp : prime p) :
135+
p ∣ f.prod g ↔ ∃ a ∈ f.support, p ∣ g a (f a) :=
136+
prime.dvd_finset_prod_iff pp _
137+
123138
/-- Prime `p` divides the product of a list `L` iff it divides some `a ∈ L` -/
124-
lemma prime.dvd_prod_iff {M : Type*} [comm_monoid_with_zero M] {p : M} {L : list M} (pp : prime p) :
139+
lemma prime.dvd_prod_iff {p : M} {L : list M} (pp : prime p) :
125140
p ∣ L.prod ↔ ∃ a ∈ L, p ∣ a :=
126141
begin
127142
split,
@@ -133,3 +148,14 @@ begin
133148
{ rcases L_ih h_1 with ⟨x, hx1, hx2⟩, use x, simp [list.mem_cons_iff, hx1, hx2] } } },
134149
{ exact λ ⟨a, ha1, ha2⟩, dvd_trans ha2 (list.dvd_prod ha1) },
135150
end
151+
152+
end comm_monoid_with_zero
153+
154+
lemma nat.prime.dvd_finset_prod_iff {α : Type*} {S : finset α} {p : ℕ}
155+
(pp : prime p) (g : α → ℕ) : p ∣ S.prod g ↔ ∃ a ∈ S, p ∣ g a :=
156+
by apply prime.dvd_finset_prod_iff pp
157+
158+
lemma nat.prime.dvd_finsupp_prod_iff {α M : Type*} [has_zero M] {f: α →₀ M}
159+
{g : α → M → ℕ} {p : ℕ} (pp : prime p) :
160+
p ∣ f.prod g ↔ ∃ a ∈ f.support, p ∣ g a (f a) :=
161+
nat.prime.dvd_finset_prod_iff pp _

0 commit comments

Comments
 (0)