Adjunctions between functors #
F ⊣ G
represents the data of an adjunction between two functors
F : C ⥤ D
and G : D ⥤ C
. F
is the left adjoint and G
is the right adjoint.
We provide various useful constructors:
mkOfHomEquiv
mkOfUnitCounit
leftAdjointOfEquiv
/rightAdjointOfEquiv
construct a left/right adjoint of a given functor given the action on objects and the relevant equivalence of morphism spaces.adjunctionOfEquivLeft
/adjunctionOfEquivRight
witness that these constructions give adjunctions.
There are also typeclasses IsLeftAdjoint
/ IsRightAdjoint
, carrying data witnessing
that a given functor is a left or right adjoint.
Given [IsLeftAdjoint F]
, a right adjoint of F
can be constructed as rightAdjoint F
.
Adjunction.comp
composes adjunctions.
toEquivalence
upgrades an adjunction to an equivalence,
given witnesses that the unit and counit are pointwise isomorphisms.
Conversely Equivalence.toAdjunction
recovers the underlying adjunction from an equivalence.
F ⊣ G
represents the data of an adjunction between two functors
F : C ⥤ D
and G : D ⥤ C
. F
is the left adjoint and G
is the right adjoint.
To construct an adjunction
between two functors, it's often easier to instead use the
constructors mkOfHomEquiv
or mkOfUnitCounit
. To construct a left adjoint,
there are also constructors leftAdjointOfEquiv
and adjunctionOfEquivLeft
(as
well as their duals) which can be simpler in practice.
Uniqueness of adjoints is shown in CategoryTheory.Adjunction.Opposites
.
See
The equivalence between
Hom (F X) Y
andHom X (G Y)
coming from an adjunction- unit : CategoryTheory.Functor.id C ⟶ CategoryTheory.Functor.comp F G
The unit of an adjunction
- counit : CategoryTheory.Functor.comp G F ⟶ CategoryTheory.Functor.id D
The counit of an adjunction
- homEquiv_unit : ∀ {X : C} {Y : D} {f : F.toPrefunctor.obj X ⟶ Y}, (self.homEquiv X Y) f = CategoryTheory.CategoryStruct.comp (self.unit.app X) (G.toPrefunctor.map f)
Naturality of the unit of an adjunction
- homEquiv_counit : ∀ {X : C} {Y : D} {g : X ⟶ G.toPrefunctor.obj Y}, (self.homEquiv X Y).symm g = CategoryTheory.CategoryStruct.comp (F.toPrefunctor.map g) (self.counit.app Y)
Naturality of the counit of an adjunction
Instances For
The notation F ⊣ G
stands for Adjunction F G
representing that F
is left adjoint to G
Equations
- One or more equations did not get rendered due to their size.
Instances For
A class giving a chosen right adjoint to the functor left
.
- right : CategoryTheory.Functor D C
The right adjoint to
left
- adj : left ⊣ CategoryTheory.IsLeftAdjoint.right left
Instances
A class giving a chosen left adjoint to the functor right
.
- left : CategoryTheory.Functor C D
The left adjoint to
right
- adj : CategoryTheory.IsRightAdjoint.left right ⊣ right
Instances
Extract the left adjoint from the instance giving the chosen adjoint.
Instances For
Extract the right adjoint from the instance giving the chosen adjoint.
Instances For
The adjunction associated to a functor known to be a left adjoint.
Equations
- CategoryTheory.Adjunction.ofLeftAdjoint left = CategoryTheory.IsLeftAdjoint.adj
Instances For
The adjunction associated to a functor known to be a right adjoint.
Equations
- CategoryTheory.Adjunction.ofRightAdjoint right = CategoryTheory.IsRightAdjoint.adj
Instances For
This is an auxiliary data structure useful for constructing adjunctions.
See Adjunction.mkOfHomEquiv
.
This structure won't typically be used anywhere else.
The equivalence between
Hom (F X) Y
andHom X (G Y)
- homEquiv_naturality_left_symm : ∀ {X' X : C} {Y : D} (f : X' ⟶ X) (g : X ⟶ G.toPrefunctor.obj Y), (self.homEquiv X' Y).symm (CategoryTheory.CategoryStruct.comp f g) = CategoryTheory.CategoryStruct.comp (F.toPrefunctor.map f) ((self.homEquiv X Y).symm g)
The property that describes how
homEquiv.symm
transforms compositionsX' ⟶ X ⟶ G Y
- homEquiv_naturality_right : ∀ {X : C} {Y Y' : D} (f : F.toPrefunctor.obj X ⟶ Y) (g : Y ⟶ Y'), (self.homEquiv X Y') (CategoryTheory.CategoryStruct.comp f g) = CategoryTheory.CategoryStruct.comp ((self.homEquiv X Y) f) (G.toPrefunctor.map g)
The property that describes how
homEquiv
transforms compositionsF X ⟶ Y ⟶ Y'
Instances For
This is an auxiliary data structure useful for constructing adjunctions.
See Adjunction.mkOfUnitCounit
.
This structure won't typically be used anywhere else.
- unit : CategoryTheory.Functor.id C ⟶ CategoryTheory.Functor.comp F G
The unit of an adjunction between
F
andG
- counit : CategoryTheory.Functor.comp G F ⟶ CategoryTheory.Functor.id D
The counit of an adjunction between
F
andG
s - left_triangle : CategoryTheory.CategoryStruct.comp (CategoryTheory.whiskerRight self.unit F) (CategoryTheory.CategoryStruct.comp (CategoryTheory.Functor.associator F G F).hom (CategoryTheory.whiskerLeft F self.counit)) = CategoryTheory.NatTrans.id (CategoryTheory.Functor.comp (CategoryTheory.Functor.id C) F)
Equality of the composition of the unit, associator, and counit with the identity
F ⟶ (F G) F ⟶ F (G F) ⟶ F = NatTrans.id F
- right_triangle : CategoryTheory.CategoryStruct.comp (CategoryTheory.whiskerLeft G self.unit) (CategoryTheory.CategoryStruct.comp (CategoryTheory.Functor.associator G F G).inv (CategoryTheory.whiskerRight self.counit G)) = CategoryTheory.NatTrans.id (CategoryTheory.Functor.comp G (CategoryTheory.Functor.id C))
Equality of the composition of the unit, associator, and counit with the identity
G ⟶ G (F G) ⟶ (F G) F ⟶ G = NatTrans.id G
Instances For
Construct an adjunction between F
and G
out of a natural bijection between each
F.obj X ⟶ Y
and X ⟶ G.obj Y
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Construct an adjunction between functors F
and G
given a unit and counit for the adjunction
satisfying the triangle identities.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The adjunction between the identity functor on a category and itself.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- CategoryTheory.Adjunction.instInhabitedAdjunctionId = { default := CategoryTheory.Adjunction.id }
If F and G are naturally isomorphic functors, establish an equivalence of hom-sets.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If G and H are naturally isomorphic functors, establish an equivalence of hom-sets.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Transport an adjunction along a natural isomorphism on the left.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Transport an adjunction along a natural isomorphism on the right.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Transport being a right adjoint along a natural isomorphism.
Equations
- CategoryTheory.Adjunction.rightAdjointOfNatIso h = { left := CategoryTheory.IsRightAdjoint.left F, adj := CategoryTheory.Adjunction.ofNatIsoRight CategoryTheory.IsRightAdjoint.adj h }
Instances For
Transport being a left adjoint along a natural isomorphism.
Equations
- CategoryTheory.Adjunction.leftAdjointOfNatIso h = { right := CategoryTheory.IsLeftAdjoint.right F, adj := CategoryTheory.Adjunction.ofNatIsoLeft CategoryTheory.IsLeftAdjoint.adj h }
Instances For
Composition of adjunctions.
See
Equations
- One or more equations did not get rendered due to their size.
Instances For
If F
and G
are left adjoints then F ⋙ G
is a left adjoint too.
Equations
- One or more equations did not get rendered due to their size.
If F
and G
are right adjoints then F ⋙ G
is a right adjoint too.
Equations
- One or more equations did not get rendered due to their size.
Construct a left adjoint functor to G
, given the functor's value on objects F_obj
and
a bijection e
between F_obj X ⟶ Y
and X ⟶ G.obj Y
satisfying a naturality law
he : ∀ X Y Y' g h, e X Y' (h ≫ g) = e X Y h ≫ G.map g
.
Dual to rightAdjointOfEquiv
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Show that the functor given by leftAdjointOfEquiv
is indeed left adjoint to G
. Dual
to adjunctionOfRightEquiv
.
Equations
Instances For
Construct a right adjoint functor to F
, given the functor's value on objects G_obj
and
a bijection e
between F.obj X ⟶ Y
and X ⟶ G_obj Y
satisfying a naturality law
he : ∀ X Y Y' g h, e X' Y (F.map f ≫ g) = f ≫ e X Y g
.
Dual to leftAdjointOfEquiv
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Show that the functor given by rightAdjointOfEquiv
is indeed right adjoint to F
. Dual
to adjunctionOfEquivRight
.
Equations
Instances For
If the unit and counit of a given adjunction are (pointwise) isomorphisms, then we can upgrade the adjunction to an equivalence.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If the unit and counit for the adjunction corresponding to a right adjoint functor are (pointwise) isomorphisms, then the functor is an equivalence of categories.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The adjunction given by an equivalence of categories. (To obtain the opposite adjunction,
simply use e.symm.toAdjunction
.
Equations
- e.toAdjunction = CategoryTheory.Adjunction.mkOfUnitCounit (CategoryTheory.Adjunction.CoreUnitCounit.mk e.unit e.counit)
Instances For
An equivalence E
is left adjoint to its inverse.
Equations
- CategoryTheory.Functor.adjunction E = (CategoryTheory.Functor.asEquivalence E).toAdjunction
Instances For
If F
is an equivalence, it's a left adjoint.
Equations
- CategoryTheory.Functor.leftAdjointOfEquivalence = { right := CategoryTheory.Functor.inv F, adj := CategoryTheory.Functor.adjunction F }
If F
is an equivalence, it's a right adjoint.
Equations
- CategoryTheory.Functor.rightAdjointOfEquivalence = { left := CategoryTheory.Functor.inv F, adj := CategoryTheory.Functor.adjunction (CategoryTheory.Functor.inv F) }