Witt vectors #
This file verifies that the ring operations on WittVector p R
satisfy the axioms of a commutative ring.
Main definitions #
WittVector.map
: lifts a ring homomorphismR →+* S
to a ring homomorphism𝕎 R →+* 𝕎 S
.WittVector.ghostComponent n x
: evaluates then
th Witt polynomial on the firstn
coefficients ofx
, producing a value inR
. This is a ring homomorphism.WittVector.ghostMap
: a ring homomorphism𝕎 R →+* (ℕ → R)
, obtained by packaging all the ghost components together. Ifp
is invertible inR
, then the ghost map is an equivalence, which we use to define the ring operations on𝕎 R
.WittVector.CommRing
: the ring structure induced by the ghost components.
Notation #
We use notation 𝕎 R
, entered \bbW
, for the Witt vectors over R
.
Implementation details #
As we prove that the ghost components respect the ring operations, we face a number of repetitive proofs. To avoid duplicating code we factor these proofs into a custom tactic, only slightly more powerful than a tactic macro. This tactic is not particularly useful outside of its applications in this file.
References #
f : α → β
induces a map from 𝕎 α
to 𝕎 β
by applying f
componentwise.
If f
is a ring homomorphism, then so is f
, see WittVector.map f
.
Equations
- WittVector.mapFun f x = WittVector.mk p (f ∘ x.coeff)
Instances For
Auxiliary tactic for showing that mapFun
respects the ring operations.
Equations
- WittVector.mapFun.tacticMap_fun_tac = Lean.ParserDescr.node `WittVector.mapFun.tacticMap_fun_tac 1024 (Lean.ParserDescr.nonReservedSymbol "map_fun_tac" false)
Instances For
Alias of WittVector.mapFun.natCast
.
Alias of WittVector.mapFun.intCast
.
An auxiliary tactic for proving that ghostFun
respects the ring operations.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Alias of _private.Mathlib.RingTheory.WittVector.Basic.0.WittVector.ghostFun_natCast
.
Alias of _private.Mathlib.RingTheory.WittVector.Basic.0.WittVector.ghostFun_intCast
.
The commutative ring structure on 𝕎 R
.
Equations
- WittVector.instCommRing p R = Function.Surjective.commRing (WittVector.mapFun ⇑(MvPolynomial.counit R)) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
WittVector.map f
is the ring homomorphism 𝕎 R →+* 𝕎 S
naturally induced
by a ring homomorphism f : R →+* S
. It acts coefficientwise.
Equations
- WittVector.map f = { toFun := WittVector.mapFun ⇑f, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
WittVector.ghostMap
is a ring homomorphism that maps each Witt vector
to the sequence of its ghost components.
Equations
- WittVector.ghostMap = { toFun := WittVector.ghostFun✝, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Evaluates the n
th Witt polynomial on the first n
coefficients of x
,
producing a value in R
.
Equations
- WittVector.ghostComponent n = (Pi.evalRingHom (fun (a : ℕ) => R) n).comp WittVector.ghostMap
Instances For
WittVector.ghostMap
is a ring isomorphism when p
is invertible in R
.
Equations
- WittVector.ghostEquiv p R = { toFun := (↑↑WittVector.ghostMap).toFun, invFun := (WittVector.ghostEquiv'✝ p R).invFun, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
WittVector.coeff x 0
as a RingHom
Equations
- WittVector.constantCoeff = { toFun := fun (x : WittVector p R) => x.coeff 0, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }