TENTATIVE COMMIT
This commit is contained in:
parent
d4dc125fb0
commit
2fce963072
|
@ -11,8 +11,8 @@ normal definition of judgmental equality is an inductive data type. Cubical Agda
|
||||||
discards this type in favor of a new primitives that has certain computational
|
discards this type in favor of a new primitives that has certain computational
|
||||||
properties exclusive to it.
|
properties exclusive to it.
|
||||||
|
|
||||||
Exceprts of the source code relevant to this section can be found in appendix
|
The source code can be browsed online and is linked in the beginning
|
||||||
\S\ref{sec:app-cubical}.
|
of \S\ref{ch:implementation}.
|
||||||
|
|
||||||
\subsection{The equality type}
|
\subsection{The equality type}
|
||||||
The usual notion of judgmental equality says that given a type $A \tp \MCU$ and
|
The usual notion of judgmental equality says that given a type $A \tp \MCU$ and
|
||||||
|
@ -137,11 +137,13 @@ With this we can now prove the desired equality $f \equiv g$ from section
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
p & \tp f \equiv g \\
|
p & \tp f \equiv g \\
|
||||||
p & \defeq \funExt\ \lambda n \to \refl
|
p & \defeq \funExt\ \phi
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
Paths have some other important properties, but they are not the focus of
|
Here $\phi \tp \prod_{n \tp \bN} \var{zeroLeft}\ n \equiv
|
||||||
this thesis. \TODO{Refer the reader somewhere for more info.}
|
\var{zeroRight} n$. Paths have some other important properties, but
|
||||||
|
they are not the focus of this thesis. \TODO{Refer the reader
|
||||||
|
somewhere for more info.}
|
||||||
%
|
%
|
||||||
\section{Homotopy levels}
|
\section{Homotopy levels}
|
||||||
In ITT all equality proofs are identical (in a closed context). This means that,
|
In ITT all equality proofs are identical (in a closed context). This means that,
|
||||||
|
@ -273,7 +275,7 @@ $$
|
||||||
We have the function:
|
We have the function:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\pathJ\ D\ d \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} D\ a\ p
|
\pathJ\ D\ d \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} D\ b\ p
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
A simple application of $\pathJ$ is for proving that $\var{sym}$ is an
|
A simple application of $\pathJ$ is for proving that $\var{sym}$ is an
|
||||||
|
|
|
@ -1,12 +1,27 @@
|
||||||
\chapter{Category Theory}
|
\chapter{Category Theory}
|
||||||
\label{ch:implementation}
|
\label{ch:implementation}
|
||||||
|
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}
|
||||||
This implementation formalizes the following concepts:
|
This implementation formalizes the following concepts:
|
||||||
%
|
%
|
||||||
\newcommand{\sourcebasepath}{http://web.student.chalmers.se/~hanghj/cat/doc/html/}
|
|
||||||
\newcommand{\sourcelink}[1]{\href{\sourcebasepath#1.html}{\texttt{#1}}}
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tabular}{ l l }
|
\begin{tabular}{ l l }
|
||||||
Name & Link \\
|
Name & Module \\
|
||||||
\hline
|
\hline
|
||||||
Equivalences & \sourcelink{Cat.Equivalence} \\
|
Equivalences & \sourcelink{Cat.Equivalence} \\
|
||||||
Categories & \sourcelink{Cat.Category} \\
|
Categories & \sourcelink{Cat.Category} \\
|
||||||
|
@ -30,7 +45,7 @@ Furthermore the following items have been partly formalized:
|
||||||
%
|
%
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tabular}{ l l }
|
\begin{tabular}{ l l }
|
||||||
Name & Link \\
|
Name & Module \\
|
||||||
\hline
|
\hline
|
||||||
Category of categories & \sourcelink{Cat.Categories.Cat} \\
|
Category of categories & \sourcelink{Cat.Categories.Cat} \\
|
||||||
Category of relations & \sourcelink{Cat.Categories.Rel} \\
|
Category of relations & \sourcelink{Cat.Categories.Rel} \\
|
||||||
|
@ -40,7 +55,7 @@ Monoids & \sourcelink{Cat.Category.Monoid} \\
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{center}
|
\end{center}
|
||||||
%
|
%
|
||||||
As well as a range of various results about these. E.g. I have shown
|
As well as a range of various results about these. E.g.\ I have shown
|
||||||
that the category of sets has products. In the following I aim to
|
that the category of sets has products. In the following I aim to
|
||||||
demonstrate some of the techniques employed in this formalization and
|
demonstrate some of the techniques employed in this formalization and
|
||||||
in the interest of brevity I will not detail all the things I have
|
in the interest of brevity I will not detail all the things I have
|
||||||
|
@ -64,15 +79,10 @@ where one can reason about two categories by simply focusing on the data. This
|
||||||
is achieved by creating a function embodying the ``equality principle'' for a
|
is achieved by creating a function embodying the ``equality principle'' for a
|
||||||
given type.
|
given type.
|
||||||
|
|
||||||
For the rest of this chapter I will present some of these results. For didactic
|
For the rest of this chapter I will present some of these results. For
|
||||||
reasons no source-code has been included in this chapter. To see the formal
|
didactic reasons no source-code has been included in this chapter. To
|
||||||
definitions excerpts of the implementation have been included in appendix
|
see the formal definitions the reader is referred to the
|
||||||
\S\ref{ch:app-sources}:
|
implementation which is linked in \S\ref{ch:implementation}.
|
||||||
Appendix
|
|
||||||
\S\ref{sec:app-categories} corresponds to section \S\ref{sec:categories},
|
|
||||||
appendix \S\ref{sec:app-products} to section \S\ref{sec:products}
|
|
||||||
and appendix \S\ref{sec:app-monads} to section \S\ref{sec:monads}.
|
|
||||||
|
|
||||||
|
|
||||||
\section{Categories}
|
\section{Categories}
|
||||||
\label{sec:categories}
|
\label{sec:categories}
|
||||||
|
@ -191,7 +201,7 @@ So the proof goes like this: We `eliminate' the 3 function abstractions by
|
||||||
applying $\propPi$ three times. So our proof obligation becomes:
|
applying $\propPi$ three times. So our proof obligation becomes:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\isProp \left( \id \comp f \equiv f \x f \comp \id \equiv f \right)
|
\isProp\ \left( \id \comp f \equiv f \x f \comp \id \equiv f \right)
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
Then we eliminate the (non-dependent) sigma-type by applying $\propSig$ giving
|
Then we eliminate the (non-dependent) sigma-type by applying $\propSig$ giving
|
||||||
|
@ -224,19 +234,21 @@ 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
|
$\IsPreCategory$ is not formulated with a chain of sigma-types we wont have any
|
||||||
combinators available to help us here. In stead the paths must be used directly.
|
combinators available to help us here. In stead the paths must be used directly.
|
||||||
|
|
||||||
\ref{eq:propIsPreCategory} is judgmentally the same as
|
\ref{eq:propIsPreCategory} is judgmentally the same as:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\prod_{a\ b \tp \IsPreCategory} a \equiv b
|
\prod_{a\ b \tp \IsPreCategory} a \equiv b
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
So let $a\ b \tp \IsPreCategory$ be given. To prove the equality $a \equiv b$ is
|
So to prove the proposition let $a\ b \tp \IsPreCategory$ be given. To
|
||||||
to give a continuous path from the index-type into the path-space. I.e. a
|
prove the equality $a \equiv b$ is to give a continuous path from the
|
||||||
function $I \to \IsPreCategory$. This path must satisfy being being judgmentally
|
index-type into the path-space. I.e.\ a function $I \to
|
||||||
the same as $a$ at the left endpoint and $b$ at the right endpoint. We know we
|
\IsPreCategory$. This path must satisfy being being judgmentally the
|
||||||
can form a continuous path between all projections of $a$ and $b$, this follows
|
same as $a$ at the left endpoint and $b$ at the right endpoint. We
|
||||||
from the type of all the projections being mere propositions. For instance, the
|
know we can form a continuous path between all projections of $a$ and
|
||||||
path between $a.\isIdentity$ and $b.\isIdentity$ is simply formed by:
|
$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:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\propIsIdentity\ a.\isIdentity\ b.\isIdentity
|
\propIsIdentity\ a.\isIdentity\ b.\isIdentity
|
||||||
|
@ -270,18 +282,19 @@ 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
|
It is worth noting that proving this theorem with the regular inductive equality
|
||||||
type would already not be possible, since we at least need extensionality (the
|
type would already not be possible, since we at least need extensionality (the
|
||||||
projections are all $\prod$-types). Assuming we had functional extensionality
|
projections are all $\prod$-types). Assuming we had functional extensionality
|
||||||
available to us as an axiom, we would use functional extensionality (in
|
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
|
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$.
|
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
|
Of course this theorem is not so interesting in the setting of ITT since we know
|
||||||
a priori that equality proofs are unique.
|
a priori that equality proofs are unique.
|
||||||
|
|
||||||
The situation is a bit more complicated when we have a dependent type. For
|
The situation is a bit more complicated when we have a dependent type.
|
||||||
instance, when we want to show that $\IsCategory$ is a mere proposition.
|
For instance, when we want to show that $\IsCategory$ is a mere
|
||||||
$\IsCategory$ is a record with two fields, a witness to being a pre category and
|
proposition. The type $\IsCategory$ is a record with two fields, a
|
||||||
the univalence condition. Recall that the univalence condition is indexed by the
|
witness to being a pre category and the univalence condition. Recall
|
||||||
identity-proof. So to follow the same recipe as above, let $a\ b \tp
|
that the univalence condition is indexed by the identity-proof. So to
|
||||||
\IsCategory$ be given, to show them equal, we now need to give two paths. One homogeneous:
|
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:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
p \tp a.\isPreCategory \equiv b.\isPreCategory
|
p \tp a.\isPreCategory \equiv b.\isPreCategory
|
||||||
|
@ -340,7 +353,7 @@ The usual notion of a function $f \tp A \to B$ having an inverses is:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\label{eq:isomorphism}
|
\label{eq:isomorphism}
|
||||||
\sum_{g \tp B \to A} f \comp g \equiv \identity_{B} \x g \comp f \equiv \identity_{A}
|
\sum_{g \tp B \to A} f \comp g \equiv \identity \x g \comp f \equiv \identity
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
This is defined in \cite[p. 129]{hott-2013} where it is referred to as the a
|
This is defined in \cite[p. 129]{hott-2013} where it is referred to as the a
|
||||||
|
@ -384,9 +397,10 @@ I give its definition here mainly for completeness, because as I stated we can
|
||||||
move away from this specific instantiation and think about it more abstractly
|
move away from this specific instantiation and think about it more abstractly
|
||||||
once we have shown that this definition actually works as an equivalence.
|
once we have shown that this definition actually works as an equivalence.
|
||||||
|
|
||||||
$\var{fromIso}$ can be found in \cite{cubical-agda} where it is known as
|
The implementation of $\var{fromIso}$ can be found in
|
||||||
$\var{gradLemma}$. The implementation of $\var{fromIso}$ as well as the proof
|
\cite{cubical-agda} where it is known as $\var{gradLemma}$. The
|
||||||
that this equivalence is a proposition (\ref{eq:propIsEquiv}) can be found in my
|
implementation of $\var{fromIso}$ as well as the proof that this
|
||||||
|
equivalence is a proposition (\ref{eq:propIsEquiv}) can be found in my
|
||||||
implementation.
|
implementation.
|
||||||
|
|
||||||
We say that two types $A\;B \tp \Type$ are equivalent exactly if there exists an
|
We say that two types $A\;B \tp \Type$ are equivalent exactly if there exists an
|
||||||
|
@ -586,27 +600,27 @@ go between $\wideoverbar{\approxeq}$ and $\approxeq$.
|
||||||
An inhabitant of $A \approxeq B$ is simply an arrow $f \tp \Arrow\ A\ B$
|
An inhabitant of $A \approxeq B$ is simply an arrow $f \tp \Arrow\ A\ B$
|
||||||
and its inverse $g \tp \Arrow\ B\ A$. In the opposite category $g$ will
|
and its inverse $g \tp \Arrow\ B\ A$. In the opposite category $g$ will
|
||||||
play the role of the isomorphism and $f$ will be the inverse. Similarly we can
|
play the role of the isomorphism and $f$ will be the inverse. Similarly we can
|
||||||
go in the opposite direction. I name these maps $\shuffle \tp (A \approxeq
|
go in the opposite direction. I name these maps $\shufflef \tp (A \approxeq
|
||||||
B) \to (A \wideoverbar{\approxeq} B)$ and $\shuffle^{-1} \tp (A
|
B) \to (A \wideoverbar{\approxeq} B)$ and $\shuffle^{-1} \tp (A
|
||||||
\wideoverbar{\approxeq} B) \to (A \approxeq B)$ respectively.
|
\wideoverbar{\approxeq} B) \to (A \approxeq B)$ respectively.
|
||||||
|
|
||||||
As the inverse of $\wideoverbar{\idToIso}$ I will pick $\wideoverbar{\isoToId}
|
As the inverse of $\wideoverbar{\idToIso}$ I will pick $\wideoverbar{\isoToId}
|
||||||
\defeq \isoToId \comp \shuffle$. The proof that they are inverses go as
|
\defeq \isoToId \comp \shufflef$. The proof that they are inverses go as
|
||||||
follows:
|
follows:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\wideoverbar{\isoToId} \comp \wideoverbar{\idToIso} & =
|
\wideoverbar{\isoToId} \comp \wideoverbar{\idToIso} & =
|
||||||
\isoToId \comp \shuffle \comp \wideoverbar{\idToIso}
|
\isoToId \comp \shufflef \comp \wideoverbar{\idToIso}
|
||||||
\\
|
\\
|
||||||
%% ≡⟨ cong (λ φ → φ x) (cong (λ φ → η ⊙ shuffle ⊙ φ) (funExt lem)) ⟩ \\
|
%% ≡⟨ cong (λ φ → φ x) (cong (λ φ → η ⊙ shuffle ⊙ φ) (funExt lem)) ⟩ \\
|
||||||
%
|
%
|
||||||
& \equiv
|
& \equiv
|
||||||
\isoToId \comp \shuffle \comp \inv{\shuffle} \comp \idToIso
|
\isoToId \comp \shufflef \comp \inv{\shufflef} \comp \idToIso
|
||||||
&& \text{lemma} \\
|
&& \text{lemma} \\
|
||||||
%% ≡⟨⟩ \\
|
%% ≡⟨⟩ \\
|
||||||
& \equiv
|
& \equiv
|
||||||
\isoToId \comp \idToIso
|
\isoToId \comp \idToIso
|
||||||
&& \text{$\shuffle$ is an isomorphism} \\
|
&& \text{$\shufflef$ is an isomorphism} \\
|
||||||
& \equiv
|
& \equiv
|
||||||
\identity
|
\identity
|
||||||
&& \text{$\isoToId$ is an isomorphism}
|
&& \text{$\isoToId$ is an isomorphism}
|
||||||
|
@ -615,7 +629,7 @@ follows:
|
||||||
The other direction is analogous.
|
The other direction is analogous.
|
||||||
|
|
||||||
The lemma used in step 2 of this proof states that $\wideoverbar{idToIso} \equiv
|
The lemma used in step 2 of this proof states that $\wideoverbar{idToIso} \equiv
|
||||||
\inv{\shuffle} \comp \idToIso$. This is a rather straight-forward proof
|
\inv{\shufflef} \comp \idToIso$. This is a rather straight-forward proof
|
||||||
since being-an-inverse-of is a proposition, so it suffices to show that their
|
since being-an-inverse-of is a proposition, so it suffices to show that their
|
||||||
first components are equal, but this holds judgmentally.
|
first components are equal, but this holds judgmentally.
|
||||||
|
|
||||||
|
@ -681,7 +695,7 @@ together. Step one will be proven with the following lemma:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\label{eq:equivPropSig}
|
\label{eq:equivPropSig}
|
||||||
\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)
|
\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)
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
The lemma states that for pairs whose second component are mere propositions
|
The lemma states that for pairs whose second component are mere propositions
|
||||||
|
@ -705,7 +719,7 @@ also be equivalent. For our purposes $P \defeq \isEquiv\ A\ B$ and $Q \defeq
|
||||||
\prod_{f \tp A \to B} \left( \isEquiv\ A\ B\ f \simeq \Isomorphism\ f \right)
|
\prod_{f \tp A \to B} \left( \isEquiv\ A\ B\ f \simeq \Isomorphism\ f \right)
|
||||||
\end{align}
|
\end{align}
|
||||||
|
|
||||||
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
|
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
|
||||||
of $\var{fromIsomorphism}$ it suffices to give an isomorphism between
|
of $\var{fromIsomorphism}$ it suffices to give an isomorphism between
|
||||||
$x \equiv y$ and $\fst\ x \equiv \fst\ y$:
|
$x \equiv y$ and $\fst\ x \equiv \fst\ y$:
|
||||||
%
|
%
|
||||||
|
@ -770,7 +784,7 @@ end, let $X\;Y \tp \Isomorphism\ f$ be given. Name the maps $x\;y \tp B
|
||||||
paths: $p \tp x \equiv y$ and $\Path\ (\lambda\; i \to
|
paths: $p \tp x \equiv y$ and $\Path\ (\lambda\; i \to
|
||||||
\var{AreInverses}\ f\ (p\ i))\ \mathcal{X}\ \mathcal{Y}$ where $\mathcal{X}$
|
\var{AreInverses}\ f\ (p\ i))\ \mathcal{X}\ \mathcal{Y}$ where $\mathcal{X}$
|
||||||
and $\mathcal{Y}$ denotes the witnesses that $x$ (respectively $y$) is an
|
and $\mathcal{Y}$ denotes the witnesses that $x$ (respectively $y$) is an
|
||||||
inverse to $f$. $p$ is inhabited by:
|
inverse to $f$. The path $p$ is inhabited by:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
x
|
x
|
||||||
|
@ -844,9 +858,6 @@ that there exists a unique arrow $\pi \tp \Arrow\ X\ (A \x B)$ satisfying
|
||||||
$\pi$ is called the product (arrow) of $f$ and $g$.
|
$\pi$ is called the product (arrow) of $f$ and $g$.
|
||||||
|
|
||||||
\subsection{Span category}
|
\subsection{Span category}
|
||||||
|
|
||||||
\newcommand\pairA{\mathcal{A}}
|
|
||||||
\newcommand\pairB{\mathcal{B}}
|
|
||||||
Given a base category $\bC$ and two objects in this category $\pairA$ and
|
Given a base category $\bC$ and two objects in this category $\pairA$ and
|
||||||
$\pairB$ we can construct the \nomenindex{span category}:
|
$\pairB$ we can construct the \nomenindex{span category}:
|
||||||
|
|
||||||
|
@ -1018,7 +1029,7 @@ isomorphism, and create a path from this:
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\label{eq:univ-2}
|
\label{eq:univ-2}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\var{iso} \tp & X \cong Y \\
|
\var{iso} \tp & X \approxeq Y \\
|
||||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
& \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}}
|
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||||
\end{split}
|
\end{split}
|
||||||
|
@ -1084,7 +1095,7 @@ To show that this choice fits the bill I must now verify that it satisfies
|
||||||
y_{\mathcal{A}} \lll f ≡ x_{\mathcal{A}} × y_{\mathcal{B}} \lll f ≡ x_{\mathcal{B}}
|
y_{\mathcal{A}} \lll f ≡ x_{\mathcal{A}} × y_{\mathcal{B}} \lll f ≡ x_{\mathcal{B}}
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
Which, since $f$ is an isomorphism and $p_{\mathcal{A}}$ (resp. $p_{\mathcal{B}}$)
|
Which, since $f$ is an isomorphism and $p_{\mathcal{A}}$ (resp.\ $p_{\mathcal{B}}$)
|
||||||
is a path varying according to a path constructed from this isomorphism, this is
|
is a path varying according to a path constructed from this isomorphism, this is
|
||||||
exactly what \ref{eq:domain-twist-0} gives us.
|
exactly what \ref{eq:domain-twist-0} gives us.
|
||||||
%
|
%
|
||||||
|
@ -1100,7 +1111,7 @@ This concludes the first direction of the isomorphism that we are constructing.
|
||||||
For the other direction we are given the isomorphism:
|
For the other direction we are given the isomorphism:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
(f, \inv{f}, \var{inv}_f)
|
(f, \inv{f}, \var{inv}_f, \var{inv}_{\inv{f}})
|
||||||
\tp
|
\tp
|
||||||
(X, x_{\mathcal{A}}, x_{\mathcal{B}}) \approxeq (Y, y_{\mathcal{A}}, y_{\mathcal{B}})
|
(X, x_{\mathcal{A}}, x_{\mathcal{B}}) \approxeq (Y, y_{\mathcal{A}}, y_{\mathcal{B}})
|
||||||
$$
|
$$
|
||||||
|
@ -1108,7 +1119,10 @@ $$
|
||||||
Projecting out the first component gives us the isomorphism
|
Projecting out the first component gives us the isomorphism
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
(\fst\ f, \fst\ \inv{f}, \congruence\ \fst\ \var{inv}_f, \congruence\ \fst\ \var{inv}_{\inv{f}})
|
(\fst\ f, \fst\ \inv{f}
|
||||||
|
, \congruence\ \fst\ \var{inv}_f
|
||||||
|
, \congruence\ \fst\ \var{inv}_{\inv{f}}
|
||||||
|
)
|
||||||
\tp X \approxeq Y
|
\tp X \approxeq Y
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
|
@ -1141,11 +1155,11 @@ This is achieved with the following lemma:
|
||||||
%
|
%
|
||||||
Which is used without proof. See the implementation for the details.
|
Which is used without proof. See the implementation for the details.
|
||||||
|
|
||||||
\ref{eq:product-paths} is the proven with the propositions:
|
\ref{eq:product-paths} is then proven with the propositions:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\label{eq:product-paths}
|
%% \label{eq:product-paths}
|
||||||
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}} ≡ y_{\mathcal{A}}\\
|
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}} ≡ y_{\mathcal{A}}\\
|
||||||
\var{coe}\ \widetilde{p}_{\mathcal{B}}\ x_{\mathcal{B}} ≡ y_{\mathcal{B}}
|
\var{coe}\ \widetilde{p}_{\mathcal{B}}\ x_{\mathcal{B}} ≡ y_{\mathcal{B}}
|
||||||
\end{split}
|
\end{split}
|
||||||
|
@ -1155,7 +1169,7 @@ The proof of the first one is:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}}
|
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}}
|
||||||
& ≡ x_{\mathcal{A}} \lll \fst\ \inv{f} && \text{$\var{coeDom}$ and the isomorphism $f, \inv{f}$} \\
|
& ≡ x_{\mathcal{A}} \lll \fst\ \inv{f} && \text{\ref{eq:coeDom} and the isomorphism $f, \inv{f}$} \\
|
||||||
& ≡ y_{\mathcal{A}} && \text{\ref{eq:pairArrowLaw} for $\inv{f}$}
|
& ≡ y_{\mathcal{A}} && \text{\ref{eq:pairArrowLaw} for $\inv{f}$}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
|
@ -1167,10 +1181,10 @@ gory details.
|
||||||
%
|
%
|
||||||
\subsection{Propositionality of products}
|
\subsection{Propositionality of products}
|
||||||
%
|
%
|
||||||
Now that we have constructed the span category\index{span category} I will
|
Now that we have constructed the span category\index{span category} I
|
||||||
demonstrate how to use this to prove that products are propositional. I will
|
will demonstrate how to use this to prove that products are
|
||||||
do this by showing that terminal objects in this category are equivalent to
|
propositional. I will do this by showing that terminal objects in this
|
||||||
products:
|
category are equivalent to products:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\var{Terminal} ≃ \var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}
|
\var{Terminal} ≃ \var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}
|
||||||
|
@ -1179,7 +1193,7 @@ Now that we have constructed the span category\index{span category} I will
|
||||||
And as always we do this by constructing an isomorphism:
|
And as always we do this by constructing an isomorphism:
|
||||||
%
|
%
|
||||||
In the direction $\var{Terminal} → \var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}$
|
In the direction $\var{Terminal} → \var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}$
|
||||||
we are given a terminal object $X, x_𝒜, x_ℬ$. $X$ Will be the product-object and
|
we are given a terminal object $X, x_𝒜, x_ℬ$. $X$ will be the product-object and
|
||||||
$x_𝒜, x_ℬ$ will be the product arrows, so it just remains to verify that this is
|
$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
|
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\ 𝒜$, $y_ℬ\ \Arrow\ Y\ ℬ$ we must find a unique arrow $f \tp
|
||||||
|
@ -1265,8 +1279,8 @@ The monoidal formulation of monads consists of the following data:
|
||||||
\label{eq:monad-monoidal-data}
|
\label{eq:monad-monoidal-data}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\EndoR & \tp \Endo ℂ \\
|
\EndoR & \tp \Endo ℂ \\
|
||||||
\pure & \tp \NT{\EndoR^0}{\EndoR} \\
|
\pureNT & \tp \NT{\EndoR^0}{\EndoR} \\
|
||||||
\join & \tp \NT{\EndoR^2}{\EndoR}
|
\joinNT & \tp \NT{\EndoR^2}{\EndoR}
|
||||||
\end{split}
|
\end{split}
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
|
@ -1299,11 +1313,11 @@ The Kleisli-formulation consists of the following data:
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\label{eq:monad-kleisli-data}
|
\label{eq:monad-kleisli-data}
|
||||||
\EndoR & \tp \Object → \Object \\
|
\omapR & \tp \Object → \Object \\
|
||||||
\pure & \tp % \prod_{X \tp Object}
|
\pure & \tp % \prod_{X \tp Object}
|
||||||
\Arrow\ X\ (\EndoR\ X) \\
|
\Arrow\ X\ (\omapR\ X) \\
|
||||||
\bind & \tp % \prod_{X\;Y \tp Object} → \Arrow\ X\ (\EndoR\ Y)
|
\bind & \tp % \prod_{X\;Y \tp Object} → \Arrow\ X\ (\omapR\ Y)
|
||||||
\Arrow\ (\EndoR\ X)\ (\EndoR\ Y)
|
\Arrow\ (\omapR\ X)\ (\omapR\ Y)
|
||||||
\end{split}
|
\end{split}
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
|
@ -1346,22 +1360,20 @@ In the monoidal formulation we can define $\bind$:
|
||||||
\newcommand\pureX{\wideoverbar{\pure}}%
|
\newcommand\pureX{\wideoverbar{\pure}}%
|
||||||
\newcommand\fmapX{\wideoverbar{\fmap}}%
|
\newcommand\fmapX{\wideoverbar{\fmap}}%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\bind\ f \defeq \joinX \lll \fmap\ f
|
\bind\ f \defeq \join \lll \fmap\ f
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
And likewise in the Kleisli formulation we can define $\join$:
|
And likewise in the Kleisli formulation we can define $\join$:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\join \defeq \bindX\ \identity
|
\join \defeq \bind\ \identity
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
Here $\joinX$ corresponds to the arrow from the natural
|
It now remains to show that this construction indeed gives rise to a
|
||||||
transformation $\join$. $\bindX$ on the other hand corresponds to a
|
monad. This will be done in two steps. First we will assume that we
|
||||||
natural transformation constructed from $\bind$. It now remains to show that
|
have a monad in the monoidal form; $(\EndoR, \pure, \join)$ and then
|
||||||
this construction indeed gives rise to a monad. This will be done in two steps.
|
show that $(\omapR, \pure, \bind)$ is indeed a monad in the Kleisli
|
||||||
First we will assume that we have a monad in the monoidal form; $(\EndoR, \pure,
|
form. In the second part we will show the other direction.
|
||||||
\join)$ and then show that $\EndoR, \pure, \bind$ is indeed a monad in the
|
|
||||||
Kleisli form. In the second part we will show the other direction.
|
|
||||||
|
|
||||||
\subsubsection{Monoidal to Kleisli}
|
\subsubsection{Monoidal to Kleisli}
|
||||||
Let $(\EndoR, \pure, \join)$ be given as in \ref{eq:monad-monoidal-data}
|
Let $(\EndoR, \pure, \join)$ be given as in \ref{eq:monad-monoidal-data}
|
||||||
|
@ -1376,11 +1388,11 @@ formulation we pick:
|
||||||
\end{split}
|
\end{split}
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
$\EndoRX$ is the object map of the endo-functor $\EndoR$,
|
$\EndoRX$ is the object map of the endo-functor $\EndoR$, $\pureX$ and
|
||||||
$\pureX$ and $\joinX$ are the arrows from the natural
|
$\joinX$ are the arrows from the natural transformations $\pure$ and
|
||||||
transformations $\pure$ and $\join$ respectively. $\fmapX$ is the
|
$\join$ respectively. The term $\fmapX$ is the arrow map of the
|
||||||
arrow map of the endo-functor $\EndoR$. It now just remains to verify
|
endo-functor $\EndoR$. It now just remains to verify the laws
|
||||||
the laws \kleislilaws. For \ref{eq:monad-kleisli-laws-0}:
|
\kleislilaws. For \ref{eq:monad-kleisli-laws-0}:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\bind\ \pure & ≡
|
\bind\ \pure & ≡
|
||||||
|
|
|
@ -72,13 +72,17 @@
|
||||||
\newcommand\isequiv{\varindex{isequiv}}
|
\newcommand\isequiv{\varindex{isequiv}}
|
||||||
\newcommand\qinv{\varindex{qinv}}
|
\newcommand\qinv{\varindex{qinv}}
|
||||||
\newcommand\fiber{\varindex{fiber}}
|
\newcommand\fiber{\varindex{fiber}}
|
||||||
\newcommand\shuffle{\varindex{shuffle}}
|
\newcommand\shufflef{\varindex{shuffle}}
|
||||||
\newcommand\Univalent{\varindex{Univalent}}
|
\newcommand\Univalent{\varindex{Univalent}}
|
||||||
\newcommand\refl{\varindex{refl}}
|
\newcommand\refl{\varindex{refl}}
|
||||||
\newcommand\isoToId{\varindex{isoToId}}
|
\newcommand\isoToId{\varindex{isoToId}}
|
||||||
\newcommand\Isomorphism{\varindex{Isomorphism}}
|
\newcommand\Isomorphism{\varindex{Isomorphism}}
|
||||||
\newcommand\rrr{\ggg}
|
\newcommand\rrr{\ggg}
|
||||||
\newcommand\fish{\mathrel{\wideoverbar{\rrr}}}
|
%% \newcommand\fish{\mathbin{↣}}
|
||||||
|
%% \newcommand\fish{\mathbin{⤅}}
|
||||||
|
\newcommand\fish{\mathbin{⤇}}
|
||||||
|
%% \newcommand\fish{\mathbin{⤜}}
|
||||||
|
%% \newcommand\fish{\mathrel{\wideoverbar{\rrr}}}
|
||||||
\newcommand\fst{\varindex{fst}}
|
\newcommand\fst{\varindex{fst}}
|
||||||
\newcommand\snd{\varindex{snd}}
|
\newcommand\snd{\varindex{snd}}
|
||||||
\newcommand\Path{\varindex{Path}}
|
\newcommand\Path{\varindex{Path}}
|
||||||
|
@ -87,12 +91,29 @@
|
||||||
\newcommand*{\QED}{\hfill\ensuremath{\square}}%
|
\newcommand*{\QED}{\hfill\ensuremath{\square}}%
|
||||||
\newcommand\uexists{\exists!}
|
\newcommand\uexists{\exists!}
|
||||||
\newcommand\Arrow{\varindex{Arrow}}
|
\newcommand\Arrow{\varindex{Arrow}}
|
||||||
|
\newcommand\embellish[1]{\widehat{#1}}
|
||||||
|
\newcommand\nattrans[1]{\embellish{#1}}
|
||||||
|
\newcommand\functor[1]{\embellish{#1}}
|
||||||
\newcommand\NTsym{\varindex{NT}}
|
\newcommand\NTsym{\varindex{NT}}
|
||||||
\newcommand\NT[2]{\NTsym\ #1\ #2}
|
\newcommand\NT[2]{\NTsym\ #1\ #2}
|
||||||
\newcommand\Endo[1]{\varindex{Endo}\ #1}
|
\newcommand\Endo[1]{\varindex{Endo}\ #1}
|
||||||
\newcommand\EndoR{\mathcal{R}}
|
\newcommand\EndoR{\functor{\mathcal{R}}}
|
||||||
|
\newcommand\omapR{\mathcal{R}}
|
||||||
\newcommand\funExt{\varindex{funExt}}
|
\newcommand\funExt{\varindex{funExt}}
|
||||||
\newcommand{\suc}[1]{\varindex{suc}\ #1}
|
\newcommand{\suc}[1]{\varindex{suc}\ #1}
|
||||||
\newcommand{\trans}{\varindex{trans}}
|
\newcommand{\trans}{\varindex{trans}}
|
||||||
\newcommand{\toKleisli}{\varindex{toKleisli}}
|
\newcommand{\toKleisli}{\varindex{toKleisli}}
|
||||||
\newcommand{\toMonoidal}{\varindex{toMonoidal}}
|
\newcommand{\toMonoidal}{\varindex{toMonoidal}}
|
||||||
|
\newcommand\pairA{\mathcal{A}}
|
||||||
|
\newcommand\pairB{\mathcal{B}}
|
||||||
|
\newcommand{\joinNT}{\functor{\varindex{join}}}
|
||||||
|
\newcommand{\pureNT}{\functor{\varindex{pure}}}
|
||||||
|
\newcommand{\hrefsymb}[2]{\href{#1}{#2 \ExternalLink}}
|
||||||
|
\newcommand{\sourcebasepath}{http://web.student.chalmers.se/\textasciitilde hanghj/cat/doc/html/}
|
||||||
|
\newcommand{\docbasepath}{https://github.com/fredefox/cat/}
|
||||||
|
\newcommand{\sourcelink}[1]{\hrefsymb
|
||||||
|
{\sourcebasepath#1.html}
|
||||||
|
{\texttt{#1}}
|
||||||
|
}
|
||||||
|
\newcommand{\gitlink}{\hrefsymb{\docbasepath}{\texttt{\docbasepath}}}
|
||||||
|
\newcommand{\doclink}{\hrefsymb{\sourcebasepath}{\texttt{\sourcebasepath}}}
|
||||||
|
|
10
doc/main.tex
10
doc/main.tex
|
@ -62,12 +62,12 @@
|
||||||
\nocite{coquand-2013}
|
\nocite{coquand-2013}
|
||||||
|
|
||||||
\bibliography{refs}
|
\bibliography{refs}
|
||||||
\begin{appendices}
|
%% \begin{appendices}
|
||||||
\setcounter{page}{1}
|
%% \setcounter{page}{1}
|
||||||
\pagenumbering{roman}
|
%% \pagenumbering{roman}
|
||||||
\input{sources.tex}
|
%% \input{sources.tex}
|
||||||
%% \input{planning.tex}
|
%% \input{planning.tex}
|
||||||
%% \input{halftime.tex}
|
%% \input{halftime.tex}
|
||||||
\end{appendices}
|
%% \end{appendices}
|
||||||
\printindex
|
\printindex
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
|
@ -4,14 +4,17 @@
|
||||||
\bibliographystyle{plain}
|
\bibliographystyle{plain}
|
||||||
|
|
||||||
\usepackage{xcolor}
|
\usepackage{xcolor}
|
||||||
|
%% \mode<report>{
|
||||||
\usepackage[
|
\usepackage[
|
||||||
%% hidelinks,
|
%% hidelinks,
|
||||||
pdfusetitle,
|
pdfusetitle,
|
||||||
pdfsubject={category theory},
|
pdfsubject={category theory},
|
||||||
pdfkeywords={type theory, homotopy theory, category theory, agda}]
|
pdfkeywords={type theory, homotopy theory, category theory, agda}]
|
||||||
{hyperref}
|
{hyperref}
|
||||||
\definecolor{darkorange}{HTML}{ff8c00}
|
%% }
|
||||||
\hypersetup{allbordercolors={darkorange}}
|
%% \definecolor{darkorange}{HTML}{ff8c00}
|
||||||
|
%% \hypersetup{allbordercolors={darkorange}}
|
||||||
|
\hypersetup{hidelinks}
|
||||||
\usepackage{graphicx}
|
\usepackage{graphicx}
|
||||||
|
|
||||||
\usepackage{parskip}
|
\usepackage{parskip}
|
||||||
|
@ -116,3 +119,24 @@
|
||||||
|
|
||||||
\makeatother
|
\makeatother
|
||||||
\usepackage{xspace}
|
\usepackage{xspace}
|
||||||
|
\usepackage{tikz}
|
||||||
|
\newcommand{\ExternalLink}{%
|
||||||
|
\tikz[x=1.2ex, y=1.2ex, baseline=-0.05ex]{%
|
||||||
|
\begin{scope}[x=1ex, y=1ex]
|
||||||
|
\clip (-0.1,-0.1)
|
||||||
|
--++ (-0, 1.2)
|
||||||
|
--++ (0.6, 0)
|
||||||
|
--++ (0, -0.6)
|
||||||
|
--++ (0.6, 0)
|
||||||
|
--++ (0, -1);
|
||||||
|
\path[draw,
|
||||||
|
line width = 0.5,
|
||||||
|
rounded corners=0.5]
|
||||||
|
(0,0) rectangle (1,1);
|
||||||
|
\end{scope}
|
||||||
|
\path[draw, line width = 0.5] (0.5, 0.5)
|
||||||
|
-- (1, 1);
|
||||||
|
\path[draw, line width = 0.5] (0.6, 1)
|
||||||
|
-- (1, 1) -- (1, 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,9 +1,18 @@
|
||||||
\documentclass[a4paper,handout]{beamer}
|
\documentclass[a4paper,handout]{beamer}
|
||||||
|
\beamertemplatenavigationsymbolsempty
|
||||||
|
%% \usecolortheme[named=seagull]{structure}
|
||||||
|
|
||||||
\input{packages.tex}
|
\input{packages.tex}
|
||||||
\input{macros.tex}
|
\input{macros.tex}
|
||||||
\title{Univalent Categories}
|
\title[Univalent Categories]{Univalent Categories\\ \footnotesize A formalization of category theory in Cubical Agda}
|
||||||
\author{Frederik Hangh{\o}j Iversen}
|
\newcommand{\myname}{Frederik Hangh{\o}j Iversen}
|
||||||
|
\author[\myname]{
|
||||||
|
\myname\\
|
||||||
|
\footnotesize Supervisors: Thierry Coquand, Andrea Vezzosi\\
|
||||||
|
Examiner: Andreas Abel
|
||||||
|
}
|
||||||
\institute{Chalmers University of Technology}
|
\institute{Chalmers University of Technology}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\frame{\titlepage}
|
\frame{\titlepage}
|
||||||
|
|
||||||
|
@ -12,14 +21,14 @@
|
||||||
\framesubtitle{Functional extensionality}
|
\framesubtitle{Functional extensionality}
|
||||||
Consider the functions
|
Consider the functions
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{zeroLeft} & \defeq (n \tp \bN) \mto (0 + n \tp \bN) \\
|
\var{zeroLeft} & \defeq \lambda (n \tp \bN) \mto (0 + n \tp \bN) \\
|
||||||
\var{zeroRight} & \defeq (n \tp \bN) \mto (n + 0 \tp \bN)
|
\var{zeroRight} & \defeq \lambda (n \tp \bN) \mto (n + 0 \tp \bN)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
We have
|
We have
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\prod_{n \tp \bN} n + 0 \equiv 0 + n
|
\prod_{n \tp \bN} \var{zeroLeft}\ n \equiv \var{zeroRight}\ n
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
\pause
|
\pause
|
||||||
|
@ -35,7 +44,6 @@ We need
|
||||||
$$
|
$$
|
||||||
\funExt \tp \prod_{a \tp A} f\ a \equiv g\ a \to f \equiv g
|
\funExt \tp \prod_{a \tp A} f\ a \equiv g\ a \to f \equiv g
|
||||||
$$
|
$$
|
||||||
|
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Motivating example}
|
\frametitle{Motivating example}
|
||||||
|
@ -53,7 +61,7 @@ $$
|
||||||
$$(A \simeq B) \simeq (A \equiv B)$$
|
$$(A \simeq B) \simeq (A \equiv B)$$
|
||||||
\pause
|
\pause
|
||||||
%
|
%
|
||||||
We will return to $\simeq$, but for not, think of it as an
|
We will return to $\simeq$, but for now think of it as an
|
||||||
isomorphism, so it induces maps:
|
isomorphism, so it induces maps:
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{toPath} & \tp (A \simeq B) \to (A \equiv B) \\
|
\var{toPath} & \tp (A \simeq B) \to (A \equiv B) \\
|
||||||
|
@ -117,7 +125,10 @@ $$
|
||||||
& \isSet && \tp \MCU \to \MCU \\
|
& \isSet && \tp \MCU \to \MCU \\
|
||||||
& \isSet\ A && \defeq \prod_{a_0, a_1 \tp A} \isProp\ (a_0 \equiv a_1)
|
& \isSet\ A && \defeq \prod_{a_0, a_1 \tp A} \isProp\ (a_0 \equiv a_1)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\begin{align*}
|
||||||
|
& \isGroupoid && \tp \MCU \to \MCU \\
|
||||||
|
& \isGroupoid\ A && \defeq \prod_{a_0, a_1 \tp A} \isSet\ (a_0 \equiv a_1)
|
||||||
|
\end{align*}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Paths}
|
\frametitle{Paths}
|
||||||
|
@ -137,9 +148,9 @@ $$
|
||||||
\pause
|
\pause
|
||||||
We then have the function:
|
We then have the function:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
$$
|
||||||
\pathJ\ D\ d \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} D\ a\ p
|
\pathJ\ D\ d \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} D\ b\ p
|
||||||
\end{equation}
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Paths}
|
\frametitle{Paths}
|
||||||
|
@ -179,7 +190,7 @@ $$
|
||||||
$$
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Categories}
|
\frametitle{Pre categories}
|
||||||
\framesubtitle{Definition}
|
\framesubtitle{Definition}
|
||||||
Data:
|
Data:
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
|
@ -189,25 +200,48 @@ Data:
|
||||||
\lll & \tp \Arrow\ B\ C \to \Arrow\ A\ B \to \Arrow\ A\ C
|
\lll & \tp \Arrow\ B\ C \to \Arrow\ A\ B \to \Arrow\ A\ C
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
|
\pause
|
||||||
Laws:
|
Laws:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
h \lll (g \lll f) ≡ (h \lll g) \lll f
|
h \lll (g \lll f) ≡ (h \lll g) \lll f
|
||||||
$$
|
$$
|
||||||
$$
|
$$
|
||||||
\identity \lll f ≡ f \x
|
(\identity \lll f ≡ f)
|
||||||
f \lll \identity ≡ f
|
\x
|
||||||
|
(f \lll \identity ≡ f)
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
1-categories:
|
1-categories:
|
||||||
$$
|
$$
|
||||||
\isSet\ (\Arrow\ A\ B)
|
\isSet\ (\Arrow\ A\ B)
|
||||||
$$
|
$$
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Pre categories}
|
||||||
|
\framesubtitle{Propositionality}
|
||||||
|
$$
|
||||||
|
\isProp\ \left( (\identity \comp f \equiv f) \x (f \comp \identity \equiv f) \right)
|
||||||
|
$$
|
||||||
\pause
|
\pause
|
||||||
Univalent categories:
|
\begin{align*}
|
||||||
$$
|
\isProp\ \IsPreCategory
|
||||||
\isEquiv\ (A \equiv B)\ (A \approxeq B)\ \idToIso
|
\end{align*}
|
||||||
$$
|
\pause
|
||||||
|
\begin{align*}
|
||||||
|
\var{isAssociative} & \tp \var{IsAssociative}\\
|
||||||
|
\isIdentity & \tp \var{IsIdentity}\\
|
||||||
|
\var{arrowsAreSets} & \tp \var{ArrowsAreSets}
|
||||||
|
\end{align*}
|
||||||
|
\pause
|
||||||
|
\begin{align*}
|
||||||
|
& \var{propIsAssociative} && a.\var{isAssociative}\
|
||||||
|
&& b.\var{isAssociative} && i \\
|
||||||
|
& \propIsIdentity && a.\isIdentity\
|
||||||
|
&& b.\isIdentity && i \\
|
||||||
|
& \var{propArrowsAreSets} && a.\var{arrowsAreSets}\
|
||||||
|
&& b.\var{arrowsAreSets} && i
|
||||||
|
\end{align*}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Categories}
|
\frametitle{Categories}
|
||||||
|
@ -222,15 +256,394 @@ where
|
||||||
$$
|
$$
|
||||||
\phi\ f \defeq \identity \lll f \equiv f \x f \lll \identity \equiv f
|
\phi\ f \defeq \identity \lll f \equiv f \x f \lll \identity \equiv f
|
||||||
$$
|
$$
|
||||||
|
\pause
|
||||||
Let $\approxeq$ denote ismorphism of objects. We can then construct
|
Let $\approxeq$ denote ismorphism of objects. We can then construct
|
||||||
the identity isomorphism in any category:
|
the identity isomorphism in any category:
|
||||||
$$
|
$$
|
||||||
\identity , \identity , \var{isIdentity} \tp A \approxeq A
|
\identity , \identity , \var{isIdentity} \tp A \approxeq A
|
||||||
$$
|
$$
|
||||||
|
\pause
|
||||||
Likewise since paths are substitutive we can promote a path to an isomorphism:
|
Likewise since paths are substitutive we can promote a path to an isomorphism:
|
||||||
$$
|
$$
|
||||||
\idToIso \tp A ≡ B → A ≊ B
|
\idToIso \tp A ≡ B → A ≊ B
|
||||||
$$
|
$$
|
||||||
|
\pause
|
||||||
For a category to be univalent we require this to be an equivalence:
|
For a category to be univalent we require this to be an equivalence:
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
\isEquiv\ (A \equiv B)\ (A \approxeq B)\ \idToIso
|
||||||
|
$$
|
||||||
|
%
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Categories}
|
||||||
|
\framesubtitle{Univalence, cont'd}
|
||||||
|
$$\isEquiv\ (A \equiv B)\ (A \approxeq B)\ \idToIso$$
|
||||||
|
\pause%
|
||||||
|
$$(A \equiv B) \simeq (A \approxeq B)$$
|
||||||
|
\pause%
|
||||||
|
$$(A \equiv B) \cong (A \approxeq B)$$
|
||||||
|
\pause%
|
||||||
|
Name the above maps:
|
||||||
|
$$\idToIso \tp A ≡ B → A ≊ B$$
|
||||||
|
%
|
||||||
|
$$\isoToId \tp (A \approxeq B) \to (A \equiv B)$$
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Categories}
|
||||||
|
\framesubtitle{Propositionality}
|
||||||
|
$$
|
||||||
|
\isProp\ \IsCategory = \prod_{a, b \tp \IsCategory} a \equiv b
|
||||||
|
$$
|
||||||
|
\pause
|
||||||
|
So, for
|
||||||
|
$$
|
||||||
|
a\ b \tp \IsCategory
|
||||||
|
$$
|
||||||
|
the proof obligation is the pair:
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
p & \tp a.\isPreCategory \equiv b.\isPreCategory \\
|
||||||
|
& \mathrel{\ } \Path\ (\lambda\; i \to (p\ i).Univalent)\ a.\isPreCategory\ b.\isPreCategory
|
||||||
|
\end{align*}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Categories}
|
||||||
|
\framesubtitle{Propositionality, cont'd}
|
||||||
|
First path given by:
|
||||||
|
$$
|
||||||
|
p
|
||||||
|
\defeq
|
||||||
|
\var{propIsPreCategory}\ a\ b
|
||||||
|
\tp
|
||||||
|
a.\isPreCategory \equiv b.\isPreCategory
|
||||||
|
$$
|
||||||
|
\pause
|
||||||
|
Use $\lemPropF$ for the latter.
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
Univalence is indexed by an identity proof. So $A \defeq
|
||||||
|
IsIdentity\ identity$ and $B \defeq \var{Univalent}$.
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
\lemPropF\ \var{propUnivalent}\ p
|
||||||
|
$$
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Categories}
|
||||||
|
\framesubtitle{A theorem}
|
||||||
|
%
|
||||||
|
Let the isomorphism $(ι, \inv{ι}) \tp A \approxeq B$.
|
||||||
|
%
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
The isomorphism induces the path
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
p \defeq \idToIso\ (\iota, \inv{\iota}) \tp A \equiv B
|
||||||
|
$$
|
||||||
|
%
|
||||||
|
\pause
|
||||||
|
and consequently an arrow:
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
p_{\var{dom}} \defeq \congruence\ (λ x → \Arrow\ x\ X)\ p
|
||||||
|
\tp
|
||||||
|
\Arrow\ A\ X \equiv \Arrow\ B\ X
|
||||||
|
$$
|
||||||
|
%
|
||||||
|
\pause
|
||||||
|
The proposition is:
|
||||||
|
%
|
||||||
|
\begin{align}
|
||||||
|
\label{eq:coeDom}
|
||||||
|
\tag{$\var{coeDom}$}
|
||||||
|
\prod_{f \tp A \to X}
|
||||||
|
\var{coe}\ p_{\var{dom}}\ f \equiv f \lll \inv{\iota}
|
||||||
|
\end{align}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Categories}
|
||||||
|
\framesubtitle{A theorem, proof}
|
||||||
|
\begin{align*}
|
||||||
|
\var{coe}\ p_{\var{dom}}\ f
|
||||||
|
& \equiv f \lll \inv{(\idToIso\ p)} && \text{By path-induction} \\
|
||||||
|
& \equiv f \lll \inv{\iota}
|
||||||
|
&& \text{$\idToIso$ and $\isoToId$ are inverses}\\
|
||||||
|
\end{align*}
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
Induction will be based at $A$. Let $\widetilde{B}$ and $\widetilde{p}
|
||||||
|
\tp A \equiv \widetilde{B}$ be given.
|
||||||
|
%
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
Define the family:
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
D\ \widetilde{B}\ \widetilde{p} \defeq
|
||||||
|
\var{coe}\ \widetilde{p}_{\var{dom}}\ f
|
||||||
|
\equiv
|
||||||
|
f \lll \inv{(\idToIso\ \widetilde{p})}
|
||||||
|
$$
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
The base-case becomes:
|
||||||
|
$$
|
||||||
|
d \tp D\ A\ \refl =
|
||||||
|
\var{coe}\ \refl_{\var{dom}}\ f \equiv f \lll \inv{(\idToIso\ \refl)}
|
||||||
|
$$
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Categories}
|
||||||
|
\framesubtitle{A theorem, proof, cont'd}
|
||||||
|
$$
|
||||||
|
d \tp
|
||||||
|
\var{coe}\ \refl_{\var{dom}}\ f \equiv f \lll \inv{(\idToIso\ \refl)}
|
||||||
|
$$
|
||||||
|
\pause
|
||||||
|
\begin{align*}
|
||||||
|
\var{coe}\ \refl^*\ f
|
||||||
|
& \equiv f
|
||||||
|
&& \text{$\refl$ is a neutral element for $\var{coe}$}\\
|
||||||
|
& \equiv f \lll \identity \\
|
||||||
|
& \equiv f \lll \var{subst}\ \refl\ \identity
|
||||||
|
&& \text{$\refl$ is a neutral element for $\var{subst}$}\\
|
||||||
|
& \equiv f \lll \inv{(\idToIso\ \refl)}
|
||||||
|
&& \text{By definition of $\idToIso$}\\
|
||||||
|
\end{align*}
|
||||||
|
\pause
|
||||||
|
In conclusion, the theorem is inhabited by:
|
||||||
|
$$
|
||||||
|
\label{eq:pathJ-example}
|
||||||
|
\pathJ\ D\ d\ B\ p
|
||||||
|
$$
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Span category} \framesubtitle{Definition} Given a base
|
||||||
|
category $\bC$ and two objects in this category $\pairA$ and $\pairB$
|
||||||
|
we can construct the \nomenindex{span category}:
|
||||||
|
%
|
||||||
|
\pause
|
||||||
|
Objects:
|
||||||
|
$$
|
||||||
|
\sum_{X \tp Object} \Arrow\ X\ \pairA × \Arrow\ X\ \pairB
|
||||||
|
$$
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
Arrows between objects $A ,\ a_{\pairA} ,\ a_{\pairB}$ and
|
||||||
|
$B ,\ b_{\pairA} ,\ b_{\pairB}$:
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
\sum_{f \tp \Arrow\ A\ B}
|
||||||
|
b_{\pairA} \lll f \equiv a_{\pairA} \x
|
||||||
|
b_{\pairB} \lll f \equiv a_{\pairB}
|
||||||
|
$$
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Span category}
|
||||||
|
\framesubtitle{Univalence}
|
||||||
|
\begin{align*}
|
||||||
|
\label{eq:univ-0}
|
||||||
|
(X , x_{\mathcal{A}} , x_{\mathcal{B}}) ≡ (Y , y_{\mathcal{A}} , y_{\mathcal{B}})
|
||||||
|
\end{align*}
|
||||||
|
\begin{align*}
|
||||||
|
\label{eq:univ-1}
|
||||||
|
\begin{split}
|
||||||
|
p \tp & X \equiv Y \\
|
||||||
|
& \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}}
|
||||||
|
\end{split}
|
||||||
|
\end{align*}
|
||||||
|
\begin{align*}
|
||||||
|
\begin{split}
|
||||||
|
\var{iso} \tp & X \approxeq Y \\
|
||||||
|
& \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}}
|
||||||
|
\end{split}
|
||||||
|
\end{align*}
|
||||||
|
\begin{align*}
|
||||||
|
(X , x_{\mathcal{A}} , x_{\mathcal{B}}) ≊ (Y , y_{\mathcal{A}} , y_{\mathcal{B}})
|
||||||
|
\end{align*}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Span category}
|
||||||
|
\framesubtitle{Univalence, proof}
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
%% (f, \inv{f}, \var{inv}_f, \var{inv}_{\inv{f}})
|
||||||
|
%% \tp
|
||||||
|
(X, x_{\mathcal{A}}, x_{\mathcal{B}}) \approxeq (Y, y_{\mathcal{A}}, y_{\mathcal{B}})
|
||||||
|
\to
|
||||||
|
\begin{split}
|
||||||
|
\var{iso} \tp & X \approxeq Y \\
|
||||||
|
& \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}}
|
||||||
|
\end{split}
|
||||||
|
\end{align*}
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
Let $(f, \inv{f}, \var{inv}_f, \var{inv}_{\inv{f}})$ be an inhabitant
|
||||||
|
of the antecedent.\pause
|
||||||
|
|
||||||
|
Projecting out the first component gives us the isomorphism
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
(\fst\ f, \fst\ \inv{f}
|
||||||
|
, \congruence\ \fst\ \var{inv}_f
|
||||||
|
, \congruence\ \fst\ \var{inv}_{\inv{f}}
|
||||||
|
)
|
||||||
|
\tp X \approxeq Y
|
||||||
|
$$
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
This gives rise to the following paths:
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\begin{split}
|
||||||
|
\widetilde{p} & \tp X \equiv Y \\
|
||||||
|
\widetilde{p}_{\mathcal{A}} & \tp \Arrow\ X\ \mathcal{A} \equiv \Arrow\ Y\ \mathcal{A} \\
|
||||||
|
\end{split}
|
||||||
|
\end{align*}
|
||||||
|
%
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Span category}
|
||||||
|
\framesubtitle{Univalence, proof, cont'd}
|
||||||
|
It remains to construct:
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\begin{split}
|
||||||
|
\label{eq:product-paths}
|
||||||
|
& \Path\ (λ i → \widetilde{p}_{\mathcal{A}}\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}
|
||||||
|
\end{split}
|
||||||
|
\end{align*}
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
This is achieved with the following lemma:
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\prod_{q \tp A \equiv B} \var{coe}\ q\ x_{\mathcal{A}} ≡ y_{\mathcal{A}}
|
||||||
|
→
|
||||||
|
\Path\ (λ i → q\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}
|
||||||
|
\end{align*}
|
||||||
|
%
|
||||||
|
Which is used without proof.\pause
|
||||||
|
|
||||||
|
So the construction reduces to:
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}} ≡ y_{\mathcal{A}}
|
||||||
|
\end{align*}%
|
||||||
|
\pause%
|
||||||
|
This is proven with:
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}}
|
||||||
|
& ≡ x_{\mathcal{A}} \lll \fst\ \inv{f} && \text{\ref{eq:coeDom}} \\
|
||||||
|
& ≡ y_{\mathcal{A}} && \text{Property of span category}
|
||||||
|
\end{align*}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Propositionality of products}
|
||||||
|
We have
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
\isProp\ \var{Terminal}
|
||||||
|
$$\pause
|
||||||
|
%
|
||||||
|
We can show:
|
||||||
|
\begin{align*}
|
||||||
|
\var{Terminal} ≃ \var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}
|
||||||
|
\end{align*}
|
||||||
|
\pause
|
||||||
|
And since equivalences preserve homotopy levels we get:
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
\isProp\ \left(\var{Product}\ \bC\ \mathcal{A}\ \mathcal{B}\right)
|
||||||
|
$$
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Monads}
|
||||||
|
\framesubtitle{Monoidal form}
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\EndoR & \tp \Endo ℂ \\
|
||||||
|
\pureNT
|
||||||
|
& \tp \NT{\EndoR^0}{\EndoR} \\
|
||||||
|
\joinNT
|
||||||
|
& \tp \NT{\EndoR^2}{\EndoR}
|
||||||
|
\end{align*}
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
Let $\fmap$ be the map on arrows of $\EndoR$. Likewise
|
||||||
|
$\pure$ and $\join$ are the maps of the natural transformations
|
||||||
|
$\pureNT$ and $\joinNT$ respectively.
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\join \lll \fmap\ \join
|
||||||
|
& ≡ \join \lll \join \\
|
||||||
|
\join \lll \pure\ & ≡ \identity \\
|
||||||
|
\join \lll \fmap\ \pure & ≡ \identity
|
||||||
|
\end{align*}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Monads}
|
||||||
|
\framesubtitle{Kleisli form}
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\omapR & \tp \Object → \Object \\
|
||||||
|
\pure & \tp % \prod_{X \tp Object}
|
||||||
|
\Arrow\ X\ (\omapR\ X) \\
|
||||||
|
\bind & \tp
|
||||||
|
\Arrow\ X\ (\omapR\ Y)
|
||||||
|
\to
|
||||||
|
\Arrow\ (\omapR\ X)\ (\omapR\ Y)
|
||||||
|
\end{align*}\pause
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\fish & \tp
|
||||||
|
\Arrow\ A\ (\omapR\ B)
|
||||||
|
→
|
||||||
|
\Arrow\ B\ (\omapR\ C)
|
||||||
|
→
|
||||||
|
\Arrow\ A\ (\omapR\ C) \\
|
||||||
|
f \fish g & \defeq f \rrr (\bind\ g)
|
||||||
|
\end{align*}
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
\begin{align*}
|
||||||
|
\label{eq:monad-kleisli-laws-0}
|
||||||
|
\bind\ \pure & ≡ \identity_{\omapR\ X} \\
|
||||||
|
\label{eq:monad-kleisli-laws-1}
|
||||||
|
\pure \fish f & ≡ f \\
|
||||||
|
\label{eq:monad-kleisli-laws-2}
|
||||||
|
(\bind\ f) \rrr (\bind\ g) & ≡ \bind\ (f \fish g)
|
||||||
|
\end{align*}
|
||||||
|
\end{frame}
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Monads}
|
||||||
|
\framesubtitle{Equivalence}
|
||||||
|
In the monoidal formulation we can define $\bind$:
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
\bind\ f \defeq \join \lll \fmap\ f
|
||||||
|
$$
|
||||||
|
\pause
|
||||||
|
%
|
||||||
|
And likewise in the Kleisli formulation we can define $\join$:
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
\join \defeq \bind\ \identity
|
||||||
|
$$
|
||||||
|
\pause
|
||||||
|
The laws are logically equivalent. So we get:
|
||||||
|
%
|
||||||
|
$$
|
||||||
|
\var{Monoidal} \simeq \var{Kleisli}
|
||||||
|
$$
|
||||||
|
%
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
|
@ -55,14 +55,7 @@ record RawCategory (ℓa ℓb : Level) : Set (lsuc (ℓa ⊔ ℓb)) where
|
||||||
-- infixl 8 _>>>_
|
-- infixl 8 _>>>_
|
||||||
infixl 10 _<<<_ _>>>_
|
infixl 10 _<<<_ _>>>_
|
||||||
|
|
||||||
-- | Operations on data
|
-- | Reverse arrow composition
|
||||||
|
|
||||||
domain : {a b : Object} → Arrow a b → Object
|
|
||||||
domain {a} _ = a
|
|
||||||
|
|
||||||
codomain : {a b : Object} → Arrow a b → Object
|
|
||||||
codomain {b = b} _ = b
|
|
||||||
|
|
||||||
_>>>_ : {A B C : Object} → (Arrow A B) → (Arrow B C) → Arrow A C
|
_>>>_ : {A B C : Object} → (Arrow A B) → (Arrow B C) → Arrow A C
|
||||||
f >>> g = g <<< f
|
f >>> g = g <<< f
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{-# OPTIONS --cubical --caching #-}
|
{-# OPTIONS --cubical --caching #-}
|
||||||
module Cat.Category.Product where
|
module Cat.Category.Product where
|
||||||
|
|
||||||
|
|
||||||
open import Cat.Prelude as P hiding (_×_ ; fst ; snd)
|
open import Cat.Prelude as P hiding (_×_ ; fst ; snd)
|
||||||
open import Cat.Equivalence
|
open import Cat.Equivalence
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue