# Documentation

## The Frobenius operator #

If R has characteristic p, then there is a ring endomorphism frobenius R p that raises r : R to the power p. By applying WittVector.map to frobenius R p, we obtain a ring endomorphism 𝕎 R →+* 𝕎 R. It turns out that this endomorphism can be described by polynomials over ℤ that do not depend on R or the fact that it has characteristic p. In this way, we obtain a Frobenius endomorphism WittVector.frobeniusFun : 𝕎 R → 𝕎 R for every commutative ring R.

Unfortunately, the aforementioned polynomials can not be obtained using the machinery of wittStructureInt that was developed in StructurePolynomial.lean. We therefore have to define the polynomials by hand, and check that they have the required property.

In case R has characteristic p, we show in frobenius_eq_map_frobenius that WittVector.frobeniusFun is equal to WittVector.map (frobenius R p).

### Main definitions and results #

• frobeniusPoly: the polynomials that describe the coefficients of frobeniusFun;
• frobeniusFun: the Frobenius endomorphism on Witt vectors;
• frobeniusFun_isPoly: the tautological assertion that Frobenius is a polynomial function;
• frobenius_eq_map_frobenius: the fact that in characteristic p, Frobenius is equal to WittVector.map (frobenius R p).

TODO: Show that WittVector.frobeniusFun is a ring homomorphism, and bundle it into WittVector.frobenius.

## References #

def WittVector.frobeniusPolyRat (p : ) [hp : Fact ()] (n : ) :

The rational polynomials that give the coefficients of frobenius x, in terms of the coefficients of x. These polynomials actually have integral coefficients, see frobeniusPoly and map_frobeniusPoly.

Equations
Instances For
@[irreducible]
noncomputable def WittVector.frobeniusPolyAux (p : ) [hp : Fact ()] :

An auxiliary polynomial over the integers, that satisfies p * (frobeniusPolyAux p n) + X n ^ p = frobeniusPoly p n. This makes it easy to show that frobeniusPoly p n is congruent to X n ^ p modulo p.

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem WittVector.frobeniusPolyAux_eq (p : ) [hp : Fact ()] (n : ) :
= MvPolynomial.X (n + 1) - i, jFinset.range (p ^ (n - i)), () ^ (p ^ (n - i) - (j + 1)) * ^ (j + 1) * MvPolynomial.C ((p ^ (n - i)).choose (j + 1) / p ^ (n - i - WittVector.pnat_multiplicity p j + 1, ) * p ^ (j - WittVector.pnat_multiplicity p j + 1, ))
def WittVector.frobeniusPoly (p : ) [hp : Fact ()] (n : ) :

The polynomials that give the coefficients of frobenius x, in terms of the coefficients of x.

Equations
• = + MvPolynomial.C p *
Instances For
theorem WittVector.map_frobeniusPoly.key₁ (p : ) [hp : Fact ()] (n : ) (j : ) (hj : j < p ^ n) :
p ^ (n - WittVector.pnat_multiplicity p j + 1, ) (p ^ n).choose (j + 1)

A key divisibility fact for the proof of WittVector.map_frobeniusPoly.

theorem WittVector.map_frobeniusPoly.key₂ (p : ) [hp : Fact ()] {n : } {i : } {j : } (hi : i n) (hj : j < p ^ (n - i)) :
j - WittVector.pnat_multiplicity p j + 1, + n = i + j + (n - i - WittVector.pnat_multiplicity p j + 1, )

A key numerical identity needed for the proof of WittVector.map_frobeniusPoly.

theorem WittVector.map_frobeniusPoly (p : ) [hp : Fact ()] (n : ) :
theorem WittVector.frobeniusPoly_zmod (p : ) [hp : Fact ()] (n : ) :
() () =
@[simp]
def WittVector.frobeniusFun {p : } {R : Type u_1} [hp : Fact ()] [] (x : ) :

frobeniusFun is the function underlying the ring endomorphism frobenius : 𝕎 R →+* frobenius 𝕎 R.

Equations
Instances For
theorem WittVector.coeff_frobeniusFun {p : } {R : Type u_1} [hp : Fact ()] [] (x : ) (n : ) :
x.frobeniusFun.coeff n = (MvPolynomial.aeval x.coeff) ()
instance WittVector.frobeniusFun_isPoly (p : ) [hp : Fact ()] :
WittVector.IsPoly p fun (R : Type u_3) (_Rcr : ) => WittVector.frobeniusFun

frobeniusFun is tautologically a polynomial function.

See also frobenius_isPoly.

Equations
• =
theorem WittVector.ghostComponent_frobeniusFun {p : } {R : Type u_1} [hp : Fact ()] [] (n : ) (x : ) :
x.frobeniusFun = () x
def WittVector.frobenius {p : } {R : Type u_1} [hp : Fact ()] [] :

If R has characteristic p, then there is a ring endomorphism that raises r : R to the power p. By applying WittVector.map to this endomorphism, we obtain a ring endomorphism frobenius R p : 𝕎 R →+* 𝕎 R.

The underlying function of this morphism is WittVector.frobeniusFun.

Equations
• WittVector.frobenius = { toFun := WittVector.frobeniusFun, map_one' := , map_mul' := , map_zero' := , map_add' := }
Instances For
theorem WittVector.coeff_frobenius {p : } {R : Type u_1} [hp : Fact ()] [] (x : ) (n : ) :
(WittVector.frobenius x).coeff n = (MvPolynomial.aeval x.coeff) ()
theorem WittVector.ghostComponent_frobenius {p : } {R : Type u_1} [hp : Fact ()] [] (n : ) (x : ) :
(WittVector.frobenius x) = () x
instance WittVector.frobenius_isPoly (p : ) [hp : Fact ()] :
WittVector.IsPoly p fun (R : Type u_3) (_Rcr : ) => WittVector.frobenius

frobenius is tautologically a polynomial function.

Equations
• =
@[simp]
theorem WittVector.coeff_frobenius_charP (p : ) {R : Type u_1} [hp : Fact ()] [] [CharP R p] (x : ) (n : ) :
(WittVector.frobenius x).coeff n = x.coeff n ^ p
theorem WittVector.frobenius_eq_map_frobenius (p : ) {R : Type u_1} [hp : Fact ()] [] [CharP R p] :
WittVector.frobenius = WittVector.map ()
@[simp]
theorem WittVector.frobenius_zmodp (p : ) [hp : Fact ()] (x : WittVector p (ZMod p)) :
WittVector.frobenius x = x
@[simp]
theorem WittVector.frobeniusEquiv_symm_apply (p : ) (R : Type u_1) [hp : Fact ()] [] [CharP R p] [] :
.symm = (WittVector.map ().symm)
@[simp]
theorem WittVector.frobeniusEquiv_apply (p : ) (R : Type u_1) [hp : Fact ()] [] [CharP R p] [] :
= WittVector.frobenius
def WittVector.frobeniusEquiv (p : ) (R : Type u_1) [hp : Fact ()] [] [CharP R p] [] :

WittVector.frobenius as an equiv.

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem WittVector.frobenius_bijective (p : ) (R : Type u_1) [hp : Fact ()] [] [CharP R p] [] :
Function.Bijective WittVector.frobenius