2018-05-01 16:55:28 +00:00
|
|
|
\chapter{Introduction}
|
2018-05-15 16:34:25 +00:00
|
|
|
This thesis is a case-study in the application of Cubical Agda in the
|
|
|
|
context of category theory. At the center of this is the notion of
|
|
|
|
\nomenindex{equality}. In type-theory there are two pervasive notions
|
|
|
|
of equality: \nomenindex{judgmental equality} and
|
|
|
|
\nomenindex{propositional equality}. Judgmental equality is a property
|
|
|
|
of the type system, it is a property that is automatically checked by
|
|
|
|
a type checker. As such there are some properties judgmental
|
|
|
|
equalities must crucially have. It must be \nomenindex{decidable},
|
|
|
|
\nomenindex{sound}, enjoy \nomenindex{canonicity} and be a
|
|
|
|
\nomen{congruence relation}. Being decidable simply means that that an
|
|
|
|
algorithm exists to decide whether two terms are equal. For any
|
|
|
|
practical implementation the decidability must also be effectively
|
|
|
|
computable. Soundness means that things judged to be equal actually
|
|
|
|
\emph{are} considered equal. It must be a congruence relation because
|
|
|
|
otherwise the relation certainly does not adhere to our notion of
|
|
|
|
equality. One would be able to conclude things like: $x \nequiv y
|
|
|
|
\rightarrow f\ x \equiv f\ y$. Canonicity will be explained later in
|
|
|
|
this introduction after we've seen an example of judgmental- and
|
|
|
|
propositional equality at play for a simple example.\TODO{How to
|
|
|
|
motivate canonicity for equality}.
|
|
|
|
|
|
|
|
For propositional equality the decidability requirement is relaxed. It
|
|
|
|
is not in general possible to decide the correctness of logical
|
2018-05-16 09:36:26 +00:00
|
|
|
propositions (cf.\ Hilbert's \emph{entscheidigungsproblem}).
|
2018-05-15 16:34:25 +00:00
|
|
|
Propositional equality are provided by the developer. When introducing
|
|
|
|
definitions this report will use the notation $\defeq$. Judgmental
|
|
|
|
equalities written $=$. For propositional equalities the notation
|
|
|
|
$\equiv$ is used.
|
|
|
|
|
2018-05-16 09:36:26 +00:00
|
|
|
The usual notion of propositional equality in \nomenindex{Intensional
|
|
|
|
Type Theory} (ITT) is quite restrictive. In the next section a few
|
2018-05-15 16:34:25 +00:00
|
|
|
motivating examples will highlight this. There exist techniques to
|
|
|
|
circumvent these problems, as we shall see. This thesis will explore
|
|
|
|
an extension to Agda that redefines the notion of propositional
|
2018-05-16 09:03:34 +00:00
|
|
|
equality and as such is an alternative to these other techniques. What
|
|
|
|
makes this extension particularly interesting is that it gives a
|
2018-05-16 09:36:26 +00:00
|
|
|
\emph{constructive} interpretation of univalence. What this means will
|
|
|
|
be elaborated in the following sections.
|
2018-05-15 16:34:25 +00:00
|
|
|
%
|
2018-04-23 15:06:09 +00:00
|
|
|
\section{Motivating examples}
|
|
|
|
%
|
2018-05-15 16:34:25 +00:00
|
|
|
In the following two sections I present two examples that illustrate
|
|
|
|
some limitations inherent in ITT and -- by extension -- Agda.
|
2017-12-02 00:34:33 +00:00
|
|
|
%
|
|
|
|
\subsection{Functional extensionality}
|
2018-05-10 12:26:56 +00:00
|
|
|
\label{sec:functional-extensionality}%
|
2017-12-02 00:34:33 +00:00
|
|
|
Consider the functions:
|
|
|
|
%
|
|
|
|
\begin{multicols}{2}
|
2018-05-15 14:08:29 +00:00
|
|
|
\noindent%
|
|
|
|
\begin{equation*}%
|
|
|
|
f \defeq \lambda\ (n \tp \bN) \to (0 + n \tp \bN)
|
|
|
|
\end{equation*}%
|
|
|
|
\begin{equation*}%
|
|
|
|
g \defeq \lambda\ (n \tp \bN) \to (n + 0 \tp \bN)
|
|
|
|
\end{equation*}%
|
|
|
|
\end{multicols}%
|
|
|
|
%
|
2018-05-15 16:34:25 +00:00
|
|
|
The term $n + 0$ is
|
2018-05-15 14:08:29 +00:00
|
|
|
\nomenindex{definitionally} equal to $n$, which we
|
2018-05-15 16:34:25 +00:00
|
|
|
write as $n + 0 = n$. This is also called
|
2018-05-15 14:08:29 +00:00
|
|
|
\nomenindex{judgmental equality}.
|
|
|
|
We call it definitional equality because the \emph{equality} arises
|
|
|
|
from the \emph{definition} of $+$ which is:
|
2017-12-02 00:34:33 +00:00
|
|
|
%
|
|
|
|
\begin{align*}
|
2018-05-08 00:01:17 +00:00
|
|
|
+ & \tp \bN \to \bN \to \bN \\
|
2017-12-02 00:34:33 +00:00
|
|
|
n + 0 & \defeq n \\
|
|
|
|
n + (\suc{m}) & \defeq \suc{(n + m)}
|
|
|
|
\end{align*}
|
|
|
|
%
|
2018-05-15 14:08:29 +00:00
|
|
|
Note that $0 + n$ is \emph{not} definitionally equal to $n$. $0 + n$
|
|
|
|
is in normal form. I.e.; there is no rule for $+$ whose left hand side
|
|
|
|
matches this expression. We \emph{do}, however, have that they are
|
|
|
|
\nomen{propositionally}{propositional equality} equal, which we write
|
|
|
|
as $n + 0 \equiv n$. Propositional equality means that there is a
|
|
|
|
proof that exhibits this relation. Since equality is a transitive
|
2018-03-29 11:32:06 +00:00
|
|
|
relation we have that $n + 0 \equiv 0 + n$.
|
2017-12-02 00:34:33 +00:00
|
|
|
|
2018-05-15 16:34:25 +00:00
|
|
|
Unfortunately we don't have $f \equiv g$. There is no way to construct
|
|
|
|
a proof asserting the obvious equivalence of $f$ and $g$. Actually
|
|
|
|
showing this is outside the scope of this text. Essentially it would
|
|
|
|
involve giving a model for our type theory that validates all our
|
|
|
|
axioms but where $f \equiv g$ is not true. We cannot show 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 are
|
|
|
|
interested in: Functions are considered equal when they are equal for
|
|
|
|
all inputs. This is called \nomenindex{point wise equality}, where the
|
|
|
|
\emph{points} of a function refer to its arguments.
|
|
|
|
|
|
|
|
%% In the context of category theory functional extensionality is e.g.
|
|
|
|
%% needed to show that representable functors are indeed functors. The
|
|
|
|
%% representable functor is defined for a fixed category $\bC$ and an
|
|
|
|
%% object $X \in \bC$. It's map on objects is defined thus:
|
|
|
|
%% %
|
|
|
|
%% \begin{align*}
|
|
|
|
%% \lambda\ A \to \Arrow\ X\ A
|
|
|
|
%% \end{align*}
|
|
|
|
%% %
|
|
|
|
%% That is, it maps objects to arrows. So, it's map on arrows must map an arrow $\Arrow\ A\ B$ to an
|
|
|
|
%% The map on objects is defined thus:
|
|
|
|
%% %
|
|
|
|
%% \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.
|
2017-12-02 00:34:33 +00:00
|
|
|
%
|
|
|
|
\subsection{Equality of isomorphic types}
|
|
|
|
%
|
2018-05-15 14:08:29 +00:00
|
|
|
Let $\top$ denote the unit type -- a type with a single constructor.
|
|
|
|
In the propositions as types interpretation of type theory $\top$ is
|
|
|
|
the proposition that is always true. The type $A \x \top$ and $A$ has
|
|
|
|
an element for each $a \tp A$. So in a sense they have the same shape
|
2018-05-15 16:34:25 +00:00
|
|
|
(Greek;
|
2018-05-15 14:08:29 +00:00
|
|
|
\nomenindex{isomorphic}). The second element of the pair does not
|
|
|
|
add any ``interesting information''. It can be useful to identify such
|
|
|
|
types. In fact, it is quite commonplace in mathematics. Say we look at
|
|
|
|
a set $\{x \mid \phi\ x \land \psi\ x\}$ and somehow conclude that
|
|
|
|
$\psi\ x \equiv \top$ for all $x$. A mathematician would immediately
|
|
|
|
conclude $\{x \mid \phi\ x \land \psi\ x\} \equiv \{x \mid \phi\ x\}$
|
|
|
|
without thinking twice. Unfortunately such an identification can not
|
2018-05-03 12:18:51 +00:00
|
|
|
be performed in ITT.
|
2017-12-02 00:34:33 +00:00
|
|
|
|
2018-05-07 08:13:13 +00:00
|
|
|
More specifically what we are interested in is a way of identifying
|
2018-05-15 14:08:29 +00:00
|
|
|
|
2018-05-15 16:34:25 +00:00
|
|
|
\nomenindex{equivalent} types. I will return to the definition of
|
|
|
|
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.
|
|
|
|
We write $A \simeq B$ to assert that $A$ and $B$ are equivalent types.
|
|
|
|
The principle of univalence says that:
|
2017-12-02 00:34:33 +00:00
|
|
|
%
|
2018-03-29 11:32:06 +00:00
|
|
|
$$\mathit{univalence} \tp (A \simeq B) \simeq (A \equiv B)$$
|
2017-12-02 00:34:33 +00:00
|
|
|
%
|
2018-04-24 12:11:22 +00:00
|
|
|
In particular this allows us to construct an equality from an equivalence
|
2018-05-15 14:08:29 +00:00
|
|
|
($\mathit{ua} \tp (A \simeq B) \to (A \equiv B)$) and vice versa.
|
2018-04-24 12:11:22 +00:00
|
|
|
|
2018-04-23 15:06:09 +00:00
|
|
|
\section{Formalizing Category Theory}
|
2017-12-02 00:34:33 +00:00
|
|
|
%
|
2018-05-03 12:18:51 +00:00
|
|
|
The above examples serve to illustrate a limitation of ITT. One case where these
|
|
|
|
limitations are particularly prohibitive is in the study of Category Theory. At
|
|
|
|
a glance category theory can be described as ``the mathematical study of
|
2018-05-07 08:13:13 +00:00
|
|
|
(abstract) algebras of functions'' (\cite{awodey-2006}). By that token
|
2017-12-02 00:34:33 +00:00
|
|
|
functional extensionality is particularly useful for formulating Category
|
2017-12-12 14:45:20 +00:00
|
|
|
Theory. In Category theory it is also common to identify isomorphic structures
|
2018-05-03 12:18:51 +00:00
|
|
|
and univalence gives us a way to make this notion precise. In fact we can
|
|
|
|
formulate this requirement within our formulation of categories by requiring the
|
2018-03-29 11:32:06 +00:00
|
|
|
\emph{categories} themselves to be univalent as we shall see.
|
2017-12-02 00:34:33 +00:00
|
|
|
|
2017-11-26 13:59:05 +00:00
|
|
|
\section{Context}
|
2018-05-07 22:25:34 +00:00
|
|
|
\label{sec:context}
|
2017-12-02 00:34:33 +00:00
|
|
|
%
|
2018-03-29 11:32:06 +00:00
|
|
|
The idea of formalizing Category Theory in proof assistants is not new. There
|
2018-05-03 12:18:51 +00:00
|
|
|
are a multitude of these available online. Just as a first reference see this
|
2018-04-24 12:11:22 +00:00
|
|
|
question on Math Overflow: \cite{mo-formalizations}. Notably these
|
|
|
|
implementations of category theory in Agda:
|
2018-05-07 08:13:13 +00:00
|
|
|
%
|
2017-12-02 00:34:33 +00:00
|
|
|
\begin{itemize}
|
|
|
|
\item
|
2018-05-15 16:34:25 +00:00
|
|
|
A formalization in Agda using the setoid approach:
|
2018-05-07 08:13:13 +00:00
|
|
|
\url{https://github.com/copumpkin/categories}
|
2017-12-02 00:34:33 +00:00
|
|
|
\item
|
2018-05-15 16:34:25 +00:00
|
|
|
A formalization in Agda with univalence and functional
|
|
|
|
extensionality as postulates:
|
2018-05-07 08:13:13 +00:00
|
|
|
\url{https://github.com/pcapriotti/agda-categories}
|
2017-12-02 00:34:33 +00:00
|
|
|
\item
|
2018-05-15 16:34:25 +00:00
|
|
|
A formalization in Coq in the homotopic setting:
|
2018-05-07 22:25:34 +00:00
|
|
|
\url{https://github.com/HoTT/HoTT/tree/master/theories/Categories}
|
2018-03-29 11:32:06 +00:00
|
|
|
\item
|
2018-05-16 09:36:26 +00:00
|
|
|
A formalization in \emph{CubicalTT} -- a language designed for
|
|
|
|
cubical type theory. Formalizes many different things, but only a
|
|
|
|
few concepts from category theory:
|
2018-05-15 16:34:25 +00:00
|
|
|
\url{https://github.com/mortberg/cubicaltt}
|
2018-05-07 08:13:13 +00:00
|
|
|
\end{itemize}
|
|
|
|
%
|
2018-04-24 12:11:22 +00:00
|
|
|
The contribution of this thesis is to explore how working in a cubical setting
|
2018-05-07 08:13:13 +00:00
|
|
|
will make it possible to prove more things and to reuse proofs and to try and
|
|
|
|
compare some aspects of this formalization with the existing ones.\TODO{How can
|
|
|
|
I live up to this?}
|
2017-12-02 00:34:33 +00:00
|
|
|
|
2018-05-16 09:01:07 +00:00
|
|
|
There are alternative approaches to working in a cubical setting where
|
|
|
|
one can still have univalence and functional extensionality. One
|
|
|
|
option is to postulate these as axioms. This approach, however, has
|
|
|
|
other shortcomings, e.g. you lose \nomenindex{canonicity}
|
|
|
|
(\TODO{Pageno!} \cite{huber-2016}). Canonicity means that any 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.
|
2017-12-02 00:34:33 +00:00
|
|
|
|
2018-05-15 14:08:29 +00:00
|
|
|
Another approach is to use the \emph{setoid interpretation} of type
|
|
|
|
theory (\cite{hofmann-1995,huber-2016}). With this approach one works
|
2018-05-15 16:34:25 +00:00
|
|
|
with
|
2018-05-15 14:08:29 +00:00
|
|
|
\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 type.
|
|
|
|
Under the setoid interpretation the equivalence relation serve as a
|
|
|
|
sort of ``local'' propositional equality. Since the developer gets to
|
|
|
|
pick this relation it is not guaranteed to be a congruence relation
|
2018-05-16 09:36:26 +00:00
|
|
|
a priori. So this must be verified manually by the developer.
|
2018-05-15 14:08:29 +00:00
|
|
|
Furthermore, functions between different setoids must be shown to be
|
|
|
|
setoid homomorphism, that is; they preserve the relation.
|
|
|
|
|
|
|
|
This approach has other drawbacks; it does not satisfy
|
2018-05-07 22:25:34 +00:00
|
|
|
all propositional equalities of type theory (\TODO{Citation needed}), is
|
2018-05-07 08:13:13 +00:00
|
|
|
cumbersome to work with in practice (\cite[p. 4]{huber-2016}) and makes
|
|
|
|
equational proofs less reusable since equational proofs $a \sim_{X} b$ are
|
|
|
|
inherently `local' to the extensional set $(X , \sim)$.
|
|
|
|
|
|
|
|
\section{Conventions}
|
|
|
|
\TODO{Talk a bit about terminology. Find a good place to stuff this little
|
|
|
|
section.}
|
|
|
|
|
2018-05-15 16:34:25 +00:00
|
|
|
In the remainder of this paper I will use the term
|
2018-05-15 14:08:29 +00:00
|
|
|
\nomenindex{Type} to describe --
|
2018-05-07 08:13:13 +00:00
|
|
|
well, types. Thereby diverging from the notation in Agda where the keyword
|
2018-05-15 16:34:25 +00:00
|
|
|
\texttt{Set} refers to types.
|
2018-05-15 14:08:29 +00:00
|
|
|
\nomenindex{Set} on the other hand shall refer to the
|
2018-05-07 08:13:13 +00:00
|
|
|
homotopical notion of a set. I will also leave all universe levels implicit.
|
|
|
|
|
2018-05-15 16:34:25 +00:00
|
|
|
And I use the term
|
2018-05-15 14:08:29 +00:00
|
|
|
\nomenindex{arrow} to refer to morphisms in a category,
|
2018-05-15 16:34:25 +00:00
|
|
|
whereas the terms
|
|
|
|
\nomenindex{morphism},
|
|
|
|
\nomenindex{map} or
|
2018-05-15 14:08:29 +00:00
|
|
|
\nomenindex{function}
|
|
|
|
shall be reserved for talking about type theoretic functions; i.e.
|
|
|
|
functions in Agda.
|
2018-05-07 08:13:13 +00:00
|
|
|
|
|
|
|
$\defeq$ will be used for introducing definitions. $=$ will be used to for
|
|
|
|
judgmental equality and $\equiv$ will be used for propositional equality.
|
|
|
|
|
|
|
|
All this is summarized in the following table:
|
|
|
|
|
|
|
|
\begin{center}
|
|
|
|
\begin{tabular}{ c c c }
|
|
|
|
Name & Agda & Notation \\
|
|
|
|
\hline
|
2018-05-15 14:08:29 +00:00
|
|
|
|
|
|
|
\varindex{Type} & \texttt{Set} & $\Type$ \\
|
|
|
|
|
|
|
|
\varindex{Set} & \texttt{Σ Set IsSet} & $\Set$ \\
|
2018-05-07 08:13:13 +00:00
|
|
|
Function, morphism, map & \texttt{A → B} & $A → B$ \\
|
2018-05-08 14:22:51 +00:00
|
|
|
Dependent- ditto & \texttt{(a : A) → B} & $∏_{a \tp A} B$ \\
|
2018-05-15 14:08:29 +00:00
|
|
|
|
|
|
|
\varindex{Arrow} & \texttt{Arrow A B} & $\Arrow\ A\ B$ \\
|
|
|
|
|
|
|
|
\varindex{Object} & \texttt{C.Object} & $̱ℂ.Object$ \\
|
2018-05-07 08:53:22 +00:00
|
|
|
Definition & \texttt{=} & $̱\defeq$ \\
|
|
|
|
Judgmental equality & \null & $̱=$ \\
|
2018-05-07 08:13:13 +00:00
|
|
|
Propositional equality & \null & $̱\equiv$
|
|
|
|
\end{tabular}
|
|
|
|
\end{center}
|