File: Mathlib/RingTheory/WittVector/WittPolynomial.lean

full_name: wittPolynomial
code: /-- `wittPolynomial p R n` is the `n`-th Witt polynomial
with respect to a prime `p` with coefficients in a commutative ring `R`.
It is defined as:

`∑_{i ≤ n} p^i X_i^{p^{n-i}} ∈ R[X_0, X_1, X_2, …]`. -/
noncomputable def wittPolynomial (n : ℕ) : MvPolynomial ℕ R 
goal: MvPolynomial ℕ R

full_name: wittPolynomial_eq_sum_C_mul_X_pow
code: theorem wittPolynomial_eq_sum_C_mul_X_pow (n : ℕ) :
    wittPolynomial p R n = ∑ i ∈ range (n + 1), C ((p : R) ^ i) * X i ^ p ^ (n - i) 
goal: W_ R n = ∑ i ∈ Finset.range (n + 1), MvPolynomial.C (↑p ^ i) * MvPolynomial.X i ^ p ^ (n - i)

full_name: Witt._aux_Mathlib_RingTheory_WittVector_WittPolynomial___macroRules_Witt_termW__1
code: @[inherit_doc]
scoped[Witt] notation "W_" => wittPolynomial p
goal: Lean.Macro

full_name: Witt._aux_Mathlib_RingTheory_WittVector_WittPolynomial___unexpand_wittPolynomial_1
code: @[inherit_doc]
scoped[Witt] notation "W_" => wittPolynomial p
goal: Lean.PrettyPrinter.Unexpander

full_name: Witt._aux_Mathlib_RingTheory_WittVector_WittPolynomial___unexpand_wittPolynomial_2
code: @[inherit_doc]
scoped[Witt] notation "W" => wittPolynomial p _
goal: Lean.PrettyPrinter.Unexpander

full_name: Witt._aux_Mathlib_RingTheory_WittVector_WittPolynomial___macroRules_Witt_termW_1
code: @[inherit_doc]
scoped[Witt] notation "W" => wittPolynomial p _
goal: Lean.Macro

full_name: map_wittPolynomial
code: @[simp]
theorem map_wittPolynomial (f : R →+* S) (n : ℕ) : map f (W n) = W n 
goal: (MvPolynomial.map f) (W_ R n) = W_ S n

full_name: constantCoeff_wittPolynomial
code: @[simp]
theorem constantCoeff_wittPolynomial [hp : Fact p.Prime] (n : ℕ) :
    constantCoeff (wittPolynomial p R n) = 0 
goal: MvPolynomial.constantCoeff (W_ R n) = 0

full_name: wittPolynomial_zero
code: @[simp]
theorem wittPolynomial_zero : wittPolynomial p R 0 = X 0 
goal: W_ R 0 = MvPolynomial.X 0

full_name: wittPolynomial_one
code: @[simp]
theorem wittPolynomial_one : wittPolynomial p R 1 = C (p : R) * X 1 + X 0 ^ p 
goal: W_ R 1 = MvPolynomial.C ↑p * MvPolynomial.X 1 + MvPolynomial.X 0 ^ p

full_name: aeval_wittPolynomial
code: theorem aeval_wittPolynomial {A : Type*} [CommRing A] [Algebra R A] (f : ℕ → A) (n : ℕ) :
    aeval f (W_ R n) = ∑ i ∈ range (n + 1), (p : A) ^ i * f i ^ p ^ (n - i) 
goal: (MvPolynomial.aeval f) (W_ R n) = ∑ i ∈ Finset.range (n + 1), ↑p ^ i * f i ^ p ^ (n - i)

full_name: wittPolynomial_zmod_self
code: /-- Over the ring `ZMod (p^(n+1))`, we produce the `n+1`st Witt polynomial
by expanding the `n`th Witt polynomial by `p`. -/
@[simp]
theorem wittPolynomial_zmod_self (n : ℕ) :
    W_ (ZMod (p ^ (n + 1))) (n + 1) = expand p (W_ (ZMod (p ^ (n + 1))) n) 
goal: W_ (ZMod (p ^ (n + 1))) (n + 1) = (MvPolynomial.expand p) (W_ (ZMod (p ^ (n + 1))) n)

full_name: wittPolynomial_vars
code: theorem wittPolynomial_vars [CharZero R] (n : ℕ) : (wittPolynomial p R n).vars = range (n + 1) 
goal: (W_ R n).vars = Finset.range (n + 1)

full_name: wittPolynomial_vars_subset
code: theorem wittPolynomial_vars_subset (n : ℕ) : (wittPolynomial p R n).vars ⊆ range (n + 1) 
goal: (W_ R n).vars ⊆ Finset.range (n + 1)

full_name: xInTermsOfW
code: /-- The `xInTermsOfW p R n` is the polynomial on the basis of Witt polynomials
that corresponds to the ordinary `X n`. -/
noncomputable def xInTermsOfW [Invertible (p : R)] : ℕ → MvPolynomial ℕ R
  
goal: ℕ → MvPolynomial ℕ R

full_name: xInTermsOfW_eq
code: theorem xInTermsOfW_eq [Invertible (p : R)] {n : ℕ} : xInTermsOfW p R n =
    (X n - ∑ i ∈ range n, C ((p : R) ^ i) *
      xInTermsOfW p R i ^ p ^ (n - i)) * C ((⅟p : R) ^ n) 
goal: xInTermsOfW p R n =
  (MvPolynomial.X n - ∑ i ∈ Finset.range n, MvPolynomial.C (↑p ^ i) * xInTermsOfW p R i ^ p ^ (n - i)) *
    MvPolynomial.C (⅟↑p ^ n)

full_name: constantCoeff_xInTermsOfW
code: @[simp]
theorem constantCoeff_xInTermsOfW [hp : Fact p.Prime] [Invertible (p : R)] (n : ℕ) :
    constantCoeff (xInTermsOfW p R n) = 0 
goal: MvPolynomial.constantCoeff (xInTermsOfW p R n) = 0

full_name: xInTermsOfW_zero
code: @[simp]
theorem xInTermsOfW_zero [Invertible (p : R)] : xInTermsOfW p R 0 = X 0 
goal: xInTermsOfW p R 0 = MvPolynomial.X 0

full_name: xInTermsOfW_vars_aux
code: theorem xInTermsOfW_vars_aux (n : ℕ) :
    n ∈ (xInTermsOfW p ℚ n).vars ∧ (xInTermsOfW p ℚ n).vars ⊆ range (n + 1) 
goal: n ∈ (xInTermsOfW p ℚ n).vars ∧ (xInTermsOfW p ℚ n).vars ⊆ Finset.range (n + 1)

full_name: xInTermsOfW_vars_subset
code: theorem xInTermsOfW_vars_subset (n : ℕ) : (xInTermsOfW p ℚ n).vars ⊆ range (n + 1) 
goal: (xInTermsOfW p ℚ n).vars ⊆ Finset.range (n + 1)

full_name: xInTermsOfW_aux
code: theorem xInTermsOfW_aux [Invertible (p : R)] (n : ℕ) :
    xInTermsOfW p R n * C ((p : R) ^ n) =
      X n - ∑ i ∈ range n, C ((p : R) ^ i) * xInTermsOfW p R i ^ p ^ (n - i) 
goal: xInTermsOfW p R n * MvPolynomial.C (↑p ^ n) =
  MvPolynomial.X n - ∑ i ∈ Finset.range n, MvPolynomial.C (↑p ^ i) * xInTermsOfW p R i ^ p ^ (n - i)

full_name: bind₁_xInTermsOfW_wittPolynomial
code: @[simp]
theorem bind₁_xInTermsOfW_wittPolynomial [Invertible (p : R)] (k : ℕ) :
    bind₁ (xInTermsOfW p R) (W_ R k) = X k 
goal: (MvPolynomial.bind₁ (xInTermsOfW p R)) (W_ R k) = MvPolynomial.X k

full_name: bind₁_wittPolynomial_xInTermsOfW
code: @[simp]
theorem bind₁_wittPolynomial_xInTermsOfW [Invertible (p : R)] (n : ℕ) :
    bind₁ (W_ R) (xInTermsOfW p R n) = X n 
goal: (MvPolynomial.bind₁ (W_ R)) (xInTermsOfW p R n) = MvPolynomial.X n