mirror of
https://github.com/hmemcpy/milewski-ctfp-pdf.git
synced 2024-11-29 16:37:17 +03:00
Chapter 17 - It’s All About Morphisms
This commit is contained in:
parent
2d745c6c68
commit
4a1d2f8829
@ -1,12 +1,4 @@
|
|||||||
\begin{quote}
|
\lettrine[lhang=0.17]{I}{f I haven't} convinced you yet that category theory is all about
|
||||||
This is part 17 of Categories for Programmers. Previously:
|
|
||||||
\href{https://bartoszmilewski.com/2015/10/28/yoneda-embedding/}{Yoneda
|
|
||||||
Embedding}. See the
|
|
||||||
\href{https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/}{Table
|
|
||||||
of Contents}.
|
|
||||||
\end{quote}
|
|
||||||
|
|
||||||
If I haven't convinced you yet that category theory is all about
|
|
||||||
morphisms then I haven't done my job properly. Since the next topic is
|
morphisms then I haven't done my job properly. Since the next topic is
|
||||||
adjunctions, which are defined in terms of isomorphisms of hom-sets, it
|
adjunctions, which are defined in terms of isomorphisms of hom-sets, it
|
||||||
makes sense to review our intuitions about the building blocks of
|
makes sense to review our intuitions about the building blocks of
|
||||||
@ -38,13 +30,16 @@ constructions (with the notable exceptions of the initial and terminal
|
|||||||
objects). We've seen this in the definitions of products, coproducts,
|
objects). We've seen this in the definitions of products, coproducts,
|
||||||
various other (co-)limits, exponential objects, free monoids, etc.
|
various other (co-)limits, exponential objects, free monoids, etc.
|
||||||
|
|
||||||
|
\begin{wrapfigure}[9]{R}{0pt}
|
||||||
|
\raisebox{0pt}[\dimexpr\height-0.75\baselineskip\relax]{
|
||||||
|
\fbox{\includegraphics[width=1.78125in]{images/productranking.jpg}}}%
|
||||||
|
\end{wrapfigure}
|
||||||
|
|
||||||
The product is a simple example of a universal construction. We pick two
|
The product is a simple example of a universal construction. We pick two
|
||||||
objects \code{a} and \code{b} and see if there exists an object
|
objects \code{a} and \code{b} and see if there exists an object
|
||||||
\code{c}, together with a pair of morphisms \code{p} and \code{q},
|
\code{c}, together with a pair of morphisms \code{p} and \code{q},
|
||||||
that has the universal property of being their product.
|
that has the universal property of being their product.
|
||||||
|
|
||||||
\includegraphics[width=1.78125in]{images/productranking.jpg}
|
|
||||||
|
|
||||||
A product is a special case of a limit. A limit is defined in terms of
|
A product is a special case of a limit. A limit is defined in terms of
|
||||||
cones. A general cone is built from commuting diagrams. Commutativity of
|
cones. A general cone is built from commuting diagrams. Commutativity of
|
||||||
those diagrams may be replaced with a suitable naturality condition for
|
those diagrams may be replaced with a suitable naturality condition for
|
||||||
@ -60,8 +55,12 @@ naturality square are the mappings of some morphism \code{f} under two
|
|||||||
functors \code{F} and \code{G}. The other sides are the components
|
functors \code{F} and \code{G}. The other sides are the components
|
||||||
of the natural transformation (which are also morphisms).
|
of the natural transformation (which are also morphisms).
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
\includegraphics[width=2.25000in]{images/3_naturality.jpg}
|
\includegraphics[width=2.25000in]{images/3_naturality.jpg}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\noindent
|
||||||
Naturality means that when you move to the ``neighboring'' component (by
|
Naturality means that when you move to the ``neighboring'' component (by
|
||||||
neighboring I mean connected by a morphism), you're not going against
|
neighboring I mean connected by a morphism), you're not going against
|
||||||
the structure of either the category or the functors. It doesn't matter
|
the structure of either the category or the functors. It doesn't matter
|
||||||
@ -74,8 +73,12 @@ you up and down or back and forth --- so to speak. You can visualize the
|
|||||||
transformation maps one such sheet corresponding to F, to another,
|
transformation maps one such sheet corresponding to F, to another,
|
||||||
corresponding to G.
|
corresponding to G.
|
||||||
|
|
||||||
\includegraphics{images/sheets.png}
|
\begin{wrapfigure}[10]{R}{0pt}
|
||||||
|
\raisebox{0pt}[\dimexpr\height-0.75\baselineskip\relax]{
|
||||||
|
\includegraphics[width=60mm]{images/sheets.png}}%
|
||||||
|
\end{wrapfigure}
|
||||||
|
|
||||||
|
\noindent
|
||||||
We've seen examples of this orthogonality in Haskell. There the action
|
We've seen examples of this orthogonality in Haskell. There the action
|
||||||
of a functor modifies the content of a container without changing its
|
of a functor modifies the content of a container without changing its
|
||||||
shape, while a natural transformation repackages the untouched contents
|
shape, while a natural transformation repackages the untouched contents
|
||||||
@ -89,21 +92,19 @@ cones. These mappings must also satisfy commutativity conditions. (For
|
|||||||
instance, the triangles in the definition of the product must commute.)
|
instance, the triangles in the definition of the product must commute.)
|
||||||
|
|
||||||
These conditions, too, may be replaced by naturality. You may recall
|
These conditions, too, may be replaced by naturality. You may recall
|
||||||
that the \newterm{universal} cone, or the limit, is defined as a natural
|
that the \emph{universal} cone, or the limit, is defined as a natural
|
||||||
transformation between the (contravariant) hom-functor:
|
transformation between the (contravariant) hom-functor:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
F :: c -> C(c, Lim D)
|
F :: c -> C(c, Lim D)
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
and the (also contravariant) functor that maps objects in \emph{C} to
|
and the (also contravariant) functor that maps objects in \emph{C} to
|
||||||
cones, which themselves are natural transformations:
|
cones, which themselves are natural transformations:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{Verbatim}[commandchars=\\\{\}]
|
||||||
G :: c -> Nat(Δc, D)
|
G :: c -> Nat(\ensuremath{\Delta}\textsubscript{c}, D)
|
||||||
\end{verbatim}
|
\end{Verbatim}
|
||||||
|
Here, \code{\ensuremath{\Delta}\textsubscript{c}} is the constant functor, and \code{D} is the functor
|
||||||
Here, \code{Δc} is the constant functor, and \code{D} is the functor
|
|
||||||
that defines the diagram in \emph{C}. Both functors \code{F} and
|
that defines the diagram in \emph{C}. Both functors \code{F} and
|
||||||
\code{G} have well defined actions on morphisms in \emph{C}. It so
|
\code{G} have well defined actions on morphisms in \emph{C}. It so
|
||||||
happens that this particular natural transformation between \code{F}
|
happens that this particular natural transformation between \code{F}
|
||||||
@ -133,9 +134,8 @@ there is a morphism \code{h} whose composition (either pre- or post-)
|
|||||||
with \code{f} is different than that with \code{g}, for instance:
|
with \code{f} is different than that with \code{g}, for instance:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
h ∘ f ≠ h ∘ g
|
h ◦ f ≠ h ◦ g
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
then we can directly ``observe'' the difference between \code{f} and
|
then we can directly ``observe'' the difference between \code{f} and
|
||||||
\code{g}. But even if the difference is not directly observable, we
|
\code{g}. But even if the difference is not directly observable, we
|
||||||
might use functors to zoom in on the hom-set. A functor \code{F} may
|
might use functors to zoom in on the hom-set. A functor \code{F} may
|
||||||
@ -144,15 +144,13 @@ map the two morphisms to distinct morphisms:
|
|||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
F f ≠ F g
|
F f ≠ F g
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
in a richer category, where the abutting hom-sets provide more
|
in a richer category, where the abutting hom-sets provide more
|
||||||
resolution, e.g.,
|
resolution, e.g.,
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
h' ∘ F f ≠ h' ∘ F g
|
h' ◦ F f ≠ h' ◦ F g
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
where \code{h'} is not in the image of \code{F}.
|
||||||
where \code{h\'} is not in the image of \code{F}.
|
|
||||||
|
|
||||||
\section{Hom-Set Isomorphisms}\label{hom-set-isomorphisms}
|
\section{Hom-Set Isomorphisms}\label{hom-set-isomorphisms}
|
||||||
|
|
||||||
@ -184,10 +182,9 @@ between hom-sets.
|
|||||||
The definition of a limit is also a natural isomorphism between hom-sets
|
The definition of a limit is also a natural isomorphism between hom-sets
|
||||||
(the second one, again, in the functor category):
|
(the second one, again, in the functor category):
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{Verbatim}[commandchars=\\\{\}]
|
||||||
C(c, Lim D) ≃ Nat(Δc, D)
|
C(c, Lim D) \ensuremath{\simeq} Nat(\ensuremath{\Delta}\textsubscript{c}, D)
|
||||||
\end{verbatim}
|
\end{Verbatim}
|
||||||
|
|
||||||
It turns out that our construction of an exponential object, or that of
|
It turns out that our construction of an exponential object, or that of
|
||||||
a free monoid, can also be rewritten as a natural isomorphism between
|
a free monoid, can also be rewritten as a natural isomorphism between
|
||||||
hom-sets.
|
hom-sets.
|
||||||
@ -199,16 +196,16 @@ hom-sets.
|
|||||||
\section{Asymmetry of Hom-Sets}\label{asymmetry-of-hom-sets}
|
\section{Asymmetry of Hom-Sets}\label{asymmetry-of-hom-sets}
|
||||||
|
|
||||||
There is one more observation that will help us understand adjunctions.
|
There is one more observation that will help us understand adjunctions.
|
||||||
Hom-sets are, in general, not symmetric. A hom-set \code{C(a,\ b)} is
|
Hom-sets are, in general, not symmetric. A hom-set \code{C(a, b)} is
|
||||||
often very different from the hom-set \code{C(b,\ a)}. The ultimate
|
often very different from the hom-set \code{C(b, a)}. The ultimate
|
||||||
demonstration of this asymmetry is a partial order viewed as a category.
|
demonstration of this asymmetry is a partial order viewed as a category.
|
||||||
In a partial order, a morphism from \code{a} to \code{b} exists if
|
In a partial order, a morphism from \code{a} to \code{b} exists if
|
||||||
and only if \code{a} is less than or equal to \code{b}. If
|
and only if \code{a} is less than or equal to \code{b}. If
|
||||||
\code{a} and \code{b} are different, then there can be no morphism
|
\code{a} and \code{b} are different, then there can be no morphism
|
||||||
going the other way, from \code{b} to \code{a}. So if the hom-set
|
going the other way, from \code{b} to \code{a}. So if the hom-set
|
||||||
\code{C(a,\ b)} is non-empty, which in this case means it's a
|
\code{C(a, b)} is non-empty, which in this case means it's a
|
||||||
singleton set, then \code{C(b,\ a)} must be empty, unless
|
singleton set, then \code{C(b, a)} must be empty, unless
|
||||||
\code{a\ =\ b}. The arrows in this category have a definite flow in
|
\code{a = b}. The arrows in this category have a definite flow in
|
||||||
one direction.
|
one direction.
|
||||||
|
|
||||||
A preorder, which is based on a relation that's not necessarily
|
A preorder, which is based on a relation that's not necessarily
|
||||||
@ -227,20 +224,10 @@ empty. We can visualize a general category as a ``thick'' preorder.
|
|||||||
Consider some degenerate cases of a naturality condition and draw the
|
Consider some degenerate cases of a naturality condition and draw the
|
||||||
appropriate diagrams. For instance, what happens if either functor
|
appropriate diagrams. For instance, what happens if either functor
|
||||||
\code{F} or \code{G} map both objects \code{a} and \code{b}
|
\code{F} or \code{G} map both objects \code{a} and \code{b}
|
||||||
(the ends of \code{f\ ::\ a\ ->\ b}) to the same
|
(the ends of\\ \code{f :: a -> b}) to the same
|
||||||
object, e.g., \code{F\ a\ =\ F\ b} or \code{G\ a\ =\ G\ b}?
|
object, e.g., \code{F a = F b} or \code{G a = G b}?
|
||||||
(Notice that you get a cone or a co-cone this way.) Then consider
|
(Notice that you get a cone or a co-cone this way.) Then consider
|
||||||
cases where either \code{F\ a\ =\ G\ a} or \code{F\ b\ =\ G\ b}.
|
cases where either \code{F a = G a} or \code{F b = G b}.
|
||||||
Finally, what if you start with a morphism that loops on itself ---
|
Finally, what if you start with a morphism that loops on itself ---
|
||||||
\code{f\ ::\ a\ ->\ a}?
|
\code{f :: a -> a}?
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
Next:
|
|
||||||
\href{https://bartoszmilewski.com/2016/04/18/adjunctions/}{Adjunctions}.
|
|
||||||
|
|
||||||
\section{Acknowledgments}\label{acknowledgments}
|
|
||||||
|
|
||||||
I'd like to thank Gershom Bazerman for checking my math and logic, and
|
|
||||||
André van Meulebrouck, who has been volunteering his editing help
|
|
||||||
throughout this series of posts.\\
|
|
||||||
\href{https://twitter.com/BartoszMilewski}{Follow @BartoszMilewski}
|
|
@ -117,6 +117,13 @@ PDF compiled by @url{https://github.com/hmemcpy/milewski-ctfp-pdf, Igal Tabachni
|
|||||||
\chapter{Natural Transformations}
|
\chapter{Natural Transformations}
|
||||||
\subfile{content/1.10/Natural Transformations}
|
\subfile{content/1.10/Natural Transformations}
|
||||||
|
|
||||||
|
\part{Part Two}
|
||||||
|
|
||||||
|
\part{Part Three}
|
||||||
|
|
||||||
|
\chapter{It's All About Morphisms}
|
||||||
|
\subfile{content/3.1/It's All About Morphisms}
|
||||||
|
|
||||||
\backmatter
|
\backmatter
|
||||||
|
|
||||||
@unnumbered Acknowledgments
|
@unnumbered Acknowledgments
|
||||||
|
Loading…
Reference in New Issue
Block a user