module Cat.Site.Instances.Canonical {o β„“} (C : Precategory o β„“) where

The canonical coverageπŸ”—

Every sieve on an object (in a category may be regarded as a diagram in by first interpreting it as a presheaf, then considering the projection functor

with domain the category of elements of The objects of this category consist of triples and a (propositional) witness that Thus, purely formally, the object is the nadir of a cocone under since we can give the component of a natural transformation by projecting the arrow.

sieveβ†’cocone : βˆ€ {U} (S : Sieve C U) β†’ Ο€β‚š C (to-presheaf S) => Const U
sieveβ†’cocone S .Ξ· (elem i (f , f∈S)) = f
sieve→cocone S .is-natural (elem _ (f , _)) (elem _ (g , _)) h =
  g ∘ h .hom β‰‘βŸ¨ ap fst (h .commute) βŸ©β‰‘
  f          β‰‘βŸ¨ introl refl βŸ©β‰‘
  id ∘ f     ∎

Thus, under this setup, a natural question to ask about any sieve is whether it forms a colimit diagram. This is also a notion of covering, which we can impose on any category, since any given colimit diagram with nadir can be seen as a covering of by the objects in which sit inside according to the maps in Johnstone (2002, C2.2.8) refers to the sieves which are colimiting cocones as β€œeffective-epimorphic”. We will instead follow Lester (2019) and refer to them as colim sieves.

is-colim : βˆ€ {U} β†’ Sieve C U β†’ Type _
is-colim {U} S = is-colimit _ U (sieve→cocone S)

Natural though it is, unfortunately, being a colim sieve is not a property we can ask of sieves to get a site. The reason is that, in an arbitrary category, colimits may not be preserved by pullback; in terms of sieves, even if is a colim sieve over we may not have that is a colim sieve over for We can, however, turn this into a site, by restricting the notion of colim sieve so that it’s stable under pullbacks: we say that is a universal colim sieve if is a colim sieve, for any appropriate

is-universal-colim : βˆ€ {U} β†’ Sieve C U β†’ Type _
is-universal-colim {U} S =
  βˆ€ {V} (f : Hom V U) β†’ is-colim (pullback f S)

Since this is a pullback-stable property of sieves, we can get a site. We refer to this as the canonical coverage on a category

abstract
  is-universal-colim-is-stable
    : βˆ€ {U V} (f : Hom V U) (S : Sieve C U)
    β†’ is-universal-colim S
    β†’ is-universal-colim (pullback f S)
  is-universal-colim-is-stable f S hS g = subst is-colim pullback-∘ (hS (f ∘ g))

  is-universal-colimβ†’is-colim : βˆ€ {U} (S : Sieve C U) β†’ is-universal-colim S β†’ is-colim S
  is-universal-colim→is-colim S u = subst is-colim pullback-id (u id)

Canonical-coverage : Coverage C (o βŠ” β„“)
Canonical-coverage = from-stable-property
  is-universal-colim
  is-universal-colim-is-stable

Representables as sheavesπŸ”—

We will now investigate the matter of sheaves for the canonical topology. First, let be an arbitrary sieve on and suppose that we have a patch for over this means that we have a function for a map belonging to Since the components of a cocone under are indexed precisely by these maps, we see that is a transformation

patch→cocone
  : βˆ€ {U V} (S : Sieve C U)
  β†’ Patch (Hom-into C V) S
  β†’ Ο€β‚š C (to-presheaf S) => !Const V F∘ !F
patch→cocone S p .η (elem _ (f , hf)) = p .part f hf

It remains to show that this transformation is natural. We compute:

patch→cocone S p .is-natural (elem _ (f , hf)) (elem _ (g , hg)) h =
  p .part g hg ∘ h .hom  β‰‘βŸ¨ p .patch g hg (h .hom) (S .closed hg (h .hom)) βŸ©β‰‘
  p .part (g ∘ h .hom) _ β‰‘βŸ¨ app p (ap fst (h .commute)) βŸ©β‰‘
  p .part f _            β‰‘βŸ¨ introl refl βŸ©β‰‘
  id ∘ p .part f _       ∎

Now suppose that is not just a sieve, but a colim sieve, as defined above. Since any patch for gives a cocone under with nadir and is the colimit of we have a map which satisfies for any

is-colimβ†’γ‚ˆ-is-sheaf
  : βˆ€ {U V} (S : Sieve C U)
  β†’ is-colim S
  β†’ is-sheaf₁ (Hom-into C V) S
is-colimβ†’γ‚ˆ-is-sheaf {U} {V} S colim p = uniq where
  module x = is-lan colim

  p' : Ο€β‚š C (to-presheaf S) => !Const V F∘ !F
  p' = patch→cocone S p

Note now that with its β€œcomputation rule”, is precisely a section for the patch

  Ο€ : Hom U V
  Ο€ = x.Οƒ p' .Ξ· tt

  πβ : βˆ€ {W} (f : Hom W _) hf β†’ Ο€ ∘ f ≑ p .part f hf
  πβ f hf = x.Οƒ-comm {Ξ± = p'} Ξ·β‚š elem _ (f , hf) βˆ™ app p refl

But Ο€ is not just a map with this property; it is the unique map with this property. Since sections of correspond precisely to this data, we have that is a sheaf for as soon as is a colim sieve.

  uniq : is-contr (Section _ p)
  uniq .centre  = record { glues = πβ }
  uniq .paths x = ext $
    x.Οƒ-uniq {Οƒ' = !constⁿ _} (ext Ξ» i β†’ sym (x .glues _ _)) Ξ·β‚š tt

Generalising the proof above, we conclude that any representable functor is a sheaf for the canonical coverage.

γ‚ˆ-is-sheaf-canonical
  : βˆ€ {U} β†’ is-sheaf Canonical-coverage (Hom-into C U)
γ‚ˆ-is-sheaf-canonical = from-is-sheaf₁ Ξ» (S , hS) β†’
  is-colimβ†’γ‚ˆ-is-sheaf S (is-universal-colimβ†’is-colim S hS)

Subcanonical coveragesπŸ”—

We can now ask: is there a converse to this result, i.e., if every is a sheaf for a coverage must it be the canonical coverage? The answer is not quite, since that is too strong. But we can show that all the sieves in are universal colim sieves! We will refer to any coverage which satisfies the following equivalent conditions as a subcanonical coverage:

  1. Every representable functor is a sheaf for
  2. Every covering sieve in is universally colimiting.
is-subcanonical : βˆ€ {β„“c} β†’ Coverage C β„“c β†’ Type _
is-subcanonical J = βˆ€ {U} (S : J .covers U) β†’ is-universal-colim (J .cover S)

For concreteness, we formalise the statement β€œ is a subcanonical coverage” as property (2); We must then show that is subcanonical if every representable is a

γ‚ˆ-is-sheafβ†’is-subcanonical
  : βˆ€ {β„“c} (J : Coverage C β„“c)
  β†’ (βˆ€ {V} β†’ is-sheaf J (Hom-into C V))
  β†’ is-subcanonical J
γ‚ˆ-is-sheafβ†’is-subcanonical J shf {U} S {V} f = to-is-colimitp mk refl where
  open make-is-colimit

So, suppose we have such a a covering sieve and a map We want to show that is the colimit of First, we get the cocone out of the way: this is as, as we’ve seen repeatedly, projecting the arrow.

  mk : make-is-colim (pullback f (J .cover S))
  mk .ψ (elem V' (g , hg)) = g
  mk .commutes f = ap fst (f .commute)

Now for the interesting part, universality. Our inputs are an object and a function which, given a map in (i.e., such that produces Moreover, if we have some with then satisfies What we want is, initially, a map But note that is precisely the data of a patch for under

  mk .universal {W} Ξ΅ comm = [_] .centre .whole module univ where
    Ξ΅' : Patch (γ‚ˆβ‚€ C W) (pullback f (J .cover S))
    Ξ΅' .part  g hg       = Ξ΅ (elem _ (_ , hg))
    Ξ΅' .patch g hg h hhg = comm (elem-hom h (Ξ£-prop-path! refl))

Since was assumed to be a sheaf for it’s also a sheaf for any pullback of including The patch induced by thus glues to a unique section, which we will write What does this section consist of? Well, first, since covers a map like we wanted; It also contains evidence that, for belonging to we have

    [_] : is-contr (Section (Hom-into C W) Ξ΅')
    [_] = is-sheaf-pullback shf S f Ξ΅'

  mk .factors {elem W (g , hg)} Ξ΅ p = univ.[ Ξ΅ ] p .centre .glues _ _

Finally, for to be a colimit, we must show uniqueness of the map in the sense that if we have which also satisfies for any then we must have But note that this commutativity condition is precisely what it means for to underlie a section for so since is a sheaf, this must be equal to the we obtained from the section for

  mk .unique Ξ΅ p Οƒ q = sym $ ap whole $ univ.[ Ξ΅ ] p .paths
    record { glues = Ξ» f hf β†’ q (elem _ (f , hf)) }

References