open import Cat.Prelude module Cat.Functor.Base where
Functorsđ
This module defines the most important clases of functors: Full, faithful, fully faithful (abbreviated ff), split essentially surjective and (âmerelyâ) essentially surjective.
A functor is full when its action on hom-sets is surjective:
is-full : Functor C D â Type _ is-full {C = C} {D = D} F = â {x y} (g : D .Hom (Fâ F x) (Fâ F y)) â â[ f â C .Hom x y ] (Fâ F f ⥠g)
A functor is faithful when its action on hom-sets is injective:
is-faithful : Functor C D â Type _ is-faithful F = â {x y} â injective (Fâ F {x = x} {y})
ff Functorsđ
A functor is fully faithful (abbreviated ff) when its action on hom-sets is an equivalence. Since Hom-sets are sets, it suffices for the functor to be full and faithful; Rather than taking this conjunction as a definition, we use the more directly useful data as a definition and prove the conjunction as a theorem.
is-fully-faithful : Functor C D â Type _ is-fully-faithful F = â {x y} â is-equiv (Fâ F {x = x} {y}) fully-faithfulâfaithful : {F : Functor C D} â is-fully-faithful F â is-faithful F fully-faithfulâfaithful {F = F} ff {_} {_} {x} {y} p = x âĄâš sym (equivâretraction ff x) â©âĄ equivâinverse ff (Fâ F x) âĄâš ap (equivâinverse ff) p â©âĄ equivâinverse ff (Fâ F y) âĄâš equivâretraction ff y â©âĄ y â full+faithfulâff : (F : Functor C D) â is-full F â is-faithful F â is-fully-faithful F full+faithfulâff {C = C} {D = D} F surj inj .is-eqv = p where img-is-prop : â {x y} f â is-prop (fibre (Fâ F {x = x} {y}) f) img-is-prop f (g , p) (h , q) = ÎŁ-prop-path (λ _ â D .Hom-set _ _ _ _) (inj (p â sym q)) p : â {x y} f â is-contr (fibre (Fâ F {x = x} {y}) f) p f .centre = â„-â„-elim (λ _ â img-is-prop f) (λ x â x) (surj f) p f .paths = img-is-prop f _
A very important property of fully faithful functors (like ) is that they are conservative: If the image of under is an isomorphism , then was really an isomorphism .
module _ {C : Precategory o h} {D : Precategory oâ hâ} where private module C = Precategory C module D = Precategory D import Cat.Morphism C as Cm import Cat.Morphism D as Dm is-ffâis-conservative : {F : Functor C D} â is-fully-faithful F â â {X Y} (f : C.Hom X Y) â Dm.is-invertible (Fâ F f) â Cm.is-invertible f is-ffâis-conservative {F = F} ff f isinv = i where open Cm.is-invertible open Cm.Inverses
Since the functor is ff, we can find a map ââ in the domain category to serve as an inverse for :
g : C.Hom _ _ g = equivâinverse ff (isinv .Dm.is-invertible.inv) Ffog = Fâ F (f C.â g) âĄâš F-â F _ _ â©âĄ Fâ F f D.â Fâ F g âĄâš apâ D._â_ refl (equivâsection ff _) â isinv .Dm.is-invertible.invl â©âĄ D.id â Fgof = Fâ F (g C.â f) âĄâš F-â F _ _ â©âĄ Fâ F g D.â Fâ F f âĄâš apâ D._â_ (equivâsection ff _) refl â isinv .Dm.is-invertible.invr â©âĄ D.id â i : Cm.is-invertible _ i .inv = g i .inverses .invl = f C.â g âĄâš sym (equivâretraction ff _) â©âĄ equivâinverse ff (Fâ F (f C.â g)) âĄâš ap (equivâinverse ff) (Ffog â sym (F-id F)) â©âĄ equivâinverse ff (Fâ F C.id) âĄâš equivâretraction ff _ â©âĄ C.id â i .inverses .invr = g C.â f âĄâš sym (equivâretraction ff _) â©âĄ equivâinverse ff (Fâ F (g C.â f)) âĄâš ap (equivâinverse ff) (Fgof â sym (F-id F)) â©âĄ equivâinverse ff (Fâ F C.id) âĄâš equivâretraction ff _ â©âĄ C.id â is-ffâessentially-injective : {F : Functor C D} â is-fully-faithful F â â {X Y} â Fâ F X Dm.â Fâ F Y â X Cm.â Y is-ffâessentially-injective {F = F} ff record { to = to ; from = from ; inverses = inverses } = Cm.make-iso (equivâinverse ff to) inv invl invr where D-inv : Dm.is-invertible to D-inv = record { inv = from ; inverses = inverses } open Cm.is-invertible (is-ffâis-conservative {F = F} ff (equivâinverse ff to) (subst Dm.is-invertible (sym (equivâsection ff _)) D-inv))
Essential Fibresđ
The essential fibre of a functor over an object is the space of objects of which takes, up to isomorphism, to .
Essential-fibre : Functor C D â D .Ob â Type _ Essential-fibre {D = D} F y = ÎŁ[ x â _ ] (Fâ F x â y) where open import Cat.Morphism D
A functor is split essentially surjective (abbreviated split eso) if there is a procedure for finding points in the essential fibre over any object. Itâs essentially surjective if the this procedure merely, i.e. truncatedly, finds a point:
is-split-eso : Functor C D â Type _ is-split-eso F = â y â Essential-fibre F y is-eso : Functor C D â Type _ is-eso F = â y â â„ Essential-fibre F y â„