@@ -85,39 +85,44 @@ section normal_elements
85
85
variable (K : Type *) [Field K] {L : Type *} [Field L] [Algebra K L]
86
86
87
87
open Polynomial
88
- -- Do we have this?
89
- def IsNormalElement (x : L) : Prop := Splits (algebraMap K L) (minpoly K x)
90
-
91
- namespace IsNormalElement
92
-
93
- theorem iff_exists_monic_splits {x : L} (hx : IsIntegral K x) :
94
- IsNormalElement K x ↔
95
- ∃ P : K[X], P.Monic ∧ P.eval₂ (algebraMap K L) x = 0 ∧ Splits (algebraMap K L) P := by
96
- constructor
97
- · intro h
98
- exact ⟨minpoly K x, minpoly.monic hx, minpoly.aeval K x, h⟩
99
- · rintro ⟨P, hPmonic, hPeval, hPsplits⟩
100
- -- need min poly divides P and then it should all be over
101
- sorry
102
-
103
- theorem prod {x y : L} (hxint : IsIntegral K x) (hyint : IsIntegral K y)
104
- (hx : IsNormalElement K x) (hy : IsNormalElement K y) :
105
- IsNormalElement K (x * y) := by
106
- rw [iff_exists_monic_splits K hxint] at hx
107
- obtain ⟨Px, hx1, hx2, hx3⟩ := hx
108
- rw [iff_exists_monic_splits K hyint] at hy
109
- obtain ⟨Py, hy1, hy2, hy3⟩ := hy
110
- rw [iff_exists_monic_splits K <| IsIntegral.mul hxint hyint]
111
- -- If roots of Px are xᵢ and roots of Py are yⱼ, then use the poly whose roots are xᵢyⱼ.
112
- -- Do we have this?
113
- -- Is this even the best way to go about this?
114
- sorry
115
88
116
- -- API
89
+ -- I've commented out the next section because ACL suggested
90
+ -- reading up-to-date Bourbaki here https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/poly.20whose.20roots.20are.20the.20products.20of.20the.20roots.20of.20polys/near/468585267
91
+ -- and apparently this will avoid the def below.
92
+
93
+ -- def IsNormalElement (x : L) : Prop := Splits (algebraMap K L) (minpoly K x)
94
+
95
+ -- namespace IsNormalElement
96
+
97
+ -- theorem iff_exists_monic_splits {x : L} (hx : IsIntegral K x) :
98
+ -- IsNormalElement K x ↔
99
+ -- ∃ P : K[ X ] , P.Monic ∧ P.eval₂ (algebraMap K L) x = 0 ∧ Splits (algebraMap K L) P := by
100
+ -- constructor
101
+ -- · intro h
102
+ -- exact ⟨minpoly K x, minpoly.monic hx, minpoly.aeval K x, h⟩
103
+ -- · rintro ⟨P, hPmonic, hPeval, hPsplits⟩
104
+ -- -- need min poly divides P and then it should all be over
105
+ -- sorry -- presumably some form of this is in the library
106
+
107
+ -- theorem prod {x y : L} (hxint : IsIntegral K x) (hyint : IsIntegral K y)
108
+ -- (hx : IsNormalElement K x) (hy : IsNormalElement K y) :
109
+ -- IsNormalElement K (x * y) := by
110
+ -- rw [iff_exists_monic_splits K hxint] at hx
111
+ -- obtain ⟨Px, hx1, hx2, hx3⟩ := hx
112
+ -- rw [iff_exists_monic_splits K hyint] at hy
113
+ -- obtain ⟨Py, hy1, hy2, hy3⟩ := hy
114
+ -- rw [iff_exists_monic_splits K <| IsIntegral.mul hxint hyint]
115
+ -- -- If roots of Px are xᵢ and roots of Py are yⱼ, then use the poly whose roots are xᵢyⱼ.
116
+ -- -- Do we have this?
117
+ -- -- Is this even the best way to go about this?
118
+ -- -- Note: Chambert-Loir says there's a proof in Bourbaki
119
+ -- sorry
117
120
118
- end IsNormalElement
121
+ -- -- API
119
122
120
- end normal_elements
123
+ -- end IsNormalElement
124
+
125
+ -- end normal_elements
121
126
122
127
section part_b
123
128
@@ -208,8 +213,10 @@ private theorem F_smul_eq_self (σ : G) (b : B) : σ • (F G b) = F G b := calc
208
213
private theorem F_eval_eq_zero (b : B) : (F G b).eval b = 0 := by
209
214
let foo := Fintype.ofFinite G
210
215
simp [F_spec, eval_prod]
211
- -- need eval finprod = finprod eval
216
+ -- need eval finprod = finprod eval (missing?)
212
217
-- then use `finprod_eq_zero _ (1 : G)`
218
+ -- maths proof: evaluating the finite product at b clearly gives 0 because
219
+ -- the term corresponding to τ=1 is 0
213
220
sorry
214
221
215
222
@@ -256,23 +263,29 @@ theorem M_eval_eq_zero (b : B) : (M G hGalois b).eval₂ (algebraMap A[X] B[X])
256
263
theorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type *} [CommRing R] [CommRing k]
257
264
[CommRing K] [Algebra R K] [IsFractionRing R K] [Algebra k K]
258
265
(h : ∀ x : R, IsAlgebraic k (x : K)) : Algebra.IsAlgebraic k K := by
259
- -- ratio of two algebraic numbers is algebraic (follows from reciprocal of algebraic number
260
- -- is algebraic; proof is "reverse the min poly", don't know if we have it)
266
+ -- ratio of two algebraic numbers is algebraic (follows from product of alg numbers is
267
+ -- alg, which we surely have, and reciprocal of algebraic number
268
+ -- is algebraic; proof of the latter is "reverse the min poly", don't know if we have it)
261
269
sorry
262
270
263
271
-- (Théorème 2 in section 2 of chapter 5 of Bourbaki Alg Comm)
264
272
theorem part_b1 : Algebra.IsAlgebraic K L := by
265
273
/-
266
- Because of `IsFractionRing (B ⧸ P ) K` and the previous lemma it suffices to show that every
267
- element of B/P is algebraic over k, and this is because you can lift to b ∈ B and then
268
- use `M` above.
274
+ Because of `IsFractionRing (B ⧸ Q ) K` and the previous lemma it suffices to show that every
275
+ element of B/Q is algebraic over k, and this is because you can lift to b ∈ B and then
276
+ use `M` above (which needs to be coerced to A/P and then to K)
269
277
-/
270
278
sorry
271
279
272
280
273
281
274
282
theorem part_b2 : Normal K L := by
275
283
/-
284
+
285
+ See discussion at
286
+ https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/poly.20whose.20roots.20are.20the.20products.20of.20the.20roots.20of.20polys/near/468585267
287
+
288
+ Maybe I won't formalise the below proof then (which I made up):
276
289
Let's temporarily say that an *element* of `K` is _normal_ if it is the root of a monic poly
277
290
in `k[X]` all of whose roots are in `K`. Then `K/k` is normal iff all elements are normal
278
291
(if `t` is a root of `P ∈ k[X]` then the min poly of `t` must divide `P`).
@@ -285,6 +298,10 @@ theorem part_b2 : Normal K L := by
285
298
286
299
open scoped Pointwise
287
300
301
+ -- Basic API for what we're doing here. Writing down a map from the stabiliser of Q to
302
+ -- the residual Galois group `L ≃ₐ[K] L`, where L=Frac(B/Q) and K=Frac(A/P).
303
+ -- Hopefully sorrys aren't too hard
304
+
288
305
def foo (g : G) (hg : g • Q = Q) : B ⧸ Q ≃+* B ⧸ Q :=
289
306
Ideal.quotientEquiv Q Q (MulSemiringAction.toRingEquiv G B g) hg.symm
290
307
@@ -311,9 +328,10 @@ theorem main_result : Function.Surjective
311
328
sorry
312
329
313
330
314
- -- In Frobenius2.lean in this dir (Jou's FM24 project) there's a proof of this assuming B/Q is
315
- -- finite and P is maximal.
331
+ -- In Frobenius2.lean in this dir (Jou's FM24 project) there's a proof of surjectivity
332
+ -- assuming B/Q is finite and P is maximal.
316
333
-- Bourbaki reduce to maximal case by localizing at P, and use finite + separable = simple
317
- -- on the max separable subextension, but then the argument follows Jou's formalisation
318
- -- in Frobenius2.lean in this directory.
334
+ -- on the max separable subextension, but then the argument in Bourbaki closely
335
+ -- follows Jou's formalisation in Frobenius2.lean in this directory, so this work will
336
+ -- be useful later.
319
337
end part_b
0 commit comments