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. 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.

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.

TODO: Construct a CommShift structure on F from a CommShift structure on G, using opposite categories.

@[reducible, inline]

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]

    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

      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.

      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₁.

      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₂.

      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₂.

      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 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.

      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.

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

      Instances
        theorem CategoryTheory.Adjunction.CommShift.mk' {C : Type u_1} {D : Type u_2} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] {F : CategoryTheory.Functor C D} {G : CategoryTheory.Functor D C} (adj : F G) (A : Type u_3) [AddMonoid A] [CategoryTheory.HasShift C A] [CategoryTheory.HasShift D A] [F.CommShift A] [G.CommShift A] (h : CategoryTheory.NatTrans.CommShift adj.unit A) :
        adj.CommShift A

        Constructor for Adjunction.CommShift.

        theorem CategoryTheory.Adjunction.shift_unit_app {C : Type u_1} {D : Type u_2} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] {F : CategoryTheory.Functor C D} {G : CategoryTheory.Functor D C} (adj : F G) {A : Type u_3} [AddMonoid A] [CategoryTheory.HasShift C A] [CategoryTheory.HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (X : C) :
        (CategoryTheory.shiftFunctor C a).map (adj.unit.app X) = CategoryTheory.CategoryStruct.comp (adj.unit.app ((CategoryTheory.shiftFunctor C a).obj X)) (CategoryTheory.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} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] {F : CategoryTheory.Functor C D} {G : CategoryTheory.Functor D C} (adj : F G) {A : Type u_3} [AddMonoid A] [CategoryTheory.HasShift C A] [CategoryTheory.HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (X : C) {Z : C} (h : (CategoryTheory.shiftFunctor C a).obj (G.obj (F.obj X)) Z) :
        CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor C a).map (adj.unit.app X)) h = CategoryTheory.CategoryStruct.comp (adj.unit.app ((CategoryTheory.shiftFunctor C a).obj X)) (CategoryTheory.CategoryStruct.comp (G.map ((F.commShiftIso a).hom.app X)) (CategoryTheory.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} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] {F : CategoryTheory.Functor C D} {G : CategoryTheory.Functor D C} (adj : F G) {A : Type u_3} [AddMonoid A] [CategoryTheory.HasShift C A] [CategoryTheory.HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (Y : D) :
        (CategoryTheory.shiftFunctor D a).map (adj.counit.app Y) = CategoryTheory.CategoryStruct.comp ((F.commShiftIso a).inv.app (G.obj Y)) (CategoryTheory.CategoryStruct.comp (F.map ((G.commShiftIso a).inv.app Y)) (adj.counit.app ((CategoryTheory.shiftFunctor D a).obj Y)))
        theorem CategoryTheory.Adjunction.shift_counit_app_assoc {C : Type u_1} {D : Type u_2} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] {F : CategoryTheory.Functor C D} {G : CategoryTheory.Functor D C} (adj : F G) {A : Type u_3} [AddMonoid A] [CategoryTheory.HasShift C A] [CategoryTheory.HasShift D A] [F.CommShift A] [G.CommShift A] [adj.CommShift A] (a : A) (Y : D) {Z : D} (h : (CategoryTheory.shiftFunctor D a).obj Y Z) :
        CategoryTheory.CategoryStruct.comp ((CategoryTheory.shiftFunctor D a).map (adj.counit.app Y)) h = CategoryTheory.CategoryStruct.comp ((F.commShiftIso a).inv.app (G.obj Y)) (CategoryTheory.CategoryStruct.comp (F.map ((G.commShiftIso a).inv.app Y)) (CategoryTheory.CategoryStruct.comp (adj.counit.app ((CategoryTheory.shiftFunctor D a).obj Y)) h))

        Auxiliary definition for iso.

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

          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_inv_app {C : Type u_1} {D : Type u_2} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] {F : CategoryTheory.Functor C D} {G : CategoryTheory.Functor D C} (adj : F G) {A : Type u_3} [AddGroup A] [CategoryTheory.HasShift C A] [CategoryTheory.HasShift D A] (a b : A) (h : b + a = 0) [F.CommShift A] (Y : D) :
            (CategoryTheory.Adjunction.RightAdjointCommShift.iso adj a).inv.app Y = CategoryTheory.CategoryStruct.comp (adj.unit.app ((CategoryTheory.shiftFunctor C a).obj (G.obj Y))) (CategoryTheory.CategoryStruct.comp (G.map ((CategoryTheory.shiftFunctorCompIsoId D b a h).inv.app (F.obj ((CategoryTheory.shiftFunctor C a).obj (G.obj Y))))) (CategoryTheory.CategoryStruct.comp (G.map ((CategoryTheory.shiftFunctor D a).map ((CategoryTheory.shiftFunctor D b).map ((F.commShiftIso a).hom.app (G.obj Y))))) (CategoryTheory.CategoryStruct.comp (G.map ((CategoryTheory.shiftFunctor D a).map ((CategoryTheory.shiftFunctorCompIsoId D a b ).hom.app (F.obj (G.obj Y))))) (G.map ((CategoryTheory.shiftFunctor D a).map (adj.counit.app Y))))))

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

            Equations
            Instances For
              @[reducible, inline]
              abbrev CategoryTheory.Equivalence.CommShift {C : Type u_1} {D : Type u_2} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] (E : C D) (A : Type u_3) [AddMonoid A] [CategoryTheory.HasShift C A] [CategoryTheory.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} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] (E : C D) (A : Type u_3) [AddMonoid A] [CategoryTheory.HasShift C A] [CategoryTheory.HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] [E.CommShift A] :
                instance CategoryTheory.Equivalence.CommShift.instCommShiftHomFunctorCounitIso {C : Type u_1} {D : Type u_2} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] (E : C D) (A : Type u_3) [AddMonoid A] [CategoryTheory.HasShift C A] [CategoryTheory.HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] [E.CommShift A] :
                theorem CategoryTheory.Equivalence.CommShift.mk' {C : Type u_1} {D : Type u_2} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] (E : C D) (A : Type u_3) [AddMonoid A] [CategoryTheory.HasShift C A] [CategoryTheory.HasShift D A] [E.functor.CommShift A] [E.inverse.CommShift A] (h : CategoryTheory.NatTrans.CommShift E.unitIso.hom A) :
                E.CommShift A

                Constructor for Equivalence.CommShift.

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

                If E : C ≌ D is an equivalence and we have compatible CommShift structures on E.functor and E.inverse, then we also have compatible CommShift structures on E.symm.functor and E.symm.inverse.

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

                Constructor for Equivalence.CommShift.

                noncomputable def CategoryTheory.Equivalence.commShiftInverse {C : Type u_1} {D : Type u_2} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] (E : C D) (A : Type u_3) [AddGroup A] [CategoryTheory.HasShift C A] [CategoryTheory.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
                  noncomputable def CategoryTheory.Equivalence.commShiftFunctor {C : Type u_1} {D : Type u_2} [CategoryTheory.Category.{u_4, u_1} C] [CategoryTheory.Category.{u_5, u_2} D] (E : C D) (A : Type u_3) [AddGroup A] [CategoryTheory.HasShift C A] [CategoryTheory.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