@@ -18,8 +18,8 @@ and `q` is notation for the cardinality of `K`.
18181. Let `f` be a multivariate polynomial in finitely many variables (`X s`, `s : σ`)
1919 such that the total degree of `f` is less than `(q-1)` times the cardinality of `σ`.
2020 Then the evaluation of `f` on all points of `σ → K` (aka `K^σ`) sums to `0`.
21- (`sum_mv_polynomial_eq_zero `)
22- 2. The Chevalley–Warning theorem (`char_dvd_card_solutions `).
21+ (`sum_eval_eq_zero `)
22+ 2. The Chevalley–Warning theorem (`char_dvd_card_solutions_of_sum_lt `).
2323 Let `f i` be a finite family of multivariate polynomials
2424 in finitely many variables (`X s`, `s : σ`) such that
2525 the sum of the total degrees of the `f i` is less than the cardinality of `σ`.
@@ -41,12 +41,12 @@ open_locale big_operators
4141section finite_field
4242open mv_polynomial function (hiding eval) finset finite_field
4343
44- variables {K : Type *} {σ : Type *} [fintype K] [field K] [fintype σ]
44+ variables {K σ ι : Type *} [fintype K] [field K] [fintype σ] [decidable_eq σ]
4545local notation `q ` := fintype.card K
4646
47- lemma mv_polynomial.sum_mv_polynomial_eq_zero [decidable_eq σ] (f : mv_polynomial σ K)
47+ lemma mv_polynomial.sum_eval_eq_zero (f : mv_polynomial σ K)
4848 (h : f.total_degree < (q - 1 ) * fintype.card σ) :
49- ( ∑ x, eval x f) = 0 :=
49+ ∑ x, eval x f = 0 :=
5050begin
5151 haveI : decidable_eq K := classical.dec_eq K,
5252 calc (∑ x, eval x f)
@@ -86,15 +86,14 @@ begin
8686 rw equiv.subtype_equiv_codomain_symm_apply_ne, }
8787end
8888
89- variables [decidable_eq K] [decidable_eq σ ]
89+ variables [decidable_eq K] (p : ℕ) [char_p K p ]
9090
91- /-- The Chevalley–Warning theorem.
91+ /-- The ** Chevalley–Warning theorem** , finitary version .
9292Let `(f i)` be a finite family of multivariate polynomials
9393in finitely many variables (`X s`, `s : σ`) over a finite field of characteristic `p`.
9494Assume that the sum of the total degrees of the `f i` is less than the cardinality of `σ`.
9595Then the number of common solutions of the `f i` is divisible by `p`. -/
96- theorem char_dvd_card_solutions_family (p : ℕ) [char_p K p]
97- {ι : Type *} {s : finset ι} {f : ι → mv_polynomial σ K}
96+ theorem char_dvd_card_solutions_of_sum_lt {s : finset ι} {f : ι → mv_polynomial σ K}
9897 (h : (∑ i in s, (f i).total_degree) < fintype.card σ) :
9998 p ∣ fintype.card {x : σ → K // ∀ i ∈ s, eval x (f i) = 0 } :=
10099begin
@@ -131,7 +130,7 @@ begin
131130 rw [← char_p.cast_eq_zero_iff K, ← key],
132131 show ∑ x, eval x F = 0 ,
133132 -- We are now ready to apply the main machine, proven before.
134- apply F.sum_mv_polynomial_eq_zero ,
133+ apply F.sum_eval_eq_zero ,
135134 -- It remains to verify the crucial assumption of this machine
136135 show F.total_degree < (q - 1 ) * fintype.card σ,
137136 calc F.total_degree ≤ ∑ i in s, (1 - (f i)^(q - 1 )).total_degree : total_degree_finset_prod s _
@@ -147,22 +146,43 @@ begin
147146 ... ≤ (q - 1 ) * (f i).total_degree : total_degree_pow _ _
148147end
149148
150- /-- The Chevalley–Warning theorem.
149+ /-- The **Chevalley–Warning theorem** , fintype version.
150+ Let `(f i)` be a finite family of multivariate polynomials
151+ in finitely many variables (`X s`, `s : σ`) over a finite field of characteristic `p`.
152+ Assume that the sum of the total degrees of the `f i` is less than the cardinality of `σ`.
153+ Then the number of common solutions of the `f i` is divisible by `p`. -/
154+ theorem char_dvd_card_solutions_of_fintype_sum_lt [fintype ι] {f : ι → mv_polynomial σ K}
155+ (h : (∑ i, (f i).total_degree) < fintype.card σ) :
156+ p ∣ fintype.card {x : σ → K // ∀ i, eval x (f i) = 0 } :=
157+ by simpa using char_dvd_card_solutions_of_sum_lt p h
158+
159+ /-- The **Chevalley–Warning theorem** , unary version.
151160Let `f` be a multivariate polynomial in finitely many variables (`X s`, `s : σ`)
152161over a finite field of characteristic `p`.
153162Assume that the total degree of `f` is less than the cardinality of `σ`.
154163Then the number of solutions of `f` is divisible by `p`.
155- See `char_dvd_card_solutions_family` for a version that takes a family of polynomials `f i`. -/
156- theorem char_dvd_card_solutions (p : ℕ) [char_p K p]
157- {f : mv_polynomial σ K} (h : f.total_degree < fintype.card σ) :
164+ See `char_dvd_card_solutions_of_sum_lt` for a version that takes a family of polynomials `f i`. -/
165+ theorem char_dvd_card_solutions {f : mv_polynomial σ K} (h : f.total_degree < fintype.card σ) :
158166 p ∣ fintype.card {x : σ → K // eval x f = 0 } :=
159167begin
160168 let F : unit → mv_polynomial σ K := λ _, f,
161- have : ∑ i : unit, (F i).total_degree < fintype.card σ,
162- { simpa only [fintype.univ_punit, sum_singleton] using h, },
163- have key := char_dvd_card_solutions_family p this ,
164- simp only [F, fintype.univ_punit, forall_eq, mem_singleton] at key,
165- convert key,
169+ have : ∑ i : unit, (F i).total_degree < fintype.card σ := h,
170+ simpa only [F, fintype.univ_punit, forall_eq, mem_singleton] using
171+ char_dvd_card_solutions_of_sum_lt p this ,
172+ end
173+
174+ /-- The **Chevalley–Warning theorem** , binary version.
175+ Let `f₁`, `f₂` be two multivariate polynomials in finitely many variables (`X s`, `s : σ`) over a
176+ finite field of characteristic `p`.
177+ Assume that the sum of the total degrees of `f₁` and `f₂` is less than the cardinality of `σ`.
178+ Then the number of common solutions of the `f₁` and `f₂` is divisible by `p`. -/
179+ theorem char_dvd_card_solutions_of_add_lt {f₁ f₂ : mv_polynomial σ K}
180+ (h : f₁.total_degree + f₂.total_degree < fintype.card σ) :
181+ p ∣ fintype.card {x : σ → K // eval x f₁ = 0 ∧ eval x f₂ = 0 } :=
182+ begin
183+ let F : bool → mv_polynomial σ K := λ b, cond b f₂ f₁,
184+ have : ∑ b : bool, (F b).total_degree < fintype.card σ := (add_comm _ _).trans_lt h,
185+ simpa only [F, bool.forall_bool] using char_dvd_card_solutions_of_fintype_sum_lt p this ,
166186end
167187
168188end finite_field
0 commit comments