Zulip Chat Archive
Stream: Is there code for X?
Topic: degree of splitting field
Suzuka Yu (Feb 04 2025 at 11:22):
Greetings! I wonder if we have
in mathlib. And if not, are there any suggestions on proving it? I did't seem to find many existing theorems in mathlib regarding degree or rank of a field extension (like degree of a simple extension etc.).
Thanks in advance!
Jz Pan (Feb 04 2025 at 16:29):
@loogle Polynomial.SplittingField, Module.rank
loogle (Feb 04 2025 at 16:29):
:shrug: nothing found
Jz Pan (Feb 04 2025 at 16:29):
@loogle Polynomial.SplittingField, Module.finrank
loogle (Feb 04 2025 at 16:29):
:search: Polynomial.Gal.card_of_separable
Jz Pan (Feb 04 2025 at 16:30):
I'm afraid that there is none. If it's me, I may prove it by induction. But you need to check the actual definition of docs#Polynomial.SplittingField ...
Junyan Xu (Feb 04 2025 at 17:03):
Easier to prove f.Gal
acts faithfully on the roots of f
in the splitting field (there are at most n, and they generate the splitting field).
Jz Pan (Feb 05 2025 at 03:51):
Junyan Xu said:
Easier to prove
f.Gal
acts faithfully on the roots off
in the splitting field (there are at most n, and they generate the splitting field).
But what about purely inseparable irreducible polynomials?
Suzuka Yu (Feb 05 2025 at 04:09):
Jz Pan 发言道:
I'm afraid that there is none. If it's me, I may prove it by induction. But you need to check the actual definition of docs#Polynomial.SplittingField ...
Thanks! indeed I want to do the induction. I tried to follow the proof via adjoining roots one by one.
For instance, if has roots , then
But this seems to require lemmas about degree of simple extension ( etc. ), do we have anything like this in mathlib?
Suzuka Yu (Feb 05 2025 at 04:16):
Junyan Xu 发言道:
Easier to prove
f.Gal
acts faithfully on the roots off
in the splitting field (there are at most n, and they generate the splitting field).
Thanks but could you be more specific? Do you mean (Which might demands to be separable)?
Junyan Xu (Feb 05 2025 at 11:58):
Yeah, I missed that you need separability. So my approach needs to use the relative separableClosure to decompose the extension.
For the inductive approach, notice that the construction of SplittingField is already inductive, and it's iterated f.natDegree
times. So you can prove bounds for the finrank of docs#Polynomial.SplittingFieldAux inductively and use docs#Polynomial.SplittingField.algEquivSplittingFieldAux.
Some lemmas that will be useful are docs#Polynomial.natDegree_removeFactor, docs#PowerBasis.finrank, docs#AdjoinRoot.powerBasis, docs#Module.finrank_mul_finrank.
Junyan Xu (Feb 12 2025 at 09:04):
With some sorries
import Mathlib.FieldTheory.SplittingField.Construction
open Polynomial
variable {K : Type*} [Field K] (f : K[X]) (n : ℕ)
lemma finrank_splittingFieldAux_le :
Module.finrank K (SplittingFieldAux n f) ≤ f.natDegree.descFactorial n := by
induction' n with n ih generalizing K
· change Module.finrank K K ≤ 1; simp
have : Fact (Irreducible f.factor) := ⟨irreducible_factor f⟩
change Module.finrank K (SplittingFieldAux n f.removeFactor) ≤ _
rw [← Module.finrank_mul_finrank K (AdjoinRoot f.factor)]
have hf := (irreducible_factor f).ne_zero
have : f.natDegree ≠ 0 := sorry
have hf0 : f ≠ 0 := sorry
have H1 := natDegree_le_of_dvd (factor_dvd_of_natDegree_ne_zero this) hf0
have H2 := (AdjoinRoot.powerBasis hf).finrank.trans (AdjoinRoot.powerBasis_dim hf)
refine (mul_le_mul' (H2.trans_le H1) (ih ..)).trans ?_
rw [natDegree_removeFactor]
refine LE.le.trans_eq ?_ (Nat.descFactorial_mul_descFactorial (k := 1) n.succ_pos)
rw [Nat.descFactorial_one, mul_comm, n.add_sub_cancel]
Antoine Chambert-Loir (Feb 12 2025 at 23:12):
It would be nice to formalize the universal splitting algebra: for a monic degree polynomial in one variable over a ring , this is the -algebra defined by generators and relations such that . This algebra is a free module of rank over . A reference is the book by Pohst and Zassenhaus, Algorithmic Algebraic Number Theory.
This algebra has discriminant the discriminant of , which implies that it is étale when the discriminant is invertible.
To get a splitting field when $$k$ is a field, just pick a maximal ideal of this ring, then will be finite extension of and its degree is at most . In fact, one can go further, considering the group of permutations acting as -automorphism of the algebra , prove that it acts transitively over the set of maximal ideals of , and get the automorphism group of as the stabilizer of the chosen maximal ideal . (There is a nice piece of artinian algebra when is not separable.)
Junyan Xu (Feb 13 2025 at 03:59):
The lemma above isn't actually true if n > f.natDegree
, in which case the RHS is 0. The following is corrected and sorry-free code:
import Mathlib.FieldTheory.SplittingField.Construction
open Polynomial
variable {K : Type*} [Field K] (f : K[X]) (n : ℕ)
lemma finrank_splittingFieldAux_le (hnf : n ≤ f.natDegree) :
Module.finrank K (SplittingFieldAux n f) ≤ f.natDegree.descFactorial n := by
induction' n with n ih generalizing K
· change Module.finrank K K ≤ 1; simp
have : Fact (Irreducible f.factor) := ⟨irreducible_factor f⟩
change Module.finrank K (SplittingFieldAux n f.removeFactor) ≤ _
rw [← Module.finrank_mul_finrank K (AdjoinRoot f.factor)]
have hf0 := (irreducible_factor f).ne_zero
have hf' := (n.succ_pos.trans_le hnf).ne'
have H1 := natDegree_le_of_dvd (factor_dvd_of_natDegree_ne_zero hf') fun h ↦ hf' <| by
simp [h]
have H2 := (AdjoinRoot.powerBasis hf0).finrank.trans (AdjoinRoot.powerBasis_dim hf0)
refine (mul_le_mul' (H2.trans_le H1) (ih _ ?_)).trans ?_ <;> rw [natDegree_removeFactor]
· exact Nat.pred_le_pred hnf
refine LE.le.trans_eq ?_ (Nat.descFactorial_mul_descFactorial (k := 1) n.succ_pos)
rw [Nat.descFactorial_one, mul_comm, n.add_sub_cancel]
Suzuka Yu (Feb 13 2025 at 04:03):
Junyan Xu 发言道:
The lemma above isn't actually true if
n > f.natDegree
, in which case the RHS is 0. The following is corrected and sorry-free code:import Mathlib.FieldTheory.SplittingField.Construction open Polynomial variable {K : Type*} [Field K] (f : K[X]) (n : ℕ) lemma finrank_splittingFieldAux_le (hnf : n ≤ f.natDegree) : Module.finrank K (SplittingFieldAux n f) ≤ f.natDegree.descFactorial n := by induction' n with n ih generalizing K · change Module.finrank K K ≤ 1; simp have : Fact (Irreducible f.factor) := ⟨irreducible_factor f⟩ change Module.finrank K (SplittingFieldAux n f.removeFactor) ≤ _ rw [← Module.finrank_mul_finrank K (AdjoinRoot f.factor)] have hf0 := (irreducible_factor f).ne_zero have hf' := (n.succ_pos.trans_le hnf).ne' have H1 := natDegree_le_of_dvd (factor_dvd_of_natDegree_ne_zero hf') fun h ↦ hf' <| by simp [h] have H2 := (AdjoinRoot.powerBasis hf0).finrank.trans (AdjoinRoot.powerBasis_dim hf0) refine (mul_le_mul' (H2.trans_le H1) (ih _ ?_)).trans ?_ <;> rw [natDegree_removeFactor] · exact Nat.pred_le_pred hnf refine LE.le.trans_eq ?_ (Nat.descFactorial_mul_descFactorial (k := 1) n.succ_pos) rw [Nat.descFactorial_one, mul_comm, n.add_sub_cancel]
Amazing! huge thanks!
Junyan Xu (Feb 21 2025 at 03:36):
It would be nice to formalize the universal splitting algebra
Yeah that would be nice. I believe spanCoeffs
in the current construction of AlgebraicClosure is one possible construction of it, but it's difficult to see it's free of the specific rank, unlike with the recursive construction as explained in the book.
Last updated: May 02 2025 at 03:31 UTC