Leading terms of Witt vector multiplication #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
The goal of this file is to study the leading terms of the formula for the n+1
st coefficient
of a product of Witt vectors x
and y
over a ring of characteristic p
.
We aim to isolate the n+1
st coefficients of x
and y
, and express the rest of the product
in terms of a function of the lower coefficients.
For most of this file we work with terms of type mv_polynomial (fin 2 × ℕ) ℤ
.
We will eventually evaluate them in k
, but first we must take care of a calculation
that needs to happen in characteristic 0.
Main declarations #
witt_vector.nth_mul_coeff
: expresses the coefficient of a product of Witt vectors in terms of the previous coefficients of the multiplicands.
(∑ i in range n, (y.coeff i)^(p^(n-i)) * p^i.val) *
(∑ i in range n, (y.coeff i)^(p^(n-i)) * p^i.val)
Equations
- witt_vector.witt_poly_prod p n = ⇑(mv_polynomial.rename (prod.mk 0)) (witt_polynomial p ℤ n) * ⇑(mv_polynomial.rename (prod.mk 1)) (witt_polynomial p ℤ n)
The "remainder term" of witt_vector.witt_poly_prod
. See mul_poly_of_interest_aux2
.
Equations
- witt_vector.witt_poly_prod_remainder p n = (finset.range n).sum (λ (i : ℕ), ↑p ^ i * witt_vector.witt_mul p i ^ p ^ (n - i))
remainder p n
represents the remainder term from mul_poly_of_interest_aux3
.
witt_poly_prod p (n+1)
will have variables up to n+1
,
but remainder
will only have variables up to n
.
Equations
- witt_vector.remainder p n = (finset.range (n + 1)).sum (λ (x : ℕ), ⇑(mv_polynomial.rename (prod.mk 0)) (⇑(mv_polynomial.monomial (finsupp.single x (p ^ (n + 1 - x)))) (↑p ^ x))) * (finset.range (n + 1)).sum (λ (x : ℕ), ⇑(mv_polynomial.rename (prod.mk 1)) (⇑(mv_polynomial.monomial (finsupp.single x (p ^ (n + 1 - x)))) (↑p ^ x)))
This is the polynomial whose degree we want to get a handle on.
Equations
- witt_vector.poly_of_interest p n = witt_vector.witt_mul p (n + 1) + ↑p ^ (n + 1) * mv_polynomial.X (0, n + 1) * mv_polynomial.X (1, n + 1) - mv_polynomial.X (0, n + 1) * ⇑(mv_polynomial.rename (prod.mk 1)) (witt_polynomial p ℤ (n + 1)) - mv_polynomial.X (1, n + 1) * ⇑(mv_polynomial.rename (prod.mk 0)) (witt_polynomial p ℤ (n + 1))
The characteristic p
version of peval_poly_of_interest