The Frobenius operator #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
If R
has characteristic p
, then there is a ring endomorphism frobenius R p
that raises r : R
to the power p
.
By applying witt_vector.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 witt_vector.frobenius_fun : 𝕎 R → 𝕎 R
for every commutative ring R
.
Unfortunately, the aforementioned polynomials can not be obtained using the machinery
of witt_structure_int
that was developed in structure_polynomial.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_fun_eq_map_frobenius
that witt_vector.frobenius_fun
is equal to witt_vector.map (frobenius R p)
.
Main definitions and results #
frobenius_poly
: the polynomials that describe the coefficients offrobenius_fun
;frobenius_fun
: the Frobenius endomorphism on Witt vectors;frobenius_fun_is_poly
: the tautological assertion that Frobenius is a polynomial function;frobenius_fun_eq_map_frobenius
: the fact that in characteristicp
, Frobenius is equal towitt_vector.map (frobenius R p)
.
TODO: Show that witt_vector.frobenius_fun
is a ring homomorphism,
and bundle it into witt_vector.frobenius
.
References #
The rational polynomials that give the coefficients of frobenius x
,
in terms of the coefficients of x
.
These polynomials actually have integral coefficients,
see frobenius_poly
and map_frobenius_poly
.
Equations
- witt_vector.frobenius_poly_rat p n = ⇑(mv_polynomial.bind₁ (witt_polynomial p ℚ ∘ λ (n : ℕ), n + 1)) (X_in_terms_of_W p ℚ n)
An auxiliary polynomial over the integers, that satisfies
p * (frobenius_poly_aux p n) + X n ^ p = frobenius_poly p n
.
This makes it easy to show that frobenius_poly p n
is congruent to X n ^ p
modulo p
.
Equations
- witt_vector.frobenius_poly_aux p n = mv_polynomial.X (n + 1) - finset.univ.sum (λ (i : fin n), (finset.range (p ^ (n - ↑i))).sum (λ (j : ℕ), (mv_polynomial.X ↑i ^ p) ^ (p ^ (n - ↑i) - (j + 1)) * witt_vector.frobenius_poly_aux p ↑i ^ (j + 1) * ⇑mv_polynomial.C ↑((p ^ (n - ↑i)).choose (j + 1) / p ^ (n - ↑i - pnat_multiplicity p ⟨j + 1, _⟩) * ↑p ^ (j - pnat_multiplicity p ⟨j + 1, _⟩))))
A key numerical identity needed for the proof of witt_vector.map_frobenius_poly
.
frobenius_fun
is the function underlying the ring endomorphism
frobenius : 𝕎 R →+* frobenius 𝕎 R
.
Equations
- x.frobenius_fun = {coeff := λ (n : ℕ), ⇑(mv_polynomial.aeval x.coeff) (witt_vector.frobenius_poly p n)}
Instances for witt_vector.frobenius_fun
frobenius_fun
is tautologically a polynomial function.
See also frobenius_is_poly
.
If R
has characteristic p
, then there is a ring endomorphism
that raises r : R
to the power p
.
By applying witt_vector.map
to this endomorphism,
we obtain a ring endomorphism frobenius R p : 𝕎 R →+* 𝕎 R
.
The underlying function of this morphism is witt_vector.frobenius_fun
.
Equations
- witt_vector.frobenius = {to_fun := witt_vector.frobenius_fun _inst_1, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}
frobenius
is tautologically a polynomial function.
witt_vector.frobenius
as an equiv.
Equations
- witt_vector.frobenius_equiv p R = {to_fun := ⇑witt_vector.frobenius, inv_fun := ⇑(witt_vector.map (pth_root R p)), left_inv := _, right_inv := _, map_mul' := _, map_add' := _}