Derivatives of polynomials #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file we prove that derivatives of polynomials in the analysis sense agree with their derivatives in the algebraic sense.
For a more detailed overview of one-dimensional derivatives in mathlib, see the module docstring of
analysis/calculus/deriv/basic.
TODO #
- Add results about multivariable polynomials.
 - Generalize some (most?) results to an algebra over the base field.
 
Keywords #
derivative, polynomial
Derivative of a polynomial #
@[protected]
    
theorem
polynomial.has_strict_deriv_at
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    (p : polynomial 𝕜)
    (x : 𝕜) :
has_strict_deriv_at (λ (x : 𝕜), polynomial.eval x p) (polynomial.eval x (⇑polynomial.derivative p)) x
The derivative (in the analysis sense) of a polynomial p is given by p.derivative.
@[protected]
    
theorem
polynomial.has_strict_deriv_at_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R)
    (x : 𝕜) :
has_strict_deriv_at (λ (x : 𝕜), ⇑(polynomial.aeval x) q) (⇑(polynomial.aeval x) (⇑polynomial.derivative q)) x
@[protected]
    
theorem
polynomial.has_deriv_at
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    (p : polynomial 𝕜)
    (x : 𝕜) :
has_deriv_at (λ (x : 𝕜), polynomial.eval x p) (polynomial.eval x (⇑polynomial.derivative p)) x
The derivative (in the analysis sense) of a polynomial p is given by p.derivative.
@[protected]
    
theorem
polynomial.has_deriv_at_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R)
    (x : 𝕜) :
has_deriv_at (λ (x : 𝕜), ⇑(polynomial.aeval x) q) (⇑(polynomial.aeval x) (⇑polynomial.derivative q)) x
@[protected]
    
theorem
polynomial.has_deriv_within_at
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    (p : polynomial 𝕜)
    (x : 𝕜)
    (s : set 𝕜) :
has_deriv_within_at (λ (x : 𝕜), polynomial.eval x p) (polynomial.eval x (⇑polynomial.derivative p)) s x
@[protected]
    
theorem
polynomial.has_deriv_within_at_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R)
    (x : 𝕜)
    (s : set 𝕜) :
has_deriv_within_at (λ (x : 𝕜), ⇑(polynomial.aeval x) q) (⇑(polynomial.aeval x) (⇑polynomial.derivative q)) s x
@[protected]
    
theorem
polynomial.differentiable_at
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    (p : polynomial 𝕜) :
differentiable_at 𝕜 (λ (x : 𝕜), polynomial.eval x p) x
@[protected]
    
theorem
polynomial.differentiable_at_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R) :
differentiable_at 𝕜 (λ (x : 𝕜), ⇑(polynomial.aeval x) q) x
@[protected]
    
theorem
polynomial.differentiable_within_at
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    {s : set 𝕜}
    (p : polynomial 𝕜) :
differentiable_within_at 𝕜 (λ (x : 𝕜), polynomial.eval x p) s x
@[protected]
    
theorem
polynomial.differentiable_within_at_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    {s : set 𝕜}
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R) :
differentiable_within_at 𝕜 (λ (x : 𝕜), ⇑(polynomial.aeval x) q) s x
@[protected]
    
theorem
polynomial.differentiable
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    (p : polynomial 𝕜) :
differentiable 𝕜 (λ (x : 𝕜), polynomial.eval x p)
@[protected]
    
theorem
polynomial.differentiable_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R) :
differentiable 𝕜 (λ (x : 𝕜), ⇑(polynomial.aeval x) q)
@[protected]
    
theorem
polynomial.differentiable_on
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {s : set 𝕜}
    (p : polynomial 𝕜) :
differentiable_on 𝕜 (λ (x : 𝕜), polynomial.eval x p) s
@[protected]
    
theorem
polynomial.differentiable_on_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {s : set 𝕜}
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R) :
differentiable_on 𝕜 (λ (x : 𝕜), ⇑(polynomial.aeval x) q) s
@[protected, simp]
    
theorem
polynomial.deriv
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    (p : polynomial 𝕜) :
deriv (λ (x : 𝕜), polynomial.eval x p) x = polynomial.eval x (⇑polynomial.derivative p)
@[protected, simp]
    
theorem
polynomial.deriv_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R) :
deriv (λ (x : 𝕜), ⇑(polynomial.aeval x) q) x = ⇑(polynomial.aeval x) (⇑polynomial.derivative q)
@[protected]
    
theorem
polynomial.deriv_within
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    {s : set 𝕜}
    (p : polynomial 𝕜)
    (hxs : unique_diff_within_at 𝕜 s x) :
deriv_within (λ (x : 𝕜), polynomial.eval x p) s x = polynomial.eval x (⇑polynomial.derivative p)
@[protected]
    
theorem
polynomial.deriv_within_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    {s : set 𝕜}
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R)
    (hxs : unique_diff_within_at 𝕜 s x) :
deriv_within (λ (x : 𝕜), ⇑(polynomial.aeval x) q) s x = ⇑(polynomial.aeval x) (⇑polynomial.derivative q)
@[protected]
    
theorem
polynomial.has_fderiv_at
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    (p : polynomial 𝕜)
    (x : 𝕜) :
has_fderiv_at (λ (x : 𝕜), polynomial.eval x p) (1.smul_right (polynomial.eval x (⇑polynomial.derivative p))) x
@[protected]
    
theorem
polynomial.has_fderiv_at_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R)
    (x : 𝕜) :
has_fderiv_at (λ (x : 𝕜), ⇑(polynomial.aeval x) q) (1.smul_right (⇑(polynomial.aeval x) (⇑polynomial.derivative q))) x
@[protected]
    
theorem
polynomial.has_fderiv_within_at
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {s : set 𝕜}
    (p : polynomial 𝕜)
    (x : 𝕜) :
has_fderiv_within_at (λ (x : 𝕜), polynomial.eval x p) (1.smul_right (polynomial.eval x (⇑polynomial.derivative p))) s x
@[protected]
    
theorem
polynomial.has_fderiv_within_at_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {s : set 𝕜}
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R)
    (x : 𝕜) :
has_fderiv_within_at (λ (x : 𝕜), ⇑(polynomial.aeval x) q) (1.smul_right (⇑(polynomial.aeval x) (⇑polynomial.derivative q))) s x
@[protected, simp]
    
theorem
polynomial.fderiv
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    (p : polynomial 𝕜) :
fderiv 𝕜 (λ (x : 𝕜), polynomial.eval x p) x = 1.smul_right (polynomial.eval x (⇑polynomial.derivative p))
@[protected, simp]
    
theorem
polynomial.fderiv_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R) :
fderiv 𝕜 (λ (x : 𝕜), ⇑(polynomial.aeval x) q) x = 1.smul_right (⇑(polynomial.aeval x) (⇑polynomial.derivative q))
@[protected]
    
theorem
polynomial.fderiv_within
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    {s : set 𝕜}
    (p : polynomial 𝕜)
    (hxs : unique_diff_within_at 𝕜 s x) :
fderiv_within 𝕜 (λ (x : 𝕜), polynomial.eval x p) s x = 1.smul_right (polynomial.eval x (⇑polynomial.derivative p))
@[protected]
    
theorem
polynomial.fderiv_within_aeval
    {𝕜 : Type u}
    [nontrivially_normed_field 𝕜]
    {x : 𝕜}
    {s : set 𝕜}
    {R : Type u_1}
    [comm_semiring R]
    [algebra R 𝕜]
    (q : polynomial R)
    (hxs : unique_diff_within_at 𝕜 s x) :
fderiv_within 𝕜 (λ (x : 𝕜), ⇑(polynomial.aeval x) q) s x = 1.smul_right (⇑(polynomial.aeval x) (⇑polynomial.derivative q))