# Documentation

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, which asserts the existence of a adjoint functor. Given [F.IsLeftAdjoint], a chosen right adjoint can be obtained as F.rightAdjoint.

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.

structure CategoryTheory.Adjunction {C : Type u₁} [] {D : Type u₂} [] (F : ) (G : ) :
Type (max (max (max u₁ u₂) v₁) v₂)

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.

• homEquiv : (X : C) → (Y : D) → (F.obj X Y) (X G.obj Y)

The equivalence between Hom (F X) Y and Hom X (G Y) coming from an adjunction

• unit : F.comp G

• counit : G.comp F

• homEquiv_unit : ∀ {X : C} {Y : D} {f : F.obj X Y}, (self.homEquiv X Y) f = CategoryTheory.CategoryStruct.comp (self.unit.app X) (G.map f)

Naturality of the unit of an adjunction

• homEquiv_counit : ∀ {X : C} {Y : D} {g : X G.obj Y}, (self.homEquiv X Y).symm g = CategoryTheory.CategoryStruct.comp (F.map g) (self.counit.app Y)

Naturality of the counit of an adjunction

Instances For
@[simp]
theorem CategoryTheory.Adjunction.homEquiv_unit {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (self : F G) {X : C} {Y : D} {f : F.obj X Y} :
(self.homEquiv X Y) f = CategoryTheory.CategoryStruct.comp (self.unit.app X) (G.map f)

Naturality of the unit of an adjunction

@[simp]
theorem CategoryTheory.Adjunction.homEquiv_counit {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (self : F G) {X : C} {Y : D} {g : X G.obj Y} :
(self.homEquiv X Y).symm g = CategoryTheory.CategoryStruct.comp (F.map g) (self.counit.app Y)

Naturality of the counit of an adjunction

The notation F ⊣ G stands for Adjunction F G representing that F is left adjoint to G

Equations
Instances For
class CategoryTheory.Functor.IsLeftAdjoint {C : Type u₁} [] {D : Type u₂} [] (left : ) :

A class asserting the existence of a right adjoint.

• exists_rightAdjoint : ∃ (right : ), Nonempty (left right)
Instances
theorem CategoryTheory.Functor.IsLeftAdjoint.exists_rightAdjoint {C : Type u₁} [] {D : Type u₂} [] {left : } [self : left.IsLeftAdjoint] :
∃ (right : ), Nonempty (left right)
class CategoryTheory.Functor.IsRightAdjoint {C : Type u₁} [] {D : Type u₂} [] (right : ) :

A class asserting the existence of a left adjoint.

• exists_leftAdjoint : ∃ (left : ), Nonempty (left right)
Instances
theorem CategoryTheory.Functor.IsRightAdjoint.exists_leftAdjoint {C : Type u₁} [] {D : Type u₂} [] {right : } [self : right.IsRightAdjoint] :
∃ (left : ), Nonempty (left right)
noncomputable def CategoryTheory.Functor.leftAdjoint {C : Type u₁} [] {D : Type u₂} [] (R : ) [R.IsRightAdjoint] :

A chosen left adjoint to a functor that is a right adjoint.

Equations
Instances For
noncomputable def CategoryTheory.Functor.rightAdjoint {C : Type u₁} [] {D : Type u₂} [] (L : ) [L.IsLeftAdjoint] :

A chosen right adjoint to a functor that is a left adjoint.

Equations
Instances For
noncomputable def CategoryTheory.Adjunction.ofIsLeftAdjoint {C : Type u₁} [] {D : Type u₂} [] (left : ) [left.IsLeftAdjoint] :

The adjunction associated to a functor known to be a left adjoint.

Equations
• = .some
Instances For
noncomputable def CategoryTheory.Adjunction.ofIsRightAdjoint {C : Type u₁} [] {D : Type u₂} [] (right : ) [right.IsRightAdjoint] :

The adjunction associated to a functor known to be a right adjoint.

Equations
• = .some
Instances For
theorem CategoryTheory.Adjunction.isLeftAdjoint {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) :
theorem CategoryTheory.Adjunction.isRightAdjoint {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) :
Equations
• =
Equations
• =
theorem CategoryTheory.Adjunction.homEquiv_id {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) (X : C) :
theorem CategoryTheory.Adjunction.homEquiv_symm_id {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) (X : D) :
@[simp]
theorem CategoryTheory.Adjunction.homEquiv_naturality_left_symm {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X' : C} {X : C} {Y : D} (f : X' X) (g : X G.obj Y) :
@[simp]
theorem CategoryTheory.Adjunction.homEquiv_naturality_left {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X' : C} {X : C} {Y : D} (f : X' X) (g : F.obj X Y) :
(adj.homEquiv X' Y) (CategoryTheory.CategoryStruct.comp (F.map f) g) = CategoryTheory.CategoryStruct.comp f ((adj.homEquiv X Y) g)
@[simp]
theorem CategoryTheory.Adjunction.homEquiv_naturality_right {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X : C} {Y : D} {Y' : D} (f : F.obj X Y) (g : Y Y') :
@[simp]
theorem CategoryTheory.Adjunction.homEquiv_naturality_right_symm {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X : C} {Y : D} {Y' : D} (f : X G.obj Y) (g : Y Y') :
(adj.homEquiv X Y').symm (CategoryTheory.CategoryStruct.comp f (G.map g)) = CategoryTheory.CategoryStruct.comp ((adj.homEquiv X Y).symm f) g
theorem CategoryTheory.Adjunction.homEquiv_naturality_left_square_assoc {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X' : C} {X : C} {Y : D} {Y' : D} (f : X' X) (g : F.obj X Y') (h : F.obj X' Y) (k : Y Y') (w : ) {Z : C} (h : G.obj Y' Z) :
theorem CategoryTheory.Adjunction.homEquiv_naturality_left_square {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X' : C} {X : C} {Y : D} {Y' : D} (f : X' X) (g : F.obj X Y') (h : F.obj X' Y) (k : Y Y') (w : ) :
CategoryTheory.CategoryStruct.comp f ((adj.homEquiv X Y') g) = CategoryTheory.CategoryStruct.comp ((adj.homEquiv X' Y) h) (G.map k)
theorem CategoryTheory.Adjunction.homEquiv_naturality_right_square_assoc {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X' : C} {X : C} {Y : D} {Y' : D} (f : X' X) (g : X G.obj Y') (h : X' G.obj Y) (k : Y Y') (w : ) {Z : D} (h : Y' Z) :
CategoryTheory.CategoryStruct.comp (F.map f) (CategoryTheory.CategoryStruct.comp ((adj.homEquiv X Y').symm g) h) = CategoryTheory.CategoryStruct.comp ((adj.homEquiv X' Y).symm h✝)
theorem CategoryTheory.Adjunction.homEquiv_naturality_right_square {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X' : C} {X : C} {Y : D} {Y' : D} (f : X' X) (g : X G.obj Y') (h : X' G.obj Y) (k : Y Y') (w : ) :
CategoryTheory.CategoryStruct.comp (F.map f) ((adj.homEquiv X Y').symm g) = CategoryTheory.CategoryStruct.comp ((adj.homEquiv X' Y).symm h) k
theorem CategoryTheory.Adjunction.homEquiv_naturality_left_square_iff {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X' : C} {X : C} {Y : D} {Y' : D} (f : X' X) (g : F.obj X Y') (h : F.obj X' Y) (k : Y Y') :
CategoryTheory.CategoryStruct.comp f ((adj.homEquiv X Y') g) = CategoryTheory.CategoryStruct.comp ((adj.homEquiv X' Y) h) (G.map k)
theorem CategoryTheory.Adjunction.homEquiv_naturality_right_square_iff {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X' : C} {X : C} {Y : D} {Y' : D} (f : X' X) (g : X G.obj Y') (h : X' G.obj Y) (k : Y Y') :
CategoryTheory.CategoryStruct.comp (F.map f) ((adj.homEquiv X Y').symm g) = CategoryTheory.CategoryStruct.comp ((adj.homEquiv X' Y).symm h) k
@[simp]
theorem CategoryTheory.Adjunction.left_triangle {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) :
@[simp]
theorem CategoryTheory.Adjunction.right_triangle {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) :
@[simp]
theorem CategoryTheory.Adjunction.left_triangle_components_assoc {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) (X : C) {Z : D} (h : F.obj X Z) :
@[simp]
theorem CategoryTheory.Adjunction.left_triangle_components {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) (X : C) :
@[simp]
theorem CategoryTheory.Adjunction.right_triangle_components_assoc {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) (Y : D) {Z : C} (h : G.obj Y Z) :
@[simp]
theorem CategoryTheory.Adjunction.right_triangle_components {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) (Y : D) :
@[simp]
theorem CategoryTheory.Adjunction.counit_naturality_assoc {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X : D} {Y : D} (f : X Y) {Z : D} (h : Y Z) :
@[simp]
theorem CategoryTheory.Adjunction.counit_naturality {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X : D} {Y : D} (f : X Y) :
@[simp]
theorem CategoryTheory.Adjunction.unit_naturality_assoc {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X : C} {Y : C} (f : X Y) {Z : C} (h : G.obj (F.obj Y) Z) :
@[simp]
theorem CategoryTheory.Adjunction.unit_naturality {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {X : C} {Y : C} (f : X Y) :
theorem CategoryTheory.Adjunction.homEquiv_apply_eq {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {A : C} {B : D} (f : F.obj A B) (g : A G.obj B) :
(adj.homEquiv A B) f = g f = (adj.homEquiv A B).symm g
theorem CategoryTheory.Adjunction.eq_homEquiv_apply {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) {A : C} {B : D} (f : F.obj A B) (g : A G.obj B) :
g = (adj.homEquiv A B) f (adj.homEquiv A B).symm g = f
structure CategoryTheory.Adjunction.CoreHomEquiv {C : Type u₁} [] {D : Type u₂} [] (F : ) (G : ) :
Type (max (max (max u₁ u₂) v₁) v₂)

This is an auxiliary data structure useful for constructing adjunctions. See Adjunction.mkOfHomEquiv. This structure won't typically be used anywhere else.

• homEquiv : (X : C) → (Y : D) → (F.obj X Y) (X G.obj Y)

The equivalence between Hom (F X) Y and Hom X (G Y)

• homEquiv_naturality_left_symm : ∀ {X' X : C} {Y : D} (f : X' X) (g : X G.obj Y), (self.homEquiv X' Y).symm = CategoryTheory.CategoryStruct.comp (F.map f) ((self.homEquiv X Y).symm g)

The property that describes how homEquiv.symm transforms compositions X' ⟶ X ⟶ G Y

• homEquiv_naturality_right : ∀ {X : C} {Y Y' : D} (f : F.obj X Y) (g : Y Y'), (self.homEquiv X Y') = CategoryTheory.CategoryStruct.comp ((self.homEquiv X Y) f) (G.map g)

The property that describes how homEquiv transforms compositions F X ⟶ Y ⟶ Y'

Instances For
@[simp]
theorem CategoryTheory.Adjunction.CoreHomEquiv.homEquiv_naturality_left_symm {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (self : ) {X' : C} {X : C} {Y : D} (f : X' X) (g : X G.obj Y) :
(self.homEquiv X' Y).symm = CategoryTheory.CategoryStruct.comp (F.map f) ((self.homEquiv X Y).symm g)

The property that describes how homEquiv.symm transforms compositions X' ⟶ X ⟶ G Y

@[simp]
theorem CategoryTheory.Adjunction.CoreHomEquiv.homEquiv_naturality_right {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (self : ) {X : C} {Y : D} {Y' : D} (f : F.obj X Y) (g : Y Y') :
(self.homEquiv X Y') = CategoryTheory.CategoryStruct.comp ((self.homEquiv X Y) f) (G.map g)

The property that describes how homEquiv transforms compositions F X ⟶ Y ⟶ Y'

@[simp]
theorem CategoryTheory.Adjunction.CoreHomEquiv.homEquiv_naturality_left_aux {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) {X' : C} {X : C} {Y : D} (f : X' X) (g : F.obj X Y) :
CategoryTheory.CategoryStruct.comp ((adj.homEquiv X' (F.obj X)) (F.map f)) (G.map g) = CategoryTheory.CategoryStruct.comp f ((adj.homEquiv X Y) g)
theorem CategoryTheory.Adjunction.CoreHomEquiv.homEquiv_naturality_left {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) {X' : C} {X : C} {Y : D} (f : X' X) (g : F.obj X Y) :
(adj.homEquiv X' Y) (CategoryTheory.CategoryStruct.comp (F.map f) g) = CategoryTheory.CategoryStruct.comp f ((adj.homEquiv X Y) g)
@[simp]
theorem CategoryTheory.Adjunction.CoreHomEquiv.homEquiv_naturality_right_symm_aux {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) {X : C} {Y : D} {Y' : D} (f : X G.obj Y) (g : Y Y') :
CategoryTheory.CategoryStruct.comp (F.map f) ((adj.homEquiv (G.obj Y) Y').symm (G.map g)) = CategoryTheory.CategoryStruct.comp ((adj.homEquiv X Y).symm f) g
theorem CategoryTheory.Adjunction.CoreHomEquiv.homEquiv_naturality_right_symm {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) {X : C} {Y : D} {Y' : D} (f : X G.obj Y) (g : Y Y') :
(adj.homEquiv X Y').symm (CategoryTheory.CategoryStruct.comp f (G.map g)) = CategoryTheory.CategoryStruct.comp ((adj.homEquiv X Y).symm f) g
structure CategoryTheory.Adjunction.CoreUnitCounit {C : Type u₁} [] {D : Type u₂} [] (F : ) (G : ) :
Type (max (max (max u₁ u₂) v₁) v₂)

This is an auxiliary data structure useful for constructing adjunctions. See Adjunction.mkOfUnitCounit. This structure won't typically be used anywhere else.

Instances For
@[simp]

Equality of the composition of the unit, associator, and counit with the identity F ⟶ (F G) F ⟶ F (G F) ⟶ F = NatTrans.id F

@[simp]

Equality of the composition of the unit, associator, and counit with the identity G ⟶ G (F G) ⟶ (F G) F ⟶ G = NatTrans.id G

@[simp]
theorem CategoryTheory.Adjunction.mkOfHomEquiv_counit_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) (Y : D) :
.counit.app Y = (adj.homEquiv (G.obj Y) (.obj Y)).invFun (CategoryTheory.CategoryStruct.id (G.obj Y))
@[simp]
theorem CategoryTheory.Adjunction.mkOfHomEquiv_unit_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) (X : C) :
.unit.app X = (adj.homEquiv X (F.obj X)) (CategoryTheory.CategoryStruct.id (F.obj X))
@[simp]
theorem CategoryTheory.Adjunction.mkOfHomEquiv_homEquiv {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) (X : C) (Y : D) :
.homEquiv X Y = adj.homEquiv X Y
def CategoryTheory.Adjunction.mkOfHomEquiv {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) :
F G

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
@[simp]
theorem CategoryTheory.Adjunction.mkOfUnitCounit_homEquiv_symm_apply {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) (X : C) (Y : D) (g : X G.obj Y) :
(.homEquiv X Y).symm g = CategoryTheory.CategoryStruct.comp (F.map g) (adj.counit.app Y)
@[simp]
theorem CategoryTheory.Adjunction.mkOfUnitCounit_unit {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) :
@[simp]
theorem CategoryTheory.Adjunction.mkOfUnitCounit_homEquiv_apply {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) (X : C) (Y : D) (f : F.obj X Y) :
(.homEquiv X Y) f = CategoryTheory.CategoryStruct.comp (adj.unit.app X) (G.map f)
@[simp]
theorem CategoryTheory.Adjunction.mkOfUnitCounit_counit {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) :
def CategoryTheory.Adjunction.mkOfUnitCounit {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : ) :
F G

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
@[simp]
theorem CategoryTheory.Adjunction.equivHomsetLeftOfNatIso_apply {C : Type u₁} [] {D : Type u₂} [] {F : } {F' : } (iso : F F') {X : C} {Y : D} (f : F.obj X Y) :
@[simp]
theorem CategoryTheory.Adjunction.equivHomsetLeftOfNatIso_symm_apply {C : Type u₁} [] {D : Type u₂} [] {F : } {F' : } (iso : F F') {X : C} {Y : D} (g : F'.obj X Y) :
def CategoryTheory.Adjunction.equivHomsetLeftOfNatIso {C : Type u₁} [] {D : Type u₂} [] {F : } {F' : } (iso : F F') {X : C} {Y : D} :
(F.obj X Y) (F'.obj X Y)

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
@[simp]
theorem CategoryTheory.Adjunction.equivHomsetRightOfNatIso_apply {C : Type u₁} [] {D : Type u₂} [] {G : } {G' : } (iso : G G') {X : C} {Y : D} (f : X G.obj Y) :
@[simp]
theorem CategoryTheory.Adjunction.equivHomsetRightOfNatIso_symm_apply {C : Type u₁} [] {D : Type u₂} [] {G : } {G' : } (iso : G G') {X : C} {Y : D} (g : X G'.obj Y) :
def CategoryTheory.Adjunction.equivHomsetRightOfNatIso {C : Type u₁} [] {D : Type u₂} [] {G : } {G' : } (iso : G G') {X : C} {Y : D} :
(X G.obj Y) (X G'.obj Y)

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
def CategoryTheory.Adjunction.ofNatIsoLeft {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } {H : } (adj : F H) (iso : F G) :
G H

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
def CategoryTheory.Adjunction.ofNatIsoRight {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } {H : } (adj : F G) (iso : G H) :
F H

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
def CategoryTheory.Adjunction.comp {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } {E : Type u₃} [ℰ : ] {H : } {I : } (adj₁ : F G) (adj₂ : H I) :
F.comp H I.comp G

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem CategoryTheory.Adjunction.comp_unit_app_assoc {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } {E : Type u₃} [ℰ : ] {H : } {I : } (adj₁ : F G) (adj₂ : H I) (X : C) {Z : C} (h : G.obj (I.obj (H.obj (F.obj X))) Z) :
@[simp]
theorem CategoryTheory.Adjunction.comp_unit_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } {E : Type u₃} [ℰ : ] {H : } {I : } (adj₁ : F G) (adj₂ : H I) (X : C) :
theorem CategoryTheory.Adjunction.comp_counit_app_assoc {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } {E : Type u₃} [ℰ : ] {H : } {I : } (adj₁ : F G) (adj₂ : H I) (X : E) {Z : E} (h : X Z) :
@[simp]
theorem CategoryTheory.Adjunction.comp_counit_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } {E : Type u₃} [ℰ : ] {H : } {I : } (adj₁ : F G) (adj₂ : H I) (X : E) :
@[simp]
theorem CategoryTheory.Adjunction.leftAdjointOfEquiv_obj {C : Type u₁} [] {D : Type u₂} [] {G : } {F_obj : CD} (e : (X : C) → (Y : D) → (F_obj X Y) (X G.obj Y)) (he : ∀ (X : C) (Y Y' : D) (g : Y Y') (h : F_obj X Y), (e X Y') = CategoryTheory.CategoryStruct.comp ((e X Y) h) (G.map g)) :
∀ (a : C), .obj a = F_obj a
@[simp]
theorem CategoryTheory.Adjunction.leftAdjointOfEquiv_map {C : Type u₁} [] {D : Type u₂} [] {G : } {F_obj : CD} (e : (X : C) → (Y : D) → (F_obj X Y) (X G.obj Y)) (he : ∀ (X : C) (Y Y' : D) (g : Y Y') (h : F_obj X Y), (e X Y') = CategoryTheory.CategoryStruct.comp ((e X Y) h) (G.map g)) {X : C} {X' : C} (f : X X') :
.map f = (e X (F_obj X')).symm (CategoryTheory.CategoryStruct.comp f ((e X' (F_obj X')) (CategoryTheory.CategoryStruct.id (F_obj X'))))
def CategoryTheory.Adjunction.leftAdjointOfEquiv {C : Type u₁} [] {D : Type u₂} [] {G : } {F_obj : CD} (e : (X : C) → (Y : D) → (F_obj X Y) (X G.obj Y)) (he : ∀ (X : C) (Y Y' : D) (g : Y Y') (h : F_obj X Y), (e X Y') = CategoryTheory.CategoryStruct.comp ((e X Y) h) (G.map g)) :

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
@[simp]
theorem CategoryTheory.Adjunction.adjunctionOfEquivLeft_unit_app {C : Type u₁} [] {D : Type u₂} [] {G : } {F_obj : CD} (e : (X : C) → (Y : D) → (F_obj X Y) (X G.obj Y)) (he : ∀ (X : C) (Y Y' : D) (g : Y Y') (h : F_obj X Y), (e X Y') = CategoryTheory.CategoryStruct.comp ((e X Y) h) (G.map g)) (X : C) :
.unit.app X = (e X (F_obj X)) (CategoryTheory.CategoryStruct.id (F_obj X))
@[simp]
theorem CategoryTheory.Adjunction.adjunctionOfEquivLeft_homEquiv {C : Type u₁} [] {D : Type u₂} [] {G : } {F_obj : CD} (e : (X : C) → (Y : D) → (F_obj X Y) (X G.obj Y)) (he : ∀ (X : C) (Y Y' : D) (g : Y Y') (h : F_obj X Y), (e X Y') = CategoryTheory.CategoryStruct.comp ((e X Y) h) (G.map g)) (X : C) (Y : D) :
.homEquiv X Y = e X Y
@[simp]
theorem CategoryTheory.Adjunction.adjunctionOfEquivLeft_counit_app {C : Type u₁} [] {D : Type u₂} [] {G : } {F_obj : CD} (e : (X : C) → (Y : D) → (F_obj X Y) (X G.obj Y)) (he : ∀ (X : C) (Y Y' : D) (g : Y Y') (h : F_obj X Y), (e X Y') = CategoryTheory.CategoryStruct.comp ((e X Y) h) (G.map g)) (Y : D) :
.counit.app Y = (e (G.obj Y) Y).symm (CategoryTheory.CategoryStruct.id (G.obj Y))
def CategoryTheory.Adjunction.adjunctionOfEquivLeft {C : Type u₁} [] {D : Type u₂} [] {G : } {F_obj : CD} (e : (X : C) → (Y : D) → (F_obj X Y) (X G.obj Y)) (he : ∀ (X : C) (Y Y' : D) (g : Y Y') (h : F_obj X Y), (e X Y') = CategoryTheory.CategoryStruct.comp ((e X Y) h) (G.map g)) :

Show that the functor given by leftAdjointOfEquiv is indeed left adjoint to G. Dual to adjunctionOfRightEquiv.

Equations
Instances For
@[simp]
theorem CategoryTheory.Adjunction.rightAdjointOfEquiv_map {C : Type u₁} [] {D : Type u₂} [] {F : } {G_obj : DC} (e : (X : C) → (Y : D) → (F.obj X Y) (X G_obj Y)) (he : ∀ (X' X : C) (Y : D) (f : X' X) (g : F.obj X Y), (e X' Y) (CategoryTheory.CategoryStruct.comp (F.map f) g) = CategoryTheory.CategoryStruct.comp f ((e X Y) g)) {Y : D} {Y' : D} (g : Y Y') :
g = (e (G_obj Y) Y') (CategoryTheory.CategoryStruct.comp ((e (G_obj Y) Y).symm (CategoryTheory.CategoryStruct.id (G_obj Y))) g)
@[simp]
theorem CategoryTheory.Adjunction.rightAdjointOfEquiv_obj {C : Type u₁} [] {D : Type u₂} [] {F : } {G_obj : DC} (e : (X : C) → (Y : D) → (F.obj X Y) (X G_obj Y)) (he : ∀ (X' X : C) (Y : D) (f : X' X) (g : F.obj X Y), (e X' Y) (CategoryTheory.CategoryStruct.comp (F.map f) g) = CategoryTheory.CategoryStruct.comp f ((e X Y) g)) :
∀ (a : D), a = G_obj a
def CategoryTheory.Adjunction.rightAdjointOfEquiv {C : Type u₁} [] {D : Type u₂} [] {F : } {G_obj : DC} (e : (X : C) → (Y : D) → (F.obj X Y) (X G_obj Y)) (he : ∀ (X' X : C) (Y : D) (f : X' X) (g : F.obj X Y), (e X' Y) (CategoryTheory.CategoryStruct.comp (F.map f) g) = CategoryTheory.CategoryStruct.comp f ((e X Y) g)) :

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
@[simp]
theorem CategoryTheory.Adjunction.adjunctionOfEquivRight_counit_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G_obj : DC} (e : (X : C) → (Y : D) → (F.obj X Y) (X G_obj Y)) (he : ∀ (X' X : C) (Y : D) (f : X' X) (g : F.obj X Y), (e X' Y) (CategoryTheory.CategoryStruct.comp (F.map f) g) = CategoryTheory.CategoryStruct.comp f ((e X Y) g)) (Y : D) :
.counit.app Y = (e (G_obj Y) Y).symm (CategoryTheory.CategoryStruct.id (G_obj Y))
@[simp]
theorem CategoryTheory.Adjunction.adjunctionOfEquivRight_homEquiv {C : Type u₁} [] {D : Type u₂} [] {F : } {G_obj : DC} (e : (X : C) → (Y : D) → (F.obj X Y) (X G_obj Y)) (he : ∀ (X' X : C) (Y : D) (f : X' X) (g : F.obj X Y), (e X' Y) (CategoryTheory.CategoryStruct.comp (F.map f) g) = CategoryTheory.CategoryStruct.comp f ((e X Y) g)) (X : C) (Y : D) :
.homEquiv X Y = e X Y
@[simp]
theorem CategoryTheory.Adjunction.adjunctionOfEquivRight_unit_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G_obj : DC} (e : (X : C) → (Y : D) → (F.obj X Y) (X G_obj Y)) (he : ∀ (X' X : C) (Y : D) (f : X' X) (g : F.obj X Y), (e X' Y) (CategoryTheory.CategoryStruct.comp (F.map f) g) = CategoryTheory.CategoryStruct.comp f ((e X Y) g)) (X : C) :
.unit.app X = (e X (F.obj X)) (CategoryTheory.CategoryStruct.id (F.obj X))
def CategoryTheory.Adjunction.adjunctionOfEquivRight {C : Type u₁} [] {D : Type u₂} [] {F : } {G_obj : DC} (e : (X : C) → (Y : D) → (F.obj X Y) (X G_obj Y)) (he : ∀ (X' X : C) (Y : D) (f : X' X) (g : F.obj X Y), (e X' Y) (CategoryTheory.CategoryStruct.comp (F.map f) g) = CategoryTheory.CategoryStruct.comp f ((e X Y) g)) :

Show that the functor given by rightAdjointOfEquiv is indeed right adjoint to F. Dual to adjunctionOfEquivRight.

Equations
Instances For
@[simp]
theorem CategoryTheory.Adjunction.toEquivalence_counitIso_hom_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) [∀ (X : C), CategoryTheory.IsIso (adj.unit.app X)] [∀ (Y : D), CategoryTheory.IsIso (adj.counit.app Y)] (X : D) :
@[simp]
theorem CategoryTheory.Adjunction.toEquivalence_functor {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) [∀ (X : C), CategoryTheory.IsIso (adj.unit.app X)] [∀ (Y : D), CategoryTheory.IsIso (adj.counit.app Y)] :
@[simp]
theorem CategoryTheory.Adjunction.toEquivalence_counitIso_inv_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) [∀ (X : C), CategoryTheory.IsIso (adj.unit.app X)] [∀ (Y : D), CategoryTheory.IsIso (adj.counit.app Y)] (X : D) :
@[simp]
theorem CategoryTheory.Adjunction.toEquivalence_inverse {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) [∀ (X : C), CategoryTheory.IsIso (adj.unit.app X)] [∀ (Y : D), CategoryTheory.IsIso (adj.counit.app Y)] :
@[simp]
theorem CategoryTheory.Adjunction.toEquivalence_unitIso_hom_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) [∀ (X : C), CategoryTheory.IsIso (adj.unit.app X)] [∀ (Y : D), CategoryTheory.IsIso (adj.counit.app Y)] (X : C) :
@[simp]
theorem CategoryTheory.Adjunction.toEquivalence_unitIso_inv_app {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) [∀ (X : C), CategoryTheory.IsIso (adj.unit.app X)] [∀ (Y : D), CategoryTheory.IsIso (adj.counit.app Y)] (X : C) :
noncomputable def CategoryTheory.Adjunction.toEquivalence {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (adj : F G) [∀ (X : C), CategoryTheory.IsIso (adj.unit.app X)] [∀ (Y : D), CategoryTheory.IsIso (adj.counit.app Y)] :
C D

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
theorem CategoryTheory.Functor.isEquivalence_of_isRightAdjoint {C : Type u₁} [] {D : Type u₂} [] (G : ) [G.IsRightAdjoint] [∀ (X : D), CategoryTheory.IsIso (.app X)] [∀ (Y : C), CategoryTheory.IsIso (.counit.app Y)] :
G.IsEquivalence

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.

@[simp]
theorem CategoryTheory.Equivalence.toAdjunction_counit {C : Type u₁} [] {D : Type u₂} [] (e : C D) :
@[simp]
theorem CategoryTheory.Equivalence.toAdjunction_unit {C : Type u₁} [] {D : Type u₂} [] (e : C D) :
def CategoryTheory.Equivalence.toAdjunction {C : Type u₁} [] {D : Type u₂} [] (e : C D) :
e.functor e.inverse

The adjunction given by an equivalence of categories. (To obtain the opposite adjunction, simply use e.symm.toAdjunction.

Equations
Instances For
theorem CategoryTheory.Equivalence.isLeftAdjoint_functor {C : Type u₁} [] {D : Type u₂} [] (e : C D) :
theorem CategoryTheory.Equivalence.isRightAdjoint_inverse {C : Type u₁} [] {D : Type u₂} [] (e : C D) :
theorem CategoryTheory.Equivalence.isLeftAdjoint_inverse {C : Type u₁} [] {D : Type u₂} [] (e : C D) :
theorem CategoryTheory.Equivalence.isRightAdjoint_functor {C : Type u₁} [] {D : Type u₂} [] (e : C D) :
instance CategoryTheory.Functor.isLeftAdjoint_comp {C : Type u₁} [] {D : Type u₂} [] {E : Type u₃} [] (F : ) (G : ) [F.IsLeftAdjoint] [G.IsLeftAdjoint] :

If F and G are left adjoints then F ⋙ G is a left adjoint too.

Equations
• =
instance CategoryTheory.Functor.isRightAdjoint_comp {C : Type u₁} [] {D : Type u₂} [] {E : Type u₃} [] {F : } {G : } [F.IsRightAdjoint] [G.IsRightAdjoint] :

If F and G are right adjoints then F ⋙ G is a right adjoint too.

Equations
• =
theorem CategoryTheory.Functor.isRightAdjoint_of_iso {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (h : F G) [F.IsRightAdjoint] :

Transport being a right adjoint along a natural isomorphism.

theorem CategoryTheory.Functor.isLeftAdjoint_of_iso {C : Type u₁} [] {D : Type u₂} [] {F : } {G : } (h : F G) [F.IsLeftAdjoint] :

Transport being a left adjoint along a natural isomorphism.

noncomputable def CategoryTheory.Functor.adjunction {C : Type u₁} [] {D : Type u₂} [] (E : ) [E.IsEquivalence] :
E E.inv

An equivalence E is left adjoint to its inverse.

Equations
Instances For
@[instance 10]
instance CategoryTheory.Functor.isLeftAdjoint_of_isEquivalence {C : Type u₁} [] {D : Type u₂} [] {F : } [F.IsEquivalence] :
If F is an equivalence, it's a left adjoint.
If F is an equivalence, it's a right adjoint.