Solving equations about the Frobenius map on the field of fractions of 𝕎 k
#
The goal of this file is to prove WittVector.exists_frobenius_solution_fractionRing
,
which says that for an algebraically closed field k
of characteristic p
and a, b
in the
field of fractions of Witt vectors over k
,
there is a solution b
to the equation φ b * a = p ^ m * b
, where φ
is the Frobenius map.
Most of this file builds up the equivalent theorem over 𝕎 k
directly,
moving to the field of fractions at the end.
See WittVector.frobeniusRotation
and its specification.
The construction proceeds by recursively defining a sequence of coefficients as solutions to a
polynomial equation in k
. We must define these as generic polynomials using Witt vector API
(WittVector.wittMul
, wittPolynomial
) to show that they satisfy the desired equation.
Preliminary work is done in the dependency RingTheory.WittVector.MulCoeff
to isolate the n+1
st coefficients of x
and y
in the n+1
st coefficient of x*y
.
This construction is described in Dupuis, Lewis, and Macbeth,
[Formalized functional analysis via semilinear maps][dupuis-lewis-macbeth2022].
We approximately follow an approach sketched on MathOverflow:
The result is a dependency for the proof of witt_vector.isocrystal_classification
,
the classification of one-dimensional isocrystals over an algebraically closed field.
The recursive case of the vector coefficients #
The first coefficient of our solution vector is easy to define below.
In this section we focus on the recursive case.
The goal is to turn witt_poly_prod n
into a univariate polynomial
whose variable represents the n
th coefficient of x
in x * a
.
The root of this polynomial determines the n+1
st coefficient of our solution.
Equations
- One or more equations did not get rendered due to their size.
Instances For
This is the n+1
st coefficient of our solution, projected from root_exists
.
Equations
- WittVector.RecursionMain.succNthVal p n a₁ a₂ bs ha₁ ha₂ = Classical.choose (_ : ∃ (b : k), Polynomial.IsRoot (WittVector.RecursionMain.succNthDefiningPoly p n a₁ a₂ bs) b)
Instances For
The base case (0th coefficient) of our solution vector.
Equations
- WittVector.RecursionBase.solution p a₁ a₂ = Classical.choose (_ : ∃ (x : k), x ^ (p - 1) = a₂.coeff 0 / a₁.coeff 0)
Instances For
Recursively defines the sequence of coefficients for WittVector.frobeniusRotation
.
Equations
- WittVector.frobeniusRotationCoeff p ha₁ ha₂ 0 = WittVector.RecursionBase.solution p a₁ a₂
- WittVector.frobeniusRotationCoeff p ha₁ ha₂ (Nat.succ n) = WittVector.RecursionMain.succNthVal p n a₁ a₂ (fun (i : Fin (n + 1)) => WittVector.frobeniusRotationCoeff p ha₁ ha₂ ↑i) ha₁ ha₂
Instances For
For nonzero a₁
and a₂
, frobenius_rotation a₁ a₂
is a Witt vector that satisfies the
equation frobenius (frobenius_rotation a₁ a₂) * a₁ = (frobenius_rotation a₁ a₂) * a₂
.
Equations
- WittVector.frobeniusRotation p ha₁ ha₂ = WittVector.mk p (WittVector.frobeniusRotationCoeff p ha₁ ha₂)