Split polynomials #
A polynomial f : R[X] splits if it is a product of constant and monic linear polynomials.
Main definitions #
Polynomial.Splits f: A predicate on a polynomialfsaying thatfis a product of constant and monic linear polynomials.
A polynomial Splits if it is a product of constant and monic linear polynomials.
This will eventually replace Polynomial.Splits.
Equations
- f.Splits = (f ∈ Submonoid.closure ({x : Polynomial R | ∃ (a : R), Polynomial.C a = x} ∪ {x : Polynomial R | ∃ (a : R), Polynomial.X + Polynomial.C a = x}))
Instances For
@[simp]
theorem
Polynomial.Splits.mul
{R : Type u_1}
[Semiring R]
{f g : Polynomial R}
(hf : f.Splits)
(hg : g.Splits)
:
theorem
Polynomial.Splits.C_mul
{R : Type u_1}
[Semiring R]
{f : Polynomial R}
(hf : f.Splits)
(a : R)
:
@[simp]
theorem
Polynomial.Splits.listProd
{R : Type u_1}
[Semiring R]
{l : List (Polynomial R)}
(h : ∀ f ∈ l, f.Splits)
:
@[simp]
theorem
Polynomial.Splits.pow
{R : Type u_1}
[Semiring R]
{f : Polynomial R}
(hf : f.Splits)
(n : ℕ)
:
@[simp]
theorem
Polynomial.Splits.monomial
{R : Type u_1}
[Semiring R]
(n : ℕ)
(a : R)
:
((Polynomial.monomial n) a).Splits
theorem
Polynomial.splits_of_natDegree_eq_zero
{R : Type u_1}
[Semiring R]
{f : Polynomial R}
(hf : f.natDegree = 0)
:
f.Splits
theorem
Polynomial.splits_of_degree_le_zero
{R : Type u_1}
[Semiring R]
{f : Polynomial R}
(hf : f.degree ≤ 0)
:
f.Splits
theorem
IsUnit.splits
{R : Type u_1}
[Semiring R]
[NoZeroDivisors R]
{f : Polynomial R}
(hf : IsUnit f)
:
f.Splits
@[deprecated IsUnit.splits (since := "2025-11-27")]
theorem
Polynomial.splits_of_isUnit
{R : Type u_1}
[Semiring R]
[NoZeroDivisors R]
{f : Polynomial R}
(hf : IsUnit f)
:
f.Splits
Alias of IsUnit.splits.
theorem
Polynomial.splits_of_natDegree_le_one_of_invertible
{R : Type u_1}
[Semiring R]
{f : Polynomial R}
(hf : f.natDegree ≤ 1)
(h : Invertible f.leadingCoeff)
:
f.Splits
theorem
Polynomial.splits_of_degree_le_one_of_invertible
{R : Type u_1}
[Semiring R]
{f : Polynomial R}
(hf : f.degree ≤ 1)
(h : Invertible f.leadingCoeff)
:
f.Splits
theorem
Polynomial.splits_of_natDegree_le_one_of_monic
{R : Type u_1}
[Semiring R]
{f : Polynomial R}
(hf : f.natDegree ≤ 1)
(h : f.Monic)
:
f.Splits
theorem
Polynomial.splits_of_degree_le_one_of_monic
{R : Type u_1}
[Semiring R]
{f : Polynomial R}
(hf : f.degree ≤ 1)
(h : f.Monic)
:
f.Splits
@[simp]
theorem
Polynomial.Splits.multisetProd
{R : Type u_1}
[CommSemiring R]
{m : Multiset (Polynomial R)}
(hm : ∀ f ∈ m, f.Splits)
:
@[simp]
theorem
Polynomial.Splits.prod
{R : Type u_1}
[CommSemiring R]
{ι : Type u_2}
{f : ι → Polynomial R}
{s : Finset ι}
(h : ∀ i ∈ s, (f i).Splits)
:
(∏ i ∈ s, f i).Splits
theorem
Polynomial.Splits.taylor
{R : Type u_1}
[CommSemiring R]
{p : Polynomial R}
(hp : p.Splits)
(r : R)
:
((Polynomial.taylor r) p).Splits
See splits_iff_exists_multiset for the version with subtraction.
theorem
Polynomial.Splits.natDegree_le_one_of_irreducible
{R : Type u_1}
[CommSemiring R]
{f : Polynomial R}
(hf : f.Splits)
(h : Irreducible f)
:
theorem
Polynomial.Splits.degree_le_one_of_irreducible
{R : Type u_1}
[CommSemiring R]
{f : Polynomial R}
(hf : f.Splits)
(h : Irreducible f)
:
theorem
Polynomial.Splits.comp_of_natDegree_le_one_of_invertible
{R : Type u_1}
[CommSemiring R]
{f g : Polynomial R}
(hf : f.Splits)
(hg : g.natDegree ≤ 1)
(h : Invertible g.leadingCoeff)
:
theorem
Polynomial.Splits.comp_of_degree_le_one_of_invertible
{R : Type u_1}
[CommSemiring R]
{f g : Polynomial R}
(hf : f.Splits)
(hg : g.degree ≤ 1)
(h : Invertible g.leadingCoeff)
:
theorem
Polynomial.Splits.comp_of_natDegree_le_one_of_monic
{R : Type u_1}
[CommSemiring R]
{f g : Polynomial R}
(hf : f.Splits)
(hg : g.natDegree ≤ 1)
(h : g.Monic)
:
theorem
Polynomial.Splits.comp_of_degree_le_one_of_monic
{R : Type u_1}
[CommSemiring R]
{f g : Polynomial R}
(hf : f.Splits)
(hg : g.degree ≤ 1)
(h : g.Monic)
:
theorem
Polynomial.Splits.comp_X_add_C
{R : Type u_1}
[CommSemiring R]
{f : Polynomial R}
(hf : f.Splits)
(a : R)
:
@[simp]
theorem
Polynomial.Splits.exists_eval_eq_zero
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
(hf : f.Splits)
(hf0 : f.degree ≠ 0)
:
noncomputable def
Polynomial.rootOfSplits
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
(hf : f.Splits)
(hfd : f.degree ≠ 0)
:
R
Pick a root of a polynomial that splits.
Equations
- Polynomial.rootOfSplits hf hfd = Classical.choose ⋯
Instances For
@[simp]
theorem
Polynomial.eval_rootOfSplits
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
(hf : f.Splits)
(hfd : f.degree ≠ 0)
:
theorem
Polynomial.Splits.eq_prod_roots
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
[IsDomain R]
(hf : f.Splits)
:
theorem
Polynomial.Splits.eq_prod_roots_of_monic
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
[IsDomain R]
(hf : f.Splits)
(hm : f.Monic)
:
theorem
Polynomial.Splits.eval_eq_prod_roots
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
[IsDomain R]
(hf : f.Splits)
(x : R)
:
theorem
Polynomial.Splits.eval_eq_prod_roots_of_monic
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
[IsDomain R]
(hf : f.Splits)
(hm : f.Monic)
(x : R)
:
theorem
Polynomial.Splits.aeval_eq_prod_aroots
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
{A : Type u_2}
[CommRing A]
[IsDomain A]
[IsSimpleRing R]
[Algebra R A]
(hf : (map (algebraMap R A) f).Splits)
(x : A)
:
(aeval x) f = (algebraMap R A) f.leadingCoeff * (Multiset.map (fun (x_1 : A) => x - x_1) (f.aroots A)).prod
theorem
Polynomial.Splits.aeval_eq_prod_aroots_of_monic
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
{A : Type u_2}
[CommRing A]
[IsDomain A]
[IsSimpleRing R]
[Algebra R A]
(hf : (map (algebraMap R A) f).Splits)
(hm : f.Monic)
(x : A)
:
theorem
Polynomial.Splits.eval_derivative
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
[IsDomain R]
[DecidableEq R]
(hf : f.Splits)
(x : R)
:
eval x (derivative f) = f.leadingCoeff * (Multiset.map (fun (a : R) => (Multiset.map (fun (x_1 : R) => x - x_1) (f.roots.erase a)).prod) f.roots).sum
theorem
Polynomial.Splits.eval_root_derivative
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
[IsDomain R]
[DecidableEq R]
(hf : f.Splits)
(hm : f.Monic)
{x : R}
(hx : x ∈ f.roots)
:
Let f be a monic polynomial over that splits. Let x be a root of f.
Then $f'(r) = \prod_{a}(x-a)$, where the product in the RHS is taken over all roots of f,
with the multiplicity of x reduced by one.
theorem
Polynomial.Splits.map_roots
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
[IsDomain R]
{S : Type u_2}
[CommRing S]
[IsDomain S]
[IsSimpleRing R]
(hf : f.Splits)
(i : R →+* S)
:
theorem
Polynomial.Splits.image_rootSet
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
{A : Type u_2}
{B : Type u_3}
[CommRing A]
[CommRing B]
[IsDomain A]
[IsDomain B]
[IsSimpleRing A]
[Algebra R A]
[Algebra R B]
(hf : (map (algebraMap R A) f).Splits)
(g : A →ₐ[R] B)
:
theorem
Polynomial.Splits.adjoin_rootSet_eq_range
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
{A : Type u_2}
{B : Type u_3}
[CommRing A]
[CommRing B]
[IsDomain A]
[IsDomain B]
[IsSimpleRing A]
[Algebra R A]
[Algebra R B]
(hf : (map (algebraMap R A) f).Splits)
(g : A →ₐ[R] B)
:
theorem
Polynomial.Splits.nextCoeff_eq_neg_sum_roots_mul_leadingCoeff
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
[IsDomain R]
(hf : f.Splits)
:
theorem
Polynomial.Splits.splits_of_dvd
{R : Type u_1}
[CommRing R]
{f g : Polynomial R}
[IsDomain R]
(hg : g.Splits)
(hg₀ : g ≠ 0)
(hfg : f ∣ g)
:
f.Splits
@[deprecated Polynomial.Splits.splits_of_dvd (since := "2025-11-27")]
theorem
Polynomial.Splits.of_dvd
{R : Type u_1}
[CommRing R]
{f g : Polynomial R}
[IsDomain R]
(hg : g.Splits)
(hg₀ : g ≠ 0)
(hfg : f ∣ g)
:
f.Splits
Alias of Polynomial.Splits.splits_of_dvd.
theorem
Polynomial.Splits.splits
{R : Type u_1}
[CommRing R]
{f : Polynomial R}
[IsDomain R]
(hf : f.Splits)
:
theorem
Polynomial.map_sub_sprod_roots_eq_prod_map_eval
{R : Type u_1}
[CommRing R]
[IsDomain R]
(s : Multiset R)
(g : Polynomial R)
(hg : g.Monic)
(hg' : g.Splits)
:
(Multiset.map (fun (ij : R × R) => ij.1 - ij.2) (s ×ˢ g.roots)).prod = (Multiset.map (fun (x : R) => eval x g) s).prod
theorem
Polynomial.map_sub_roots_sprod_eq_prod_map_eval
{R : Type u_1}
[CommRing R]
[IsDomain R]
(s : Multiset R)
(g : Polynomial R)
(hg : g.Monic)
(hg' : g.Splits)
:
theorem
Polynomial.Splits.of_natDegree_le_one
{R : Type u_1}
[DivisionSemiring R]
{f : Polynomial R}
(hf : f.natDegree ≤ 1)
:
f.Splits
theorem
Polynomial.Splits.of_natDegree_eq_one
{R : Type u_1}
[DivisionSemiring R]
{f : Polynomial R}
(hf : f.natDegree = 1)
:
f.Splits
theorem
Polynomial.Splits.of_degree_le_one
{R : Type u_1}
[DivisionSemiring R]
{f : Polynomial R}
(hf : f.degree ≤ 1)
:
f.Splits
theorem
Polynomial.Splits.of_degree_eq_one
{R : Type u_1}
[DivisionSemiring R]
{f : Polynomial R}
(hf : f.degree = 1)
:
f.Splits
theorem
Polynomial.Splits.comp_of_natDegree_le_one
{R : Type u_1}
[Field R]
{f g : Polynomial R}
(hf : f.Splits)
(hg : g.natDegree ≤ 1)
:
theorem
Polynomial.Splits.comp_of_degree_le_one
{R : Type u_1}
[Field R]
{f g : Polynomial R}
(hf : f.Splits)
(hg : g.degree ≤ 1)
:
theorem
Polynomial.Splits.degree_eq_one_of_irreducible
{R : Type u_1}
[Field R]
{f : Polynomial R}
(hf : f.Splits)
(h : Irreducible f)
:
theorem
Polynomial.Splits.natDegree_eq_one_of_irreducible
{R : Type u_1}
[Field R]
{f : Polynomial R}
(hf : f.Splits)
(h : Irreducible f)
:
theorem
Polynomial.Splits.eval_derivative_eq_eval_mul_sum
{R : Type u_1}
[Field R]
{f : Polynomial R}
(hf : f.Splits)
{x : R}
(hx : eval x f ≠ 0)
:
theorem
Polynomial.Splits.eval_derivative_div_eval_of_ne_zero
{R : Type u_1}
[Field R]
{f : Polynomial R}
(hf : f.Splits)
{x : R}
(hx : eval x f ≠ 0)
: