§ Working out why right adjoints preserve limits.
We have L: C -> D
and R: D -> C
adjoints functors,
so we have the condition:
- Hom(L(a): D, b: D) ~= Hom(a: C, R(b): C)
We will also show that Hom(A, -)
preserves limits:
Hom(a, lim (F: J -> C):C) : Set ~= lim ({Hom(a, -) . F}: J -> Set): Set
Hom(a, lim (F: J -> C):C) : Set ~= lim (\j. Hom(a, F(j)): J -> Set): Set
The above statement, fully elaborated with all the types looks as follows:
lim :: (J -> K) -> K
Hom(a: C, {lim (F: J -> C)}:C ): Set ~=
lim (\j. Hom(a, F(j)): J -> Set): Set
Furthermore, we also know from the Yoneda embedding, that x ~= Hom(x, -)
for all x
.
Given these two facts, we can speedily derive that a right adjoint preserves limits:
Hom_C(a:C , R(lim F: J -> D)): Set
= Hom_D(L(a), lim F: J -> D) [Adjunction]
~= {lim (\j. Hom_D(L(a), F(j)): J -> Set}: Set [Hom lim = lim Hom]
~= {lim (\j. Hom_C(a, R(F(j)))): J -> Set}: Set [Adjunction inside lim]
~= Hom_C(a, {\j. R(F(j))}: J -> C): C [lim Hom = Hom lim]
~= Hom_C(a, R . F)
§ Hom(a, -)
preserves limits:
We wish to show that the Hom(a, -)
functor preserves limits. That is:
Hom(a, lim F: J -> C): Set ~= lim(\j. Hom(a, F(j)): J -> Set): Set
Let's start with Hom(a, lim F: J -> C): Set
. An element of this
is a morhism arr: a -> lim F
from a
to the apex
of the limit cone lim F
. We need to translate this into a lim(\j. Hom(a, F(j)): J -> Set): Set
,
which is a family of morphisms from each a
to each { F(j) : j in J}
. This is obtained
by composing the projection maps pi(j): lim F -> F(j)
with arr: a -> lim F
to
get pi(j) . arr : a -> F(j)
which lives in Hom(a, F(j))
. We get the limit by considering
the family of these maps, as the Limit in Set
is just a product with coherence conditions,
and an element of the limit is a tuple/family with coherence conditions.
To go the other way around, suppose we have an element in the limit
lim(\j. Hom(a, F(j)): J -> Set): Set
. This means that we have a family of maps from a
to F(j)
which obeys the coherence conditions. This means that a
is the apex of some valid cone. But we
know that lim F
is the universal cone, thus the a
cone must factor through lim F
. This gives
us a factoring map factor: a -> lim F
. The map factor
lives in Hom(a, lim F)
. This gives the other
way round.
Thus, the two sets are equivalent, and hence Hom(a, -)
preserves limits (almost by definition).