Documentation

Mathlib.Data.Polynomial.Degree.Definitions

Theory of univariate polynomials #

The definitions include degree, Monic, leadingCoeff

Results include

degree p is the degree of the polynomial p, i.e. the largest X-exponent in p. degree p = some n when p ≠ 0 and n is the highest power of X that appears in p, otherwise degree 0 = ⊥.

Equations
Equations

natDegree p forces degree p to ℕ, by defining natDegree 0 = 0.

Equations
def Polynomial.leadingCoeff {R : Type u} [Semiring R] (p : Polynomial R) :
R

leadingCoeff p gives the coefficient of the highest power of X in p

Equations
def Polynomial.Monic {R : Type u} [Semiring R] (p : Polynomial R) :

a polynomial is Monic if its leading coefficient is 1

Equations
Instances For
Equations
  • Polynomial.Monic.decidable = id inferInstance
@[simp]
theorem Polynomial.degree_C {R : Type u} {a : R} [Semiring R] (ha : a 0) :
Polynomial.degree (Polynomial.C a) = 0
theorem Polynomial.degree_C_le {R : Type u} {a : R} [Semiring R] :
Polynomial.degree (Polynomial.C a) 0
theorem Polynomial.degree_C_lt {R : Type u} {a : R} [Semiring R] :
Polynomial.degree (Polynomial.C a) < 1
@[simp]
theorem Polynomial.natDegree_C {R : Type u} [Semiring R] (a : R) :
Polynomial.natDegree (Polynomial.C a) = 0
@[simp]
theorem Polynomial.degree_monomial {R : Type u} {a : R} [Semiring R] (n : ) (ha : a 0) :
@[simp]
theorem Polynomial.degree_C_mul_X_pow {R : Type u} {a : R} [Semiring R] (n : ) (ha : a 0) :
Polynomial.degree (Polynomial.C a * Polynomial.X ^ n) = n
theorem Polynomial.degree_C_mul_X {R : Type u} {a : R} [Semiring R] (ha : a 0) :
Polynomial.degree (Polynomial.C a * Polynomial.X) = 1
theorem Polynomial.degree_C_mul_X_pow_le {R : Type u} [Semiring R] (n : ) (a : R) :
Polynomial.degree (Polynomial.C a * Polynomial.X ^ n) n
theorem Polynomial.degree_C_mul_X_le {R : Type u} [Semiring R] (a : R) :
Polynomial.degree (Polynomial.C a * Polynomial.X) 1
@[simp]
theorem Polynomial.natDegree_C_mul_X_pow {R : Type u} [Semiring R] (n : ) (a : R) (ha : a 0) :
Polynomial.natDegree (Polynomial.C a * Polynomial.X ^ n) = n
@[simp]
theorem Polynomial.natDegree_C_mul_X {R : Type u} [Semiring R] (a : R) (ha : a 0) :
Polynomial.natDegree (Polynomial.C a * Polynomial.X) = 1
@[simp]
theorem Polynomial.natDegree_monomial {R : Type u} [Semiring R] [DecidableEq R] (i : ) (r : R) :
Polynomial.natDegree ((Polynomial.monomial i) r) = if r = 0 then 0 else i
theorem Polynomial.ext_iff_natDegree_le {R : Type u} [Semiring R] {p : Polynomial R} {q : Polynomial R} {n : } (hp : Polynomial.natDegree p n) (hq : Polynomial.natDegree q n) :
p = q in, Polynomial.coeff p i = Polynomial.coeff q i
theorem Polynomial.ext_iff_degree_le {R : Type u} [Semiring R] {p : Polynomial R} {q : Polynomial R} {n : } (hp : Polynomial.degree p n) (hq : Polynomial.degree q n) :
p = q in, Polynomial.coeff p i = Polynomial.coeff q i
theorem Polynomial.as_sum_support_C_mul_X_pow {R : Type u} [Semiring R] (p : Polynomial R) :
p = Finset.sum (Polynomial.support p) fun (i : ) => Polynomial.C (Polynomial.coeff p i) * Polynomial.X ^ i
theorem Polynomial.sum_over_range' {R : Type u} {S : Type v} [Semiring R] [AddCommMonoid S] (p : Polynomial R) {f : RS} (h : ∀ (n : ), f n 0 = 0) (n : ) (w : Polynomial.natDegree p < n) :

We can reexpress a sum over p.support as a sum over range n, for any n satisfying p.natDegree < n.

theorem Polynomial.sum_over_range {R : Type u} {S : Type v} [Semiring R] [AddCommMonoid S] (p : Polynomial R) {f : RS} (h : ∀ (n : ), f n 0 = 0) :

We can reexpress a sum over p.support as a sum over range (p.natDegree + 1).

theorem Polynomial.sum_fin {R : Type u} {S : Type v} [Semiring R] [AddCommMonoid S] (f : RS) (hf : ∀ (i : ), f i 0 = 0) {n : } {p : Polynomial R} (hn : Polynomial.degree p < n) :
(Finset.sum Finset.univ fun (i : Fin n) => f (i) (Polynomial.coeff p i)) = Polynomial.sum p f
theorem Polynomial.as_sum_range_C_mul_X_pow {R : Type u} [Semiring R] (p : Polynomial R) :
p = Finset.sum (Finset.range (Polynomial.natDegree p + 1)) fun (i : ) => Polynomial.C (Polynomial.coeff p i) * Polynomial.X ^ i
theorem Polynomial.eq_X_add_C_of_degree_le_one {R : Type u} [Semiring R] {p : Polynomial R} (h : Polynomial.degree p 1) :
p = Polynomial.C (Polynomial.coeff p 1) * Polynomial.X + Polynomial.C (Polynomial.coeff p 0)
theorem Polynomial.eq_X_add_C_of_degree_eq_one {R : Type u} [Semiring R] {p : Polynomial R} (h : Polynomial.degree p = 1) :
p = Polynomial.C (Polynomial.leadingCoeff p) * Polynomial.X + Polynomial.C (Polynomial.coeff p 0)
theorem Polynomial.eq_X_add_C_of_natDegree_le_one {R : Type u} [Semiring R] {p : Polynomial R} (h : Polynomial.natDegree p 1) :
p = Polynomial.C (Polynomial.coeff p 1) * Polynomial.X + Polynomial.C (Polynomial.coeff p 0)
theorem Polynomial.Monic.eq_X_add_C {R : Type u} [Semiring R] {p : Polynomial R} (hm : Polynomial.Monic p) (hnd : Polynomial.natDegree p = 1) :
p = Polynomial.X + Polynomial.C (Polynomial.coeff p 0)
theorem Polynomial.exists_eq_X_add_C_of_natDegree_le_one {R : Type u} [Semiring R] {p : Polynomial R} (h : Polynomial.natDegree p 1) :
∃ (a : R) (b : R), p = Polynomial.C a * Polynomial.X + Polynomial.C b
theorem Polynomial.degree_X_pow_le {R : Type u} [Semiring R] (n : ) :
Polynomial.degree (Polynomial.X ^ n) n
theorem Polynomial.degree_X_le {R : Type u} [Semiring R] :
Polynomial.degree Polynomial.X 1
theorem Polynomial.mem_support_C_mul_X_pow {R : Type u} [Semiring R] {n : } {a : } {c : R} (h : a Polynomial.support (Polynomial.C c * Polynomial.X ^ n)) :
a = n
theorem Polynomial.card_support_C_mul_X_pow_le_one {R : Type u} [Semiring R] {c : R} {n : } :
(Polynomial.support (Polynomial.C c * Polynomial.X ^ n)).card 1
@[simp]
theorem Polynomial.degree_X {R : Type u} [Semiring R] [Nontrivial R] :
Polynomial.degree Polynomial.X = 1
@[simp]
theorem Polynomial.natDegree_X {R : Type u} [Semiring R] [Nontrivial R] :
Polynomial.natDegree Polynomial.X = 1
theorem Polynomial.coeff_mul_X_sub_C {R : Type u} [Ring R] {p : Polynomial R} {r : R} {a : } :
Polynomial.coeff (p * (Polynomial.X - Polynomial.C r)) (a + 1) = Polynomial.coeff p a - Polynomial.coeff p (a + 1) * r
@[simp]
def Polynomial.nextCoeff {R : Type u} [Semiring R] (p : Polynomial R) :
R

The second-highest coefficient, or 0 for constants

Equations
@[simp]
theorem Polynomial.nextCoeff_C_eq_zero {R : Type u} [Semiring R] (c : R) :
Polynomial.nextCoeff (Polynomial.C c) = 0
theorem Polynomial.eq_C_of_degree_le_zero {R : Type u} [Semiring R] {p : Polynomial R} (h : Polynomial.degree p 0) :
p = Polynomial.C (Polynomial.coeff p 0)
theorem Polynomial.eq_C_of_degree_eq_zero {R : Type u} [Semiring R] {p : Polynomial R} (h : Polynomial.degree p = 0) :
p = Polynomial.C (Polynomial.coeff p 0)
theorem Polynomial.degree_add_le_of_degree_le {R : Type u} [Semiring R] {p : Polynomial R} {q : Polynomial R} {n : } (hp : Polynomial.degree p n) (hq : Polynomial.degree q n) :
theorem Polynomial.natDegree_C_mul_X_pow_le {R : Type u} [Semiring R] (a : R) (n : ) :
Polynomial.natDegree (Polynomial.C a * Polynomial.X ^ n) n
theorem Polynomial.degree_add_C {R : Type u} {a : R} [Semiring R] {p : Polynomial R} (hp : 0 < Polynomial.degree p) :
Polynomial.degree (p + Polynomial.C a) = Polynomial.degree p
@[simp]
theorem Polynomial.natDegree_add_C {R : Type u} [Semiring R] {p : Polynomial R} {a : R} :
@[simp]
theorem Polynomial.natDegree_C_add {R : Type u} [Semiring R] {p : Polynomial R} {a : R} :
theorem Polynomial.degree_sum_le {R : Type u} [Semiring R] {ι : Type u_1} (s : Finset ι) (f : ιPolynomial R) :
Polynomial.degree (Finset.sum s fun (i : ι) => f i) Finset.sup s fun (b : ι) => Polynomial.degree (f b)
theorem Polynomial.degree_pow_le_of_le {R : Type u} [Semiring R] {p : Polynomial R} {a : WithBot } (b : ) (hp : Polynomial.degree p a) :
Polynomial.degree (p ^ b) b * a
theorem Polynomial.leadingCoeff_C_mul_X_pow {R : Type u} [Semiring R] (a : R) (n : ) :
Polynomial.leadingCoeff (Polynomial.C a * Polynomial.X ^ n) = a
theorem Polynomial.leadingCoeff_C_mul_X {R : Type u} [Semiring R] (a : R) :
Polynomial.leadingCoeff (Polynomial.C a * Polynomial.X) = a
@[simp]
theorem Polynomial.leadingCoeff_C {R : Type u} [Semiring R] (a : R) :
Polynomial.leadingCoeff (Polynomial.C a) = a
theorem Polynomial.leadingCoeff_X_pow {R : Type u} [Semiring R] (n : ) :
Polynomial.leadingCoeff (Polynomial.X ^ n) = 1
@[simp]
theorem Polynomial.monic_X_pow {R : Type u} [Semiring R] (n : ) :
Polynomial.Monic (Polynomial.X ^ n)
@[simp]
theorem Polynomial.monic_X {R : Type u} [Semiring R] :
Polynomial.Monic Polynomial.X
theorem Polynomial.Monic.ne_zero {R : Type u_2} [Semiring R] [Nontrivial R] {p : Polynomial R} (hp : Polynomial.Monic p) :
p 0
theorem Polynomial.Monic.ne_zero_of_ne {R : Type u} [Semiring R] (h : 0 1) {p : Polynomial R} (hp : Polynomial.Monic p) :
p 0
theorem Polynomial.Monic.ne_zero_of_polynomial_ne {R : Type u} [Semiring R] {p : Polynomial R} {q : Polynomial R} {r : Polynomial R} (hp : Polynomial.Monic p) (hne : q r) :
p 0
theorem Polynomial.C_mul_X_pow_eq_self {R : Type u} [Semiring R] {p : Polynomial R} (h : (Polynomial.support p).card 1) :
Polynomial.C (Polynomial.leadingCoeff p) * Polynomial.X ^ Polynomial.natDegree p = p
theorem Polynomial.degree_le_iff_coeff_zero {R : Type u} [Semiring R] (f : Polynomial R) (n : WithBot ) :
Polynomial.degree f n ∀ (m : ), n < mPolynomial.coeff f m = 0
theorem Polynomial.degree_lt_iff_coeff_zero {R : Type u} [Semiring R] (f : Polynomial R) (n : ) :
Polynomial.degree f < n ∀ (m : ), n mPolynomial.coeff f m = 0
theorem Polynomial.degree_lt_degree_mul_X {R : Type u} [Semiring R] {p : Polynomial R} (hp : p 0) :
theorem Polynomial.natDegree_eq_zero {R : Type u} [Semiring R] {p : Polynomial R} :
Polynomial.natDegree p = 0 ∃ (x : R), Polynomial.C x = p
theorem Polynomial.ne_zero_of_coe_le_degree {R : Type u} {n : } [Semiring R] {p : Polynomial R} (hdeg : n Polynomial.degree p) :
p 0
theorem Polynomial.degree_sum_fin_lt {R : Type u} [Semiring R] {n : } (f : Fin nR) :
Polynomial.degree (Finset.sum Finset.univ fun (i : Fin n) => Polynomial.C (f i) * Polynomial.X ^ i) < n
theorem Polynomial.degree_linear_le {R : Type u} {a : R} {b : R} [Semiring R] :
Polynomial.degree (Polynomial.C a * Polynomial.X + Polynomial.C b) 1
theorem Polynomial.degree_linear_lt {R : Type u} {a : R} {b : R} [Semiring R] :
Polynomial.degree (Polynomial.C a * Polynomial.X + Polynomial.C b) < 2
theorem Polynomial.degree_C_lt_degree_C_mul_X {R : Type u} {a : R} {b : R} [Semiring R] (ha : a 0) :
Polynomial.degree (Polynomial.C b) < Polynomial.degree (Polynomial.C a * Polynomial.X)
@[simp]
theorem Polynomial.degree_linear {R : Type u} {a : R} {b : R} [Semiring R] (ha : a 0) :
Polynomial.degree (Polynomial.C a * Polynomial.X + Polynomial.C b) = 1
theorem Polynomial.natDegree_linear_le {R : Type u} {a : R} {b : R} [Semiring R] :
Polynomial.natDegree (Polynomial.C a * Polynomial.X + Polynomial.C b) 1
theorem Polynomial.natDegree_linear {R : Type u} {a : R} {b : R} [Semiring R] (ha : a 0) :
Polynomial.natDegree (Polynomial.C a * Polynomial.X + Polynomial.C b) = 1
@[simp]
theorem Polynomial.leadingCoeff_linear {R : Type u} {a : R} {b : R} [Semiring R] (ha : a 0) :
Polynomial.leadingCoeff (Polynomial.C a * Polynomial.X + Polynomial.C b) = a
theorem Polynomial.degree_quadratic_le {R : Type u} {a : R} {b : R} {c : R} [Semiring R] :
Polynomial.degree (Polynomial.C a * Polynomial.X ^ 2 + Polynomial.C b * Polynomial.X + Polynomial.C c) 2
theorem Polynomial.degree_quadratic_lt {R : Type u} {a : R} {b : R} {c : R} [Semiring R] :
Polynomial.degree (Polynomial.C a * Polynomial.X ^ 2 + Polynomial.C b * Polynomial.X + Polynomial.C c) < 3
theorem Polynomial.degree_linear_lt_degree_C_mul_X_sq {R : Type u} {a : R} {b : R} {c : R} [Semiring R] (ha : a 0) :
Polynomial.degree (Polynomial.C b * Polynomial.X + Polynomial.C c) < Polynomial.degree (Polynomial.C a * Polynomial.X ^ 2)
@[simp]
theorem Polynomial.degree_quadratic {R : Type u} {a : R} {b : R} {c : R} [Semiring R] (ha : a 0) :
Polynomial.degree (Polynomial.C a * Polynomial.X ^ 2 + Polynomial.C b * Polynomial.X + Polynomial.C c) = 2
theorem Polynomial.natDegree_quadratic_le {R : Type u} {a : R} {b : R} {c : R} [Semiring R] :
Polynomial.natDegree (Polynomial.C a * Polynomial.X ^ 2 + Polynomial.C b * Polynomial.X + Polynomial.C c) 2
theorem Polynomial.natDegree_quadratic {R : Type u} {a : R} {b : R} {c : R} [Semiring R] (ha : a 0) :
Polynomial.natDegree (Polynomial.C a * Polynomial.X ^ 2 + Polynomial.C b * Polynomial.X + Polynomial.C c) = 2
@[simp]
theorem Polynomial.leadingCoeff_quadratic {R : Type u} {a : R} {b : R} {c : R} [Semiring R] (ha : a 0) :
Polynomial.leadingCoeff (Polynomial.C a * Polynomial.X ^ 2 + Polynomial.C b * Polynomial.X + Polynomial.C c) = a
theorem Polynomial.degree_cubic_le {R : Type u} {a : R} {b : R} {c : R} {d : R} [Semiring R] :
Polynomial.degree (Polynomial.C a * Polynomial.X ^ 3 + Polynomial.C b * Polynomial.X ^ 2 + Polynomial.C c * Polynomial.X + Polynomial.C d) 3
theorem Polynomial.degree_cubic_lt {R : Type u} {a : R} {b : R} {c : R} {d : R} [Semiring R] :
Polynomial.degree (Polynomial.C a * Polynomial.X ^ 3 + Polynomial.C b * Polynomial.X ^ 2 + Polynomial.C c * Polynomial.X + Polynomial.C d) < 4
theorem Polynomial.degree_quadratic_lt_degree_C_mul_X_cb {R : Type u} {a : R} {b : R} {c : R} {d : R} [Semiring R] (ha : a 0) :
Polynomial.degree (Polynomial.C b * Polynomial.X ^ 2 + Polynomial.C c * Polynomial.X + Polynomial.C d) < Polynomial.degree (Polynomial.C a * Polynomial.X ^ 3)
@[simp]
theorem Polynomial.degree_cubic {R : Type u} {a : R} {b : R} {c : R} {d : R} [Semiring R] (ha : a 0) :
Polynomial.degree (Polynomial.C a * Polynomial.X ^ 3 + Polynomial.C b * Polynomial.X ^ 2 + Polynomial.C c * Polynomial.X + Polynomial.C d) = 3
theorem Polynomial.natDegree_cubic_le {R : Type u} {a : R} {b : R} {c : R} {d : R} [Semiring R] :
Polynomial.natDegree (Polynomial.C a * Polynomial.X ^ 3 + Polynomial.C b * Polynomial.X ^ 2 + Polynomial.C c * Polynomial.X + Polynomial.C d) 3
theorem Polynomial.natDegree_cubic {R : Type u} {a : R} {b : R} {c : R} {d : R} [Semiring R] (ha : a 0) :
Polynomial.natDegree (Polynomial.C a * Polynomial.X ^ 3 + Polynomial.C b * Polynomial.X ^ 2 + Polynomial.C c * Polynomial.X + Polynomial.C d) = 3
@[simp]
theorem Polynomial.leadingCoeff_cubic {R : Type u} {a : R} {b : R} {c : R} {d : R} [Semiring R] (ha : a 0) :
Polynomial.leadingCoeff (Polynomial.C a * Polynomial.X ^ 3 + Polynomial.C b * Polynomial.X ^ 2 + Polynomial.C c * Polynomial.X + Polynomial.C d) = a
@[simp]
theorem Polynomial.degree_X_pow {R : Type u} [Semiring R] [Nontrivial R] (n : ) :
Polynomial.degree (Polynomial.X ^ n) = n
@[simp]
theorem Polynomial.natDegree_X_pow {R : Type u} [Semiring R] [Nontrivial R] (n : ) :
Polynomial.natDegree (Polynomial.X ^ n) = n
@[simp]
theorem Polynomial.natDegree_mul_X {R : Type u} [Semiring R] [Nontrivial R] {p : Polynomial R} (hp : p 0) :
@[simp]
theorem Polynomial.natDegree_X_mul {R : Type u} [Semiring R] [Nontrivial R] {p : Polynomial R} (hp : p 0) :
@[simp]
theorem Polynomial.natDegree_mul_X_pow {R : Type u} [Semiring R] [Nontrivial R] {p : Polynomial R} (n : ) (hp : p 0) :
@[simp]
theorem Polynomial.natDegree_X_pow_mul {R : Type u} [Semiring R] [Nontrivial R] {p : Polynomial R} (n : ) (hp : p 0) :
theorem Polynomial.natDegree_X_pow_le {R : Type u_1} [Semiring R] (n : ) :
Polynomial.natDegree (Polynomial.X ^ n) n
theorem Polynomial.not_isUnit_X {R : Type u} [Semiring R] [Nontrivial R] :
¬IsUnit Polynomial.X
@[simp]
theorem Polynomial.degree_mul_X {R : Type u} [Semiring R] [Nontrivial R] {p : Polynomial R} :
Polynomial.degree (p * Polynomial.X) = Polynomial.degree p + 1
@[simp]
theorem Polynomial.degree_mul_X_pow {R : Type u} [Semiring R] [Nontrivial R] {p : Polynomial R} (n : ) :
Polynomial.degree (p * Polynomial.X ^ n) = Polynomial.degree p + n
theorem Polynomial.degree_sub_C {R : Type u} {a : R} [Ring R] {p : Polynomial R} (hp : 0 < Polynomial.degree p) :
Polynomial.degree (p - Polynomial.C a) = Polynomial.degree p
@[simp]
theorem Polynomial.natDegree_sub_C {R : Type u} [Ring R] {p : Polynomial R} {a : R} :
theorem Polynomial.degree_X_sub_C_le {R : Type u} [Ring R] (r : R) :
Polynomial.degree (Polynomial.X - Polynomial.C r) 1
theorem Polynomial.natDegree_X_sub_C_le {R : Type u} [Ring R] (r : R) :
Polynomial.natDegree (Polynomial.X - Polynomial.C r) 1
@[simp]
theorem Polynomial.degree_X_add_C {R : Type u} [Nontrivial R] [Semiring R] (a : R) :
Polynomial.degree (Polynomial.X + Polynomial.C a) = 1
theorem Polynomial.natDegree_X_add_C {R : Type u} [Nontrivial R] [Semiring R] (x : R) :
Polynomial.natDegree (Polynomial.X + Polynomial.C x) = 1
@[simp]
theorem Polynomial.nextCoeff_X_add_C {S : Type v} [Semiring S] (c : S) :
Polynomial.nextCoeff (Polynomial.X + Polynomial.C c) = c
theorem Polynomial.degree_X_pow_add_C {R : Type u} [Nontrivial R] [Semiring R] {n : } (hn : 0 < n) (a : R) :
Polynomial.degree (Polynomial.X ^ n + Polynomial.C a) = n
theorem Polynomial.X_pow_add_C_ne_zero {R : Type u} [Nontrivial R] [Semiring R] {n : } (hn : 0 < n) (a : R) :
Polynomial.X ^ n + Polynomial.C a 0
theorem Polynomial.X_add_C_ne_zero {R : Type u} [Nontrivial R] [Semiring R] (r : R) :
Polynomial.X + Polynomial.C r 0
theorem Polynomial.zero_nmem_multiset_map_X_add_C {R : Type u} [Nontrivial R] [Semiring R] {α : Type u_1} (m : Multiset α) (f : αR) :
0Multiset.map (fun (a : α) => Polynomial.X + Polynomial.C (f a)) m
theorem Polynomial.natDegree_X_pow_add_C {R : Type u} [Nontrivial R] [Semiring R] {n : } {r : R} :
Polynomial.natDegree (Polynomial.X ^ n + Polynomial.C r) = n
theorem Polynomial.X_pow_add_C_ne_one {R : Type u} [Nontrivial R] [Semiring R] {n : } (hn : 0 < n) (a : R) :
Polynomial.X ^ n + Polynomial.C a 1
theorem Polynomial.X_add_C_ne_one {R : Type u} [Nontrivial R] [Semiring R] (r : R) :
Polynomial.X + Polynomial.C r 1
@[simp]
theorem Polynomial.leadingCoeff_X_pow_add_C {R : Type u} [Semiring R] {n : } (hn : 0 < n) {r : R} :
Polynomial.leadingCoeff (Polynomial.X ^ n + Polynomial.C r) = 1
@[simp]
theorem Polynomial.leadingCoeff_X_add_C {S : Type v} [Semiring S] (r : S) :
Polynomial.leadingCoeff (Polynomial.X + Polynomial.C r) = 1
@[simp]
theorem Polynomial.leadingCoeff_X_pow_add_one {R : Type u} [Semiring R] {n : } (hn : 0 < n) :
Polynomial.leadingCoeff (Polynomial.X ^ n + 1) = 1
@[simp]
theorem Polynomial.leadingCoeff_pow_X_add_C {R : Type u} [Semiring R] (r : R) (i : ) :
Polynomial.leadingCoeff ((Polynomial.X + Polynomial.C r) ^ i) = 1
@[simp]
theorem Polynomial.leadingCoeff_X_pow_sub_C {R : Type u} [Ring R] {n : } (hn : 0 < n) {r : R} :
Polynomial.leadingCoeff (Polynomial.X ^ n - Polynomial.C r) = 1
@[simp]
theorem Polynomial.leadingCoeff_X_pow_sub_one {R : Type u} [Ring R] {n : } (hn : 0 < n) :
Polynomial.leadingCoeff (Polynomial.X ^ n - 1) = 1
@[simp]
theorem Polynomial.degree_X_sub_C {R : Type u} [Ring R] [Nontrivial R] (a : R) :
Polynomial.degree (Polynomial.X - Polynomial.C a) = 1
theorem Polynomial.natDegree_X_sub_C {R : Type u} [Ring R] [Nontrivial R] (x : R) :
Polynomial.natDegree (Polynomial.X - Polynomial.C x) = 1
@[simp]
theorem Polynomial.nextCoeff_X_sub_C {S : Type v} [Ring S] (c : S) :
Polynomial.nextCoeff (Polynomial.X - Polynomial.C c) = -c
theorem Polynomial.degree_X_pow_sub_C {R : Type u} [Ring R] [Nontrivial R] {n : } (hn : 0 < n) (a : R) :
Polynomial.degree (Polynomial.X ^ n - Polynomial.C a) = n
theorem Polynomial.X_pow_sub_C_ne_zero {R : Type u} [Ring R] [Nontrivial R] {n : } (hn : 0 < n) (a : R) :
Polynomial.X ^ n - Polynomial.C a 0
theorem Polynomial.X_sub_C_ne_zero {R : Type u} [Ring R] [Nontrivial R] (r : R) :
Polynomial.X - Polynomial.C r 0
theorem Polynomial.zero_nmem_multiset_map_X_sub_C {R : Type u} [Ring R] [Nontrivial R] {α : Type u_1} (m : Multiset α) (f : αR) :
0Multiset.map (fun (a : α) => Polynomial.X - Polynomial.C (f a)) m
theorem Polynomial.natDegree_X_pow_sub_C {R : Type u} [Ring R] [Nontrivial R] {n : } {r : R} :
Polynomial.natDegree (Polynomial.X ^ n - Polynomial.C r) = n
@[simp]
theorem Polynomial.leadingCoeff_X_sub_C {S : Type v} [Ring S] (r : S) :
Polynomial.leadingCoeff (Polynomial.X - Polynomial.C r) = 1

degree as a monoid homomorphism between R[X] and Multiplicative (WithBot ℕ). This is useful to prove results about multiplication and degree.

Equations
  • Polynomial.degreeMonoidHom = { toOneHom := { toFun := Polynomial.degree, map_one' := }, map_mul' := }

Polynomial.leadingCoeff bundled as a MonoidHom when R has NoZeroDivisors, and thus leadingCoeff is multiplicative

Equations
  • Polynomial.leadingCoeffHom = { toOneHom := { toFun := Polynomial.leadingCoeff, map_one' := }, map_mul' := }
@[simp]
theorem Polynomial.leadingCoeffHom_apply {R : Type u} [Semiring R] [NoZeroDivisors R] (p : Polynomial R) :
Polynomial.leadingCoeffHom p = Polynomial.leadingCoeff p