Documentation

Mathlib.RingTheory.WittVector.InitTail

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 #

References #

noncomputable def WittVector.select {p : β„•} {R : Type u_1} [CommRing R] (P : β„• β†’ Prop) (x : WittVector p R) :

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.

Instances For
    noncomputable def WittVector.selectPoly (P : β„• β†’ Prop) (n : β„•) :
    MvPolynomial β„• β„€

    The polynomial that witnesses that WittVector.select is a polynomial function. selectPoly n is X n if P n holds, and 0 otherwise.

    Instances For
      theorem WittVector.coeff_select {p : β„•} {R : Type u_1} [CommRing R] (P : β„• β†’ Prop) (x : WittVector p R) (n : β„•) :
      instance WittVector.select_isPoly {p : β„•} {P : β„• β†’ Prop} :
      IsPoly p fun (x : Type u_2) (x_1 : CommRing x) (x_2 : WittVector p x) => select P x_2
      theorem WittVector.select_add_select_not {p : β„•} {R : Type u_1} [CommRing R] (P : β„• β†’ Prop) [hp : Fact (Nat.Prime p)] (x : WittVector p R) :
      select P x + select (fun (i : β„•) => Β¬P i) x = x
      theorem WittVector.coeff_add_of_disjoint {p : β„•} (n : β„•) {R : Type u_1} [CommRing R] [hp : Fact (Nat.Prime p)] (x y : WittVector p R) (h : βˆ€ (n : β„•), x.coeff n = 0 ∨ y.coeff n = 0) :
      (x + y).coeff n = x.coeff n + y.coeff n
      noncomputable def WittVector.init {p : β„•} {R : Type u_1} [CommRing R] (n : β„•) :
      WittVector p R β†’ WittVector p R

      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.

      Instances For
        noncomputable def WittVector.tail {p : β„•} {R : Type u_1} [CommRing R] (n : β„•) :
        WittVector p R β†’ WittVector p R

        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.

        Instances For
          @[simp]
          theorem WittVector.init_add_tail {p : β„•} {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (x : WittVector p R) (n : β„•) :
          init n x + tail n x = x
          def WittVector.initRing :
          Lean.ParserDescr

          init_ring is an auxiliary tactic that discharges goals factoring init over ring operations.

          Instances For
            @[simp]
            theorem WittVector.init_init {p : β„•} {R : Type u_1} [CommRing R] (x : WittVector p R) (n : β„•) :
            init n (init n x) = init n x
            theorem WittVector.init_add {p : β„•} {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (x y : WittVector p R) (n : β„•) :
            init n (x + y) = init n (init n x + init n y)
            theorem WittVector.init_mul {p : β„•} {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (x y : WittVector p R) (n : β„•) :
            init n (x * y) = init n (init n x * init n y)
            theorem WittVector.init_neg {p : β„•} {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (x : WittVector p R) (n : β„•) :
            init n (-x) = init n (-init n x)
            theorem WittVector.init_sub {p : β„•} {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (x y : WittVector p R) (n : β„•) :
            init n (x - y) = init n (init n x - init n y)
            theorem WittVector.init_nsmul {p : β„•} {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (m : β„•) (x : WittVector p R) (n : β„•) :
            init n (m β€’ x) = init n (m β€’ init n x)
            theorem WittVector.init_zsmul {p : β„•} {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (m : β„€) (x : WittVector p R) (n : β„•) :
            init n (m β€’ x) = init n (m β€’ init n x)
            theorem WittVector.init_pow {p : β„•} {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (m : β„•) (x : WittVector p R) (n : β„•) :
            init n (x ^ m) = init n (init n x ^ m)
            theorem WittVector.init_isPoly (p n : β„•) :
            IsPoly p fun (x : Type u_2) (x_1 : CommRing x) => init n

            WittVector.init n x is polynomial in the coefficients of x.