mathlib documentation

field_theory.splitting_field

Splitting fields #

This file introduces the notion of a splitting field of a polynomial and provides an embedding from a splitting field to any field that splits the polynomial. A polynomial f : K[X] splits over a field extension L of K if it is zero or all of its irreducible factors over L have degree 1. A field extension of K of a polynomial f : K[X] is called a splitting field if it is the smallest field extension of K such that f splits.

Main definitions #

Main statements #

noncomputable def polynomial.factor {K : Type v} [field K] (f : polynomial K) :

Non-computably choose an irreducible factor from a polynomial.

Equations
theorem polynomial.factor_dvd_of_not_is_unit {K : Type v} [field K] {f : polynomial K} (hf1 : ¬is_unit f) :
theorem polynomial.factor_dvd_of_degree_ne_zero {K : Type v} [field K] {f : polynomial K} (hf : f.degree 0) :
noncomputable def polynomial.remove_factor {K : Type v} [field K] (f : polynomial K) :

Divide a polynomial f by X - C r where r is a root of f in a bigger field extension.

Equations
theorem polynomial.nat_degree_remove_factor' {K : Type v} [field K] {f : polynomial K} {n : } (hfn : f.nat_degree = n + 1) :
def polynomial.splitting_field_aux (n : ) {K : Type u} [field K] (f : polynomial K) :

Auxiliary construction to a splitting field of a polynomial, which removes n (arbitrarily-chosen) factors.

Uses recursion on the degree. For better definitional behaviour, structures including splitting_field_aux (such as instances) should be defined using this recursion in each field, rather than defining the whole tuple through recursion.

Equations
Instances for polynomial.splitting_field_aux

Instances on splitting_field_aux #

In order to avoid diamond issues, we have to be careful to define each data field of algebraic instances on splitting_field_aux by recursion, rather than defining the whole structure by recursion at once.

The important detail is that the smul instances can be lifted before we create the algebraic instances; if we do not do this, this creates a mutual dependence on both on each other, and it is impossible to untangle this mess. In order to do this, we need that these smul instances are distributive in the sense of distrib_smul, which is weak enough to be guaranteed at this stage. This is sufficient to lift an action to adjoin_root f (remember that this is a quotient, so these conditions are equivalent to well-definedness), which is all we need.

@[protected]
noncomputable def polynomial.splitting_field_aux.zero (n : ) {K : Type u} [field K] {f : polynomial K} :

Splitting fields have a zero.

Equations
@[protected]

Splitting fields have an addition.

Equations
@[protected]

Splitting fields inherit scalar multiplication.

Equations
@[protected, instance]
noncomputable def polynomial.splitting_field_aux.has_smul (α : Type u_1) (n : ) {K : Type u} [field K] [distrib_smul α K] [is_scalar_tower α K K] {f : polynomial K} :
Equations
@[protected, instance]
def polynomial.splitting_field_aux.is_scalar_tower (n : ) (R₁ : Type u_1) (R₂ : Type u_2) {K : Type u} [has_smul R₁ R₂] [field K] [distrib_smul R₂ K] [distrib_smul R₁ K] [is_scalar_tower R₁ K K] [is_scalar_tower R₂ K K] [is_scalar_tower R₁ R₂ K] {f : polynomial K} :
@[protected]

Splitting fields have a negation.

Equations
@[protected]

Splitting fields have subtraction.

Equations
@[protected]
noncomputable def polynomial.splitting_field_aux.one (n : ) {K : Type u} [field K] {f : polynomial K} :

Splitting fields have a one.

Equations
@[protected]

Splitting fields have a multiplication.

Equations
@[protected]

Splitting fields have a power operation.

Equations
@[protected]
noncomputable def polynomial.splitting_field_aux.mk (n : ) {K : Type u} [field K] {f : polynomial K} :

Splitting fields have an injection from the base field.

Equations
@[protected]

Splitting fields have an inverse.

Equations
@[protected]

Splitting fields have a division.

Equations
@[protected]

Splitting fields have powers by integers.

Equations
@[protected, instance]
Equations
@[protected, instance]
Equations
@[protected]

The injection from the base field as a ring homomorphism.

Equations
@[protected, instance]
Equations
@[protected, instance]
noncomputable def polynomial.splitting_field.lift {K : Type v} {L : Type w} [field K] [field L] (f : polynomial K) [algebra K L] (hb : polynomial.splits (algebra_map K L) f) :

Embeds the splitting field into any other field that splits the polynomial.

Equations
@[protected, instance]
theorem polynomial.is_splitting_field.mul {F : Type u} {K : Type v} (L : Type w) [field K] [field L] [field F] [algebra K L] [algebra F K] [algebra F L] [is_scalar_tower F K L] (f g : polynomial F) (hf : f 0) (hg : g 0) [polynomial.is_splitting_field F K f] [polynomial.is_splitting_field K L (polynomial.map (algebra_map F K) g)] :
noncomputable def polynomial.is_splitting_field.lift {F : Type u} {K : Type v} (L : Type w) [field K] [field L] [field F] [algebra K L] [algebra K F] (f : polynomial K) [polynomial.is_splitting_field K L f] (hf : polynomial.splits (algebra_map K F) f) :

Splitting field of f embeds into any field that splits f.

Equations

Any splitting field is isomorphic to splitting_field f.

Equations
theorem intermediate_field.splits_of_splits {K : Type v} {L : Type w} [field K] [field L] [algebra K L] {p : polynomial K} {F : intermediate_field K L} (h : polynomial.splits (algebra_map K L) p) (hF : (x : L), x p.root_set L x F) :