Splitting fields #
In this file we prove the existence and uniqueness of splitting fields.
Main definitions #
Polynomial.SplittingField f
: A fixed splitting field of the polynomialf
.
Main statements #
Polynomial.IsSplittingField.algEquiv
: Every splitting field of a polynomialf
is isomorphic toSplittingField f
and thus, being a splitting field is unique up to isomorphism.
Implementation details #
We construct a SplittingFieldAux
without worrying about whether the instances satisfy nice
definitional equalities. Then the actual SplittingField
is defined to be a quotient of a
MvPolynomial
ring by the kernel of the obvious map into SplittingFieldAux
. Because the
actual SplittingField
will be a quotient of a MvPolynomial
, it has nice instances on it.
Non-computably choose an irreducible factor from a polynomial.
Equations
- f.factor = if H : ∃ (g : Polynomial K), Irreducible g ∧ g ∣ f then Classical.choose H else Polynomial.X
Instances For
See note [fact non-instances].
Divide a polynomial f by X - C r
where r
is a root of f
in a bigger field extension.
Equations
- f.removeFactor = Polynomial.map (AdjoinRoot.of f.factor) f /ₘ (Polynomial.X - Polynomial.C (AdjoinRoot.root f.factor))
Instances For
Auxiliary construction to a splitting field of a polynomial, which removes
n
(arbitrarily-chosen) factors.
It constructs the type, proves that is a field and algebra over the base field.
Uses recursion on the degree.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Auxiliary construction to a splitting field of a polynomial, which removes
n
(arbitrarily-chosen) factors. It is the type constructed in SplittingFieldAuxAux
.
Equations
- Polynomial.SplittingFieldAux n f = (Polynomial.SplittingFieldAuxAux n f).fst
Instances For
Equations
- Polynomial.SplittingFieldAux.field n f = (Polynomial.SplittingFieldAuxAux n f).snd.fst
Equations
- Polynomial.instInhabitedSplittingFieldAux n f = { default := 0 }
Equations
- Polynomial.SplittingFieldAux.algebra n f = (Polynomial.SplittingFieldAuxAux n f).snd.snd
Equations
- Polynomial.SplittingFieldAux.algebra''' = Polynomial.SplittingFieldAux.algebra n f.removeFactor
Equations
- Polynomial.SplittingFieldAux.algebra' = Polynomial.SplittingFieldAux.algebra'''
Equations
- Polynomial.SplittingFieldAux.algebra'' = ((algebraMap (AdjoinRoot f.factor) (Polynomial.SplittingFieldAux n f.removeFactor)).comp (AdjoinRoot.of f.factor)).toAlgebra
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
A splitting field of a polynomial.
Equations
- f.SplittingField = (MvPolynomial (Polynomial.SplittingFieldAux f.natDegree f) K ⧸ RingHom.ker (MvPolynomial.aeval id).toRingHom)
Instances For
Equations
- Polynomial.SplittingField.commRing f = Ideal.Quotient.commRing (RingHom.ker (MvPolynomial.aeval id).toRingHom)
Equations
- Polynomial.SplittingField.inhabited f = { default := 37 }
Equations
Equations
Equations
Equations
- ⋯ = ⋯
The algebra equivalence with SplittingFieldAux
,
which we will use to construct the field structure.
Equations
Instances For
Equations
- Polynomial.SplittingField.instGroupWithZero f = let e := Polynomial.SplittingField.algEquivSplittingFieldAux f; let __spread.0 := ⋯; GroupWithZero.mk ⋯ zpowRec ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- One or more equations did not get rendered due to their size.
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Embeds the splitting field into any other field that splits the polynomial.
Equations
- Polynomial.SplittingField.lift f hb = Polynomial.IsSplittingField.lift f.SplittingField f hb
Instances For
Equations
- ⋯ = ⋯
Equations
- Polynomial.IsSplittingField.instFintypeSplittingField f = FiniteDimensional.fintypeOfFintype K f.SplittingField
Equations
- ⋯ = ⋯
Any splitting field is isomorphic to SplittingFieldAux f
.