## Limits and Colimits

One of the *big* tools in category theory is the limit of a functor. In fact, depending on the source category, limits give whole families of useful constructions, including (multiple) equalizers, (multiple) products, (multiple) pullbacks, and more we haven’t talked about yet. The dual notion of a colimit similarly generalizes (multiple) coequalizers, (multiple) coproducts, (multiple) pushouts, and so on.

Given a functor the limit of (if it exists) is a couniversal cone on — a terminal object in the comma category . That is, it consists of an object and arrows for each object , and for any other object with arrows there is a unique arrow with for all . We often write to denote the limit of the functor from the category . As usual, limits are unique up to isomorphism.

Dually, the colimit of (if it exists) is a universal cocone on — an initial object in the comma category . It’s given by an object and arrows so that for any other object and arrows there is a unique arrow with for all . We often write to denote the colimit of the functor from the category .

If is a set — a category with only identity arrows — then a functor from to is a collection of objects of , one for each element of . The limit of this functor is the product of these objects, and the colimit is their coproduct.

If consists of two objects with a set of parallel arrows from one to the other, then a functor from to is a collection of parallel morphisms in . The limit of this functor is the equalizer of the collection, and the colimit is their coequalizer.

Check for yourself that limits over the category are pullbacks, while colimits over the category are pushouts.

If the category has an initial object then we have a unique arrow for every object . Now for any functor we see that . Indeed, we can just use for the required arrows, which are compatible with all the other arrows from because is a functor. Any other cone on must have an arrow , and compatibility requires that any other arrow in the cone is the composition . So if has an initial object then limits are trivial.

The interesting case is when does *not* have an initial object. We can add a new object to with a unique arrow to every other object, getting a category which *does* have an initial object. The question is whether a given functor can be extended to a functor . If it can, then the image of the new initial object is the vertex of a cone on . If there is a *couniversal* such extension, that’s the limit of .

Dually, if has a terminal object then . If doesn’t have a terminal object, we can add one to get a category , and colimits tell us when and how we can extend a functor “universally” to a functor .

If there exists a limit in for any functor from a finite category we say that “has finite limits”. If there exists a limit for any functor from a small category we say that is “complete”. The dual conditions are that “has finite colimits” and that is “cocomplete”, respectively.