This is going to be one of the most abstract and technical posts yet; it’s inessential for reading this blog, but I wanted to include it because I would like to cultivate as many different possible viewpoints of scheme theory from the very start. There will be one more post running in this vein and then we will go back to doing actual geometry. However, this post will provide some more structure to the “functor of points” approach we have seen.

Essentially, when learning about the functor of points we saw that every scheme can be viewed as a set-valued presheaf on the opposite of the category of rings (i.e. just a functor from rings to sets, but this is a better viewpoint). But in fact this does not characterise schemes – not every presheaf on the opposite category of rings is the functor of points of a scheme (i.e. not every presheaf on the category of rings is representable). So in order to characterise schemes in this way we will need to find some further structure present. It turns out that with a suitable definition of a “topology” on the (opposite) category of rings – turning this category into something like a space – we will see that schemes are actually the sheaves on this category, which obey the “identity” and “glueing” axioms we looked at in one of the very first posts on this blog.

This post will consist of establishing the vocabulary of these so-called “Grothendieck (pre)topologies” on categories, and we will use these to define sheaves on categories in two ways. In an upcoming post we will use this to see the applicability to schemes, but this is going to be a purely category-theoretic post (and mostly taken from Johnstone’s lovely book Topos Theory). Feel free to skip!


Let \mathcal{C} be a (small – objects form a set) category with pullbacks. A Grothendieck pretopology P on \mathcal{C} is an assignment of a set P(U) to every object U\in\mathcal{C} where the elements of P(U) are sets of \mathcal{C}-morphisms

\left\{ U_i \xrightarrow{\alpha_i} U: i\in I\right\}

into U (called covering families) satisfying the following three axioms:

  1. For every U\in\mathcal{C}, the family \left\{\text{id}_U : U\rightarrow U\right\} \in P(U);
  2. If f: V\rightarrow U is a morphism in \mathcal{C} and \left\{ U_i \rightarrow U: i\in I\right\}\in P(U) then \left\{V\times_U U_i \xrightarrow{\pi_V} V: i\in I\right\}\in P(V);
  3. If \left\{ U_i \xrightarrow{\alpha_i} U : i\in I\right\} is an element of P(U) and \left\{V_{i j} \xrightarrow{\beta_{i j}} U_i : j\in J_i \right\} is an element of P(U_i) for each i\in I then the composition \left\{ V_{i j} \xrightarrow{\alpha_i \circ \beta_{i j}} U : i\in I, j\in J\right\} is an element of P(U).

Morally, these should be interpreted as follows: if U is any topological space then (1) U\xrightarrow{\text{id}} U is an open covering of U; (2) if you’re given an open covering U_i \hookrightarrow U of a space U and V is a subset of U then V \cap U_i \hookrightarrow V is an open covering of V; and (3) if you’re given an open covering U_i \hookrightarrow U and each of the open sets U_i has an open covering V_{i j} \hookrightarrow U_i then the collection of all the V_{i j} also covers U.

As a concrete example, let X be a topological space and let \text{Op}(X) be the poset category of all its open subsets, ordered by inclusion (we saw this in this post). The pretopology on this category is just the set of open covers of each open set i.e. a covering family for U is just a set of inclusions U_i \hookrightarrow U such that the union of all the U_i equals U.

Grothendieck pretopologies already give us enough “local” information in our categories to define a suitable notion of a sheaf on the category. Recall we could define a presheaf on any category as simply a contravariant functor, but in order to define a sheaf we needed to be able to talk about covers, and this is exactly what a pretopology lets us do. With this in mind we say that a presheaf F on a category \mathcal{C} (taking values in sets) is a sheaf if for every covering family \left\{ U_i \rightarrow U: i\in I\right\}\in P(U) the diagram

F(U) \rightarrow \prod_{i\in I} F(U_i) \rightrightarrows \prod_{i,j\in I} F(U_i \times_U U_j)

is an equaliser. Here the first map is the universal map into the product induced by the restrictions F(U)\rightarrow F(U_i) for every morphism U_i \rightarrow U in the covering family. The top and bottom second maps are constructed as follows: let

\pi_i : \prod_{i\in I} F(U_i) \rightarrow F(U_i)

be the canonical projections. For each j\in I we have a restriction map

\rho^i_{i j } : F(U_i)\rightarrow F(U_i \times_U U_j)

Therefore the compositions \rho^i_{i j} \circ \pi_i induce a universal morphism \prod_{i\in I} F(U_i) \rightarrow \prod_{i,j} F(U_i \times_U U_j). This is the first of the two maps. The second follows by first restricting to U_j and then repeating the procedure. In general these will give different morphisms, but must agree when precomposed with the morphism from F(U) if F is a sheaf.

We will use this definition of a sheaf sometimes because it is more closely related to what we have already seen. However it is a slightly vague definition; to see what I mean, suppose that F satisfies this condition for a covering family R = \left\{U_i \rightarrow U: i\in I\right\}\in J(U). Then if S is another family of covers containing R, F will also satisfy the sheaf condition with respect to S. This means that two possibly different pretopologies can give rise to exactly the same sheaves.

This is a far-reaching quasi-generalisation of the fact that two different metrics on a space can induce exactly the same topology (the metrics then being called equivalent) and therefore the sheaves on these spaces (in the usual sense we defined here) will be exactly the same. Given that sheaves are more of  a “topological” object and not a “metric” object, it might make sense to get to the root of this and define actual “topologies” on our categories rather than “metrics” (bear in mind this is a very loose analogy!). So we might want to consider covering families which are somehow “maximal”, and this is what the notion of a “sieve” encapsulates. Following this, we can also dispense with the assumption that our category \mathcal{C} has pullbacks; the drawback is that the notion of a sheaf becomes significantly more abstract.


Let P be a Grothendieck pretopology on a category \mathcal{C}, and let U\in\mathcal{C} be an object. We say the set R\in P(U) is a sieve on U if

\left(V\xrightarrow{\alpha} U\right)\in R \implies \left(W\xrightarrow{\beta} V\xrightarrow{\alpha} U\right)\in R

for every morphism \beta: W\rightarrow V.

Definition: Let \mathcal{C} be a small category. A Grothendieck topology J on \mathcal{C} is a set J(U) of sieves on every object U\in\mathcal{C} (called covering sieves) such that

  1. The maximal sieve \bigcup_{A\in\mathcal{C}} \mathcal{C}(A,U) is an element of J(U);
  2. If R\in J(U) and f: V\rightarrow U is a morphism in \mathcal{C} then the pullback sieve f^* (R) = \left\{W\xrightarrow{\alpha} V : f\circ \alpha \in R \right\} is an element of J(V);
  3. If R\in J(U) and S is some sieve on U such that for every morphism (V\xrightarrow{f} U)\in R we have f^* (S)\in J(V) then S\in J(U).

A category equipped with a (Grothendieck) topology is called a site. This definition implies some important things:

Let R\in J(U) and let S be a sieve on U containing R i.e. every morphism in R is in S. Pick a morphism f: V\rightarrow U in R; then if \alpha: W\rightarrow V is is any morphism in f^* (S), the fact that R is a sieve implies that (W\xrightarrow{\alpha} V \xrightarrow{f} U)\in R, and therefore (W\xrightarrow{\alpha} V)\in f^* (R). But this shows that f^* (S)\subseteq f^* (R). Conversely it is clear that f^* (R)\subseteq f^* (S) from the definitions; therefore f^* (S) = f^* (R)\in J(V). By axiom 3, it follows that S\in J(U).

Note that every Grothendieck pretopology J induces a Grothendieck topology J' as follows: for each covering family R\in J(U), the collection J'(U) of sieves S on U containing R is a Grothendieck topology (check the axioms!). This is in some way (maybe) like how a metric induces a topology on a space, and in some sense this makes topologies more general.

The real benefit of using sieves instead of covering families is that we can drop the assumption about the base category having pullbacks. The reason is that we can always pull a sieve back along a morphism even if we cannot do this for the individual morphisms in the sieve. To see why this works, let R be a sieve on an object U\in\mathcal{C} and let

h_U = \mathcal{C}(-, U)

be the representable presheaf on \mathcal{C} induced by U. Let

\hat{R}: \mathcal{C}^\text{op} \rightarrow \text{Set}

be the presheaf V\mapsto \left\{\alpha \in R : \text{domain}(\alpha) = V\right\}. Then \hat{R} is a presheaf on \mathcal{C} and is actually a subpresheaf of the representable presheaf h_U. This means that in the functor category [\mathcal{C}^\text{op}, \text{Set}] \hat{R} is a subobject of h_U, but concretely it just means that for every V\in\mathcal{C}, \hat{R}(V) is a subset of h_U (V). Now the presheaf category [\mathcal{C}^\text{op}, \text{Set}] does have pullbacks (indeed, it has all limits and colimits and these are computed “pointwise”). By the Yoneda lemma we can think of \mathcal{C} as being fully and faithfully embedded in this presheaf category, so we can identify objects U with their representable presheaves h_U and sieves R with the presheaves \hat{R}. This explains why we can dispense with \mathcal{C} having pullbacks, because they are present in this larger category in which \mathcal{C} sits.

Sheaves on a site

A sheaf F on a site (\mathcal{C}, J) is then a presheaf on \mathcal{C} such that for every U\in\mathcal{C} and every covering sieve R\in J(U), every morphism

\hat{R}\rightarrow F

in [\mathcal{C}^\text{op}, \text{Set}] has exactly one extension to a morphism

h_U \rightarrow F

Ouch! How abstract can you get???

But there’s a nice way to decode this to see it really isn’t too different to what we already have. Recall that by the Yoneda Lemma, natural transformations h_U \rightarrow F correspond bijectively to elements of the set F(U). Now, a natural transformation \eta:\hat{R}\rightarrow F consists of a function \eta_V: \hat{R}(V)\rightarrow F(V) for every object V\in\mathcal{C} that is compatible with morphisms f: W\rightarrow V i.e. we get the usual naturality squares for every morphism.

If V is not the domain of any of the morphisms in the sieve R then \hat{R}(V)=\varnothing. In this case the function \eta_V is the unique “empty function”. If not, \eta_V produces an element s_\alpha of F(V) for every element \alpha\in\hat{R}(V). Furthermore, if f: W\rightarrow V is a morphism then since R is a sieve, \hat{R}(W) is nonempty and we obtain elements

\hat{f}(\alpha) = \alpha\circ f\in \hat{R}(W)

for each \alpha\in\hat{R}(V). Mapping these into F(W) via \eta_W we see that F(f) (s_\alpha) equals s_{\hat{f}(\alpha)}.

Therefore a morphism \eta: \hat{R}\rightarrow F amounts to specifying a collection of “sections” s_\alpha in every F(V) for each V arising as a domain of one of the elements in R which are “compatible” in the sense that the “restriction maps” F(V)\rightarrow F(W) induced by morphisms W\rightarrow V take sections to sections. By the definition above, F being a sheaf means there is a unique natural transformation h_U \rightarrow F extending \eta. But since this corresponds bijectively to an element of F(U), this means there is a unique section s\in F(U) such that the “restriction” of s to each V (by which I mean the map F(U)\rightarrow F(V) induced by some \alpha\in \hat{R}(V)) equals s_\alpha. And this looks a lot more like our definition of a sheaf we originally gave!

Here are some final notes for this post:

  1. In the last paragraph we saw how unique “sections” s\in F(U) can be glued up uniquely from smaller sections s_\alpha when F is a sheaf. The crucial difference (which confused me for a while) is that whereas in the topological case there was always at most one map V\hookrightarrow U (corresponding to the inclusion of an open subset), this time there may be many different ways to “restrict a section”; in fact we can do this along each of the different morphisms \alpha\in\hat{R}(V). So in F(V) there may be many different sections s_\alpha, s_\beta, \dots $ all being “restrictions” of the same “global section” s; this is fine, just noting that they have been “restricted” in different ways.
  2. Sometimes it is more useful to work with a topology and other times a pretopology may be better suited. I get the feeling from reading the experts that pretopologies may be more suitable for actually computing things, whereas topologies and sites are more elegant, but really I’m not sure. I’m only beginning to get my head around these things.

Finally, in one of the next few posts I will attempt to use these gadgets to show how every scheme, as we’ve defined them, can also be defined as a sheaf on the Zariski site.