mathlib3 documentation

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 #

Main statements #

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 : polynomial.map i f = polynomial.C a) :
@[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 : (polynomial.map i 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 : polynomial.splits i f) (hg : polynomial.splits i 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 : polynomial.map i (f * g) 0) (h : polynomial.splits i (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 : ι polynomial K} {t : finset ι} :
( (j : ι), j t polynomial.splits i (s j)) polynomial.splits i (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 : polynomial.splits i f) (n : ) :
theorem polynomial.splits_X_pow {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) (n : ) :
theorem polynomial.exists_root_of_splits' {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hs : polynomial.splits i f) (hf0 : (polynomial.map i f).degree 0) :
(x : L), polynomial.eval₂ i x 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 : polynomial.splits i f) (hf0 : (polynomial.map i f).nat_degree 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 : polynomial.splits i f) (hfd : (polynomial.map i 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
theorem polynomial.map_root_of_splits' {K : Type v} {L : Type w} [comm_ring K] [field L] (i : K →+* L) {f : polynomial K} (hf : polynomial.splits i f) (hfd : (polynomial.map i f).degree 0) :
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 : polynomial.map i p 0) (hsplit : polynomial.splits i p) :
theorem polynomial.splits_iff {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) (f : polynomial K) :

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 : polynomial.splits i f) :

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 : polynomial.splits i (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 : polynomial.splits i 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 : polynomial.splits i 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 : polynomial.splits i 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) :
theorem polynomial.splits_prod_iff {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {ι : Type u} {s : ι polynomial K} {t : finset ι} :
( (j : ι), j t s j 0) (polynomial.splits i (t.prod (λ (x : ι), s x)) (j : ι), j t polynomial.splits i (s j))
theorem polynomial.exists_root_of_splits {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} (hs : polynomial.splits i f) (hf0 : f.degree 0) :
(x : L), polynomial.eval₂ i x 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 : polynomial.splits i f) (hf0 : f.nat_degree 0) :
noncomputable def polynomial.root_of_splits {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} (hf : polynomial.splits i 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

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 : polynomial.splits i f) (hfd : f.degree 0) :
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 : polynomial.splits i p) :
theorem polynomial.roots_map {K : Type v} {L : Type w} [field K] [field L] (i : K →+* L) {f : polynomial K} (hf : polynomial.splits (ring_hom.id K) f) :
theorem polynomial.image_root_set {F : Type u} {K : Type v} {L : Type w} [field K] [field L] [field F] [algebra F K] [algebra F L] {p : polynomial F} (h : polynomial.splits (algebra_map F K) 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] [algebra F K] [algebra F L] {p : polynomial F} (h : polynomial.splits (algebra_map F K) p) (f : K →ₐ[F] L) :
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 : polynomial.splits i h) (h_roots : (polynomial.map i 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] [algebra R K] {f : polynomial K} (hs : polynomial.splits (ring_hom.id K) f) (hm : f.monic) (hr : (a : K), a f.roots a (algebra_map R K).range) :
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 : polynomial.splits i f) :

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] [algebra K L] {P : polynomial K} (hmo : P.monic) (hP : polynomial.splits (algebra_map K L) P) {r : L} (hr : r (polynomial.map (algebra_map K L) P).roots) :

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

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