@@ -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,6 +241,7 @@ 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
244
+ -- **IMPORTANT** `M` should be refactored before proving this. See commented out code below.
241
245
theorem M_deg_eq_F_deg (b : B) : (M hFull b).degree = (F G b).degree := by
242
246
apply le_antisymm (M_deg_le hFull b)
243
247
-- hopefully not too hard from previous two lemmas
@@ -247,6 +251,7 @@ theorem M_deg (b : B) : (M hFull b).degree = Nat.card G := by
247
251
rw [M_deg_eq_F_deg hFull b]
248
252
exact F_degree G b
249
253
254
+ -- **IMPORTANT** `M` should be refactored before proving this. See commented out code below.
250
255
theorem M_monic (b : B) : (M hFull b).Monic := by
251
256
have this1 := M_deg_le hFull b
252
257
have this2 := M_coeff_card hFull b
@@ -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
@@ -291,9 +296,11 @@ theorem M_spec' (b : B) : (map (algebraMap A B) (M G hFull b)) = F G b :=
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