module Cat.Instances.Sheaves where
The topos of sheavesđ
This module collects a compendium of the nice properties enjoyed by the category of sheaves on a site.
_,_] : â {â} (C : Precategory â â) (J : Coverage C â) â Precategory (lsuc â) â
Sh[= Sheaves J _ Sh[ C , J ]
Monadicityđ
Since the sheafification construction provides a left adjoint to the fully faithful inclusion of presheaves into sheaves, we can immediately conclude that the category of sheaves on a site is monadic over the presheaves on that same site.
: Functor (PSh â C) Sh[ C , J ]
Sheafification = free-objectsâfunctor (Small.make-free-sheaf J)
Sheafification
: Sheafification ⣠forget-sheaf J _
SheafificationâŁÎč = free-objectsâleft-adjoint (Small.make-free-sheaf J) SheafificationâŁÎč
Note that since the category of is defined to literally have the same as the category of presheaves on the action of the forgetful functor on morphisms is definitionally the identity.
: is-reflective SheafificationâŁÎč
Sheafification-is-reflective = id-equiv
Sheafification-is-reflective
: is-monadic SheafificationâŁÎč
Sheafification-is-monadic = is-reflectiveâis-monadic _ id-equiv Sheafification-is-monadic
Limits and colimitsđ
By general properties of reflective subcategories, we have that the category of sheaves on a site is complete and cocomplete; Completeness is by an equivalence with the Eilenberg-Moore category of the sheafification monad (which has all limits which does), and cocompleteness follows by computing the colimit in presheaves, then sheafifying the result.
: is-complete â â Sh[ C , J ]
Sh[]-is-complete = equivalenceâcomplete
Sh[]-is-complete (is-equivalence.inverse-equivalence Sheafification-is-monadic)
(Eilenberg-Moore-is-complete
(Functor-cat-is-complete (Sets-is-complete {Îč = â} {â} {â})))
: is-cocomplete â â Sh[ C , J ]
Sh[]-is-cocomplete = done where
Sh[]-is-cocomplete F : Colimit (forget-sheaf J _ Fâ F)
psh-colim = Functor-cat-is-cocomplete (Sets-is-cocomplete {Îč = â} {â} {â}) _
psh-colim
: Colimit ((Sheafification Fâ forget-sheaf J _) Fâ F)
sheafified = subst Colimit Fâ-assoc $
sheafified
left-adjoint-colimit SheafificationâŁÎč psh-colim
= natural-isoâcolimit
done (Fâ-iso-id-l (is-reflectiveâcounit-iso SheafificationâŁÎč id-equiv))
sheafified
Concrete limitsđ
The computations above compute all limits, even the finite limits with known shape such as products and the terminal object, as an equaliser between maps to and from a very big product. To make working with finite limits of sheaves smoother, we specialise the proof that sheaves are closed under limits to these finite cases:
: has-products Sh[ C , J ]
Sh[]-products (A , ashf) (B , bshf) = prod where
Sh[]-products = PSh-products {C = C} A B
prod'
: Product Sh[ C , J ] _ _
prod .apex .fst = prod' .apex
prod .Ïâ = prod' .Ïâ
prod .Ïâ = prod' .Ïâ
prod .has-is-product .âš_,_â© = prod' .âš_,_â©
prod .has-is-product .Ïââfactor = prod' .Ïââfactor
prod .has-is-product .Ïââfactor = prod' .Ïââfactor
prod .has-is-product .unique = prod' .unique
prod
.apex .snd = is-sheaf-limit
prod {F = 2-object-diagram _ _} {Ï = 2-object-nat-trans _ _}
(is-productâis-limit (PSh â C) (prod' .has-is-product))
(λ { true â ashf ; false â bshf })
The terminal object in sheaves is even easier to define:
: Terminal Sh[ C , J ]
Sh[]-terminal .top .fst = PSh-terminal {C = C} .top
Sh[]-terminal .has†(S , _) = PSh-terminal {C = C} .has†S
Sh[]-terminal
.top .snd .whole _ _ = lift tt
Sh[]-terminal .top .snd .glues _ _ _ _ = refl
Sh[]-terminal .top .snd .separate _ _ = refl Sh[]-terminal
Cartesian closuređ
Since sheaves are an exponential ideal in presheaves, meaning that is a sheaf whenever is, we can conclude that the category of sheaves on a site is also Cartesian closed.
: Cartesian-closed Sh[ C , J ] Sh[]-products Sh[]-terminal
Sh[]-cc .has-exp (A , _) (B , bshf) = exp where
Sh[]-cc = PSh-closed {C = C} .has-exp A B
exp'
: Exponential Sh[ C , J ] _ _ _ _
exp .B^A .fst = exp' .B^A
exp .B^A .snd = is-sheaf-exponential J A B bshf
exp .ev = exp' .ev
exp .has-is-exp .Æ = exp' .Æ
exp .has-is-exp .commutes = exp' .commutes
exp .has-is-exp .unique = exp' .unique exp