Universal Properties II - Commutative diagrams, cones and limits

Many of our inspiring examples of universal properties can be described by the following basic situation:

An intuitive way to visualize arrows "to a diagram"

This first step is not strictly necessary but it can definitely help simplify our mental picture. Visually imagine a commutative diagram in a category C as simply a constellation of dots (the objects) and arrows:

We can picture this as existing in some ambient space, even though this is entirely metaphorical. Let's now imagine the diagram has been drawn (or exists) on a horizontal glass plane. We can then think of other objects cC as dots floating above this plane. Now imagine we had arrows connecting an object c to every object in the diagram. Visually, this would look like a cone (of light, say) with vertex at c and rays shooting down from c to every object in the diagram.

Assuming this picture we've drawn represents a commutative diagram in C, this is what we mean when we say we have arrows from c to the original diagram. It is also because of this picture that we often describe such an object (with a family of maps) as a cone to the diagram.

Of course, we have the dual notion of a cone from the diagram.

For some examples of cones (both to and from diagrams), check out our collection of inspiring examples.

Formalizing the notion of "commutative diagram"

How do we formally encode the concept of a commutative diagram in a category, without using the clunky phrasing "a collection of objects in the category together with certain arrows, such that all possible compositions of arrows in that collection that have the same domain and codomain agree"? The answer: we use a "helper" category (sometimes called a "diagram category") and a functor from that category to our category.

The general definition is as follows:

Definition of a diagram of shape J

Let C and J be categories. A diagram in C of shape J is a functor F:JC, i.e., an object of the functor category CJ.

Observe that this short definition really does encode the idea of a diagram in C of "shape" J. If we visualize J as some dots connected by some arrows, then a functor F:JC assigns to each dot some object of C, and to each arrow between those dots some arrow in C. The commutativity of the resulting diagram is encoded in the fact that J is a category and F is a functor.

This is nothing new!

In the definition above, there are no conditions on the categories J and C, nor the functor F:JC between them. Everything we say below can apply equally to any functor to C. Here we are simply considering examples of functors that correspond to diagrams (in our favorite category) of particular interest.

Examples of diagrams of various shapes

The empty diagram

Suppose J is the empty category, usually denoted 0. For any category C, there is a unique functor 0C, namely the empty functor[1]. This functor corresponds to the "empty diagram" in C.

The one-object category

If J is the category 1 (with a single object and only the identity arrow), then there is a bijection between diagrams in C of shape 1 and the objects of C.

The two-object, one-arrow category

If J is the category 2 (with two objects and a single non-identity arrow between them), then there is a bijection between between diagrams in C of shape 2 and arrows in C. Indeed, the object function of a functor F:2C corresponds to a choice of two objects in C, and the arrow function corresponds to a choice of arrow in C between those objects.

Two arrows with a common codomain

Suppose J is the category with three objects and two nonidentity arrows with common codomain, as illustrated below:

Each functor F:JC corresponds to a diagram in C of the form

This functor category is useful when studying pullbacks and pushforwards.

Formalizing cones to diagrams

Now that we have a formal way to define a diagram of a given shape in our favorite category, we can repackage the notion of a cone to that diagram. We first observe that any single object c in C can be "turned into" a diagram in C of shape J, using a very simple functor.

Definition of the diagonal functor Δ:CCJ

Suppose C and J are categories. To each object cC we can associate the constant functor Δc, i.e., the functor that has value c at each object jJ and value 1c at each arrow of J.

If f:cc is an arrow in C, then Δf:ΔcΔc is the natural transformation that has the same value f at each object jJ.

These functions together define a functor Δ:CCJ, called the diagonal functor.

This sounds like a mouthful, but it simply boils down to labeling a diagram of "shape" J with the object c at every dot, and the identity arrow 1c on every arrow.

Example of a constant diagram

Suppose J is the category 3, shown below:

For each cC we then have the constant diagram of shape J, defined by the constant functor Δc:3C:

When f:cc is an arrow in C, we can "connect" two such constant diagrams by simply connecting the corresponding dots everywhere with the arrow f:cc:

This connects the image of Δc to the image of Δc, which is exactly the info needed to define a natural transformation ΔcΔc.

Cones to/from diagrams

We can now officially define a cone from an object c to a diagram of shape J in C.

Definition of cone to/from a diagram

Suppose C and J are categories, cC is an object of C and FCJ is a diagram in C of shape J. A cone from c to F is an arrow τ in CJ from Δc to F, i.e., a natural transformation τ:ΔcF.

Similarly, a cone from F to c is an arrow τ in CJ from F to Δc, i.e., a natural transformation τ:FΔc.

In other words, a cone from c to F consists of an arrow τj:cF(j) for every jJ, satisfying the usual naturality conditions. In this case, that means for every arrow f:jj in J we have a commutative diagram

Observe that if we merge the two copies of c (connected by the identity arrow), we can redraw the above diagram to look a lot more like the cone we were expecting:

Limits (and colimits) are universal cones

At last we can formalize the notion of a single object rC "representing" (or "encoding") all of the information in a given commutative diagram in C. In terms of the language we've now established, we are really looking for a cone to the diagram through which all other cones uniquely factor. To be more precise, we define the following:

Definition of the limit of a diagram

Suppose C and J are categories and FCJ is a diagram in C of shape J. A limit of F is a cone ν:ΔrF through which all others cones to F uniquely factor. The object r of the limit cone is called the limit object of F and is usually written r=LimF (or sometimes limF).

Dually, a colimit of F is a cone ν:FΔr through which all others cones from F uniquely factor. The object r of the colimit cone is called the colimit object of F and is usually written r=ColimF (or sometimes limF).

Note that we are not claiming that limits and colimits always exist. We'll delay that question until the distant future and instead focus on concrete examples.

Examples of limits and colimits

The empty diagram

Recall that the empty diagram in a category C corresponds to the empty functor 0C. What is a cone to/from the empty diagram? It's simply an object cC. A universal cone to the empty diagram is then an object through which all other objects uniquely factor, i.e., an object tC such that for every cC there is a unique arrow ct. Such an object t is called a terminal object of the category C.

Dually, a universal cone from the empty diagram is an object iC such that for every object cC there is a unique arrow ic. Such an object i is called an initial object of the category C.

So, a limit of the empty diagram is a terminal object, and a colimit of the empty diagram is an initial object.

The one-object, no-arrows diagram

Recall that functors 1C correspond to objects of C, and hence to to single-object diagrams (with no nonidentity arrows). Convince yourself that both the limit and colimit of such a one-object diagram is simply that object itself (with the identity arrow to/from that object).

The two-object, no-arrows diagram

Let J be a category with exactly two objects and no non-identity arrows. Each functor F:JC then corresponds to a choice of two objects c1,c2C. A limit of this two-object diagram is then a universal cone to the two objects:

Universality means that any other such cone factors uniquely through this one:


When this limit exists, the limit object is usually called the product of c1 and c2, and is denoted c1×c2.

Under Construction

This section is currently under construction. More examples will be added soon, including:

  • products and coproducts
  • powers and copowers
  • pullbacks and pushforwards
  • equalizers and coequalizers
  • kernels and cokernels

Suggested next note

Universal Properties III - Yoneda's Lemma


  1. Observe that in our functor category notation, the functor category C0 is equivalent to the one-object category, 1. ↩︎