Add introduction
This commit is contained in:
parent
8a0ea9f4a5
commit
d33c814e78
|
@ -1,8 +1,44 @@
|
||||||
\chapter{Introduction}
|
\chapter{Introduction}
|
||||||
|
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
|
||||||
|
propositions (cf. Hilbert's \nomen{entscheidigungsproblem}).
|
||||||
|
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.
|
||||||
|
|
||||||
|
The usual notion of propositional equality in \nomen{Intensional Type
|
||||||
|
Theory} (ITT) is quite restrictive. In the next section a few
|
||||||
|
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
|
||||||
|
equality and as such is an alternative to these other techniques.
|
||||||
|
%
|
||||||
\section{Motivating examples}
|
\section{Motivating examples}
|
||||||
%
|
%
|
||||||
In the following two sections I present two examples that illustrate some
|
In the following two sections I present two examples that illustrate
|
||||||
limitations inherent in ITT and -- by extension -- Agda.
|
some limitations inherent in ITT and -- by extension -- Agda.
|
||||||
%
|
%
|
||||||
\subsection{Functional extensionality}
|
\subsection{Functional extensionality}
|
||||||
\label{sec:functional-extensionality}%
|
\label{sec:functional-extensionality}%
|
||||||
|
@ -39,35 +75,43 @@ as $n + 0 \equiv n$. Propositional equality means that there is a
|
||||||
proof that exhibits this relation. Since equality is a transitive
|
proof that exhibits this relation. Since equality is a transitive
|
||||||
relation we have that $n + 0 \equiv 0 + n$.
|
relation we have that $n + 0 \equiv 0 + n$.
|
||||||
|
|
||||||
Unfortunately we don't have $f \equiv g$.\footnote{Actually showing this is
|
Unfortunately we don't have $f \equiv g$. There is no way to construct
|
||||||
outside the scope of this text. Essentially it would involve giving a model
|
a proof asserting the obvious equivalence of $f$ and $g$. Actually
|
||||||
for our type theory that validates all our axioms but where $f \equiv g$ is
|
showing this is outside the scope of this text. Essentially it would
|
||||||
not true.} There is no way to construct a proof asserting the obvious
|
involve giving a model for our type theory that validates all our
|
||||||
equivalence of $f$ and $g$ -- even though we can prove them equal for all
|
axioms but where $f \equiv g$ is not true. We cannot show that they
|
||||||
points. This is exactly the notion of equality of functions that we are
|
are equal, even though we can prove them equal for all points. For
|
||||||
interested in; that they are equal for all inputs. We call this
|
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.
|
||||||
|
|
||||||
\nomenindex{point-wise equality}, where the \emph{points} of a function refers
|
%% In the context of category theory functional extensionality is e.g.
|
||||||
to its arguments.
|
%% needed to show that representable functors are indeed functors. The
|
||||||
|
%% representable functor is defined for a fixed category $\bC$ and an
|
||||||
In the context of category theory functional extensionality is e.g. needed to
|
%% object $X \in \bC$. It's map on objects is defined thus:
|
||||||
show that representable functors are indeed functors. The representable functor
|
%% %
|
||||||
for a category $\bC$ and a fixed object in $A \in \bC$ is defined to be:
|
%% \begin{align*}
|
||||||
%
|
%% \lambda\ A \to \Arrow\ X\ A
|
||||||
\begin{align*}
|
%% \end{align*}
|
||||||
\fmap \defeq \lambda\ X \to \Hom_{\bC}(A, X)
|
%% %
|
||||||
\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:
|
||||||
The proof obligation that this satisfies the identity law of functors
|
%% %
|
||||||
($\fmap\ \idFun \equiv \idFun$) thus becomes:
|
%% \begin{align*}
|
||||||
%
|
%% \lambda f \to
|
||||||
\begin{align*}
|
%% \end{align*}
|
||||||
\Hom(A, \idFun_{\bX}) = (\lambda\ g \to \idFun \comp g) \equiv \idFun_{\Sets}
|
%% %
|
||||||
\end{align*}
|
%% The proof obligation that this satisfies the identity law of functors
|
||||||
%
|
%% ($\fmap\ \idFun \equiv \idFun$) thus becomes:
|
||||||
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
|
%% \begin{align*}
|
||||||
\equiv g$ and thus close the goal.
|
%% \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}
|
||||||
%
|
%
|
||||||
|
@ -87,10 +131,11 @@ 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 equivalence later
|
\nomenindex{equivalent} types. I will return to the definition of
|
||||||
in section \S\ref{sec:equiv}, but for now it is sufficient to think of an
|
equivalence later in section \S\ref{sec:equiv}, but for now it is
|
||||||
equivalence as a one-to-one correspondence. We write $A \simeq B$ to assert that
|
sufficient to think of an equivalence as a one-to-one correspondence.
|
||||||
$A$ and $B$ are equivalent types. The principle of univalence says that:
|
We write $A \simeq B$ to assert that $A$ and $B$ are equivalent types.
|
||||||
|
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)$$
|
||||||
%
|
%
|
||||||
|
@ -119,25 +164,20 @@ implementations of category theory in Agda:
|
||||||
%
|
%
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
|
A formalization in Agda using the setoid approach:
|
||||||
\url{https://github.com/copumpkin/categories}
|
\url{https://github.com/copumpkin/categories}
|
||||||
|
|
||||||
A formalization in Agda using the setoid approach
|
|
||||||
\item
|
\item
|
||||||
|
A formalization in Agda with univalence and functional
|
||||||
|
extensionality as postulates:
|
||||||
\url{https://github.com/pcapriotti/agda-categories}
|
\url{https://github.com/pcapriotti/agda-categories}
|
||||||
|
|
||||||
A formalization in Agda with univalence and functional extensionality as
|
|
||||||
postulates.
|
|
||||||
\item
|
\item
|
||||||
|
A formalization in Coq in the homotopic setting:
|
||||||
\url{https://github.com/HoTT/HoTT/tree/master/theories/Categories}
|
\url{https://github.com/HoTT/HoTT/tree/master/theories/Categories}
|
||||||
|
|
||||||
A formalization in Coq in the homotopic setting
|
|
||||||
\item
|
\item
|
||||||
\url{https://github.com/mortberg/cubicaltt}
|
|
||||||
|
|
||||||
A formalization in CubicalTT - a language designed for cubical type theory.
|
A formalization in CubicalTT - a language designed for cubical type theory.
|
||||||
Formalizes many different things, but only a few concepts from category
|
Formalizes many different things, but only a few concepts from category
|
||||||
theory.
|
theory:
|
||||||
|
\url{https://github.com/mortberg/cubicaltt}
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
%
|
%
|
||||||
The contribution of this thesis is to explore how working in a cubical setting
|
The contribution of this thesis is to explore how working in a cubical setting
|
||||||
|
|
Loading…
Reference in a new issue