Documentation

Mathlib.CategoryTheory.Shift.Adjunction

Adjoints commute with shifts #

Given categories C and D that have shifts by an additive group A, functors F : C ā„¤ D and G : C ā„¤ D, an adjunction F āŠ£ G and a CommShift structure on F, this file constructs a CommShift structure on G. We also do the construction in the other direction: given a CommShift structure on G, we construct a CommShift structure on G; we could do this using opposite categories, but the construction is simple enough that it is not really worth it. As an easy application, if E : C ā‰Œ D is an equivalence and E.functor has a CommShift structure, we get a CommShift structure on E.inverse.

We now explain the construction of a CommShift structure on G given a CommShift structure on F; the other direction is similar. The CommShift structure on G must be compatible with the one on F in the following sense (cf. Adjunction.CommShift): for every a in A, the natural transformation adj.unit : šŸ­ C āŸ¶ G ā‹™ F commutes with the isomorphism shiftFunctor C A ā‹™ G ā‹™ F ā‰… G ā‹™ F ā‹™ shiftFunctor C A induces by F.commShiftIso a and G.commShiftIso a. We actually require a similar condition for adj.counit, but it follows from the one for adj.unit.

In order to simplify the construction of the CommShift structure on G, we first introduce the compatibility condition on adj.unit for a fixed a in A and for isomorphisms eā‚ : shiftFunctor C a ā‹™ F ā‰… F ā‹™ shiftFunctor D a and eā‚‚ : shiftFunctor D a ā‹™ G ā‰… G ā‹™ shiftFunctor C a. We then prove that:

Once we have established all this, the compatibility of the commutation isomorphism for F expressed in CommShift.zero and CommShift.add immediately implies the similar statements for the commutation isomorphisms for G.

@[reducible, inline]
abbrev CategoryTheory.Adjunction.CommShift.CompatibilityUnit {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] {a : A} (eā‚ : (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)) (eā‚‚ : (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)) :

Given an adjunction adj : F āŠ£ G, a in A and commutation isomorphisms eā‚ : shiftFunctor C a ā‹™ F ā‰… F ā‹™ shiftFunctor D a and eā‚‚ : shiftFunctor D a ā‹™ G ā‰… G ā‹™ shiftFunctor C a, this expresses the compatibility of eā‚ and eā‚‚ with the unit of the adjunction adj.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    @[reducible, inline]
    abbrev CategoryTheory.Adjunction.CommShift.CompatibilityCounit {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] {a : A} (eā‚ : (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)) (eā‚‚ : (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)) :

    Given an adjunction adj : F āŠ£ G, a in A and commutation isomorphisms eā‚ : shiftFunctor C a ā‹™ F ā‰… F ā‹™ shiftFunctor D a and eā‚‚ : shiftFunctor D a ā‹™ G ā‰… G ā‹™ shiftFunctor C a, this expresses the compatibility of eā‚ and eā‚‚ with the counit of the adjunction adj.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      theorem CategoryTheory.Adjunction.CommShift.compatibilityCounit_of_compatibilityUnit {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] {a : A} (eā‚ : (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)) (eā‚‚ : (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)) (h : CompatibilityUnit adj eā‚ eā‚‚) :
      CompatibilityCounit adj eā‚ eā‚‚

      Given an adjunction adj : F āŠ£ G, a in A and commutation isomorphisms eā‚ : shiftFunctor C a ā‹™ F ā‰… F ā‹™ shiftFunctor D a and eā‚‚ : shiftFunctor D a ā‹™ G ā‰… G ā‹™ shiftFunctor C a, compatibility of eā‚ and eā‚‚ with the unit of the adjunction adj implies compatibility with the counit of adj.

      theorem CategoryTheory.Adjunction.CommShift.compatibilityUnit_right {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] {a : A} (eā‚ : (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)) (eā‚‚ : (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)) (h : CompatibilityUnit adj eā‚ eā‚‚) (Y : D) :
      eā‚‚.inv.app Y = CategoryStruct.comp (adj.unit.app ((shiftFunctor C a).obj (G.obj Y))) (CategoryStruct.comp (G.map (eā‚.hom.app (G.obj Y))) (G.map ((shiftFunctor D a).map (adj.counit.app Y))))

      Given an adjunction adj : F āŠ£ G, a in A and commutation isomorphisms eā‚ : shiftFunctor C a ā‹™ F ā‰… F ā‹™ shiftFunctor D a and eā‚‚ : shiftFunctor D a ā‹™ G ā‰… G ā‹™ shiftFunctor C a, if eā‚ and eā‚‚ are compatible with the unit of the adjunction adj, then we get a formula for eā‚‚.inv in terms of eā‚.

      theorem CategoryTheory.Adjunction.CommShift.compatibilityCounit_left {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] {a : A} (eā‚ : (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)) (eā‚‚ : (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)) (h : CompatibilityCounit adj eā‚ eā‚‚) (X : C) :
      eā‚.hom.app X = CategoryStruct.comp (F.map ((shiftFunctor C a).map (adj.unit.app X))) (CategoryStruct.comp (F.map (eā‚‚.inv.app (F.obj X))) (adj.counit.app ((shiftFunctor D a).obj (F.obj X))))

      Given an adjunction adj : F āŠ£ G, a in A and commutation isomorphisms eā‚ : shiftFunctor C a ā‹™ F ā‰… F ā‹™ shiftFunctor D a and eā‚‚ : shiftFunctor D a ā‹™ G ā‰… G ā‹™ shiftFunctor C a, if eā‚ and eā‚‚ are compatible with the counit of the adjunction adj, then we get a formula for eā‚.hom in terms of eā‚‚.

      theorem CategoryTheory.Adjunction.CommShift.compatibilityUnit_unique_right {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] {a : A} (eā‚ : (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)) (eā‚‚ eā‚‚' : (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)) (h : CompatibilityUnit adj eā‚ eā‚‚) (h' : CompatibilityUnit adj eā‚ eā‚‚') :
      eā‚‚ = eā‚‚'

      Given an adjunction adj : F āŠ£ G, a in A and commutation isomorphisms eā‚ : shiftFunctor C a ā‹™ F ā‰… F ā‹™ shiftFunctor D a and eā‚‚ : shiftFunctor D a ā‹™ G ā‰… G ā‹™ shiftFunctor C a, if eā‚ and eā‚‚ are compatible with the unit of the adjunction adj, then eā‚ uniquely determines eā‚‚.

      theorem CategoryTheory.Adjunction.CommShift.compatibilityUnit_unique_left {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] {a : A} (eā‚ eā‚' : (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)) (eā‚‚ : (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)) (h : CompatibilityUnit adj eā‚ eā‚‚) (h' : CompatibilityUnit adj eā‚' eā‚‚) :
      eā‚ = eā‚'

      Given an adjunction adj : F āŠ£ G, a in A and commutation isomorphisms eā‚ : shiftFunctor C a ā‹™ F ā‰… F ā‹™ shiftFunctor D a and eā‚‚ : shiftFunctor D a ā‹™ G ā‰… G ā‹™ shiftFunctor C a, if eā‚ and eā‚‚ are compatible with the unit of the adjunction adj, then eā‚‚ uniquely determines eā‚.

      The isomorphisms Functor.CommShift.isoZero F and Functor.CommShift.isoZero G are compatible with the unit of an adjunction F āŠ£ G.

      theorem CategoryTheory.Adjunction.CommShift.compatibilityUnit_isoAdd {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] {a b : A} (eā‚ : (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)) (fā‚ : (shiftFunctor C b).comp F ā‰… F.comp (shiftFunctor D b)) (eā‚‚ : (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)) (fā‚‚ : (shiftFunctor D b).comp G ā‰… G.comp (shiftFunctor C b)) (h : CompatibilityUnit adj eā‚ eā‚‚) (h' : CompatibilityUnit adj fā‚ fā‚‚) :

      Given an adjunction adj : F āŠ£ G, a, b in A and commutation isomorphisms between shifts by a (resp. b) and F and G, if these commutation isomorphisms are compatible with the unit of adj, then so are the commutation isomorphisms between shifts by a + b and F and G constructed by Functor.CommShift.isoAdd.

      class CategoryTheory.Adjunction.CommShift {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] :

      The property for CommShift structures on F and G to be compatible with an adjunction F āŠ£ G.

      Instances
        @[simp]
        theorem CategoryTheory.Adjunction.unit_app_commShiftIso_hom_app {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (X : C) :
        CategoryStruct.comp (adj.unit.app ((shiftFunctor C a).obj X)) (((F.comp G).commShiftIso a).hom.app X) = (shiftFunctor C a).map (adj.unit.app X)
        @[simp]
        theorem CategoryTheory.Adjunction.unit_app_commShiftIso_hom_app_assoc {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (X : C) {Z : C} (h : (shiftFunctor C a).obj (G.obj (F.obj X)) āŸ¶ Z) :
        CategoryStruct.comp (adj.unit.app ((shiftFunctor C a).obj X)) (CategoryStruct.comp (((F.comp G).commShiftIso a).hom.app X) h) = CategoryStruct.comp ((shiftFunctor C a).map (adj.unit.app X)) h
        @[simp]
        theorem CategoryTheory.Adjunction.unit_app_shift_commShiftIso_inv_app {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (X : C) :
        CategoryStruct.comp ((shiftFunctor C a).map (adj.unit.app X)) (((F.comp G).commShiftIso a).inv.app X) = adj.unit.app ((shiftFunctor C a).obj X)
        @[simp]
        theorem CategoryTheory.Adjunction.unit_app_shift_commShiftIso_inv_app_assoc {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (X : C) {Z : C} (h : G.obj (F.obj ((shiftFunctor C a).obj X)) āŸ¶ Z) :
        CategoryStruct.comp ((shiftFunctor C a).map (adj.unit.app X)) (CategoryStruct.comp (((F.comp G).commShiftIso a).inv.app X) h) = CategoryStruct.comp (adj.unit.app ((shiftFunctor C a).obj X)) h
        @[simp]
        theorem CategoryTheory.Adjunction.commShiftIso_hom_app_counit_app_shift {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (Y : D) :
        CategoryStruct.comp (((G.comp F).commShiftIso a).hom.app Y) ((shiftFunctor D a).map (adj.counit.app Y)) = adj.counit.app ((shiftFunctor D a).obj Y)
        @[simp]
        theorem CategoryTheory.Adjunction.commShiftIso_hom_app_counit_app_shift_assoc {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (Y : D) {Z : D} (h : (shiftFunctor D a).obj Y āŸ¶ Z) :
        CategoryStruct.comp (((G.comp F).commShiftIso a).hom.app Y) (CategoryStruct.comp ((shiftFunctor D a).map (adj.counit.app Y)) h) = CategoryStruct.comp (adj.counit.app ((shiftFunctor D a).obj Y)) h
        @[simp]
        theorem CategoryTheory.Adjunction.commShiftIso_inv_app_counit_app {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (Y : D) :
        CategoryStruct.comp (((G.comp F).commShiftIso a).inv.app Y) (adj.counit.app ((shiftFunctor D a).obj Y)) = (shiftFunctor D a).map (adj.counit.app Y)
        @[simp]
        theorem CategoryTheory.Adjunction.commShiftIso_inv_app_counit_app_assoc {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (Y : D) {Z : D} (h : (shiftFunctor D a).obj Y āŸ¶ Z) :
        CategoryStruct.comp (((G.comp F).commShiftIso a).inv.app Y) (CategoryStruct.comp (adj.counit.app ((shiftFunctor D a).obj Y)) h) = CategoryStruct.comp ((shiftFunctor D a).map (adj.counit.app Y)) h
        theorem CategoryTheory.Adjunction.CommShift.mk' {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] (h : NatTrans.CommShift adj.unit A) :
        adj.CommShift A

        Constructor for Adjunction.CommShift.

        instance CategoryTheory.Adjunction.CommShift.instId {C : Type u_1} [Category.{u_4, u_1} C] (A : Type u_3) [AddMonoid A] [HasShift C A] :
        id.CommShift A

        The identity adjunction is compatible with the trivial CommShift structure on the identity functor.

        instance CategoryTheory.Adjunction.CommShift.instComp {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_7, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] {E : Type u_4} [Category.{u_6, u_4} E] {F' : Functor D E} {G' : Functor E D} (adj' : F' āŠ£ G') [HasShift E A] [F'.CommShift A] [G'.CommShift A] [adj.CommShift A] [adj'.CommShift A] :
        (adj.comp adj').CommShift A

        Compatibility of Adjunction.Commshift with the composition of adjunctions.

        theorem CategoryTheory.Adjunction.shift_unit_app {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (X : C) :
        (shiftFunctor C a).map (adj.unit.app X) = CategoryStruct.comp (adj.unit.app ((shiftFunctor C a).obj X)) (CategoryStruct.comp (G.map ((F.commShiftIso a).hom.app X)) ((G.commShiftIso a).hom.app (F.obj X)))
        theorem CategoryTheory.Adjunction.shift_unit_app_assoc {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (X : C) {Z : C} (h : (shiftFunctor C a).obj (G.obj (F.obj X)) āŸ¶ Z) :
        CategoryStruct.comp ((shiftFunctor C a).map (adj.unit.app X)) h = CategoryStruct.comp (adj.unit.app ((shiftFunctor C a).obj X)) (CategoryStruct.comp (G.map ((F.commShiftIso a).hom.app X)) (CategoryStruct.comp ((G.commShiftIso a).hom.app (F.obj X)) h))
        theorem CategoryTheory.Adjunction.shift_counit_app {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (Y : D) :
        (shiftFunctor D a).map (adj.counit.app Y) = CategoryStruct.comp ((F.commShiftIso a).inv.app (G.obj Y)) (CategoryStruct.comp (F.map ((G.commShiftIso a).inv.app Y)) (adj.counit.app ((shiftFunctor D a).obj Y)))
        theorem CategoryTheory.Adjunction.shift_counit_app_assoc {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddMonoid A] [HasShift C A] [HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (Y : D) {Z : D} (h : (shiftFunctor D a).obj Y āŸ¶ Z) :
        CategoryStruct.comp ((shiftFunctor D a).map (adj.counit.app Y)) h = CategoryStruct.comp ((F.commShiftIso a).inv.app (G.obj Y)) (CategoryStruct.comp (F.map ((G.commShiftIso a).inv.app Y)) (CategoryStruct.comp (adj.counit.app ((shiftFunctor D a).obj Y)) h))
        noncomputable def CategoryTheory.Adjunction.RightAdjointCommShift.iso' {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : b + a = 0) [F.CommShift A] :
        (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)

        Auxiliary definition for iso.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          noncomputable def CategoryTheory.Adjunction.RightAdjointCommShift.iso {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a : A) [F.CommShift A] :
          (shiftFunctor D a).comp G ā‰… G.comp (shiftFunctor C a)

          Given an adjunction F āŠ£ G and a CommShift structure on F, these are the candidate CommShift.iso a isomorphisms for a compatible CommShift structure on G.

          Equations
          Instances For
            theorem CategoryTheory.Adjunction.RightAdjointCommShift.iso_hom_app {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : b + a = 0) [F.CommShift A] (X : D) :
            (iso adj a).hom.app X = CategoryStruct.comp ((shiftFunctorCompIsoId C b a h).inv.app (G.obj ((shiftFunctor D a).obj X))) (CategoryStruct.comp ((shiftFunctor C a).map (adj.unit.app ((shiftFunctor C b).obj (G.obj ((shiftFunctor D a).obj X))))) (CategoryStruct.comp ((shiftFunctor C a).map (G.map ((F.commShiftIso b).hom.app (G.obj ((shiftFunctor D a).obj X))))) (CategoryStruct.comp ((shiftFunctor C a).map (G.map ((shiftFunctor D b).map (adj.counit.app ((shiftFunctor D a).obj X))))) ((shiftFunctor C a).map (G.map ((shiftFunctorCompIsoId D a b ā‹Æ).hom.app X))))))
            theorem CategoryTheory.Adjunction.RightAdjointCommShift.iso_hom_app_assoc {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : b + a = 0) [F.CommShift A] (X : D) {Z : C} (hāœ : (shiftFunctor C a).obj (G.obj X) āŸ¶ Z) :
            CategoryStruct.comp ((iso adj a).hom.app X) hāœ = CategoryStruct.comp ((shiftFunctorCompIsoId C b a h).inv.app (G.obj ((shiftFunctor D a).obj X))) (CategoryStruct.comp ((shiftFunctor C a).map (adj.unit.app ((shiftFunctor C b).obj (G.obj ((shiftFunctor D a).obj X))))) (CategoryStruct.comp ((shiftFunctor C a).map (G.map ((F.commShiftIso b).hom.app (G.obj ((shiftFunctor D a).obj X))))) (CategoryStruct.comp ((shiftFunctor C a).map (G.map ((shiftFunctor D b).map (adj.counit.app ((shiftFunctor D a).obj X))))) (CategoryStruct.comp ((shiftFunctor C a).map (G.map ((shiftFunctorCompIsoId D a b ā‹Æ).hom.app X))) hāœ))))
            theorem CategoryTheory.Adjunction.RightAdjointCommShift.iso_inv_app {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : b + a = 0) [F.CommShift A] (Y : D) :
            (iso adj a).inv.app Y = CategoryStruct.comp (adj.unit.app ((shiftFunctor C a).obj (G.obj Y))) (CategoryStruct.comp (G.map ((shiftFunctorCompIsoId D b a h).inv.app (F.obj ((shiftFunctor C a).obj (G.obj Y))))) (CategoryStruct.comp (G.map ((shiftFunctor D a).map ((shiftFunctor D b).map ((F.commShiftIso a).hom.app (G.obj Y))))) (CategoryStruct.comp (G.map ((shiftFunctor D a).map ((shiftFunctorCompIsoId D a b ā‹Æ).hom.app (F.obj (G.obj Y))))) (G.map ((shiftFunctor D a).map (adj.counit.app Y))))))
            theorem CategoryTheory.Adjunction.RightAdjointCommShift.iso_inv_app_assoc {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : b + a = 0) [F.CommShift A] (Y : D) {Z : C} (hāœ : G.obj ((shiftFunctor D a).obj Y) āŸ¶ Z) :
            CategoryStruct.comp ((iso adj a).inv.app Y) hāœ = CategoryStruct.comp (adj.unit.app ((shiftFunctor C a).obj (G.obj Y))) (CategoryStruct.comp (G.map ((shiftFunctorCompIsoId D b a h).inv.app (F.obj ((shiftFunctor C a).obj (G.obj Y))))) (CategoryStruct.comp (G.map ((shiftFunctor D a).map ((shiftFunctor D b).map ((F.commShiftIso a).hom.app (G.obj Y))))) (CategoryStruct.comp (G.map ((shiftFunctor D a).map ((shiftFunctorCompIsoId D a b ā‹Æ).hom.app (F.obj (G.obj Y))))) (CategoryStruct.comp (G.map ((shiftFunctor D a).map (adj.counit.app Y))) hāœ))))
            theorem CategoryTheory.Adjunction.RightAdjointCommShift.compatibilityUnit_iso {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] [F.CommShift A] (a : A) :
            CommShift.CompatibilityUnit adj (F.commShiftIso a) (iso adj a)

            The commutation isomorphisms of Adjunction.RightAdjointCommShift.iso are compatible with the unit of the adjunction.

            noncomputable def CategoryTheory.Adjunction.rightAdjointCommShift {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [F.CommShift A] :
            G.CommShift A

            Given an adjunction F āŠ£ G and a CommShift structure on F, this constructs the unique compatible CommShift structure on G.

            Equations
            Instances For
              @[simp]
              theorem CategoryTheory.Adjunction.rightAdjointCommShift_iso {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [F.CommShift A] (a : A) :
              theorem CategoryTheory.Adjunction.commShift_of_leftAdjoint {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [F.CommShift A] :
              adj.CommShift A
              noncomputable def CategoryTheory.Adjunction.LeftAdjointCommShift.iso' {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : a + b = 0) [G.CommShift A] :
              (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)

              Auxiliary definition for iso.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                noncomputable def CategoryTheory.Adjunction.LeftAdjointCommShift.iso {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a : A) [G.CommShift A] :
                (shiftFunctor C a).comp F ā‰… F.comp (shiftFunctor D a)

                Given an adjunction F āŠ£ G and a CommShift structure on G, these are the candidate CommShift.iso a isomorphisms for a compatible CommShift structure on F.

                Equations
                Instances For
                  theorem CategoryTheory.Adjunction.LeftAdjointCommShift.iso_hom_app {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_4, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : a + b = 0) [G.CommShift A] (X : C) :
                  (iso adj a).hom.app X = CategoryStruct.comp (F.map ((shiftFunctor C a).map (adj.unit.app X))) (CategoryStruct.comp (F.map ((shiftFunctor C a).map (G.map ((shiftFunctorCompIsoId D a b h).inv.app (F.obj X))))) (CategoryStruct.comp (F.map ((shiftFunctor C a).map ((G.commShiftIso b).hom.app ((shiftFunctor D a).obj (F.obj X))))) (CategoryStruct.comp (F.map ((shiftFunctorCompIsoId C b a ā‹Æ).hom.app (G.obj ((shiftFunctor D a).obj (F.obj X))))) (adj.counit.app ((shiftFunctor D a).obj (F.obj X))))))
                  theorem CategoryTheory.Adjunction.LeftAdjointCommShift.iso_hom_app_assoc {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_4, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : a + b = 0) [G.CommShift A] (X : C) {Z : D} (hāœ : (shiftFunctor D a).obj (F.obj X) āŸ¶ Z) :
                  CategoryStruct.comp ((iso adj a).hom.app X) hāœ = CategoryStruct.comp (F.map ((shiftFunctor C a).map (adj.unit.app X))) (CategoryStruct.comp (F.map ((shiftFunctor C a).map (G.map ((shiftFunctorCompIsoId D a b h).inv.app (F.obj X))))) (CategoryStruct.comp (F.map ((shiftFunctor C a).map ((G.commShiftIso b).hom.app ((shiftFunctor D a).obj (F.obj X))))) (CategoryStruct.comp (F.map ((shiftFunctorCompIsoId C b a ā‹Æ).hom.app (G.obj ((shiftFunctor D a).obj (F.obj X))))) (CategoryStruct.comp (adj.counit.app ((shiftFunctor D a).obj (F.obj X))) hāœ))))
                  theorem CategoryTheory.Adjunction.LeftAdjointCommShift.iso_inv_app {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_4, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : a + b = 0) [G.CommShift A] (Y : C) :
                  (iso adj a).inv.app Y = CategoryStruct.comp ((shiftFunctor D a).map (F.map ((shiftFunctorCompIsoId C a b h).inv.app Y))) (CategoryStruct.comp ((shiftFunctor D a).map (F.map ((shiftFunctor C b).map (adj.unit.app ((shiftFunctor C a).obj Y))))) (CategoryStruct.comp ((shiftFunctor D a).map (F.map ((G.commShiftIso b).inv.app (F.obj ((shiftFunctor C a).obj Y))))) (CategoryStruct.comp ((shiftFunctor D a).map (adj.counit.app ((shiftFunctor D b).obj (F.obj ((shiftFunctor C a).obj Y))))) ((shiftFunctorCompIsoId D b a ā‹Æ).hom.app (F.obj ((shiftFunctor C a).obj Y))))))
                  theorem CategoryTheory.Adjunction.LeftAdjointCommShift.iso_inv_app_assoc {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_4, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] (a b : A) (h : a + b = 0) [G.CommShift A] (Y : C) {Z : D} (hāœ : F.obj ((shiftFunctor C a).obj Y) āŸ¶ Z) :
                  CategoryStruct.comp ((iso adj a).inv.app Y) hāœ = CategoryStruct.comp ((shiftFunctor D a).map (F.map ((shiftFunctorCompIsoId C a b h).inv.app Y))) (CategoryStruct.comp ((shiftFunctor D a).map (F.map ((shiftFunctor C b).map (adj.unit.app ((shiftFunctor C a).obj Y))))) (CategoryStruct.comp ((shiftFunctor D a).map (F.map ((G.commShiftIso b).inv.app (F.obj ((shiftFunctor C a).obj Y))))) (CategoryStruct.comp ((shiftFunctor D a).map (adj.counit.app ((shiftFunctor D b).obj (F.obj ((shiftFunctor C a).obj Y))))) (CategoryStruct.comp ((shiftFunctorCompIsoId D b a ā‹Æ).hom.app (F.obj ((shiftFunctor C a).obj Y))) hāœ))))
                  theorem CategoryTheory.Adjunction.LeftAdjointCommShift.compatibilityUnit_iso {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) {A : Type u_3} [AddGroup A] [HasShift C A] [HasShift D A] [G.CommShift A] (a : A) :
                  CommShift.CompatibilityUnit adj (iso adj a) (G.commShiftIso a)

                  The commutation isomorphisms of Adjunction.LeftAdjointCommShift.iso are compatible with the unit of the adjunction.

                  noncomputable def CategoryTheory.Adjunction.leftAdjointCommShift {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [G.CommShift A] :
                  F.CommShift A

                  Given an adjunction F āŠ£ G and a CommShift structure on G, this constructs the unique compatible CommShift structure on F.

                  Equations
                  Instances For
                    @[simp]
                    theorem CategoryTheory.Adjunction.leftAdjointCommShift_iso {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [G.CommShift A] (a : A) :
                    theorem CategoryTheory.Adjunction.commShift_of_rightAdjoint {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_4, u_2} D] {F : Functor C D} {G : Functor D C} (adj : F āŠ£ G) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [G.CommShift A] :
                    adj.CommShift A
                    @[reducible, inline]
                    abbrev CategoryTheory.Equivalence.CommShift {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] :

                    If E : C ā‰Œ D is an equivalence, this expresses the compatibility of CommShift structures on E.functor and E.inverse.

                    Equations
                    • E.CommShift A = E.toAdjunction.CommShift A
                    Instances For
                      instance CategoryTheory.Equivalence.CommShift.instCommShiftHomFunctorUnitIso {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] [E.CommShift A] :
                      NatTrans.CommShift E.unitIso.hom A
                      instance CategoryTheory.Equivalence.CommShift.instCommShiftHomFunctorCounitIso {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] [E.CommShift A] :
                      NatTrans.CommShift E.counitIso.hom A
                      instance CategoryTheory.Equivalence.CommShift.instCommShiftInverseSymmOfFunctor {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [h : E.functor.CommShift A] :
                      E.symm.inverse.CommShift A
                      Equations
                      instance CategoryTheory.Equivalence.CommShift.instCommShiftFunctorSymmOfInverse {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [h : E.inverse.CommShift A] :
                      E.symm.functor.CommShift A
                      Equations
                      theorem CategoryTheory.Equivalence.CommShift.mk' {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] (h : NatTrans.CommShift E.unitIso.hom A) :
                      E.CommShift A

                      Constructor for Equivalence.CommShift.

                      The forward functor of the identity equivalence is compatible with shifts.

                      Equations

                      The inverse functor of the identity equivalence is compatible with shifts.

                      Equations
                      instance CategoryTheory.Equivalence.CommShift.instRefl {C : Type u_1} [Category.{u_4, u_1} C] (A : Type u_3) [AddMonoid A] [HasShift C A] :
                      refl.CommShift A

                      The identity equivalence is compatible with shifts.

                      instance CategoryTheory.Equivalence.CommShift.instSymm {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] [E.CommShift A] :
                      E.symm.CommShift A

                      If an equivalence E : C ā‰Œ D is compatible with shifts, so is E.symm.

                      theorem CategoryTheory.Equivalence.CommShift.mk'' {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_4, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] (h : NatTrans.CommShift E.counitIso.hom A) :
                      E.CommShift A

                      Constructor for Equivalence.CommShift.

                      instance CategoryTheory.Equivalence.CommShift.instCommShiftFunctorTrans {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_6, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] {F : Type u_4} [Category.{u_7, u_4} F] [HasShift F A] {E' : D ā‰Œ F} [E'.functor.CommShift A] :
                      (E.trans E').functor.CommShift A

                      If E : C ā‰Œ D and E' : D ā‰Œ F are equivalence whose forward functors are compatible with shifts, so is (E.trans E').functor.

                      Equations
                      instance CategoryTheory.Equivalence.CommShift.instCommShiftInverseTrans {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_6, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [E.inverse.CommShift A] {F : Type u_4} [Category.{u_7, u_4} F] [HasShift F A] {E' : D ā‰Œ F} [E'.inverse.CommShift A] :
                      (E.trans E').inverse.CommShift A

                      If E : C ā‰Œ D and E' : D ā‰Œ F are equivalence whose inverse functors are compatible with shifts, so is (E.trans E').inverse.

                      Equations
                      instance CategoryTheory.Equivalence.CommShift.instTrans {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_7, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddMonoid A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] {F : Type u_4} [Category.{u_6, u_4} F] [HasShift F A] {E' : D ā‰Œ F} [E.CommShift A] [E'.functor.CommShift A] [E'.inverse.CommShift A] [E'.CommShift A] :
                      (E.trans E').CommShift A

                      If equivalences E : C ā‰Œ D and E' : D ā‰Œ F are compatible with shifts, so is E.trans E'.

                      noncomputable def CategoryTheory.Equivalence.commShiftInverse {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] :
                      E.inverse.CommShift A

                      If E : C ā‰Œ D is an equivalence and we have a CommShift structure on E.functor, this constructs the unique compatible CommShift structure on E.inverse.

                      Equations
                      • E.commShiftInverse A = E.toAdjunction.rightAdjointCommShift A
                      Instances For
                        theorem CategoryTheory.Equivalence.commShift_of_functor {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [E.functor.CommShift A] :
                        E.CommShift A
                        noncomputable def CategoryTheory.Equivalence.commShiftFunctor {C : Type u_1} {D : Type u_2} [Category.{u_4, u_1} C] [Category.{u_5, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [E.inverse.CommShift A] :
                        E.functor.CommShift A

                        If E : C ā‰Œ D is an equivalence and we have a CommShift structure on E.inverse, this constructs the unique compatible CommShift structure on E.functor.

                        Equations
                        • E.commShiftFunctor A = E.symm.toAdjunction.rightAdjointCommShift A
                        Instances For
                          theorem CategoryTheory.Equivalence.commShift_of_inverse {C : Type u_1} {D : Type u_2} [Category.{u_5, u_1} C] [Category.{u_4, u_2} D] (E : C ā‰Œ D) (A : Type u_3) [AddGroup A] [HasShift C A] [HasShift D A] [E.inverse.CommShift A] :
                          E.CommShift A