---
title: Opposite, Product, Slice, and Comma Categories
module: Universal Properties and Basic Constructions
moduleNumber: 2
lessonNumber: 3
order: 203
summary: >
  Categories are themselves mathematical structures, and the standard
  algebraic constructions apply: opposites, products, subcategories, slices,
  and the comma category that subsumes them. The opposite category yields the
  duality principle, halving the subject's proofs; slice and comma categories
  repackage every universal property as an initial or terminal object.
topics: [Universal Properties and Basic Constructions]
sources:
  - book: Barr & Wells
    ref: "Ch. 2 §2.6 — Constructions on categories: subcategories, products, duals, slices"
  - book: Simmons
    ref: "Ch. 2 §2.8 — Using the opposite category"
  - book: Leinster
    ref: "§2.3 — Adjunctions via initial objects: comma categories, slices as comma categories"
draft: false
---

A category is itself an algebraic structure — a two-sorted one, with objects
and arrows subject to composition laws — so the standard moves of algebra
apply to categories themselves: substructures, products, a formal dual, and
quotient-like constructions.[^bw-26] The opposite category turns the left/right
symmetry between products and coproducts into the duality principle: every
theorem yields a dual theorem with no further proof. The comma category gives
universal properties a normal form: every "for all $X$, there exists a unique
arrow" statement becomes the assertion that a certain auxiliary category has
an initial or terminal object.

## The opposite category

> **Definition (Opposite category).** The **opposite** (or **dual**)
> $\mathscr{C}^{\mathrm{op}}$ of a category $\mathscr{C}$ has the same
> objects and the same arrows as $\mathscr{C}$, with source and target
> exchanged: if $f : A \to B$ in $\mathscr{C}$, then $f : B \to A$ in
> $\mathscr{C}^{\mathrm{op}}$. Composition reverses order: if $h = g \circ f$
> in $\mathscr{C}$, then $h = f \circ g$ in $\mathscr{C}^{\mathrm{op}}$.

Identities are unchanged, and the category axioms for
$\mathscr{C}^{\mathrm{op}}$ follow directly from those for $\mathscr{C}$;
also $(\mathscr{C}^{\mathrm{op}})^{\mathrm{op}} = \mathscr{C}$.[^bw-dual]

$$
% caption: A composable pair and its composite in a category (left), and the
% same three arrows in the opposite category (right): objects unchanged, every
% arrow reversed, the composite of $g$ after $f$ becoming the composite of $f$
% after $g$.
\begin{tikzpicture}[>=stealth, font=\footnotesize,
  ob/.style={draw, minimum width=9mm, minimum height=8mm, font=\footnotesize}]
  \definecolor{acc}{HTML}{4A6FA5}
  \node[ob] (A) at (0,0) {$A$};
  \node[ob] (B) at (2.4,1.7) {$B$};
  \node[ob] (C) at (4.8,0) {$C$};
  \draw[->, acc] (A) -- (B) node[midway, above left, font=\scriptsize] {$f$};
  \draw[->, acc] (B) -- (C) node[midway, above right, font=\scriptsize] {$g$};
  \draw[->, black] (A) -- (C) node[midway, below, font=\scriptsize] {$g$ after $f$};
  \node[anchor=north, font=\scriptsize] at (2.4,-0.9) {in the category};
  \begin{scope}[xshift=8.2cm]
    \node[ob] (A2) at (0,0) {$A$};
    \node[ob] (B2) at (2.4,1.7) {$B$};
    \node[ob] (C2) at (4.8,0) {$C$};
    \draw[->, acc] (B2) -- (A2) node[midway, above left, font=\scriptsize] {$f$};
    \draw[->, acc] (C2) -- (B2) node[midway, above right, font=\scriptsize] {$g$};
    \draw[->, black] (C2) -- (A2) node[midway, below, font=\scriptsize] {$f$ after $g$};
    \node[anchor=north, font=\scriptsize] at (2.4,-0.9) {in the opposite};
  \end{scope}
\end{tikzpicture}
$$

Nothing is constructed here in any material sense — the arrows of
$\mathscr{C}^{\mathrm{op}}$ _are_ the arrows of $\mathscr{C}$, relabelled. In
$\mathbf{Set}^{\mathrm{op}}$, a function $v : A \to \{0,1\}$ counts as an
arrow $\{0,1\} \to A$, and it is _not_ a function from $\{0,1\}$ to $A$; it
is a formal reversal and nothing more.[^bw-formal] Still, the opposite of a
familiar category is sometimes equivalent to another familiar category
(finite Boolean algebras and finite sets, for one), and such concrete
dualities are theorems, not formalities.

Monoids and posets carry the reversal concretely.

- **Monoids.** A [monoid seen as a one-object
  category](/category-theory/foundations/examples-of-categories) $M$ has
  opposite the category of the monoid $M^{\mathrm{op}}$, with multiplication
  read in reverse order: $x \cdot_{\mathrm{op}} y = y x$. A commutative
  monoid is its own opposite.
- **Posets.** The opposite of the category of a poset $(P, \le)$ is the
  category of $(P, \ge)$ — the same set under the reversed order, e.g.
  $(\mathbb{Z}, \le)^{\mathrm{op}} = (\mathbb{Z}, \ge)$.

> **Worked example (Reversing a three-element chain).** Let $\mathscr{C}$ be
> the poset $a \le b \le c$ as a category: besides identities, the arrows are
> $a \to b$, $b \to c$, and their composite $a \to c$. In
> $\mathscr{C}^{\mathrm{op}}$ these three arrows point the other way —
> $b \to a$, $c \to b$, $c \to a$ — so $\mathscr{C}^{\mathrm{op}}$ is the poset
> $c \le b \le a$. The composite $a \to c$, which was $(b \to c) \circ
> (a \to b)$, becomes $c \to a = (b \to a) \circ (c \to b)$: objects unchanged,
> order of composition reversed. The initial object $a$ of $\mathscr{C}$ (its
> least element) is the terminal object of $\mathscr{C}^{\mathrm{op}}$, an
> instance of the mono/epi–initial/terminal exchanges tabulated below.

### The duality principle

Every categorical concept has a **dual**: the concept obtained by
interpreting the definition in the opposite category. The pairs assembled so
far:[^simmons-28]

| Concept in $\mathscr{C}$ | Same data, read in $\mathscr{C}^{\mathrm{op}}$ |
| --- | --- |
| monomorphism | epimorphism |
| section (split mono) | retraction (split epi) |
| initial object | terminal object |
| product, projections | coproduct, injections |
| equalizer | coequalizer |
| pullback | pushout |
| limit | colimit |

The principle: **a theorem proved for all categories is also a theorem about
all opposite categories — which is again all categories — so its dual is a
theorem too, with no further proof.** For example, having shown that any two
initial objects are uniquely isomorphic, the corresponding statement for
terminal objects is immediate: a terminal object of $\mathscr{C}$ is an
initial object of $\mathscr{C}^{\mathrm{op}}$, and the isomorphism produced
there is an isomorphism in $\mathscr{C}$ (isomorphisms are self-dual). The
same stroke disposes of the coproduct half of every
[product proof](/category-theory/universal-properties/products-and-coproducts).
Simmons' accounting: six pairs of gadgets, half the work.[^simmons-halve]

Duality also explains the systematic naming: sometimes the dual concept takes
a "co-" prefix (limit/colimit, equalizer/coequalizer, cone/cocone), sometimes
left/right (adjoints), and sometimes the names are irregular
(initial/terminal, pullback/pushout, mono/epi).

## Product categories

> **Definition (Product category).** For categories $\mathscr{C}$ and
> $\mathscr{D}$, the **product category** $\mathscr{C} \times \mathscr{D}$
> has as objects the pairs $(C, D)$ with $C$ in $\mathscr{C}$, $D$ in
> $\mathscr{D}$; an arrow $(C, D) \to (C_1, D_1)$ is a pair $(f, g)$ of an
> arrow $f : C \to C_1$ in $\mathscr{C}$ and $g : D \to D_1$ in
> $\mathscr{D}$. Composition and identities are componentwise:
>
> $$
> (f_1, g_1) \circ (f, g) = (f_1 \circ f, \; g_1 \circ g),
> \qquad
> \mathrm{id}_{(C,D)} = (\mathrm{id}_C, \mathrm{id}_D).
> $$

This is the direct product of algebra transplanted to categories, and it is
the categorical product in the (large) category $\mathbf{Cat}$ of categories
and functors. The same caution as for opposites applies: an arrow of
$\mathbf{Set} \times \mathbf{Set}$ is an ordered pair of functions, not a
function of pairs.[^bw-prod] The construction's main employment is
bookkeeping for multivariable functors: the hom-functor of a [locally
small](/category-theory/foundations/size-and-set-theory) category is a
functor

$$
\mathscr{C}(-, -) : \mathscr{C}^{\mathrm{op}} \times \mathscr{C} \longrightarrow \mathbf{Set},
$$

contravariant in its first variable and covariant in its second — the
opposite and the product working together, and the setting for
[representables](/category-theory/representables-yoneda/representable-functors).

## Subcategories

> **Definition (Subcategory).** A **subcategory** $\mathscr{D}$ of
> $\mathscr{C}$ consists of a subcollection of the objects and a
> subcollection of the arrows of $\mathscr{C}$ such that: sources and
> targets of chosen arrows are chosen objects; the identity of every chosen
> object is chosen; and composites (in $\mathscr{C}$) of chosen arrows are
> chosen. $\mathscr{D}$ is **full** if
> $\mathscr{D}(A, B) = \mathscr{C}(A, B)$ for all chosen objects $A, B$, and
> **wide** if it contains all the objects of $\mathscr{C}$.

Examples calibrate the two adjectives:[^bw-sub]

- $\mathbf{Fin}$ (finite sets, all functions) is a **full** subcategory of
  $\mathbf{Set}$: restricting the objects loses no arrows between the
  survivors.
- $\mathbf{Set}$ is a **wide** subcategory of $\mathbf{Pfn}$ (sets and
  partial functions): same objects, fewer arrows.
- $\mathbf{Mon}$ inside the category of semigroups is neither: fewer objects
  (only monoids) and fewer arrows (only identity-preserving homomorphisms).
- $\mathbf{Ab}$ is a full subcategory of $\mathbf{Grp}$: a homomorphism
  between abelian groups is just a homomorphism.

Requiring identities explicitly is not redundant — a subcollection can be
closed under composition and contain, for a chosen object, an idempotent
arrow acting as a local unit without containing the actual identity.

## Slice categories

The next construction has no exact analogue in classical algebra; it changes
the objects rather than trimming or pairing them.

> **Definition (Slice category).** For a category $\mathscr{C}$ and an
> object $A$, the **slice category** $\mathscr{C}/A$ has:
>
> - **objects**: the arrows of $\mathscr{C}$ with target $A$; an object is a
>   pair $(X, h)$ with $h : X \to A$;
> - **arrows** $(X, h) \to (X_1, h_1)$: arrows $f : X \to X_1$ of
>   $\mathscr{C}$ with $h_1 \circ f = h$;
> - composition inherited from $\mathscr{C}$.

An object of $\mathscr{C}/A$ is "an object of $\mathscr{C}$ equipped with a
map to $A$", and an arrow is a map of $\mathscr{C}$ that respects the
equipment — a commuting triangle over $A$. That composition works requires a
one-line check: if $h_1 \circ f = h$ and $h_2 \circ g = h_1$ then
$h_2 \circ (g \circ f) = (h_2 \circ g) \circ f = h_1 \circ f = h$.[^bw-slice]

$$
% caption: An arrow of the slice category over $A$: a commuting triangle. The
% objects are themselves arrows $h$ and $k$ into $A$; the slice arrow is an
% arrow $f$ upstairs with $k$ after $f$ equal to $h$.
\begin{tikzpicture}[>=stealth, font=\footnotesize,
  ob/.style={draw, minimum width=10mm, minimum height=8mm, font=\footnotesize}]
  \definecolor{acc}{HTML}{4A6FA5}
  \node[ob] (X) at (0,2.2) {$X$};
  \node[ob] (Y) at (4.4,2.2) {$Y$};
  \node[ob, draw=acc, text=acc, thick] (A) at (2.2,0) {$A$};
  \draw[->, acc, thick] (X) -- (Y) node[midway, above, font=\scriptsize, text=black] {$f$};
  \draw[->, black] (X) -- (A) node[midway, below left, font=\scriptsize] {$h$};
  \draw[->, black] (Y) -- (A) node[midway, below right, font=\scriptsize] {$k$};
  \node[anchor=west, font=\scriptsize] at (5.6,1.1) {slice objects: $h$ and $k$};
  \node[anchor=west, font=\scriptsize] at (5.6,0.5) {slice arrow: $f$ making the triangle commute};
\end{tikzpicture}
$$

One notational hazard: the underlying arrow $f$ does not determine the slice
arrow. The same $f$ can satisfy $h_1 \circ f = h$ and $k_1 \circ f = k$ for
different pairs, giving distinct arrows $(X,h) \to (X_1,h_1)$ and
$(X,k) \to (X_1,k_1)$ of $\mathscr{C}/A$ with the same underlying map.

Dually, the **coslice** $A/\mathscr{C}$ has as objects the arrows _out_ of
$A$ and as arrows the commuting triangles under $A$.

### Slices as indexed families

Slice categories over $\mathbf{Set}$ package indexing. An **$S$-indexed
set** is a set $X$ with a function $\tau : X \to S$; the fiber
$\tau^{-1}(s)$ collects the elements of type $s$, so the single function
$\tau$ carries the same information as the family
$\{\tau^{-1}(s)\}_{s \in S}$. A **typed function** between $S$-indexed sets
is one preserving types — exactly a commuting triangle over $S$. So
$\mathbf{Set}/S$ _is_ the category of $S$-indexed families of sets.[^bw-index]
For example, a graph's objects-and-arrows set $G_0 \cup G_1$ typed by
$\{0, 1\}$ is an object of $\mathbf{Set}/\{0,1\}$. Slices are the categorical
setting for dependent types and for families of structures varying over a
base; slices of presheaf categories recur in the study of
[presheaves](/category-theory/adjoints-limits/presheaf-limits-colimits).

$$
% caption: An object of the slice over $\{0,1\}$ is a set $X$ sorted by $\tau$
% into two fibers, the elements over $0$ and the elements over $1$; a slice
% arrow preserves the fiber of each element.
\begin{tikzpicture}[>=stealth, font=\footnotesize]
  \definecolor{acc}{HTML}{4A6FA5}
  \node (p) at (0,1.9)   {$p$};
  \node (q) at (1.4,1.9) {$q$};
  \node (r) at (2.8,1.9) {$r$};
  \node[acc] (z) at (0.7,0) {$0$};
  \node[acc] (o) at (2.8,0) {$1$};
  \draw[->, black] (p) -- (z);
  \draw[->, black] (r) -- (z);
  \draw[->, black] (q) -- (o);
  \node[anchor=west, font=\scriptsize, align=left] at (3.7,0.95)
    {over $0$: $p$, $r$\\over $1$: $q$};
\end{tikzpicture}
$$

> **Worked example (A slice arrow over $\{0,1\}$).** In $\mathbf{Set}/\{0,1\}$
> take the source $(X, \tau)$ with $X = \{p, q, r\}$, $\tau(p) = \tau(r) = 0$,
> $\tau(q) = 1$, and the target $(Y, \sigma)$ with $Y = \{s, t\}$,
> $\sigma(s) = 0$, $\sigma(t) = 1$. A slice arrow is a function $f : X \to Y$
> with $\sigma \circ f = \tau$, that is, $f$ preserves the type of each
> element. The condition forces $f(p), f(r) \in \sigma^{-1}(0) = \{s\}$ and
> $f(q) \in \sigma^{-1}(1) = \{t\}$, so there is exactly one slice arrow:
> $f(p) = f(r) = s$, $f(q) = t$. Typed functions are functions on the fibers,
> one fiber at a time.

## Comma categories

The comma category subsumes slices, coslices, and more: it is the general
"category of arrows from one functor to another".

> **Definition (Comma category).** Given functors
> $P : \mathscr{A} \to \mathscr{C}$ and $Q : \mathscr{B} \to \mathscr{C}$,
> the **comma category** $(P \Rightarrow Q)$ (also written
> $(P \downarrow Q)$) has:
>
> - **objects**: triples $(A, h, B)$ with $A$ in $\mathscr{A}$, $B$ in
>   $\mathscr{B}$, and $h : P(A) \to Q(B)$ in $\mathscr{C}$;
> - **arrows** $(A, h, B) \to (A_1, h_1, B_1)$: pairs
>   $(f : A \to A_1, \; g : B \to B_1)$ such that
>   $h_1 \circ P(f) = Q(g) \circ h$ in $\mathscr{C}$;
> - componentwise composition and identities.

The arrow condition is a commuting square in $\mathscr{C}$:[^lein-comma]

$$
% caption: An arrow of the comma category: a pair of arrows, one from each
% leg, whose images in the common codomain category close a commuting square
% between the two comma objects $h$ and $h_1$.
\begin{tikzpicture}[>=stealth, font=\footnotesize,
  ob/.style={draw, minimum width=14mm, minimum height=9mm, font=\footnotesize}]
  \definecolor{acc}{HTML}{4A6FA5}
  \node[ob] (PA) at (0,2.4) {$P(A)$};
  \node[ob] (PA1) at (4.6,2.4) {$P(A_1)$};
  \node[ob] (QB) at (0,0) {$Q(B)$};
  \node[ob] (QB1) at (4.6,0) {$Q(B_1)$};
  \draw[->, black] (PA) -- (PA1) node[midway, above, font=\scriptsize] {$P(f)$};
  \draw[->, acc, thick] (PA) -- (QB) node[midway, left, font=\scriptsize, text=acc] {$h$};
  \draw[->, acc, thick] (PA1) -- (QB1) node[midway, right, font=\scriptsize, text=acc] {$h_1$};
  \draw[->, black] (QB) -- (QB1) node[midway, below, font=\scriptsize] {$Q(g)$};
  \node[anchor=west, font=\scriptsize, align=left] at (5.9,1.2)
    {objects: the vertical arrows\\arrows: commuting squares};
\end{tikzpicture}
$$

Special cases recover the constructions above. Recall that a functor from
the one-object, one-arrow category $\mathbb{1}$ into $\mathscr{A}$ is just a
choice of object of $\mathscr{A}$.

- **Slice.** Take $P = \mathrm{id}_{\mathscr{A}}$ (written $1_{\mathscr{A}}$)
  and $Q = A : \mathbb{1} \to \mathscr{A}$ the object $A$. An object of
  $(1_{\mathscr{A}} \Rightarrow A)$ is a pair $(X, h : X \to A)$ — the third
  component lives in $\mathbb{1}$ and carries no information — and the
  squares degenerate to triangles over $A$. So
  $\mathscr{A}/A \cong (1_{\mathscr{A}} \Rightarrow A)$, and dually
  $A/\mathscr{A} \cong (A \Rightarrow 1_{\mathscr{A}})$.[^lein-slice]
- **Arrow category.** Take $P = Q = 1_{\mathscr{A}}$: objects are all
  arrows of $\mathscr{A}$, morphisms are all commuting squares.
- **Arrows from an object to a functor.** For a functor
  $G : \mathscr{B} \to \mathscr{A}$ and an object $A$, the comma category
  $(A \Rightarrow G)$ has objects the pairs
  $(B, \; f : A \to G(B))$ and arrows the maps $q : B \to B_1$ with
  $G(q) \circ f = f_1$. This case underlies the universal-arrow description of
  adjoints below.

### Universal properties as initial objects

The comma category restates any universal property as initiality. Consider the
free vector space $F(S)$ on a set $S$, with its insertion of
basis vectors $\eta_S : S \to U(F(S))$, where
$U : \mathbf{Vect}_k \to \mathbf{Set}$ is the underlying-set functor. Its
universal property says: for every vector space $W$ and function
$f : S \to U(W)$, there is a unique linear map $\bar{f} : F(S) \to W$ with
$U(\bar{f}) \circ \eta_S = f$.

Now read that sentence inside the comma category
$(S \Rightarrow U)$, whose objects are pairs $(W, \; f : S \to U(W))$ — sets
mapping into the underlying set of some vector space. The pair
$(F(S), \eta_S)$ is one such object, and the universal property says
_exactly_ that from it there is a unique arrow to every object
$(W, f)$: the arrow condition $U(\bar{f}) \circ \eta_S = f$ is the comma
category's commuting triangle, and existence-plus-uniqueness of $\bar{f}$ is
initiality.[^lein-initial]

> **Theorem (Universal property = initial object).** The pair
> $(F(S), \eta_S)$ has the universal property of the free vector space on
> $S$ if and only if it is an initial object of the comma category
> $(S \Rightarrow U)$.

> **Worked example (A universal arrow to $U : \mathbf{Grp} \to \mathbf{Set}$).**
> Let $U$ be the forgetful functor and let $A = 1 = \{\ast\}$ be a one-point
> set. The comma category $(1 \Rightarrow U)$ has objects the pairs
> $(G, x)$ with $x \in U(G)$, that is, a group with a chosen element. The pair
> $(\mathbb{Z}, 1)$ — the integers with the generator $1$ — is initial: for
> every $(G, x)$ there is a unique homomorphism $\mathbb{Z} \to G$ sending
> $1 \mapsto x$, namely $n \mapsto x^n$. Instantiate at $(\mathbb{Z}/5, 3)$:
> the unique arrow of the comma category $(\mathbb{Z}, 1) \to (\mathbb{Z}/5, 3)$
> is the homomorphism $n \mapsto 3n \bmod 5$, the only one carrying $1$ to $3$.
> Initiality of $(\mathbb{Z}, 1)$ is another way of saying $\mathbb{Z}$ is
> the free group on one generator.

The pattern is fully general. Any universal property of the form "for every
object equipped with an arrow of a certain type, a unique compatible
factorization exists" asserts that a specified object is initial (or, for
the dual shape, terminal) in a suitable comma category:

| Universal object | Comma category | Position |
| --- | --- | --- |
| terminal object of $\mathscr{C}$ | $\mathscr{C}$ itself | terminal |
| product cone on $(A, B)$ | wedges to the pair | terminal |
| coproduct cocone on $(A, B)$ | wedges from the pair | initial |
| free object $(F(S), \eta_S)$ over $S$ | $(S \Rightarrow U)$ | initial |
| discrete space $(D(S), i)$ over $S$ | $(S \Rightarrow U_{\mathbf{Top}})$ | initial |

Two facts follow immediately from this normal form.

- **One uniqueness theorem.** "Any two initial objects are uniquely
  isomorphic" — proved once by the round-trip argument — now yields the
  essential uniqueness of every universal construction, because each is an
  initial or terminal object somewhere.
- **A definition of universal arrow.** An initial object of
  $(A \Rightarrow G)$ is called a **universal arrow** from $A$ to $G$. A
  functor $G$ admitting one for _every_ $A$ is precisely a functor with a
  left [adjoint](/category-theory/adjunctions/adjunctions-via-universal-arrows),
  and the comma-category formulation is how the
  [adjoint functor theorem](/category-theory/adjoints-limits/adjoint-functor-theorem)
  manufactures adjoints.

## The catalogue

| Construction | Objects | Arrows | Algebra analogue |
| --- | --- | --- | --- |
| subcategory $\mathscr{D} \subseteq \mathscr{C}$ | some of $\mathscr{C}$'s | some of $\mathscr{C}$'s | substructure |
| product $\mathscr{C} \times \mathscr{D}$ | pairs | pairs, componentwise | direct product |
| opposite $\mathscr{C}^{\mathrm{op}}$ | same | reversed | opposite monoid/ring |
| slice $\mathscr{C}/A$ | arrows into $A$ | triangles over $A$ | (none exact) |
| coslice $A/\mathscr{C}$ | arrows out of $A$ | triangles under $A$ | (none exact) |
| comma $(P \Rightarrow Q)$ | arrows $P(A) \to Q(B)$ | commuting squares | (subsumes the two above) |

Hom-functors built from these constructions give the
[representables](/category-theory/representables-yoneda/representable-functors),
and the [Yoneda lemma](/category-theory/representables-yoneda/yoneda-lemma)
converts statements about objects into statements about the presheaves they
represent. The opposite category and the product category are both built into
the type of the hom-functor
$\mathscr{C}^{\mathrm{op}} \times \mathscr{C} \to \mathbf{Set}$.

[^bw-26]: **Barr & Wells**, _Category Theory for Computing Science_, §2.6 — constructions on categories: subcategories, products, duals, slices, free categories, presented as the categorical counterparts of the constructions of abstract algebra.
[^bw-dual]: **Barr & Wells**, §2.6.7 — the dual category, conditions D-1 through D-3; §2.6.8 — opposite monoids and posets.
[^bw-formal]: **Barr & Wells**, §2.6.9 — arrows of product and opposite categories are formal pairs and formal reversals, not functions; the vowel-classifier example.
[^simmons-28]: **Simmons**, _An Introduction to Category Theory_, §2.8 — monic/epic and initial/final exchanged by the opposite category; each gadget of Ch. 2 is dual to its partner.
[^simmons-halve]: **Simmons**, §2.8 — "by using the opposite category we can make precise this left-right symmetry, and halve the work"; only one side of each uniqueness proof was carried out in §§2.2–2.7.
[^bw-prod]: **Barr & Wells**, §2.6.6 — the product of categories; §2.6.9 — its arrows are mere ordered pairs; the product of categories is the product in $\mathbf{Cat}$ (§5.1, Exercise).
[^bw-sub]: **Barr & Wells**, §2.6.1–2.6.5 — subcategories, full and wide, with $\mathbf{Fin} \subseteq \mathbf{Set} \subseteq \mathbf{Pfn}$ and monoids-in-semigroups as the calibrating examples.
[^bw-slice]: **Barr & Wells**, §2.6.10 — slice categories SC-1 through SC-3, with the associativity verification and the warning that a slice arrow is not determined by its underlying arrow.
[^bw-index]: **Barr & Wells**, §2.6.11–2.6.13 — $S$-indexed sets, typed sets, and typed functions; $\mathbf{Set}/S$ as the category of indexed families; the graph example.
[^lein-comma]: **Leinster**, _Basic Category Theory_, Definition 2.3.1 — the comma category $(P \Rightarrow Q)$, objects as triples and arrows as commuting squares.
[^lein-slice]: **Leinster**, Example 2.3.3 — slice and coslice categories as comma categories over the identity and a constant functor.
[^lein-initial]: **Leinster**, §2.3, Example 2.3.4 and the discussion of diagram (2.7) — the free vector space's universal property restated as initiality in the comma category $(S \Rightarrow U)$, the route to adjunctions via initial objects.
