The proof is long, but it demands no ingenuity. At each step there is essentially one thing that can
be written down, and writing it down is the whole task. Understanding every term in the statement is
enough to reconstruct the argument unaided. We build the isomorphism for each fixed pair \((A, X)\)
first, then verify that the construction is natural in both variables.
Fix \(A \in \mathscr{A}\) and a presheaf \(X\). We must produce a bijection
\[
[\mathscr{A}^{\mathrm{op}}, \mathbf{Set}](H_A, X) \rightleftarrows X(A)
\]
and exhibit the two directions as mutually inverse. Write \(\widehat{(\ )}\) for the forward map,
carrying a natural transformation to an element of \(X(A)\), and \(\widetilde{(\ )}\) for the
backward map, carrying an element of \(X(A)\) to a natural transformation. Four things are then
required: define \(\widehat{(\ )}\), define \(\widetilde{(\ )}\), and show that each composite
\(\widehat{\widetilde{(\ )}}\) and \(\widetilde{\widehat{(\ )}}\) is the identity.
Proof.
The forward map.
Given a natural transformation \(\alpha : H_A \to X\), there is only one element of \(X(A)\) it
can reasonably be sent to. The component of \(\alpha\) at \(A\) is a function
\(\alpha_A : H_A(A) = \mathscr{A}(A, A) \to X(A)\), and the domain contains a distinguished
element, the identity \(1_A\). Define
\[
\widehat{\alpha} = \alpha_A(1_A) \in X(A) .
\]
There is no other element canonically available, which is the first sign that this map is
forced.
The backward map.
Conversely, take an element \(x \in X(A)\). We must build from it a natural transformation
\(\widetilde{x} : H_A \to X\), that is, for each object \(B \in \mathscr{A}\) a function
\[
\widetilde{x}_B : H_A(B) = \mathscr{A}(B, A) \to X(B) .
\]
Again there is only one sensible definition. An element of \(\mathscr{A}(B, A)\) is a map
\(f : B \to A\). Applying the presheaf \(X\) to it gives a function \(X(f) : X(A) \to X(B)\), into
which the element \(x\) may be fed. Set
\[
\widetilde{x}_B(f) = \big(X(f)\big)(x) \in X(B) .
\]
This is well posed because \(X(f)\) maps \(X(A)\) to \(X(B)\) and \(x\) lies in \(X(A)\).
Naturality of \(\widetilde{x}\).
For the family \(\widetilde{x} = (\widetilde{x}_B)_{B \in \mathscr{A}}\) to be a
natural transformation,
each map \(g : B' \to B\) in \(\mathscr{A}\) must make the square
\[
\begin{array}{ccc}
\mathscr{A}(B, A) & \xrightarrow{-\circ\, g} & \mathscr{A}(B', A) \\[4pt]
{\scriptstyle \widetilde{x}_B}\big\downarrow & & \big\downarrow{\scriptstyle \widetilde{x}_{B'}} \\[4pt]
X(B) & \xrightarrow{X(g)} & X(B')
\end{array}
\]
commute, where the top arrow is the action of \(H_A\) on \(g\), namely pre-composition by \(g\),
and the bottom is \(X(g)\). Take \(f \in \mathscr{A}(B, A)\). Down-then-across and
across-then-down send it, respectively, to
\[
\begin{align*}
\big(X(g)\big)\big(\widetilde{x}_B(f)\big) &= \big(X(g)\big)\big(\big(X(f)\big)(x)\big) , \\\\
\widetilde{x}_{B'}(f \circ g) &= \big(X(f \circ g)\big)(x) .
\end{align*}
\]
The presheaf \(X\) is contravariant, so it reverses the order of composition,
\[
X(f \circ g) = X(g) \circ X(f) ,
\]
and applying both sides to \(x\) shows the two paths agree. The square commutes for every \(g\),
so \(\widetilde{x}\) is a genuine natural transformation \(H_A \to X\).
The forward map undoes the backward map.
Starting from an element \(x \in X(A)\), form \(\widetilde{x}\) and then evaluate it by the
forward rule. By definition \(\widehat{\widetilde{x}} = \widetilde{x}_A(1_A)\), and the backward
construction gives \(\widetilde{x}_A(1_A) = \big(X(1_A)\big)(x)\). A presheaf preserves
identities, so \(X(1_A)\) is the identity function on \(X(A)\), and therefore
\[
\widehat{\widetilde{x}} = \big(X(1_A)\big)(x) = 1_{X(A)}(x) = x .
\]
The round trip from \(X(A)\) and back is the identity.
The backward map undoes the forward map.
Starting now from a natural transformation \(\alpha : H_A \to X\), we must show that rebuilding a
transformation from its element returns \(\alpha\) itself, that is,
\(\widetilde{\widehat{\alpha}} = \alpha\). Two natural transformations agree exactly when all
their components agree, so it suffices to prove
\(\big(\widetilde{\widehat{\alpha}}\big)_B = \alpha_B\) for every \(B \in \mathscr{A}\). Both
sides are functions \(H_A(B) = \mathscr{A}(B, A) \to X(B)\), and two functions agree when they
agree on each element of the domain, so it is enough to verify
\[
\big(\widetilde{\widehat{\alpha}}\big)_B(f) = \alpha_B(f)
\quad \text{for all } f : B \to A .
\]
Unwinding the left-hand side by the two definitions, \(\widehat{\alpha} = \alpha_A(1_A)\) and the
backward construction give
\[
\begin{align*}
\big(\widetilde{\widehat{\alpha}}\big)_B(f) &= \big(X(f)\big)(\widehat{\alpha}) \\\\
&= \big(X(f)\big)\big(\alpha_A(1_A)\big) ,
\end{align*}
\]
so the whole matter reduces to the single identity
\[
\big(X(f)\big)\big(\alpha_A(1_A)\big) = \alpha_B(f) .
\]
Here naturality of \(\alpha\) is the only tool available, and it is exactly enough. The map
\(f : B \to A\) acts on the representable by pre-composition, \(H_A(f) = - \circ f\), and the
naturality square of \(\alpha\) at \(f\),
\[
\begin{array}{ccc}
\mathscr{A}(A, A) & \xrightarrow{-\circ\, f} & \mathscr{A}(B, A) \\[4pt]
{\scriptstyle \alpha_A}\big\downarrow & & \big\downarrow{\scriptstyle \alpha_B} \\[4pt]
X(A) & \xrightarrow{X(f)} & X(B)
\end{array}
\]
commutes. Tracing the identity \(1_A \in \mathscr{A}(A, A)\) around it gives, along one path,
\(\big(X(f)\big)\big(\alpha_A(1_A)\big)\), and along the other,
\(\alpha_B(1_A \circ f) = \alpha_B(f)\). The two are therefore equal, which is the required
identity. Hence \(\widetilde{\widehat{\alpha}} = \alpha\), and the forward and backward maps are
mutually inverse. The bijection \([\mathscr{A}^{\mathrm{op}}, \mathbf{Set}](H_A, X) \cong X(A)\)
is established for each fixed pair \((A, X)\).
Naturality in \(X\).
It remains to show the bijection is natural in both variables. We may economize twice. First, for
a pair of mutually inverse families it is enough to prove that one of them is natural. A natural
transformation whose components are all invertible is a
natural isomorphism,
and its inverse is then natural by definition, so we check only \(\widehat{(\ )}\). Second, a
construction in two variables is natural in the pair precisely when it is natural in each variable
separately, the other held fixed. Every map \((f, \theta)\) of the
product category
factors as \((1, \theta) \circ (f, 1)\), and naturality squares paste along this factorization, so
we check the two variables singly.
Fix \(A\) and let \(\theta : X \to X'\) be a map of presheaves. Naturality in \(X\) asks that the
square
\[
\begin{array}{ccc}
[\mathscr{A}^{\mathrm{op}}, \mathbf{Set}](H_A, X) & \xrightarrow{\theta \circ -} & [\mathscr{A}^{\mathrm{op}}, \mathbf{Set}](H_A, X') \\[4pt]
{\scriptstyle \widehat{(\ )}}\big\downarrow & & \big\downarrow{\scriptstyle \widehat{(\ )}} \\[4pt]
X(A) & \xrightarrow{\theta_A} & X'(A)
\end{array}
\]
commute, the top arrow being post-composition with \(\theta\) and the bottom the component
\(\theta_A\). For \(\alpha : H_A \to X\), down-then-across yields \(\theta_A(\widehat{\alpha}) =
\theta_A\big(\alpha_A(1_A)\big)\), while across-then-down yields
\(\widehat{\theta \circ \alpha} = (\theta \circ \alpha)_A(1_A)\). By the definition of composition
of natural transformations, \((\theta \circ \alpha)_A = \theta_A \circ \alpha_A\), so the two
results coincide and the square commutes.
Naturality in \(A\).
Fix \(X\) and let \(f : B \to A\) be a map in \(\mathscr{A}\). The
Yoneda embedding
carries \(f\) to a map of presheaves \(H_f : H_B \to H_A\), and composing with it sends a natural
transformation \(H_A \to X\) to one \(H_B \to X\), the operation \(- \circ H_f\). On the value
side, \(X(f)\) carries \(X(A)\) to \(X(B)\). Naturality in \(A\) asks that
\[
\begin{array}{ccc}
[\mathscr{A}^{\mathrm{op}}, \mathbf{Set}](H_A, X) & \xrightarrow{-\circ\, H_f} & [\mathscr{A}^{\mathrm{op}}, \mathbf{Set}](H_B, X) \\[4pt]
{\scriptstyle \widehat{(\ )}}\big\downarrow & & \big\downarrow{\scriptstyle \widehat{(\ )}} \\[4pt]
X(A) & \xrightarrow{X(f)} & X(B)
\end{array}
\]
commute. For \(\alpha : H_A \to X\), the down-then-across path gives
\(\big(X(f)\big)\big(\widehat{\alpha}\big) = \big(X(f)\big)\big(\alpha_A(1_A)\big)\), which by the
identity already proved equals \(\alpha_B(f)\). The across-then-down path gives
\(\widehat{\alpha \circ H_f} = (\alpha \circ H_f)_B(1_B)\). The component of \(H_f\) at \(B\)
sends \(1_B\) to \(f \circ 1_B = f\), so this path also gives \(\alpha_B(f)\). The square
therefore commutes, and the bijection is natural in \(A\). Naturality in both variables is thus
secured, completing the proof.
It is worth pausing on the heart of the argument. The proof that \(\widetilde{\widehat{\alpha}} = \alpha\)
showed that the value \(\alpha_A(1_A)\), through the single equation
\(\big(X(f)\big)\big(\alpha_A(1_A)\big) = \alpha_B(f)\), already fixes the value of every component
\(\alpha_B\) on every map \(f : B \to A\). Nothing about \(\alpha\) is left free once its action on the
identity is known. In a phrase:
This one sentence is the whole of the Yoneda lemma in miniature. The bijection does not merely count
the natural transformations and the elements of \(X(A)\) and find the totals equal. It identifies
each transformation with the one element it produces at the identity. That element may be chosen
freely, and it reconstructs the transformation uniquely. The elaborate compatibility encoded in a
natural transformation out of a representable is, in the end, no constraint at all beyond the choice
of a single point.