Theory of degrees of polynomials #
Some of the main results include
natDegree_comp_le: The degree of the composition is at most the product of degrees
theorem Polynomial.natDegree_comp_eq_of_mul_ne_zero {R : Type u} [Semiring R] {p q : Polynomial R} (h : p.leadingCoeff * q.leadingCoeff ^ p.natDegree ≠ 0) :
theorem Polynomial.degree_pos_of_root {R : Type u} {a : R} [Semiring R] {p : Polynomial R} (hp : p ≠ 0) (h : p.IsRoot a) :
theorem Polynomial.natDegree_mul_C_eq_of_mul_ne_zero {R : Type u} {a : R} [Semiring R] {p : Polynomial R} (h : p.leadingCoeff * a ≠ 0) :
Although not explicitly stated, the assumptions of lemma natDegree_mul_C_eq_of_mul_ne_zero
force the polynomial p to be non-zero, via p.leadingCoeff ≠ 0.
theorem Polynomial.natDegree_C_mul_of_mul_ne_zero {R : Type u} {a : R} [Semiring R] {p : Polynomial R} (h : a * p.leadingCoeff ≠ 0) :
Although not explicitly stated, the assumptions of lemma natDegree_C_mul_of_mul_ne_zero
force the polynomial p to be non-zero, via p.leadingCoeff ≠ 0.
theorem Polynomial.degree_C_mul_of_mul_ne_zero {R : Type u} {a : R} [Semiring R] {p : Polynomial R} (h : a * p.leadingCoeff ≠ 0) :
theorem Polynomial.degree_map_eq_of_isUnit_leadingCoeff {R : Type u} {S : Type v} [Semiring R] {p : Polynomial R} [Semiring S] [Nontrivial S] (f : R →+* S) (hp : IsUnit p.leadingCoeff) :
theorem Polynomial.natDegree_map_eq_of_isUnit_leadingCoeff {R : Type u} {S : Type v} [Semiring R] {p : Polynomial R} [Semiring S] [Nontrivial S] (f : R →+* S) (hp : IsUnit p.leadingCoeff) :
theorem Polynomial.leadingCoeff_map_eq_of_isUnit_leadingCoeff {R : Type u} {S : Type v} [Semiring R] {p : Polynomial R} [Semiring S] [Nontrivial S] (f : R →+* S) (hp : IsUnit p.leadingCoeff) :
theorem Polynomial.nextCoeff_map_eq_of_isUnit_leadingCoeff {R : Type u} {S : Type v} [Semiring R] {p : Polynomial R} [Semiring S] [Nontrivial S] (f : R →+* S) (hp : IsUnit p.leadingCoeff) :
theorem Polynomial.degree_map_eq_of_injective {R : Type u} {S : Type v} [Semiring R] [Semiring S] {f : R →+* S} (hf : Function.Injective ⇑f) (p : Polynomial R) :
theorem Polynomial.natDegree_map_eq_of_injective {R : Type u} {S : Type v} [Semiring R] [Semiring S] {f : R →+* S} (hf : Function.Injective ⇑f) (p : Polynomial R) :
theorem Polynomial.leadingCoeff_map_of_injective {R : Type u} {S : Type v} [Semiring R] [Semiring S] {f : R →+* S} (hf : Function.Injective ⇑f) (p : Polynomial R) :
theorem Polynomial.nextCoeff_map {R : Type u} {S : Type v} [Semiring R] [Semiring S] {f : R →+* S} (hf : Function.Injective ⇑f) (p : Polynomial R) :
theorem Polynomial.natDegree_pos_of_nextCoeff_ne_zero {R : Type u} [Semiring R] {p : Polynomial R} (h : p.nextCoeff ≠ 0) :
theorem Polynomial.subsingleton_isRoot_of_natDegree_eq_one {R : Type u} [Semiring R] {p : Polynomial R} [IsLeftCancelMulZero R] (h : p.natDegree = 1) :
theorem Polynomial.degree_mul_C {R : Type u} [Semiring R] {p : Polynomial R} {a : R} [NoZeroDivisors R] (a0 : a ≠ 0) :
theorem Polynomial.degree_C_mul {R : Type u} [Semiring R] {p : Polynomial R} {a : R} [NoZeroDivisors R] (a0 : a ≠ 0) :
theorem Polynomial.natDegree_mul_C {R : Type u} [Semiring R] {p : Polynomial R} {a : R} [NoZeroDivisors R] (a0 : a ≠ 0) :
theorem Polynomial.natDegree_C_mul {R : Type u} [Semiring R] {p : Polynomial R} {a : R} [NoZeroDivisors R] (a0 : a ≠ 0) :
theorem Polynomial.natDegree_comp {R : Type u} [Semiring R] {p q : Polynomial R} [NoZeroDivisors R] :
theorem Polynomial.leadingCoeff_comp {R : Type u} [Semiring R] {p q : Polynomial R} [NoZeroDivisors R] (hq : q.natDegree ≠ 0) :
@[simp]
theorem Polynomial.nextCoeff_C_mul {R : Type u} [Semiring R] {p : Polynomial R} {a : R} [NoZeroDivisors R] :
@[simp]
theorem Polynomial.nextCoeff_mul_C {R : Type u} [Semiring R] {p : Polynomial R} {a : R} [NoZeroDivisors R] :
@[simp]
theorem Polynomial.degree_comp {R : Type u} [Semiring R] [NoZeroDivisors R] {p q : Polynomial R} (hq : 0 < q.degree) :
Useful lemmas for the "monicization" of a nonzero polynomial p.
@[simp]
theorem Polynomial.irreducible_mul_leadingCoeff_inv {K : Type u_1} [DivisionRing K] {p : Polynomial K} :
theorem Polynomial.dvd_mul_leadingCoeff_inv {K : Type u_1} [DivisionRing K] {p q : Polynomial K} (hp0 : p ≠ 0) :
theorem Polynomial.monic_mul_leadingCoeff_inv {K : Type u_1} [DivisionRing K] {p : Polynomial K} (h : p ≠ 0) :
(p * C p.leadingCoeff⁻¹).Monic
theorem Polynomial.degree_leadingCoeff_inv {K : Type u_1} [DivisionRing K] {p : Polynomial K} (hp0 : p ≠ 0) :
theorem Polynomial.degree_mul_leadingCoeff_inv {K : Type u_1} [DivisionRing K] (p : Polynomial K) {q : Polynomial K} (h : q ≠ 0) :
theorem Polynomial.natDegree_mul_leadingCoeff_inv {K : Type u_1} [DivisionRing K] (p : Polynomial K) {q : Polynomial K} (h : q ≠ 0) :
theorem Polynomial.degree_mul_leadingCoeff_self_inv {K : Type u_1} [DivisionRing K] (p : Polynomial K) :
theorem Polynomial.natDegree_mul_leadingCoeff_self_inv {K : Type u_1} [DivisionRing K] (p : Polynomial K) :
@[simp]
theorem Polynomial.degree_add_degree_leadingCoeff_inv {K : Type u_1} [DivisionRing K] (p : Polynomial K) :