module Cat.Functor.Adjoint.Continuous where
module _ {o o' β β'} {C : Precategory o β} {D : Precategory o' β'} {L : Functor C D} {R : Functor D C} (Lβ£R : L β£ R) where private module L = Func L module R = Func R module C = Precategory C module D = Precategory D module adj = _β£_ Lβ£R open _=>_
Continuity of adjointsπ
We prove that every functor admitting a left adjoint preserves every limit which exists in We then instantiate this theorem to the βcanonicalβ shapes of limit: terminal objects, products, pullback and equalisers.
This follows directly from the fact that adjoints preserve Kan extensions.
right-adjoint-is-continuous : β {os βs} β is-continuous os βs R right-adjoint-is-continuous lim = right-adjointβright-extension lim Lβ£R left-adjoint-is-cocontinuous : β {os βs} β is-cocontinuous os βs L left-adjoint-is-cocontinuous colim = left-adjointβleft-extension colim Lβ£R module _ {od βd} {J : Precategory od βd} where right-adjoint-limit : β {F : Functor J D} β Limit F β Limit (R Fβ F) right-adjoint-limit lim = to-limit (right-adjoint-is-continuous (Limit.has-limit lim)) left-adjoint-colimit : β {F : Functor J C} β Colimit F β Colimit (L Fβ F) left-adjoint-colimit colim = to-colimit (left-adjoint-is-cocontinuous (Colimit.has-colimit colim))
Concrete limitsπ
We now show that adjoint functors preserve βconcrete limitsβ. We could show this using general abstract nonsense, but we can avoid transports if we do it by hand.
right-adjointβis-product : β {x a b} {p1 : D.Hom x a} {p2 : D.Hom x b} β is-product D p1 p2 β is-product C (R.β p1) (R.β p2) right-adjointβis-product {x = x} {a} {b} {p1} {p2} d-prod = c-prod where open is-product c-prod : is-product C (R.β p1) (R.β p2) c-prod .β¨_,_β© f g = L-adjunct Lβ£R (d-prod .β¨_,_β© (R-adjunct Lβ£R f) (R-adjunct Lβ£R g)) c-prod .Οβββ¨β© = R.pulll (d-prod .Οβββ¨β©) β L-R-adjunct Lβ£R _ c-prod .Οβββ¨β© = R.pulll (d-prod .Οβββ¨β©) β L-R-adjunct Lβ£R _ c-prod .unique {other = other} p q = sym (L-R-adjunct Lβ£R other) β ap (L-adjunct Lβ£R) (d-prod .unique (R-adjunct-ap Lβ£R p) (R-adjunct-ap Lβ£R q)) right-adjointβis-pullback : β {p x y z} β {p1 : D.Hom p x} {f : D.Hom x z} {p2 : D.Hom p y} {g : D.Hom y z} β is-pullback D p1 f p2 g β is-pullback C (R.β p1) (R.β f) (R.β p2) (R.β g) right-adjointβis-pullback {p1 = p1} {f} {p2} {g} d-pb = c-pb where open is-pullback c-pb : is-pullback C (R.β p1) (R.β f) (R.β p2) (R.β g) c-pb .square = R.weave (d-pb .square) c-pb .universal sq = L-adjunct Lβ£R (d-pb .universal (R-adjunct-square Lβ£R sq)) c-pb .pββuniversal = R.pulll (d-pb .pββuniversal) β L-R-adjunct Lβ£R _ c-pb .pββuniversal = R.pulll (d-pb .pββuniversal) β L-R-adjunct Lβ£R _ c-pb .unique {_} {pβ'} {pβ'} {sq} {other} p q = sym (L-R-adjunct Lβ£R other) β ap (L-adjunct Lβ£R) (d-pb .unique (R-adjunct-ap Lβ£R p) (R-adjunct-ap Lβ£R q)) right-adjointβis-equaliser : β {e a b} {f g : D.Hom a b} {equ : D.Hom e a} β is-equaliser D f g equ β is-equaliser C (R.β f) (R.β g) (R.β equ) right-adjointβis-equaliser {f = f} {g} {equ} d-equal = c-equal where open is-equaliser c-equal : is-equaliser C (R.β f) (R.β g) (R.β equ) c-equal .equal = R.weave (d-equal .equal) c-equal .universal sq = L-adjunct Lβ£R (d-equal .universal (R-adjunct-square Lβ£R sq)) c-equal .factors = R.pulll (d-equal .factors) β L-R-adjunct Lβ£R _ c-equal .unique p = sym (L-R-adjunct Lβ£R _) β ap (L-adjunct Lβ£R) (d-equal .unique (R-adjunct-ap Lβ£R p)) right-adjointβterminal : β {x} β is-terminal D x β is-terminal C (R.β x) right-adjointβterminal term x = contr fin uniq where fin = L-adjunct Lβ£R (term (L.β x) .centre) uniq : β x β fin β‘ x uniq x = ap fst $ is-contrβis-prop (R-adjunct-is-equiv Lβ£R .is-eqv _) (_ , equivβcounit (R-adjunct-is-equiv Lβ£R) _) (x , is-contrβis-prop (term _) _ _) right-adjointβlex : is-lex R right-adjointβlex .is-lex.pres-β€ = right-adjointβterminal right-adjointβlex .is-lex.pres-pullback {f = f} {g = g} pb = right-adjointβis-pullback pb