Let’s begin with looking at some fundamental objects that generalise the notion of sets of functions on a space. We will use these objects to define schemes later on. They are called sheaves.

First, some definitions. Let X be a topological space and let \text{Op}(X) be the poset category of its open sets, ordered by inclusion. So there is a unique arrow U\rightarrow V in \text{Op}(X) if and only if U\subseteq V. For any category \mathcal{C}, a \mathcal{C}-valued  presheaf on X is a functor F: \text{Op}(X)^\text{opp} \rightarrow \mathcal{C}. (The target category is usually a “set-like” category like sets, abelian groups, rings, algebras or modules, but in principle it can be anything.) If U\subseteq V are open sets in X then the \mathcal C-morphisms \rho_U^V \colon F(V) \rightarrow F(U) are called restriction maps.

The reason these maps are called restrictions is clear – presheaves are modelled on the collection of (continuous/differentiable/holomorphic/etc.) functions defined locally on a topological space. Normally, spaces do not have many globally-defined functions, and understanding the functions defined on open subsets of the space gives us lots of information about the space. So it is natural to think of F(U) as the set (group/ring/etc.) of functions defined on an open subset U\subseteq X.

But this forgets loads of information about what happens on the overlaps between sets. In particular, if we cover an open subset U = \bigcup_i U_i with open subsets and we have a function f_i \in F(U_i) for each open set such that their restrictions on overlaps agree, then we know all these functions “glue together” to give a function f\in F(U) such that the restriction of f to U_i is f_i. This leads us to the concept of a sheaf.

Definition 1: Let X be a topological space and let \mathcal C be a category. A \mathcal C-valued sheaf on X is a presheaf F on X such that for each open set U\subseteq X and open cover U = \bigcup_i U_i, the diagram


is an equaliser diagram, where the first morphism is the universal map into the product, and the second pair of morphisms are given by the products of \rho_{U_i \cap U_j}^{U_i} : F(U_i) \rightarrow F(U_i \cap U_j) and \rho_{U_i \cap U_j}^{U_j} : F(U_i) \rightarrow F(U_i \cap U_j) over i and j.

Wow! This is all pretty abstract. What does this mean? If (as I will almost always do from now on) you allow \mathcal C to be a category of “sets with some possible extra structure” – let’s think of sets or abelian groups for now – then you can consider the elements of these groups F(U), which are called sections. Then the diagram above encodes the following data:

  1. If s,t\in F(U) are sections whose restrictions to each F(U_i) are equal, then they are equal.
  2. If you have sections s_i \in F(U_i) for each i that agree on overlaps then there is a unique section s \in F(U) such that \rho_{U_i}^U (s) = s_i.

To concentrate our attention around a point x\in X, we take the stalk of a presheaf, which is the colimit

gif (1)

Elements of the stalk are called germs, which are equivalence classes (s, U) where s\in F(U) is a section and two such classes (s,U), (t,V) are considered equal if there is an open set W\subseteq U\cap V on which the restrictions of s and t agree. The stalk is basically the collection of functions defined infinitesimally close to x.

Now let’s talk about (pre)sheaf morphisms. A morphism of two \mathcal C-valued presheaves \varphi : F\rightarrow G on a topological space X is just a natural transformation of the corresponding functors. A morphism of sheaves is just a morphism of presheaves. So we have a category of \mathcal C-valued presheaves on X which is just the functor category \text{PSh}_{\mathcal C} (X) = \text{Fun} (\text{Op}(X)^{\text{opp}}, \mathcal{C} ). Saying sheaf morphisms are just presheaf morphisms amounts to saying the category \text{Sh}_{\mathcal C} (X) of \mathcal C-sheaves on X is a full subcategory of \text{PSh}_{\mathcal C}(X).

I won’t bother saying too much about sheaf morphisms because you can read it all in Ravi Vakil’s excellent (and free!) notes, but the nice thing is that for sheaves (unlike presheaves), lots of properties are determined by the stalks of the sheaf, because we can glue together local information to get global information about the whole sheaf. For example, one can define injections and isomorphisms on the components of the natural transformations for sheaves, and it turns out these conditions are equivalent to those conditions holding on the stalks. Furthermore, you can also define surjective sheaf morphisms and exact sequences of sheaves, and these all interact nicely with the stalk structure, so you just need to check local information.

Next time, we’ll have a look the left adjoint of the inclusion functor \text{Sh}_\mathcal{C} (X) \hookrightarrow \text{PSh}_\mathcal{C}(X), which is called sheafification.