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

if fF[X] and deg(f)=n, then f has a splitting field K over F with [K:F]n!\text{if } f \in F[X] \text{ and } deg(f)=n \text{, then } f \text{ has a splitting field } K \text{ over } F \text{ with } [K : F] \leq n!

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 of f 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 ff has roots α1,α2,,αm \alpha_1, \alpha_2, \dots, \alpha_m, then

[F(α1,,αm):F]=[F(α1):F][F(α2,α1):F(α1)]n(n1)=n![F(\alpha_1, \dots, \alpha_m) : F] = [F(\alpha_1) : F] [F(\alpha_2, \alpha_1) : F(\alpha_1)] \dots \leq n(n-1) \dots = n!

But this seems to require lemmas about degree of simple extension ( [F(α1):F]n[F(\alpha_1) : F] \leq n 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 of f 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 n!Gal(K/F)=[K:F]n! \geq |Gal(K/F)| = [K : F] (Which might demands ff 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 nn polynomial in one variable fk[T]f\in k[T] over a ring kk, this is the kk-algebra SfS_f defined by generators z1,,znz_1,\dots,z_n and relations such that f=(Tz1)(Tzn)f=(T-z_1)\cdots (T-z_n). This algebra is a free module of rank n!n! over kk. A reference is the book by Pohst and Zassenhaus, Algorithmic Algebraic Number Theory.

This algebra has discriminant the discriminant of ff, 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 MM of this ring, then K=Sf/MK=S_f/M will be finite extension of kk and its degree is at most n!n!. In fact, one can go further, considering the group of permutations acting as kk-automorphism of the algebra SfS_f, prove that it acts transitively over the set of maximal ideals of SfS_f, and get the automorphism group of K/kK/k as the stabilizer of the chosen maximal ideal MM. (There is a nice piece of artinian algebra when ff 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