Sheaves in mathematics get their name from the agricultural term “sheaf” –  a collection of stalks of grain or cereal all bundled together. This is like how properties of sheaves are determined by their stalks from the gluing axioms.

This time, as promised, we will discuss sheafification and show it is the left-adjoint of the inclusion functor \text{Sh}_\mathcal{C} (X) \hookrightarrow \text{PSh}_\mathcal{C} (X).

Defintion 1: Let F be a presheaf (of sets, say) on a topological space X. The sheafification of F is the presheaf F^+ where F^+ (U) is the set of functions f: U\rightarrow \coprod_{x\in U} F_x such that for each x\in U, (i) f(x)\in F_x and (ii) there exists an open neighbourhood V_x of x and a section s\in F(V_x) such that for all y \in V_x we have f(y) = s_y. If V\subseteq U then the restriction map F^+ (U) \rightarrow F^+ (V) is the restriction of each of these functions to V.

So the sheafification of a presheaf basically bundles all the sections of the presheaf into “compatible stalks” in the sense that a section of the sheafification F^+ is the collection of germs of a particular section of F in all its stalks. As you’d expect, the sheafification of a presheaf is actually a sheaf:

Theorem 1: The sheafification F^+ is a sheaf (of sets, but this will generalise to other categories).

Proof: We know that F^+ is a presheaf so we need to just check the identity and gluability axioms. Let U be an open subset of X and let U = \bigcup_i U_i be an open cover.

First, let’s check the identity axiom. Let s,t\in F^+ (U) be sections over U such that their restrictions s_i, t_i \in F^+ (U_i) are equal for all open sets in the cover. Then for any x\in U there exists some U_i containing x and on which s_i = t_i, so s(x) = s_i (x) = t_i (x) = t(x). This holds for all x \in U, so s = t.

Now let’s check the gluing axiom. Let s_i \in F^+ (U_i) be sections such that for each i, j the restrictions of s_i and s_j to F^+(U_i \cap U_j) are equal. Now define a function s: U\rightarrow \coprod_{x\in U} F_x by s(x) = s_i (x) for any U_i containing x. This is well-defined because the sections s_i agree on overlaps. So now we just need to check that s\in F^+(U) i.e. that it satisfies the two conditions in the definition. The fact that the s_i‘s all satisfy s_i (x)\in F_x give that s(x)\in F_x. Now for each s_i there exists an open set V_i\subseteq U_i and a section t\in F(V) such that for all y \in V, s_i(y) = t_y. This means that this condition holds for s too – just take any of the V_i containing x. So we actually have s\in F^+ (U). This completes the proof. \square

So given any presheaf we can construct a sheaf from its stalks. There is a natural morphism of presheaves \phi: F\rightarrow F^+ whose components \phi_U : F(U)\rightarrow F^+ (U) are given by

\phi_U(s) = (x\mapsto s_x\in F_x)

For any morphism F\rightarrow G of presheaves, the universal property of the colimit means we get a unique morphism of stalks F_x \rightarrow G_x for each stalk (which means taking the stalk is a functor!). It follows that the morphism F \rightarrow F^+ induces a unique morphism on stalks F_x \rightarrow F_x^+. But we also obtain a unique morphism F_x^+ \rightarrow F_x for each x\in X as follows:

Take s\in F^+(U) and for each x\in U let s^{(x)}\in F(V_x) be the section (defined above) such that s^{(x)}_y = s(y) for all points y\in V_x. Then we define a collection of morphisms \alpha_x^U: F^+(U)\rightarrow F_x in our target category (one for each open set U containing x) by s\mapsto s^{(x)}_x = s(x). These are clearly compatible with restriction and so we obtain a cocone (F_x, (\alpha_x^U)_{x\in U}) over F_x. By the universal property of the colimit F^+_x = \text{colim}_{x\in U} F^+ (U), we obtain a unique morphism \alpha_x: F_x^+ \rightarrow F_x such that the maps \alpha_x^U factor as the compositions of \alpha_x and the inclusions into the colimit.

So now we have unique morphisms F_x \rightleftarrows F_x^+ in our target category for each point x\in X. It follows that these morphisms compose to give the identity morphisms, and therefore F and its sheafification F^+ have isomorphic stalks. This is a hugely useful fact which we will use again. For now, note that if F is already a sheaf then F and its sheafification F^+ are isomorphic as sheaves, because morphisms of sheaves are determined by their stalks!

Now let G be another sheaf on X and let \psi : F\rightarrow G be a morphism (here F is a presheaf). Then there is a morphism of sheaves \eta: F^+ \rightarrow G whose components \eta_U : F^+(U)\rightarrow G(U) are defined as follows: for s\in F^+(U) the open neighbourhoods V_x containing each point x\in U each have a section s^{(x)} \in F(V_x) such that s^{(x)}_y = s(y) for all y \in V_x. This condition ensures that the restrictions of s^{(x)} and s^{(y)} to V_x \cap V_y are equal, and therefore their images \psi_{V_x} (s^{(x)}) and \psi_{V_y} (s^{(y)}) are also equal on the overlaps V_x \cap V_y. Therefore since G is a sheaf and U = \bigcup_{x\in U} V_x is an open cover, the sections \psi_{V_x} (s^{(x)}) \in G(V_x) all glue together to give a section t\in G(U). We then set \eta_U (s) = t. This clearly commutes with restrictions so it is actually a sheaf morphism \eta : F^+ \rightarrow G. Furthermore you can check that it also satisfies \eta \phi = \psi, so the diagram below commutes:


Now suppose that \eta': F^+ \rightarrow G is another sheaf morphism that satisfies \eta' \phi = \psi. We have induced maps on stalks: \psi_x :F_x \rightarrow G_x, \eta'_x:F_x^+\rightarrow G_x. But since sheaf morphisms are determined by their stalks and F_x \cong F_x^+ as we saw above, it follows that \eta and \eta' induce the same map on every stalk and therefore they are equal. So the map \eta is uniquely determined by \psi.

Now if \psi:F\rightarrow G is a morphism of presheaves on X then the composition \phi_G \circ \eta : F^+ \rightarrow G^+ (hopefully you can work out the notation from above!) gives a uniquely defined morphism of sheaves on X. In this way, we see that sheafification is a functor (-)^+: \text{PSh}_\mathcal{C} (X) \rightarrow \text{Sh}_\mathcal{C} (X). Furthermore, the discussion above shows that in fact (-)^+ is the left-adjoint of the inclusion functor from sheaves to presheaves on X.

A subcategory \mathcal{A} of a category \mathcal B is called reflective if its inclusion functor has a left adjoint, which we call the reflection. One immediate thing to note is that since (-)^+ is a left adjoint, it preserves colimits. Some general theorems which you can look up in the Handbook of Categorical Algebra (section 3.5 on reflective subcategories) or on the nLab page for reflective subcategories and the nLab page for presheaves tell us that if \mathcal{A} is a reflective subcategory of a (co)complete category \mathcal{B} (i.e. every diagram in \mathcal B has a (co)limit) then \mathcal{A} is itself (co)complete. The nLab page says the category of presheaves on any space with values in the category of sets (or I would imagine in any complete and cocomplete category) is (co)complete, and so the category of sheaves valued in that category is (co)complete because of the above.

This means we can compute any limits we like in most of the frequently-used categories of sheaves (e.g. with values in \text{Set} or \text{Ab}). Moreover, since the inclusion functor from sheaves to presheaves is the right adjoint of sheafification (as we have just seen) it follows that these limits are preserved in presheaves. And by section 2.15 of the Handbook since the presheaf category is just a functor category we just compute limits pointwise, in the sense that (\lim F)(U) = \lim F(U).

Thus if have a morphism \phi: F\rightarrow G of sheaves of abelian groups (or any abelian category) we can compute the kernel \ker \phi (which exists as a sheaf since the category of sheaves is complete and kernel is a limit – it’s an equaliser), and we know by the above argument that it is computed “pointwise”, so (\ker \phi)(U) = \ker \phi_U. This is a nice application of how the abstract functorial machinery can be used to deduce (relatively – we’re still dealing with sheaves!!!) concrete things about how to calculate natural constructions relating to sheaves.

The same result does not hold for cokernels, which are colimits (coequalisers) and generally do not commute with the inclusion functor. To define the cokernel of a sheaf morphism we need to sheafify, so \text{coker}(\phi) = (U\mapsto \text{coker} (\phi_U) )^+ is the sheaf cokernel. This is constructed in two steps – first take the pointwise cokernel, which is a presheaf colimit. Then sheafify and note that since sheafification is a left adjoint it preserves colimits, so this really is a colimit (and has the cokernel UMP).