# Documentation

## Identities between operations on the ring of Witt vectors #

In this file we derive common identities between the Frobenius and Verschiebung operators.

## Main declarations #

• frobenius_verschiebung: the composition of Frobenius and Verschiebung is multiplication by p
• verschiebung_mul_frobenius: the “projection formula”: V(x * F y) = V x * y
• iterate_verschiebung_mul_coeff: an identity from [Haze09] 6.2

## References #

• [Hazewinkel, Witt Vectors][Haze09]

• [Commelin and Lewis, Formalizing the Ring of Witt Vectors][CL21]

theorem WittVector.frobenius_verschiebung {p : } {R : Type u_1} [hp : Fact p.Prime] [] (x : ) :
WittVector.frobenius (WittVector.verschiebung x) = x * p

The composition of Frobenius and Verschiebung is multiplication by p.

theorem WittVector.verschiebung_zmod {p : } [hp : Fact p.Prime] (x : WittVector p (ZMod p)) :
WittVector.verschiebung x = x * p

Verschiebung is the same as multiplication by p on the ring of Witt vectors of ZMod p.

theorem WittVector.coeff_p_pow (p : ) (R : Type u_1) [hp : Fact p.Prime] [] [CharP R p] (i : ) :
(p ^ i).coeff i = 1
theorem WittVector.coeff_p_pow_eq_zero (p : ) (R : Type u_1) [hp : Fact p.Prime] [] [CharP R p] {i : } {j : } (hj : j i) :
(p ^ i).coeff j = 0
theorem WittVector.coeff_p (p : ) (R : Type u_1) [hp : Fact p.Prime] [] [CharP R p] (i : ) :
(p).coeff i = if i = 1 then 1 else 0
@[simp]
theorem WittVector.coeff_p_zero (p : ) (R : Type u_1) [hp : Fact p.Prime] [] [CharP R p] :
(p).coeff 0 = 0
@[simp]
theorem WittVector.coeff_p_one (p : ) (R : Type u_1) [hp : Fact p.Prime] [] [CharP R p] :
(p).coeff 1 = 1
theorem WittVector.p_nonzero (p : ) (R : Type u_1) [hp : Fact p.Prime] [] [] [CharP R p] :
p 0
theorem WittVector.FractionRing.p_nonzero (p : ) (R : Type u_1) [hp : Fact p.Prime] [] [] [CharP R p] :
p 0
theorem WittVector.verschiebung_mul_frobenius {p : } {R : Type u_1} [hp : Fact p.Prime] [] (x : ) (y : ) :
WittVector.verschiebung (x * WittVector.frobenius y) = WittVector.verschiebung x * y

The “projection formula” for Frobenius and Verschiebung.

theorem WittVector.mul_charP_coeff_zero {p : } {R : Type u_1} [hp : Fact p.Prime] [] [CharP R p] (x : ) :
(x * p).coeff 0 = 0
theorem WittVector.mul_charP_coeff_succ {p : } {R : Type u_1} [hp : Fact p.Prime] [] [CharP R p] (x : ) (i : ) :
(x * p).coeff (i + 1) = x.coeff i ^ p
theorem WittVector.verschiebung_frobenius {p : } {R : Type u_1} [hp : Fact p.Prime] [] [CharP R p] (x : ) :
WittVector.verschiebung (WittVector.frobenius x) = x * p
theorem WittVector.verschiebung_frobenius_comm {p : } {R : Type u_1} [hp : Fact p.Prime] [] [CharP R p] :
Function.Commute WittVector.verschiebung WittVector.frobenius

## Iteration lemmas #

theorem WittVector.iterate_verschiebung_coeff {p : } {R : Type u_1} [hp : Fact p.Prime] [] (x : ) (n : ) (k : ) :
((WittVector.verschiebung)^[n] x).coeff (k + n) = x.coeff k
theorem WittVector.iterate_verschiebung_mul_left {p : } {R : Type u_1} [hp : Fact p.Prime] [] (x : ) (y : ) (i : ) :
(WittVector.verschiebung)^[i] x * y = (WittVector.verschiebung)^[i] (x * (WittVector.frobenius)^[i] y)
theorem WittVector.iterate_verschiebung_mul {p : } {R : Type u_1} [hp : Fact p.Prime] [] [CharP R p] (x : ) (y : ) (i : ) (j : ) :
(WittVector.verschiebung)^[i] x * (WittVector.verschiebung)^[j] y = (WittVector.verschiebung)^[i + j] ((WittVector.frobenius)^[j] x * (WittVector.frobenius)^[i] y)
theorem WittVector.iterate_frobenius_coeff {p : } {R : Type u_1} [hp : Fact p.Prime] [] [CharP R p] (x : ) (i : ) (k : ) :
((WittVector.frobenius)^[i] x).coeff k = x.coeff k ^ p ^ i
theorem WittVector.iterate_verschiebung_mul_coeff {p : } {R : Type u_1} [hp : Fact p.Prime] [] [CharP R p] (x : ) (y : ) (i : ) (j : ) :
((WittVector.verschiebung)^[i] x * (WittVector.verschiebung)^[j] y).coeff (i + j) = x.coeff 0 ^ p ^ j * y.coeff 0 ^ p ^ i

This is a slightly specialized form of [Hazewinkel, Witt Vectors][Haze09] 6.2 equation 5.