Jon Sterling, started 18th Dec 2022
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import UF.FunExt
module Categories.Adjunction (fe : Fun-Ext) where
open import MLTT.Spartan
open import UF.Subsingletons
open import Categories.Category fe
open import Categories.Functor fe
open import Categories.NaturalTransformation fe
module adjunction-of-precategories (𝓒 : precategory 𝓤 𝓥) (𝓓 : precategory 𝓤' 𝓥') where
open functor-of-precategories
open natural-transformation
private
[𝓒,𝓒] = functor-category.precat 𝓒 𝓒
[𝓓,𝓓] = functor-category.precat 𝓓 𝓓
[𝓒,𝓓] = functor-category.precat 𝓒 𝓓
[𝓓,𝓒] = functor-category.precat 𝓓 𝓒
module [𝓒,𝓒] = precategory [𝓒,𝓒]
module [𝓓,𝓓] = precategory [𝓓,𝓓]
module [𝓒,𝓓] = precategory [𝓒,𝓓]
module [𝓓,𝓒] = precategory [𝓓,𝓒]
1[𝓒] = identity-functor.fun 𝓒
1[𝓓] = identity-functor.fun 𝓓
module _ (F : functor 𝓒 𝓓) (G : functor 𝓓 𝓒) where
private
module F = functor F
module G = functor G
F-G = composite-functor.fun F G
G-F = composite-functor.fun G F
[F-G]-F = composite-functor.fun F-G F
[G-F]-G = composite-functor.fun G-F G
F-[G-F] = composite-functor.fun F G-F
G-[F-G] = composite-functor.fun G F-G
module F-G = functor F-G
module G-F = functor G-F
adjunction-structure : 𝓤 ⊔ 𝓥 ⊔ 𝓤' ⊔ 𝓥' ̇
adjunction-structure = [𝓒,𝓒].hom 1[𝓒] F-G × [𝓓,𝓓].hom G-F 1[𝓓]
module adjunction-structure (str : adjunction-structure) where
unit : [𝓒,𝓒].hom 1[𝓒] F-G
unit = pr₁ str
counit : [𝓓,𝓓].hom G-F 1[𝓓]
counit = pr₂ str
module _ (str : adjunction-structure) where
open adjunction-structure str
private
η-F : [𝓒,𝓓].hom F [F-G]-F
η-F = [𝓒,𝓓].seq (left-unitor-inverse F) (right-whiskering.whisk unit F)
F-ϵ : [𝓒,𝓓].hom [F-G]-F F
F-ϵ =
[𝓒,𝓓].seq
(associator-inverse F G F)
([𝓒,𝓓].seq
(left-whiskering.whisk F counit)
(left-unitor F))
G-η : [𝓓,𝓒].hom G G-[F-G]
G-η = [𝓓,𝓒].seq (left-unitor-inverse G) (left-whiskering.whisk G unit)
ϵ-G : [𝓓,𝓒].hom G-[F-G] G
ϵ-G =
[𝓓,𝓒].seq
(associator G F G)
([𝓓,𝓒].seq
(right-whiskering.whisk counit G)
(left-unitor G))
adjunction-axioms : 𝓥 ⊔ 𝓥' ⊔ 𝓤 ⊔ 𝓤' ̇
adjunction-axioms =
([𝓒,𝓓].seq η-F F-ϵ = [𝓒,𝓓].idn F)
× ([𝓓,𝓒].seq G-η ϵ-G = [𝓓,𝓒].idn G)
adjunction-axioms-is-prop : is-prop adjunction-axioms
adjunction-axioms-is-prop =
×-is-prop
([𝓒,𝓓].hom-is-set F F)
([𝓓,𝓒].hom-is-set G G)
record adjunction : 𝓥 ⊔ 𝓥' ⊔ 𝓤 ⊔ 𝓤' ̇ where
constructor make
field
str : adjunction-structure
ax : adjunction-axioms str
open adjunction-structure str public
\end{code}