Skip to content

Commit ac39046

Browse files
authored
Merge branch 'main' into auto-update/patch-j21d0pf
2 parents 38aedc7 + af4548c commit ac39046

File tree

3 files changed

+58
-28
lines changed

3 files changed

+58
-28
lines changed

FLT/MathlibExperiments/FrobeniusRiou.lean

+31-20
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,16 @@ theorem F_monic [Nontrivial B] (b : B) : (F G b).Monic := by
138138
have := Fintype.ofFinite G
139139
rw [Monic, F_spec, finprod_eq_prod_of_fintype, leadingCoeff_prod'] <;> simp
140140

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-
148141
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]
151151

152152
theorem F_smul_eq_self (σ : G) (b : B) : σ • (F G b) = F G b := calc
153153
σ • F G b = σ • ∏ᶠ τ : G, (X - C (τ • b)) := by rw [F_spec]
@@ -183,6 +183,9 @@ section full_descent
183183

184184
variable (hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a)
185185

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+
186189
/-- This "splitting" function from B to A will only ever be evaluated on
187190
G-invariant elements of B, and the two key facts about it are
188191
that it lifts such an element to `A`, and for reasons of
@@ -238,26 +241,28 @@ theorem M_coeff_card (b : B) :
238241
· intro d _ hd
239242
exact coeff_monomial_of_ne (splitting_of_full hFull ((F G b).coeff d)) hd
240243

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
242246
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
245252

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
247254
rw [M_deg_eq_F_deg hFull b]
248255
exact F_degree G b
249256

257+
-- **IMPORTANT** `M` should be refactored before proving this. See commented out code below.
250258
theorem M_monic (b : B) : (M hFull b).Monic := by
251259
have this1 := M_deg_le hFull b
252260
have this2 := M_coeff_card hFull b
253261
have this3 : 0 < Nat.card G := Nat.card_pos
254262
rw [← F_natdegree b] at this2 this3
255263
-- then the hypos say deg(M)<=n, coefficient of X^n is 1 in M
256264
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
261266

262267
omit [Nontrivial B] in
263268
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
268273
simp_rw [finset_sum_coeff, ← lcoeff_apply, lcoeff_apply, coeff_monomial]
269274
aesop
270275

271-
/--
276+
/-
272277
private theorem F_descent_monic
273278
(hFull : ∀ (b : B), (∀ (g : G), g • b = b) → ∃ a : A, b = a) (b : B) :
274279
∃ 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 :=
289294
(F_descent_monic hFull b).choose_spec.1
290295
291296
theorem M_monic (b : B) : (M G hFull b).Monic := (F_descent_monic hFull b).choose_spec.2
292-
--/
297+
-/
293298

299+
omit [Nontrivial B] in
294300
theorem coe_poly_as_map (p : A[X]) : (p : B[X]) = map (algebraMap A B) p := rfl
295301

296302

303+
omit [Nontrivial B] in
297304
theorem M_eval_eq_zero (b : B) : (M hFull b).eval₂ (algebraMap A B) b = 0 := by
298305
rw [eval₂_eq_eval_map, ← coe_poly_as_map, M_spec, F_eval_eq_zero]
299306

@@ -334,6 +341,7 @@ theorem Nontrivial_of_exists_prime {R : Type*} [CommRing R]
334341
apply Subsingleton.elim
335342

336343
-- (Part a of Théorème 2 in section 2 of chapter 5 of Bourbaki Alg Comm)
344+
omit [Nontrivial B] in
337345
theorem part_a [SMulCommClass G A B]
338346
(hPQ : Ideal.comap (algebraMap A B) P = Ideal.comap (algebraMap A B) Q)
339347
(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]
670678
-- `Algebra.exists_dvd_nonzero_if_isIntegral` above, and then use Mbar
671679
-- scaled appropriately.
672680

673-
theorem f [DecidableEq L] (l : L) :
681+
theorem f_exists [DecidableEq L] (l : L) :
674682
∃ f : K[X], f.Monic ∧ f.degree = Nat.card G ∧
675683
eval₂ (algebraMap K L) l f = 0 ∧ f.Splits (algebraMap K L) := by
676684
use Bourbaki52222.residueFieldExtensionPolynomial G L K l
@@ -699,6 +707,9 @@ theorem Algebra.isAlgebraic_of_subring_isAlgebraic {R k K : Type*} [CommRing R]
699707
apply IsAlgebraic.mul (h r)
700708
exact IsAlgebraic.invLoc (h s)
701709

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|.
702713
theorem algebraic {A : Type*} [CommRing A] {B : Type*} [Nontrivial B] [CommRing B] [Algebra A B]
703714
[Algebra.IsIntegral A B] {G : Type*} [Group G] [Finite G] [MulSemiringAction G B] (Q : Ideal B)
704715
[Q.IsPrime] (P : Ideal A) [P.IsPrime] [Algebra (A ⧸ P) (B ⧸ Q)]

blueprint/lean_decls

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ AutomorphicForm.GLn.AutomorphicFormForGLnOverQ
6262
Bourbaki52222.stabilizer.toGaloisGroup
6363
Bourbaki52222.MulAction.stabilizer_surjective_of_action
6464
MulSemiringAction.CharacteristicPolynomial.F
65+
MulSemiringAction.CharacteristicPolynomial.F_degree
6566
MulSemiringAction.CharacteristicPolynomial.M
6667
MulSemiringAction.CharacteristicPolynomial.M_eval_eq_zero
6768
MulSemiringAction.CharacteristicPolynomial.M_deg

blueprint/src/chapter/FrobeniusProject.tex

+26-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
\chapter{A project: Frobenius elements}
1+
\chapter{A project: Frobenius elements}\label{Frobenius_project}
22

33
\section{Introduction and goal}
44

@@ -19,7 +19,7 @@ \section{Statement of the theorem}
1919
Note that $G$ naturally acts on the ideals of $B$. Let's define the
2020
\emph{decomposition group} $D_Q$ of $Q$ to be the subgroup of $G$ which
2121
stabilizes $Q$ (just to be clear: $g\in D_Q$ means
22-
$\{g\cdot q\, :\, q \in Q\}=Q$, not $\forall q\in Q, g\cdot q=qs$).
22+
$\{g\cdot q\, :\, q \in Q\}=Q$, not $\forall q\in Q, g\cdot q=q$).
2323

2424
Let $L$ be the field of fractions of the integral domain $B/Q$, and let $K$ be the
2525
field of fractions of the subring $A/P$. Then $L$ is naturally a $K$-algebra.
@@ -46,9 +46,9 @@ \section{Statement of the theorem}
4646
The map $g\mapsto \phi_g$ from $D_Q$ to $\Aut_K(L)$ defined above is surjective.
4747
\end{theorem}
4848

49-
The goal of this project is to get this theorem into mathlib.
49+
The goal of this project is to get this theorem formalised and ideally into mathlib.
5050

51-
In particular, $\Aut_K(L)$ is finite, although we prove this along the way and not
51+
In particular, $\Aut_K(L)$ is finite, although we prove this beforehand and not
5252
as a corollary. What is so striking about this theorem to me is that the only finiteness hypothesis
5353
is on the group $G$ which acts; there are no finiteness hypotheses on the rings at all.
5454

@@ -89,7 +89,7 @@ \subsection{Examples}
8989
An example which demonstrates that things can get a bit stranger in characteristic $p$ is the
9090
following (we restrict to $p=2$ but a generalisation of this pathology exists for all $p>0$).
9191
We let $B=\mathbb{F}_2[X,Y]$ and $G=\{1,\tau\}$ with the involution $\tau$
92-
fixing $Y$ and switching $X$, $X+Y$, i.e., $(\tau f)(X,Y)=f(X,X+Y)$.
92+
fixing $Y$ and switching $X$, $X+Y$, i.e., $(\tau f)(X,Y)=f(X+Y, Y)$.
9393
Hence $\tau$ fixes the sum and product of these two polynomials, and thus
9494
$A\supset \mathbb{F}_2[X^2+XY,Y]$. One can check (and this needs checking) that this
9595
is in fact an equality, and I believe that $B$ is free of
@@ -134,8 +134,21 @@ \section{The extension $B/A$.}
134134
$F_b(X) \in B[X]$ of $b$ to be $\prod_{g\in G}(X-g\cdot b)$.
135135
\end{definition}
136136

137-
Clearly $F_b$ is a monic polynomial of degree $|G|$. Note also
138-
that $F_b$ is $G$-invariant, because acting by some $\gamma\in G$
137+
Clearly $F_b$ is a monic polynomial of degree $|G|$. In fact this isn't clear:
138+
if $B$ is the zero ring then $F_b=0$ has degree less than $|G|$.
139+
140+
\begin{lemma}
141+
\label{MulSemiringAction.CharacteristicPolynomial.F_degree}
142+
\lean{MulSemiringAction.CharacteristicPolynomial.F_degree}
143+
\uses{MulSemiringAction.CharacteristicPolynomial.F}
144+
\leanok
145+
If $B$ is nontrivial then $F_b$ is monic.
146+
\end{lemma}
147+
\begin{proof} Obvious.
148+
\end{proof}
149+
150+
It's also clear that $F_b$ has degree $|G|$ and has $b$ as a root.
151+
Also $F_b$ is $G$-invariant, because acting by some $\gamma\in G$
139152
just permutes the order of the factors. Hence we can descend $F_b$
140153
to a monic polynomial $M_b(X)$ of degree $|G|$ in $A[X]$. We will
141154
also refer to $M_b$ as the characteristic polynomial of $b$, even though
@@ -161,17 +174,22 @@ \section{The extension $B/A$.}
161174
\label{MulSemiringAction.CharacteristicPolynomial.M_deg}
162175
\lean{MulSemiringAction.CharacteristicPolynomial.M_deg}
163176
\uses{MulSemiringAction.CharacteristicPolynomial.M}
177+
\leanok
164178
$M_b$ has degree $n$.
165179
\end{lemma}
166-
\begin{proof} Exercise.
180+
\begin{proof}
181+
\leanok
182+
Exercise.
167183
\end{proof}
168184
\begin{lemma}
169185
\lean{MulSemiringAction.CharacteristicPolynomial.M_monic}
170186
\label{MulSemiringAction.CharacteristicPolynomial.M_monic}
171187
\uses{MulSemiringAction.CharacteristicPolynomial.M}
188+
\leanok
172189
$M_b$ is monic.
173190
\end{lemma}
174191
\begin{proof}
192+
\leanok
175193
Exercise.
176194
\end{proof}
177195

0 commit comments

Comments
 (0)