by Isaac on 2023-09-13
Sheafification felt opaque to me when I first learned it from Hartshorne, I'll admit. I reviewed it recently to recover from summer rustiness and wanted to make the argument that it is, in fact, actually pretty straightforward.
There are two additional axioms a presheaf \(\mathcal F\) on \(X\) must satisfy to be a sheaf:
(Locality) Let \(U\) be covered by \(U_i\). If \(s,t \in \mathcal F(U)\) satisfy \(s|_{U_i} = t|_{U_i}\) for all \(i\), then \(s = t\).
(Gluing) Again let \(U\) be covered by \(U_i\). If there exist sections \(s_i \in \mathcal F(U_i)\) such that \(s_i|_{U_i\cap U_j} = s_j|_{U_i \cap U_j}\) then there exists some \(s \in \math cal F(U)\) such that \(s|_{U_i} = s_i\).
Thus, there are two ways a sheaf can fail to be a presheaf: it can violate locality by having extra sections which are equal locally but not globally or it can violate gluing by having too few sections to glue stuff together. Sheafification therefore consists of removing all sections which violate locality and adding extra sections to ensure gluing is possible. There's an excellent mathoverflow post this: here's a link. It also motivated this entry.
Examples of presheaves which violate gluing are pretty natural; lots of properties are easy or even trivial to satisfy locally but are much harder to satisfy globally.
Takeaway: The property \(f(p) = f(q)\) is not a local property, hence it is removed.
Takeaway: A function can be simultaneously be bounded locally and unbounded globally. Hence the 'bounded' condition is removed.
Examples of locality violation feel less natural to me because it's hard to construct them by imposing conditions on sets of functions. After all, if two functions are equal in every neighborhood of a space, then they're equal everywhere. It feels better to think about "equivalence", in my opinion. I can easily imagine two things which are "similar locally" but are not similar globally. Here's an example utilizing the boundedness example from earlier.
Example 3: (Violating Locality) Again let \(X = \mathbb C\), let \(\mathcal F\) be the sheaf of holomorphic functions and let \(\mathbb G\) be the presheaf of bounded holomorphic functions. Now define a presheaf \(\mathcal H(U) = \mathcal F(U)/\mathcal G(U)\). At any \(x\in X\) we get \(\mathcal H_x = 0\), since any holomorphic function defined at \(x\) is bounded in a suitably small neighborhood of \(x\). However, functions like \(f(z) = z\) are not in the class of zero in \(\mathcal H(X)\), since they are not bounded globally. Contrast these two sets:
\(\mathcal H_x = \{0\}\) for reasons described above
\(\mathcal H(X) = \{\text{entire functions}\}/\mathbb C\), since the only bounded functions on \(X\) are the constant functions.
The set \(\mathcal H(U)\) is kind of like "unbounded functions on \(U\) up to boundedness". Two functions \(f\) and \(g\) can both be bounded on a small set \(U\), but for a strictly larger set \(f\) might become unbounded while \(g\) remains bounded. The sheafification of \(\mathcal H\) throws away all sections for which local equivalence doesn't imply global equivalence. Since all holomorphic functions are equivalent to a bounded function on a sufficiently small set, this is just the constant zero sheaf.
Takeaway: Locally bounded doesn't imply globally bounded for all sections, so all sections which are only locally bounded are thrown out.
Now let's look at some more general examples that show up immediately after you define sheafification. These sheafification examples are imperative to understand, since we use the sections of these sheaves all the time. If you fall back on the universal property of sheafification in these cases to avoid thinking about sections, then you're robbing yourself of valuable intuition and insight.
\(\operatorname{ker}^p \varphi (U) = \operatorname{ker}(\varphi(U): \mathcal F(U)\to \mathcal G(U))\subseteq \mathcal F(U)\)
\(\operatorname{im}^p \varphi (U) = \operatorname{im}(\varphi(U): \mathcal F(U)\to \mathcal G(U))\subseteq \mathcal G(U)\)
\(\operatorname{coker}^p \varphi(U) = \operatorname{coker}(\varphi(U): \mathcal F(U)\to \mathcal G(U))\)
These are presheaves, but are they sheaves? Fix \(U\subseteq X\) and a cover \(\{U_i\}\) of \(U\).
Gluing: Given \(s_i \in \mathcal \operatorname{ker}^p\varphi(U_i)\) so that \(s_i|_{U_i\cap U_j} = s_j|_{U_i\cap U_j}\), we want to find a section \(s\in \operatorname{ker}^p\varphi(U)\) whose restriction to \(U_i\) recovers \(s_i\). Such a section certainly exists in \(\mathcal F(U)\) because \(\mathcal F\) is a sheaf, but is this in the kernel of \(\varphi\)? Yes, it is – we need to move over to \(\mathcal G\) to see it. The map \(\varphi\) commutes with restrictions, so
\[\varphi(s)|_{U_i} = \varphi(s|_{U_i}) = \varphi(s_i) = 0\]in \(\mathcal G(U_i)\) by the assumption that \(s_i\in \operatorname{ker}^p\varphi(U_i) = \operatorname{ker}(\varphi(U_i))\). But \(\mathcal G\) is also a sheaf, hence satisfies locality and thus \(\varphi(s) = 0\) in \(\mathcal G(U)\). This implies \(s\in \operatorname{ker}^p\varphi(U)\).
Therefore \(\operatorname{ker}^p\varphi\) is indeed a sheaf, so we remove the \(p\) and define \(\operatorname{ker}\varphi := \operatorname{ker}^p\varphi\).
We're not so lucky in the case of the image presheaf. It does satisfy locality:
But notice what goes wrong when we try to glue:
A sheaf which satisfies locality but not gluing is called a separated presheaf. To obtain an image sheaf, we simply sheafify: \(\operatorname{im}\varphi := (\operatorname{im}^p\varphi)^\sim\).
All we've done is add the missing sections from \(\mathcal G(U)\) into \(\operatorname{im}^p\varphi(U)\), so \(\operatorname{im}\varphi\) is most definitely still a subsheaf of \(\mathcal G\).
If we look back at the bounded holomorphic sections examples, you'll notice that the failure of locality in Example 3 was actually due to the failure of gluing in Example 2. This is a more general fact; if we take the quotient of a presheaf (or sheaf) by a presheaf which doesn't have the gluing property, then the resulting quotient presheaf won't have the locality property. To see what I mean, let's look at why locality fails for the cokernel presheaf:
The cokernel doesn't actually satisfy gluing either.