← Return to all posts

Cauchy completion and profunctors

14th of July, 2019
  1. Bimodules
  2. Profunctors, distributors, bimodules, or whatever
  3. Cauchy completion
  4. Internal categories
  5. References

An idea that came up in a few talks at CT2019 was that of ‘spans whose left leg is a left adjoint’. I managed (luckily) to get a chance to ask Mike Shulman a few questions about this, as well as post in #math.CT:matrix.org. What follows are some things that I learnt (mostly from [BD86]).


A good place to begin is with the definition of a bimodule.


Given rings R and S, we say that an abelian group M is an (R,S)-bimodule if it is a left R-module and a right S-module in a compatible way: we ask that (rm)s=r(ms).

Thinking about this definition a bit (or maybe recalling an algebra class), we see that this is equivalent to asking that M be a right module over R^{\text{op}}\otimes_{\mathbb{Z}}S (or, equivalently, a left module over R\otimes_{\mathbb{Z}}S^{\text{op}}), where R^{\text{op}} is the opposite ring of R, given by just ‘turning the multiplication around’.1


Modulo a bunch of technical conditions on the categories involved,2 a bimodule is a \mathcal{V}-functor (i.e. a functor of \mathcal{V}-enriched categories) \mathcal{C}^{\text{op}}\otimes\mathcal{D}\to\mathcal{V}.

We can recover the previous definition similar to how we can recover the definition of an R-module as an \mathsf{Ab}-enriched functor R^{\text{op}}\to\mathsf{Ab}. Or, taking \mathcal{V}=\mathsf{Vect}, and \mathcal{C}=\mathbb{B}A, \mathcal{D}=\mathbb{B}B, with A and B both vector spaces, we recover the notion of a vector space with a left A-action and a right B-action.

A fundamental example that seems a bit different from this algebraic one, however, arises when we take \mathcal{V}=\mathsf{Set} and \mathcal{C}=\mathcal{D} to be arbitrary (small) categories. Then the hom functor \mathcal{C}(-,-)\colon\mathcal{C}^{\text{op}}\times\mathcal{C}\to\mathsf{Set} is a bimodule. This suggests that we should maybe somehow think of bimodules as generalised hom functors, where the objects can live in a different category.

As a small aside, there is some hot debate about whether to use \mathcal{C}^{\text{op}}\otimes\mathcal{D}\to\mathcal{V} or \mathcal{C}\otimes\mathcal{D}^{\text{op}}\to\mathcal{V}, and although the first seems more natural (in that it corresponds to the way we write hom functors), the second is slightly nicer in that functors \mathcal{C}\to\mathcal{D} give you profunctors by composition with the covariant Yoneda embedding, as opposed to the contravariant one. But the two are formally dual, so it’s really not the biggest of issues.

Profunctors, distributors, bimodules, or whatever

Of course, lots of people have different preferences for names, but a profunctor is (using the convention of Borceux and Dejean) a functor \mathcal{D}^{\text{op}}\times\mathcal{C}\to\mathsf{Set}. People often write such a thing as \mathcal{C}\nrightarrow\mathcal{D}. We can define their compositions via colimits or coends:

Q\circ P=\int^{d\in\mathcal{D}}P(d,-)\otimes Q(-,d)

(although we don’t really care so much about this in this post).

Edit. We talk about this a bit more in Part 3 of the series on Day convolution.


Every functor F\colon\mathcal{C}\to\mathcal{D} gives a profunctor F^*\colon\mathcal{C}\nrightarrow\mathcal{D} by setting

F^*(d,c) = \mathcal{D}(d,Fc),

and F^* has a right adjoint F_*\colon\mathcal{D}\nrightarrow\mathcal{C} given by

F_*(c,d) = \mathcal{D}(Fc,d),

where we define adjunctions of profunctors using the classical notion of natural transformations.

If we write \mathbb{1} to mean the category with one object and one (identity) (endo)morphism then any (small) category \mathcal{C} can be identified with the functor category \mathsf{Fun}(\mathbb{1},\mathcal{C}), and the presheaf category \hat{\mathcal{C}}:=\mathsf{Fun}(\mathcal{C}^{\text{op}},\mathsf{Set}) is just the category \mathsf{Profun}(\mathbb{1},\mathcal{C}). Then the Yoneda embedding is the inclusion


given by F\mapsto F^*.

Recovering functors

Theorem. A profunctor \mathbb{1}\nrightarrow\mathcal{C} is a functor (via Yoneda3) if and only if it admits a right adjoint. More generally, a profunctor \mathcal{A}\nrightarrow\mathcal{C}, for any small category \mathcal{A}, is a functor (via Yoneda) if and only if it admits a right adjoint.

Proof. [Theorem 2, BD86].

We will come back to this fact later.

Cauchy completion

The Cauchy completion of a (small) category \mathcal{C} can be defined in many ways (as described in [BD86]), but we pick the following: the Cauchy completion of \mathcal{C} is the full subcategory \overline{\mathcal{C}} of \hat{\mathcal{C}}:=\mathsf{Fun}(\mathcal{C}^{\text{op}},\mathsf{Set}) spanned by absolutely presentable4 presheaves.

The idea of Cauchy completeness for a category is in some sense meant to mirror that of Cauchy completeness of real numbers: if we think of a metric space as a category enriched over (the poset of) non-negative real numbers, then we recover this analytic notion (see [Example 3, BD86]).

Lemma. A presheaf \mathcal{F}\in\hat{\mathcal{C}} is absolutely presentable if and only if it admits a right adjoint.

Proof. [Propositions 2 and 4, BD86].

Internal categories

Recall that [Theorem 2, BD86] tells us that the profunctors that are functors (via Yoneda) are exactly those that admit right adjoints (which, by [Propositions 2 and 4, BD86], are exactly those (in the case where \mathcal{A}=\mathbb{1}) that are in the Cauchy completion of \mathcal{C}).

Now for what motivated me to write this post: something I saw in Bryce Clarke’s talk Internal lenses as monad morphisms at CT2019.5

Given some category \mathcal{E} with pullbacks, we can define an internal category of \mathcal{E} as a monad in the 2-category \mathsf{Span}(\mathcal{E}), but it is not the case that internal functors are just (colax) morphisms of monads: we need to require that the 1-cell admits a right adjoint (which reduces to asking that the left leg of the corresponding span is an identity/isomorphism).

This is now not so much of a surprising condition, since we’ve already seen that this left-adjoint condition is what ensures that profunctors are actually functors!

What happens then, we may well ask, if we don’t ask for this condition? We recover the idea of a Mealy morphism.6


  1. x\cdot_{R^{\text{op}}}y:=y\cdot_R x.↩︎

  2. To construct \mathcal{C}^{\text{op}} we need V to be braided; to be able to compose bimodules we need cocompleteness of V, with \otimes cocontinuous in both arguments, etc.↩︎

  3. That is, of the form F^* for some functor F\colon\mathcal{C}\to\mathcal{D}.↩︎

  4. That is, preserves all (small) colimits.↩︎

  5. If you prefer more of an article-style thing to slides then take a look at the pre-proceedings from ACT2019.↩︎

  6. Thanks again to Bryce Clarke for answering this question.↩︎