Uniqueness of adjoints #
This file shows that adjoints are unique up to natural isomorphism.
Main results #
Adjunction.leftAdjointUniq
: IfF
andF'
are both left adjoint toG
, then they are naturally isomorphic.Adjunction.rightAdjointUniq
: IfG
andG'
are both right adjoint toF
, then they are naturally isomorphic.
def
CategoryTheory.Adjunction.leftAdjointUniq
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
:
If F
and F'
are both left adjoint to G
, then they are naturally isomorphic.
Equations
- adj1.leftAdjointUniq adj2 = ((CategoryTheory.conjugateIsoEquiv adj1 adj2).symm (CategoryTheory.Iso.refl G)).symm
Instances For
theorem
CategoryTheory.Adjunction.homEquiv_leftAdjointUniq_hom_app
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(x : C)
:
@[simp]
theorem
CategoryTheory.Adjunction.unit_leftAdjointUniq_hom
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
:
@[simp]
theorem
CategoryTheory.Adjunction.unit_leftAdjointUniq_hom_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
{Z : Functor C C}
(h : F'.comp G ⟶ Z)
:
CategoryStruct.comp adj1.unit (CategoryStruct.comp (whiskerRight (adj1.leftAdjointUniq adj2).hom G) h) = CategoryStruct.comp adj2.unit h
@[simp]
theorem
CategoryTheory.Adjunction.unit_leftAdjointUniq_hom_app
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(x : C)
:
CategoryStruct.comp (adj1.unit.app x) (G.map ((adj1.leftAdjointUniq adj2).hom.app x)) = adj2.unit.app x
@[simp]
theorem
CategoryTheory.Adjunction.unit_leftAdjointUniq_hom_app_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(x : C)
{Z : C}
(h : G.obj (F'.obj x) ⟶ Z)
:
CategoryStruct.comp (adj1.unit.app x) (CategoryStruct.comp (G.map ((adj1.leftAdjointUniq adj2).hom.app x)) h) = CategoryStruct.comp (adj2.unit.app x) h
@[simp]
theorem
CategoryTheory.Adjunction.leftAdjointUniq_hom_counit
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
:
@[simp]
theorem
CategoryTheory.Adjunction.leftAdjointUniq_hom_counit_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
{Z : Functor D D}
(h : Functor.id D ⟶ Z)
:
CategoryStruct.comp (whiskerLeft G (adj1.leftAdjointUniq adj2).hom) (CategoryStruct.comp adj2.counit h) = CategoryStruct.comp adj1.counit h
@[simp]
theorem
CategoryTheory.Adjunction.leftAdjointUniq_hom_app_counit
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(x : D)
:
CategoryStruct.comp ((adj1.leftAdjointUniq adj2).hom.app (G.obj x)) (adj2.counit.app x) = adj1.counit.app x
@[simp]
theorem
CategoryTheory.Adjunction.leftAdjointUniq_hom_app_counit_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(x : D)
{Z : D}
(h : x ⟶ Z)
:
CategoryStruct.comp ((adj1.leftAdjointUniq adj2).hom.app (G.obj x)) (CategoryStruct.comp (adj2.counit.app x) h) = CategoryStruct.comp (adj1.counit.app x) h
theorem
CategoryTheory.Adjunction.leftAdjointUniq_inv_app
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(x : C)
:
@[simp]
theorem
CategoryTheory.Adjunction.leftAdjointUniq_trans
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' F'' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(adj3 : F'' ⊣ G)
:
CategoryStruct.comp (adj1.leftAdjointUniq adj2).hom (adj2.leftAdjointUniq adj3).hom = (adj1.leftAdjointUniq adj3).hom
@[simp]
theorem
CategoryTheory.Adjunction.leftAdjointUniq_trans_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' F'' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(adj3 : F'' ⊣ G)
{Z : Functor C D}
(h : F'' ⟶ Z)
:
CategoryStruct.comp (adj1.leftAdjointUniq adj2).hom (CategoryStruct.comp (adj2.leftAdjointUniq adj3).hom h) = CategoryStruct.comp (adj1.leftAdjointUniq adj3).hom h
@[simp]
theorem
CategoryTheory.Adjunction.leftAdjointUniq_trans_app
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' F'' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(adj3 : F'' ⊣ G)
(x : C)
:
CategoryStruct.comp ((adj1.leftAdjointUniq adj2).hom.app x) ((adj2.leftAdjointUniq adj3).hom.app x) = (adj1.leftAdjointUniq adj3).hom.app x
@[simp]
theorem
CategoryTheory.Adjunction.leftAdjointUniq_trans_app_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F F' F'' : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F' ⊣ G)
(adj3 : F'' ⊣ G)
(x : C)
{Z : D}
(h : F''.obj x ⟶ Z)
:
CategoryStruct.comp ((adj1.leftAdjointUniq adj2).hom.app x)
(CategoryStruct.comp ((adj2.leftAdjointUniq adj3).hom.app x) h) = CategoryStruct.comp ((adj1.leftAdjointUniq adj3).hom.app x) h
@[simp]
theorem
CategoryTheory.Adjunction.leftAdjointUniq_refl
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
:
def
CategoryTheory.Adjunction.rightAdjointUniq
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
:
If G
and G'
are both right adjoint to F
, then they are naturally isomorphic.
Equations
- adj1.rightAdjointUniq adj2 = (CategoryTheory.conjugateIsoEquiv adj1 adj2) (CategoryTheory.Iso.refl F)
Instances For
theorem
CategoryTheory.Adjunction.homEquiv_symm_rightAdjointUniq_hom_app
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(x : D)
:
@[simp]
theorem
CategoryTheory.Adjunction.unit_rightAdjointUniq_hom_app
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(x : C)
:
CategoryStruct.comp (adj1.unit.app x) ((adj1.rightAdjointUniq adj2).hom.app (F.obj x)) = adj2.unit.app x
@[simp]
theorem
CategoryTheory.Adjunction.unit_rightAdjointUniq_hom_app_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(x : C)
{Z : C}
(h : G'.obj (F.obj x) ⟶ Z)
:
CategoryStruct.comp (adj1.unit.app x) (CategoryStruct.comp ((adj1.rightAdjointUniq adj2).hom.app (F.obj x)) h) = CategoryStruct.comp (adj2.unit.app x) h
@[simp]
theorem
CategoryTheory.Adjunction.unit_rightAdjointUniq_hom
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
:
@[simp]
theorem
CategoryTheory.Adjunction.unit_rightAdjointUniq_hom_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
{Z : Functor C C}
(h : F.comp G' ⟶ Z)
:
CategoryStruct.comp adj1.unit (CategoryStruct.comp (whiskerLeft F (adj1.rightAdjointUniq adj2).hom) h) = CategoryStruct.comp adj2.unit h
@[simp]
theorem
CategoryTheory.Adjunction.rightAdjointUniq_hom_app_counit
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(x : D)
:
CategoryStruct.comp (F.map ((adj1.rightAdjointUniq adj2).hom.app x)) (adj2.counit.app x) = adj1.counit.app x
@[simp]
theorem
CategoryTheory.Adjunction.rightAdjointUniq_hom_app_counit_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(x : D)
{Z : D}
(h : x ⟶ Z)
:
CategoryStruct.comp (F.map ((adj1.rightAdjointUniq adj2).hom.app x)) (CategoryStruct.comp (adj2.counit.app x) h) = CategoryStruct.comp (adj1.counit.app x) h
@[simp]
theorem
CategoryTheory.Adjunction.rightAdjointUniq_hom_counit
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
:
@[simp]
theorem
CategoryTheory.Adjunction.rightAdjointUniq_hom_counit_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
{Z : Functor D D}
(h : Functor.id D ⟶ Z)
:
CategoryStruct.comp (whiskerRight (adj1.rightAdjointUniq adj2).hom F) (CategoryStruct.comp adj2.counit h) = CategoryStruct.comp adj1.counit h
theorem
CategoryTheory.Adjunction.rightAdjointUniq_inv_app
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(x : D)
:
@[simp]
theorem
CategoryTheory.Adjunction.rightAdjointUniq_trans
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' G'' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(adj3 : F ⊣ G'')
:
CategoryStruct.comp (adj1.rightAdjointUniq adj2).hom (adj2.rightAdjointUniq adj3).hom = (adj1.rightAdjointUniq adj3).hom
@[simp]
theorem
CategoryTheory.Adjunction.rightAdjointUniq_trans_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' G'' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(adj3 : F ⊣ G'')
{Z : Functor D C}
(h : G'' ⟶ Z)
:
CategoryStruct.comp (adj1.rightAdjointUniq adj2).hom (CategoryStruct.comp (adj2.rightAdjointUniq adj3).hom h) = CategoryStruct.comp (adj1.rightAdjointUniq adj3).hom h
@[simp]
theorem
CategoryTheory.Adjunction.rightAdjointUniq_trans_app
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' G'' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(adj3 : F ⊣ G'')
(x : D)
:
CategoryStruct.comp ((adj1.rightAdjointUniq adj2).hom.app x) ((adj2.rightAdjointUniq adj3).hom.app x) = (adj1.rightAdjointUniq adj3).hom.app x
@[simp]
theorem
CategoryTheory.Adjunction.rightAdjointUniq_trans_app_assoc
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G G' G'' : Functor D C}
(adj1 : F ⊣ G)
(adj2 : F ⊣ G')
(adj3 : F ⊣ G'')
(x : D)
{Z : C}
(h : G''.obj x ⟶ Z)
:
CategoryStruct.comp ((adj1.rightAdjointUniq adj2).hom.app x)
(CategoryStruct.comp ((adj2.rightAdjointUniq adj3).hom.app x) h) = CategoryStruct.comp ((adj1.rightAdjointUniq adj3).hom.app x) h
@[simp]
theorem
CategoryTheory.Adjunction.rightAdjointUniq_refl
{C : Type u_1}
{D : Type u_2}
[Category.{u_3, u_1} C]
[Category.{u_4, u_2} D]
{F : Functor C D}
{G : Functor D C}
(adj1 : F ⊣ G)
: