An adjunct to adjunctions

The name of my blog makes reference to adjunctions, so it seems appropriate that I at least say something about them. Really, there is a lot that can be said about these things, so I’ll stay (somewhat) focused on leading to a post I enjoyed from the n-Category Café (probably because I have an embarrassing grasp of sheaves). Before that, though, what even is an adjunction?

Definition 1: Two functors L:\mathcal C\to\mathcal D and R:\mathcal D\to\mathcal C form an adjoint pair if there is a bijection

which is natural in X\in\mathcal{C}_0 and Y\in\mathcal{D}_0. In other words, there is a natural way of identifying a morphism f:L(X)\to Y of \mathcal{D} with a morphism f^\sharp:X\to R(Y) of \mathcal{C} (and vice versa). In this situation, say that L is left adjoint to R, and write L\dashv R.

This might seem inaccessible, but there are numerous examples to help get accustomed to adjoints:

  • Probably the simplest example of an adjunction is currying from computer science. Suppose you have a function (of sets) f:X\times Y\to Z. Explicitly, this assigns some element f(x,y)\in Z for every x\in X and y\in Y. This means that if we “partially evaluate” the function f just at some point x\in X, we should get a function f(x,-):Y\to Z. In other words, we can think of a function f:X\times Y\to Z equivalently as a function f:X\to(Y\to Z) that maps elements of X to functions Y\to Z. This is an adjunction (-)\times Y\dashv \mathop{\mathrm{Maps}}(Y, -).
  • A common family of examples come from free-forgetful adjunctions. This point of view is mostly conceptual, since “forgetful functors” don’t usually have any precise definition. The idea is that we have a functor U:\mathcal D\to\mathcal C which “forgets” something about objects of \mathcal D that make them land in \mathcal C. Then, if it exists, a left adjoint F\dashv U tries to give that forgotten structure back in the easiest way possible.
    • For example, consider the functor U:\mathbf{Vect}_{\mathbb{R}}\to\mathbf{Set} which forgets the vector space structure on a set. This functor has a left adjoint \mathrm{Span}_{\mathbb R}:\mathbf{Set}\to\mathbf{Vect}_{\mathbb{R}} which sends a set B to the vector space whose basis is given by the elements of B. The adjunction just reflects the fact that in order to define a linear transformation \phi:\mathop{\mathrm{Span}}_{\mathbb{R}}(B)\to V from a vector space with basis B into any other space V, it is enough to specify where \phi sends the basis vectors b\in B—that is, a function \phi^\sharp : B\to U(V) from the basis to the underlying set of V.
    • Similarly, consider the functor U:\mathbf{Grp}\to\mathbf{Set} that forgets the group structure on a set. This also has a left adjoint \langle-\rangle:\mathbf{Set}\to\mathbf{Grp} which sends a set S to the free group \langle S\rangle generated by the elements of S. Again, the adjunction just says that a group homomorphism \langle S\rangle\to G is completely determined by where it sends the generators (elements of S).
    • As a final algebraic example, consider the functor U:\mathbf{CRing}\to\mathbf{Set} that forgets the ring structure on a set. The left adjoint \mathbb{Z}[-]:\mathbf{Set}\to\mathbf{CRing} sends a set S to the ring \mathbb{Z}[S] of integer coefficient polynomials whose variables are the elements of S. The adjunction says that a ring homomorphism \mathbb{Z}[S]\to R is determined by where these variables get sent.
    • Here’s a non-algebraic example. Consider the functor U:\mathbf{Top}\to\mathbf{Set} that forgets the topology on a set. The left adjoint \mathrm{disc} : \mathbf{Set}\to\mathbf{Top} realises a set as a discrete space. The adjunction says that any function out of a discrete space is automatically continuous.
      • The forgetful functor in this case also has a right adjoint (which I guess you could call cofree) \mathrm{codisc} : \mathbf{Set}\to\mathbf{Top} which realises a set as a codirscrete space. The adjunction here says that any function into a codiscrete space is automatically continuous.
  • Fix categories \mathcal{C} and \mathcal X. Consider the diagonal functor \Delta_{\mathcal X}:\mathcal C\to\mathop{\mathrm{Func}}(\mathcal X, \mathcal C) which sends an object of \mathcal{C} to the constant functor \mathcal X\to\mathcal C on that object. Then, \Delta_{\mathcal C} has a right adjoint if and only if \mathcal C has all limits of shape \mathcal X. Dually, \Delta_{\mathcal X} has a left adjoint if and only if \mathcal C has all colimits of shape \mathcal X. Therefore, in a complete and cocomplete category \mathcal C, we get an adjoint triple \varinjlim\dashv\Delta_{\mathcal X}\dashv\varprojlim for any (small) category \mathcal{X}.

Side note: Compare all of the examples of free-forgetful adjunctions to the corepresenting objects Z of the forgetful functors mentioned in my previous post (so that elements of an object X just correspond to morphisms Z\to X). What are the free objects on the singleton set in each case? Any forgetful functor U:\mathcal{C}\to\mathbf{Set} with a left adjoint F\dashv U is in fact corepresented by F(\{*\}), in the sense that the elements of the underlying set to an object X\in\mathcal{C}_0 are precisely the morphisms F(\{*\})\to X. This boils down to the fact that elements of a set X are just morphisms \{*\}\to X.

Fix an adjoint pair L\dashv R. For any X\in\mathcal{C}_0, we have an identity morphism \mathrm{id}_{L(X)}:L(X)\to L(X) in \mathcal{D}, and its corresponding morphism \eta_X := \mathrm{id}_{L(X)}^\sharp : X\to R(L(X)) is called the adjunction unit at X. Dually, the identity morphism \mathrm{id}_{R(Y)}:R(Y)\to R(Y) for any Y\in\mathcal{D}_0 induces an adjunction counit \epsilon_Y:= \mathrm{id}_{R(Y)}^\flat : L(R(Y))\to Y.

Adjunction Unit Counit
Currying (-)\times Y\dashv \mathop{\mathrm{Map}}(Y,-) The evaluation map \mathrm{ev}_Z:\mathop{\mathrm{Map}}(Y,Z)\times Y\to Z, which sends (f,y)\mapsto f(y). "Coevaluation" \mathrm{coev}_X : X\to \mathop{\mathrm{Map}}(Y,X\times Y) which sends a point x\in X to the pairing function y\mapsto (x,y).
Free-forgetful F\dashv U The "inclusion" X\to UF(X) of the set of generators into the free object on X The "projection" FU(X)\to X. In categories with a meaningful first isomorphism theorem such as \mathbf{Vect}_{\mathbb{R}}, \mathbf{Grp}, or \mathbf{CRing}, the counit can express how every object is a quotient of a free object.
Limit \Delta_{\mathcal X}\dashv\varprojlim The isomorphism X\to\varprojlim\Delta_{\mathcal X}(X) realising an object X as the limit of the constant diagram on X The universal cone \Delta_{\mathcal X}(\varprojlim F)\Rightarrow F for the limit of any functor F (providing the canonical projections \varprojlim F\to F(X)).

From the examples, you can see that sometimes the adjunction unit or counit may have a useful meaning by itself, but the real benefit is that they give us general formulae for (-)^\sharp and (-)^\flat. Explicitly, the right adjunct of a morphism f:L(X)\to Y is given by f^\sharp : X \xrightarrow{\eta_X}R(L(X)) \xrightarrow{R(f)} R(Y), and the left adjunct of a morphism g:X\to R(Y) is given by g^\flat : L(X) \xrightarrow{L(g)}L(R(Y)) \xrightarrow{\epsilon_Y} Y.

In particular, this allows us to use the adjunction unit and counit to understand how adjoint functors act on morphisms (and vice versa):

Proposition 2: Given an adjoint pair L\dashv R, we have that L is faithful (resp. full) if and only if the adjunction unit \eta_X:X\to R(L(X)) is monic (resp. split epic)—that is, if and only if the adjunction unit is injective (resp. surjective) on generalised elements—for every object X. Dually, R is faithful (resp. full) if and only if the adjunction counit is epic (resp. split monic) on every object.


Proof. Suppose p:X'\to X in \mathcal{C}, then we can compute L(p):L(X')\to L(X) with L(p) = (\eta_X\circ p)^\flat. Indeed, this follows from the computation (\eta_X\circ p)^\flat = \epsilon_{L(X)}\circ L(\eta_X\circ p) = (\epsilon_{L(X)}\circ L(\eta_X))\circ L(p) = \eta_X^\flat\circ L(p), recalling that \eta_X^\flat = (\mathrm{id}_{L(X)}^\sharp)^\flat = \mathrm{id}_{L(X)}. Therefore, L(p) = L(q) if and only if \eta_X\circ p=\eta_X\circ q (using that (-)^\flat is bijective). In particular, this means that L is faithful if and only if \eta_X is monic. On the other hand, L(p) = f if and only if \eta_X\circ p = f^\sharp. Since every generalised element g:X'\to R(L(X)) is of the form g = f^\sharp for some f (namely f = g^\flat), this means that L is full if and only if \eta_X is surjective on generalised elements. \blacksquare

Corollary 3: Given an adjoint pair L\dashv R, the following are equivalent:

Given a functor L:\mathcal C\to\mathcal D with right adjoint R:\mathcal D\to\mathcal C, consider the full subcategory \mathcal C^\natural\subset\mathcal C of those objects X for which \eta_X:X\to R(L(X)) is an isomorphism. Note that this subcategory is replete (i.e., closed under isomorphisms): if X\in\mathcal C_0^\natural and X\cong X', then naturality of the adjunction units gives a diagram

where three out of four maps are isomorphisms. This forces \eta_{X'} to be an isomorphism also, and the claim follows. In particular, this implies by definition that anything in the essential image of L|:\mathcal C^\natural\to\mathcal D maps back into \mathcal C^\natural via R. If we denote the essential image by \mathcal D^\natural, then this means that our adjoint pair restricts to an adjoint pair L|:\mathcal C^\natural\rightleftarrows\mathcal D^\natural:|R where L| is an equivalence (it is essentially surjective by definition, and fully faithful by Proposition 2). By Corollary 3, this gives us the following fact:

Lemma 4: An adjoint pair L:\mathcal C\rightleftarrows\mathcal D:R restricts to an adjoint equivalence L|:\mathcal C^\natural\rightleftarrows\mathcal D^\natural:|R, where \mathcal C^\natural is the full subcategory in \mathcal C of objects for which the adjunction unit is an isomorphism, and \mathcal D^\natural is likewise the full subcategory in \mathcal D of objects for which the adjunction counit is an isomorphism. Moreover, these subcategories are maximal with this property.

Farming for Equivalences

Lemma 4 is an interesting one, because from what I’ve given as examples of adjunctions, it doesn’t seem to say a whole lot:

  • Consider the currying adjunction (-)\times Y\dashv\mathop{\mathrm{Map}}(Y,-). For coevaluation X\to\mathop{\mathrm{Map}}(Y,X\times Y) to be bijective, this would mean all functions Y\to X\times Y have to be of the form “y\mapsto (x,y)” for some x\in X. This is only possible if either X is empty (so that there is at most one map Y\to X\times Y=\varnothing) or |Y|\leq1 (so that the map takes at most one value, and the y coordinate is uniquely determined).
    • To summarise: if Y is a singleton set, then currying reduces to just being the identity functor on \mathbf{Set}; otherwise, then Lemma 4 gives us an equivalence between terminal categories (categories with one object and one morphism). In either case, the equivalence is trivial.
  • The free-forgetful adjunctions listed above are not that exciting either. Since the free vector space (similarly group, commutative ring) on a set B is always strictly larger than B (in the sense that the inclusion is never surjective), the free-forgetful adjunction on spaces induces an equivalence of empty categories.
  • For topological spaces, the equivalence is mildly notable. For the adjunction \mathrm{disc}\dashv U, the adjunction unit is the identity map, and Lemma 4 produces the equivalence between sets and discrete topological spaces. Likewise, for the adjunction U\dashv\mathrm{codisc}, the adjunction counit is the identity map, and Lemma 4 produces an equivalence between sets and codiscrete topological spaces (… though this identification is seldom useful, from what I’ve seen).
  • Equally remarkable as the above example, consider limit adjunction \Delta_{\mathcal X}\dashv\varprojlim. The adjunction unit is again always an isomorphism, and so Lemma 4 gives the equivalence between a category \mathcal C and the full subcategory of \mathop{\mathrm{Func}}(\mathcal X,\mathcal C) on (essentially) constant diagrams. Incredible. You get the same equivalence when looking at the colimit adjunction.

Perhaps the equivalence in Lemma 4 reflects how destructive an adjunction is on the objects? For instance, the action of forgetting the underlying vector space structure is irreparable: you can never recover a reasonable vector space structure once you lose it (and likewise, taking a set as a basis for a space makes it impossible to recover the set since there are countless possible bases to choose from for any given vector space). On the other hand, forgetting the topology of a space is only destructive if the topology were nondiscrete (or dually, nontrivial), and it’s easy to recover a set once it’s endowed with a topology. Similarly, limits reduce an entire diagram to a single object, which is destructive unless the diagram were essentially constant.

With all of these trivial applications of Lemma 4, it comes as even more of a surprise (at least to me) that you might actually get something in some cases. Some examples can be found in and around this answer to a MathOverflow post. The example I’m more interested in right now is—you guessed it—the one to do with sheaves. What are sheaves? The beautiful thing is that we’ll find out through Lemma 4 (if you’re willing to join me through some elaborate abstract computations).

Let’s start with this wonderful abstract nonsense construction. Suppose we have some category \mathcal S (of “shapes”) and some functor S:\mathcal S\to\mathcal C (which we can think of as realising these abstract shapes concretely as objects of \mathcal C). This functor induces a backwards-pointing functor N : \mathcal C\to\mathbf{PSh}(\mathcal S) into the category of presheaves of \mathcal S defined on C\in\mathcal{C}_0 as NC := \mathop{\mathrm{Hom}}_{\mathcal C}(S(-),C) : \mathcal{S}^{\mathrm{op}}\to\mathbf{Set}. If \mathcal C is cocomplete, then N admits a left adjoint |-|:\mathbf{PSh}(\mathcal S)\to\mathcal C which sends a presheaf A:\mathcal{S}^{\mathrm{op}}\to\mathbf{Set} to the coend

\displaystyle |A| := \int^{s:\mathcal S}\coprod_{A_s}S(s)

This is the nerve-realisation adjunction, where the right adjoint N is called the nerve, and the left adjoint |-| the realisation. For example, if you take \mathcal S := \Delta to be the simplex category and \mathcal C=\mathbf{Top}, you recover the geometric realisation of simplicial sets, which is left adjoint to the singular simplicial complex of topological spaces.

Side note: In the case of geometric realisation, Lemma 4 again does not give anything useful: the singular complex of the geometric realisation of any non-discrete simplicial set is going to be much bigger than the original simplicial set, even just on the level of 0-cells. Therefore, Lemma 4 gives us an equivalence between discrete simplicial sets (constant functors \Delta^{\mathrm{op}}\to\mathbf{Set}, aka sets) and discrete topological spaces. However, this adjunction defines a Quillen equivalence between model categories, which tells us that this adjunction translates the homotopy theory of each category perfectly well (or even fancier, this adjunction induces an equivalence of their corresponding (\infty,1)-categories).

Let’s look at the special case that is supposed to explain what sheaves are. This should (hopefully) clarify some of the abstract nonsense of the general construction.

The setup is as follows. Fix a topological space X, then we want \mathcal{S} := \mathbf{Op}(X) to be the poset of open subsets of X. On the other hand, take \mathcal C := (\mathbf{Top}\downarrow X) to be the slice category of topological spaces equipped with a continuous map Y\to X. The functor \mathbf{Op}(X)\to(\mathbf{Top}\downarrow X) is the canonical one that sends an open subset U to the inclusion of spaces U\hookrightarrow X. Now we have our desired adjunction

|-|:\mathbf{PSh}(\mathbf{Op}(X)) \rightleftarrows (\mathbf{Top}\downarrow X) : \Gamma

The nerve functor is easiest to understand, so let’s look at it first. Given a space Y\to X, the nerve \Gamma_{Y/X} is the presheaf that sends an open set U\subseteq X to the set of those maps \sigma:U\to Y that lie over X in the sense that

commutes. This means that \Gamma_{Y/X}(U) is the set of local sections of Y over X defined on U. Therefore, given a presheaf A : \mathbf{Op}(X)^{\mathrm{op}}\to\mathbf{Set}, we should think of A(U) as the set of local sections of some abstract topological space (which we hope to be |A|) defined over U. Under this perspective, an inclusion V\subseteq U of open subsets induces a map A(U)\to A(V) which we think of as restricting a section over U to the subset V.

So how do we construct the corresponding space A? We need each s\in A(U) to be a local section of some kind, so start by taking a copy \{s\}\times U of the open U for every s, with the inclusion \{s\}\times U\to X. This ensures that there is a canonical choice for a local section of \bigcup_{\sigma\in A(U)}\{s\}\times U\to X for each \sigma\in A(U)—namely, the map U\to\{s\}\times U. The challenge is to now make sure that these are the only sections, so we have to start gluing these individual spaces together in an appropriate way for all opens U\subseteq X.

For an inclusion V\subseteq U, we need to make our interpretation of A(U)\to A(V) as “restricting local sections” literal. For a local section s\in A(U), write s|_V for its “restriction” to V, then we have to realise \{s|_V\}\times V as a subset of \{s\}\times U. We formalise this identification by taking the pushout of the inclusion \bigcup_{s\in A(U)}\{s\}\times V \hookrightarrow\bigcup_{s\in A(U)}\{s\}\times U along the map \bigcup_{s\in A(U)}\{s\}\times V \to \bigcup_{t\in A(V)}\{t\}\times V that sends \{s\}\times V\to\{s|_V\}\times V. In fact, performing this pushout simultaneously over all inclusions V\subseteq U is precisely what it means to take the coend |A| = \int^{U\subseteq X}\bigcup_{s\in A(U)}\{s\}\times U.

As one might expect (from all of my buildup about talking about sheaves), this construction of |A| fails to realise A as the presheaf of local sections for a space in general. For any open set U\subseteq X, there is a canonical mapping A(U)\to \Gamma_{|A|/X}(U) which sends s to the canonical local section U=\{s\}\times U\to|A|, but this is not a bijection in general. In fact, it may not even be injective.

  • For genuine local sections \sigma,\tau: U\to |A|, suppose that U = \bigcup_{i\in I}U_i is a cover of open sets such that \sigma|_{U_i}=\tau|_{U_i} for every i\in I. As these are genuine functions, this necessarily implies \sigma=\tau. Therefore, for the map A(U)\to \Gamma_{|A|/X}(U) to be injective, we need the same to be true for s,t\in A(U) when restricted to open covers.
  • Likewise, for genuine functions, it is clear that if U = \bigcup_{i\in I}U_i is a cover of opens, and we have functions \sigma_i:U_i\to |A| that are compatible in the sense that \sigma_i|_{U_i\cap U_j} = \sigma_j|_{U_i\cap U_j} for all i,j\in I, then we have a well-defined function \sigma:U\to |A| such that \sigma|_{U_i}=\sigma_i. Thererfore, for the map A(U)\to \Gamma_{|A|/X}(U) to be surjective, we need to ensure the same is true when given compatible sections s_i\in A(U_i) for i\in I.

These turn out to be sufficient for A\Rightarrow \Gamma_{|A|/X} to be a natural isomorphism, and any presheaf A satisfying the above conditions is then called a sheaf. Therefore, on the left hand side, we find that Lemma 4 gives us the category \mathbf{Sh}(X) = \mathbf{PSh}(\mathbf{Op}(X))^\natural of sheaves on X. In fact, notice how \Gamma_{Y/X} is always a sheaf (aptly called the sheaf of local sections of Y over X). Therefore, the adjunction unit actually defines the sheafification A\mapsto \Gamma_{|A|/X} of any presheaf A, which is left adjoint to the canonical inclusion of sheaves as presheaves.

What about in the other direction? When is a space Y\to X homeomorphic to |\Gamma_{Y/X}|? We have a canonical map |\Gamma_{Y/X}|\to Y which is induced by sending each \{\sigma\}\times U to Y through the given local section \sigma. Suppose this map is a homeomorphism. For any point (\sigma,u)\in |\Gamma_{Y/X}|, we can find a sufficiently small neighbourhood U such that this map |\Gamma_{Y/X}|\to Y restricts to \sigma|_U. If this map is a homeomorphism, then so is \sigma|_U, and so we have a local inverse p_U:\sigma(U)\to U\subseteq X. Since everything lies over X, this forces p_U to be the restriction of the map Y\to X to \sigma(U). Since homeomorphisms are bijective, this implies that Y\to X is a local homeomorphism. In French, such a space is called an espace étalé (meaning “spread-out space”), and we can see that any espace étalé is homeomorphic to the nerve of its sheaf of local sections. Therefore, we find an actually nontrivial incarnation of Lemma 4:

Summary: The canonical inclusion \mathbf{Op}(X)\to(\mathbf{Top}\downarrow X) for any topological space X induces—by the nerve-realisation adjunction and Lemma 4—an equivalence of categories \mathbf{Sh}(X)\simeq\mathbf{\acute Et}(X) between the category of sheaves on X and the category of espaces étalés over X.

In principle a similar argument should work for all nerve-realisation adjunctions. However, things might get hairy if your shape category S is not a poset. Even then, we used a lot of facts about topology to get a nice characterisation of both \mathbf{PSh}(\mathcal S)^\natural and \mathcal{C}^\natural… How then do we generalise this construction?