File: Mathlib/Algebra/Polynomial/HasseDeriv.lean

full_name: Polynomial.hasseDeriv
code: /-- The `k`th Hasse derivative of a polynomial `∑ a_i X^i` is `∑ (i.choose k) a_i X^(i-k)`.
It satisfies `k! * (hasse_deriv k f) = derivative^[k] f`. -/
def hasseDeriv (k : ℕ) : R[X] →ₗ[R] R[X] 
goal: Polynomial R →ₗ[R] Polynomial R

full_name: Polynomial.hasseDeriv_apply
code: theorem hasseDeriv_apply :
    hasseDeriv k f = f.sum fun i r => monomial (i - k) (↑(i.choose k) * r) 
goal: (Polynomial.hasseDeriv k) f = f.sum fun i r => (Polynomial.monomial (i - k)) (↑(i.choose k) * r)

full_name: Polynomial.hasseDeriv_coeff
code: theorem hasseDeriv_coeff (n : ℕ) :
    (hasseDeriv k f).coeff n = (n + k).choose k * f.coeff (n + k) 
goal: ((Polynomial.hasseDeriv k) f).coeff n = ↑((n + k).choose k) * f.coeff (n + k)

full_name: Polynomial.hasseDeriv_zero'
code: theorem hasseDeriv_zero' : hasseDeriv 0 f = f 
goal: (Polynomial.hasseDeriv 0) f = f

full_name: Polynomial.hasseDeriv_zero
code: @[simp]
theorem hasseDeriv_zero : @hasseDeriv R _ 0 = LinearMap.id 
goal: Polynomial.hasseDeriv 0 = LinearMap.id

full_name: Polynomial.hasseDeriv_eq_zero_of_lt_natDegree
code: theorem hasseDeriv_eq_zero_of_lt_natDegree (p : R[X]) (n : ℕ) (h : p.natDegree < n) :
    hasseDeriv n p = 0 
goal: (Polynomial.hasseDeriv n) p = 0

full_name: Polynomial.hasseDeriv_one'
code: theorem hasseDeriv_one' : hasseDeriv 1 f = derivative f 
goal: (Polynomial.hasseDeriv 1) f = Polynomial.derivative f

full_name: Polynomial.hasseDeriv_one
code: @[simp]
theorem hasseDeriv_one : @hasseDeriv R _ 1 = derivative 
goal: Polynomial.hasseDeriv 1 = Polynomial.derivative

full_name: Polynomial.hasseDeriv_monomial
code: @[simp]
theorem hasseDeriv_monomial (n : ℕ) (r : R) :
    hasseDeriv k (monomial n r) = monomial (n - k) (↑(n.choose k) * r) 
goal: (Polynomial.hasseDeriv k) ((Polynomial.monomial n) r) = (Polynomial.monomial (n - k)) (↑(n.choose k) * r)

full_name: Polynomial.hasseDeriv_C
code: theorem hasseDeriv_C (r : R) (hk : 0 < k) : hasseDeriv k (C r) = 0 
goal: (Polynomial.hasseDeriv k) (Polynomial.C r) = 0

full_name: Polynomial.hasseDeriv_apply_one
code: theorem hasseDeriv_apply_one (hk : 0 < k) : hasseDeriv k (1 : R[X]) = 0 
goal: (Polynomial.hasseDeriv k) 1 = 0

full_name: Polynomial.hasseDeriv_X
code: theorem hasseDeriv_X (hk : 1 < k) : hasseDeriv k (X : R[X]) = 0 
goal: (Polynomial.hasseDeriv k) Polynomial.X = 0

full_name: Polynomial.factorial_smul_hasseDeriv
code: theorem factorial_smul_hasseDeriv : ⇑(k ! • @hasseDeriv R _ k) = (@derivative R _)^[k] 
goal: ⇑(k.factorial • Polynomial.hasseDeriv k) = (⇑Polynomial.derivative)^[k]

full_name: Polynomial.hasseDeriv_comp
code: theorem hasseDeriv_comp (k l : ℕ) :
    (@hasseDeriv R _ k).comp (hasseDeriv l) = (k + l).choose k • hasseDeriv (k + l) 
goal: Polynomial.hasseDeriv k ∘ₗ Polynomial.hasseDeriv l = (k + l).choose k • Polynomial.hasseDeriv (k + l)

full_name: Polynomial.natDegree_hasseDeriv_le
code: theorem natDegree_hasseDeriv_le (p : R[X]) (n : ℕ) :
    natDegree (hasseDeriv n p) ≤ natDegree p - n 
goal: ((Polynomial.hasseDeriv n) p).natDegree ≤ p.natDegree - n

full_name: Polynomial.natDegree_hasseDeriv
code: theorem natDegree_hasseDeriv [NoZeroSMulDivisors ℕ R] (p : R[X]) (n : ℕ) :
    natDegree (hasseDeriv n p) = natDegree p - n 
goal: ((Polynomial.hasseDeriv n) p).natDegree = p.natDegree - n

full_name: Polynomial.hasseDeriv_mul
code: theorem hasseDeriv_mul (f g : R[X]) :
    hasseDeriv k (f * g) = ∑ ij ∈ antidiagonal k, hasseDeriv ij.1 f * hasseDeriv ij.2 g 
goal: (Polynomial.hasseDeriv k) (f * g) =
  ∑ ij ∈ Finset.antidiagonal k, (Polynomial.hasseDeriv ij.1) f * (Polynomial.hasseDeriv ij.2) g