# mathlibdocumentation

field_theory.minpoly

# Minimal polynomials #

This file defines the minimal polynomial of an element x of an A-algebra B, under the assumption that x is integral over A.

After stating the defining property we specialize to the setting of field extensions and derive some well-known properties, amongst which the fact that minimal polynomials are irreducible, and uniquely determined by their defining property.

noncomputable def minpoly (A : Type u_1) {B : Type u_2} [comm_ring A] [ring B] [ B] (x : B) :

Suppose x : B, where B is an A-algebra.

The minimal polynomial minpoly A x of x is a monic polynomial with coefficients in A of smallest degree that has x as its root, if such exists (is_integral A x) or zero otherwise.

For example, if V is a π-vector space for some field π and f : V ββ[π] V then the minimal polynomial of f is minpoly π f.

Equations
theorem minpoly.monic {A : Type u_1} {B : Type u_2} [comm_ring A] [ring B] [ B] {x : B} (hx : x) :

A minimal polynomial is monic.

theorem minpoly.ne_zero {A : Type u_1} {B : Type u_2} [comm_ring A] [ring B] [ B] {x : B} [nontrivial A] (hx : x) :
x β  0

A minimal polynomial is nonzero.

theorem minpoly.eq_zero {A : Type u_1} {B : Type u_2} [comm_ring A] [ring B] [ B] {x : B} (hx : Β¬ x) :
x = 0
@[simp]
theorem minpoly.aeval (A : Type u_1) {B : Type u_2} [comm_ring A] [ring B] [ B] (x : B) :
(minpoly A x) = 0

An element is a root of its minimal polynomial.

theorem minpoly.ne_one (A : Type u_1) {B : Type u_2} [comm_ring A] [ring B] [ B] (x : B) [nontrivial B] :
x β  1

A minimal polynomial is not 1.

theorem minpoly.map_ne_one (A : Type u_1) {B : Type u_2} [comm_ring A] [ring B] [ B] (x : B) [nontrivial B] {R : Type u_3} [semiring R] [nontrivial R] (f : A β+* R) :
(minpoly A x) β  1
theorem minpoly.not_is_unit (A : Type u_1) {B : Type u_2} [comm_ring A] [ring B] [ B] (x : B) [nontrivial B] :

A minimal polynomial is not a unit.

theorem minpoly.mem_range_of_degree_eq_one (A : Type u_1) {B : Type u_2} [comm_ring A] [ring B] [ B] (x : B) (hx : (minpoly A x).degree = 1) :
theorem minpoly.min (A : Type u_1) {B : Type u_2} [comm_ring A] [ring B] [ B] (x : B) {p : polynomial A} (pmonic : p.monic) (hp : p = 0) :

The defining property of the minimal polynomial of an element x: it is the monic polynomial with smallest degree that has x as its root.

theorem minpoly.subsingleton (A : Type u_1) {B : Type u_2} [comm_ring A] [ring B] [ B] (x : B) [subsingleton B] :
x = 1
theorem minpoly.nat_degree_pos {A : Type u_1} {B : Type u_2} [comm_ring A] [ring B] [ B] [nontrivial B] {x : B} (hx : x) :

The degree of a minimal polynomial, as a natural number, is positive.

theorem minpoly.degree_pos {A : Type u_1} {B : Type u_2} [comm_ring A] [ring B] [ B] [nontrivial B] {x : B} (hx : x) :
0 < (minpoly A x).degree

The degree of a minimal polynomial is positive.

theorem minpoly.eq_X_sub_C_of_algebra_map_inj {A : Type u_1} {B : Type u_2} [comm_ring A] [ring B] [ B] [nontrivial B] (a : A) (hf : function.injective β B)) :
(β B) a) =

If B/A is an injective ring extension, and a is an element of A, then the minimal polynomial of algebra_map A B a is X - C a.

theorem minpoly.aeval_ne_zero_of_dvd_not_unit_minpoly {A : Type u_1} {B : Type u_2} [comm_ring A] [is_domain A] [ring B] [ B] {x : B} {a : polynomial A} (hx : x) (hamonic : a.monic) (hdvd : (minpoly A x)) :
a β  0

If a strictly divides the minimal polynomial of x, then x cannot be a root for a.

theorem minpoly.irreducible {A : Type u_1} {B : Type u_2} [comm_ring A] [is_domain A] [ring B] [ B] {x : B} [is_domain B] (hx : x) :

A minimal polynomial is irreducible.

theorem minpoly.degree_le_of_ne_zero (A : Type u_1) {B : Type u_2} [field A] [ring B] [ B] (x : B) {p : polynomial A} (pnz : p β  0) (hp : p = 0) :

If an element x is a root of a nonzero polynomial p, then the degree of p is at least the degree of the minimal polynomial of x. See also gcd_domain_degree_le_of_ne_zero which relaxes the assumptions on A in exchange for stronger assumptions on B.

theorem minpoly.ne_zero_of_finite_field_extension (A : Type u_1) {B : Type u_2} [field A] [ring B] [ B] (e : B) [ B] :
e β  0
theorem minpoly.unique (A : Type u_1) {B : Type u_2} [field A] [ring B] [ B] (x : B) {p : polynomial A} (pmonic : p.monic) (hp : p = 0) (pmin : β (q : , q.monic β q = 0 β p.degree β€ q.degree) :
p = x

The minimal polynomial of an element x is uniquely characterized by its defining property: if there is another monic polynomial of minimal degree that has x as a root, then this polynomial is equal to the minimal polynomial of x. See also minpoly.gcd_unique which relaxes the assumptions on A in exchange for stronger assumptions on B.

theorem minpoly.dvd (A : Type u_1) {B : Type u_2} [field A] [ring B] [ B] (x : B) {p : polynomial A} (hp : p = 0) :
x β£ p

If an element x is a root of a polynomial p, then the minimal polynomial of x divides p. See also minpoly.gcd_domain_dvd which relaxes the assumptions on A in exchange for stronger assumptions on B.

theorem minpoly.dvd_map_of_is_scalar_tower (A : Type u_1) (K : Type u_2) {R : Type u_3} [comm_ring A] [field K] [comm_ring R] [ K] [ R] [ R] [ R] (x : R) :
x β£ (minpoly A x)
theorem minpoly.aeval_of_is_scalar_tower (R : Type u_1) {K : Type u_2} {T : Type u_3} {U : Type u_4} [comm_ring R] [field K] [comm_ring T] [ K] [ T] [ T] [ T] [ U] [ U] [ U] (x : T) (y : U) (hy : (minpoly K x) = 0) :
(minpoly R x) = 0

If y is a conjugate of x over a field K, then it is a conjugate over a subring R.

theorem minpoly.eq_of_irreducible_of_monic {A : Type u_1} {B : Type u_2} [field A] [ring B] [ B] {x : B} [nontrivial B] {p : polynomial A} (hp1 : irreducible p) (hp2 : p = 0) (hp3 : p.monic) :
p = x
theorem minpoly.eq_of_irreducible {A : Type u_1} {B : Type u_2} [field A] [ring B] [ B] {x : B} [nontrivial B] {p : polynomial A} (hp1 : irreducible p) (hp2 : p = 0) :
= x
theorem minpoly.eq_of_algebra_map_eq {K : Type u_1} {S : Type u_2} {T : Type u_3} [field K] [comm_ring S] [comm_ring T] [ S] [ T] [ T] [ T] (hST : function.injective β T)) {x : S} {y : T} (hx : x) (h : y = β T) x) :
x = y

If y is the image of x in an extension, their minimal polynomials coincide.

We take h : y = algebra_map L T x as an argument because rw h typically fails since is_integral R y depends on y.

theorem minpoly.add_algebra_map {A : Type u_1} [field A] {B : Type u_2} [comm_ring B] [ B] {x : B} (hx : x) (a : A) :
(x + β B) a) = (minpoly A x).comp
theorem minpoly.sub_algebra_map {A : Type u_1} [field A] {B : Type u_2} [comm_ring B] [ B] {x : B} (hx : x) (a : A) :
(x - β B) a) = (minpoly A x).comp
noncomputable def minpoly.fintype.subtype_prod {E : Type u_1} {X : set E} (hX : X.finite) {L : Type u_2} (F : E β ) :
fintype (Ξ  (x : β₯X), {l // l β F βx})

A technical finiteness result.

Equations
def minpoly.roots_of_min_poly_pi_type (F : Type u_3) (E : Type u_4) (K : Type u_5) [field F] [ring E] [comm_ring K] [is_domain K] [ E] [ K] [ E] (Ο : E ββ[F] K) (x : β₯) :
{l // l β (polynomial.map K) (minpoly F x.val)).roots}

Function from Hom_K(E,L) to pi type Ξ  (x : basis), roots of min poly of x

Equations
theorem minpoly.aux_inj_roots_of_min_poly (F : Type u_3) (E : Type u_4) (K : Type u_5) [field F] [ring E] [comm_ring K] [is_domain K] [ E] [ K] [ E] :
@[protected, instance]
noncomputable def minpoly.alg_hom.fintype (F : Type u_3) (E : Type u_4) (K : Type u_5) [field F] [ring E] [comm_ring K] [is_domain K] [ E] [ K] [ E] :

Given field extensions E/F and K/F, with E/F finite, there are finitely many F-algebra homomorphisms E ββ[K] K.

Equations
theorem minpoly.gcd_domain_eq_field_fractions {R : Type u_3} {S : Type u_4} (K : Type u_5) (L : Type u_6) [comm_ring R] [is_domain R] [field K] [comm_ring S] [is_domain S] [ K] [ K] [ S] [field L] [ L] [ L] [ L] [ L] [ L] {s : S} (hs : s) :
(β L) s) = (minpoly R s)

For GCD domains, the minimal polynomial over the ring is the same as the minimal polynomial over the fraction field. See minpoly.gcd_domain_eq_field_fractions' if S is already a K-algebra.

theorem minpoly.gcd_domain_eq_field_fractions' {R : Type u_3} {S : Type u_4} (K : Type u_5) [comm_ring R] [is_domain R] [field K] [comm_ring S] [is_domain S] [ K] [ K] [ S] {s : S} (hs : s) [ S] [ S] :
s = (minpoly R s)

For GCD domains, the minimal polynomial over the ring is the same as the minimal polynomial over the fraction field. Compared to minpoly.gcd_domain_eq_field_fractions, this version is useful if the element is in a ring that is already a K-algebra.

theorem minpoly.gcd_domain_dvd {R : Type u_3} {S : Type u_4} [comm_ring R] [is_domain R] [comm_ring S] [is_domain S] [ S] {s : S} (hs : s) {P : polynomial R} (hP : P β  0) (hroot : P = 0) :
s β£ P

For GCD domains, the minimal polynomial divides any primitive polynomial that has the integral element as root. See also minpoly.dvd which relaxes the assumptions on S in exchange for stronger assumptions on R.

theorem minpoly.gcd_domain_degree_le_of_ne_zero {R : Type u_3} {S : Type u_4} [comm_ring R] [is_domain R] [comm_ring S] [is_domain S] [ S] {s : S} (hs : s) {p : polynomial R} (hp0 : p β  0) (hp : p = 0) :

If an element x is a root of a nonzero polynomial p, then the degree of p is at least the degree of the minimal polynomial of x. See also minpoly.degree_le_of_ne_zero which relaxes the assumptions on S in exchange for stronger assumptions on R.

theorem minpoly.gcd_domain_unique {R : Type u_3} {S : Type u_4} [comm_ring R] [is_domain R] [comm_ring S] [is_domain S] [ S] {s : S} {P : polynomial R} (hmo : P.monic) (hP : P = 0) (Pmin : β (Q : , Q.monic β Q = 0 β P.degree β€ Q.degree) :
P = s

The minimal polynomial of an element x is uniquely characterized by its defining property: if there is another monic polynomial of minimal degree that has x as a root, then this polynomial is equal to the minimal polynomial of x. See also minpoly.unique which relaxes the assumptions on S in exchange for stronger assumptions on R.

theorem minpoly.eq_X_sub_C {A : Type u_1} (B : Type u_2) [field A] [ring B] [ B] [nontrivial B] (a : A) :
(β B) a) =

If B/K is a nontrivial algebra over a field, and x is an element of K, then the minimal polynomial of algebra_map K B x is X - C x.

theorem minpoly.eq_X_sub_C' {A : Type u_1} [field A] (a : A) :
@[simp]
theorem minpoly.zero (A : Type u_1) (B : Type u_2) [field A] [ring B] [ B] [nontrivial B] :

The minimal polynomial of 0 is X.

@[simp]
theorem minpoly.one (A : Type u_1) (B : Type u_2) [field A] [ring B] [ B] [nontrivial B] :
1 =

The minimal polynomial of 1 is X - 1.

theorem minpoly.prime {A : Type u_1} {B : Type u_2} [field A] [ring B] [is_domain B] [ B] {x : B} (hx : x) :

A minimal polynomial is prime.

theorem minpoly.root {A : Type u_1} {B : Type u_2} [field A] [ring B] [is_domain B] [ B] {x : B} (hx : x) {y : A} (h : (minpoly A x).is_root y) :
β B) y = x

If L/K is a field extension and an element y of K is a root of the minimal polynomial of an element x β L, then y maps to x under the field embedding.

@[simp]
theorem minpoly.coeff_zero_eq_zero {A : Type u_1} {B : Type u_2} [field A] [ring B] [is_domain B] [ B] {x : B} (hx : x) :
(minpoly A x).coeff 0 = 0 β x = 0

The constant coefficient of the minimal polynomial of x is 0 if and only if x = 0.

theorem minpoly.coeff_zero_ne_zero {A : Type u_1} {B : Type u_2} [field A] [ring B] [is_domain B] [ B] {x : B} (hx : x) (h : x β  0) :
(minpoly A x).coeff 0 β  0

The minimal polynomial of a nonzero element has nonzero constant coefficient.