@@ -138,16 +138,16 @@ theorem F_monic [Nontrivial B] (b : B) : (F G b).Monic := by
138
138
have := Fintype.ofFinite G
139
139
rw [Monic, F_spec, finprod_eq_prod_of_fintype, leadingCoeff_prod'] <;> simp
140
140
141
- variable (G) in
142
- theorem F_degree (b : B) [Nontrivial B] : (F G b).degree = Nat.card G := by
143
- unfold F
144
- -- need (∏ᶠ fᵢ).degree = ∑ᶠ (fᵢ.degree)
145
- -- then it should be easy
146
- sorry
147
-
148
141
theorem F_natdegree [Nontrivial B] (b : B) : (F G b).natDegree = Nat.card G := by
149
- rw [← degree_eq_iff_natDegree_eq_of_pos Nat.card_pos]
150
- exact F_degree G b
142
+ have := Fintype.ofFinite G
143
+ rw [F_spec, finprod_eq_prod_of_fintype, natDegree_prod_of_monic _ _ (fun _ _ => monic_X_sub_C _)]
144
+ simp only [natDegree_X_sub_C, Finset.sum_const, Finset.card_univ, Fintype.card_eq_nat_card,
145
+ nsmul_eq_mul, mul_one, Nat.cast_id]
146
+
147
+ variable (G) in
148
+ theorem F_degree [Nontrivial B] (b : B) : (F G b).degree = Nat.card G := by
149
+ have := Fintype.ofFinite G
150
+ rw [degree_eq_iff_natDegree_eq_of_pos Nat.card_pos, F_natdegree]
151
151
152
152
theorem F_smul_eq_self (σ : G) (b : B) : σ • (F G b) = F G b := calc
153
153
σ • F G b = σ • ∏ᶠ τ : G, (X - C (τ • b)) := by rw [F_spec]
@@ -183,6 +183,9 @@ section full_descent
183
183
184
184
variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
185
185
186
+ -- **IMPORTANT** The `splitting_of_full` approach is lousy and should be
187
+ -- replaced by the commented-out code below (lines 275-296 currently)
188
+
186
189
/-- This "splitting" function from B to A will only ever be evaluated on
187
190
G-invariant elements of B, and the two key facts about it are
188
191
that it lifts such an element to `A`, and for reasons of
@@ -238,26 +241,28 @@ theorem M_coeff_card (b : B) :
238
241
· intro d _ hd
239
242
exact coeff_monomial_of_ne (splitting_of_full hFull ((F G b).coeff d)) hd
240
243
241
- theorem M_deg_eq_F_deg (b : B) : (M hFull b).degree = (F G b).degree := by
244
+ -- **IMPORTANT** `M` should be refactored before proving this. See commented out code below.
245
+ theorem M_deg_eq_F_deg [Nontrivial A] (b : B) : (M hFull b).degree = (F G b).degree := by
242
246
apply le_antisymm (M_deg_le hFull b)
243
- -- hopefully not too hard from previous two lemmas
244
- sorry
247
+ rw [F_degree]
248
+ have := M_coeff_card hFull b
249
+ refine le_degree_of_ne_zero ?h
250
+ rw [this]
251
+ exact one_ne_zero
245
252
246
- theorem M_deg (b : B) : (M hFull b).degree = Nat.card G := by
253
+ theorem M_deg [Nontrivial A] (b : B) : (M hFull b).degree = Nat.card G := by
247
254
rw [M_deg_eq_F_deg hFull b]
248
255
exact F_degree G b
249
256
257
+ -- **IMPORTANT** `M` should be refactored before proving this. See commented out code below.
250
258
theorem M_monic (b : B) : (M hFull b).Monic := by
251
259
have this1 := M_deg_le hFull b
252
260
have this2 := M_coeff_card hFull b
253
261
have this3 : 0 < Nat.card G := Nat.card_pos
254
262
rw [← F_natdegree b] at this2 this3
255
263
-- then the hypos say deg(M)<=n, coefficient of X^n is 1 in M
256
264
have this4 : (M hFull b).natDegree ≤ (F G b).natDegree := natDegree_le_natDegree this1
257
- clear this1
258
- -- Now it's just a logic puzzle. If deg(F)=n>0 then we
259
- -- know deg(M)<=n and the coefficient of X^n is 1 in M
260
- sorry
265
+ exact Polynomial.monic_of_natDegree_le_of_coeff_eq_one _ this4 this2
261
266
262
267
omit [Nontrivial B] in
263
268
theorem M_spec (b : B) : ((M hFull b : A[X]) : B[X]) = F G b := by
@@ -268,7 +273,7 @@ theorem M_spec (b : B) : ((M hFull b : A[X]) : B[X]) = F G b := by
268
273
simp_rw [finset_sum_coeff, ← lcoeff_apply, lcoeff_apply, coeff_monomial]
269
274
aesop
270
275
271
- /--
276
+ /-
272
277
private theorem F_descent_monic
273
278
(hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) (b : B) :
274
279
∃ M : A[ X ] , (M : B[ X ] ) = F G b ∧ Monic M := by
@@ -289,11 +294,13 @@ theorem M_spec' (b : B) : (map (algebraMap A B) (M G hFull b)) = F G b :=
289
294
(F_descent_monic hFull b).choose_spec.1
290
295
291
296
theorem M_monic (b : B) : (M G hFull b).Monic := (F_descent_monic hFull b).choose_spec.2
292
- -- /
297
+ -/
293
298
299
+ omit [Nontrivial B] in
294
300
theorem coe_poly_as_map (p : A[X]) : (p : B[X]) = map (algebraMap A B) p := rfl
295
301
296
302
303
+ omit [Nontrivial B] in
297
304
theorem M_eval_eq_zero (b : B) : (M hFull b).eval₂ (algebraMap A B) b = 0 := by
298
305
rw [eval₂_eq_eval_map, ← coe_poly_as_map, M_spec, F_eval_eq_zero]
299
306
@@ -334,6 +341,7 @@ theorem Nontrivial_of_exists_prime {R : Type*} [CommRing R]
334
341
apply Subsingleton.elim
335
342
336
343
-- (Part a of Théorème 2 in section 2 of chapter 5 of Bourbaki Alg Comm)
344
+ omit [Nontrivial B] in
337
345
theorem part_a [SMulCommClass G A B]
338
346
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
339
347
(hFull' : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) :
@@ -670,7 +678,7 @@ noncomputable def residueFieldExtensionPolynomial [DecidableEq L] (x : L) : K[X]
670
678
-- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar
671
679
-- scaled appropriately.
672
680
673
- theorem f [DecidableEq L] (l : L) :
681
+ theorem f_exists [DecidableEq L] (l : L) :
674
682
∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧
675
683
eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by
676
684
use Bourbaki52222.residueFieldExtensionPolynomial G L K l
@@ -699,6 +707,9 @@ theorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type*} [CommRing R]
699
707
apply IsAlgebraic.mul (h r)
700
708
exact IsAlgebraic.invLoc (h s)
701
709
710
+ -- this uses `Algebra.isAlgebraic_of_subring_isAlgebraic` but I think we're going to have
711
+ -- to introduce `f` anyway because we need not just that the extension is algebraic but
712
+ -- that every element satisfies a poly of degree <= |G|.
702
713
theorem algebraic {A : Type *} [CommRing A] {B : Type *} [Nontrivial B] [CommRing B] [Algebra A B]
703
714
[Algebra.IsIntegral A B] {G : Type *} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)
704
715
[Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]
0 commit comments