@@ -6,12 +6,13 @@ Authors: Johannes Hölzl, Jens Wagemaker, Anne Baanen
6
6
7
7
import algebra.associated
8
8
import algebra.big_operators.basic
9
+ import data.finsupp.basic
9
10
10
11
/-!
11
12
# Products of associated, prime, and irreducible elements.
12
13
13
14
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 .
15
16
16
17
-/
17
18
@@ -120,8 +121,22 @@ multiset.prod_ne_zero (λ h0, prime.ne_zero (h 0 h0) rfl)
120
121
121
122
end multiset
122
123
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
+
123
138
/-- 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) :
125
140
p ∣ L.prod ↔ ∃ a ∈ L, p ∣ a :=
126
141
begin
127
142
split,
@@ -133,3 +148,14 @@ begin
133
148
{ rcases L_ih h_1 with ⟨x, hx1, hx2⟩, use x, simp [list.mem_cons_iff, hx1, hx2] } } },
134
149
{ exact λ ⟨a, ha1, ha2⟩, dvd_trans ha2 (list.dvd_prod ha1) },
135
150
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