Previously: Sheaves and Topology.
In our quest to rewrite topology using the language of category theory we introduced the category of open sets with set inclusions as morphisms. But when we needed to describe open covers, we sort of cheated: we chose to talk about set unions. Granted, set unions can be defined as coproducts in this category (not to be confused with coproducts in the category of sets and functions, where they correspond to disjoint unions). This poset of open sets with finite products and infinite coproducts is called a frame. There is however a more general definition of coverage that is applicable to categories that are not necessarily posets.
A cover of an open set is a family of open sets
that doesn’t leave any part of
uncovered. In terms of inclusions, we can rephrase this as having a family of of morphisms
. But then how do we ensure that these sets indeed cover the whole of
?

The familiar trick of category theory is to look at the totality of all covers. Suppose that for every open set we have not one, but a whole collection of covers: that is a collection of families
, each indexed by a potentially different set
.
Now consider an open subset . If the family
is a cover of
than the family of intersections
should form a cover of
.
![]() |
![]() |
Indeed, an intersection of two open sets is again an open set, so all ‘s are automatically open. And if no part of
was left uncovered by
‘s, then no part of
is left uncovered by
‘s.
Conversely, imagine that we had an incomplete cover, with a hole large enough to stick an open set in it. The empty intersection of that “cover” with
would then produce no cover of
. So the requirement that each cover produces a smaller sub-cover eliminates the possibility of substantial holes in coverage. This is good enough for our generalization.
We are now ready to define coverage using categorical language. We just have to make sure that this definition reproduces the set-theoretic picture when we replace objects with open sets, and arrows with inclusions.
A coverage on a category
assigns to each object
a collection of families of arrows
.

For every such family , and every object
equipped with an arrow
, there exist a covering family
that is a sub-family of
.

This means that for every we can find its “parent”
, i.e., every inclusion
can be factored through some
:

A category with a coverage is called a site. As we’ve seen before, the definition of a sheaf uses a coverage, so a site provides the minimum of structure for a sheaf.
For completeness, here’s the definition of a sheaf on a site as explained in detail in the previous post:
Our starting point is a presheaf , abstracting the idea of assigning a set of functions to every open set (an object of
).
maps arrows in
(inclusions of open sets) to restrictions of said functions. This presheaf is a sheaf if:
- For every covering family
- and every compatible family (tuple) of elements
, such that for every
that has arrows to two objects:
and
, such that
, we have:
(the restrictions on all overlaps coincide)
- there is a unique element
such that
for all
(we can collate all individual functions).

As you’d expect in topology, this definition doesn’t mention sizes or distances. More interestingly, we don’t talk about points. Normally a topological space is defined as a set of points, and so are open sets. The categorical language lets us talk about point-free topologies.
There is a further generalization of sheaves, where the target of the functor is not
but a category with some additional structure. This makes sense, because the set of functions defined over an open set has usually more structure. It’s the structure induced by the target of these functions. For instance real- or complex-valued functions can be added, subtracted, and multiplied–point-wise. Division of functions is not well defined because of zeros, so they only form a ring.
There is an intriguing possibility that the definition of a coverage could be used to generalize convolutional neural networks (CNN). For instance, voice or image recognition involves applying a sliding window to the input. This is usually done using fixed-sized (square) window, but what really matters is that the input is covered by overlapping continuous areas that capture the 2-dimensional (topological) nature of the input. The same idea can be applied to higher dimensional data. In particular, we can treat time as an additional dimension, capturing the idea of continuous motion.
Next Sheaves as Virtual Objects.

September 5, 2025 at 9:55 am
The following is a bit weirdly worded to me.
Shouldn’t it be “…the family of intersections v_i = v cap u_i …”?
I couldnt make sense of it otherwise.
September 5, 2025 at 10:58 am
Fixed
November 1, 2025 at 11:56 am
A bit confused by the statement quoted below. What is the difference between collection and family and what exactly collection of families mean? Does it mean that each u_i is a actually a notation for a set/family of objects {u_i} that cover the object u via the set/family of morphisms p_i = {p_i}?
A coverage
on a category
assigns to each object
a collection of families of arrows
.
November 1, 2025 at 12:49 pm
The same set
can have many possible coverages, each corresponding to a different family of arrows. I agree that it might be a little confusing, but nLab uses the same wording.