2018-05-02 15:02:46 +00:00
|
|
|
|
\chapter{Category Theory}
|
|
|
|
|
\label{ch:implementation}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
This implementaiton, including this report, is available as open
|
|
|
|
|
source software at:
|
|
|
|
|
%
|
|
|
|
|
\begin{center}
|
|
|
|
|
\gitlink
|
|
|
|
|
\end{center}
|
|
|
|
|
%
|
|
|
|
|
All modules imported for this formalization can be browsed at this
|
|
|
|
|
link\footnote{%
|
|
|
|
|
In case the linked sources are unavailable the html
|
|
|
|
|
documentation can be generated by navigating to the root directory
|
|
|
|
|
of the project and executing \texttt{make html}.%
|
|
|
|
|
}:
|
|
|
|
|
%
|
|
|
|
|
\begin{center}
|
|
|
|
|
\doclink
|
|
|
|
|
\end{center}
|
2018-05-02 15:02:46 +00:00
|
|
|
|
This implementation formalizes the following concepts:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\begin{center}
|
|
|
|
|
\begin{tabular}{ l l }
|
2018-05-18 11:14:41 +00:00
|
|
|
|
Name & Module \\
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\hline
|
2018-05-15 15:11:01 +00:00
|
|
|
|
Equivalences & \sourcelink{Cat.Equivalence} \\
|
2018-05-15 14:08:29 +00:00
|
|
|
|
Categories & \sourcelink{Cat.Category} \\
|
|
|
|
|
Functors & \sourcelink{Cat.Category.Functor} \\
|
2018-05-15 14:28:04 +00:00
|
|
|
|
Products & \sourcelink{Cat.Category.Product} \\
|
|
|
|
|
Exponentials & \sourcelink{Cat.Category.Exponential} \\
|
2018-05-15 14:08:29 +00:00
|
|
|
|
Cartesian closed categories & \sourcelink{Cat.Category.CartesianClosed} \\
|
|
|
|
|
Natural transformations & \sourcelink{Cat.Category.NaturalTransformation} \\
|
|
|
|
|
Yoneda embedding & \sourcelink{Cat.Category.Yoneda} \\
|
2018-05-15 14:28:04 +00:00
|
|
|
|
Monads & \sourcelink{Cat.Category.Monad} \\
|
|
|
|
|
Kleisli Monads & \sourcelink{Cat.Category.Monad.Kleisli} \\
|
|
|
|
|
Monoidal Monads & \sourcelink{Cat.Category.Monad.Monoidal} \\
|
|
|
|
|
Voevodsky's construction & \sourcelink{Cat.Category.Monad.Voevodsky} \\
|
|
|
|
|
Opposite category & \sourcelink{Cat.Categories.Opposite} \\
|
2018-05-15 14:08:29 +00:00
|
|
|
|
Category of sets & \sourcelink{Cat.Categories.Sets} \\
|
2018-05-15 14:28:04 +00:00
|
|
|
|
Span category & \sourcelink{Cat.Categories.Span} \\
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\end{tabular}
|
|
|
|
|
\end{center}
|
2018-05-07 22:25:34 +00:00
|
|
|
|
%
|
|
|
|
|
Furthermore the following items have been partly formalized:
|
|
|
|
|
%
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\begin{center}
|
|
|
|
|
\begin{tabular}{ l l }
|
2018-05-18 11:14:41 +00:00
|
|
|
|
Name & Module \\
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\hline
|
|
|
|
|
Category of categories & \sourcelink{Cat.Categories.Cat} \\
|
|
|
|
|
Category of relations & \sourcelink{Cat.Categories.Rel} \\
|
|
|
|
|
Category of functors & \sourcelink{Cat.Categories.Fun} \\
|
|
|
|
|
Free category & \sourcelink{Cat.Categories.Free} \\
|
|
|
|
|
Monoids & \sourcelink{Cat.Category.Monoid} \\
|
|
|
|
|
\end{tabular}
|
|
|
|
|
\end{center}
|
2018-05-07 22:25:34 +00:00
|
|
|
|
%
|
2018-05-18 11:14:41 +00:00
|
|
|
|
As well as a range of various results about these. E.g.\ I have shown
|
2018-05-15 15:11:01 +00:00
|
|
|
|
that the category of sets has products. In the following I aim to
|
|
|
|
|
demonstrate some of the techniques employed in this formalization and
|
|
|
|
|
in the interest of brevity I will not detail all the things I have
|
|
|
|
|
formalized. In stead, I have selected parts of this formalization that
|
|
|
|
|
highlight some interesting proof techniques relevant to doing proofs
|
|
|
|
|
in Cubical Agda. This chapter will focus on the definition of
|
|
|
|
|
\emph{categories}, \emph{equivalences}, the \emph{opposite category},
|
|
|
|
|
the \emph{category of sets}, \emph{products}, the \emph{span category}
|
|
|
|
|
and the two formulations of \emph{monads}.
|
2018-05-07 22:25:34 +00:00
|
|
|
|
|
|
|
|
|
One such technique that is pervasive to this formalization is the idea of
|
|
|
|
|
distinguishing types with more or less homotopical structure. To do this I have
|
|
|
|
|
followed the following design-principle: I have split concepts up into things
|
|
|
|
|
that represent ``data'' and ``laws'' about this data. The idea is that we can
|
|
|
|
|
provide a proof that the laws are mere propositions. As an example a category is
|
|
|
|
|
defined to have two members: `raw` which is a collection of the data and
|
|
|
|
|
`isCategory` which asserts some laws about that data.
|
2018-04-05 18:41:36 +00:00
|
|
|
|
|
2018-05-07 08:13:13 +00:00
|
|
|
|
This allows me to reason about things in a more ``standard mathematical way'',
|
|
|
|
|
where one can reason about two categories by simply focusing on the data. This
|
2018-05-07 22:25:34 +00:00
|
|
|
|
is achieved by creating a function embodying the ``equality principle'' for a
|
2018-05-07 08:13:13 +00:00
|
|
|
|
given type.
|
2018-04-05 18:41:36 +00:00
|
|
|
|
|
2018-05-18 11:14:41 +00:00
|
|
|
|
For the rest of this chapter I will present some of these results. For
|
|
|
|
|
didactic reasons no source-code has been included in this chapter. To
|
|
|
|
|
see the formal definitions the reader is referred to the
|
|
|
|
|
implementation which is linked in \S\ref{ch:implementation}.
|
2018-05-08 14:22:51 +00:00
|
|
|
|
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\section{Categories}
|
2018-05-09 16:13:36 +00:00
|
|
|
|
\label{sec:categories}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
The data for a category consist of a type for the sort of objects; a type for
|
|
|
|
|
the sort of arrows; an identity arrow and a composition operation for arrows.
|
2018-04-05 18:41:36 +00:00
|
|
|
|
Another record encapsulates some laws about this data: associativity of
|
|
|
|
|
composition, identity law for the identity morphism. These are standard
|
2018-05-07 08:13:13 +00:00
|
|
|
|
constituents of a category and can be found in typical mathematical expositions
|
|
|
|
|
on the topic. We, however, impose one further requirement on what it means to be
|
|
|
|
|
a category, namely that the type of arrows form a set.
|
2018-04-05 18:41:36 +00:00
|
|
|
|
|
2018-05-15 14:08:29 +00:00
|
|
|
|
Such categories are called \nomen{1-categories}{1-category}. It is possible to relax
|
|
|
|
|
this requirement. This would lead to the notion of higher categories (\cite[p.
|
2018-05-07 08:13:13 +00:00
|
|
|
|
307]{hott-2013}). For the purpose of this project, however, this report will
|
2018-05-15 14:08:29 +00:00
|
|
|
|
restrict itself to 1-categories\index{1-category}. Generalizing this work to
|
|
|
|
|
higher categories would be a very natural possible extension of this work.
|
2018-04-05 18:41:36 +00:00
|
|
|
|
|
2018-05-07 08:13:13 +00:00
|
|
|
|
Raw categories satisfying all of the above requirements are called a
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\nomenindex{pre categories}. As a further requirement to be a proper category we
|
2018-05-07 08:13:13 +00:00
|
|
|
|
require it to be univalent. Before we can define this, I must introduce two more
|
|
|
|
|
definitions: If we let $p$ be a witness to the identity law, which formally is:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\begin{equation}
|
|
|
|
|
\label{eq:identity}
|
|
|
|
|
\var{IsIdentity} \defeq
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\prod_{A\ B \tp \Object} \prod_{f \tp \Arrow\ A\ B}
|
2018-05-24 13:57:30 +00:00
|
|
|
|
\left(\id \lll f \equiv f\right) \x \left(f \lll \id \equiv f\right)
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\end{equation}
|
|
|
|
|
%
|
2018-05-09 16:24:07 +00:00
|
|
|
|
Then we can construct the identity isomorphism $\idIso \tp \identity,
|
2018-05-07 22:25:34 +00:00
|
|
|
|
\identity, p \tp A \approxeq A$ for any object $A$. Here $\approxeq$ denotes
|
2018-05-07 08:13:13 +00:00
|
|
|
|
isomorphism on objects (whereas $\cong$ denotes isomorphism of types). This will
|
2018-05-09 16:13:36 +00:00
|
|
|
|
be elaborated further on in sections \S\ref{sec:equiv} and
|
|
|
|
|
\S\ref{sec:univalence}. Moreover, due to substitution for paths we can construct
|
|
|
|
|
an isomorphism from \emph{any} path:
|
2018-05-07 08:13:13 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{equation}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\idToIso \tp A ≡ B → A ≊ B
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\end{equation}
|
|
|
|
|
%
|
|
|
|
|
The univalence criterion for categories states that this map must be an
|
|
|
|
|
equivalence. The requirement is similar to univalence for types, but where
|
|
|
|
|
isomorphism on objects play the role of equivalence on types. Formally:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:cat-univ}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\isEquiv\ (A \equiv B)\ (A \approxeq B)\ \idToIso
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\end{align}
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
Note that \ref{eq:cat-univ} is \emph{not} the same as:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\begin{equation}
|
|
|
|
|
\label{eq:cat-univalence}
|
2018-05-09 16:13:36 +00:00
|
|
|
|
%% \tag{Univalence, category}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
(A \equiv B) \simeq (A \approxeq B)
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\end{equation}
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
However the two are logically equivalent: One can construct the latter from the
|
|
|
|
|
former simply by ``forgetting'' that $\idToIso$ plays the role of the
|
2018-05-03 12:18:51 +00:00
|
|
|
|
equivalence. The other direction is more involved and will be discussed in
|
2018-05-09 16:13:36 +00:00
|
|
|
|
section \S\ref{sec:univalence}.
|
2018-04-05 18:41:36 +00:00
|
|
|
|
|
2018-05-07 08:13:13 +00:00
|
|
|
|
In summary, the definition of a category is the following collection of data:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\Object & \tp \Type \\
|
|
|
|
|
\Arrow & \tp \Object \to \Object \to \Type \\
|
|
|
|
|
\identity & \tp \Arrow\ A\ A \\
|
|
|
|
|
\lll & \tp \Arrow\ B\ C \to \Arrow\ A\ B \to \Arrow\ A\ C
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
And laws:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
2018-05-09 16:13:36 +00:00
|
|
|
|
%% \tag{associativity}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
h \lll (g \lll f) ≡ (h \lll g) \lll f \\
|
2018-05-09 16:13:36 +00:00
|
|
|
|
%% \tag{identity}
|
2018-05-24 13:57:30 +00:00
|
|
|
|
\left(
|
|
|
|
|
\identity \lll f ≡ f
|
|
|
|
|
\right)
|
|
|
|
|
\x
|
|
|
|
|
\left(
|
2018-05-07 08:13:13 +00:00
|
|
|
|
f \lll \identity ≡ f
|
2018-05-24 13:57:30 +00:00
|
|
|
|
\right)
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\\
|
|
|
|
|
\label{eq:arrows-are-sets}
|
2018-05-09 16:13:36 +00:00
|
|
|
|
%% \tag{arrows are sets}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\isSet\ (\Arrow\ A\ B)\\
|
|
|
|
|
\tag{\ref{eq:cat-univ}}
|
|
|
|
|
\isEquiv\ (A \equiv B)\ (A \approxeq B)\ \idToIso
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
$\lll$ denotes arrow composition (right-to-left), and reverse function
|
2018-05-07 22:25:34 +00:00
|
|
|
|
composition (left-to-right, diagrammatic order) is denoted $\rrr$. The objects
|
2018-05-07 08:13:13 +00:00
|
|
|
|
($A$, $B$ and $C$) and arrow ($f$, $g$, $h$) are implicitly universally
|
|
|
|
|
quantified.
|
|
|
|
|
|
2018-04-05 18:41:36 +00:00
|
|
|
|
With all this in place it is now possible to prove that all the laws are indeed
|
|
|
|
|
mere propositions. Most of the proofs simply use the fact that the type of
|
|
|
|
|
arrows are sets. This is because most of the laws are a collection of equations
|
2018-04-23 15:06:09 +00:00
|
|
|
|
between arrows in the category. And since such a proof does not have any content
|
|
|
|
|
exactly because the type of arrows form a set, two witnesses must be the same.
|
2018-05-07 08:13:13 +00:00
|
|
|
|
All the proofs are really quite mechanical. Lets have a look at one of them.
|
|
|
|
|
Proving that \ref{eq:identity} is a mere proposition:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-03 12:18:51 +00:00
|
|
|
|
\begin{equation}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\isProp\ \var{IsIdentity}
|
2018-05-03 12:18:51 +00:00
|
|
|
|
\end{equation}
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
|
|
|
|
There are multiple ways to prove this. Perhaps one of the more intuitive proofs
|
2018-05-03 12:18:51 +00:00
|
|
|
|
is by way of the `combinators' $\propPi$ and $\propSig$ presented in sections
|
2018-05-09 16:13:36 +00:00
|
|
|
|
\S\ref{sec:propPi} and \S\ref{sec:propSig}:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-03 12:18:51 +00:00
|
|
|
|
\begin{align*}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\propPi & \tp \left(\prod_{a \tp A} \isProp\ (P\ a)\right) \to \isProp\ \left(\prod_{a \tp A} P\ a\right)
|
2018-05-03 12:18:51 +00:00
|
|
|
|
\\
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\propSig & \tp \isProp\ A \to \left(\prod_{a \tp A} \isProp\ (P\ a)\right) \to \isProp\ \left(\sum_{a \tp A} P\ a\right)
|
2018-05-03 12:18:51 +00:00
|
|
|
|
\end{align*}
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-04-09 16:02:54 +00:00
|
|
|
|
So the proof goes like this: We `eliminate' the 3 function abstractions by
|
2018-04-23 15:06:09 +00:00
|
|
|
|
applying $\propPi$ three times. So our proof obligation becomes:
|
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-24 13:57:30 +00:00
|
|
|
|
\isProp\ \left( \left( \id \comp f \equiv f \right) \x \left( f \comp \id \equiv f \right) \right)
|
2018-04-23 15:06:09 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
Then we eliminate the (non-dependent) sigma-type by applying $\propSig$ giving
|
2018-04-23 15:06:09 +00:00
|
|
|
|
us the two obligations: $\isProp\ (\id \comp f \equiv f)$ and $\isProp\ (f \comp
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\id \equiv f)$ which follows from the type of arrows being a
|
|
|
|
|
set.
|
2018-04-05 18:41:36 +00:00
|
|
|
|
|
2018-04-09 16:02:54 +00:00
|
|
|
|
This example illustrates nicely how we can use these combinators to reason about
|
2018-05-09 16:47:12 +00:00
|
|
|
|
`canonical' types like $\sum$ and $\prod$. Similar combinators can be defined at
|
|
|
|
|
the other homotopic levels. These combinators are however not applicable in
|
2018-05-16 09:01:07 +00:00
|
|
|
|
situations where we want to reason about other types - e.g.\ types we have
|
2018-05-09 16:47:12 +00:00
|
|
|
|
defined ourselves. For instance, after we have proven that all the projections
|
2018-05-15 14:08:29 +00:00
|
|
|
|
of pre categories are propositions, then we would like to bundle this up to show
|
|
|
|
|
that the type of pre categories is also a proposition. Formally:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\begin{equation}
|
|
|
|
|
\label{eq:propIsPreCategory}
|
2018-04-09 16:02:54 +00:00
|
|
|
|
\isProp\ \IsPreCategory
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\end{equation}
|
|
|
|
|
%
|
2018-05-07 22:25:34 +00:00
|
|
|
|
Where The definition of $\IsPreCategory$ is the triple:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
\var{isAssociative} & \tp \var{IsAssociative}\\
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\isIdentity & \tp \var{IsIdentity}\\
|
2018-05-07 22:25:34 +00:00
|
|
|
|
\var{arrowsAreSets} & \tp \var{ArrowsAreSets}
|
|
|
|
|
\end{align*}
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-07 22:25:34 +00:00
|
|
|
|
Each corresponding to the first three laws for categories. Note that since
|
|
|
|
|
$\IsPreCategory$ is not formulated with a chain of sigma-types we wont have any
|
2018-05-09 16:47:12 +00:00
|
|
|
|
combinators available to help us here. In stead the paths must be used directly.
|
2018-05-07 22:25:34 +00:00
|
|
|
|
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\ref{eq:propIsPreCategory} is judgmentally the same as:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
|
|
|
|
\prod_{a\ b \tp \IsPreCategory} a \equiv b
|
|
|
|
|
$$
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-18 11:14:41 +00:00
|
|
|
|
So to prove the proposition let $a\ b \tp \IsPreCategory$ be given. To
|
|
|
|
|
prove the equality $a \equiv b$ is to give a continuous path from the
|
|
|
|
|
index-type into the path-space. I.e.\ a function $I \to
|
|
|
|
|
\IsPreCategory$. This path must satisfy being being judgmentally the
|
|
|
|
|
same as $a$ at the left endpoint and $b$ at the right endpoint. We
|
|
|
|
|
know we can form a continuous path between all projections of $a$ and
|
|
|
|
|
$b$, this follows from the type of all the projections being mere
|
|
|
|
|
propositions. For instance, the path between $a.\isIdentity$ and
|
|
|
|
|
$b.\isIdentity$ is simply formed by:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\propIsIdentity\ a.\isIdentity\ b.\isIdentity
|
|
|
|
|
\tp
|
|
|
|
|
a.\isIdentity \equiv b.\isIdentity
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
So to give the continuous function $I \to \IsPreCategory$, which is our goal, we
|
2018-04-09 16:02:54 +00:00
|
|
|
|
introduce $i \tp I$ and proceed by constructing an element of $\IsPreCategory$
|
2018-05-07 08:13:13 +00:00
|
|
|
|
by using the fact that all the projections are propositions to generate paths
|
2018-05-16 09:01:07 +00:00
|
|
|
|
between all projections. Once we have such a path e.g.\ $p \tp a.\isIdentity
|
2018-05-07 22:25:34 +00:00
|
|
|
|
\equiv b.\isIdentity$ we can eliminate it with $i$ and thus obtain $p\ i \tp
|
2018-05-07 08:13:13 +00:00
|
|
|
|
(p\ i).\isIdentity$. This element satisfies exactly that it corresponds to the
|
|
|
|
|
corresponding projections at either endpoint. Thus the element we construct at
|
|
|
|
|
$i$ becomes the triple:
|
2018-05-03 12:18:51 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{equation}
|
2018-05-07 22:25:34 +00:00
|
|
|
|
\label{eq:proof-prop-IsPreCategory}
|
2018-05-07 08:53:22 +00:00
|
|
|
|
\begin{aligned}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
& \var{propIsAssociative} && a.\var{isAssociative}\
|
|
|
|
|
&& b.\var{isAssociative} && i \\
|
2018-05-09 16:24:07 +00:00
|
|
|
|
& \propIsIdentity && a.\isIdentity\
|
|
|
|
|
&& b.\isIdentity && i \\
|
2018-05-07 08:13:13 +00:00
|
|
|
|
& \var{propArrowsAreSets} && a.\var{arrowsAreSets}\
|
|
|
|
|
&& b.\var{arrowsAreSets} && i
|
2018-05-07 08:53:22 +00:00
|
|
|
|
\end{aligned}
|
2018-05-03 12:18:51 +00:00
|
|
|
|
\end{equation}
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-23 16:28:27 +00:00
|
|
|
|
I have found this to be a general pattern when proving things in
|
|
|
|
|
homotopy type theory, namely that you have to wrap and unwrap
|
|
|
|
|
equalities at different levels. It is worth noting that proving this
|
|
|
|
|
theorem with the regular inductive equality type would already not be
|
|
|
|
|
possible, since we at least need functional
|
|
|
|
|
extensionality\index{functional extensionality} (the projections are
|
|
|
|
|
all $\prod$-types). Assuming we had functional extensionality
|
|
|
|
|
available to us as an axiom, we would use functional extensionality
|
|
|
|
|
\TODO{in reverse?} to retrieve the equalities in $a$ and $b$,
|
|
|
|
|
pattern-match on them to see that they are both $\refl$ and then close
|
|
|
|
|
the proof with $\refl$. Of course this theorem is not so interesting
|
|
|
|
|
in the setting of ITT since we know a priori that equality proofs are
|
|
|
|
|
unique.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-18 11:14:41 +00:00
|
|
|
|
The situation is a bit more complicated when we have a dependent type.
|
|
|
|
|
For instance, when we want to show that $\IsCategory$ is a mere
|
|
|
|
|
proposition. The type $\IsCategory$ is a record with two fields, a
|
|
|
|
|
witness to being a pre category and the univalence condition. Recall
|
|
|
|
|
that the univalence condition is indexed by the identity-proof. So to
|
|
|
|
|
follow the same recipe as above, let $a\ b \tp \IsCategory$ be given,
|
|
|
|
|
to show them equal, we now need to give two paths. One homogeneous:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
2018-05-07 08:13:13 +00:00
|
|
|
|
p \tp a.\isPreCategory \equiv b.\isPreCategory
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-04-09 16:02:54 +00:00
|
|
|
|
and one heterogeneous:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\Path\ (\lambda\; i \to (p\ i).Univalent)\ a.\isPreCategory\ b.\isPreCategory
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-03 12:18:51 +00:00
|
|
|
|
Which depends on the choice of $p$. The first of these we can provide since, as
|
2018-05-07 08:13:13 +00:00
|
|
|
|
we have shown, $\IsPreCategory$ is a proposition. However, even though
|
|
|
|
|
$\Univalent$ is also a proposition, we cannot use this directly to show the
|
2018-05-07 22:25:34 +00:00
|
|
|
|
latter. This is because $\isProp$ talks about non-dependent paths. So we need to
|
2018-05-07 08:13:13 +00:00
|
|
|
|
'promote' the result that univalence is a proposition to a heterogeneous path.
|
2018-05-09 16:13:36 +00:00
|
|
|
|
To this end we can use $\lemPropF$, which was introduced in \S\ref{sec:lemPropF}.
|
2018-05-07 08:13:13 +00:00
|
|
|
|
|
2018-05-09 16:47:12 +00:00
|
|
|
|
In this case $A = \var{IsIdentity}\ \identity$ and $B = \Univalent$. We have
|
2018-05-07 08:13:13 +00:00
|
|
|
|
shown that being a category is a proposition, a result that holds for any choice
|
|
|
|
|
of identity proof. Finally we must provide a proof that the identity proofs at
|
|
|
|
|
$a$ and $b$ are indeed the same, this we can extract from $p$ by applying
|
|
|
|
|
congruence of paths:
|
2018-04-09 16:02:54 +00:00
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\congruence\ \isIdentity\ p
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
And this finishes the proof that being-a-category is a mere proposition
|
|
|
|
|
(\ref{eq:propIsPreCategory}).
|
|
|
|
|
|
2018-05-23 16:28:27 +00:00
|
|
|
|
When we have a proper category we can make precise the notion of
|
|
|
|
|
``identifying isomorphic types''. That is, we can construct the
|
2018-04-09 16:02:54 +00:00
|
|
|
|
function:
|
|
|
|
|
%
|
|
|
|
|
$$
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\isoToId \tp (A \approxeq B) \to (A \equiv B)
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
2018-05-02 15:02:46 +00:00
|
|
|
|
A perhaps somewhat surprising application of this is that we can show that
|
|
|
|
|
terminal objects are propositional:
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:termProp}
|
|
|
|
|
\isProp\ \var{Terminal}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-02 15:02:46 +00:00
|
|
|
|
It follows from the usual observation that any two terminal objects are
|
|
|
|
|
isomorphic - and since categories are univalent, so are they equal. The proof is
|
|
|
|
|
omitted here, but the curious reader can check the implementation for the
|
2018-05-23 16:28:27 +00:00
|
|
|
|
details. It is in the module:
|
|
|
|
|
%
|
|
|
|
|
\begin{center}
|
|
|
|
|
\sourcelink{Cat.Category}
|
|
|
|
|
\end{center}
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\section{Equivalences}
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\label{sec:equiv}
|
2018-05-01 19:26:20 +00:00
|
|
|
|
The usual notion of a function $f \tp A \to B$ having an inverses is:
|
2018-04-09 16:02:54 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\begin{equation}
|
|
|
|
|
\label{eq:isomorphism}
|
2018-05-24 13:57:30 +00:00
|
|
|
|
\sum_{g \tp B \to A} \left( f \comp g \equiv \identity \right) \x \left( g \comp f \equiv \identity \right)
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\end{equation}
|
2018-04-09 16:02:54 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
This is defined in \cite[p. 129]{hott-2013} where it is referred to as the a
|
|
|
|
|
``quasi-inverse''. We shall refer to the type \ref{eq:isomorphism} as
|
|
|
|
|
$\Isomorphism\ f$. This also gives rise to the following type:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\begin{equation}
|
|
|
|
|
A \cong B \defeq \sum_{f \tp A \to B} \Isomorphism\ f
|
|
|
|
|
\end{equation}
|
|
|
|
|
%
|
|
|
|
|
At the same place \cite{hott-2013} gives an ``interface'' for what the judgment
|
|
|
|
|
$\isEquiv \tp (A \to B) \to \MCU$ must provide:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\var{fromIso} & \tp \Isomorphism\ f \to \isEquiv\ f \\
|
|
|
|
|
\var{toIso} & \tp \isEquiv\ f \to \Isomorphism\ f \\
|
|
|
|
|
\label{eq:propIsEquiv}
|
|
|
|
|
&\mathrel{\ } \isEquiv\ f
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
The maps $\var{fromIso}$ and $\var{toIso}$ naturally extend to these maps:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\var{fromIsomorphism} & \tp A \cong B \to A \simeq B \\
|
|
|
|
|
\var{toIsomorphism} & \tp A \simeq B \to A \cong B
|
|
|
|
|
\end{align}
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
Having this interface gives us both: a way to think rather abstractly about how
|
2018-05-07 22:25:34 +00:00
|
|
|
|
to work with equivalences and a way to use ad hoc definitions of equivalences.
|
2018-04-24 12:11:22 +00:00
|
|
|
|
The specific instantiation of $\isEquiv$ as defined in \cite{cubical-agda} is:
|
2018-04-09 16:02:54 +00:00
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-01 19:26:20 +00:00
|
|
|
|
isEquiv\ f \defeq \prod_{b \tp B} \isContr\ (\fiber\ f\ b)
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
|
|
|
|
where
|
|
|
|
|
$$
|
2018-05-01 19:26:20 +00:00
|
|
|
|
\fiber\ f\ b \defeq \sum_{a \tp A} \left( b \equiv f\ a \right)
|
2018-04-09 16:02:54 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
2018-05-09 16:34:05 +00:00
|
|
|
|
I give its definition here mainly for completeness, because as I stated we can
|
2018-04-09 16:02:54 +00:00
|
|
|
|
move away from this specific instantiation and think about it more abstractly
|
|
|
|
|
once we have shown that this definition actually works as an equivalence.
|
2018-04-05 18:41:36 +00:00
|
|
|
|
|
2018-05-18 11:14:41 +00:00
|
|
|
|
The implementation of $\var{fromIso}$ can be found in
|
|
|
|
|
\cite{cubical-agda} where it is known as $\var{gradLemma}$. The
|
|
|
|
|
implementation of $\var{fromIso}$ as well as the proof that this
|
|
|
|
|
equivalence is a proposition (\ref{eq:propIsEquiv}) can be found in my
|
2018-05-07 08:13:13 +00:00
|
|
|
|
implementation.
|
2018-04-05 18:41:36 +00:00
|
|
|
|
|
2018-04-23 15:06:09 +00:00
|
|
|
|
We say that two types $A\;B \tp \Type$ are equivalent exactly if there exists an
|
|
|
|
|
equivalence between them:
|
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\begin{equation}
|
|
|
|
|
\label{eq:equivalence}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
A \simeq B \defeq \sum_{f \tp A \to B} \isEquiv\ f
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\end{equation}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
|
|
|
|
Note that the term equivalence here is overloaded referring both to the map $f
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\tp A \to B$ and the type $A \simeq B$. The notion of an isomorphism is
|
|
|
|
|
similarly conflated as isomorphism can refer to the type $A \cong B$ as well as
|
|
|
|
|
the the map $A \to B$ that witness this. I will use these conflated terms when
|
2018-04-23 15:06:09 +00:00
|
|
|
|
it is clear from the context what is being referred to.
|
|
|
|
|
|
2018-05-07 08:13:13 +00:00
|
|
|
|
Both $\cong$ and $\simeq$ form equivalence relations (no pun intended).
|
2018-04-23 15:06:09 +00:00
|
|
|
|
|
|
|
|
|
\section{Univalence}
|
2018-05-03 12:18:51 +00:00
|
|
|
|
\label{sec:univalence}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
As noted in the introduction the univalence for types $A\; B \tp \Type$ states
|
|
|
|
|
that:
|
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\var{Univalence} \defeq (A \equiv B) \simeq (A \simeq B)
|
2018-04-23 15:06:09 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
As mentioned the univalence criterion for some category $\bC$ says that for all
|
|
|
|
|
\emph{objects} $A\;B$ we must have:
|
|
|
|
|
$$
|
|
|
|
|
\isEquiv\ (A \equiv B)\ (A \approxeq B)\ \idToIso
|
|
|
|
|
$$
|
|
|
|
|
And I mentioned that this was logically equivalent to
|
|
|
|
|
%
|
|
|
|
|
$$
|
|
|
|
|
(A \equiv B) \simeq (A \approxeq B)
|
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
Given that we saw in the previous section that we can construct an equivalence
|
|
|
|
|
from an isomorphism it suffices to demonstrate:
|
|
|
|
|
%
|
|
|
|
|
$$
|
|
|
|
|
(A \equiv B) \cong (A \approxeq B)
|
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
That is, we must demonstrate that there is an isomorphism (on types) between
|
2018-05-09 16:34:05 +00:00
|
|
|
|
equalities and isomorphisms (on arrows). It is worthwhile to dwell on this for a
|
2018-04-23 15:06:09 +00:00
|
|
|
|
few seconds. This type looks very similar to univalence for types and is
|
|
|
|
|
therefore perhaps a bit more intuitive to grasp the implications of. Of course
|
2018-05-16 09:01:07 +00:00
|
|
|
|
univalence for types (which is a proposition -- i.e.\ provable) does not imply
|
2018-05-15 14:08:29 +00:00
|
|
|
|
univalence of all pre category since morphisms in a category are not regular
|
2018-05-07 08:13:13 +00:00
|
|
|
|
functions -- in stead they can be thought of as a generalization hereof. The univalence criterion therefore is simply a way of restricting arrows
|
|
|
|
|
to behave similarly to maps.
|
2018-04-23 15:06:09 +00:00
|
|
|
|
|
2018-05-07 22:25:34 +00:00
|
|
|
|
I will now mention a few helpful theorems that follow from univalence that will
|
2018-04-23 15:06:09 +00:00
|
|
|
|
become useful later.
|
|
|
|
|
|
2018-05-03 12:18:51 +00:00
|
|
|
|
Obviously univalence gives us an isomorphism between $A \equiv B$ and $A
|
|
|
|
|
\approxeq B$. I will name these for convenience:
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
|
|
|
|
$$
|
|
|
|
|
\idToIso \tp A \equiv B \to A \approxeq B
|
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
$$
|
|
|
|
|
\isoToId \tp A \approxeq B \to A \equiv B
|
|
|
|
|
$$
|
|
|
|
|
%
|
2018-04-24 12:11:22 +00:00
|
|
|
|
The next few theorems are variations on theorem 9.1.9 from \cite{hott-2013}. Let
|
2018-04-23 15:06:09 +00:00
|
|
|
|
an isomorphism $A \approxeq B$ in some category $\bC$ be given. Name the
|
2018-05-07 08:13:13 +00:00
|
|
|
|
isomorphism $\iota \tp A \to B$ and its inverse $\inv{\iota} \tp B \to A$.
|
2018-04-23 15:06:09 +00:00
|
|
|
|
Since $\bC$ is a category (and therefore univalent) the isomorphism induces a
|
|
|
|
|
path $p \tp A \equiv B$. From this equality we can get two further paths:
|
2018-05-09 16:24:07 +00:00
|
|
|
|
$p_{\var{dom}} \tp \Arrow\ A\ X \equiv \Arrow\ B\ X$ and
|
|
|
|
|
$p_{\var{cod}} \tp \Arrow\ X\ A \equiv \Arrow\ X\ B$. We
|
2018-04-23 15:06:09 +00:00
|
|
|
|
then have the following two theorems:
|
|
|
|
|
%
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\begin{align}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\label{eq:coeDom}
|
|
|
|
|
\var{coeDom} & \tp \prod_{f \tp A \to X}
|
|
|
|
|
\var{coe}\ p_{\var{dom}}\ f \equiv f \lll \inv{\iota}
|
|
|
|
|
\\
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\label{eq:coeCod}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\var{coeCod} & \tp \prod_{f \tp A \to X}
|
|
|
|
|
\var{coe}\ p_{\var{cod}}\ f \equiv \iota \lll f
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\end{align}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
2018-05-07 22:25:34 +00:00
|
|
|
|
I will give the proof of the first theorem here, the second one is analogous.
|
2018-05-07 08:13:13 +00:00
|
|
|
|
%
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\begin{align*}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\var{coe}\ p_{\var{dom}}\ f
|
2018-05-09 16:24:07 +00:00
|
|
|
|
& \equiv f \lll \inv{(\idToIso\ p)} && \text{lemma} \\
|
2018-05-07 08:13:13 +00:00
|
|
|
|
& \equiv f \lll \inv{\iota}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
&& \text{$\idToIso$ and $\isoToId$ are inverses}\\
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
In the second step we use the fact that $p$ is constructed from the isomorphism
|
2018-05-09 16:24:07 +00:00
|
|
|
|
$\iota$ -- $\inv{(\idToIso\ p)}$ denotes the map $B \to A$ induced by the
|
|
|
|
|
isomorphism $\idToIso\ p \tp A \cong B$. The helper-lemma is similar to
|
2018-05-09 16:47:12 +00:00
|
|
|
|
what we are trying to prove but talks about paths rather than isomorphisms:
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\begin{equation}
|
|
|
|
|
\label{eq:coeDomIso}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\prod_{f \tp \Arrow\ A\ B} \prod_{p \tp A \equiv B}
|
|
|
|
|
\var{coe}\ p_{\var{dom}}\ f \equiv f \lll \inv{(\idToIso\ p)}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\end{equation}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
2018-05-09 16:24:07 +00:00
|
|
|
|
Again $p_{\var{dom}}$ denotes the path $\Arrow\ A\ X \equiv
|
|
|
|
|
\Arrow\ B\ X$ induced by $p$. To prove this statement I let $f$ and $p$ be
|
2018-05-09 16:13:36 +00:00
|
|
|
|
given and then invoke based-path-induction. The induction will be based at $A
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\tp \Object$ Let $\widetilde{B} \tp \Object$ and $\widetilde{p} \tp A
|
2018-05-09 16:13:36 +00:00
|
|
|
|
\equiv \widetilde{B}$ be given. The family that we perform induction over will
|
2018-04-23 15:06:09 +00:00
|
|
|
|
be:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-09 16:13:36 +00:00
|
|
|
|
\begin{align}
|
|
|
|
|
D\ \widetilde{B}\ \widetilde{p} \defeq
|
|
|
|
|
%% \prod_{\widetilde{B} \tp \Object}
|
|
|
|
|
%% \prod_{\widetilde{p} \tp A \equiv \widetilde{B}}
|
|
|
|
|
\var{coe}\ {\widetilde{p}}^*\ f
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\equiv
|
2018-05-09 16:24:07 +00:00
|
|
|
|
f \lll \inv{(\idToIso\ \widetilde{p})}
|
2018-05-09 16:13:36 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
The base-case therefore becomes
|
2018-05-09 16:24:07 +00:00
|
|
|
|
$d \tp \var{coe}\ \refl^*\ f \equiv f \lll \inv{(\idToIso\ \refl)}$
|
2018-05-09 16:13:36 +00:00
|
|
|
|
and is inhabited by:
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\begin{align*}
|
2018-05-09 16:13:36 +00:00
|
|
|
|
\var{coe}\ \refl^*\ f
|
|
|
|
|
& \equiv f
|
|
|
|
|
&& \text{$\refl$ is a neutral element for $\var{coe}$}\\
|
2018-05-09 16:24:07 +00:00
|
|
|
|
& \equiv f \lll \identity \\
|
|
|
|
|
& \equiv f \lll \var{subst}\ \refl\ \identity
|
2018-05-09 16:13:36 +00:00
|
|
|
|
&& \text{$\refl$ is a neutral element for $\var{subst}$}\\
|
2018-05-09 16:24:07 +00:00
|
|
|
|
& \equiv f \lll \inv{(\idToIso\ \refl)}
|
|
|
|
|
&& \text{By definition of $\idToIso$}\\
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\end{align*}
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
2018-05-09 16:13:36 +00:00
|
|
|
|
To close the based-path-induction we must supply the value ``at the other''. In
|
|
|
|
|
this case this is simply $B \tp \Object$ and $p \tp A \equiv B$ which we have.
|
|
|
|
|
In summary the proof of \ref{eq:coeDomIso} is the term:
|
|
|
|
|
%
|
|
|
|
|
\begin{equation}
|
|
|
|
|
\label{eq:pathJ-example}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\pathJ\ D\ d\ B\ p
|
2018-05-09 16:13:36 +00:00
|
|
|
|
\end{equation}
|
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
And this finishes the proof of \ref{eq:coeDomIso} and thus \ref{eq:coeDom}.
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
|
|
|
|
\section{Categories}
|
|
|
|
|
\subsection{Opposite category}
|
|
|
|
|
\label{op-cat}
|
2018-05-09 16:47:12 +00:00
|
|
|
|
The first category I will present is a pure construction on categories. Given
|
|
|
|
|
some category we can construct its dual, called the opposite category. Starting
|
|
|
|
|
with a simple example allows us to focus on how we work with equivalences and
|
2018-04-23 15:06:09 +00:00
|
|
|
|
univalence in a very simple category where the structure of the category is
|
|
|
|
|
rather simple.
|
|
|
|
|
|
|
|
|
|
Let $\bC$ be some category, we then define the opposite category
|
2018-05-07 08:13:13 +00:00
|
|
|
|
$\bC^{\var{Op}}$. It has the same objects, but the type of arrows are flipped,
|
2018-04-23 15:06:09 +00:00
|
|
|
|
that is to say an arrow from $A$ to $B$ in the opposite category corresponds to
|
|
|
|
|
an arrow from $B$ to $A$ in the underlying category. The identity arrow is the
|
|
|
|
|
same as the one in the underlying category (they have the same type). Function
|
|
|
|
|
composition will be reverse function composition from the underlying category.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-09 16:47:12 +00:00
|
|
|
|
I will refer to things in terms of the underlying category, unless they have an
|
2018-05-16 09:01:07 +00:00
|
|
|
|
over-bar. So e.g.\ $\idToIso$ is a function in the underlying category and the
|
2018-05-07 08:13:13 +00:00
|
|
|
|
corresponding thing is denoted $\wideoverbar{\idToIso}$ in the opposite
|
|
|
|
|
category.
|
|
|
|
|
|
2018-05-15 14:08:29 +00:00
|
|
|
|
Showing that this forms a pre category is rather straightforward.
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
|
|
|
|
$$
|
|
|
|
|
h \rrr (g \rrr f) \equiv h \rrr g \rrr f
|
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
Since $\rrr$ is reverse function composition this is just the symmetric version
|
|
|
|
|
of associativity.
|
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\identity \rrr f \equiv f \x f \rrr identity \equiv f
|
2018-04-23 15:06:09 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
This is just the swapped version of identity.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-04-23 15:06:09 +00:00
|
|
|
|
Finally, that the arrows form sets just follows by flipping the order of the
|
2018-05-07 08:13:13 +00:00
|
|
|
|
arguments. Or in other words; since $\Arrow\ A\ B$ is a set for all $A\;B \tp
|
|
|
|
|
\Object$ then so is $Arrow\ B\ A$.
|
|
|
|
|
|
|
|
|
|
Now, to show that this category is univalent is not as straight-forward. Luckily
|
2018-05-09 16:13:36 +00:00
|
|
|
|
section \S\ref{sec:equiv} gave us some tools to work with equivalences. We saw
|
2018-05-07 08:13:13 +00:00
|
|
|
|
that we can prove this category univalent by giving an inverse to
|
|
|
|
|
$\wideoverbar{\idToIso} \tp (A \equiv B) \to (A \wideoverbar{\approxeq} B)$.
|
2018-04-23 15:06:09 +00:00
|
|
|
|
From the original category we have that $\idToIso \tp (A \equiv B) \to (A \cong
|
2018-05-09 16:34:05 +00:00
|
|
|
|
B)$ is an isomorphism. Let us denote its inverse with $\isoToId \tp (A
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\approxeq B) \to (A \equiv B)$. If we squint we can see what we need is a way to
|
|
|
|
|
go between $\wideoverbar{\approxeq}$ and $\approxeq$.
|
|
|
|
|
|
2018-05-09 16:24:07 +00:00
|
|
|
|
An inhabitant of $A \approxeq B$ is simply an arrow $f \tp \Arrow\ A\ B$
|
2018-05-09 16:34:05 +00:00
|
|
|
|
and its inverse $g \tp \Arrow\ B\ A$. In the opposite category $g$ will
|
2018-05-07 08:13:13 +00:00
|
|
|
|
play the role of the isomorphism and $f$ will be the inverse. Similarly we can
|
2018-05-18 11:14:41 +00:00
|
|
|
|
go in the opposite direction. I name these maps $\shufflef \tp (A \approxeq
|
2018-05-24 13:57:30 +00:00
|
|
|
|
B) \to (A \wideoverbar{\approxeq} B)$ and $\shufflef^{-1} \tp (A
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\wideoverbar{\approxeq} B) \to (A \approxeq B)$ respectively.
|
|
|
|
|
|
|
|
|
|
As the inverse of $\wideoverbar{\idToIso}$ I will pick $\wideoverbar{\isoToId}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\defeq \isoToId \comp \shufflef$. The proof that they are inverses go as
|
2018-05-07 08:13:13 +00:00
|
|
|
|
follows:
|
2018-04-09 16:02:54 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\wideoverbar{\isoToId} \comp \wideoverbar{\idToIso} & =
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\isoToId \comp \shufflef \comp \wideoverbar{\idToIso}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\\
|
2018-04-09 16:02:54 +00:00
|
|
|
|
%% ≡⟨ cong (λ φ → φ x) (cong (λ φ → η ⊙ shuffle ⊙ φ) (funExt lem)) ⟩ \\
|
|
|
|
|
%
|
|
|
|
|
& \equiv
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\isoToId \comp \shufflef \comp \inv{\shufflef} \comp \idToIso
|
2018-04-09 16:02:54 +00:00
|
|
|
|
&& \text{lemma} \\
|
|
|
|
|
%% ≡⟨⟩ \\
|
|
|
|
|
& \equiv
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\isoToId \comp \idToIso
|
2018-05-18 11:14:41 +00:00
|
|
|
|
&& \text{$\shufflef$ is an isomorphism} \\
|
2018-04-09 16:02:54 +00:00
|
|
|
|
& \equiv
|
|
|
|
|
\identity
|
2018-05-07 22:25:34 +00:00
|
|
|
|
&& \text{$\isoToId$ is an isomorphism}
|
2018-04-09 16:02:54 +00:00
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
The other direction is analogous.
|
|
|
|
|
|
2018-05-07 08:13:13 +00:00
|
|
|
|
The lemma used in step 2 of this proof states that $\wideoverbar{idToIso} \equiv
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\inv{\shufflef} \comp \idToIso$. This is a rather straight-forward proof
|
2018-05-07 08:13:13 +00:00
|
|
|
|
since being-an-inverse-of is a proposition, so it suffices to show that their
|
|
|
|
|
first components are equal, but this holds judgmentally.
|
2018-04-23 15:06:09 +00:00
|
|
|
|
|
|
|
|
|
This finished the proof that the opposite category is in fact a category. Now,
|
|
|
|
|
to prove that that opposite-of is an involution we must show:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\prod_{\bC \tp \Category} \left(\bC^{\var{Op}}\right)^{\var{Op}} \equiv \bC
|
2018-04-05 18:41:36 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
2018-05-09 16:47:12 +00:00
|
|
|
|
As we have seen the laws in $\left(\bC^{\var{Op}}\right)^{\var{Op}}$ get quite
|
2018-05-24 13:57:30 +00:00
|
|
|
|
involved\footnote{We have not even seen the full story because we have used
|
|
|
|
|
this `interface' for equivalences.}. Luckily since being-a-category is a mere
|
2018-04-23 15:06:09 +00:00
|
|
|
|
proposition, we need not concern ourselves with this bit when proving the above.
|
2018-05-07 08:13:13 +00:00
|
|
|
|
We can use the equality principle for categories that let us prove an equality
|
2018-04-23 15:06:09 +00:00
|
|
|
|
just by giving an equality on the data-part. So, given a category $\bC$ all we
|
|
|
|
|
must provide is the following proof:
|
2018-04-05 18:41:36 +00:00
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\var{raw}\ \left(\bC^{\var{Op}}\right)^{\var{Op}} \equiv \var{raw}\ \bC
|
2018-04-05 18:41:36 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
2018-04-09 16:02:54 +00:00
|
|
|
|
And these are judgmentally the same. I remind the reader that the left-hand side
|
2018-04-23 15:06:09 +00:00
|
|
|
|
is constructed by flipping the arrows, which judgmentally is an involution.
|
|
|
|
|
|
|
|
|
|
\subsection{Category of sets}
|
|
|
|
|
The category of sets has as objects, not types, but only those types that are
|
|
|
|
|
homotopic sets. This is encapsulated in Agda with the following type:
|
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
$$\Set \defeq \sum_{A \tp \MCU} \isSet\ A$$
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
|
|
|
|
The more straight-forward notion of a category where the objects are types is
|
2018-05-07 08:13:13 +00:00
|
|
|
|
not a valid \mbox{(1-)category}. This stems from the fact that types in cubical
|
|
|
|
|
Agda types can have higher homotopic structure.
|
2018-04-23 15:06:09 +00:00
|
|
|
|
|
|
|
|
|
Univalence does not follow immediately from univalence for types:
|
|
|
|
|
%
|
|
|
|
|
$$(A \equiv B) \simeq (A \simeq B)$$
|
|
|
|
|
%
|
|
|
|
|
Because here $A\ B \tp \Type$ whereas the objects in this category have the type
|
2018-05-07 08:13:13 +00:00
|
|
|
|
$\Set$ so we cannot form the type $\var{hA} \simeq \var{hB}$ for objects
|
|
|
|
|
$\var{hA}\;\var{hB} \tp \Set$. In stead I show that this category
|
2018-04-23 15:06:09 +00:00
|
|
|
|
satisfies:
|
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-07 08:13:13 +00:00
|
|
|
|
(\var{hA} \equiv \var{hB}) \simeq (\var{hA} \approxeq \var{hB})
|
2018-04-23 15:06:09 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
2018-05-09 16:13:36 +00:00
|
|
|
|
Which, as we saw in section \S\ref{sec:univalence}, is sufficient to show that the
|
2018-04-23 15:06:09 +00:00
|
|
|
|
category is univalent. The way that I have shown this is with a three-step
|
2018-04-24 12:11:22 +00:00
|
|
|
|
process. For objects $(A, s_A)\; (B, s_B) \tp \Set$ I show the following chain
|
|
|
|
|
of equivalences:
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-04-24 12:11:22 +00:00
|
|
|
|
((A, s_A) \equiv (B, s_B))
|
|
|
|
|
& \simeq (A \equiv B) && \ref{eq:equivPropSig} \\
|
|
|
|
|
& \simeq (A \simeq B) && \text{Univalence} \\
|
|
|
|
|
& \simeq ((A, s_A) \approxeq (B, s_B)) && \text{\ref{eq:equivSig} and \ref{eq:equivIso}}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\end{align*}
|
|
|
|
|
|
|
|
|
|
And since $\simeq$ is an equivalence relation we can chain these equivalences
|
|
|
|
|
together. Step one will be proven with the following lemma:
|
|
|
|
|
%
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:equivPropSig}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\left(\prod_{a \tp A} \isProp\ (P\ a)\right) \to \prod_{x\;y \tp \sum_{a \tp A} P\ a} (x \equiv y) \simeq (\fst\ x \equiv \fst\ y)
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\end{align}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
|
|
|
|
The lemma states that for pairs whose second component are mere propositions
|
2018-05-07 08:13:13 +00:00
|
|
|
|
equality is equivalent to equality of the first components. In this case the
|
2018-04-23 15:06:09 +00:00
|
|
|
|
type-family $P$ is $\isSet$ which itself is a proposition for any type $A \tp
|
|
|
|
|
\Type$. Step two is univalence. Step three will be proven with the following
|
|
|
|
|
lemma:
|
|
|
|
|
%
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:equivSig}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
\prod_{a \tp A} \left( P\ a \simeq Q\ a \right) \to \sum_{a \tp A} P\ a \simeq \sum_{a \tp A} Q\ a
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\end{align}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
|
|
|
|
Which says that if two type-families are equivalent at all points, then pairs
|
2018-05-07 22:25:34 +00:00
|
|
|
|
with identical first components and these families as second components will
|
2018-04-23 15:06:09 +00:00
|
|
|
|
also be equivalent. For our purposes $P \defeq \isEquiv\ A\ B$ and $Q \defeq
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\Isomorphism$. So we must finally prove:
|
2018-04-23 15:06:09 +00:00
|
|
|
|
%
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:equivIso}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\prod_{f \tp A \to B} \left( \isEquiv\ A\ B\ f \simeq \Isomorphism\ f \right)
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
|
2018-05-18 11:14:41 +00:00
|
|
|
|
First, lets prove \ref{eq:equivPropSig}: Let $propP \tp \prod_{a \tp A} \isProp\ (P\ a)$ and $x\;y \tp \sum_{a \tp A} P\ a$ be given. Because
|
2018-05-07 08:13:13 +00:00
|
|
|
|
of $\var{fromIsomorphism}$ it suffices to give an isomorphism between
|
2018-04-24 12:11:22 +00:00
|
|
|
|
$x \equiv y$ and $\fst\ x \equiv \fst\ y$:
|
|
|
|
|
%
|
2018-05-07 08:53:22 +00:00
|
|
|
|
%% FIXME: Too much alignement?
|
|
|
|
|
\begin{equation*}
|
|
|
|
|
\begin{aligned}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
f & \defeq \congruence\ \fst
|
2018-05-07 08:53:22 +00:00
|
|
|
|
&& \tp x \equiv y && \to \fst\ x \equiv \fst\ y \\
|
2018-05-07 08:13:13 +00:00
|
|
|
|
g & \defeq \var{lemSig}\ \var{propP}\ x\ y
|
2018-05-07 08:53:22 +00:00
|
|
|
|
&& \tp \fst\ x \equiv \fst\ y && \to x \equiv y
|
|
|
|
|
\end{aligned}
|
|
|
|
|
\end{equation*}
|
2018-04-24 12:11:22 +00:00
|
|
|
|
%
|
2018-05-23 16:28:27 +00:00
|
|
|
|
\TODO{Is it confusing that I use point-free style here?}Here $\var{lemSig}$ is
|
2018-05-07 08:13:13 +00:00
|
|
|
|
a lemma that says that if the second component of a pair is a proposition, it
|
|
|
|
|
suffices to give a path between its first components to construct an equality of
|
|
|
|
|
the two pairs:
|
2018-04-24 12:11:22 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\var{lemSig} \tp \left( \prod_{x \tp A} \isProp\ (B\ x) \right) \to
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\prod_{u\; v \tp \sum_{a \tp A} B\ a}
|
|
|
|
|
\left( \fst\ u \equiv \fst\ v \right) \to u \equiv v
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
2018-05-23 16:28:27 +00:00
|
|
|
|
The proof that these are indeed inverses has been omitted. The details
|
|
|
|
|
can be found in the module:
|
|
|
|
|
\begin{center}
|
|
|
|
|
\sourcelink{Cat.Categories.Sets}
|
|
|
|
|
\end{center}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
|
2018-05-23 16:28:27 +00:00
|
|
|
|
Now to prove \ref{eq:equivSig}: Let $e \tp \prod_{a \tp A} \left( P\ a
|
|
|
|
|
\simeq Q\ a \right)$ be given. To prove the equivalence, it suffices
|
|
|
|
|
to give an isomorphism between $\sum_{a \tp A} P\ a$ and $\sum_{a \tp
|
|
|
|
|
A} Q\ a$, but since they have identical first components it suffices
|
|
|
|
|
to give an isomorphism between $P\ a$ and $Q\ a$ for all $a \tp A$.
|
|
|
|
|
This is exactly what we can get from the equivalence $e$.\QED
|
2018-04-23 15:06:09 +00:00
|
|
|
|
|
2018-04-24 12:11:22 +00:00
|
|
|
|
Lastly we prove \ref{eq:equivIso}. Let $f \tp A \to B$ be given. For the maps we
|
|
|
|
|
choose:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\var{toIso}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
& \tp \isEquiv\ f \to \Isomorphism\ f \\
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\var{fromIso}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
& \tp \Isomorphism\ f \to \isEquiv\ f
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
2018-05-09 16:13:36 +00:00
|
|
|
|
As mentioned in section \S\ref{sec:equiv}. These maps are not in general inverses
|
2018-04-24 12:11:22 +00:00
|
|
|
|
of each other. In stead, we will use the fact that $A$ and $B$ are sets. The first thing we must prove is:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\var{fromIso} \comp \var{toIso} \equiv \identity_{\isEquiv\ f}
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
For this we can use the fact that being-an-equivalence is a mere proposition.
|
|
|
|
|
For the other direction:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\var{toIso} \comp \var{fromIso} \equiv \identity_{\Isomorphism\ f}
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
2018-05-09 16:24:07 +00:00
|
|
|
|
We will show that $\Isomorphism\ f$ is also a mere proposition. To this
|
|
|
|
|
end, let $X\;Y \tp \Isomorphism\ f$ be given. Name the maps $x\;y \tp B
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\to A$ respectively. Now, the proof that $X$ and $Y$ are the same is a pair of
|
2018-05-07 08:13:13 +00:00
|
|
|
|
paths: $p \tp x \equiv y$ and $\Path\ (\lambda\; i \to
|
|
|
|
|
\var{AreInverses}\ f\ (p\ i))\ \mathcal{X}\ \mathcal{Y}$ where $\mathcal{X}$
|
2018-04-24 12:11:22 +00:00
|
|
|
|
and $\mathcal{Y}$ denotes the witnesses that $x$ (respectively $y$) is an
|
2018-05-18 11:14:41 +00:00
|
|
|
|
inverse to $f$. The path $p$ is inhabited by:
|
2018-04-24 12:11:22 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
x
|
2018-05-24 13:57:30 +00:00
|
|
|
|
& = x \comp \identity \\
|
2018-04-24 12:11:22 +00:00
|
|
|
|
& \equiv x \comp (f \comp y)
|
|
|
|
|
&& \text{$y$ is an inverse to $f$} \\
|
|
|
|
|
& \equiv (x \comp f) \comp y \\
|
|
|
|
|
& \equiv \identity \comp y
|
|
|
|
|
&& \text{$x$ is an inverse to $f$} \\
|
2018-05-24 13:57:30 +00:00
|
|
|
|
& = y
|
2018-04-24 12:11:22 +00:00
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
For the other (dependent) path we can prove that being-an-inverse-of is a
|
|
|
|
|
proposition and then use $\lemPropF$. So we prove the generalization:
|
|
|
|
|
%
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:propAreInversesGen}
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\prod_{g \tp B \to A} \isProp\ (\var{AreInverses}\ f\ g)
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{align}
|
2018-04-24 12:11:22 +00:00
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
But $\var{AreInverses}\ f\ g$ is a pair of equations on arrows, so we use
|
2018-04-24 12:11:22 +00:00
|
|
|
|
$\propSig$ and the fact that both $A$ and $B$ are sets to close this proof.
|
|
|
|
|
|
2018-05-15 15:11:01 +00:00
|
|
|
|
%% \subsection{Category of categories}
|
2018-04-23 15:06:09 +00:00
|
|
|
|
|
2018-05-15 15:11:01 +00:00
|
|
|
|
%% Note that this category does in fact not exist. In stead I provide
|
|
|
|
|
%% the definition of the ``raw'' category as well as some of the laws.
|
2018-04-23 15:06:09 +00:00
|
|
|
|
|
2018-05-15 15:11:01 +00:00
|
|
|
|
%% Furthermore I provide some helpful lemmas about this raw category.
|
|
|
|
|
%% For instance I have shown what would be the exponential object in
|
|
|
|
|
%% such a category.
|
|
|
|
|
|
|
|
|
|
%% These lemmas can be used to provide the actual exponential object
|
|
|
|
|
%% in a context where we have a witness to this being a category. This
|
|
|
|
|
%% is useful if this library is later extended to talk about higher
|
|
|
|
|
%% categories.
|
2018-04-23 15:06:09 +00:00
|
|
|
|
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\section{Products}
|
2018-05-09 16:13:36 +00:00
|
|
|
|
\label{sec:products}
|
2018-05-09 16:47:12 +00:00
|
|
|
|
In the following a technique for using categories to prove properties will be
|
|
|
|
|
demonstrated. The goal in this section is to show that products are
|
|
|
|
|
propositions:
|
2018-04-24 12:11:22 +00:00
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\prod_{\bC \tp \Category} \prod_{A\;B \tp \Object} \isProp\ (\var{Product}\ \bC\ A\ B)
|
2018-04-24 12:11:22 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
2018-05-07 08:13:13 +00:00
|
|
|
|
Where $\var{Product}\ \bC\ A\ B$ denotes the type of products of objects $A$
|
2018-04-24 12:11:22 +00:00
|
|
|
|
and $B$ in the category $\bC$. I do this by constructing a category whose
|
|
|
|
|
terminal objects are equivalent to products in $\bC$, and since terminal objects
|
2018-05-01 16:55:28 +00:00
|
|
|
|
are propositional in a proper category and equivalences preserve homotopy level,
|
2018-04-24 12:11:22 +00:00
|
|
|
|
then we know that products also are propositions. But before we get to that,
|
2018-05-09 16:47:12 +00:00
|
|
|
|
we recall the definition of products.
|
2018-04-24 12:11:22 +00:00
|
|
|
|
|
2018-05-07 08:13:13 +00:00
|
|
|
|
\subsection{Definition of products}
|
2018-04-26 08:22:15 +00:00
|
|
|
|
Given a category $\bC$ and two objects $A$ and $B$ in $\bC$ we define the
|
2018-05-07 08:13:13 +00:00
|
|
|
|
product (object) of $A$ and $B$ to be an object $A \x B$ in $\bC$ and two arrows
|
|
|
|
|
$\pi_1 \tp A \x B \to A$ and $\pi_2 \tp A \x B \to B$ called the projections of
|
|
|
|
|
the product. The projections must satisfy the following property:
|
2018-04-24 12:11:22 +00:00
|
|
|
|
|
|
|
|
|
For all $X \tp Object$, $f \tp \Arrow\ X\ A$ and $g \tp \Arrow\ X\ B$ we have
|
|
|
|
|
that there exists a unique arrow $\pi \tp \Arrow\ X\ (A \x B)$ satisfying
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:umpProduct}
|
|
|
|
|
%% \prod_{X \tp Object} \prod_{f \tp \Arrow\ X\ A} \prod_{g \tp \Arrow\ X\ B}\\
|
|
|
|
|
%% \uexists_{f \x g \tp \Arrow\ X\ (A \x B)}
|
|
|
|
|
\pi_1 \lll \pi \equiv f \x \pi_2 \lll \pi \equiv g
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-04-24 12:11:22 +00:00
|
|
|
|
$\pi$ is called the product (arrow) of $f$ and $g$.
|
|
|
|
|
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\subsection{Span category}
|
2018-04-25 06:21:45 +00:00
|
|
|
|
Given a base category $\bC$ and two objects in this category $\pairA$ and
|
2018-05-15 14:08:29 +00:00
|
|
|
|
$\pairB$ we can construct the \nomenindex{span category}:
|
2018-04-25 06:21:45 +00:00
|
|
|
|
|
2018-05-01 16:55:28 +00:00
|
|
|
|
The type of objects in this category will be an object in the underlying
|
|
|
|
|
category, $X$, and two arrows (also from the underlying category)
|
2018-04-25 06:21:45 +00:00
|
|
|
|
$\Arrow\ X\ \pairA$ and $\Arrow\ X\ \pairB$.
|
|
|
|
|
|
|
|
|
|
\newcommand\pairf{\ensuremath{f}}
|
|
|
|
|
\newcommand\pairFst{\mathcal{\pi_1}}
|
|
|
|
|
\newcommand\pairSnd{\mathcal{\pi_2}}
|
|
|
|
|
|
|
|
|
|
An arrow between objects $A ,\ a_0 ,\ a_1$ and $B ,\ b_0 ,\ b_1$ in this
|
|
|
|
|
category will consist of an arrow from the underlying category $\pairf \tp
|
|
|
|
|
\Arrow\ A\ B$ satisfying:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:pairArrowLaw}
|
2018-04-26 08:22:15 +00:00
|
|
|
|
b_0 \lll f \equiv a_0 \x
|
|
|
|
|
b_1 \lll f \equiv a_1
|
2018-04-25 06:21:45 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
|
|
|
|
|
The identity morphism is the identity morphism from the underlying category.
|
|
|
|
|
This choice satisfies \ref{eq:pairArrowLaw} because of the right-identity law
|
|
|
|
|
from the underlying category.
|
|
|
|
|
|
|
|
|
|
For composition of arrows $f \tp \Arrow\ A\ B$ and $g \tp \Arrow\ B\ C$ we
|
|
|
|
|
choose $g \lll f$ and we must now verify that it satisfies
|
|
|
|
|
\ref{eq:pairArrowLaw}:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
c_0 \lll (f \lll g)
|
|
|
|
|
& \equiv
|
|
|
|
|
(c_0 \lll f) \lll g
|
|
|
|
|
&& \text{Associativity} \\
|
|
|
|
|
& \equiv
|
|
|
|
|
b_0 \lll g
|
|
|
|
|
&& \text{$f$ satisfies \ref{eq:pairArrowLaw}} \\
|
|
|
|
|
& \equiv
|
|
|
|
|
a_0
|
|
|
|
|
&& \text{$g$ satisfies \ref{eq:pairArrowLaw}} \\
|
|
|
|
|
\end{align*}
|
2018-04-26 08:22:15 +00:00
|
|
|
|
%
|
|
|
|
|
Now we must verify the category-laws. For all the laws we will follow the
|
|
|
|
|
pattern of using the law from the underlying category, and that the type of
|
|
|
|
|
arrows form a set. For instance, to prove associativity we must prove that
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:productAssoc}
|
|
|
|
|
\overline{h} \lll (\overline{g} \lll \overline{f})
|
|
|
|
|
\equiv
|
|
|
|
|
(\overline{h} \lll \overline{g}) \lll \overline{f}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-07 22:25:34 +00:00
|
|
|
|
Here $\lll$ refers to the `embellished' composition and $\overline{f}$,
|
2018-04-26 08:22:15 +00:00
|
|
|
|
$\overline{g}$ and $\overline{h}$ are triples consisting of arrows from the
|
|
|
|
|
underlying category ($f$, $g$ and $h$) and a pair of witnesses to
|
|
|
|
|
\ref{eq:pairArrowLaw}.
|
|
|
|
|
%% Luckily those winesses are paths in the hom-set of the
|
|
|
|
|
%% underlying category which is a set, so these are mere propositions.
|
2018-05-07 22:25:34 +00:00
|
|
|
|
The proof obligations is consists of two things. The first one is:
|
2018-04-26 08:22:15 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:productAssocUnderlying}
|
|
|
|
|
h \lll (g \lll f)
|
|
|
|
|
\equiv
|
|
|
|
|
(h \lll g) \lll f
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-07 22:25:34 +00:00
|
|
|
|
And the other proof obligation is that the witness to \ref{eq:pairArrowLaw} for
|
|
|
|
|
the left-hand-side and the right-hand-side are the same.
|
|
|
|
|
|
|
|
|
|
The proof of the first goal comes directly from the underlying category. The
|
|
|
|
|
type of the second goal is very complicated. I will not write it out in full
|
|
|
|
|
here, but it suffices to show the type of the path-space. Note that the arrows
|
|
|
|
|
in \ref{eq:productAssoc} are arrows from $\mathcal{A} = (A , a_{\pairA} ,
|
|
|
|
|
a_{\pairB})$ to $\mathcal{D} = (D , d_{\pairA} , d_{\pairB})$ where
|
|
|
|
|
$a_{\pairA}$, $a_{\pairB}$, $d_{\pairA}$ and $d_{\pairB}$ are arrows in the
|
|
|
|
|
underlying category. Given that $p$ is the chosen proof of
|
|
|
|
|
\ref{eq:productAssocUnderlying} we then have that the witness to
|
|
|
|
|
\ref{eq:pairArrowLaw} vary over the type:
|
2018-04-26 08:22:15 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:productPath}
|
2018-05-07 08:53:22 +00:00
|
|
|
|
λ\ i → d_{\pairA} \lll p\ i ≡ 2 a_{\pairA} × d_{\pairB} \lll p\ i ≡ a_{\pairB}
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
And these paths are in the type of the hom-set of the underlying category, so
|
|
|
|
|
they are mere propositions. We cannot apply the fact that arrows in $\bC$ are
|
|
|
|
|
sets directly, however, since $\isSet$ only talks about non-dependent paths, in
|
|
|
|
|
stead we generalize \ref{eq:productPath} to:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:productEqPrinc}
|
2018-05-07 08:53:22 +00:00
|
|
|
|
\prod_{f \tp \Arrow\ X\ Y} \isProp\ \left( y_{\pairA} \lll f ≡ x_{\pairA} × y_{\pairB} \lll f ≡ x_{\pairB} \right)
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-07 08:53:22 +00:00
|
|
|
|
For all objects $X , x_{\pairA} , x_{\pairB}$ and $Y , y_{\pairA} , y_{\pairB}$,
|
|
|
|
|
but this follows from pairs preserving homotopical structure and arrows in the
|
2018-04-26 08:22:15 +00:00
|
|
|
|
underlying category being sets. This gives us an equality principle for arrows
|
|
|
|
|
in this category that says that to prove two arrows $f, f_0, f_1$ and $g, g_0,
|
2018-05-07 08:53:22 +00:00
|
|
|
|
g_1$ equal it suffices to give a proof that $f$ and $g$ are equal.
|
2018-04-26 08:22:15 +00:00
|
|
|
|
%% %
|
|
|
|
|
%% $$
|
|
|
|
|
%% \prod_{(f, f_0, f_1)\; (g,g_0,g_1) \tp \Arrow\ X\ Y} f \equiv g \to (f, f_0, f_1) \equiv (g,g_0,g_1)
|
|
|
|
|
%% $$
|
|
|
|
|
%% %
|
|
|
|
|
And thus we have proven \ref{eq:productAssoc} simply with
|
|
|
|
|
\ref{eq:productAssocUnderlying}.
|
|
|
|
|
|
|
|
|
|
Now we must prove that arrows form a set:
|
|
|
|
|
%
|
|
|
|
|
$$
|
|
|
|
|
\isSet\ (\Arrow\ \mathcal{X}\ \mathcal{Y})
|
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
Since pairs preserve homotopical structure this reduces to:
|
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-07 08:53:22 +00:00
|
|
|
|
\isSet\ (\Arrow_{\bC}\ X\ Y)
|
2018-04-26 08:22:15 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
Which holds. And
|
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-07 08:53:22 +00:00
|
|
|
|
\prod_{f \tp \Arrow\ X\ Y}
|
|
|
|
|
\isSet\ \left( y_{\pairA} \lll f ≡ x_{\pairA}
|
|
|
|
|
× y_{\pairB} \lll f ≡ x_{\pairB}
|
|
|
|
|
\right)
|
2018-04-26 08:22:15 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
This we get from \ref{eq:productEqPrinc} and the fact that homotopical structure
|
|
|
|
|
is cumulative.
|
|
|
|
|
|
2018-05-15 14:08:29 +00:00
|
|
|
|
This finishes the proof that this is a valid pre category.
|
2018-04-26 08:22:15 +00:00
|
|
|
|
|
|
|
|
|
\subsubsection{Univalence}
|
|
|
|
|
To prove that this is a proper category it must be shown that it is univalent.
|
2018-05-07 08:53:22 +00:00
|
|
|
|
That is, for any two objects $\mathcal{X} = (X, x_{\mathcal{A}} , x_{\mathcal{B}})$
|
|
|
|
|
and $\mathcal{Y} = Y, y_{\mathcal{A}}, y_{\mathcal{B}}$ I will show:
|
2018-04-26 08:22:15 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
(\mathcal{X} \equiv \mathcal{Y}) \cong (\mathcal{X} \approxeq \mathcal{Y})
|
|
|
|
|
\end{align}
|
|
|
|
|
|
|
|
|
|
I do this by showing that the following sequence of types are isomorphic.
|
|
|
|
|
|
|
|
|
|
The first type is:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:univ-0}
|
2018-05-07 08:53:22 +00:00
|
|
|
|
(X , x_{\mathcal{A}} , x_{\mathcal{B}}) ≡ (Y , y_{\mathcal{A}} , y_{\mathcal{B}})
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
The next types will be the triple:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:univ-1}
|
|
|
|
|
\begin{split}
|
|
|
|
|
p \tp & X \equiv Y \\
|
2018-05-07 08:53:22 +00:00
|
|
|
|
& \Path\ (λ i → \Arrow\ (p\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
|
|
|
|
& \Path\ (λ i → \Arrow\ (p\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\end{split}
|
|
|
|
|
%% \end{split}
|
|
|
|
|
\end{align}
|
|
|
|
|
|
|
|
|
|
The next type is very similar, but in stead of a path we will have an
|
|
|
|
|
isomorphism, and create a path from this:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:univ-2}
|
|
|
|
|
\begin{split}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\var{iso} \tp & X \approxeq Y \\
|
2018-05-07 08:53:22 +00:00
|
|
|
|
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
|
|
|
|
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\end{split}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-09 16:24:07 +00:00
|
|
|
|
Where $\widetilde{p} \defeq \isoToId\ \var{iso} \tp X \equiv Y$.
|
2018-04-26 08:22:15 +00:00
|
|
|
|
|
|
|
|
|
Finally we have the type:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:univ-3}
|
2018-05-07 08:53:22 +00:00
|
|
|
|
(X , x_{\mathcal{A}} , x_{\mathcal{B}}) ≊ (Y , y_{\mathcal{A}} , y_{\mathcal{B}})
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
|
|
|
|
|
\emph{Proposition} \ref{eq:univ-0} is isomorphic to \ref{eq:univ-1}: This is
|
|
|
|
|
just an application of the fact that a path between two pairs $a_0, a_1$ and
|
|
|
|
|
$b_0, b_1$ corresponds to a pair of paths between $a_0,b_0$ and $a_1,b_1$ (check
|
|
|
|
|
the implementation for the details).
|
|
|
|
|
|
|
|
|
|
\emph{Proposition} \ref{eq:univ-1} is isomorphic to \ref{eq:univ-2}:
|
2018-05-23 16:28:27 +00:00
|
|
|
|
This proof of this has been omitted but can be found in the module:
|
2018-05-24 13:57:30 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{center}%
|
2018-05-23 16:28:27 +00:00
|
|
|
|
\sourcelink{Cat.Categories.Span}
|
|
|
|
|
\end{center}
|
2018-05-24 13:57:30 +00:00
|
|
|
|
%
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\emph{Proposition} \ref{eq:univ-2} is isomorphic to \ref{eq:univ-3}: For this I
|
2018-05-07 22:25:34 +00:00
|
|
|
|
will show two corollaries of \ref{eq:coeCod}: For an isomorphism $(\iota,
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\inv{\iota}, \var{inv}) \tp A \cong B$, arrows $f \tp \Arrow\ A\ X$, $g \tp
|
|
|
|
|
\Arrow\ B\ X$ and a heterogeneous path between them, $q \tp \Path\ (\lambda i
|
2018-05-07 08:53:22 +00:00
|
|
|
|
\to p_{\var{dom}}\ i)\ f\ g$, where $p_{\var{dom}} \tp \Arrow\ A\ X \equiv
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\Arrow\ B\ X$ is a path induced by $\var{iso}$, we have the following two
|
|
|
|
|
results
|
2018-04-26 08:22:15 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\label{eq:domain-twist-0}
|
|
|
|
|
f & \equiv g \lll \iota \\
|
|
|
|
|
\label{eq:domain-twist-1}
|
|
|
|
|
g & \equiv f \lll \inv{\iota}
|
2018-04-26 08:22:15 +00:00
|
|
|
|
\end{align}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
2018-05-23 16:28:27 +00:00
|
|
|
|
The proof is omitted but can be found in the module:
|
|
|
|
|
\begin{center}
|
|
|
|
|
\sourcelink{Cat.Category}
|
|
|
|
|
\end{center}
|
2018-04-24 12:11:22 +00:00
|
|
|
|
|
2018-05-07 22:25:34 +00:00
|
|
|
|
Now we can prove the equivalence in the following way: Given $(f, \inv{f},
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\var{inv}_f) \tp X \cong Y$ and two heterogeneous paths
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-05-07 08:53:22 +00:00
|
|
|
|
p_{\mathcal{A}} & \tp \Path\ (\lambda i \to p_{\var{dom}}\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}\\
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
2018-05-07 08:53:22 +00:00
|
|
|
|
q_{\mathcal{B}} & \tp \Path\ (\lambda i \to p_{\var{dom}}\ i)\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
2018-05-07 08:53:22 +00:00
|
|
|
|
all as in \ref{eq:univ-2}. I use $p_{\var{dom}}$ here again to mean the path
|
2018-05-01 16:55:28 +00:00
|
|
|
|
induced by the isomorphism $f, \inv{f}$. I must now construct an isomorphism
|
2018-05-07 08:53:22 +00:00
|
|
|
|
$(X, x_{\mathcal{A}}, x_{\mathcal{B}}) \approxeq (Y, y_{\mathcal{A}}, y_{\mathcal{B}})$
|
2018-05-01 16:55:28 +00:00
|
|
|
|
as in \ref{eq:univ-3}. That is, an isomorphism in the present category. I remind
|
|
|
|
|
the reader that such a gadget is a triple. The first component shall be:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
f \tp \Arrow\ X\ Y
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
To show that this choice fits the bill I must now verify that it satisfies
|
|
|
|
|
\ref{eq:pairArrowLaw}, which in this case becomes:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
2018-05-24 13:57:30 +00:00
|
|
|
|
(y_{\mathcal{A}} \lll f ≡ x_{\mathcal{A}}) × (y_{\mathcal{B}} \lll f ≡ x_{\mathcal{B}})
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-18 11:14:41 +00:00
|
|
|
|
Which, since $f$ is an isomorphism and $p_{\mathcal{A}}$ (resp.\ $p_{\mathcal{B}}$)
|
2018-05-01 16:55:28 +00:00
|
|
|
|
is a path varying according to a path constructed from this isomorphism, this is
|
|
|
|
|
exactly what \ref{eq:domain-twist-0} gives us.
|
|
|
|
|
%
|
2018-05-07 22:25:34 +00:00
|
|
|
|
The other direction is quite analogous. We choose $\inv{f}$ as the morphism and
|
2018-05-01 16:55:28 +00:00
|
|
|
|
prove that it satisfies \ref{eq:pairArrowLaw} with \ref{eq:domain-twist-1}.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-01 16:55:28 +00:00
|
|
|
|
We must now show that this choice of arrows indeed form an isomorphism. Our
|
|
|
|
|
equality principle for arrows in this category (\ref{eq:productEqPrinc}) gives
|
|
|
|
|
us that it suffices to show that $f$ and $\inv{f}$, this is exactly
|
|
|
|
|
$\var{inv}_f$.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-09 16:47:12 +00:00
|
|
|
|
This concludes the first direction of the isomorphism that we are constructing.
|
|
|
|
|
For the other direction we are given the isomorphism:
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-18 11:14:41 +00:00
|
|
|
|
(f, \inv{f}, \var{inv}_f, \var{inv}_{\inv{f}})
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\tp
|
2018-05-07 08:53:22 +00:00
|
|
|
|
(X, x_{\mathcal{A}}, x_{\mathcal{B}}) \approxeq (Y, y_{\mathcal{A}}, y_{\mathcal{B}})
|
2018-05-01 16:55:28 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
Projecting out the first component gives us the isomorphism
|
|
|
|
|
%
|
|
|
|
|
$$
|
2018-05-18 11:14:41 +00:00
|
|
|
|
(\fst\ f, \fst\ \inv{f}
|
|
|
|
|
, \congruence\ \fst\ \var{inv}_f
|
|
|
|
|
, \congruence\ \fst\ \var{inv}_{\inv{f}}
|
|
|
|
|
)
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\tp X \approxeq Y
|
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
This gives rise to the following paths:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\begin{split}
|
|
|
|
|
\widetilde{p} & \tp X \equiv Y \\
|
2018-05-07 08:53:22 +00:00
|
|
|
|
\widetilde{p}_{\mathcal{A}} & \tp \Arrow\ X\ \mathcal{A} \equiv \Arrow\ Y\ \mathcal{A} \\
|
|
|
|
|
\widetilde{p}_{\mathcal{B}} & \tp \Arrow\ X\ \mathcal{B} \equiv \Arrow\ Y\ \mathcal{B}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{split}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
It then remains to construct the two paths:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\begin{split}
|
|
|
|
|
\label{eq:product-paths}
|
2018-05-07 08:53:22 +00:00
|
|
|
|
& \Path\ (λ i → \widetilde{p}_{\mathcal{A}}\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}\\
|
|
|
|
|
& \Path\ (λ i → \widetilde{p}_{\mathcal{B}}\ i)\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{split}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
This is achieved with the following lemma:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\prod_{a \tp A} \prod_{b \tp B} \prod_{q \tp A \equiv B} \var{coe}\ q\ a ≡ b →
|
|
|
|
|
\Path\ (λ i → q\ i)\ a\ b
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
Which is used without proof. See the implementation for the details.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\ref{eq:product-paths} is then proven with the propositions:
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\begin{split}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
%% \label{eq:product-paths}
|
2018-05-07 08:53:22 +00:00
|
|
|
|
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}} ≡ y_{\mathcal{A}}\\
|
|
|
|
|
\var{coe}\ \widetilde{p}_{\mathcal{B}}\ x_{\mathcal{B}} ≡ y_{\mathcal{B}}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{split}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
The proof of the first one is:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-05-07 08:53:22 +00:00
|
|
|
|
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
& ≡ x_{\mathcal{A}} \lll \fst\ \inv{f} && \text{\ref{eq:coeDom} and the isomorphism $f, \inv{f}$} \\
|
2018-05-07 08:53:22 +00:00
|
|
|
|
& ≡ y_{\mathcal{A}} && \text{\ref{eq:pairArrowLaw} for $\inv{f}$}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
We have now constructed the maps between \ref{eq:univ-0} and \ref{eq:univ-1}. It
|
|
|
|
|
remains to show that they are inverses of each other. To cut a long story short,
|
|
|
|
|
the proof uses the fact that isomorphism-of is propositional and that arrows (in
|
2018-05-07 22:25:34 +00:00
|
|
|
|
both categories) are sets. The reader is referred to the implementation for the
|
2018-05-01 16:55:28 +00:00
|
|
|
|
gory details.
|
|
|
|
|
%
|
|
|
|
|
\subsection{Propositionality of products}
|
|
|
|
|
%
|
2018-05-18 11:14:41 +00:00
|
|
|
|
Now that we have constructed the span category\index{span category} I
|
|
|
|
|
will demonstrate how to use this to prove that products are
|
|
|
|
|
propositional. I will do this by showing that terminal objects in this
|
|
|
|
|
category are equivalent to products:
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\var{Terminal} ≃ \var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
And as always we do this by constructing an isomorphism:
|
|
|
|
|
%
|
|
|
|
|
In the direction $\var{Terminal} → \var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}$
|
2018-05-18 11:14:41 +00:00
|
|
|
|
we are given a terminal object $X, x_𝒜, x_ℬ$. $X$ will be the product-object and
|
2018-05-01 16:55:28 +00:00
|
|
|
|
$x_𝒜, x_ℬ$ will be the product arrows, so it just remains to verify that this is
|
|
|
|
|
indeed a product. That is, for an object $Y$ and two arrows $y_𝒜 \tp
|
|
|
|
|
\Arrow\ Y\ 𝒜$, $y_ℬ\ \Arrow\ Y\ ℬ$ we must find a unique arrow $f \tp
|
|
|
|
|
\Arrow\ Y\ X$ satisfying:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:pairCondRev}
|
2018-05-24 13:57:30 +00:00
|
|
|
|
%% \begin{split}
|
|
|
|
|
( x_𝒜 \lll f ≡ y_𝒜 )
|
|
|
|
|
\x
|
|
|
|
|
( x_ℬ \lll f ≡ y_ℬ )
|
|
|
|
|
%% \end{split}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
Since $X, x_𝒜, x_ℬ$ is a terminal object there is a \emph{unique} arrow from
|
|
|
|
|
this object to any other object, so also $Y, y_𝒜, y_ℬ$ in particular (which is
|
2018-05-15 14:08:29 +00:00
|
|
|
|
also an object in the span category). The arrow we will play the role of $f$ and
|
2018-05-01 16:55:28 +00:00
|
|
|
|
it immediately satisfies \ref{eq:pairCondRev}. Any other arrow satisfying these
|
|
|
|
|
conditions will be equal since $f$ is unique.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-01 16:55:28 +00:00
|
|
|
|
For the other direction we are now given a product $X, x_𝒜, x_ℬ$. Again this
|
|
|
|
|
will be the terminal object. So now it remains that for any other object there
|
2018-05-07 22:25:34 +00:00
|
|
|
|
is a unique arrow from that object into $X, x_𝒜, x_ℬ$. Let $Y, y_𝒜, y_ℬ$ be
|
2018-05-01 16:55:28 +00:00
|
|
|
|
another object. As the arrow $\Arrow\ Y\ X$ we choose the product-arrow $y_𝒜 \x
|
|
|
|
|
y_ℬ$. Since this is a product-arrow it satisfies \ref{eq:pairCondRev}. Let us
|
|
|
|
|
name the witness to this $\phi_{y_𝒜 \x y_ℬ}$. So we have picked as our center of
|
|
|
|
|
contraction $y_𝒜 \x y_ℬ , \phi_{y_𝒜 \x y_ℬ}$ we must now show that it is
|
|
|
|
|
contractible. So let $f \tp \Arrow\ X\ Y$ and $\phi_f$ be given (here $\phi_f$
|
|
|
|
|
is the proof that $f$ satisfies \ref{eq:pairCondRev}). The proof will be a pair
|
|
|
|
|
of proofs:
|
|
|
|
|
%
|
|
|
|
|
\begin{alignat}{3}
|
|
|
|
|
p \tp & \Path\ (\lambda i \to \Arrow\ X\ Y)\quad
|
|
|
|
|
&& f\quad && y_𝒜 \x y_ℬ \\
|
|
|
|
|
& \Path\ (\lambda i \to \Phi\ (p\ i))\quad
|
|
|
|
|
&& \phi_f\quad && \phi_{y_𝒜 \x y_ℬ}
|
|
|
|
|
\end{alignat}
|
|
|
|
|
%
|
|
|
|
|
Here $\Phi$ is given as:
|
|
|
|
|
$$
|
|
|
|
|
\prod_{f \tp \Arrow\ Y\ X}
|
2018-05-24 13:57:30 +00:00
|
|
|
|
( x_𝒜 \lll f ≡ y_𝒜 )
|
|
|
|
|
×
|
|
|
|
|
( x_ℬ \lll f ≡ y_ℬ )
|
2018-05-01 16:55:28 +00:00
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
$p$ follows from the universal property of $y_𝒜 \x y_ℬ$. For the latter we will
|
|
|
|
|
again use the same trick we did in \ref{eq:propAreInversesGen} and prove this
|
|
|
|
|
more general result:
|
|
|
|
|
%
|
|
|
|
|
$$
|
|
|
|
|
\prod_{f \tp \Arrow\ Y\ X} \isProp\ (
|
2018-05-24 13:57:30 +00:00
|
|
|
|
( x_𝒜 \lll f ≡ y_𝒜 )
|
|
|
|
|
×
|
|
|
|
|
( x_ℬ \lll f ≡ y_ℬ )
|
2018-05-01 16:55:28 +00:00
|
|
|
|
)
|
|
|
|
|
$$
|
|
|
|
|
%
|
|
|
|
|
Which follows from arrows being sets and pairs preserving such. Thus we can
|
|
|
|
|
close the final proof with an application of $\lemPropF$.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-01 16:55:28 +00:00
|
|
|
|
This concludes the proof $\var{Terminal} ≃
|
|
|
|
|
\var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}$ and since we have that equivalences
|
|
|
|
|
preserve homotopic levels along with \ref{eq:termProp} we get our final result.
|
|
|
|
|
That in any category:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\prod_{A\ B \tp \Object} \isProp\ (\var{Product}\ \bC\ A\ B)
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\section{Functors and natural transformations}
|
|
|
|
|
For the sake of completeness I will mention the definition of functors
|
|
|
|
|
and natural transformations. Please refer to the implementation for
|
|
|
|
|
the full details.
|
|
|
|
|
%
|
|
|
|
|
\subsection{Functors}
|
|
|
|
|
Given two categories $\bC$ and $\bD$ a functor consists of the
|
|
|
|
|
following data:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
\omapF & \tp ℂ.\Object → 𝔻.\Object \\
|
|
|
|
|
\fmap & \tp ℂ.\Arrow\ A\ B → 𝔻.\Arrow\ (\omapF\ A)\ (\omapF\ B)
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
And the following laws:
|
|
|
|
|
\begin{align*}
|
|
|
|
|
\fmap\ ℂ.\identity & ≡ 𝔻.identity \\
|
|
|
|
|
\fmap\ (g \clll f) & ≡ \fmap\ g \dlll \fmap\ f
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
The implementation can be found here:
|
|
|
|
|
%
|
|
|
|
|
\begin{center}
|
|
|
|
|
\sourcelink{Cat.Category.Functor}
|
|
|
|
|
\end{center}
|
|
|
|
|
\subsection{Natural Transformation}
|
|
|
|
|
Given two functors between categories $\bC$ and $\bD$. Name them
|
|
|
|
|
$\FunF$ and $\FunG$. A natural transformation is a family of arrows:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
\prod_{C \tp ℂ.\Object} \bD.\Arrow\ (\omapF\ C)\ (\omapG\ C)
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
This family of arrows can be seen as the data. If $\theta$ is a
|
|
|
|
|
natural transformation $\theta\ C$ will be called the component (of
|
|
|
|
|
$\theta$) at $C$. The laws of this family of morphism is the
|
|
|
|
|
naturality condition:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
\prod_{f \tp ℂ.\Arrow\ A\ B}
|
|
|
|
|
(θ\ B) \dlll (\FunF.\fmap\ f) ≡ (\FunG.\fmap\ f) \dlll (θ\ A)
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
The implementation can be found here:
|
|
|
|
|
%
|
|
|
|
|
\begin{center}
|
|
|
|
|
\sourcelink{Cat.Category.NaturalTransformation}
|
|
|
|
|
\end{center}
|
|
|
|
|
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\section{Monads}
|
2018-05-09 16:13:36 +00:00
|
|
|
|
\label{sec:monads}
|
2018-05-07 22:25:34 +00:00
|
|
|
|
In this section I present two formulations of monads. The two representations
|
|
|
|
|
are referred to as the monoidal- and Kleisli- representation respectively or
|
|
|
|
|
simply monoidal monads and Kleisli monads for short. We then show that the two
|
|
|
|
|
formulations are equivalent, which due to univalence gives us a path between the
|
|
|
|
|
two types.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-22 11:45:52 +00:00
|
|
|
|
Let a category $\bC$ be given. In the remainder of this sections all
|
|
|
|
|
objects and arrows will implicitly refer to objects and arrows in this
|
|
|
|
|
category. I will also use the notation $\EndoR$ to refer to an
|
|
|
|
|
endofunctor on this category. Its map on objects will be denoted
|
|
|
|
|
$\omapR$ and its map on arrows will be denoted $\fmap$. Likewise I
|
|
|
|
|
will use the notation $\pureNT$ to refer to a natural transformation
|
|
|
|
|
and its component at a given (implicit) object will be denoted
|
|
|
|
|
$\pure$.
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
|
|
|
|
\subsection{Monoidal formulation}
|
|
|
|
|
The monoidal formulation of monads consists of the following data:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:monad-monoidal-data}
|
|
|
|
|
\begin{split}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\EndoR & \tp \Functor\ ℂ\ \bC \\
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\pureNT & \tp \NT{\EndoR^0}{\EndoR} \\
|
|
|
|
|
\joinNT & \tp \NT{\EndoR^2}{\EndoR}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{split}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
|
|
|
|
Here $\NTsym$ denotes natural transformations, the super-script in $\EndoR^2$
|
|
|
|
|
Denotes the composition of $\EndoR$ with itself. By the same token $\EndoR^0$ is
|
|
|
|
|
a curious way of denoting the identity functor. This notation has been chosen
|
|
|
|
|
for didactic purposes.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-01 16:55:28 +00:00
|
|
|
|
Denote the arrow-map of $\EndoR$ as $\fmap$, then this data must satisfy the
|
|
|
|
|
following laws:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\label{eq:monad-monoidal-laws-0}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\join \lll \fmap\ \join
|
2018-05-15 14:08:29 +00:00
|
|
|
|
& ≡ \join \lll \join \\
|
|
|
|
|
\label{eq:monad-monoidal-laws-1}
|
|
|
|
|
\join \lll \pure\ & ≡ \identity \\
|
|
|
|
|
\label{eq:monad-monoidal-laws-2}
|
2018-05-09 16:24:07 +00:00
|
|
|
|
\join \lll \fmap\ \pure & ≡ \identity
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{align}
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\newcommand\monoidallaws{\ref{eq:monad-monoidal-laws-0}, \ref{eq:monad-monoidal-laws-1} and \ref{eq:monad-monoidal-laws-2}}%
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
|
|
|
|
The implicit arguments to the arrows above have been left out and the objects
|
|
|
|
|
they range over are universally quantified.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\subsection{Kleisli formulation}
|
|
|
|
|
%
|
2018-05-07 22:25:34 +00:00
|
|
|
|
The Kleisli-formulation consists of the following data:
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\begin{split}
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\label{eq:monad-kleisli-data}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\omapR & \tp \Object → \Object \\
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\pure & \tp % \prod_{X \tp Object}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\Arrow\ X\ (\omapR\ X) \\
|
|
|
|
|
\bind & \tp % \prod_{X\;Y \tp Object} → \Arrow\ X\ (\omapR\ Y)
|
|
|
|
|
\Arrow\ (\omapR\ X)\ (\omapR\ Y)
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{split}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-22 11:45:52 +00:00
|
|
|
|
The objects $X$ and $Y$ are implicitly universally quantified. With this data we can construct the \nomenindex{Kleisli arrow}:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
\fish & \tp \Arrow\ A\ (\omapR\ B)
|
|
|
|
|
\to \Arrow\ B\ (\omapR\ C)
|
|
|
|
|
\to \Arrow\ A\ (\omapR\ C) \\
|
|
|
|
|
f \fish g & \defeq f \rrr (\bind\ g)
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
2018-05-09 16:34:05 +00:00
|
|
|
|
It is interesting to note here that this formulation does not talk about natural
|
2018-05-01 16:55:28 +00:00
|
|
|
|
transformations or other such constructs from category theory. All we have here
|
|
|
|
|
is a regular maps on objects and a pair of arrows.
|
|
|
|
|
%
|
|
|
|
|
This data must satisfy:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\label{eq:monad-kleisli-laws-0}
|
|
|
|
|
\bind\ \pure & ≡ \identity_{\EndoR\ X} \\
|
|
|
|
|
\label{eq:monad-kleisli-laws-1}
|
|
|
|
|
\pure \fish f & ≡ f \\
|
|
|
|
|
\label{eq:monad-kleisli-laws-2}
|
2018-05-01 16:55:28 +00:00
|
|
|
|
(\bind\ f) \rrr (\bind\ g) & ≡ \bind\ (f \fish g)
|
|
|
|
|
\end{align}
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\newcommand\kleislilaws{\ref{eq:monad-kleisli-laws-0}, \ref{eq:monad-kleisli-laws-1} and \ref{eq:monad-kleisli-laws-2}}%
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
2018-05-22 11:45:52 +00:00
|
|
|
|
Here likewise the arrows $f \tp \Arrow\ X\ (\omapR\ Y)$ and $g \tp
|
|
|
|
|
\Arrow\ Y\ (\omapR\ Z)$ are universally quantified as well as the
|
|
|
|
|
objects they range over.
|
|
|
|
|
%
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\subsection{Equivalence of formulations}
|
|
|
|
|
%
|
|
|
|
|
The notation I have chosen here in the report
|
2018-05-16 09:01:07 +00:00
|
|
|
|
overloads e.g.\ $\pure$ to both refer to a natural transformation and an arrow.
|
2018-05-07 22:25:34 +00:00
|
|
|
|
This is of course not a coincidence as the arrow in the Kleisli formulation
|
2018-05-01 16:55:28 +00:00
|
|
|
|
shall correspond exactly to the map on arrows from the natural transformation
|
|
|
|
|
called $\pure$.
|
2018-04-09 16:02:54 +00:00
|
|
|
|
|
2018-05-01 16:55:28 +00:00
|
|
|
|
In the monoidal formulation we can define $\bind$:
|
|
|
|
|
%
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\newcommand\joinX{\wideoverbar{\join}}%
|
|
|
|
|
\newcommand\bindX{\wideoverbar{\bind}}%
|
|
|
|
|
\newcommand\EndoRX{\wideoverbar{\EndoR}}%
|
|
|
|
|
\newcommand\pureX{\wideoverbar{\pure}}%
|
|
|
|
|
\newcommand\fmapX{\wideoverbar{\fmap}}%
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\begin{align}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\bind\ f \defeq \join \lll \fmap\ f
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-07 22:25:34 +00:00
|
|
|
|
And likewise in the Kleisli formulation we can define $\join$:
|
2018-05-01 16:55:28 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\join \defeq \bind\ \identity
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-18 11:14:41 +00:00
|
|
|
|
It now remains to show that this construction indeed gives rise to a
|
|
|
|
|
monad. This will be done in two steps. First we will assume that we
|
|
|
|
|
have a monad in the monoidal form; $(\EndoR, \pure, \join)$ and then
|
|
|
|
|
show that $(\omapR, \pure, \bind)$ is indeed a monad in the Kleisli
|
|
|
|
|
form. In the second part we will show the other direction.
|
2018-05-15 14:08:29 +00:00
|
|
|
|
|
|
|
|
|
\subsubsection{Monoidal to Kleisli}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
Let $(\EndoR, \pureNT, \joinNT)$ be given as in \ref{eq:monad-monoidal-data}
|
2018-05-15 14:08:29 +00:00
|
|
|
|
satisfying the laws \monoidallaws. For the data of the Kleisli
|
|
|
|
|
formulation we pick:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\begin{split}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\omapR & \defeq \omapR \\
|
|
|
|
|
\pure & \defeq \pure \\
|
|
|
|
|
\bind\ f & \defeq \join \lll \fmap\ f
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\end{split}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-22 11:45:52 +00:00
|
|
|
|
Again $\omapR$ is the object map of the endo-functor $\EndoR$, $\pure$
|
|
|
|
|
and $\join$ are the arrows from the natural transformations $\pureNT$
|
|
|
|
|
and $\joinNT$ respectively and $\fmap$ is the map on arrows of the
|
|
|
|
|
endofunctor $\EndoR$. It now just remains to verify the laws
|
2018-05-18 11:14:41 +00:00
|
|
|
|
\kleislilaws. For \ref{eq:monad-kleisli-laws-0}:
|
2018-05-15 14:08:29 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\bind\ \pure & =
|
|
|
|
|
\join \lll (\fmap\ \pure) \\
|
2018-05-15 14:08:29 +00:00
|
|
|
|
& ≡ \identity && \text{By \ref{eq:monad-monoidal-laws-2}}
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
For \ref{eq:monad-kleisli-laws-1}:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
\pure \fish f
|
2018-05-22 11:45:52 +00:00
|
|
|
|
& = %%%
|
|
|
|
|
\pure \ggg \bind\ f \\ & =
|
|
|
|
|
\bind\ f \lll \pure \\ & =
|
|
|
|
|
\join \lll \fmap\ f \lll \pure \\ & ≡
|
|
|
|
|
\join \lll \pure \lll f && \text{$\pure$ is a natural transformation} \\ & ≡
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\identity \lll f && \text{By \ref{eq:monad-monoidal-laws-1}} \\ & ≡
|
|
|
|
|
f && \text{Left identity}
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
For \ref{eq:monad-kleisli-laws-2}:
|
|
|
|
|
\begin{align*}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\bind\ g \rrr \bind\ f & =
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\bind\ f \lll \bind\ g
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\\ & =
|
2018-05-15 14:08:29 +00:00
|
|
|
|
%% %%%%
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\join \lll \fmap\ g \lll \join \lll \fmap\ f
|
|
|
|
|
\\ & ≡
|
|
|
|
|
\join \lll \join \lll (\fmap \comp \fmap)\ f \lll \fmap\ g
|
2018-05-15 14:08:29 +00:00
|
|
|
|
&& \text{$\join$ is a natural transformation} \\ & ≡
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\join \lll \fmap\ \join \lll (\fmap \comp \fmap)\ f \lll \fmap\ g
|
2018-05-15 14:08:29 +00:00
|
|
|
|
&& \text{By \ref{eq:monad-monoidal-laws-0}} \\ & ≡
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\join \lll \fmap\ \join \lll \fmap\ (\fmap\ f) \lll \fmap\ g
|
2018-05-15 14:08:29 +00:00
|
|
|
|
&& \text{} \\ & ≡
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\join \lll \fmap\ (\join \lll \fmap\ f \lll g)
|
|
|
|
|
&& \text{Distributive law for functors} \\ & =
|
|
|
|
|
\join \lll \fmap\ (\join \lll \fmap\ f \lll g) \\ & =
|
2018-05-15 14:08:29 +00:00
|
|
|
|
%%%%
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\bind\ (\bind\ f \lll g) \\ & =
|
|
|
|
|
\bind\ (g \rrr \bind\ f) \\ & =
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\bind\ (g \fish f)
|
|
|
|
|
\end{align*}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
%
|
|
|
|
|
The construction can be found in the module:
|
|
|
|
|
\begin{center}
|
|
|
|
|
\sourcelink{Cat.Category.Monad.Monoidal}
|
|
|
|
|
\end{center}
|
|
|
|
|
%
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\subsubsection{Kleisli to Monoidal}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
For the other direction we are given $(\omapR, \pure, \bind)$ as in
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\ref{eq:monad-kleisli-data} satisfying the laws \kleislilaws. For the data of
|
|
|
|
|
the monoidal formulation we pick:
|
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\begin{split}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\EndoR & \defeq (\omapR, \bind\ (\pure \lll f)) \\
|
|
|
|
|
\pure & \defeq \pure \\
|
|
|
|
|
\join & \defeq \bind\ \identity
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\end{split}
|
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-22 11:45:52 +00:00
|
|
|
|
We must now not only show the monad laws given for the monoidal
|
|
|
|
|
formulation (\monoidallaws), we must also verify that $\EndoR$ is a
|
|
|
|
|
functor and that $\pure$ and $\join$ are natural transformations. I
|
|
|
|
|
will ommit this here. In stead we shall see how these two mappings are
|
|
|
|
|
indeed inverses. The full construction can be found in the module:
|
|
|
|
|
\begin{center}
|
|
|
|
|
\mbox{\sourcelink{Cat.Category.Monad.Kleisli}}
|
|
|
|
|
\end{center}
|
|
|
|
|
%
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\subsubsection{Equivalence}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
To prove that the two formulations are equivalent we must demonstrate
|
|
|
|
|
that the two mappings sketched above are indeed inverses of each
|
|
|
|
|
other. To recap, these maps are:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
\toKleisli & \tp \var{Kleisli} \to \var{Monoidal} \\
|
|
|
|
|
\toKleisli & \defeq \lambda\ (\omapR, \pure, \bind)
|
|
|
|
|
\to (\EndoR, \pure, \bind\ \identity)
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
Where $\EndoR \defeq (\omapR, \bind\ (\pure \lll f))$. The proof that
|
|
|
|
|
this is indeed a functor is left implicit as well as the monad laws.
|
|
|
|
|
Likewise the proof that $\pure$ and $\bind\ \identity$ are natural
|
|
|
|
|
transformations are left implicit. The inverse map will be:
|
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
|
|
|
|
\toMonoidal & \tp \var{Monoidal} \to \var{Kleisli} \\
|
|
|
|
|
\toMonoidal & \defeq \lambda\ (\EndoR, \pureNT, \joinNT)
|
|
|
|
|
\to (\omapR, \pure, \bind)
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
|
|
|
|
Where $\bind\ f \defeq \join \lll \fmap\ f$. Again the monad laws are
|
|
|
|
|
left implicit. Now we must show:
|
2018-05-15 14:08:29 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align}
|
|
|
|
|
\label{eq:monad-forwards}
|
|
|
|
|
\toKleisli \comp \toMonoidal & ≡ \identity \\
|
|
|
|
|
\label{eq:monad-backwards}
|
|
|
|
|
\toMonoidal \comp \toKleisli & ≡ \identity
|
2018-05-01 16:55:28 +00:00
|
|
|
|
\end{align}
|
|
|
|
|
%
|
2018-05-22 11:45:52 +00:00
|
|
|
|
For \ref{eq:monad-forwards} let $(\omapR, \pure, \bind)$ be a monad in
|
|
|
|
|
the Kleisli form. Since being-a-monad is a proposition\footnote{The
|
|
|
|
|
proof can be found in the implementation.} we get an
|
|
|
|
|
equality-principle for kleisli-monads that say that to equate two such
|
|
|
|
|
monads it suffices to equate their data-part. So it suffices to equate
|
|
|
|
|
the data-parts of the \ref{eq:monad-forwards}. Such a proof is a
|
|
|
|
|
triple equating the three projections of \ref{eq:monad-kleisli-data}.
|
|
|
|
|
The first two hold definitionally -- essentially one just wraps and
|
|
|
|
|
unwraps the morphism in a functor. For the last equation a little more
|
|
|
|
|
work is required:
|
2018-05-15 14:08:29 +00:00
|
|
|
|
%
|
|
|
|
|
\begin{align*}
|
2018-05-22 11:45:52 +00:00
|
|
|
|
\join \lll \fmap\ f & =
|
|
|
|
|
\fmap\ f \rrr \join \\ & =
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\bind\ (f \rrr \pure) \rrr \bind\ \identity
|
|
|
|
|
&& \text{By definition of $\fmap$ and $\join$} \\ & ≡
|
|
|
|
|
\bind\ (f \rrr \pure \fish \identity)
|
|
|
|
|
&& \text{By \ref{eq:monad-kleisli-laws-2}} \\ & ≡
|
|
|
|
|
\bind\ (f \rrr \identity)
|
2018-05-22 11:45:52 +00:00
|
|
|
|
&& \text{By \ref{eq:monad-kleisli-laws-1}} \\ & =
|
2018-05-15 14:08:29 +00:00
|
|
|
|
\bind\ f
|
|
|
|
|
\end{align*}
|
|
|
|
|
%
|
2018-05-22 11:45:52 +00:00
|
|
|
|
For the other direction (\ref{eq:monad-backwards}) we are given a
|
|
|
|
|
monad in the monoidal form; $(\EndoR, \pureNT, \joinNT)$. The various
|
|
|
|
|
equality-principles again give us that it is sufficient to equate the
|
|
|
|
|
data-part of the above. That is, we only need to verify that the
|
|
|
|
|
following pieces of data: $\omapR$, $\fmap$, $\pure$ and $\join$ get
|
|
|
|
|
mapped correctly. To see the full details check the implementation in
|
|
|
|
|
the module:
|
|
|
|
|
%
|
|
|
|
|
\begin{center}
|
|
|
|
|
\sourcelink{Cat.Category.Monad}
|
|
|
|
|
\end{center}
|