Documentation

Mathlib.RingTheory.WittVector.Truncated

Truncated Witt vectors #

The ring of truncated Witt vectors (of length n) is a quotient of the ring of Witt vectors. It retains the first n coefficients of each Witt vector. In this file, we set up the basic quotient API for this ring.

The ring of Witt vectors is the projective limit of all the rings of truncated Witt vectors.

Main declarations #

References #

def TruncatedWittVector :
Type u_2 → Type u_2

A truncated Witt vector over R is a vector of elements of R, i.e., the first n coefficients of a Witt vector. We will define operations on this type that are compatible with the (untruncated) Witt vector operations.

TruncatedWittVector p n R takes a parameter p : ℕ that is not used in the definition. In practice, this number p is assumed to be a prime number, and under this assumption we construct a ring structure on TruncatedWittVector p n R. (TruncatedWittVector p₁ n R and TruncatedWittVector p₂ n R are definitionally equal as types but will have different ring operations.)

Equations
Instances For
    Equations
    def TruncatedWittVector.mk (p : ) {n : } {R : Type u_1} (x : Fin nR) :

    Create a TruncatedWittVector from a vector x.

    Equations
    Instances For
      def TruncatedWittVector.coeff {p : } {n : } {R : Type u_1} (i : Fin n) (x : TruncatedWittVector p n R) :
      R

      x.coeff i is the ith entry of x.

      Equations
      Instances For
        theorem TruncatedWittVector.ext {p : } {n : } {R : Type u_1} {x : TruncatedWittVector p n R} {y : TruncatedWittVector p n R} (h : ∀ (i : Fin n), TruncatedWittVector.coeff i x = TruncatedWittVector.coeff i y) :
        x = y
        @[simp]
        theorem TruncatedWittVector.coeff_mk {p : } {n : } {R : Type u_1} (x : Fin nR) (i : Fin n) :
        @[simp]
        theorem TruncatedWittVector.mk_coeff {p : } {n : } {R : Type u_1} (x : TruncatedWittVector p n R) :
        def TruncatedWittVector.out {p : } {n : } {R : Type u_1} [CommRing R] (x : TruncatedWittVector p n R) :

        We can turn a truncated Witt vector x into a Witt vector by setting all coefficients after x to be 0.

        Equations
        Instances For
          @[simp]
          theorem TruncatedWittVector.coeff_out {p : } {n : } {R : Type u_1} [CommRing R] (x : TruncatedWittVector p n R) (i : Fin n) :
          x.out.coeff i = TruncatedWittVector.coeff i x
          theorem TruncatedWittVector.out_injective {p : } {n : } {R : Type u_1} [CommRing R] :
          Function.Injective TruncatedWittVector.out
          def WittVector.truncateFun {p : } (n : ) {R : Type u_1} (x : WittVector p R) :

          truncateFun n x uses the first n entries of x to construct a TruncatedWittVector, which has the same base p as x. This function is bundled into a ring homomorphism in WittVector.truncate

          Equations
          Instances For
            @[simp]
            theorem WittVector.coeff_truncateFun {p : } {n : } {R : Type u_1} (x : WittVector p R) (i : Fin n) :
            @[simp]
            theorem WittVector.out_truncateFun {p : } {n : } {R : Type u_1} [CommRing R] (x : WittVector p R) :
            @[simp]
            theorem TruncatedWittVector.truncateFun_out {p : } {n : } {R : Type u_1} [CommRing R] (x : TruncatedWittVector p n R) :
            instance TruncatedWittVector.instZero (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.instOne (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.instNatCast (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.instIntCast (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.instAdd (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.instMul (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.instNeg (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.instSub (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.hasNatScalar (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.hasIntScalar (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            instance TruncatedWittVector.hasNatPow (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
            Equations
            @[simp]
            theorem TruncatedWittVector.coeff_zero (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] (i : Fin n) :

            A macro tactic used to prove that truncateFun respects ring operations.

            Equations
            Instances For
              @[simp]
              theorem WittVector.truncateFun_zero (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
              @[simp]
              theorem WittVector.truncateFun_one (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
              @[simp]
              theorem WittVector.truncateFun_add {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (x : WittVector p R) (y : WittVector p R) :
              @[simp]
              theorem WittVector.truncateFun_mul {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (x : WittVector p R) (y : WittVector p R) :
              theorem WittVector.truncateFun_neg {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (x : WittVector p R) :
              theorem WittVector.truncateFun_sub {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (x : WittVector p R) (y : WittVector p R) :
              theorem WittVector.truncateFun_nsmul {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (m : ) (x : WittVector p R) :
              theorem WittVector.truncateFun_zsmul {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (m : ) (x : WittVector p R) :
              theorem WittVector.truncateFun_pow {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (x : WittVector p R) (m : ) :
              theorem WittVector.truncateFun_natCast {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (m : ) :
              theorem WittVector.truncateFun_intCast {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (m : ) :
              instance TruncatedWittVector.instCommRing (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
              Equations
              noncomputable def WittVector.truncate {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] :

              truncate n is a ring homomorphism that truncates x to its first n entries to obtain a TruncatedWittVector, which has the same base p as x.

              Equations
              Instances For
                theorem WittVector.truncate_surjective (p : ) [hp : Fact p.Prime] (n : ) (R : Type u_1) [CommRing R] :
                @[simp]
                theorem WittVector.coeff_truncate {p : } [hp : Fact p.Prime] {n : } {R : Type u_1} [CommRing R] (x : WittVector p R) (i : Fin n) :
                theorem WittVector.mem_ker_truncate {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (x : WittVector p R) :
                x RingHom.ker (WittVector.truncate n) i < n, x.coeff i = 0
                @[simp]
                theorem WittVector.truncate_mk' (p : ) [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] (f : R) :
                (WittVector.truncate n) { coeff := f } = TruncatedWittVector.mk p fun (k : Fin n) => f k
                def TruncatedWittVector.truncate {p : } [hp : Fact p.Prime] {n : } {R : Type u_1} [CommRing R] {m : } (hm : n m) :

                A ring homomorphism that truncates a truncated Witt vector of length m to a truncated Witt vector of length n, for n ≤ m.

                Equations
                Instances For
                  @[simp]
                  theorem TruncatedWittVector.truncate_wittVector_truncate {p : } [hp : Fact p.Prime] {n : } {R : Type u_1} [CommRing R] {m : } (hm : n m) (x : WittVector p R) :
                  @[simp]
                  theorem TruncatedWittVector.truncate_truncate {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] {n₁ : } {n₂ : } {n₃ : } (h1 : n₁ n₂) (h2 : n₂ n₃) (x : TruncatedWittVector p n₃ R) :
                  @[simp]
                  theorem TruncatedWittVector.truncate_comp {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] {n₁ : } {n₂ : } {n₃ : } (h1 : n₁ n₂) (h2 : n₂ n₃) :
                  theorem TruncatedWittVector.truncate_surjective {p : } [hp : Fact p.Prime] {n : } {R : Type u_1} [CommRing R] {m : } (hm : n m) :
                  @[simp]
                  theorem TruncatedWittVector.coeff_truncate {p : } [hp : Fact p.Prime] {n : } {R : Type u_1} [CommRing R] {m : } (hm : n m) (i : Fin n) (x : TruncatedWittVector p m R) :
                  instance TruncatedWittVector.instFintype {p : } {n : } {R : Type u_2} [Fintype R] :
                  Equations
                  • TruncatedWittVector.instFintype = Pi.fintype
                  theorem TruncatedWittVector.iInf_ker_truncate {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] :
                  def WittVector.liftFun {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] (f : (k : ) → S →+* TruncatedWittVector p k R) (s : S) :

                  Given a family fₖ : S → TruncatedWittVector p k R and s : S, we produce a Witt vector by defining the kth entry to be the final entry of fₖ s.

                  Equations
                  Instances For
                    @[simp]
                    theorem WittVector.truncate_liftFun {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] {f : (k : ) → S →+* TruncatedWittVector p k R} (f_compat : ∀ (k₁ k₂ : ) (hk : k₁ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁) (s : S) :
                    def WittVector.lift {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] (f : (k : ) → S →+* TruncatedWittVector p k R) (f_compat : ∀ (k₁ k₂ : ) (hk : k₁ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁) :

                    Given compatible ring homs from S into TruncatedWittVector n for each n, we can lift these to a ring hom S → 𝕎 R.

                    lift defines the universal property of 𝕎 R as the inverse limit of TruncatedWittVector n.

                    Equations
                    Instances For
                      @[simp]
                      theorem WittVector.truncate_lift {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] {f : (k : ) → S →+* TruncatedWittVector p k R} (f_compat : ∀ (k₁ k₂ : ) (hk : k₁ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁) (s : S) :
                      (WittVector.truncate n) ((WittVector.lift (fun (k₂ : ) => f k₂) f_compat) s) = (f n) s
                      @[simp]
                      theorem WittVector.truncate_comp_lift {p : } [hp : Fact p.Prime] (n : ) {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] {f : (k : ) → S →+* TruncatedWittVector p k R} (f_compat : ∀ (k₁ k₂ : ) (hk : k₁ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁) :
                      (WittVector.truncate n).comp (WittVector.lift (fun (k₂ : ) => f k₂) f_compat) = f n
                      theorem WittVector.lift_unique {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] {f : (k : ) → S →+* TruncatedWittVector p k R} (f_compat : ∀ (k₁ k₂ : ) (hk : k₁ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁) (g : S →+* WittVector p R) (g_compat : ∀ (k : ), (WittVector.truncate k).comp g = f k) :
                      WittVector.lift (fun (k₂ : ) => f k₂) f_compat = g

                      The uniqueness part of the universal property of 𝕎 R.

                      @[simp]
                      theorem WittVector.liftEquiv_apply {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] (f : { f : (k : ) → S →+* TruncatedWittVector p k R // ∀ (k₁ k₂ : ) (hk : k₁ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁ }) :
                      WittVector.liftEquiv f = WittVector.lift f
                      @[simp]
                      theorem WittVector.liftEquiv_symm_apply_coe {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] (g : S →+* WittVector p R) (k : ) :
                      (WittVector.liftEquiv.symm g) k = (WittVector.truncate k).comp g
                      def WittVector.liftEquiv {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] :
                      { f : (k : ) → S →+* TruncatedWittVector p k R // ∀ (k₁ k₂ : ) (hk : k₁ k₂), (TruncatedWittVector.truncate hk).comp (f k₂) = f k₁ } (S →+* WittVector p R)

                      The universal property of 𝕎 R as projective limit of truncated Witt vector rings.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem WittVector.hom_ext {p : } [hp : Fact p.Prime] {R : Type u_1} [CommRing R] {S : Type u_2} [Semiring S] (g₁ : S →+* WittVector p R) (g₂ : S →+* WittVector p R) (h : ∀ (k : ), (WittVector.truncate k).comp g₁ = (WittVector.truncate k).comp g₂) :
                        g₁ = g₂