# mathlib3documentation

data.polynomial.splits

# Split polynomials #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

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.

## Main definitions #

• polynomial.splits i f: A predicate on a homomorphism i : K →+* L from a commutative ring to a field and a polynomial f saying that f.map i is zero or all of its irreducible factors over L have degree 1.

## Main statements #

• lift_of_splits: If K and L are field extensions of a field F and for some finite subset S of K, the minimal polynomial of every x ∈ K splits as a polynomial with coefficients in L, then algebra.adjoin F S embeds into L.
def polynomial.splits {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) (f : polynomial K) :
Prop

A polynomial splits iff it is zero or all of its irreducible factors have degree 1.

Equations
@[simp]
theorem polynomial.splits_zero {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) :
theorem polynomial.splits_of_map_eq_C {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} {a : L} (h : = ) :
@[simp]
theorem polynomial.splits_C {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) (a : K) :
theorem polynomial.splits_of_map_degree_eq_one {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hf : f).degree = 1) :
theorem polynomial.splits_of_degree_le_one {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hf : f.degree 1) :
theorem polynomial.splits_of_degree_eq_one {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hf : f.degree = 1) :
theorem polynomial.splits_of_nat_degree_le_one {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hf : f.nat_degree 1) :
theorem polynomial.splits_of_nat_degree_eq_one {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hf : f.nat_degree = 1) :
theorem polynomial.splits_mul {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f g : polynomial K} (hf : f) (hg : g) :
(f * g)
theorem polynomial.splits_of_splits_mul' {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f g : polynomial K} (hfg : (f * g) 0) (h : (f * g)) :
theorem polynomial.splits_map_iff {F : Type u} {K : Type v} {L : Type w} [comm_ring K] [field L] [field F] (i : K →+* L) (j : L →+* F) {f : polynomial K} :
theorem polynomial.splits_one {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) :
theorem polynomial.splits_of_is_unit {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) [is_domain K] {u : polynomial K} (hu : is_unit u) :
theorem polynomial.splits_X_sub_C {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {x : K} :
theorem polynomial.splits_X {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) :
theorem polynomial.splits_prod {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {ι : Type u} {s : ι } {t : finset ι} :
( (j : ι), j t (s j)) (t.prod (λ (x : ι), s x))
theorem polynomial.splits_pow {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hf : f) (n : ) :
(f ^ n)
theorem polynomial.splits_X_pow {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) (n : ) :
theorem polynomial.splits_id_iff_splits {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} :
f)
theorem polynomial.exists_root_of_splits' {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hs : f) (hf0 : f).degree 0) :
(x : L), f = 0
theorem polynomial.roots_ne_zero_of_splits' {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hs : f) (hf0 : f).nat_degree 0) :
f).roots 0
noncomputable def polynomial.root_of_splits' {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hf : f) (hfd : f).degree 0) :
L

Pick a root of a polynomial that splits. See root_of_splits for polynomials over a field which has simpler assumptions.

Equations
• hfd =
theorem polynomial.map_root_of_splits' {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hf : f) (hfd : f).degree 0) :
hfd) f = 0
theorem polynomial.nat_degree_eq_card_roots' {K : Type v} {L : Type w} [comm_ring K] [field L] {p : polynomial K} {i : K →+* L} (hsplit : p) :
theorem polynomial.degree_eq_card_roots' {K : Type v} {L : Type w} [comm_ring K] [field L] {p : polynomial K} {i : K →+* L} (p_ne_zero : 0) (hsplit : p) :
theorem polynomial.splits_iff {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) (f : polynomial K) :
f = 0 {g : , g g.degree = 1

This lemma is for polynomials over a field.

theorem polynomial.splits.def {K : Type v} {L : Type w} [field K] [field L] {i : K →+* L} {f : polynomial K} (h : f) :
f = 0 {g : , g g.degree = 1

This lemma is for polynomials over a field.

theorem polynomial.splits_of_splits_mul {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f g : polynomial K} (hfg : f * g 0) (h : (f * g)) :
theorem polynomial.splits_of_splits_of_dvd {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f g : polynomial K} (hf0 : f 0) (hf : f) (hgf : g f) :
theorem polynomial.splits_of_splits_gcd_left {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f g : polynomial K} (hf0 : f 0) (hf : f) :
theorem polynomial.splits_of_splits_gcd_right {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f g : polynomial K} (hg0 : g 0) (hg : g) :
theorem polynomial.splits_mul_iff {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f g : polynomial K} (hf : f 0) (hg : g 0) :
(f * g)
theorem polynomial.splits_prod_iff {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {ι : Type u} {s : ι } {t : finset ι} :
( (j : ι), j t s j 0) (t.prod (λ (x : ι), s x)) (j : ι), j t (s j))
theorem polynomial.degree_eq_one_of_irreducible_of_splits {K : Type v} [field K] {p : polynomial K} (hp : irreducible p) (hp_splits : p) :
p.degree = 1
theorem polynomial.exists_root_of_splits {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} (hs : f) (hf0 : f.degree 0) :
(x : L), f = 0
theorem polynomial.roots_ne_zero_of_splits {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} (hs : f) (hf0 : f.nat_degree 0) :
f).roots 0
noncomputable def polynomial.root_of_splits {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} (hf : f) (hfd : f.degree 0) :
L

Pick a root of a polynomial that splits. This version is for polynomials over a field and has simpler assumptions.

Equations
• hfd =
theorem polynomial.root_of_splits'_eq_root_of_splits {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} (hf : f) (hfd : f).degree 0) :
hfd =

root_of_splits' is definitionally equal to root_of_splits.

theorem polynomial.map_root_of_splits {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} (hf : f) (hfd : f.degree 0) :
hfd) f = 0
theorem polynomial.nat_degree_eq_card_roots {K : Type v} {L : Type w} [field K] [field L] {p : polynomial K} {i : K →+* L} (hsplit : p) :
theorem polynomial.degree_eq_card_roots {K : Type v} {L : Type w} [field K] [field L] {p : polynomial K} {i : K →+* L} (p_ne_zero : p 0) (hsplit : p) :
theorem polynomial.roots_map {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} (hf : f) :
f).roots =
theorem polynomial.image_root_set {F : Type u} {K : Type v} {L : Type w} [field K] [field L] [field F] [ K] [ L] {p : polynomial F} (h : p) (f : K →ₐ[F] L) :
theorem polynomial.adjoin_root_set_eq_range {F : Type u} {K : Type v} {L : Type w} [field K] [field L] [field F] [ K] [ L] {p : polynomial F} (h : p) (f : K →ₐ[F] L) :
(p.root_set L) = f.range (p.root_set K) =
theorem polynomial.eq_prod_roots_of_splits {K : Type v} {L : Type w} [field K] [field L] {p : polynomial K} {i : K →+* L} (hsplit : p) :
= * (multiset.map (λ (a : L), p).roots).prod
theorem polynomial.eq_prod_roots_of_splits_id {K : Type v} [field K] {p : polynomial K} (hsplit : p) :
p = * (multiset.map (λ (a : K), p.roots).prod
theorem polynomial.eq_prod_roots_of_monic_of_splits_id {K : Type v} [field K] {p : polynomial K} (m : p.monic) (hsplit : p) :
p = (multiset.map (λ (a : K), p.roots).prod
theorem polynomial.eq_X_sub_C_of_splits_of_single_root {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {x : K} {h : polynomial K} (h_splits : h) (h_roots : h).roots = {i x}) :
theorem polynomial.mem_lift_of_splits_of_roots_mem_range {K : Type v} [field K] (R : Type u_1) [comm_ring R] [ K] {f : polynomial K} (hs : f) (hm : f.monic) (hr : (a : K), a f.roots a K).range) :
f
theorem polynomial.splits_of_exists_multiset {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} {s : multiset L} (hs : = * (multiset.map (λ (a : L), s).prod) :
theorem polynomial.splits_of_splits_id {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} :
theorem polynomial.splits_iff_exists_multiset {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} :
(s : multiset L), = * (multiset.map (λ (a : L), s).prod
theorem polynomial.splits_comp_of_splits {F : Type u} {K : Type v} {L : Type w} [field K] [field L] [field F] (i : K →+* L) (j : L →+* F) {f : polynomial K} (h : f) :
theorem polynomial.splits_iff_card_roots {K : Type v} [field K] {p : polynomial K} :

A polynomial splits if and only if it has as many roots as its degree.

theorem polynomial.aeval_root_derivative_of_splits {K : Type v} {L : Type w} [field K] [field L] [ L] {P : polynomial K} (hmo : P.monic) (hP : P) {r : L} (hr : r (polynomial.map L) P).roots) :
= (multiset.map (λ (a : L), r - a) ((polynomial.map L) P).roots.erase r)).prod
theorem polynomial.prod_roots_eq_coeff_zero_of_monic_of_split {K : Type v} [field K] {P : polynomial K} (hmo : P.monic) (hP : P) :
P.coeff 0 = (-1) ^ P.nat_degree * P.roots.prod

If P is a monic polynomial that splits, then coeff P 0 equals the product of the roots.

theorem polynomial.sum_roots_eq_next_coeff_of_monic_of_split {K : Type v} [field K] {P : polynomial K} (hmo : P.monic) (hP : P) :

If P is a monic polynomial that splits, then P.next_coeff equals the sum of the roots.