# mathlibdocumentation

ring_theory.witt_vector.defs

# Witt vectors #

In this file we define the type of p-typical Witt vectors and ring operations on it. The ring axioms are verified in ring_theory/witt_vector/basic.lean.

For a fixed commutative ring R and prime p, a Witt vector x : π R is an infinite sequence β β R of elements of R. However, the ring operations + and * are not defined in the obvious component-wise way. Instead, these operations are defined via certain polynomials using the machinery in structure_polynomial.lean. The nth value of the sum of two Witt vectors can depend on the 0-th through nth values of the summands. This effectively simulates a βcarryingβ operation.

## Main definitions #

• witt_vector p R: the type of p-typical Witt vectors with coefficients in R.
• witt_vector.coeff x n: projects the nth value of the Witt vector x.

## Notation #

We use notation π R, entered \bbW, for the Witt vectors over R.

## References #

structure witt_vector (p : β) (R : Type u_1) :
Type u_1

witt_vector p R is the ring of p-typical Witt vectors over the commutative ring R, where p is a prime number.

If p is invertible in R, this ring is isomorphic to β β R (the product of β copies of R). If R is a ring of characteristic p, then witt_vector p R is a ring of characteristic 0. The canonical example is witt_vector p (zmod p), which is isomorphic to the p-adic integers β€_[p].

Instances for witt_vector
@[ext]
theorem witt_vector.ext {p : β} {R : Type u_1} {x y : R} (h : β (n : β), x.coeff n = y.coeff n) :
x = y
theorem witt_vector.ext_iff {p : β} {R : Type u_1} {x y : R} :
x = y β β (n : β), x.coeff n = y.coeff n
theorem witt_vector.coeff_mk (p : β) {R : Type u_1} (x : β β R) :
{coeff := x}.coeff = x
@[protected, instance]
Equations
@[protected, instance]
noncomputable def witt_vector.witt_zero (p : β) [hp : fact (nat.prime p)] :

The polynomials used for defining the element 0 of the ring of Witt vectors.

Equations
noncomputable def witt_vector.witt_one (p : β) [hp : fact (nat.prime p)] :

The polynomials used for defining the element 1 of the ring of Witt vectors.

Equations
noncomputable def witt_vector.witt_add (p : β) [hp : fact (nat.prime p)] :

The polynomials used for defining the addition of the ring of Witt vectors.

Equations
noncomputable def witt_vector.witt_nsmul (p : β) [hp : fact (nat.prime p)] (n : β) :

The polynomials used for defining repeated addition of the ring of Witt vectors.

Equations
noncomputable def witt_vector.witt_zsmul (p : β) [hp : fact (nat.prime p)] (n : β€) :

The polynomials used for defining repeated addition of the ring of Witt vectors.

Equations
noncomputable def witt_vector.witt_sub (p : β) [hp : fact (nat.prime p)] :

The polynomials used for describing the subtraction of the ring of Witt vectors.

Equations
noncomputable def witt_vector.witt_mul (p : β) [hp : fact (nat.prime p)] :

The polynomials used for defining the multiplication of the ring of Witt vectors.

Equations
noncomputable def witt_vector.witt_neg (p : β) [hp : fact (nat.prime p)] :

The polynomials used for defining the negation of the ring of Witt vectors.

Equations
noncomputable def witt_vector.witt_pow (p : β) [hp : fact (nat.prime p)] (n : β) :

The polynomials used for defining repeated addition of the ring of Witt vectors.

Equations
noncomputable def witt_vector.peval {R : Type u_1} [comm_ring R] {k : β} (Ο : mv_polynomial (fin k Γ β) β€) (x : fin k β β β R) :
R

An auxiliary definition used in witt_vector.eval. Evaluates a polynomial whose variables come from the disjoint union of k copies of β, with a curried evaluation x. This can be defined more generally but we use only a specific instance here.

Equations
noncomputable def witt_vector.eval {p : β} {R : Type u_1} [comm_ring R] {k : β} (Ο : β β mv_polynomial (fin k Γ β) β€) (x : fin k β R) :
R

Let Ο be a family of polynomials, indexed by natural numbers, whose variables come from the disjoint union of k copies of β, and let xα΅’ be a Witt vector for 0 β€ i < k.

eval Ο x evaluates Ο mapping the variable X_(i, n) to the nth coefficient of xα΅’.

Instantiating Ο with certain polynomials defined in structure_polynomial.lean establishes the ring operations on π R. For example, witt_vector.witt_add is such a Ο with k = 2; evaluating this at (xβ, xβ) gives us the sum of two Witt vectors xβ + xβ.

Equations
@[protected, instance]
noncomputable def witt_vector.has_zero {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
@[protected, instance]
noncomputable def witt_vector.inhabited {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
@[protected, instance]
noncomputable def witt_vector.has_one {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
@[protected, instance]
noncomputable def witt_vector.has_add {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
• = {add := Ξ» (x y : R), ![x, y]}
@[protected, instance]
noncomputable def witt_vector.has_sub {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
• = {sub := Ξ» (x y : R), ![x, y]}
@[protected, instance]
noncomputable def witt_vector.has_nat_scalar {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
R)
Equations
@[protected, instance]
noncomputable def witt_vector.has_int_scalar {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
R)
Equations
@[protected, instance]
noncomputable def witt_vector.has_mul {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
• = {mul := Ξ» (x y : R), ![x, y]}
@[protected, instance]
noncomputable def witt_vector.has_neg {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
• = {neg := Ξ» (x : R), ![x]}
@[protected, instance]
noncomputable def witt_vector.has_nat_pow {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
@[protected, instance]
noncomputable def witt_vector.has_nat_cast {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
@[protected, instance]
noncomputable def witt_vector.has_int_cast {p : β} (R : Type u_1) [comm_ring R] [fact (nat.prime p)] :
Equations
@[simp]
theorem witt_vector.witt_zero_eq_zero (p : β) [hp : fact (nat.prime p)] (n : β) :
@[simp]
@[simp]
theorem witt_vector.witt_one_pos_eq_zero (p : β) [hp : fact (nat.prime p)] (n : β) (hn : 0 < n) :
@[simp]
theorem witt_vector.witt_add_zero (p : β) [hp : fact (nat.prime p)] :
@[simp]
theorem witt_vector.witt_sub_zero (p : β) [hp : fact (nat.prime p)] :
@[simp]
theorem witt_vector.witt_mul_zero (p : β) [hp : fact (nat.prime p)] :
@[simp]
theorem witt_vector.witt_neg_zero (p : β) [hp : fact (nat.prime p)] :
@[simp]
theorem witt_vector.constant_coeff_witt_add (p : β) [hp : fact (nat.prime p)] (n : β) :
@[simp]
theorem witt_vector.constant_coeff_witt_sub (p : β) [hp : fact (nat.prime p)] (n : β) :
@[simp]
theorem witt_vector.constant_coeff_witt_mul (p : β) [hp : fact (nat.prime p)] (n : β) :
@[simp]
theorem witt_vector.constant_coeff_witt_neg (p : β) [hp : fact (nat.prime p)] (n : β) :
@[simp]
theorem witt_vector.constant_coeff_witt_nsmul (p : β) [hp : fact (nat.prime p)] (m n : β) :
@[simp]
theorem witt_vector.constant_coeff_witt_zsmul (p : β) [hp : fact (nat.prime p)] (z : β€) (n : β) :
@[simp]
theorem witt_vector.zero_coeff (p : β) (R : Type u_1) [hp : fact (nat.prime p)] [comm_ring R] (n : β) :
0.coeff n = 0
@[simp]
theorem witt_vector.one_coeff_zero (p : β) (R : Type u_1) [hp : fact (nat.prime p)] [comm_ring R] :
1.coeff 0 = 1
@[simp]
theorem witt_vector.one_coeff_eq_of_pos (p : β) (R : Type u_1) [hp : fact (nat.prime p)] [comm_ring R] (n : β) (hn : 0 < n) :
1.coeff n = 0
@[simp]
theorem witt_vector.v2_coeff {p' : β} {R' : Type u_1} (x y : R') (i : fin 2) :
(![x, y] i).coeff = ![x.coeff, y.coeff] i
theorem witt_vector.add_coeff {p : β} {R : Type u_1} [hp : fact (nat.prime p)] [comm_ring R] (x y : R) (n : β) :
(x + y).coeff n = ![x.coeff, y.coeff]
theorem witt_vector.sub_coeff {p : β} {R : Type u_1} [hp : fact (nat.prime p)] [comm_ring R] (x y : R) (n : β) :
(x - y).coeff n = ![x.coeff, y.coeff]
theorem witt_vector.mul_coeff {p : β} {R : Type u_1} [hp : fact (nat.prime p)] [comm_ring R] (x y : R) (n : β) :
(x * y).coeff n = ![x.coeff, y.coeff]
theorem witt_vector.neg_coeff {p : β} {R : Type u_1} [hp : fact (nat.prime p)] [comm_ring R] (x : R) (n : β) :
(-x).coeff n = ![x.coeff]
theorem witt_vector.nsmul_coeff {p : β} {R : Type u_1} [hp : fact (nat.prime p)] [comm_ring R] (m : β) (x : R) (n : β) :
(m β’ x).coeff n = ![x.coeff]
theorem witt_vector.zsmul_coeff {p : β} {R : Type u_1} [hp : fact (nat.prime p)] [comm_ring R] (m : β€) (x : R) (n : β) :
(m β’ x).coeff n = ![x.coeff]
theorem witt_vector.pow_coeff {p : β} {R : Type u_1} [hp : fact (nat.prime p)] [comm_ring R] (m : β) (x : R) (n : β) :
(x ^ m).coeff n = ![x.coeff]
theorem witt_vector.add_coeff_zero {p : β} {R : Type u_1} [hp : fact (nat.prime p)] [comm_ring R] (x y : R) :
(x + y).coeff 0 = x.coeff 0 + y.coeff 0
theorem witt_vector.mul_coeff_zero {p : β} {R : Type u_1} [hp : fact (nat.prime p)] [comm_ring R] (x y : R) :
(x * y).coeff 0 = x.coeff 0 * y.coeff 0