module Cat.Functor.Final where
Final functorsπ
A final functor expresses an equivalence of diagram schemata for the purposes of computing colimits: If is final, then colimits for are equivalents to colimits for . A terminological warning: In older literature (e.g. (Borceux 1994) and (Adamek and Rosicky 1994)), these functors are called cofinal, but we stick with terminology from the nLab here.
module _ {o β oβ² ββ²} {π : Precategory o β} {π : Precategory oβ² ββ²} (F : Functor π π) where open Functor private module π = Cr π module π = Cr π module F = Functor F
Finality has an elementary characterisation: We define a functor to be final if, for every , the comma category is pointed and connected. That is, unpacking, the following data: For every object , an object and a map , and for every span
a map , such that the triangle
commutes.
record is-final : Type (o β β β oβ² β ββ²) where field point : π.Ob β π.Ob map : β d β π.Hom d (F.β (point d)) extend : β {a b x} (f : π.Hom x (F.β a)) (g : π.Hom x (F.β b)) β π.Hom a b extend-commutes : β {a b x} (f : π.Hom x (F.β a)) (g : π.Hom x (F.β b)) β g β‘ F.β (extend f g) π.β f
module _ {oβ²β² ββ²β²} {β° : Precategory oβ²β² ββ²β²} {D : Functor π β°} (final : is-final) where private module fin = is-final final module D = Func D module β° = Cr β° open _=>_
The utility of this definition comes, as mentioned, from the ability to move (colimiting) cocones back and forth between a diagram and its restriction to the domain category . If we have a cocone , then precomposition with the map (where comes from the finality of ) defines a cocone .
extend-cocone : β {coapex} β D Fβ F => Const coapex β D => Const coapex extend-cocone cone .Ξ· x = cone .Ξ· _ β°.β D.β (fin.map x) extend-cocone cone .is-natural x y f = β°.pullr (sym (D.F-β _ _)) Β·Β· β°.pushl (sym (cone .is-natural _ _ _ β β°.idl _)) Β·Β· (β°.reflβ©ββ¨ D.collapse (sym (fin.extend-commutes _ _))) β sym (β°.idl _)
In the other direction, suppose that we have a cocone β inserting in the appropriate places makes a cocone .
restrict-cocone : β {coapex} β D => Const coapex β D Fβ F => Const coapex restrict-cocone K .Ξ· x = K .Ξ· (F.Fβ x) restrict-cocone K .is-natural x y f = K .is-natural (F.Fβ x) (F.Fβ y) (F.Fβ f)
A computation using connectedness of the comma categories shows that these formulae are mutually inverse:
open is-iso extend-cocone-is-iso : β {coapex} β is-iso (extend-cocone {coapex}) extend-cocone-is-iso .inv = restrict-cocone extend-cocone-is-iso .rinv x = Nat-path Ξ» o β x .is-natural _ _ _ β β°.idl _ extend-cocone-is-iso .linv x = Nat-path Ξ» o β (sym (β°.idl _) β sym (x .is-natural _ _ (fin.extend (fin.map (F.Fβ o)) π.id)) β°.β©ββ¨refl) Β·Β· β°.pullr (D.collapse (fin.extend-commutes _ _ β π.idr _)) Β·Β· x .is-natural _ _ _ β β°.idl _
The most important conclusion that we get is the following: If you can show that the restricted cocone is a colimit, then the original cocone was a colimit, too! Weβll do this in two steps: First, show that the extension of a colimiting cocone is a colimit. Then, using the fact that restrict-cocone is an equivalence, weβll be able to fix up the polarity mismatch.
extend-is-colimit : β {coapex} (K : D Fβ F => Const coapex) β is-colimit (D Fβ F) coapex K β is-colimit D coapex (extend-cocone K)
The proof of the auxiliary lemma is a direct computation, so Iβll leave
it in this <details>
tag for the curious reader only.
extend-is-colimit {coapex} K colim = to-is-colimitp mc refl module extend-is-colimit where module colim = is-colimit colim open make-is-colimit mc : make-is-colimit D coapex mc .Ο x = extend-cocone K .Ξ· x mc .commutes f = extend-cocone K .is-natural _ _ _ β β°.idl _ mc .universal eps p = colim.universal (Ξ» j β eps (F.Fβ j)) Ξ» f β p (F.Fβ f) mc .factors eps p = β°.pulll (colim.factors _ _) β p (fin.map _) mc .unique eps p other q = colim.unique _ _ _ Ξ» j β other β°.β K .Ξ· j β‘β¨ β°.reflβ©ββ¨ (sym (β°.idl _) β sym (K .is-natural _ _ _)) β© other β°.β K .Ξ· _ β°.β D.Fβ (F.Fβ (fin.extend _ _)) β‘β¨ β°.reflβ©ββ¨ β°.reflβ©ββ¨ ap D.β (sym (π.idr _) β sym (fin.extend-commutes _ _)) β© other β°.β K .Ξ· _ β°.β D.Fβ (fin.map _) β‘β¨ q (F.Fβ j) β© eps (F.Fβ j) β
is-colimit-restrict : β {coapex} β (K : D => Const coapex) β is-colimit (D Fβ F) coapex (restrict-cocone K) β is-colimit D coapex K is-colimit-restrict {coapex} K colim = to-is-colimitp (extend-is-colimit.mc (restrict-cocone K) colim) (extend-cocone-is-iso .rinv K Ξ·β _) where open is-iso
module _ {o β oβ² ββ² oβ²β² ββ²β²} {π : Precategory o β} {π : Precategory oβ² ββ²} {β° : Precategory oβ²β² ββ²β²} (F : Functor π π) (G : Functor π β°) (f-fin : is-final F) (g-fin : is-final G) where private module π = Cr π module β° = Cr β° module G = Functor G module F = Functor F module ff = is-final f-fin module gf = is-final g-fin open is-final
Another short computation shows us that final functors are closed under composition.
Fβ-is-final : is-final (G Fβ F) Fβ-is-final .point e = ff.point (gf.point e) Fβ-is-final .map d = G.β (ff.map _) β°.β gf.map _ Fβ-is-final .extend f g = ff.extend π.id (gf.extend f g) Fβ-is-final .extend-commutes f g = g β‘β¨ gf.extend-commutes _ _ β© G.β β g-fin .extend f g β β°.β f β‘β¨ ap! (ff.extend-commutes _ _ β π.elimr refl) β© G.β (F.β (ff.extend π.id (gf.extend f g))) β°.β f β
References
- Adamek, J., and J. Rosicky. 1994. Locally Presentable and Accessible Categories. Lecture Note Series / London Mathematical Society. Cambridge University Press. https://books.google.com.br/books?id=iXh6rOd7of0C.
- Borceux, Francis. 1994. Handbook of Categorical Algebra. Vol. 1. Encyclopedia of Mathematics and Its Applications. Cambridge University Press. https://doi.org/10.1017/CBO9780511525858.