Erratta
This commit is contained in:
parent
636b5f3e27
commit
1f750e2275
|
@ -1,21 +1,22 @@
|
||||||
\chapter*{Abstract}
|
\chapter*{Abstract}
|
||||||
The usual notion of propositional equality in intensional type-theory
|
The usual notion of propositional equality in intensional type-theory
|
||||||
is restrictive. For instance it does not admit functional
|
is restrictive. For instance it does not admit functional
|
||||||
extensionality or univalence. This poses a severe limitation on both
|
extensionality nor univalence. This poses a severe limitation on both
|
||||||
what is \emph{provable} and the \emph{re-usability} of proofs. Recent
|
what is \emph{provable} and the \emph{re-usability} of proofs. Recent
|
||||||
developments have, however, resulted in cubical type theory which
|
developments have however resulted in cubical type theory which
|
||||||
permits a constructive proof of these two important notions. The
|
permits a constructive proof of these two important notions. The
|
||||||
programming language Agda has been extended with capabilities for
|
programming language Agda has been extended with capabilities for
|
||||||
working in such a cubical setting. This thesis will explore the
|
working in such a cubical setting. This thesis will explore the
|
||||||
usefulness of this extension in the context of category theory.
|
usefulness of this extension in the context of category theory.
|
||||||
|
|
||||||
The thesis will motivate and explain why propositional equality in
|
The thesis will motivate the need for univalence and explain why
|
||||||
cubical Agda is more expressive than in standard Agda. Alternative
|
propositional equality in cubical Agda is more expressive than in
|
||||||
approaches to Cubical Agda will be presented and their pros and cons
|
standard Agda. Alternative approaches to Cubical Agda will be
|
||||||
will be explained. It will emphasize why it is useful to have a
|
presented and their pros and cons will be explained. As an example of
|
||||||
constructive interpretation of univalence. As an example of this two
|
the application of univalence two formulations of monads will be
|
||||||
formulations of monads will be presented: Namely monads in the
|
presented: Namely monads in the monoidal form and monads in the
|
||||||
monoidal form and monads in the Kleisli form.
|
Kleisli form and under the univalent interpretation it will be shown
|
||||||
|
how these are equal.
|
||||||
|
|
||||||
Finally the thesis will explain the challenges that a developer will
|
Finally the thesis will explain the challenges that a developer will
|
||||||
face when working with cubical Agda and give some techniques to
|
face when working with cubical Agda and give some techniques to
|
||||||
|
|
13
doc/acknowledgements.tex
Normal file
13
doc/acknowledgements.tex
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
\chapter*{Acknowledgements}
|
||||||
|
I would like to thank my supervisor Thierry Coquand for giving me a
|
||||||
|
chance to work on this interesting topic. I would also like to thank
|
||||||
|
Andrea Vezzosi for some very long and very insightful meetings during
|
||||||
|
the project. It is fascinating and almost uncanny how quickly Andrea
|
||||||
|
can conjure up various proofs. I also want to recognize the support
|
||||||
|
of Knud Højgaards Fond who graciously sponsored me with a 20.000 DKK
|
||||||
|
scholarship which helped toward sponsoring the two years I have spent
|
||||||
|
studying abroad. I would also like to give a warm thanks to my fellow
|
||||||
|
students Pierre Kraft and Nachiappan Villiappan who have made the time
|
||||||
|
spent working on the thesis way more enjoyable. Lastly I would like to
|
||||||
|
give a special thanks to Valentina Méndez who have been a great moral
|
||||||
|
support throughout the whole process.
|
|
@ -1,4 +1,4 @@
|
||||||
\chapter{Abstract functional extensionality}
|
\chapter{Non-reducing functional extensionality}
|
||||||
\label{app:abstract-funext}
|
\label{app:abstract-funext}
|
||||||
In two places in my formalization was the computational behaviours of
|
In two places in my formalization was the computational behaviours of
|
||||||
functional extensionality used. The reduction behaviour can be
|
functional extensionality used. The reduction behaviour can be
|
||||||
|
|
|
@ -46,7 +46,8 @@
|
||||||
{\Huge\@title}\\[.5cm]
|
{\Huge\@title}\\[.5cm]
|
||||||
{\Large A formalization of category theory in Cubical Agda}\\[6cm]
|
{\Large A formalization of category theory in Cubical Agda}\\[6cm]
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\includegraphics[width=\linewidth,keepaspectratio]{isomorphism.png}
|
\includegraphics[width=\linewidth,keepaspectratio]{isomorphism.pdf}
|
||||||
|
%% \includepdf{isomorphism.pdf}
|
||||||
\end{center}
|
\end{center}
|
||||||
% Cover text
|
% Cover text
|
||||||
\vfill
|
\vfill
|
||||||
|
|
|
@ -8,40 +8,46 @@ with an extension to Agda's type system called Cubical Agda. With
|
||||||
Cubical Agda both functional extensionality and univalence are
|
Cubical Agda both functional extensionality and univalence are
|
||||||
admissible. Cubical Agda is more expressive, but there are certain
|
admissible. Cubical Agda is more expressive, but there are certain
|
||||||
issues that arise that are not present in standard Agda. For one thing
|
issues that arise that are not present in standard Agda. For one thing
|
||||||
ITT and standard Agda enjoys Uniqueness of Identity Proofs (UIP). This
|
Agda enjoys Uniqueness of Identity Proofs (UIP) though a flag exists
|
||||||
is not the case in Cubical Agda. In stead there exists a hierarchy of
|
to turn this off, which is the case in Cubical Agda. In stead
|
||||||
types with increasing \nomen{homotopical structure}{homotopy levels}.
|
there exists a hierarchy of types with increasing \nomen{homotopical
|
||||||
It turns out to be useful to built the formalization with this
|
structure}{homotopy levels}. It turns out to be useful to built the
|
||||||
hierarchy in mind as it can simplify proofs considerably. Another
|
formalization with this hierarchy in mind as it can simplify proofs
|
||||||
issue one must overcome in Cubical Agda is when a type has a field
|
considerably. Another issue one must overcome in Cubical Agda is when
|
||||||
whose type depends on a previous field. In this case paths between
|
a type has a field whose type depends on a previous field. In this
|
||||||
such types will be heterogeneous paths. This problem is related to
|
case paths between such types will be heterogeneous paths. This
|
||||||
Cubical Agda not having the K-rule. In practice it turns out to be
|
problem is related to Cubical Agda not having the K-rule. In practice
|
||||||
considerably more difficult to work heterogeneous paths than with
|
it turns out to be considerably more difficult to work heterogeneous
|
||||||
homogeneous paths. The thesis demonstrated some techniques to overcome
|
paths than with homogeneous paths. The thesis demonstrated some
|
||||||
these difficulties, such as based path-induction.
|
techniques to overcome these difficulties, such as based
|
||||||
|
path-induction.
|
||||||
|
|
||||||
This thesis formalized some of the core concepts from category theory including;
|
This thesis formalized some of the core concepts from category theory
|
||||||
categories, functors, products, exponentials, Cartesian closed categories,
|
including; categories, functors, products, exponentials, Cartesian
|
||||||
natural transformations, the yoneda embedding, monads and more. Category theory
|
closed categories, natural transformations, the yoneda embedding,
|
||||||
is an interesting case-study for the application of Cubical Agda for two reasons
|
monads and more. Category theory is an interesting case-study for the
|
||||||
in particular: Because category theory is the study of abstract algebra of
|
application of Cubical Agda for two reasons in particular: Because
|
||||||
functions, meaning that functional extensionality is particularly relevant.
|
category theory is the study of abstract algebra of functions, meaning
|
||||||
Another reason is that in category theory it is commonplace to identify
|
that functional extensionality is particularly relevant. Another
|
||||||
isomorphic structures and univalence allows for making this notion precise. This
|
reason is that in category theory it is commonplace to identify
|
||||||
thesis also demonstrated another technique that is common in category theory;
|
isomorphic structures and univalence allows for making this notion
|
||||||
namely to define categories to prove properties of other structures.
|
precise. This thesis also demonstrated another technique that is
|
||||||
Specifically a category was defined to demonstrate that any two product objects
|
common in category theory; namely to define categories to prove
|
||||||
in a category are isomorphic. Furthermore the thesis showed two formulations of
|
properties of other structures. Specifically a category was defined
|
||||||
monads and proved that they indeed are equivalent: Namely monads in the
|
to demonstrate that any two product objects in a category are
|
||||||
monoidal- and Kleisli- form. The monoidal formulation is more typical to
|
isomorphic. Furthermore the thesis showed two formulations of monads
|
||||||
category theoretic formulations and the Kleisli formulation will be more
|
and proved that they indeed are equivalent: Namely monads in the
|
||||||
familiar to functional programmers. In the formulation we also saw how paths can
|
monoidal- and Kleisli- form. The monoidal formulation is more typical
|
||||||
be used to extract functions. A path between two types induce an isomorphism
|
to category theoretic formulations and the Kleisli formulation will be
|
||||||
between the two types. This e.g. permits developers to write a monad instance
|
more familiar to functional programmers. It would have been very
|
||||||
for a given type using the Kleisli formulation. By transporting along the path
|
difficult to make a similar proof with setoids. In the formulation we
|
||||||
between the monoidal- and Kleisli- formulation one can reuse all the operations
|
also saw how paths can be used to extract functions. A path between
|
||||||
and results shown for monoidal- monads in the context of kleisli monads.
|
two types induce an isomorphism between the two types. This
|
||||||
|
e.g. permits developers to write a monad instance for a given type
|
||||||
|
using the Kleisli formulation. By transporting along the path between
|
||||||
|
the monoidal- and Kleisli- formulation one can reuse all the
|
||||||
|
operations and results shown for monoidal- monads in the context of
|
||||||
|
kleisli monads.
|
||||||
%%
|
%%
|
||||||
%% problem with inductive type
|
%% problem with inductive type
|
||||||
%% overcome with cubical
|
%% overcome with cubical
|
||||||
|
|
281
doc/cubical.tex
281
doc/cubical.tex
|
@ -1,29 +1,31 @@
|
||||||
\chapter{Cubical Agda}
|
\chapter{Cubical Agda}
|
||||||
\section{Propositional equality}
|
\section{Propositional equality}
|
||||||
Judgmental equality in Agda is a feature of the type system. Its something that
|
Judgmental equality in Agda is a feature of the type system. It is
|
||||||
can be checked automatically by the type checker: In the example from the
|
something that can be checked automatically by the type checker: In
|
||||||
introduction $n + 0$ can be judged to be equal to $n$ simply by expanding the
|
the example from the introduction $n + 0$ can be judged to be equal to
|
||||||
definition of $+$.
|
$n$ simply by expanding the definition of $+$.
|
||||||
|
|
||||||
On the other hand, propositional equality is something defined within the
|
On the other hand, propositional equality is something defined within
|
||||||
language itself. Propositional equality cannot be derived automatically. The
|
the language itself. Propositional equality cannot be derived
|
||||||
normal definition of judgmental equality is an inductive data type. Cubical Agda
|
automatically. The normal definition of judgmental equality is an
|
||||||
discards this type in favor of a new primitives that has certain computational
|
inductive data type. Cubical Agda discards this type in favor of some
|
||||||
properties exclusive to it.
|
new primitives.
|
||||||
|
|
||||||
The source code can be browsed online and is linked in the beginning
|
Most of the source code related with this section is implemented in
|
||||||
of \S\ref{ch:implementation}.
|
\cite{cubical-demo} it can be browsed in hyperlinked and syntax
|
||||||
|
highlighted HTML online. The links can be found in the beginning of
|
||||||
|
section \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
|
||||||
two points of $A$; $a_0, a_1 \tp A$ we can form the type:
|
\MCU$ and two points hereof $a_0, a_1 \tp A$ we can form the type:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
a_0 \equiv a_1 \tp \MCU
|
a_0 \equiv a_1 \tp \MCU
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
In Agda this is defined as an inductive data type with the single constructor
|
In Agda this is defined as an inductive data type with the single
|
||||||
for any $a \tp A$:
|
constructor $\refl$ that for any $a \tp A$ gives:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\refl \tp a \equiv a
|
\refl \tp a \equiv a
|
||||||
|
@ -37,8 +39,8 @@ for equating points of different types. In this case given two types $A, B \tp
|
||||||
a \cong b \tp \MCU
|
a \cong b \tp \MCU
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
This is likewise defined as an inductive data type with a single constructors
|
This likewise has the single constructor $\refl$ that for any $a \tp
|
||||||
for any $a \tp A$:
|
A$ gives:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\refl \tp a \cong a
|
\refl \tp a \cong a
|
||||||
|
@ -51,28 +53,28 @@ heterogeneous paths respectively.
|
||||||
Judgmental equality in Cubical Agda is encapsulated with the type:
|
Judgmental equality in Cubical Agda is encapsulated with the type:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\Path \tp (P \tp I → \MCU) → P\ 0 → P\ 1 → \MCU
|
\Path \tp (P \tp \I → \MCU) → P\ 0 → P\ 1 → \MCU
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
$I$ is a special data type called the index set. $I$ can be thought of
|
The special type $\I$ is called the index set. The index set can be
|
||||||
simply as the interval on the real numbers from $0$ to $1$. $P$ is a
|
thought of simply as the interval on the real numbers from $0$ to $1$
|
||||||
family of types over the index set $I$. I will sometimes refer to $P$
|
(both inclusive). The family $P$ over $\I$ will be referred to as the
|
||||||
as the \nomenindex{path space} of some path $p \tp \Path\ P\ a\ b$. By
|
\nomenindex{path space} given some path $p \tp \Path\ P\ a\ b$. By
|
||||||
this token $P\ 0$ then corresponds to the type at the left-endpoint
|
that token $P\ 0$ corresponds to the type at the left endpoint of $p$.
|
||||||
and $P\ 1$ as the type at the right-endpoint. The type is called
|
Likewise $P\ 1$ is the type at the right endpoint. The type is called
|
||||||
$\Path$ because it is connected with paths in homotopy theory. The
|
$\Path$ because the idea has roots in homotopy theory. The intuition
|
||||||
intuition behind this is that $\Path$ describes paths in $\MCU$ --
|
is that $\Path$ describes\linebreak[1] paths in $\MCU$. I.e.\ paths
|
||||||
i.e.\ between types. For a path $p$ for the point $p\ i$ the index $i$
|
between types. For a path $p$ the expression $p\ i$ can be thought of
|
||||||
describes how far along the path one has moved. An inhabitant of
|
as a \emph{point} on this path. The index $i$ describes how far along
|
||||||
$\Path\ P\ a_0\ a_1$ is a (dependent-) function, $p$, from the
|
the path one has moved. An inhabitant of $\Path\ P\ a_0\ a_1$ is a
|
||||||
index-space to the path space:
|
(dependent) function from the index set to the path space:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
p \tp \prod_{i \tp I} P\ i
|
p \tp \prod_{i \tp \I} P\ i
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
Which must satisfy being judgmentally equal to $a_0$ (respectively $a_1$) at the
|
Which must satisfy being judgmentally equal to $a_0$ at the
|
||||||
endpoints. I.e.:
|
left endpoint and equal to $a_1$ at the other end. I.e.:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
p\ 0 & = a_0 \\
|
p\ 0 & = a_0 \\
|
||||||
|
@ -80,80 +82,77 @@ endpoints. I.e.:
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
The notion of \nomenindex{homogeneous equalities} is recovered when $P$ does not
|
The notion of \nomenindex{homogeneous equalities} is recovered when $P$ does not
|
||||||
depend on its argument. That is for $A \tp \MCU$, $a_0, a_1 \tp A$ the
|
depend on its argument. That is for $A \tp \MCU$ and $a_0, a_1 \tp A$ the
|
||||||
homogenous equality between $a_0$ and $a_1$ is the type:
|
homogenous equality between $a_0$ and $a_1$ is the type:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
a_0 \equiv a_1 \defeq \Path\ (\lambda i \to A)\ a_0\ a_1
|
a_0 \equiv a_1 \defeq \Path\ (\lambda\;i \to A)\ a_0\ a_1
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
I will generally prefer to use the notation
|
I will generally prefer to use the notation $a \equiv b$ when talking
|
||||||
$a \equiv b$ when talking about non-dependent paths and use the notation
|
about non-dependent paths and use the notation $\Path\ (\lambda\; i
|
||||||
$\Path\ (\lambda i \to P\ i)\ a\ b$ when the path space is of particular
|
\to P\ i)\ a\ b$ when the path space is of particular interest.
|
||||||
interest.
|
|
||||||
|
|
||||||
With this definition we can also recover reflexivity. That is, for any $A \tp
|
With this definition we can also recover reflexivity. That is, for any $A \tp
|
||||||
\MCU$ and $a \tp A$:
|
\MCU$ and $a \tp A$:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\begin{aligned}
|
\begin{aligned}
|
||||||
\refl & \tp \Path (\lambda i \to A)\ a\ a \\
|
\refl & \tp a \equiv a \\
|
||||||
\refl & \defeq \lambda i \to a
|
\refl & \defeq \lambda\; i \to a
|
||||||
\end{aligned}
|
\end{aligned}
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
Here the path space is $P \defeq \lambda i \to A$ and it satsifies $P\ i = A$
|
Here the path space is $P \defeq \lambda\; i \to A$ and it satsifies
|
||||||
definitionally. So to inhabit it, is to give a path $I \to A$ which is
|
$P\ i = A$ definitionally. So to inhabit it, is to give a path $\I \to
|
||||||
judgmentally $a$ at either endpoint. This is satisfied by the constant path;
|
A$ which is judgmentally $a$ at either endpoint. This is satisfied by
|
||||||
i.e.\ the path that stays at $a$ at any index $i$.
|
the constant path; i.e.\ the path that is constantly $a$ at any index
|
||||||
|
$i \tp \I$.
|
||||||
|
|
||||||
It is also surpisingly easy to show functional extensionality with which we can
|
It is also surprisingly easy to show functional extensionality.
|
||||||
construct a path between $f$ and $g$ -- the functions defined in the
|
Functional extensionality is the proposition that given a type $A \tp
|
||||||
introduction (section \S\ref{sec:functional-extensionality}). Functional
|
\MCU$, a family of types $B \tp A \to \MCU$ and functions $f, g \tp
|
||||||
extensionality is the proposition, given a type $A \tp \MCU$, a family of types
|
\prod_{a \tp A} B\ a$ gives:
|
||||||
$B \tp A \to \MCU$ and functions $f, g \tp \prod_{a \tp A} B\ a$:
|
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\label{eq:funExt}
|
\label{eq:funExt}
|
||||||
\funExt \tp \prod_{a \tp A} f\ a \equiv g\ a \to f \equiv g
|
\funExt \tp \left(\prod_{a \tp A} f\ a \equiv g\ a \right) \to f \equiv g
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
%% p = λ i a → p a i
|
%% p = λ\; i a → p a i
|
||||||
So given $p \tp \prod_{a \tp A} f\ a \equiv g\ a$ we must give a path $f \equiv
|
So given $η \tp \prod_{a \tp A} f\ a \equiv g\ a$ we must give a path $f \equiv
|
||||||
g$. That is a function $I \to \prod_{a \tp A} B\ a$. So let $i \tp I$ be given.
|
g$. That is a function $\I \to \prod_{a \tp A} B\ a$. So let $i \tp \I$ be given.
|
||||||
We must now give an expression $\phi \tp \prod_{a \tp A} B\ a$ satisfying
|
We must now give an expression $\phi \tp \prod_{a \tp A} B\ a$ satisfying
|
||||||
$\phi\ 0 \equiv f\ a$ and $\phi\ 1 \equiv g\ a$. This neccesitates that the
|
$\phi\ 0 \equiv f\ a$ and $\phi\ 1 \equiv g\ a$. This neccesitates that the
|
||||||
expression must be a lambda-abstraction, so let $a \tp A$ be given. Now we can
|
expression must be a lambda-abstraction, so let $a \tp A$ be given. Now we can
|
||||||
apply $a$ to $p$ and get the path $p\ a \tp f\ a \equiv g\ a$. And this exactly
|
apply $a$ to $η$ and get the path $η\ a \tp f\ a \equiv g\ a$. And this exactly
|
||||||
satisfied the conditions for $\phi$. In conclustion \ref{eq:funExt} is inhabited
|
satisfies the conditions for $\phi$. In conclustion \ref{eq:funExt} is inhabited
|
||||||
by the term:
|
by the term:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation*}
|
||||||
\label{eq:funExt}
|
\funExt\ η \defeq λ\; i\ a → η\ a\ i
|
||||||
\funExt\ p \defeq λ i\ a → p\ a\ i
|
\end{equation*}
|
||||||
\end{equation}
|
|
||||||
%
|
%
|
||||||
With this we can now prove the desired equality $f \equiv g$ from section
|
With $\funExt$ in place we can now construct a path between
|
||||||
\S\ref{sec:functional-extensionality}:
|
$\var{zeroLeft}$ and $\var{zeroRight}$ -- the functions defined in the
|
||||||
|
introduction \S\ref{sec:functional-extensionality}:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
p & \tp f \equiv g \\
|
p & \tp \var{zeroLeft} \equiv \var{zeroRight} \\
|
||||||
p & \defeq \funExt\ \phi
|
p & \defeq \funExt\ \var{zrn}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
Here $\phi \tp \prod_{n \tp \bN} \var{zeroLeft}\ n \equiv
|
Here $\var{zrn}$ is the proof from \ref{eq:zrn}.
|
||||||
\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
|
||||||
in some sense, any two inhabitants of $a \equiv b$ are ``equally good'' -- they
|
means that, in some sense, any two inhabitants of $a \equiv b$ are
|
||||||
do not have any interesting structure. This is referred to as Uniqueness of
|
``equally good''. They do not have any interesting structure. This is
|
||||||
Identity Proofs (UIP). Unfortunately it is not possible to have a type theory
|
referred to as Uniqueness of Identity Proofs (UIP). Unfortunately it
|
||||||
with both univalence and UIP. In stead we have a hierarchy of types with an
|
is not possible to have a type theory with both univalence and UIP. In
|
||||||
increasing amount of homotopic structure. At the bottom of this hierarchy we
|
stead in cubical Agda we have a hierarchy of types with an increasing
|
||||||
have the set of contractible types:
|
amount of homotopic structure. At the bottom of this hierarchy is the
|
||||||
|
set of contractible types:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\begin{aligned}
|
\begin{aligned}
|
||||||
|
@ -168,8 +167,9 @@ The first component of $\isContr\ A$ is called ``the center of contraction''.
|
||||||
Under the propositions-as-types interpretation of type theory $\isContr\ A$ can
|
Under the propositions-as-types interpretation of type theory $\isContr\ A$ can
|
||||||
be thought of as ``the true proposition $A$''. And indeed $\top$ is
|
be thought of as ``the true proposition $A$''. And indeed $\top$ is
|
||||||
contractible:
|
contractible:
|
||||||
|
%
|
||||||
\begin{equation*}
|
\begin{equation*}
|
||||||
\var{tt} , \lambda x \to \refl \tp \isContr\ \top
|
(\var{tt} , \lambda\; x \to \refl) \tp \isContr\ \top
|
||||||
\end{equation*}
|
\end{equation*}
|
||||||
%
|
%
|
||||||
It is a theorem that if a type is contractible, then it is isomorphic to the
|
It is a theorem that if a type is contractible, then it is isomorphic to the
|
||||||
|
@ -188,19 +188,19 @@ One can think of $\isProp\ A$ as the set of true and false propositions. And
|
||||||
indeed both $\top$ and $\bot$ are propositions:
|
indeed both $\top$ and $\bot$ are propositions:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
λ \var{tt}\ \var{tt} → refl & \tp \isProp\ ⊤ \\
|
(λ\; \var{tt}, \var{tt} → refl) & \tp \isProp\ ⊤ \\
|
||||||
λ\varnothing\ \varnothing & \tp \isProp\ ⊥
|
λ\;\varnothing\ \varnothing & \tp \isProp\ ⊥
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
The term $\varnothing$ is used here to denote an impossible pattern. It is a
|
The term $\varnothing$ is used here to denote an impossible pattern. It is a
|
||||||
theorem that if a mere proposition $A$ is inhabited, then so is it contractible.
|
theorem that if a mere proposition $A$ is inhabited, then so is it contractible.
|
||||||
If it is not inhabited it is equivalent to the empty-type (or false
|
If it is not inhabited it is equivalent to the empty-type (or false
|
||||||
proposition).\TODO{Cite}
|
proposition).
|
||||||
|
|
||||||
I will refer to a type $A \tp \MCU$ as a \emph{mere} proposition if I want to
|
I will refer to a type $A \tp \MCU$ as a \emph{mere proposition} if I want to
|
||||||
stress that we have $\isProp\ A$.
|
stress that we have $\isProp\ A$.
|
||||||
|
|
||||||
Then comes the set of homotopical sets:
|
The next step in the hierarchy is the set of homotopical sets:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\begin{aligned}
|
\begin{aligned}
|
||||||
|
@ -209,13 +209,14 @@ Then comes the set of homotopical sets:
|
||||||
\end{aligned}
|
\end{aligned}
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
I will not give an example of a set at this point. It turns out that proving
|
I will not give an example of a set at this point. It turns out that
|
||||||
e.g.\ $\isProp\ \bN$ is not so straight-forward (see \cite[\S3.1.4]{hott-2013}).
|
proving e.g.\ $\isProp\ \bN$ directly is not so straightforward (see
|
||||||
There will be examples of sets later in this report. At this point it should be
|
\cite[\S3.1.4]{hott-2013}). Hedberg's theorem states that any type
|
||||||
noted that the term ``set'' is somewhat conflated; there is the notion of sets
|
with decidable equality is a set. There will be examples of sets later
|
||||||
from set-theory, in Agda types are denoted \texttt{Set}. I will use it
|
in this report. At this point it should be noted that the term ``set''
|
||||||
consistently to refer to a type $A$ as a set exactly if $\isSet\ A$ is a
|
is somewhat conflated; there is the notion of sets from set-theory, in
|
||||||
proposition.
|
Agda types are denoted \texttt{Set}. I will use it consistently to
|
||||||
|
refer to a type $A$ as a set exactly if $\isSet\ A$ is a proposition.
|
||||||
|
|
||||||
As the reader may have guessed the next step in the hierarchy is the type:
|
As the reader may have guessed the next step in the hierarchy is the type:
|
||||||
%
|
%
|
||||||
|
@ -239,34 +240,40 @@ exposition:
|
||||||
Proposition: Homotopy levels are cumulative. That is, if $A \tp \MCU$ has
|
Proposition: Homotopy levels are cumulative. That is, if $A \tp \MCU$ has
|
||||||
homotopy level $n$ then so does it have $n + 1$.
|
homotopy level $n$ then so does it have $n + 1$.
|
||||||
|
|
||||||
Let $\left\Vert A \right\Vert = n$ denote that the level of $A$ is $n$.
|
For any level $n$ it is the case that to be of level $n$ is a mere proposition.
|
||||||
Proposition: For any homotopic level $n$ this is a mere proposition.
|
|
||||||
%
|
%
|
||||||
\section{A few lemmas}
|
\section{A few lemmas}
|
||||||
Rather than getting into the nitty-gritty details of Agda I venture to
|
Rather than getting into the nitty-gritty details of Agda I venture to
|
||||||
take a more ``combinator-based'' approach. That is, I will use
|
take a more ``combinator-based'' approach. That is I will use
|
||||||
theorems about paths already that have already been formalized.
|
theorems about paths that have already been formalized.
|
||||||
Specifically the results come from the Agda library \texttt{cubical}
|
Specifically the results come from the Agda library \texttt{cubical}
|
||||||
(\cite{cubical-demo}). I have used a handful of results from this
|
(\cite{cubical-demo}). I have used a handful of results from this
|
||||||
library as well as contributed a few lemmas myself.\footnote{The
|
library as well as contributed a few lemmas myself%
|
||||||
module \texttt{Cat.Prelude} lists the upstream dependencies. As well
|
\footnote{The module \texttt{Cat.Prelude} lists the upstream
|
||||||
my contribution to \texttt{cubical} can be found in the git logs
|
dependencies. As well my contribution to \texttt{cubical} can be
|
||||||
which are available at
|
found in the git logs which are available at
|
||||||
\hrefsymb{https://github.com/Saizan/cubical-demo}{\texttt{https://github.com/Saizan/cubical-demo}}.}
|
\hrefsymb{https://github.com/Saizan/cubical-demo}{\texttt{https://github.com/Saizan/cubical-demo}}.
|
||||||
|
}.
|
||||||
|
|
||||||
These theorems are all purely related to homotopy theory and cubical Agda and as
|
These theorems are all purely related to homotopy type theory and as
|
||||||
such not specific to the formalization of Category Theory. I will present a few
|
such not specific to the formalization of Category Theory. I will
|
||||||
of these theorems here, as they will be used later in chapter
|
present a few of these theorems here as they will be used throughout
|
||||||
\ref{ch:implementation} throughout.
|
chapter \ref{ch:implementation}. They should also give the reader some
|
||||||
|
intuition about the path type.
|
||||||
|
|
||||||
\subsection{Path induction}
|
\subsection{Path induction}
|
||||||
\label{sec:pathJ}
|
\label{sec:pathJ}
|
||||||
The induction principle for paths intuitively gives us a way to reason about a
|
The induction principle for paths intuitively gives us a way to reason
|
||||||
type family indexed by a path by only considering if said path is $\refl$ (the
|
about a type family indexed by a path by only considering if said path
|
||||||
\nomen{base case}{path induction}). For \emph{based path induction}, that equality is \emph{based}
|
is $\refl$ (the \nomen{base case}{path induction}). For \emph{based
|
||||||
at some element $a \tp A$.
|
path induction}, that equality is \emph{based} at some element $a
|
||||||
|
\tp A$.
|
||||||
|
|
||||||
Let a type $A \tp \MCU$ and an element of the type $a \tp A$ be given. $a$ is said to be the base of the induction. Given a family of types:
|
\pagebreak[3]
|
||||||
|
\begin{samepage}
|
||||||
|
Let a type $A \tp \MCU$ and an element of the type $a \tp A$ be
|
||||||
|
given. $a$ is said to be the base of the induction.\linebreak[3] Given
|
||||||
|
a family of types:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
D \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} \MCU
|
D \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} \MCU
|
||||||
|
@ -283,7 +290,8 @@ We have the function:
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\pathJ\ D\ d \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} D\ b\ p
|
\pathJ\ D\ d \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} D\ b\ p
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
\end{samepage}%
|
||||||
|
|
||||||
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
|
||||||
involution. Namely for any set $A \tp \MCU$, points $a, b \tp A$ and a path
|
involution. Namely for any set $A \tp \MCU$, points $a, b \tp A$ and a path
|
||||||
between them $p \tp a \equiv b$:
|
between them $p \tp a \equiv b$:
|
||||||
|
@ -293,8 +301,8 @@ between them $p \tp a \equiv b$:
|
||||||
\var{sym}\ (\var{sym}\ p) ≡ p
|
\var{sym}\ (\var{sym}\ p) ≡ p
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
The proof will be by induction on $p$ and will be based at $a$. That is, $D$
|
The proof will be by induction on $p$ and will be based at $a$. That
|
||||||
will be the family:
|
is $D$ will be the family:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
D & \tp \prod_{b' \tp A} \prod_{p \tp a ≡ b'} \MCU \\
|
D & \tp \prod_{b' \tp A} \prod_{p \tp a ≡ b'} \MCU \\
|
||||||
|
@ -319,7 +327,7 @@ definitionally. In summary \ref{eq:sym-invol} is inhabited by the term:
|
||||||
%
|
%
|
||||||
Another application of $\pathJ$ is for proving associativity of $\trans$. That
|
Another application of $\pathJ$ is for proving associativity of $\trans$. That
|
||||||
is, given a type $A \tp \MCU$, elements of $A$, $a, b, c, d \tp A$ and paths
|
is, given a type $A \tp \MCU$, elements of $A$, $a, b, c, d \tp A$ and paths
|
||||||
between them, $p \tp a \equiv b$, $q \tp b \equiv c$ and $r \tp c \equiv d$ we
|
between them $p \tp a \equiv b$, $q \tp b \equiv c$ and $r \tp c \equiv d$ we
|
||||||
have the following:
|
have the following:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
|
@ -351,49 +359,52 @@ conclusion \ref{eq:cum-trans} is inhabited by the term:
|
||||||
\pathJ\ T\ t\ d\ r
|
\pathJ\ T\ t\ d\ r
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
We shall see another application on path induction in \ref{eq:pathJ-example}.
|
We shall see another application of path induction in \ref{eq:pathJ-example}.
|
||||||
|
|
||||||
\subsection{Paths over propositions}
|
\subsection{Paths over propositions}
|
||||||
\label{sec:lemPropF}
|
\label{sec:lemPropF}
|
||||||
Another very useful combinator is $\lemPropF$:
|
Another very useful combinator is $\lemPropF$: Given a type $A \tp
|
||||||
|
\MCU$ and a type family on $A$; $D \tp A \to \MCU$. Let $\var{propD}
|
||||||
To `promote' this to a dependent path we can use another useful combinator;
|
\tp \prod_{x \tp A} \isProp\ (D\ x)$ be the proof that $D$ is a mere
|
||||||
$\lemPropF$. Given a type $A \tp \MCU$ and a type family on $A$; $P \tp A \to
|
proposition for all elements of $A$. Furthermore say we have a path
|
||||||
\MCU$. Let $\var{propP} \tp \prod_{x \tp A} \isProp\ (P\ x)$ be the proof that
|
between some two elements in $A$; $p \tp a_0 \equiv a_1$ then we can
|
||||||
$P$ is a mere proposition for all elements of $A$. Furthermore say we have a
|
built a heterogeneous path between any two elements of $d_0 \tp
|
||||||
path between some two elements in $A$; $p \tp a_0 \equiv a_1$ then we can built
|
D\ a_0$ and $d_1 \tp D\ a_1$.
|
||||||
a heterogeneous path between any two elements of $p_0 \tp P\ a_0$ and $p_1 \tp
|
|
||||||
P\ a_1$:
|
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\lemPropF\ \var{propP}\ p \tp \Path\ (\lambda\; i \mto P\ (p\ i))\ p_0\ p_1
|
\lemPropF\ \var{propD}\ p \tp \Path\ (\lambda\; i \mto D\ (p\ i))\ d_0\ d_1
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
This is quite a mouthful. So let me try to show how this is a very general and
|
Note that $d_0$ and $d_1$, though points of the same family, have
|
||||||
useful result.
|
different types. This is quite a mouthful. So let me try to show how
|
||||||
|
this is a very general and useful result.
|
||||||
|
|
||||||
Often when proving equalities between elements of some dependent types
|
Often when proving equalities between elements of some dependent types
|
||||||
$\lemPropF$ can be used to boil this complexity down to showing that the
|
$\lemPropF$ can be used to boil this complexity down to showing that
|
||||||
dependent parts of the type are mere propositions. For instance, saw we have a type:
|
the dependent parts of the type are mere propositions. For instance
|
||||||
|
say we have a type:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
T \defeq \sum_{a \tp A} P\ a
|
T \defeq \sum_{a \tp A} D\ a
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
For some proposition $P \tp A \to \MCU$. If we want to prove $t_0 \equiv t_1$
|
For some proposition $D \tp A \to \MCU$. That is we have $\var{propD}
|
||||||
for two elements $t_0, t_1 \tp T$ then this will be a pair of paths:
|
\tp \prod_{a \tp A} \isProp\ (D\ a)$. If we want to prove $t_0 \equiv
|
||||||
|
t_1$ for two elements $t_0, t_1 \tp T$ then this will be a pair of
|
||||||
|
paths:
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
p \tp & \fst\ t_0 \equiv \fst\ t_1 \\
|
p \tp & \fst\ t_0 \equiv \fst\ t_1 \\
|
||||||
& \Path\ (\lambda i \to P\ (p\ i))\ \snd\ t_0 \equiv \snd\ t_1
|
& \Path\ (\lambda\; i \to D\ (p\ i))\ (\snd\ t_0)\ (\snd\ t_1)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
Here $\lemPropF$ directly allow us to prove the latter of these:
|
Here $\lemPropF$ directly allow us to prove the latter of these given
|
||||||
|
that we have already provided $p$.
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\lemPropF\ \var{propP}\ p
|
\lemPropF\ \var{propD}\ p
|
||||||
\tp \Path\ (\lambda i \to P\ (p\ i))\ \snd\ t_0 \equiv \snd\ t_1
|
\tp \Path\ (\lambda\; i \to D\ (p\ i))\ (\snd\ t_0)\ (\snd\ t_1)
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
\subsection{Functions over propositions}
|
\subsection{Functions over propositions}
|
||||||
|
@ -407,9 +418,9 @@ $$
|
||||||
\subsection{Pairs over propositions}
|
\subsection{Pairs over propositions}
|
||||||
\label{sec:propSig}
|
\label{sec:propSig}
|
||||||
%
|
%
|
||||||
$\sum$-types preserve propositionality whenever its first component is a
|
$\sum$-types preserve propositionality whenever its first component is
|
||||||
proposition, and its second component is a proposition for all points of in the
|
a proposition, and its second component is a proposition for all
|
||||||
left type.
|
points of the left type.
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\mathit{propSig} \tp \isProp\ A \to \left(\prod_{a \tp A} \isProp\ (P\ a)\right) \to \isProp\ \left(\sum_{a \tp A} P\ a\right)
|
\mathit{propSig} \tp \isProp\ A \to \left(\prod_{a \tp A} \isProp\ (P\ a)\right) \to \isProp\ \left(\sum_{a \tp A} P\ a\right)
|
||||||
|
|
|
@ -90,7 +90,7 @@ been put towards proving things that would not have been needed in
|
||||||
classical Agda. The proofs that some given type is a proposition were
|
classical Agda. The proofs that some given type is a proposition were
|
||||||
provided as a strategy to simplify some otherwise very complicated
|
provided as a strategy to simplify some otherwise very complicated
|
||||||
proofs (e.g. \ref{eq:proof-prop-IsPreCategory}
|
proofs (e.g. \ref{eq:proof-prop-IsPreCategory}
|
||||||
and \label{eq:productPath}). Often these proofs would not be this
|
and \ref{eq:productPath}). Often these proofs would not be this
|
||||||
complicated. If the J-rule holds definitionally the proof-assistant
|
complicated. If the J-rule holds definitionally the proof-assistant
|
||||||
can help simplify these goals considerably. The lack of the J-rule has
|
can help simplify these goals considerably. The lack of the J-rule has
|
||||||
a significant impact on the complexity of these kinds of proofs.
|
a significant impact on the complexity of these kinds of proofs.
|
||||||
|
@ -112,11 +112,6 @@ very simple example this is of course not a big problem, but there are
|
||||||
examples in the source code where this gets more involved.
|
examples in the source code where this gets more involved.
|
||||||
|
|
||||||
\section{Future work}
|
\section{Future work}
|
||||||
\subsection{Agda \texttt{Prop}}
|
|
||||||
Jesper Cockx' work extending the universe-level-laws for Agda and the
|
|
||||||
\texttt{Prop}-type.
|
|
||||||
\TODO{Do I want to include this?}
|
|
||||||
|
|
||||||
\subsection{Compiling Cubical Agda}
|
\subsection{Compiling Cubical Agda}
|
||||||
\label{sec:compiling-cubical-agda}
|
\label{sec:compiling-cubical-agda}
|
||||||
Compilation of program written in Cubical Agda is currently not
|
Compilation of program written in Cubical Agda is currently not
|
||||||
|
@ -137,3 +132,9 @@ in the context of Category Theory.
|
||||||
A fellow student here at Chalmers, Andreas Källberg, is currently
|
A fellow student here at Chalmers, Andreas Källberg, is currently
|
||||||
working on proving the initiality conjecture\TODO{Citation}. He will
|
working on proving the initiality conjecture\TODO{Citation}. He will
|
||||||
be using this library to do so.
|
be using this library to do so.
|
||||||
|
|
||||||
|
\subsection{Proving laws of programs}
|
||||||
|
Another interesting thing would be to use the Kleisli formulation of
|
||||||
|
monads to prove properties of functional programs. The existence of
|
||||||
|
univalence will make it possible to re-use proofs stated in terms of
|
||||||
|
the monoidal formulation in this setting.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
\chapter{Category Theory}
|
\chapter{Category Theory}
|
||||||
\label{ch:implementation}
|
\label{ch:implementation}
|
||||||
This implementaiton, including this report, is available as open
|
The source code for this formalization, including this report, is
|
||||||
source software at:
|
available as open source software at:
|
||||||
%
|
%
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\gitlink
|
\gitlink
|
||||||
|
@ -17,7 +17,7 @@ link\footnote{%
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\doclink
|
\doclink
|
||||||
\end{center}
|
\end{center}
|
||||||
This implementation formalizes the following concepts:
|
The concepts formalized in this development are:
|
||||||
%
|
%
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tabular}{ l l }
|
\begin{tabular}{ l l }
|
||||||
|
@ -41,6 +41,7 @@ Span category & \sourcelink{Cat.Categories.Span} \\
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{center}
|
\end{center}
|
||||||
%
|
%
|
||||||
|
\begin{samepage}
|
||||||
Furthermore the following items have been partly formalized:
|
Furthermore the following items have been partly formalized:
|
||||||
%
|
%
|
||||||
\begin{center}
|
\begin{center}
|
||||||
|
@ -54,70 +55,75 @@ Free category & \sourcelink{Cat.Categories.Free} \\
|
||||||
Monoids & \sourcelink{Cat.Category.Monoid} \\
|
Monoids & \sourcelink{Cat.Category.Monoid} \\
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
\end{samepage}%
|
||||||
%
|
%
|
||||||
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
|
||||||
formalized. In stead, I have selected parts of this formalization that
|
formalized. In stead I have selected parts of this formalization that
|
||||||
highlight some interesting proof techniques relevant to doing proofs
|
highlight some interesting proof techniques relevant to doing proofs
|
||||||
in Cubical Agda. This chapter will focus on the definition of
|
in Cubical Agda. This chapter will focus on the definition of
|
||||||
\emph{categories}, \emph{equivalences}, the \emph{opposite category},
|
\emph{categories}, \emph{equivalences}, the \emph{opposite category},
|
||||||
the \emph{category of sets}, \emph{products}, the \emph{span category}
|
the \emph{category of sets}, \emph{products}, the \emph{span category}
|
||||||
and the two formulations of \emph{monads}.
|
and the two formulations of \emph{monads}.
|
||||||
|
|
||||||
One such technique that is pervasive to this formalization is the idea of
|
One technique employed throughout this formalization is the idea of
|
||||||
distinguishing types with more or less homotopical structure. To do this I have
|
distinguishing types with more or less homotopical structure. To do
|
||||||
followed the following design-principle: I have split concepts up into things
|
this I have followed the following design-principle: I have split
|
||||||
that represent ``data'' and ``laws'' about this data. The idea is that we can
|
concepts up into things that represent \emph{data} and \emph{laws}
|
||||||
provide a proof that the laws are mere propositions. As an example a category is
|
about this data. The idea is that we can provide a proof that the laws
|
||||||
defined to have two members: `raw` which is a collection of the data and
|
are mere propositions. As an example a category is defined to have two
|
||||||
`isCategory` which asserts some laws about that data.
|
members: $\var{raw}$ which is a collection of the data and
|
||||||
|
$\var{isCategory}$ which asserts some laws about that data.
|
||||||
|
|
||||||
This allows me to reason about things in a more ``standard mathematical way'',
|
This allows me to reason about things in a more ``standard
|
||||||
where one can reason about two categories by simply focusing on the data. This
|
mathematical way'', where one can reason about two categories by
|
||||||
is achieved by creating a function embodying the ``equality principle'' for a
|
simply focusing on the data. This is achieved by creating a function
|
||||||
given type.
|
embodying the equality principle for a given type.
|
||||||
|
|
||||||
For the rest of this chapter I will present some of these results. For
|
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
|
didactic reasons no source-code has been included in this chapter. To
|
||||||
see the formal definitions the reader is referred to the
|
see the formal definitions the reader is referred to the
|
||||||
implementation which is linked in \S\ref{ch:implementation}.
|
implementation which is linked in the tables above.
|
||||||
|
|
||||||
\section{Categories}
|
\section{Categories}
|
||||||
\label{sec:categories}
|
\label{sec:categories}
|
||||||
The data for a category consist of a type for the sort of objects; a type for
|
The data for a category consist of a type for the sort of objects; a
|
||||||
the sort of arrows; an identity arrow and a composition operation for arrows.
|
type for the sort of arrows; an identity arrow and a composition
|
||||||
Another record encapsulates some laws about this data: associativity of
|
operation for arrows. Another record encapsulates some laws about
|
||||||
composition, identity law for the identity morphism. These are standard
|
this data: associativity of composition, identity law for the identity
|
||||||
constituents of a category and can be found in typical mathematical expositions
|
morphism. These are standard constituents of a category and can be
|
||||||
on the topic. We, however, impose one further requirement on what it means to be
|
found in typical mathematical expositions on the topic. We shall
|
||||||
a category, namely that the type of arrows form a set.
|
impose one further requirement on what it means to be a category,
|
||||||
|
namely that the type of arrows form a set.
|
||||||
|
|
||||||
Such categories are called \nomen{1-categories}{1-category}. It is possible to relax
|
Such categories are called \nomen{1-categories}{1-category}. It is
|
||||||
this requirement. This would lead to the notion of higher categories (\cite[p.
|
possible to relax this requirement. This would lead to the notion of
|
||||||
307]{hott-2013}). For the purpose of this project, however, this report will
|
higher categories (\cite[p. 307]{hott-2013}). For the purpose of this
|
||||||
restrict itself to 1-categories\index{1-category}. Generalizing this work to
|
thesis however, this report will restrict itself to
|
||||||
higher categories would be a very natural possible extension of this work.
|
1-categories\index{1-category}. Generalizing this work to higher
|
||||||
|
categories would be a very natural extension of this work.
|
||||||
|
|
||||||
Raw categories satisfying all of the above requirements are called a
|
Raw categories satisfying all of the above requirements are called a
|
||||||
\nomenindex{pre categories}. As a further requirement to be a proper category we
|
\nomenindex{pre-categories}. As a further requirement to be a proper category we
|
||||||
require it to be univalent. Before we can define this, I must introduce two more
|
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:
|
definitions: If we let $p$ be a witness to the identity law, which formally is:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\label{eq:identity}
|
\label{eq:identity}
|
||||||
\var{IsIdentity} \defeq
|
\var{IsIdentity} \defeq
|
||||||
\prod_{A\ B \tp \Object} \prod_{f \tp \Arrow\ A\ B}
|
\prod_{A, B \tp \Object} \prod_{f \tp \Arrow\ A\ B}
|
||||||
\left(\id \lll f \equiv f\right) \x \left(f \lll \id \equiv f\right)
|
\left(\id \lll f \equiv f\right) \x \left(f \lll \id \equiv f\right)
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
Then we can construct the identity isomorphism $\idIso \tp \identity,
|
Then we can construct the identity isomorphism $\idIso \tp (\identity,
|
||||||
\identity, p \tp A \approxeq A$ for any object $A$. Here $\approxeq$ denotes
|
\identity, p) \tp A \approxeq A$ for any object $A$. Here $\approxeq$
|
||||||
isomorphism on objects (whereas $\cong$ denotes isomorphism of types). This will
|
denotes isomorphism on objects (whereas $\cong$ denotes isomorphism on
|
||||||
be elaborated further on in sections \S\ref{sec:equiv} and
|
types). This will be elaborated further on in sections
|
||||||
\S\ref{sec:univalence}. Moreover, due to substitution for paths we can construct
|
\S\ref{sec:equiv} and \S\ref{sec:univalence}. Moreover due to
|
||||||
an isomorphism from \emph{any} path:
|
substitution for paths we can construct an isomorphism from \emph{any}
|
||||||
|
path:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\idToIso \tp A ≡ B → A ≊ B
|
\idToIso \tp A ≡ B → A ≊ B
|
||||||
|
@ -140,12 +146,13 @@ Note that \ref{eq:cat-univ} is \emph{not} the same as:
|
||||||
(A \equiv B) \simeq (A \approxeq B)
|
(A \equiv B) \simeq (A \approxeq B)
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
However the two are logically equivalent: One can construct the latter from the
|
However the two are logically equivalent: One can construct the latter
|
||||||
former simply by ``forgetting'' that $\idToIso$ plays the role of the
|
from the former simply by ``forgetting'' that $\idToIso$ plays the
|
||||||
equivalence. The other direction is more involved and will be discussed in
|
role of the equivalence. The other direction is more involved and will
|
||||||
section \S\ref{sec:univalence}.
|
be discussed in section \S\ref{sec:univalence}.
|
||||||
|
|
||||||
In summary, the definition of a category is the following collection of data:
|
In summary the definition of a category is the following collection of
|
||||||
|
data:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\Object & \tp \Type \\
|
\Object & \tp \Type \\
|
||||||
|
@ -180,19 +187,20 @@ composition (left-to-right, diagrammatic order) is denoted $\rrr$. The objects
|
||||||
($A$, $B$ and $C$) and arrow ($f$, $g$, $h$) are implicitly universally
|
($A$, $B$ and $C$) and arrow ($f$, $g$, $h$) are implicitly universally
|
||||||
quantified.
|
quantified.
|
||||||
|
|
||||||
With all this in place it is now possible to prove that all the laws are indeed
|
With all this in place it is now possible to prove that all the laws
|
||||||
mere propositions. Most of the proofs simply use the fact that the type of
|
are indeed mere propositions. Most of the proofs simply use the fact
|
||||||
arrows are sets. This is because most of the laws are a collection of equations
|
that the type of arrows are sets. This is because most of the laws are
|
||||||
between arrows in the category. And since such a proof does not have any content
|
a collection of equations between arrows in the category. And since
|
||||||
exactly because the type of arrows form a set, two witnesses must be the same.
|
such a proof does not have any content exactly because the type of
|
||||||
All the proofs are really quite mechanical. Lets have a look at one of them.
|
arrows form a set, two witnesses must be the same. All the proofs are
|
||||||
Proving that \ref{eq:identity} is a mere proposition:
|
really quite mechanical. Let us have a look at one of them: Proving
|
||||||
|
that \ref{eq:identity} is a mere proposition:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\isProp\ \var{IsIdentity}
|
\isProp\ \var{IsIdentity}
|
||||||
\end{equation}
|
\end{equation}
|
||||||
%
|
%
|
||||||
There are multiple ways to prove this. Perhaps one of the more intuitive proofs
|
There are multiple ways to do this. Perhaps one of the more intuitive proofs
|
||||||
is by way of the `combinators' $\propPi$ and $\propSig$ presented in sections
|
is by way of the `combinators' $\propPi$ and $\propSig$ presented in sections
|
||||||
\S\ref{sec:propPi} and \S\ref{sec:propSig}:
|
\S\ref{sec:propPi} and \S\ref{sec:propSig}:
|
||||||
%
|
%
|
||||||
|
@ -202,25 +210,26 @@ is by way of the `combinators' $\propPi$ and $\propSig$ presented in sections
|
||||||
\propSig & \tp \isProp\ A \to \left(\prod_{a \tp A} \isProp\ (P\ a)\right) \to \isProp\ \left(\sum_{a \tp A} P\ a\right)
|
\propSig & \tp \isProp\ A \to \left(\prod_{a \tp A} \isProp\ (P\ a)\right) \to \isProp\ \left(\sum_{a \tp A} P\ a\right)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
So the proof goes like this: We `eliminate' the 3 function abstractions by
|
The proof goes like this: We `eliminate' the 3 function abstractions
|
||||||
applying $\propPi$ three times. So our proof obligation becomes:
|
by applying $\propPi$ three times. So our proof obligation becomes:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\isProp\ \left( \left( \id \comp f \equiv f \right) \x \left( f \comp \id \equiv f \right) \right)
|
\isProp\ \left( \left( \id \comp f \equiv f \right) \x \left( f \comp \id \equiv f \right) \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
|
||||||
us the two obligations: $\isProp\ (\id \comp f \equiv f)$ and $\isProp\ (f \comp
|
us the two obligations $\isProp\ (\id \comp f \equiv f)$ and $\isProp\ (f \comp
|
||||||
\id \equiv f)$ which follows from the type of arrows being a
|
\id \equiv f)$ which follows from the type of arrows being a
|
||||||
set.
|
set.
|
||||||
|
|
||||||
This example illustrates nicely how we can use these combinators to reason about
|
This example illustrates nicely how we can use these combinators to
|
||||||
`canonical' types like $\sum$ and $\prod$. Similar combinators can be defined at
|
reason about `canonical' types like $\sum$ and $\prod$. Similar
|
||||||
the other homotopic levels. These combinators are however not applicable in
|
combinators can be defined at the other homotopic levels. These
|
||||||
situations where we want to reason about other types - e.g.\ types we have
|
combinators are however not applicable in situations where we want to
|
||||||
defined ourselves. For instance, after we have proven that all the projections
|
reason about other types e.g.\ types we have defined ourselves. For
|
||||||
of pre categories are propositions, then we would like to bundle this up to show
|
instance, after we have proven that all the projections of
|
||||||
that the type of pre categories is also a proposition. Formally:
|
pre-categories are propositions, we would like to bundle this up to
|
||||||
|
show that the type of pre-categories is also a proposition. Formally:
|
||||||
%
|
%
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\label{eq:propIsPreCategory}
|
\label{eq:propIsPreCategory}
|
||||||
|
@ -235,19 +244,20 @@ Where The definition of $\IsPreCategory$ is the triple:
|
||||||
\var{arrowsAreSets} & \tp \var{ArrowsAreSets}
|
\var{arrowsAreSets} & \tp \var{ArrowsAreSets}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
Each corresponding to the first three laws for categories. Note that since
|
Each corresponding to the first three laws for categories. Note that
|
||||||
$\IsPreCategory$ is not formulated with a chain of sigma-types we wont have any
|
since $\IsPreCategory$ is not formulated with a chain of sigma-types
|
||||||
combinators available to help us here. In stead the paths must be used directly.
|
we will not have any combinators available to help us here. In stead
|
||||||
|
the path type must be used directly.
|
||||||
|
|
||||||
\ref{eq:propIsPreCategory} is judgmentally the same as:
|
The type \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 to prove the proposition let $a\ b \tp \IsPreCategory$ be given. To
|
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
|
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
|
index-type into the path-space. I.e.\ a function $\I \to
|
||||||
\IsPreCategory$. This path must satisfy being being judgmentally the
|
\IsPreCategory$. This path must satisfy being being judgmentally the
|
||||||
same as $a$ at the left endpoint and $b$ at the right endpoint. We
|
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
|
know we can form a continuous path between all projections of $a$ and
|
||||||
|
@ -261,8 +271,8 @@ $$
|
||||||
a.\isIdentity \equiv b.\isIdentity
|
a.\isIdentity \equiv b.\isIdentity
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
So to give the continuous function $I \to \IsPreCategory$, which is our goal, we
|
So to give the continuous function $\I \to \IsPreCategory$, which is our goal, we
|
||||||
introduce $i \tp I$ and proceed by constructing an element of $\IsPreCategory$
|
introduce $i \tp \I$ and proceed by constructing an element of $\IsPreCategory$
|
||||||
by using the fact that all the projections are propositions to generate paths
|
by using the fact that all the projections are propositions to generate paths
|
||||||
between all projections. Once we have such a path e.g.\ $p \tp a.\isIdentity
|
between all projections. Once we have such a path e.g.\ $p \tp a.\isIdentity
|
||||||
\equiv b.\isIdentity$ we can eliminate it with $i$ and thus obtain $p\ i \tp
|
\equiv b.\isIdentity$ we can eliminate it with $i$ and thus obtain $p\ i \tp
|
||||||
|
@ -299,9 +309,9 @@ unique.
|
||||||
The situation is a bit more complicated when we have a dependent type.
|
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
|
For instance, when we want to show that $\IsCategory$ is a mere
|
||||||
proposition. The type $\IsCategory$ is a record with two fields, a
|
proposition. The type $\IsCategory$ is a record with two fields, a
|
||||||
witness to being a pre category and the univalence condition. Recall
|
witness to being a pre-category and the univalence condition. Recall
|
||||||
that the univalence condition is indexed by the identity-proof. So to
|
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,
|
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:
|
to show them equal, we now need to give two paths. One homogeneous:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
|
@ -463,7 +473,7 @@ equalities and isomorphisms (on arrows). It is worthwhile to dwell on this for a
|
||||||
few seconds. This type looks very similar to univalence for types and is
|
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
|
therefore perhaps a bit more intuitive to grasp the implications of. Of course
|
||||||
univalence for types (which is a proposition -- i.e.\ provable) does not imply
|
univalence for types (which is a proposition -- i.e.\ provable) does not imply
|
||||||
univalence of all pre category since morphisms in a category are not regular
|
univalence of all pre-category since morphisms in a category are not regular
|
||||||
functions -- in stead they can be thought of as a generalization hereof. The univalence criterion therefore is simply a way of restricting arrows
|
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.
|
to behave similarly to maps.
|
||||||
|
|
||||||
|
@ -581,7 +591,7 @@ over-bar. So e.g.\ $\idToIso$ is a function in the underlying category and the
|
||||||
corresponding thing is denoted $\wideoverbar{\idToIso}$ in the opposite
|
corresponding thing is denoted $\wideoverbar{\idToIso}$ in the opposite
|
||||||
category.
|
category.
|
||||||
|
|
||||||
Showing that this forms a pre category is rather straightforward.
|
Showing that this forms a pre-category is rather straightforward.
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
h \rrr (g \rrr f) \equiv h \rrr g \rrr f
|
h \rrr (g \rrr f) \equiv h \rrr g \rrr f
|
||||||
|
@ -600,7 +610,7 @@ Finally, that the arrows form sets just follows by flipping the order of the
|
||||||
arguments. Or in other words; since $\Arrow\ A\ B$ is a set for all $A\;B \tp
|
arguments. Or in other words; since $\Arrow\ A\ B$ is a set for all $A\;B \tp
|
||||||
\Object$ then so is $Arrow\ B\ A$.
|
\Object$ then so is $Arrow\ B\ A$.
|
||||||
|
|
||||||
Now, to show that this category is univalent is not as straight-forward. Luckily
|
Now, to show that this category is univalent is not as straightforward. Luckily
|
||||||
section \S\ref{sec:equiv} gave us some tools to work with equivalences. We saw
|
section \S\ref{sec:equiv} gave us some tools to work with equivalences. We saw
|
||||||
that we can prove this category univalent by giving an inverse to
|
that we can prove this category univalent by giving an inverse to
|
||||||
$\wideoverbar{\idToIso} \tp (A \equiv B) \to (A \wideoverbar{\approxeq} B)$.
|
$\wideoverbar{\idToIso} \tp (A \equiv B) \to (A \wideoverbar{\approxeq} B)$.
|
||||||
|
@ -624,7 +634,7 @@ follows:
|
||||||
\wideoverbar{\isoToId} \comp \wideoverbar{\idToIso} & =
|
\wideoverbar{\isoToId} \comp \wideoverbar{\idToIso} & =
|
||||||
\isoToId \comp \shufflef \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 \shufflef \comp \inv{\shufflef} \comp \idToIso
|
\isoToId \comp \shufflef \comp \inv{\shufflef} \comp \idToIso
|
||||||
|
@ -641,7 +651,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{\shufflef} \comp \idToIso$. This is a rather straight-forward proof
|
\inv{\shufflef} \comp \idToIso$. This is a rather straightforward 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.
|
||||||
|
|
||||||
|
@ -673,7 +683,7 @@ homotopic sets. This is encapsulated in Agda with the following type:
|
||||||
%
|
%
|
||||||
$$\Set \defeq \sum_{A \tp \MCU} \isSet\ A$$
|
$$\Set \defeq \sum_{A \tp \MCU} \isSet\ A$$
|
||||||
%
|
%
|
||||||
The more straight-forward notion of a category where the objects are types is
|
The more straightforward notion of a category where the objects are types is
|
||||||
not a valid \mbox{(1-)category}. This stems from the fact that types in cubical
|
not a valid \mbox{(1-)category}. This stems from the fact that types in cubical
|
||||||
Agda types can have higher homotopic structure.
|
Agda types can have higher homotopic structure.
|
||||||
|
|
||||||
|
@ -681,7 +691,7 @@ Univalence does not follow immediately from univalence for types:
|
||||||
%
|
%
|
||||||
$$(A \equiv B) \simeq (A \simeq B)$$
|
$$(A \equiv B) \simeq (A \simeq B)$$
|
||||||
%
|
%
|
||||||
Because here $A\ B \tp \Type$ whereas the objects in this category have the type
|
Because here $A, B \tp \Type$ whereas the objects in this category have the type
|
||||||
$\Set$ so we cannot form the type $\var{hA} \simeq \var{hB}$ for objects
|
$\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
|
$\var{hA}\;\var{hB} \tp \Set$. In stead I show that this category
|
||||||
satisfies:
|
satisfies:
|
||||||
|
@ -956,7 +966,7 @@ underlying category. Given that $p$ is the chosen proof of
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\label{eq:productPath}
|
\label{eq:productPath}
|
||||||
λ\ i → d_{\pairA} \lll p\ i ≡ 2 a_{\pairA} × d_{\pairB} \lll p\ i ≡ a_{\pairB}
|
λ \; i → d_{\pairA} \lll p\ i ≡ 2 a_{\pairA} × d_{\pairB} \lll p\ i ≡ a_{\pairB}
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
And these paths are in the type of the hom-set of the underlying category, so
|
And these paths are in the type of the hom-set of the underlying category, so
|
||||||
|
@ -1006,7 +1016,7 @@ $$
|
||||||
This we get from \ref{eq:productEqPrinc} and the fact that homotopical structure
|
This we get from \ref{eq:productEqPrinc} and the fact that homotopical structure
|
||||||
is cumulative.
|
is cumulative.
|
||||||
|
|
||||||
This finishes the proof that this is a valid pre category.
|
This finishes the proof that this is a valid pre-category.
|
||||||
|
|
||||||
\subsubsection{Univalence}
|
\subsubsection{Univalence}
|
||||||
To prove that this is a proper category it must be shown that it is univalent.
|
To prove that this is a proper category it must be shown that it is univalent.
|
||||||
|
@ -1032,8 +1042,8 @@ The next types will be the triple:
|
||||||
\label{eq:univ-1}
|
\label{eq:univ-1}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
p \tp & X \equiv Y \\
|
p \tp & X \equiv Y \\
|
||||||
& \Path\ (λ i → \Arrow\ (p\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
& \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}}
|
& \Path\ (λ \; i → \Arrow\ (p\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||||
\end{split}
|
\end{split}
|
||||||
%% \end{split}
|
%% \end{split}
|
||||||
\end{align}
|
\end{align}
|
||||||
|
@ -1045,8 +1055,8 @@ isomorphism, and create a path from this:
|
||||||
\label{eq:univ-2}
|
\label{eq:univ-2}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\var{iso} \tp & X \approxeq 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}
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
|
@ -1074,7 +1084,7 @@ This proof of this has been omitted but can be found in the module:
|
||||||
\emph{Proposition} \ref{eq:univ-2} is isomorphic to \ref{eq:univ-3}: For this I
|
\emph{Proposition} \ref{eq:univ-2} is isomorphic to \ref{eq:univ-3}: For this I
|
||||||
will show two corollaries of \ref{eq:coeCod}: For an isomorphism $(\iota,
|
will show two corollaries of \ref{eq:coeCod}: For an isomorphism $(\iota,
|
||||||
\inv{\iota}, \var{inv}) \tp A \cong B$, arrows $f \tp \Arrow\ A\ X$, $g \tp
|
\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
|
\Arrow\ B\ X$ and a heterogeneous path between them, $q \tp \Path\ (\lambda\; i
|
||||||
\to p_{\var{dom}}\ i)\ f\ g$, where $p_{\var{dom}} \tp \Arrow\ A\ X \equiv
|
\to p_{\var{dom}}\ i)\ f\ g$, where $p_{\var{dom}} \tp \Arrow\ A\ X \equiv
|
||||||
\Arrow\ B\ X$ is a path induced by $\var{iso}$, we have the following two
|
\Arrow\ B\ X$ is a path induced by $\var{iso}$, we have the following two
|
||||||
results
|
results
|
||||||
|
@ -1095,9 +1105,9 @@ Now we can prove the equivalence in the following way: Given $(f, \inv{f},
|
||||||
\var{inv}_f) \tp X \cong Y$ and two heterogeneous paths
|
\var{inv}_f) \tp X \cong Y$ and two heterogeneous paths
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
p_{\mathcal{A}} & \tp \Path\ (\lambda i \to p_{\var{dom}}\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}\\
|
p_{\mathcal{A}} & \tp \Path\ (\lambda\; i \to p_{\var{dom}}\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}\\
|
||||||
%
|
%
|
||||||
q_{\mathcal{B}} & \tp \Path\ (\lambda i \to p_{\var{dom}}\ i)\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
q_{\mathcal{B}} & \tp \Path\ (\lambda\; i \to p_{\var{dom}}\ i)\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
all as in \ref{eq:univ-2}. I use $p_{\var{dom}}$ here again to mean the path
|
all as in \ref{eq:univ-2}. I use $p_{\var{dom}}$ here again to mean the path
|
||||||
|
@ -1163,8 +1173,8 @@ It then remains to construct the two paths:
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\label{eq:product-paths}
|
\label{eq:product-paths}
|
||||||
& \Path\ (λ i → \widetilde{p}_{\mathcal{A}}\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}\\
|
& \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}}
|
& \Path\ (λ \; i → \widetilde{p}_{\mathcal{B}}\ i)\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||||
\end{split}
|
\end{split}
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
|
@ -1172,7 +1182,7 @@ This is achieved with the following lemma:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\prod_{a \tp A} \prod_{b \tp B} \prod_{q \tp A \equiv B} \var{coe}\ q\ a ≡ b →
|
\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
|
\Path\ (λ \; i → q\ i)\ a\ b
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
Which is used without proof. See the implementation for the details.
|
Which is used without proof. See the implementation for the details.
|
||||||
|
@ -1201,12 +1211,17 @@ the proof uses the fact that isomorphism-of is propositional and that arrows (in
|
||||||
both categories) are sets. The reader is referred to the implementation for the
|
both categories) are sets. The reader is referred to the implementation for the
|
||||||
gory details.
|
gory details.
|
||||||
%
|
%
|
||||||
\subsection{Propositionality of products}
|
\subsection{Products are propositions}
|
||||||
%
|
%
|
||||||
Now that we have constructed the span category\index{span category} I
|
Now that we have constructed the span category\index{span category} I
|
||||||
will demonstrate how to use this to prove that products are
|
will demonstrate how to use this to prove that products are
|
||||||
propositional. I will do this by showing that terminal objects in this
|
propositions. On the face of it this may seem surprising. Products
|
||||||
category are equivalent to products:
|
look like they are a structure on categories. After all it consist of
|
||||||
|
a select element and two arrows given some two objects. If formulated
|
||||||
|
in set theory this would be the case but in the present setting
|
||||||
|
univalence of categories give us that products are properties. I will
|
||||||
|
show this by showing that terminal objects in the span 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}
|
||||||
|
@ -1248,9 +1263,9 @@ is the proof that $f$ satisfies \ref{eq:pairCondRev}). The proof will be a pair
|
||||||
of proofs:
|
of proofs:
|
||||||
%
|
%
|
||||||
\begin{alignat}{3}
|
\begin{alignat}{3}
|
||||||
p \tp & \Path\ (\lambda i \to \Arrow\ X\ Y)\quad
|
p \tp & \Path\ (\lambda\; i \to \Arrow\ X\ Y)\quad
|
||||||
&& f\quad && y_𝒜 \x y_ℬ \\
|
&& f\quad && y_𝒜 \x y_ℬ \\
|
||||||
& \Path\ (\lambda i \to \Phi\ (p\ i))\quad
|
& \Path\ (\lambda\; i \to \Phi\ (p\ i))\quad
|
||||||
&& \phi_f\quad && \phi_{y_𝒜 \x y_ℬ}
|
&& \phi_f\quad && \phi_{y_𝒜 \x y_ℬ}
|
||||||
\end{alignat}
|
\end{alignat}
|
||||||
%
|
%
|
||||||
|
@ -1283,7 +1298,7 @@ preserve homotopic levels along with \ref{eq:termProp} we get our final result.
|
||||||
That in any category:
|
That in any category:
|
||||||
%
|
%
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\prod_{A\ B \tp \Object} \isProp\ (\var{Product}\ \bC\ A\ B)
|
\prod_{A, B \tp \Object} \isProp\ (\var{Product}\ \bC\ A\ B)
|
||||||
\end{align}
|
\end{align}
|
||||||
%
|
%
|
||||||
\section{Functors and natural transformations}
|
\section{Functors and natural transformations}
|
||||||
|
|
|
@ -6,22 +6,27 @@ of equality: \nomenindex{judgmental equality} and
|
||||||
\nomenindex{propositional equality}. Judgmental equality is a property
|
\nomenindex{propositional equality}. Judgmental equality is a property
|
||||||
of the type system. Judgmental equality on the other hand is usually
|
of the type system. Judgmental equality on the other hand is usually
|
||||||
defined \emph{within} the system. When introducing definitions this
|
defined \emph{within} the system. When introducing definitions this
|
||||||
report will use the notation $\defeq$. Judgmental equalities written
|
report will use the symbol $\defeq$. Judgmental equalities will be
|
||||||
$=$. For propositional equalities the notation $\equiv$ is used.
|
denoted with $=$ and for propositional equalities the notation
|
||||||
|
$\equiv$ is used.
|
||||||
|
|
||||||
For judgmental equality there are some properties that it must
|
The rules of judgmental equality are related with $β$- and
|
||||||
satisfy. \nomenindex{sound}, enjoy \nomenindex{canonicity} and be a
|
$η$-reduction which gives a notion of computation in a given type
|
||||||
\nomen{congruence relation}. Soundness means that things judged to be
|
theory.
|
||||||
equal are equal with respects to the model of the theory (the meta
|
%
|
||||||
theory). It must be a congruence relation because otherwise the
|
There are some properties that one usually want judgmental equality to
|
||||||
relation certainly does not adhere to our notion of equality. One
|
satisfy. It must be \nomenindex{sound}, enjoy \nomenindex{canonicity}
|
||||||
would be able to conclude things like: $x \equiv y \rightarrow f\ x
|
and be a \nomenindex{congruence relation}. Soundness means that things
|
||||||
\nequiv f\ y$. Canonicity means that any well typed term evaluates to
|
judged to be equal are equal with respects to the \nomenindex{model}
|
||||||
a \emph{canonical} form. For example for a closed term $e \tp \bN$ it
|
of the theory or the \emph{meta theory}. It must be a congruence
|
||||||
will be the case that $e$ reduces to $n$ applications of
|
relation because otherwise the relation certainly does not adhere to
|
||||||
$\mathit{suc}$ to $0$ for some $n$; $e = \mathit{suc}^n\ 0$. Without
|
our notion of equality. One would be able to conclude things like: $x
|
||||||
canonicity terms in the language can get ``stuck'' -- meaning that
|
\equiv y \rightarrow f\ x \nequiv f\ y$. Canonicity means that any
|
||||||
they do not reduce to a canonical form.
|
well typed term evaluates to a \emph{canonical} form. For example for
|
||||||
|
a closed term $e \tp \bN$ it will be the case that $e$ reduces to $n$
|
||||||
|
applications of $\mathit{suc}$ to $0$ for some $n$; $e =
|
||||||
|
\mathit{suc}^n\ 0$. Without canonicity terms in the language can get
|
||||||
|
``stuck'' meaning that they do not reduce to a canonical form.
|
||||||
|
|
||||||
To work as a programming languages it is necessary for judgmental
|
To work as a programming languages it is necessary for judgmental
|
||||||
equality to be \nomenindex{decidable}. Being decidable simply means
|
equality to be \nomenindex{decidable}. Being decidable simply means
|
||||||
|
@ -34,27 +39,27 @@ is not in general possible to decide the correctness of logical
|
||||||
propositions (cf.\ Hilbert's \emph{entscheidigungsproblem}).
|
propositions (cf.\ Hilbert's \emph{entscheidigungsproblem}).
|
||||||
|
|
||||||
There are two flavors of type-theory. \emph{Intensional-} and
|
There are two flavors of type-theory. \emph{Intensional-} and
|
||||||
\emph{extensional-} type theory. Identity types in extensional type
|
\emph{extensional-} type theory (ITT and ETT respectively). Identity
|
||||||
theory are required to be \nomen{propositions}{proposition}. That is,
|
types in extensional type theory are required to be
|
||||||
a type with at most one inhabitant. In extensional type thoery the
|
\nomen{propositions}{proposition}. That is, a type with at most one
|
||||||
principle of reflection
|
inhabitant. In extensional type theory the principle of reflection
|
||||||
%
|
%
|
||||||
$$a ≡ b → a = b$$
|
$$a ≡ b → a = b$$
|
||||||
%
|
%
|
||||||
is enough to make type checking undecidable. This report focuses on
|
is enough to make type checking undecidable. This report focuses on
|
||||||
Agda which at a glance can be thought of a version of intensional type
|
Agda which at a glance can be thought of as a version of intensional
|
||||||
theory. Pattern-matching in regular Agda let's one prove
|
type theory. Pattern-matching in regular Agda lets one prove
|
||||||
\nomenindex{axiom K}. Axiom K states that any two identity proofs are
|
\nomenindex{Uniqueness of Identity Proofs} (UIP). UIP states that any
|
||||||
propositionally identical.
|
two identity proofs are propositionally identical.
|
||||||
|
|
||||||
The usual notion of propositional equality in \nomenindex{Intensional
|
The usual notion of propositional equality in ITT is quite
|
||||||
Type Theory} (ITT) is quite restrictive. In the next section a few
|
restrictive. In the next section a few motivating examples will
|
||||||
motivating examples will highlight this. There exist techniques to
|
highlight this. There exist techniques to circumvent these problems,
|
||||||
circumvent these problems, as we shall see. This thesis will explore
|
as we shall see. This thesis will explore an extension to Agda that
|
||||||
an extension to Agda that redefines the notion of propositional
|
redefines the notion of propositional equality and as such is an
|
||||||
equality and as such is an alternative to these other techniques. The
|
alternative to these other techniques. The extension is called cubical
|
||||||
extension is called cubical Agda. Cubical Agda drops Axiom K as this
|
Agda. Cubical Agda drops UIP as this does not permit
|
||||||
does not permit \nomenindex{functional extensionality} and
|
\nomenindex{functional extensionality} and
|
||||||
\nomenindex{univalence}. What makes this extension particularly
|
\nomenindex{univalence}. What makes this extension particularly
|
||||||
interesting is that it gives a \emph{constructive} interpretation of
|
interesting is that it gives a \emph{constructive} interpretation of
|
||||||
univalence. What all this means will be elaborated in the following
|
univalence. What all this means will be elaborated in the following
|
||||||
|
@ -69,74 +74,53 @@ some limitations inherent in ITT and -- by extension -- Agda.
|
||||||
\label{sec:functional-extensionality}%
|
\label{sec:functional-extensionality}%
|
||||||
Consider the functions:
|
Consider the functions:
|
||||||
%
|
%
|
||||||
\begin{multicols}{2}
|
\begin{align*}%
|
||||||
\noindent%
|
\var{zeroLeft} & \defeq \lambda\; (n \tp \bN) \to (0 + n \tp \bN) \\
|
||||||
\begin{equation*}%
|
\var{zeroRight} & \defeq \lambda\; (n \tp \bN) \to (n + 0 \tp \bN)
|
||||||
f \defeq \lambda\ (n \tp \bN) \to (0 + n \tp \bN)
|
\end{align*}%
|
||||||
\end{equation*}%
|
|
||||||
\begin{equation*}%
|
|
||||||
g \defeq \lambda\ (n \tp \bN) \to (n + 0 \tp \bN)
|
|
||||||
\end{equation*}%
|
|
||||||
\end{multicols}%
|
|
||||||
%
|
%
|
||||||
The term $n + 0$ is
|
The term $n + 0$ is \nomenindex{definitionally} equal to $n$, which we
|
||||||
\nomenindex{definitionally} equal to $n$, which we
|
write as $n + 0 = n$. This is also called \nomenindex{judgmental
|
||||||
write as $n + 0 = n$. This is also called
|
equality}. We call it definitional equality because the
|
||||||
\nomenindex{judgmental equality}.
|
\emph{equality} arises from the \emph{definition} of $+$ which is:
|
||||||
We call it definitional equality because the \emph{equality} arises
|
|
||||||
from the \emph{definition} of $+$ which is:
|
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
+ & \tp \bN \to \bN \to \bN \\
|
+ & \tp \bN \to \bN \to \bN \\
|
||||||
n + 0 & \defeq n \\
|
n + 0 & \defeq n \\
|
||||||
n + (\suc{m}) & \defeq \suc{(n + m)}
|
n + (\suc{m}) & \defeq \suc{(n + m)}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
Note that $0 + n$ is \emph{not} definitionally equal to $n$. $0 + n$
|
Note that $0 + n$ is \emph{not} definitionally equal to $n$. This is
|
||||||
is in normal form. I.e.; there is no rule for $+$ whose left hand side
|
because $0 + n$ is in normal form. I.e.\ there is no rule for $+$
|
||||||
matches this expression. We \emph{do}, however, have that they are
|
whose left hand side matches this expression. We do however have that
|
||||||
\nomen{propositionally}{propositional equality} equal, which we write
|
they are \nomen{propositionally}{propositional equality} equal, which
|
||||||
as $n + 0 \equiv n$. Propositional equality means that there is a
|
we write as $n \equiv n + 0$. Propositional equality means that there
|
||||||
proof that exhibits this relation. Since equality is a transitive
|
is a proof that exhibits this relation. We can do induction over $n$
|
||||||
relation we have that $n + 0 \equiv 0 + n$.
|
to prove this:
|
||||||
|
%
|
||||||
Unfortunately we don't have $f \equiv g$. There is no way to construct
|
\begin{align}
|
||||||
a proof asserting the obvious equivalence of $f$ and $g$. Actually
|
\label{eq:zrn}
|
||||||
showing this is outside the scope of this text. Essentially it would
|
\begin{split}
|
||||||
involve giving a model for our type theory that validates all our
|
\var{zrn}\ & \tp ∀ n → n ≡ \var{zeroRight}\ n \\
|
||||||
axioms but where $f \equiv g$ is not true. We cannot show that they
|
\var{zrn}\ \var{zero} & \defeq \var{refl} \\
|
||||||
are equal, even though we can prove them equal for all points. For
|
\var{zrn}\ (\var{suc}\ n) & \defeq \var{cong}\ \var{suc}\ (\var{zrn}\ n)
|
||||||
functions this is exactly the notion of equality that we are
|
\end{split}
|
||||||
interested in: Functions are considered equal when they are equal for
|
\end{align}
|
||||||
all inputs. This is called \nomenindex{point wise equality}, where the
|
%
|
||||||
\emph{points} of a function refer to its arguments.
|
This show that zero is a right neutral element hence the name $\var{zrn}$.
|
||||||
|
Since equality is a transitive relation we have that $\forall n \to
|
||||||
%% In the context of category theory functional extensionality is e.g.
|
\var{zeroLeft}\ n \equiv \var{zeroRight}\ n$. Unfortunately we don't
|
||||||
%% needed to show that representable functors are indeed functors. The
|
have $\var{zeroLeft} \equiv \var{zeroRight}$. There is no way to
|
||||||
%% representable functor is defined for a fixed category $\bC$ and an
|
construct a proof asserting the obvious equivalence of
|
||||||
%% object $X \in \bC$. It's map on objects is defined thus:
|
$\var{zeroLeft}$ and $\var{zeroRight}$. Actually showing this is
|
||||||
%% %
|
outside the scope of this text. Essentially it would involve giving a
|
||||||
%% \begin{align*}
|
model for our type theory that validates all our axioms but where
|
||||||
%% \lambda\ A \to \Arrow\ X\ A
|
$\var{zeroLeft} \equiv \var{zeroRight}$ is not true. We cannot show
|
||||||
%% \end{align*}
|
that they are equal even though we can prove them equal for all
|
||||||
%% %
|
points. For functions this is exactly the notion of equality that we
|
||||||
%% That is, it maps objects to arrows. So, it's map on arrows must map an arrow $\Arrow\ A\ B$ to an
|
are interested in: Functions are considered equal when they are equal
|
||||||
%% The map on objects is defined thus:
|
for all inputs. This is called \nomenindex{pointwise equality}, where
|
||||||
%% %
|
the \emph{points} of a function refer to its arguments.
|
||||||
%% \begin{align*}
|
|
||||||
%% \lambda f \to
|
|
||||||
%% \end{align*}
|
|
||||||
%% %
|
|
||||||
%% The proof obligation that this satisfies the identity law of functors
|
|
||||||
%% ($\fmap\ \idFun \equiv \idFun$) thus becomes:
|
|
||||||
%% %
|
|
||||||
%% \begin{align*}
|
|
||||||
%% \Hom(A, \idFun_{\bX}) = (\lambda\ g \to \idFun \comp g) \equiv \idFun_{\Sets}
|
|
||||||
%% \end{align*}
|
|
||||||
%% %
|
|
||||||
%% One needs functional extensionality to ``go under'' the function arrow and apply
|
|
||||||
%% the (left) identity law of the underlying category to prove $\idFun \comp g
|
|
||||||
%% \equiv g$ and thus close the goal.
|
|
||||||
%
|
%
|
||||||
\subsection{Equality of isomorphic types}
|
\subsection{Equality of isomorphic types}
|
||||||
%
|
%
|
||||||
|
@ -155,7 +139,6 @@ without thinking twice. Unfortunately such an identification can not
|
||||||
be performed in ITT.
|
be performed in ITT.
|
||||||
|
|
||||||
More specifically what we are interested in is a way of identifying
|
More specifically what we are interested in is a way of identifying
|
||||||
|
|
||||||
\nomenindex{equivalent} types. I will return to the definition of
|
\nomenindex{equivalent} types. I will return to the definition of
|
||||||
equivalence later in section \S\ref{sec:equiv}, but for now it is
|
equivalence later in section \S\ref{sec:equiv}, but for now it is
|
||||||
sufficient to think of an equivalence as a one-to-one correspondence.
|
sufficient to think of an equivalence as a one-to-one correspondence.
|
||||||
|
@ -165,27 +148,30 @@ The principle of univalence says that:
|
||||||
$$\mathit{univalence} \tp (A \simeq B) \simeq (A \equiv B)$$
|
$$\mathit{univalence} \tp (A \simeq B) \simeq (A \equiv B)$$
|
||||||
%
|
%
|
||||||
In particular this allows us to construct an equality from an equivalence
|
In particular this allows us to construct an equality from an equivalence
|
||||||
($\mathit{ua} \tp (A \simeq B) \to (A \equiv B)$) and vice versa.
|
%
|
||||||
|
$$\mathit{ua} \tp (A \simeq B) \to (A \equiv B)$$
|
||||||
|
%
|
||||||
|
and vice versa.
|
||||||
|
|
||||||
\section{Formalizing Category Theory}
|
\section{Formalizing Category Theory}
|
||||||
%
|
%
|
||||||
The above examples serve to illustrate a limitation of ITT. One case where these
|
The above examples serve to illustrate a limitation of ITT. One case
|
||||||
limitations are particularly prohibitive is in the study of Category Theory. At
|
where these limitations are particularly prohibitive is in the study
|
||||||
a glance category theory can be described as ``the mathematical study of
|
of Category Theory. At a glance category theory can be described as
|
||||||
(abstract) algebras of functions'' (\cite{awodey-2006}). By that token
|
``the mathematical study of (abstract) algebras of functions''
|
||||||
functional extensionality is particularly useful for formulating Category
|
(\cite{awodey-2006}). By that token functional extensionality is
|
||||||
Theory. In Category theory it is also common to identify isomorphic structures
|
particularly useful for formulating Category Theory. In Category
|
||||||
and univalence gives us a way to make this notion precise. In fact we can
|
theory it is also commonplace to identify isomorphic structures and
|
||||||
formulate this requirement within our formulation of categories by requiring the
|
univalence gives us a way to make this notion precise. In fact we can
|
||||||
\emph{categories} themselves to be univalent as we shall see.
|
formulate this requirement within our formulation of categories by
|
||||||
|
requiring the \emph{categories} themselves to be univalent as we shall
|
||||||
|
see in \S\ref{sec:univalence}.
|
||||||
|
|
||||||
\section{Context}
|
\section{Context}
|
||||||
\label{sec:context}
|
\label{sec:context}
|
||||||
%
|
%
|
||||||
The idea of formalizing Category Theory in proof assistants is not new. There
|
The idea of formalizing Category Theory in proof assistants is not new. There
|
||||||
are a multitude of these available online. Just as a first reference see this
|
are a multitude of these available online. Notably:
|
||||||
question on Math Overflow: \cite{mo-formalizations}. Notably these
|
|
||||||
implementations of category theory in Agda:
|
|
||||||
%
|
%
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
|
@ -217,12 +203,12 @@ other shortcomings, e.g. you lose \nomenindex{canonicity}
|
||||||
|
|
||||||
Another approach is to use the \emph{setoid interpretation} of type
|
Another approach is to use the \emph{setoid interpretation} of type
|
||||||
theory (\cite{hofmann-1995,huber-2016}). With this approach one works
|
theory (\cite{hofmann-1995,huber-2016}). With this approach one works
|
||||||
with \nomenindex{extensional sets} $(X, \sim)$, that is a type $X \tp
|
with \nomenindex{extensional sets} $(X, \sim)$. That is a type $X \tp
|
||||||
\MCU$ and an equivalence relation $\sim\ \tp X \to X \to \MCU$ on that
|
\MCU$ and an equivalence relation $\sim\ \tp X \to X \to \MCU$ on that
|
||||||
type. Under the setoid interpretation the equivalence relation serve
|
type. Under the setoid interpretation the equivalence relation serve
|
||||||
as a sort of ``local'' propositional equality. Since the developer
|
as a sort of ``local'' propositional equality. Since the developer
|
||||||
gets to pick this relation it is not guaranteed to be a congruence
|
gets to pick this relation it is not a\~priori a congruence
|
||||||
relation a priori. So this must be verified manually by the developer.
|
relation. So this must be verified manually by the developer.
|
||||||
Furthermore, functions between different setoids must be shown to be
|
Furthermore, functions between different setoids must be shown to be
|
||||||
setoid homomorphism, that is; they preserve the relation.
|
setoid homomorphism, that is; they preserve the relation.
|
||||||
|
|
||||||
|
@ -237,12 +223,14 @@ makes it very cumbersome to work with in practice (\cite[p.
|
||||||
4]{huber-2016}).
|
4]{huber-2016}).
|
||||||
|
|
||||||
\section{Conventions}
|
\section{Conventions}
|
||||||
In the remainder of this paper I will use the term
|
In the remainder of this paper I will use the term \nomenindex{Type}
|
||||||
\nomenindex{Type} to describe --
|
to describe -- well -- types. Thereby departing from the notation in
|
||||||
well, types. Thereby diverging from the notation in Agda where the keyword
|
Agda where the keyword \texttt{Set} refers to types. \nomenindex{Set}
|
||||||
\texttt{Set} refers to types.
|
on the other hand shall refer to the homotopical notion of a set. I
|
||||||
\nomenindex{Set} on the other hand shall refer to the
|
will also leave all universe levels implicit. This of course does not
|
||||||
homotopical notion of a set. I will also leave all universe levels implicit.
|
mean that a statement such as $\MCU \tp \MCU$ means that we have
|
||||||
|
type-in-type but rather that the arguments to the universes are
|
||||||
|
implicit.
|
||||||
|
|
||||||
And I use the term
|
And I use the term
|
||||||
\nomenindex{arrow} to refer to morphisms in a category,
|
\nomenindex{arrow} to refer to morphisms in a category,
|
||||||
|
@ -253,11 +241,13 @@ whereas the terms
|
||||||
shall be reserved for talking about type theoretic functions; i.e.
|
shall be reserved for talking about type theoretic functions; i.e.
|
||||||
functions in Agda.
|
functions in Agda.
|
||||||
|
|
||||||
$\defeq$ will be used for introducing definitions. $=$ will be used to for
|
As already noted $\defeq$ will be used for introducing definitions $=$
|
||||||
judgmental equality and $\equiv$ will be used for propositional equality.
|
will be used to for judgmental equality and $\equiv$ will be used for
|
||||||
|
propositional equality.
|
||||||
|
|
||||||
All this is summarized in the following table:
|
All this is summarized in the following table:
|
||||||
|
%
|
||||||
|
\begin{samepage}
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tabular}{ c c c }
|
\begin{tabular}{ c c c }
|
||||||
Name & Agda & Notation \\
|
Name & Agda & Notation \\
|
||||||
|
@ -277,3 +267,4 @@ Judgmental equality & \null & $̱=$ \\
|
||||||
Propositional equality & \null & $̱\equiv$
|
Propositional equality & \null & $̱\equiv$
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
\end{samepage}
|
||||||
|
|
|
@ -127,3 +127,4 @@
|
||||||
\newcommand\coe{\varindex{coe}}
|
\newcommand\coe{\varindex{coe}}
|
||||||
\newcommand\Monoidal{\varindex{Monoidal}}
|
\newcommand\Monoidal{\varindex{Monoidal}}
|
||||||
\newcommand\Kleisli{\varindex{Kleisli}}
|
\newcommand\Kleisli{\varindex{Kleisli}}
|
||||||
|
\newcommand\I{\mathds{I}}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
\documentclass[a4paper]{report}
|
\documentclass[a4paper]{report}
|
||||||
|
%% \documentclass[tightpage]{preview}
|
||||||
%% \documentclass[compact,a4paper]{article}
|
%% \documentclass[compact,a4paper]{article}
|
||||||
|
|
||||||
\input{packages.tex}
|
\input{packages.tex}
|
||||||
|
@ -49,6 +50,7 @@
|
||||||
\myfrontmatter
|
\myfrontmatter
|
||||||
\maketitle
|
\maketitle
|
||||||
\input{abstract.tex}
|
\input{abstract.tex}
|
||||||
|
\input{acknowledgements.tex}
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
\mainmatter
|
\mainmatter
|
||||||
%
|
%
|
||||||
|
|
|
@ -16,13 +16,14 @@
|
||||||
%% \hypersetup{allbordercolors={darkorange}}
|
%% \hypersetup{allbordercolors={darkorange}}
|
||||||
\hypersetup{hidelinks}
|
\hypersetup{hidelinks}
|
||||||
\usepackage{graphicx}
|
\usepackage{graphicx}
|
||||||
|
%% \usepackage[active,tightpage]{preview}
|
||||||
|
|
||||||
\usepackage{parskip}
|
\usepackage{parskip}
|
||||||
\usepackage{multicol}
|
\usepackage{multicol}
|
||||||
\usepackage{amssymb,amsmath,amsthm,stmaryrd,mathrsfs,wasysym}
|
\usepackage{amssymb,amsmath,amsthm,stmaryrd,mathrsfs,wasysym}
|
||||||
\usepackage[toc,page]{appendix}
|
\usepackage[toc,page]{appendix}
|
||||||
\usepackage{xspace}
|
\usepackage{xspace}
|
||||||
\usepackage[a4paper,top=3cm,bottom=3cm]{geometry}
|
\usepackage[paper=a4paper,top=3cm,bottom=3cm]{geometry}
|
||||||
\usepackage{makeidx}
|
\usepackage{makeidx}
|
||||||
\makeindex
|
\makeindex
|
||||||
% \setlength{\parskip}{10pt}
|
% \setlength{\parskip}{10pt}
|
||||||
|
@ -83,7 +84,7 @@
|
||||||
\newunicodechar{∨}{\textfallback{∨}}
|
\newunicodechar{∨}{\textfallback{∨}}
|
||||||
\newunicodechar{∧}{\textfallback{∧}}
|
\newunicodechar{∧}{\textfallback{∧}}
|
||||||
\newunicodechar{⊔}{\textfallback{⊔}}
|
\newunicodechar{⊔}{\textfallback{⊔}}
|
||||||
\newunicodechar{≊}{\textfallback{≊}}
|
%% \newunicodechar{≊}{\textfallback{≊}}
|
||||||
\newunicodechar{∈}{\textfallback{∈}}
|
\newunicodechar{∈}{\textfallback{∈}}
|
||||||
\newunicodechar{ℂ}{\textfallback{ℂ}}
|
\newunicodechar{ℂ}{\textfallback{ℂ}}
|
||||||
\newunicodechar{∘}{\textfallback{∘}}
|
\newunicodechar{∘}{\textfallback{∘}}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
\documentclass[a4paper,handout]{beamer}
|
\documentclass[a4paper,handout]{beamer}
|
||||||
|
\usetheme{metropolis}
|
||||||
\beamertemplatenavigationsymbolsempty
|
\beamertemplatenavigationsymbolsempty
|
||||||
%% \usecolortheme[named=seagull]{structure}
|
%% \usecolortheme[named=seagull]{structure}
|
||||||
|
|
||||||
|
@ -21,28 +22,28 @@
|
||||||
\framesubtitle{Functional extensionality}
|
\framesubtitle{Functional extensionality}
|
||||||
Consider the functions
|
Consider the functions
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{zeroLeft} & \defeq \lambda (n \tp \bN) \mto (0 + n \tp \bN) \\
|
\var{zeroLeft} & ≜ \lambda (n \tp \bN) \mto (0 + n \tp \bN) \\
|
||||||
\var{zeroRight} & \defeq \lambda (n \tp \bN) \mto (n + 0 \tp \bN)
|
\var{zeroRight} & ≜ \lambda (n \tp \bN) \mto (n + 0 \tp \bN)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
We have
|
We have
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\prod_{n \tp \bN} \var{zeroLeft}\ n \equiv \var{zeroRight}\ n
|
∏_{n \tp \bN} \var{zeroLeft}\ n ≡ \var{zeroRight}\ n
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
\pause
|
\pause
|
||||||
But not
|
But not
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\var{zeroLeft} \equiv \var{zeroRight}
|
\var{zeroLeft} ≡ \var{zeroRight}
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
\pause
|
\pause
|
||||||
We need
|
We need
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\funExt \tp \prod_{a \tp A} f\ a \equiv g\ a \to f \equiv g
|
\funExt \tp ∏_{a \tp A} f\ a ≡ g\ a → f ≡ g
|
||||||
$$
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -52,20 +53,20 @@
|
||||||
$\{x \mid \phi\ x \land \psi\ x\}$
|
$\{x \mid \phi\ x \land \psi\ x\}$
|
||||||
\pause
|
\pause
|
||||||
|
|
||||||
If we show $\forall x . \psi\ x \equiv \top$
|
If we show $∀ x . \psi\ x ≡ \top$
|
||||||
then we want to conclude
|
then we want to conclude
|
||||||
$\{x \mid \phi\ x \land \psi\ x\} \equiv \{x \mid \phi\ x\}$
|
$\{x \mid \phi\ x \land \psi\ x\} ≡ \{x \mid \phi\ x\}$
|
||||||
\pause
|
\pause
|
||||||
|
|
||||||
We need univalence:
|
We need univalence:
|
||||||
$$(A \simeq B) \simeq (A \equiv B)$$
|
$$(A ≃ B) ≃ (A ≡ B)$$
|
||||||
\pause
|
\pause
|
||||||
%
|
%
|
||||||
We will return to $\simeq$, but for now think of it as an
|
We will return to $≃$, 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 ≃ B) → (A ≡ B) \\
|
||||||
\var{toEquiv} & \tp (A \equiv B) \to (A \simeq B)
|
\var{toEquiv} & \tp (A ≡ B) → (A ≃ B)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -76,11 +77,11 @@
|
||||||
\Path \tp (P \tp I → \MCU) → P\ 0 → P\ 1 → \MCU
|
\Path \tp (P \tp I → \MCU) → P\ 0 → P\ 1 → \MCU
|
||||||
\end{equation*}
|
\end{equation*}
|
||||||
\pause
|
\pause
|
||||||
For $P \tp I \to \MCU$, $A \tp \MCU$ and $a_0, a_1 \tp A$
|
For $P \tp I → \MCU$, $A \tp \MCU$ and $a_0, a_1 \tp A$
|
||||||
inhabitants of $\Path\ P\ a_0\ a_1$ are like functions
|
inhabitants of $\Path\ P\ a_0\ a_1$ are like functions
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
p \tp \prod_{i \tp I} P\ i
|
p \tp ∏_{i \tp I} P\ i
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
Which satisfy $p\ 0 & = a_0$ and $p\ 1 & = a_1$
|
Which satisfy $p\ 0 & = a_0$ and $p\ 1 & = a_1$
|
||||||
|
@ -88,46 +89,46 @@
|
||||||
|
|
||||||
Homogenous paths
|
Homogenous paths
|
||||||
$$
|
$$
|
||||||
a_0 \equiv a_1 \defeq \Path\ (\var{const}\ A)\ a_0\ a_1
|
a_0 ≡ a_1 ≜ \Path\ (\var{const}\ A)\ a_0\ a_1
|
||||||
$$
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Paths}
|
\frametitle{Paths}
|
||||||
\framesubtitle{Functional extenstionality}
|
\framesubtitle{Functional extenstionality}
|
||||||
$$
|
$$
|
||||||
\funExt & \tp \prod_{a \tp A} f\ a \equiv g\ a \to f \equiv g
|
\funExt & \tp ∏_{a \tp A} f\ a ≡ g\ a → f ≡ g
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
$$
|
$$
|
||||||
\funExt\ p \defeq λ i\ a → p\ a\ i
|
\funExt\ p ≜ λ i\ a → p\ a\ i
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
$$
|
$$
|
||||||
\funExt\ (\var{const}\ \refl)
|
\funExt\ (\var{const}\ \refl)
|
||||||
\tp
|
\tp
|
||||||
\var{zeroLeft} \equiv \var{zeroRight}
|
\var{zeroLeft} ≡ \var{zeroRight}
|
||||||
$$
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Paths}
|
\frametitle{Paths}
|
||||||
\framesubtitle{Homotopy levels}
|
\framesubtitle{Homotopy levels}
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
& \isContr && \tp \MCU \to \MCU \\
|
& \isContr && \tp \MCU → \MCU \\
|
||||||
& \isContr\ A && \defeq \sum_{c \tp A} \prod_{a \tp A} a \equiv c
|
& \isContr\ A && ≜ ∑_{c \tp A} ∏_{a \tp A} a ≡ c
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
& \isProp && \tp \MCU \to \MCU \\
|
& \isProp && \tp \MCU → \MCU \\
|
||||||
& \isProp\ A && \defeq \prod_{a_0, a_1 \tp A} a_0 \equiv a_1
|
& \isProp\ A && ≜ ∏_{a_0, a_1 \tp A} a_0 ≡ a_1
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
& \isSet && \tp \MCU \to \MCU \\
|
& \isSet && \tp \MCU → \MCU \\
|
||||||
& \isSet\ A && \defeq \prod_{a_0, a_1 \tp A} \isProp\ (a_0 \equiv a_1)
|
& \isSet\ A && ≜ ∏_{a_0, a_1 \tp A} \isProp\ (a_0 ≡ a_1)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
& \isGroupoid && \tp \MCU \to \MCU \\
|
& \isGroupoid && \tp \MCU → \MCU \\
|
||||||
& \isGroupoid\ A && \defeq \prod_{a_0, a_1 \tp A} \isSet\ (a_0 \equiv a_1)
|
& \isGroupoid\ A && ≜ ∏_{a_0, a_1 \tp A} \isSet\ (a_0 ≡ a_1)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -135,7 +136,7 @@
|
||||||
\framesubtitle{A few lemmas}
|
\framesubtitle{A few lemmas}
|
||||||
Let $D$ be a type-family:
|
Let $D$ be a type-family:
|
||||||
$$
|
$$
|
||||||
D \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} \MCU
|
D \tp ∏_{b \tp A} ∏_{p \tp a ≡ b} \MCU
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
\pause
|
\pause
|
||||||
|
@ -149,7 +150,7 @@
|
||||||
We then have the function:
|
We then have the function:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\pathJ\ D\ d \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} D\ b\ p
|
\pathJ\ D\ d \tp ∏_{b \tp A} ∏_{p \tp a ≡ b} D\ b\ p
|
||||||
$$
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -158,9 +159,9 @@
|
||||||
Given
|
Given
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
A & \tp \MCU \\
|
A & \tp \MCU \\
|
||||||
P & \tp A \to \MCU \\
|
P & \tp A → \MCU \\
|
||||||
\var{propP} & \tp \prod_{x \tp A} \isProp\ (P\ x) \\
|
\var{propP} & \tp ∏_{x \tp A} \isProp\ (P\ x) \\
|
||||||
p & \tp a_0 \equiv a_1 \\
|
p & \tp a_0 ≡ a_1 \\
|
||||||
p_0 & \tp P\ a_0 \\
|
p_0 & \tp P\ a_0 \\
|
||||||
p_1 & \tp P\ a_1
|
p_1 & \tp P\ a_1
|
||||||
\end{align*}
|
\end{align*}
|
||||||
|
@ -176,17 +177,17 @@
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Paths}
|
\frametitle{Paths}
|
||||||
\framesubtitle{A few lemmas}
|
\framesubtitle{A few lemmas}
|
||||||
$\prod$ preserves $\isProp$:
|
$∏$ preserves $\isProp$:
|
||||||
$$
|
$$
|
||||||
\mathit{propPi}
|
\mathit{propPi}
|
||||||
\tp
|
\tp
|
||||||
\left(\prod_{a \tp A} \isProp\ (P\ a)\right)
|
\left(∏_{a \tp A} \isProp\ (P\ a)\right)
|
||||||
\to \isProp\ \left(\prod_{a \tp A} P\ a\right)
|
→ \isProp\ \left(∏_{a \tp A} P\ a\right)
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
$\sum$ preserves $\isProp$:
|
$∑$ preserves $\isProp$:
|
||||||
$$
|
$$
|
||||||
\mathit{propSig} \tp \isProp\ A \to \left(\prod_{a \tp A} \isProp\ (P\ a)\right) \to \isProp\ \left(\sum_{a \tp A} P\ a\right)
|
\mathit{propSig} \tp \isProp\ A → \left(∏_{a \tp A} \isProp\ (P\ a)\right) → \isProp\ \left(∑_{a \tp A} P\ a\right)
|
||||||
$$
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -195,9 +196,9 @@
|
||||||
Data:
|
Data:
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\Object & \tp \Type \\
|
\Object & \tp \Type \\
|
||||||
\Arrow & \tp \Object \to \Object \to \Type \\
|
\Arrow & \tp \Object → \Object → \Type \\
|
||||||
\identity & \tp \Arrow\ A\ A \\
|
\identity & \tp \Arrow\ A\ A \\
|
||||||
\lll & \tp \Arrow\ B\ C \to \Arrow\ A\ B \to \Arrow\ A\ C
|
\lll & \tp \Arrow\ B\ C → \Arrow\ A\ B → \Arrow\ A\ C
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
\pause
|
\pause
|
||||||
|
@ -208,7 +209,7 @@
|
||||||
$$
|
$$
|
||||||
$$
|
$$
|
||||||
(\identity \lll f ≡ f)
|
(\identity \lll f ≡ f)
|
||||||
\x
|
×
|
||||||
(f \lll \identity ≡ f)
|
(f \lll \identity ≡ f)
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
|
@ -221,7 +222,7 @@
|
||||||
\frametitle{Pre categories}
|
\frametitle{Pre categories}
|
||||||
\framesubtitle{Propositionality}
|
\framesubtitle{Propositionality}
|
||||||
$$
|
$$
|
||||||
\isProp\ \left( (\identity \comp f \equiv f) \x (f \comp \identity \equiv f) \right)
|
\isProp\ \left( (\identity \comp f ≡ f) × (f \comp \identity ≡ f) \right)
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
|
@ -247,14 +248,17 @@
|
||||||
\frametitle{Categories}
|
\frametitle{Categories}
|
||||||
\framesubtitle{Univalence}
|
\framesubtitle{Univalence}
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{IsIdentity} & \defeq
|
\var{IsIdentity} & ≜
|
||||||
\prod_{A\ B \tp \Object} \prod_{f \tp \Arrow\ A\ B} \phi\ f
|
∏_{A\ B \tp \Object} ∏_{f \tp \Arrow\ A\ B} \phi\ f
|
||||||
%% \\
|
%% \\
|
||||||
%% & \mathrel{\ } \identity \lll f \equiv f \x f \lll \identity \equiv f
|
%% & \mathrel{\ } \identity \lll f ≡ f × f \lll \identity ≡ f
|
||||||
\end{align*}
|
\end{align*}
|
||||||
where
|
where
|
||||||
$$
|
$$
|
||||||
\phi\ f \defeq \identity \lll f \equiv f \x f \lll \identity \equiv f
|
\phi\ f ≜ \identity
|
||||||
|
( \lll f ≡ f )
|
||||||
|
×
|
||||||
|
( f \lll \identity ≡ f)
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
Let $\approxeq$ denote ismorphism of objects. We can then construct
|
Let $\approxeq$ denote ismorphism of objects. We can then construct
|
||||||
|
@ -271,29 +275,29 @@
|
||||||
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
|
\isEquiv\ (A ≡ B)\ (A \approxeq B)\ \idToIso
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Categories}
|
\frametitle{Categories}
|
||||||
\framesubtitle{Univalence, cont'd}
|
\framesubtitle{Univalence, cont'd}
|
||||||
$$\isEquiv\ (A \equiv B)\ (A \approxeq B)\ \idToIso$$
|
$$\isEquiv\ (A ≡ B)\ (A \approxeq B)\ \idToIso$$
|
||||||
\pause%
|
\pause%
|
||||||
$$(A \equiv B) \simeq (A \approxeq B)$$
|
$$(A ≡ B) ≃ (A \approxeq B)$$
|
||||||
\pause%
|
\pause%
|
||||||
$$(A \equiv B) \cong (A \approxeq B)$$
|
$$(A ≡ B) ≅ (A \approxeq B)$$
|
||||||
\pause%
|
\pause%
|
||||||
Name the above maps:
|
Name the above maps:
|
||||||
$$\idToIso \tp A ≡ B → A ≊ B$$
|
$$\idToIso \tp A ≡ B → A ≊ B$$
|
||||||
%
|
%
|
||||||
$$\isoToId \tp (A \approxeq B) \to (A \equiv B)$$
|
$$\isoToId \tp (A \approxeq B) → (A ≡ B)$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Categories}
|
\frametitle{Categories}
|
||||||
\framesubtitle{Propositionality}
|
\framesubtitle{Propositionality}
|
||||||
$$
|
$$
|
||||||
\isProp\ \IsCategory = \prod_{a, b \tp \IsCategory} a \equiv b
|
\isProp\ \IsCategory = ∏_{a, b \tp \IsCategory} a ≡ b
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
So, for
|
So, for
|
||||||
|
@ -303,8 +307,8 @@
|
||||||
the proof obligation is the pair:
|
the proof obligation is the pair:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
p & \tp a.\isPreCategory \equiv b.\isPreCategory \\
|
p & \tp a.\isPreCategory ≡ b.\isPreCategory \\
|
||||||
& \mathrel{\ } \Path\ (\lambda\; i \to (p\ i).Univalent)\ a.\isPreCategory\ b.\isPreCategory
|
& \mathrel{\ } \Path\ (\lambda\; i → (p\ i).Univalent)\ a.\isPreCategory\ b.\isPreCategory
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -313,17 +317,17 @@
|
||||||
First path given by:
|
First path given by:
|
||||||
$$
|
$$
|
||||||
p
|
p
|
||||||
\defeq
|
≜
|
||||||
\var{propIsPreCategory}\ a\ b
|
\var{propIsPreCategory}\ a\ b
|
||||||
\tp
|
\tp
|
||||||
a.\isPreCategory \equiv b.\isPreCategory
|
a.\isPreCategory ≡ b.\isPreCategory
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
Use $\lemPropF$ for the latter.
|
Use $\lemPropF$ for the latter.
|
||||||
\pause
|
\pause
|
||||||
%
|
%
|
||||||
Univalence is indexed by an identity proof. So $A \defeq
|
Univalence is indexed by an identity proof. So $A ≜
|
||||||
IsIdentity\ identity$ and $B \defeq \var{Univalent}$.
|
IsIdentity\ identity$ and $B ≜ \var{Univalent}$.
|
||||||
\pause
|
\pause
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
|
@ -342,16 +346,16 @@
|
||||||
The isomorphism induces the path
|
The isomorphism induces the path
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
p \defeq \idToIso\ (\iota, \inv{\iota}) \tp A \equiv B
|
p ≜ \idToIso\ (\iota, \inv{\iota}) \tp A ≡ B
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
\pause
|
\pause
|
||||||
and consequently an arrow:
|
and consequently an arrow:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
p_{\var{dom}} \defeq \congruence\ (λ x → \Arrow\ x\ X)\ p
|
p_{\var{dom}} ≜ \congruence\ (λ x → \Arrow\ x\ X)\ p
|
||||||
\tp
|
\tp
|
||||||
\Arrow\ A\ X \equiv \Arrow\ B\ X
|
\Arrow\ A\ X ≡ \Arrow\ B\ X
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
\pause
|
\pause
|
||||||
|
@ -360,8 +364,8 @@
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\label{eq:coeDom}
|
\label{eq:coeDom}
|
||||||
\tag{$\var{coeDom}$}
|
\tag{$\var{coeDom}$}
|
||||||
\prod_{f \tp A \to X}
|
∏_{f \tp A → X}
|
||||||
\var{coe}\ p_{\var{dom}}\ f \equiv f \lll \inv{\iota}
|
\var{coe}\ p_{\var{dom}}\ f ≡ f \lll \inv{\iota}
|
||||||
\end{align}
|
\end{align}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -369,23 +373,23 @@
|
||||||
\framesubtitle{A theorem, proof}
|
\framesubtitle{A theorem, proof}
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{coe}\ p_{\var{dom}}\ f
|
\var{coe}\ p_{\var{dom}}\ f
|
||||||
& \equiv f \lll \inv{(\idToIso\ p)} && \text{By path-induction} \\
|
& ≡ f \lll \inv{(\idToIso\ p)} && \text{By path-induction} \\
|
||||||
& \equiv f \lll \inv{\iota}
|
& ≡ f \lll \inv{\iota}
|
||||||
&& \text{$\idToIso$ and $\isoToId$ are inverses}\\
|
&& \text{$\idToIso$ and $\isoToId$ are inverses}\\
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
%
|
%
|
||||||
Induction will be based at $A$. Let $\widetilde{B}$ and $\widetilde{p}
|
Induction will be based at $A$. Let $\widetilde{B}$ and $\widetilde{p}
|
||||||
\tp A \equiv \widetilde{B}$ be given.
|
\tp A ≡ \widetilde{B}$ be given.
|
||||||
%
|
%
|
||||||
\pause
|
\pause
|
||||||
%
|
%
|
||||||
Define the family:
|
Define the family:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
D\ \widetilde{B}\ \widetilde{p} \defeq
|
D\ \widetilde{B}\ \widetilde{p} ≜
|
||||||
\var{coe}\ \widetilde{p}_{\var{dom}}\ f
|
\var{coe}\ \widetilde{p}_{\var{dom}}\ f
|
||||||
\equiv
|
≡
|
||||||
f \lll \inv{(\idToIso\ \widetilde{p})}
|
f \lll \inv{(\idToIso\ \widetilde{p})}
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
|
@ -393,7 +397,7 @@
|
||||||
The base-case becomes:
|
The base-case becomes:
|
||||||
$$
|
$$
|
||||||
d \tp D\ A\ \refl =
|
d \tp D\ A\ \refl =
|
||||||
\var{coe}\ \refl_{\var{dom}}\ f \equiv f \lll \inv{(\idToIso\ \refl)}
|
\var{coe}\ \refl_{\var{dom}}\ f ≡ f \lll \inv{(\idToIso\ \refl)}
|
||||||
$$
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -401,17 +405,17 @@
|
||||||
\framesubtitle{A theorem, proof, cont'd}
|
\framesubtitle{A theorem, proof, cont'd}
|
||||||
$$
|
$$
|
||||||
d \tp
|
d \tp
|
||||||
\var{coe}\ \refl_{\var{dom}}\ f \equiv f \lll \inv{(\idToIso\ \refl)}
|
\var{coe}\ \refl_{\var{dom}}\ f ≡ f \lll \inv{(\idToIso\ \refl)}
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{coe}\ \refl^*\ f
|
\var{coe}\ \refl^*\ f
|
||||||
& \equiv f
|
& ≡ f
|
||||||
&& \text{$\refl$ is a neutral element for $\var{coe}$}\\
|
&& \text{$\refl$ is a neutral element for $\var{coe}$}\\
|
||||||
& \equiv f \lll \identity \\
|
& ≡ f \lll \identity \\
|
||||||
& \equiv f \lll \var{subst}\ \refl\ \identity
|
& ≡ f \lll \var{subst}\ \refl\ \identity
|
||||||
&& \text{$\refl$ is a neutral element for $\var{subst}$}\\
|
&& \text{$\refl$ is a neutral element for $\var{subst}$}\\
|
||||||
& \equiv f \lll \inv{(\idToIso\ \refl)}
|
& ≡ f \lll \inv{(\idToIso\ \refl)}
|
||||||
&& \text{By definition of $\idToIso$}\\
|
&& \text{By definition of $\idToIso$}\\
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
|
@ -429,7 +433,7 @@
|
||||||
\pause
|
\pause
|
||||||
Objects:
|
Objects:
|
||||||
$$
|
$$
|
||||||
\sum_{X \tp Object} \Arrow\ X\ \pairA × \Arrow\ X\ \pairB
|
∑_{X \tp Object} \Arrow\ X\ \pairA × \Arrow\ X\ \pairB
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
%
|
%
|
||||||
|
@ -437,9 +441,9 @@
|
||||||
$B ,\ b_{\pairA} ,\ b_{\pairB}$:
|
$B ,\ b_{\pairA} ,\ b_{\pairB}$:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\sum_{f \tp \Arrow\ A\ B}
|
∑_{f \tp \Arrow\ A\ B}
|
||||||
b_{\pairA} \lll f \equiv a_{\pairA} \x
|
b_{\pairA} \lll f ≡ a_{\pairA} ×
|
||||||
b_{\pairB} \lll f \equiv a_{\pairB}
|
b_{\pairB} \lll f ≡ a_{\pairB}
|
||||||
$$
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -447,25 +451,25 @@
|
||||||
\framesubtitle{Univalence}
|
\framesubtitle{Univalence}
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\label{eq:univ-0}
|
\label{eq:univ-0}
|
||||||
(X , x_{\mathcal{A}} , x_{\mathcal{B}}) ≡ (Y , y_{\mathcal{A}} , y_{\mathcal{B}})
|
(X , x_{𝒜} , x_{ℬ}) ≡ (Y , y_{𝒜} , y_{ℬ})
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\label{eq:univ-1}
|
\label{eq:univ-1}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
p \tp & X \equiv Y \\
|
p \tp & X ≡ Y \\
|
||||||
& \Path\ (λ i → \Arrow\ (p\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
& \Path\ (λ i → \Arrow\ (p\ i)\ 𝒜)\ x_{𝒜}\ y_{𝒜} \\
|
||||||
& \Path\ (λ i → \Arrow\ (p\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
& \Path\ (λ i → \Arrow\ (p\ i)\ ℬ)\ x_{ℬ}\ y_{ℬ}
|
||||||
\end{split}
|
\end{split}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\var{iso} \tp & X \approxeq 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)\ 𝒜)\ x_{𝒜}\ y_{𝒜} \\
|
||||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ ℬ)\ x_{ℬ}\ y_{ℬ}
|
||||||
\end{split}
|
\end{split}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
(X , x_{\mathcal{A}} , x_{\mathcal{B}}) ≊ (Y , y_{\mathcal{A}} , y_{\mathcal{B}})
|
(X , x_{𝒜} , x_{ℬ}) ≊ (Y , y_{𝒜} , y_{ℬ})
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -475,12 +479,12 @@
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
%% (f, \inv{f}, \var{inv}_f, \var{inv}_{\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_{𝒜}, x_{ℬ}) \approxeq (Y, y_{𝒜}, y_{ℬ})
|
||||||
\to
|
\to
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\var{iso} \tp & X \approxeq 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)\ 𝒜)\ x_{𝒜}\ y_{𝒜} \\
|
||||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ ℬ)\ x_{ℬ}\ y_{ℬ}
|
||||||
\end{split}
|
\end{split}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
|
@ -503,8 +507,8 @@
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\widetilde{p} & \tp X \equiv Y \\
|
\widetilde{p} & \tp X ≡ Y \\
|
||||||
\widetilde{p}_{\mathcal{A}} & \tp \Arrow\ X\ \mathcal{A} \equiv \Arrow\ Y\ \mathcal{A} \\
|
\widetilde{p}_{𝒜} & \tp \Arrow\ X\ 𝒜 ≡ \Arrow\ Y\ 𝒜 \\
|
||||||
\end{split}
|
\end{split}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
|
@ -517,7 +521,7 @@
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\begin{split}
|
\begin{split}
|
||||||
\label{eq:product-paths}
|
\label{eq:product-paths}
|
||||||
& \Path\ (λ i → \widetilde{p}_{\mathcal{A}}\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}
|
& \Path\ (λ i → \widetilde{p}_{𝒜}\ i)\ x_{𝒜}\ y_{𝒜}
|
||||||
\end{split}
|
\end{split}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
|
@ -525,9 +529,9 @@
|
||||||
This is achieved with the following lemma:
|
This is achieved with the following lemma:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\prod_{q \tp A \equiv B} \var{coe}\ q\ x_{\mathcal{A}} ≡ y_{\mathcal{A}}
|
∏_{q \tp A ≡ B} \var{coe}\ q\ x_{𝒜} ≡ y_{𝒜}
|
||||||
→
|
→
|
||||||
\Path\ (λ i → q\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}
|
\Path\ (λ i → q\ i)\ x_{𝒜}\ y_{𝒜}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
%
|
%
|
||||||
Which is used without proof.\pause
|
Which is used without proof.\pause
|
||||||
|
@ -535,15 +539,15 @@
|
||||||
So the construction reduces to:
|
So the construction reduces to:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}} ≡ y_{\mathcal{A}}
|
\var{coe}\ \widetilde{p}_{𝒜}\ x_{𝒜} ≡ y_{𝒜}
|
||||||
\end{align*}%
|
\end{align*}%
|
||||||
\pause%
|
\pause%
|
||||||
This is proven with:
|
This is proven with:
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}}
|
\var{coe}\ \widetilde{p}_{𝒜}\ x_{𝒜}
|
||||||
& ≡ x_{\mathcal{A}} \lll \fst\ \inv{f} && \text{\ref{eq:coeDom}} \\
|
& ≡ x_{𝒜} \lll \fst\ \inv{f} && \text{\ref{eq:coeDom}} \\
|
||||||
& ≡ y_{\mathcal{A}} && \text{Property of span category}
|
& ≡ y_{𝒜} && \text{Property of span category}
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -556,13 +560,13 @@
|
||||||
%
|
%
|
||||||
We can show:
|
We can show:
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\var{Terminal} ≃ \var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}
|
\var{Terminal} ≃ \var{Product}\ ℂ\ 𝒜\ ℬ
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
And since equivalences preserve homotopy levels we get:
|
And since equivalences preserve homotopy levels we get:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\isProp\ \left(\var{Product}\ \bC\ \mathcal{A}\ \mathcal{B}\right)
|
\isProp\ \left(\var{Product}\ \bC\ 𝒜\ ℬ\right)
|
||||||
$$
|
$$
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
|
@ -595,7 +599,7 @@
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\omapR & \tp \Object → \Object \\
|
\omapR & \tp \Object → \Object \\
|
||||||
\pure & \tp % \prod_{X \tp Object}
|
\pure & \tp % ∏_{X \tp Object}
|
||||||
\Arrow\ X\ (\omapR\ X) \\
|
\Arrow\ X\ (\omapR\ X) \\
|
||||||
\bind & \tp
|
\bind & \tp
|
||||||
\Arrow\ X\ (\omapR\ Y)
|
\Arrow\ X\ (\omapR\ Y)
|
||||||
|
@ -610,7 +614,7 @@
|
||||||
\Arrow\ B\ (\omapR\ C)
|
\Arrow\ B\ (\omapR\ C)
|
||||||
→
|
→
|
||||||
\Arrow\ A\ (\omapR\ C) \\
|
\Arrow\ A\ (\omapR\ C) \\
|
||||||
f \fish g & \defeq f \rrr (\bind\ g)
|
f \fish g & ≜ f \rrr (\bind\ g)
|
||||||
\end{align*}
|
\end{align*}
|
||||||
\pause
|
\pause
|
||||||
%
|
%
|
||||||
|
@ -629,20 +633,20 @@
|
||||||
In the monoidal formulation we can define $\bind$:
|
In the monoidal formulation we can define $\bind$:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\bind\ f \defeq \join \lll \fmap\ f
|
\bind\ f ≜ \join \lll \fmap\ f
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
%
|
%
|
||||||
And likewise in the Kleisli formulation we can define $\join$:
|
And likewise in the Kleisli formulation we can define $\join$:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\join \defeq \bind\ \identity
|
\join ≜ \bind\ \identity
|
||||||
$$
|
$$
|
||||||
\pause
|
\pause
|
||||||
The laws are logically equivalent. So we get:
|
The laws are logically equivalent. So we get:
|
||||||
%
|
%
|
||||||
$$
|
$$
|
||||||
\var{Monoidal} \simeq \var{Kleisli}
|
\var{Monoidal} ≃ \var{Kleisli}
|
||||||
$$
|
$$
|
||||||
%
|
%
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
|
Loading…
Reference in a new issue