Theory of degrees of polynomials
Some of the main results include
- nat_degree_comp_le: The degree of the composition is at most the product of degrees
    
theorem
polynomial.nat_degree_comp_le
    {R : Type u}
    [semiring R]
    {p q : polynomial R} :
(p.comp q).nat_degree ≤ (p.nat_degree) * q.nat_degree
    
theorem
polynomial.eq_C_of_nat_degree_eq_zero
    {R : Type u}
    [semiring R]
    {p : polynomial R}
    (hp : p.nat_degree = 0) :
p = ⇑polynomial.C (p.coeff 0)
    
theorem
polynomial.degree_map_le
    {R : Type u}
    {S : Type v}
    [semiring R]
    {p : polynomial R}
    [semiring S]
    (f : R →+* S) :
(polynomial.map f p).degree ≤ p.degree
    
theorem
polynomial.degree_map_eq_of_leading_coeff_ne_zero
    {R : Type u}
    {S : Type v}
    [semiring R]
    {p : polynomial R}
    [semiring S]
    (f : R →+* S)
    (hf : ⇑f p.leading_coeff ≠ 0) :
(polynomial.map f p).degree = p.degree
    
theorem
polynomial.nat_degree_map_of_leading_coeff_ne_zero
    {R : Type u}
    {S : Type v}
    [semiring R]
    {p : polynomial R}
    [semiring S]
    (f : R →+* S)
    (hf : ⇑f p.leading_coeff ≠ 0) :
(polynomial.map f p).nat_degree = p.nat_degree
    
theorem
polynomial.leading_coeff_map_of_leading_coeff_ne_zero
    {R : Type u}
    {S : Type v}
    [semiring R]
    {p : polynomial R}
    [semiring S]
    (f : R →+* S)
    (hf : ⇑f p.leading_coeff ≠ 0) :
(polynomial.map f p).leading_coeff = ⇑f p.leading_coeff
    
theorem
polynomial.degree_pos_of_root
    {R : Type u}
    {a : R}
    [semiring R]
    {p : polynomial R}
    (hp : p ≠ 0)
    (h : p.is_root a) :
    
theorem
polynomial.nat_degree_pos_of_eval₂_root
    {R : Type u}
    {S : Type v}
    [semiring R]
    [semiring S]
    {p : polynomial R}
    (hp : p ≠ 0)
    (f : R →+* S)
    {z : S}
    (hz : polynomial.eval₂ f z p = 0)
    (inj : ∀ (x : R), ⇑f x = 0 → x = 0) :
0 < p.nat_degree
    
theorem
polynomial.degree_pos_of_eval₂_root
    {R : Type u}
    {S : Type v}
    [semiring R]
    [semiring S]
    {p : polynomial R}
    (hp : p ≠ 0)
    (f : R →+* S)
    {z : S}
    (hz : polynomial.eval₂ f z p = 0)
    (inj : ∀ (x : R), ⇑f x = 0 → x = 0) :
    
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) :
(polynomial.map f p).degree = p.degree
    
theorem
polynomial.degree_map'
    {R : Type u}
    {S : Type v}
    [semiring R]
    [semiring S]
    {f : R →+* S}
    (hf : function.injective ⇑f)
    (p : polynomial R) :
(polynomial.map f p).degree = p.degree
    
theorem
polynomial.nat_degree_map'
    {R : Type u}
    {S : Type v}
    [semiring R]
    [semiring S]
    {f : R →+* S}
    (hf : function.injective ⇑f)
    (p : polynomial R) :
(polynomial.map f p).nat_degree = p.nat_degree
    
theorem
polynomial.leading_coeff_map'
    {R : Type u}
    {S : Type v}
    [semiring R]
    [semiring S]
    {f : R →+* S}
    (hf : function.injective ⇑f)
    (p : polynomial R) :
(polynomial.map f p).leading_coeff = ⇑f p.leading_coeff