init
and tail
#
Given a Witt vector x
, we are sometimes interested
in its components before and after an index n
.
This file defines those operations, proves that init
is polynomial,
and shows how that polynomial interacts with MvPolynomial.bind₁
.
Main declarations #
WittVector.init n x
: the firstn
coefficients ofx
, as a Witt vector. All coefficients at indices ≥n
are 0.WittVector.tail n x
: the complementary part toinit
. All coefficients at indices <n
are 0, otherwise they are the same as inx
.WittVector.coeff_add_of_disjoint
: ifx
andy
are Witt vectors such that for everyn
then
-th coefficient ofx
or ofy
is0
, then the coefficients ofx + y
are justx.coeff n + y.coeff n
.
References #
[Hazewinkel, Witt Vectors][Haze09]
[Commelin and Lewis, Formalizing the Ring of Witt Vectors][CL21]
WittVector.select P x
, for a predicate P : ℕ → Prop
is the Witt vector
whose n
-th coefficient is x.coeff n
if P n
is true, and 0
otherwise.
Equations
- WittVector.select P x = WittVector.mk p fun (n : ℕ) => if P n then x.coeff n else 0
Instances For
The polynomial that witnesses that WittVector.select
is a polynomial function.
selectPoly n
is X n
if P n
holds, and 0
otherwise.
Equations
- WittVector.selectPoly P n = if P n then MvPolynomial.X n else 0
Instances For
Equations
- ⋯ = ⋯
WittVector.init n x
is the Witt vector of which the first n
coefficients are those from x
and all other coefficients are 0
.
See WittVector.tail
for the complementary part.
Equations
- WittVector.init n = WittVector.select fun (i : ℕ) => i < n
Instances For
WittVector.tail n x
is the Witt vector of which the first n
coefficients are 0
and all other coefficients are those from x
.
See WittVector.init
for the complementary part.
Equations
- WittVector.tail n = WittVector.select fun (i : ℕ) => n ≤ i
Instances For
init_ring
is an auxiliary tactic that discharges goals factoring init
over ring operations.
Equations
- One or more equations did not get rendered due to their size.
Instances For
WittVector.init n x
is polynomial in the coefficients of x
.