Documentation

Mathlib.RingTheory.WittVector.Basic

Witt vectors #

This file verifies that the ring operations on WittVector p R satisfy the axioms of a commutative ring.

Main definitions #

Notation #

We use notation 𝕎 R, entered \bbW, for the Witt vectors over R.

Implementation details #

As we prove that the ghost components respect the ring operations, we face a number of repetitive proofs. To avoid duplicating code we factor these proofs into a custom tactic, only slightly more powerful than a tactic macro. This tactic is not particularly useful outside of its applications in this file.

References #

def WittVector.mapFun {p : } {α : Type u_3} {β : Type u_4} (f : αβ) :
WittVector p αWittVector p β

f : α → β induces a map from 𝕎 α to 𝕎 β by applying f componentwise. If f is a ring homomorphism, then so is f, see WittVector.map f.

Equations
    Instances For
      theorem WittVector.mapFun.injective {p : } {α : Type u_3} {β : Type u_4} (f : αβ) (hf : Function.Injective f) :
      theorem WittVector.mapFun.surjective {p : } {α : Type u_3} {β : Type u_4} (f : αβ) (hf : Function.Surjective f) :

      Auxiliary tactic for showing that mapFun respects the ring operations.

      Equations
        Instances For
          theorem WittVector.mapFun.zero {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) :
          mapFun (⇑f) 0 = 0
          theorem WittVector.mapFun.one {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) :
          mapFun (⇑f) 1 = 1
          theorem WittVector.mapFun.add {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (x y : WittVector p R) :
          mapFun (⇑f) (x + y) = mapFun (⇑f) x + mapFun (⇑f) y
          theorem WittVector.mapFun.sub {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (x y : WittVector p R) :
          mapFun (⇑f) (x - y) = mapFun (⇑f) x - mapFun (⇑f) y
          theorem WittVector.mapFun.mul {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (x y : WittVector p R) :
          mapFun (⇑f) (x * y) = mapFun (⇑f) x * mapFun (⇑f) y
          theorem WittVector.mapFun.neg {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (x : WittVector p R) :
          mapFun (⇑f) (-x) = -mapFun (⇑f) x
          theorem WittVector.mapFun.nsmul {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (n : ) (x : WittVector p R) :
          mapFun (⇑f) (n x) = n mapFun (⇑f) x
          theorem WittVector.mapFun.zsmul {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (z : ) (x : WittVector p R) :
          mapFun (⇑f) (z x) = z mapFun (⇑f) x
          theorem WittVector.mapFun.pow {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (x : WittVector p R) (n : ) :
          mapFun (⇑f) (x ^ n) = mapFun (⇑f) x ^ n
          theorem WittVector.mapFun.natCast {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (n : ) :
          mapFun f n = n
          theorem WittVector.mapFun.intCast {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (n : ) :
          mapFun f n = n

          An auxiliary tactic for proving that ghostFun respects the ring operations.

          Equations
            Instances For
              theorem WittVector.matrix_vecEmpty_coeff {p : } {R : Type u_5} (i : Fin 0) (j : ) :
              (![] i).coeff j = ![] i j
              instance WittVector.instCommRing (p : ) (R : Type u_1) [CommRing R] [Fact (Nat.Prime p)] :

              The commutative ring structure on 𝕎 R.

              Equations
                noncomputable def WittVector.map {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) :

                WittVector.map f is the ring homomorphism 𝕎 R →+* 𝕎 S naturally induced by a ring homomorphism f : R →+* S. It acts coefficientwise.

                Equations
                  Instances For
                    theorem WittVector.map_injective {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (hf : Function.Injective f) :
                    theorem WittVector.map_surjective {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (hf : Function.Surjective f) :
                    @[simp]
                    theorem WittVector.map_coeff {p : } {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] [Fact (Nat.Prime p)] (f : R →+* S) (x : WittVector p R) (n : ) :
                    ((map f) x).coeff n = f (x.coeff n)
                    def WittVector.ghostMap {p : } {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] :
                    WittVector p R →+* R

                    WittVector.ghostMap is a ring homomorphism that maps each Witt vector to the sequence of its ghost components.

                    Equations
                      Instances For
                        def WittVector.ghostComponent {p : } {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (n : ) :

                        Evaluates the nth Witt polynomial on the first n coefficients of x, producing a value in R.

                        Equations
                          Instances For
                            @[simp]
                            theorem WittVector.ghostMap_apply {p : } {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (x : WittVector p R) (n : ) :
                            def WittVector.ghostEquiv (p : ) (R : Type u_1) [CommRing R] [Fact (Nat.Prime p)] [Invertible p] :
                            WittVector p R ≃+* (R)

                            WittVector.ghostMap is a ring isomorphism when p is invertible in R.

                            Equations
                              Instances For
                                @[simp]
                                theorem WittVector.ghostEquiv_coe (p : ) (R : Type u_1) [CommRing R] [Fact (Nat.Prime p)] [Invertible p] :
                                noncomputable def WittVector.constantCoeff {p : } {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] :

                                WittVector.coeff x 0 as a RingHom

                                Equations
                                  Instances For
                                    @[simp]
                                    theorem WittVector.constantCoeff_apply {p : } {R : Type u_1} [CommRing R] [Fact (Nat.Prime p)] (x : WittVector p R) :