module Cat.Functor.Adjoint.Continuous where
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
: ∀ {F : Functor J D} → Limit F → Limit (R F∘ F)
right-adjoint-limit =
right-adjoint-limit lim (right-adjoint-is-continuous (Limit.has-limit lim))
to-limit
: ∀ {F : Functor J C} → Colimit F → Colimit (L F∘ F)
left-adjoint-colimit =
left-adjoint-colimit colim (left-adjoint-is-cocontinuous (Colimit.has-colimit colim)) to-colimit
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)
{x = x} {a} {b} {p1} {p2} d-prod = c-prod where
right-adjoint→is-product open is-product
: is-product C (R.₁ p1) (R.₁ p2)
c-prod .⟨_,_⟩ f g =
c-prod (d-prod .⟨_,_⟩ (R-adjunct L⊣R f) (R-adjunct L⊣R g))
L-adjunct L⊣R .π₁∘factor =
c-prod .pulll (d-prod .π₁∘factor) ∙ L-R-adjunct L⊣R _
R.π₂∘factor =
c-prod .pulll (d-prod .π₂∘factor) ∙ L-R-adjunct L⊣R _
R.unique other p q =
c-prod (L-R-adjunct L⊣R other)
sym (L-adjunct L⊣R)
∙ ap (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)
{p1 = p1} {f} {p2} {g} d-pb = c-pb where
right-adjoint→is-pullback open is-pullback
: is-pullback C (R.₁ p1) (R.₁ f) (R.₁ p2) (R.₁ g)
c-pb .square = R.weave (d-pb .square)
c-pb .universal sq =
c-pb (d-pb .universal (R-adjunct-square L⊣R sq))
L-adjunct L⊣R .p₁∘universal =
c-pb .pulll (d-pb .p₁∘universal) ∙ L-R-adjunct L⊣R _
R.p₂∘universal =
c-pb .pulll (d-pb .p₂∘universal) ∙ L-R-adjunct L⊣R _
R.unique {_} {p₁'} {p₂'} {sq} {other} p q =
c-pb (L-R-adjunct L⊣R other)
sym (L-adjunct L⊣R)
∙ ap (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)
{f = f} {g} {equ} d-equal = c-equal where
right-adjoint→is-equaliser open is-equaliser
: is-equaliser C (R.₁ f) (R.₁ g) (R.₁ equ)
c-equal .equal = R.weave (d-equal .equal)
c-equal .universal sq =
c-equal (d-equal .universal (R-adjunct-square L⊣R sq))
L-adjunct L⊣R .factors =
c-equal .pulll (d-equal .factors) ∙ L-R-adjunct L⊣R _
R.unique p =
c-equal (L-R-adjunct L⊣R _)
sym (L-adjunct L⊣R)
∙ ap (d-equal .unique (R-adjunct-ap L⊣R p))
right-adjoint→terminal: ∀ {x} → is-terminal D x → is-terminal C (R.₀ x)
= contr fin uniq where
right-adjoint→terminal term x = L-adjunct L⊣R (term (L.₀ x) .centre)
fin : ∀ x → fin ≡ x
uniq = ap fst $ is-contr→is-prop (R-adjunct-is-equiv L⊣R .is-eqv _)
uniq x (_ , equiv→counit (R-adjunct-is-equiv L⊣R) _)
(x , is-contr→is-prop (term _) _ _)
: is-lex R
right-adjoint→lex .is-lex.pres-⊤ =
right-adjoint→lex
right-adjoint→terminal.is-lex.pres-pullback {f = f} {g = g} pb =
right-adjoint→lex right-adjoint→is-pullback pb