Documentation

Mathlib.CategoryTheory.Shift.Basic

Shift #

A Shift on a category C indexed by a monoid A is nothing more than a monoidal functor from A to C ⥤ C. A typical example to keep in mind might be the category of complexes ⋯ → C_{n-1} → C_n → C_{n+1} → ⋯. It has a shift indexed by , where we assign to each n : ℤ the functor C ⥤ C that re-indexes the terms, so the degree i term of Shift n C would be the degree i+n-th term of C.

Main definitions #

Implementation Notes #

[HasShift C A] is implemented using MonoidalFunctor (Discrete A) (C ⥤ C). However, the API of monoidal functors is used only internally: one should use the API of shifts functors which includes shiftFunctor C a : C ⥤ C for a : A, shiftFunctorZero C A : shiftFunctor C (0 : A) ≅ 𝟭 C and shiftFunctorAdd C i j : shiftFunctor C (i + j) ≅ shiftFunctor C i ⋙ shiftFunctor C j (and its variant shiftFunctorAdd'). These isomorphisms satisfy some coherence properties which are stated in lemmas like shiftFunctorAdd'_assoc, shiftFunctorAdd'_zero_add and shiftFunctorAdd'_add_zero.

class CategoryTheory.HasShift (C : Type u) (A : Type u_2) [CategoryTheory.Category.{v, u} C] [AddMonoid A] :
Type (max (max u u_2) v)

A category has a shift indexed by an additive monoid A if there is a monoidal functor from A to C ⥤ C.

Instances
    structure CategoryTheory.ShiftMkCore (C : Type u) (A : Type u_1) [CategoryTheory.Category.{v, u} C] [AddMonoid A] :
    Type (max (max u u_1) v)

    A helper structure to construct the shift functor (Discrete A) ⥤ (C ⥤ C).

    Instances For
      theorem CategoryTheory.ShiftMkCore.assoc_hom_app_assoc {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] (self : CategoryTheory.ShiftMkCore C A) (m₁ : A) (m₂ : A) (m₃ : A) (X : C) {Z : C} (h : (self.F m₃).toPrefunctor.obj ((self.F m₂).toPrefunctor.obj ((self.F m₁).toPrefunctor.obj X)) Z) :
      CategoryTheory.CategoryStruct.comp ((self.add (m₁ + m₂) m₃).hom.app X) (CategoryTheory.CategoryStruct.comp ((self.F m₃).toPrefunctor.map ((self.add m₁ m₂).hom.app X)) h) = CategoryTheory.CategoryStruct.comp (CategoryTheory.eqToHom (_ : (self.F (m₁ + m₂ + m₃)).toPrefunctor.obj X = (self.F (m₁ + (m₂ + m₃))).toPrefunctor.obj X)) (CategoryTheory.CategoryStruct.comp ((self.add m₁ (m₂ + m₃)).hom.app X) (CategoryTheory.CategoryStruct.comp ((self.add m₂ m₃).hom.app ((self.F m₁).toPrefunctor.obj X)) h))
      theorem CategoryTheory.ShiftMkCore.assoc_inv_app_assoc {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] (h : CategoryTheory.ShiftMkCore C A) (m₁ : A) (m₂ : A) (m₃ : A) (X : C) {Z : C} (h : (h✝.F (m₁ + m₂ + m₃)).toPrefunctor.obj X Z) :
      CategoryTheory.CategoryStruct.comp ((h✝.F m₃).toPrefunctor.map ((h✝.add m₁ m₂).inv.app X)) (CategoryTheory.CategoryStruct.comp ((h✝.add (m₁ + m₂) m₃).inv.app X) h) = CategoryTheory.CategoryStruct.comp ((h✝.add m₂ m₃).inv.app ((h✝.F m₁).toPrefunctor.obj X)) (CategoryTheory.CategoryStruct.comp ((h✝.add m₁ (m₂ + m₃)).inv.app X) (CategoryTheory.CategoryStruct.comp (CategoryTheory.eqToHom (_ : (h✝.F (m₁ + (m₂ + m₃))).toPrefunctor.obj X = (h✝.F (m₁ + m₂ + m₃)).toPrefunctor.obj X)) h))
      theorem CategoryTheory.ShiftMkCore.assoc_inv_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] (h : CategoryTheory.ShiftMkCore C A) (m₁ : A) (m₂ : A) (m₃ : A) (X : C) :
      CategoryTheory.CategoryStruct.comp ((h.F m₃).toPrefunctor.map ((h.add m₁ m₂).inv.app X)) ((h.add (m₁ + m₂) m₃).inv.app X) = CategoryTheory.CategoryStruct.comp ((h.add m₂ m₃).inv.app ((h.F m₁).toPrefunctor.obj X)) (CategoryTheory.CategoryStruct.comp ((h.add m₁ (m₂ + m₃)).inv.app X) (CategoryTheory.eqToHom (_ : (h.F (m₁ + (m₂ + m₃))).toPrefunctor.obj X = (h.F (m₁ + m₂ + m₃)).toPrefunctor.obj X)))
      theorem CategoryTheory.ShiftMkCore.zero_add_inv_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] (h : CategoryTheory.ShiftMkCore C A) (n : A) (X : C) :
      (h.add 0 n).inv.app X = CategoryTheory.CategoryStruct.comp ((h.F n).toPrefunctor.map (h.zero.hom.app X)) (CategoryTheory.eqToHom (_ : (h.F n).toPrefunctor.obj ((CategoryTheory.Functor.id C).toPrefunctor.obj X) = (h.F (0 + n)).toPrefunctor.obj X))
      theorem CategoryTheory.ShiftMkCore.add_zero_inv_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] (h : CategoryTheory.ShiftMkCore C A) (n : A) (X : C) :
      (h.add n 0).inv.app X = CategoryTheory.CategoryStruct.comp (h.zero.hom.app ((h.F n).toPrefunctor.obj X)) (CategoryTheory.eqToHom (_ : (CategoryTheory.Functor.id C).toPrefunctor.obj ((h.F n).toPrefunctor.obj X) = (h.F (n + 0)).toPrefunctor.obj X))
      @[simp]
      theorem CategoryTheory.hasShiftMk_shift_toLaxMonoidalFunctor_ε (C : Type u) (A : Type u_1) [CategoryTheory.Category.{v, u} C] [AddMonoid A] (h : CategoryTheory.ShiftMkCore C A) :
      CategoryTheory.HasShift.shift = h.zero.inv
      @[simp]
      theorem CategoryTheory.hasShiftMk_shift_toLaxMonoidalFunctor_μ (C : Type u) (A : Type u_1) [CategoryTheory.Category.{v, u} C] [AddMonoid A] (h : CategoryTheory.ShiftMkCore C A) (m : CategoryTheory.Discrete A) (n : CategoryTheory.Discrete A) :
      CategoryTheory.HasShift.shift.toLaxMonoidalFunctorm n = (h.add m.as n.as).inv

      Constructs a HasShift C A instance from ShiftMkCore.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        The monoidal functor from A to C ⥤ C given a HasShift instance.

        Equations
        Instances For

          The shift autoequivalence, moving objects and morphisms 'up'.

          Equations
          Instances For

            Shifting by i + j is the same as shifting by i and then shifting by j.

            Equations
            Instances For

              When k = i + j, shifting by k is the same as shifting by i and then shifting by j.

              Equations
              Instances For

                shifting an object X by n is obtained by the notation X⟦n⟧

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For

                  shifting a morphism f by n is obtained by the notation f⟦n⟧'

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    theorem CategoryTheory.shiftFunctorAdd'_assoc (C : Type u) {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (a₁ : A) (a₂ : A) (a₃ : A) (a₁₂ : A) (a₂₃ : A) (a₁₂₃ : A) (h₁₂ : a₁ + a₂ = a₁₂) (h₂₃ : a₂ + a₃ = a₂₃) (h₁₂₃ : a₁ + a₂ + a₃ = a₁₂₃) :
                    theorem CategoryTheory.shiftFunctorAdd'_assoc_hom_app_assoc {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (a₁ : A) (a₂ : A) (a₃ : A) (a₁₂ : A) (a₂₃ : A) (a₁₂₃ : A) (h₁₂ : a₁ + a₂ = a₁₂) (h₂₃ : a₂ + a₃ = a₂₃) (h₁₂₃ : a₁ + a₂ + a₃ = a₁₂₃) (X : C) {Z : C} (h : (CategoryTheory.shiftFunctor C a₃).toPrefunctor.obj ((CategoryTheory.shiftFunctor C a₂).toPrefunctor.obj ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X)) Z) :
                    CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₁₂ a₃ a₁₂₃ (_ : a₁₂ + a₃ = a₁₂₃)).hom.app X) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor C a₃).toPrefunctor.map ((CategoryTheory.shiftFunctorAdd' C a₁ a₂ a₁₂ h₁₂).hom.app X)) h) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₁ a₂₃ a₁₂₃ (_ : a₁ + a₂₃ = a₁₂₃)).hom.app X) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₂ a₃ a₂₃ h₂₃).hom.app ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X)) h)
                    theorem CategoryTheory.shiftFunctorAdd'_assoc_hom_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (a₁ : A) (a₂ : A) (a₃ : A) (a₁₂ : A) (a₂₃ : A) (a₁₂₃ : A) (h₁₂ : a₁ + a₂ = a₁₂) (h₂₃ : a₂ + a₃ = a₂₃) (h₁₂₃ : a₁ + a₂ + a₃ = a₁₂₃) (X : C) :
                    CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₁₂ a₃ a₁₂₃ (_ : a₁₂ + a₃ = a₁₂₃)).hom.app X) ((CategoryTheory.shiftFunctor C a₃).toPrefunctor.map ((CategoryTheory.shiftFunctorAdd' C a₁ a₂ a₁₂ h₁₂).hom.app X)) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₁ a₂₃ a₁₂₃ (_ : a₁ + a₂₃ = a₁₂₃)).hom.app X) ((CategoryTheory.shiftFunctorAdd' C a₂ a₃ a₂₃ h₂₃).hom.app ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X))
                    theorem CategoryTheory.shiftFunctorAdd'_assoc_inv_app_assoc {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (a₁ : A) (a₂ : A) (a₃ : A) (a₁₂ : A) (a₂₃ : A) (a₁₂₃ : A) (h₁₂ : a₁ + a₂ = a₁₂) (h₂₃ : a₂ + a₃ = a₂₃) (h₁₂₃ : a₁ + a₂ + a₃ = a₁₂₃) (X : C) {Z : C} (h : (CategoryTheory.shiftFunctor C a₁₂₃).toPrefunctor.obj X Z) :
                    CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor C a₃).toPrefunctor.map ((CategoryTheory.shiftFunctorAdd' C a₁ a₂ a₁₂ h₁₂).inv.app X)) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₁₂ a₃ a₁₂₃ (_ : a₁₂ + a₃ = a₁₂₃)).inv.app X) h) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₂ a₃ a₂₃ h₂₃).inv.app ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X)) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₁ a₂₃ a₁₂₃ (_ : a₁ + a₂₃ = a₁₂₃)).inv.app X) h)
                    theorem CategoryTheory.shiftFunctorAdd'_assoc_inv_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (a₁ : A) (a₂ : A) (a₃ : A) (a₁₂ : A) (a₂₃ : A) (a₁₂₃ : A) (h₁₂ : a₁ + a₂ = a₁₂) (h₂₃ : a₂ + a₃ = a₂₃) (h₁₂₃ : a₁ + a₂ + a₃ = a₁₂₃) (X : C) :
                    CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor C a₃).toPrefunctor.map ((CategoryTheory.shiftFunctorAdd' C a₁ a₂ a₁₂ h₁₂).inv.app X)) ((CategoryTheory.shiftFunctorAdd' C a₁₂ a₃ a₁₂₃ (_ : a₁₂ + a₃ = a₁₂₃)).inv.app X) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₂ a₃ a₂₃ h₂₃).inv.app ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X)) ((CategoryTheory.shiftFunctorAdd' C a₁ a₂₃ a₁₂₃ (_ : a₁ + a₂₃ = a₁₂₃)).inv.app X)
                    theorem CategoryTheory.shiftFunctorAdd_assoc_hom_app_assoc {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (a₁ : A) (a₂ : A) (a₃ : A) (X : C) {Z : C} (h : (CategoryTheory.shiftFunctor C a₃).toPrefunctor.obj ((CategoryTheory.shiftFunctor C a₂).toPrefunctor.obj ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X)) Z) :
                    CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd C (a₁ + a₂) a₃).hom.app X) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor C a₃).toPrefunctor.map ((CategoryTheory.shiftFunctorAdd C a₁ a₂).hom.app X)) h) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₁ (a₂ + a₃) (a₁ + a₂ + a₃) (_ : a₁ + (a₂ + a₃) = a₁ + a₂ + a₃)).hom.app X) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd C a₂ a₃).hom.app ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X)) h)
                    theorem CategoryTheory.shiftFunctorAdd_assoc_hom_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (a₁ : A) (a₂ : A) (a₃ : A) (X : C) :
                    CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd C (a₁ + a₂) a₃).hom.app X) ((CategoryTheory.shiftFunctor C a₃).toPrefunctor.map ((CategoryTheory.shiftFunctorAdd C a₁ a₂).hom.app X)) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₁ (a₂ + a₃) (a₁ + a₂ + a₃) (_ : a₁ + (a₂ + a₃) = a₁ + a₂ + a₃)).hom.app X) ((CategoryTheory.shiftFunctorAdd C a₂ a₃).hom.app ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X))
                    theorem CategoryTheory.shiftFunctorAdd_assoc_inv_app_assoc {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (a₁ : A) (a₂ : A) (a₃ : A) (X : C) {Z : C} (h : (CategoryTheory.shiftFunctor C (a₁ + a₂ + a₃)).toPrefunctor.obj X Z) :
                    CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor C a₃).toPrefunctor.map ((CategoryTheory.shiftFunctorAdd C a₁ a₂).inv.app X)) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd C (a₁ + a₂) a₃).inv.app X) h) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd C a₂ a₃).inv.app ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X)) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd' C a₁ (a₂ + a₃) (a₁ + a₂ + a₃) (_ : a₁ + (a₂ + a₃) = a₁ + a₂ + a₃)).inv.app X) h)
                    theorem CategoryTheory.shiftFunctorAdd_assoc_inv_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (a₁ : A) (a₂ : A) (a₃ : A) (X : C) :
                    CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor C a₃).toPrefunctor.map ((CategoryTheory.shiftFunctorAdd C a₁ a₂).inv.app X)) ((CategoryTheory.shiftFunctorAdd C (a₁ + a₂) a₃).inv.app X) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd C a₂ a₃).inv.app ((CategoryTheory.shiftFunctor C a₁).toPrefunctor.obj X)) ((CategoryTheory.shiftFunctorAdd' C a₁ (a₂ + a₃) (a₁ + a₂ + a₃) (_ : a₁ + (a₂ + a₃) = a₁ + a₂ + a₃)).inv.app X)
                    @[simp]
                    theorem CategoryTheory.HasShift.shift_obj_obj {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (n : A) (X : C) :
                    (CategoryTheory.HasShift.shift.toPrefunctor.obj { as := n }).toPrefunctor.obj X = (CategoryTheory.shiftFunctor C n).toPrefunctor.obj X
                    @[inline, reducible]
                    abbrev CategoryTheory.shiftAdd {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (X : C) (i : A) (j : A) :
                    (CategoryTheory.shiftFunctor C (i + j)).toPrefunctor.obj X (CategoryTheory.shiftFunctor C j).toPrefunctor.obj ((CategoryTheory.shiftFunctor C i).toPrefunctor.obj X)

                    Shifting by i + j is the same as shifting by i and then shifting by j.

                    Equations
                    Instances For
                      theorem CategoryTheory.shift_shift' {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddMonoid A] [CategoryTheory.HasShift C A] (X : C) (Y : C) (f : X Y) (i : A) (j : A) :
                      @[inline, reducible]

                      Shifting by zero is the identity functor.

                      Equations
                      Instances For
                        @[simp]
                        theorem CategoryTheory.shiftEquiv'_unitIso (C : Type u) {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (i : A) (j : A) (h : i + j = 0) :
                        @[simp]
                        theorem CategoryTheory.shiftEquiv'_counitIso (C : Type u) {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (i : A) (j : A) (h : i + j = 0) :
                        def CategoryTheory.shiftEquiv' (C : Type u) {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (i : A) (j : A) (h : i + j = 0) :
                        C C

                        Shifting by i and shifting by j forms an equivalence when i + j = 0.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          @[inline, reducible]

                          Shifting by n and shifting by -n forms an equivalence.

                          Equations
                          Instances For
                            @[inline, reducible]
                            abbrev CategoryTheory.shiftShiftNeg {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (X : C) (i : A) :
                            (CategoryTheory.shiftFunctor C (-i)).toPrefunctor.obj ((CategoryTheory.shiftFunctor C i).toPrefunctor.obj X) X

                            Shifting by i and then shifting by -i is the identity.

                            Equations
                            Instances For
                              @[inline, reducible]
                              abbrev CategoryTheory.shiftNegShift {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (X : C) (i : A) :
                              (CategoryTheory.shiftFunctor C i).toPrefunctor.obj ((CategoryTheory.shiftFunctor C (-i)).toPrefunctor.obj X) X

                              Shifting by -i and then shifting by i is the identity.

                              Equations
                              Instances For
                                theorem CategoryTheory.shift_shift_neg' {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] {X : C} {Y : C} (f : X Y) (i : A) :
                                theorem CategoryTheory.shift_neg_shift' {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] {X : C} {Y : C} (f : X Y) (i : A) :
                                theorem CategoryTheory.shift_shiftFunctorCompIsoId_hom_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (n : A) (m : A) (h : n + m = 0) (X : C) :
                                (CategoryTheory.shiftFunctor C n).toPrefunctor.map ((CategoryTheory.shiftFunctorCompIsoId C n m h).hom.app X) = (CategoryTheory.shiftFunctorCompIsoId C m n (_ : m + n = 0)).hom.app ((CategoryTheory.shiftFunctor C n).toPrefunctor.obj X)
                                theorem CategoryTheory.shift_shiftFunctorCompIsoId_inv_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (n : A) (m : A) (h : n + m = 0) (X : C) :
                                (CategoryTheory.shiftFunctor C n).toPrefunctor.map ((CategoryTheory.shiftFunctorCompIsoId C n m h).inv.app X) = (CategoryTheory.shiftFunctorCompIsoId C m n (_ : m + n = 0)).inv.app ((CategoryTheory.shiftFunctor C n).toPrefunctor.obj X)
                                theorem CategoryTheory.shift_shiftFunctorCompIsoId_add_neg_self_hom_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (n : A) (X : C) :
                                (CategoryTheory.shiftFunctor C n).toPrefunctor.map ((CategoryTheory.shiftFunctorCompIsoId C n (-n) (_ : n + -n = 0)).hom.app X) = (CategoryTheory.shiftFunctorCompIsoId C (-n) n (_ : -n + n = 0)).hom.app ((CategoryTheory.shiftFunctor C n).toPrefunctor.obj X)
                                theorem CategoryTheory.shift_shiftFunctorCompIsoId_add_neg_self_inv_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (n : A) (X : C) :
                                (CategoryTheory.shiftFunctor C n).toPrefunctor.map ((CategoryTheory.shiftFunctorCompIsoId C n (-n) (_ : n + -n = 0)).inv.app X) = (CategoryTheory.shiftFunctorCompIsoId C (-n) n (_ : -n + n = 0)).inv.app ((CategoryTheory.shiftFunctor C n).toPrefunctor.obj X)
                                theorem CategoryTheory.shift_shiftFunctorCompIsoId_neg_add_self_hom_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (n : A) (X : C) :
                                (CategoryTheory.shiftFunctor C (-n)).toPrefunctor.map ((CategoryTheory.shiftFunctorCompIsoId C (-n) n (_ : -n + n = 0)).hom.app X) = (CategoryTheory.shiftFunctorCompIsoId C n (-n) (_ : n + -n = 0)).hom.app ((CategoryTheory.shiftFunctor C (-n)).toPrefunctor.obj X)
                                theorem CategoryTheory.shift_shiftFunctorCompIsoId_neg_add_self_inv_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddGroup A] [CategoryTheory.HasShift C A] (n : A) (X : C) :
                                (CategoryTheory.shiftFunctor C (-n)).toPrefunctor.map ((CategoryTheory.shiftFunctorCompIsoId C (-n) n (_ : -n + n = 0)).inv.app X) = (CategoryTheory.shiftFunctorCompIsoId C n (-n) (_ : n + -n = 0)).inv.app ((CategoryTheory.shiftFunctor C (-n)).toPrefunctor.obj X)
                                @[inline, reducible]
                                abbrev CategoryTheory.shiftComm {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddCommMonoid A] [CategoryTheory.HasShift C A] (X : C) (i : A) (j : A) :
                                (CategoryTheory.shiftFunctor C j).toPrefunctor.obj ((CategoryTheory.shiftFunctor C i).toPrefunctor.obj X) (CategoryTheory.shiftFunctor C i).toPrefunctor.obj ((CategoryTheory.shiftFunctor C j).toPrefunctor.obj X)

                                When shifts are indexed by an additive commutative monoid, then shifts commute.

                                Equations
                                Instances For
                                  theorem CategoryTheory.shiftComm' {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddCommMonoid A] [CategoryTheory.HasShift C A] {X : C} {Y : C} (f : X Y) (i : A) (j : A) :

                                  When shifts are indexed by an additive commutative monoid, then shifts commute.

                                  theorem CategoryTheory.shiftFunctorComm_hom_app_comp_shift_shiftFunctorAdd_hom_app_assoc {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddCommMonoid A] [CategoryTheory.HasShift C A] (m₁ : A) (m₂ : A) (m₃ : A) (X : C) {Z : C} (h : (CategoryTheory.shiftFunctor C m₁).toPrefunctor.obj ((CategoryTheory.shiftFunctor C m₃).toPrefunctor.obj ((CategoryTheory.shiftFunctor C m₂).toPrefunctor.obj X)) Z) :
                                  theorem CategoryTheory.shiftFunctorComm_hom_app_comp_shift_shiftFunctorAdd_hom_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] [AddCommMonoid A] [CategoryTheory.HasShift C A] (m₁ : A) (m₂ : A) (m₃ : A) (X : C) :
                                  CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorComm C m₁ (m₂ + m₃)).hom.app X) ((CategoryTheory.shiftFunctor C m₁).toPrefunctor.map ((CategoryTheory.shiftFunctorAdd C m₂ m₃).hom.app X)) = CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd C m₂ m₃).hom.app ((CategoryTheory.shiftFunctor C m₁).toPrefunctor.obj X)) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor C m₃).toPrefunctor.map ((CategoryTheory.shiftFunctorComm C m₁ m₂).hom.app X)) ((CategoryTheory.shiftFunctorComm C m₁ m₃).hom.app ((CategoryTheory.shiftFunctor C m₂).toPrefunctor.obj X)))

                                  auxiliary definition for hasShiftOfFullyFaithful

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For
                                    @[simp]
                                    theorem CategoryTheory.map_hasShiftOfFullyFaithful_add_hom_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] {D : Type u_2} [CategoryTheory.Category.{u_3, u_2} D] [AddMonoid A] [CategoryTheory.HasShift D A] (F : CategoryTheory.Functor C D) [CategoryTheory.Full F] [CategoryTheory.Faithful F] (s : ACategoryTheory.Functor C C) (i : (i : A) → CategoryTheory.Functor.comp (s i) F CategoryTheory.Functor.comp F (CategoryTheory.shiftFunctor D i)) (a : A) (b : A) (X : C) :
                                    F.toPrefunctor.map ((CategoryTheory.hasShiftOfFullyFaithful_add F s i a b).hom.app X) = CategoryTheory.CategoryStruct.comp ((i (a + b)).hom.app X) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd D a b).hom.app (F.toPrefunctor.obj X)) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor D b).toPrefunctor.map ((i a).inv.app X)) ((i b).inv.app ((s a).toPrefunctor.obj X))))
                                    @[simp]
                                    theorem CategoryTheory.map_hasShiftOfFullyFaithful_add_inv_app {C : Type u} {A : Type u_1} [CategoryTheory.Category.{v, u} C] {D : Type u_2} [CategoryTheory.Category.{u_3, u_2} D] [AddMonoid A] [CategoryTheory.HasShift D A] (F : CategoryTheory.Functor C D) [CategoryTheory.Full F] [CategoryTheory.Faithful F] (s : ACategoryTheory.Functor C C) (i : (i : A) → CategoryTheory.Functor.comp (s i) F CategoryTheory.Functor.comp F (CategoryTheory.shiftFunctor D i)) (a : A) (b : A) (X : C) :
                                    F.toPrefunctor.map ((CategoryTheory.hasShiftOfFullyFaithful_add F s i a b).inv.app X) = CategoryTheory.CategoryStruct.comp ((i b).hom.app ((s a).toPrefunctor.obj X)) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor D b).toPrefunctor.map ((i a).hom.app X)) (CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctorAdd D a b).inv.app (F.toPrefunctor.obj X)) ((i (a + b)).inv.app X)))

                                    Given a family of endomorphisms of C which are intertwined by a fully faithful F : C ⥤ D with shift functors on D, we can promote that family to shift functors on C.

                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    Instances For