Erratta
This commit is contained in:
parent
636b5f3e27
commit
1f750e2275
|
@ -1,21 +1,22 @@
|
|||
\chapter*{Abstract}
|
||||
The usual notion of propositional equality in intensional type-theory
|
||||
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
|
||||
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
|
||||
programming language Agda has been extended with capabilities for
|
||||
working in such a cubical setting. This thesis will explore the
|
||||
usefulness of this extension in the context of category theory.
|
||||
|
||||
The thesis will motivate and explain why propositional equality in
|
||||
cubical Agda is more expressive than in standard Agda. Alternative
|
||||
approaches to Cubical Agda will be presented and their pros and cons
|
||||
will be explained. It will emphasize why it is useful to have a
|
||||
constructive interpretation of univalence. As an example of this two
|
||||
formulations of monads will be presented: Namely monads in the
|
||||
monoidal form and monads in the Kleisli form.
|
||||
The thesis will motivate the need for univalence and explain why
|
||||
propositional equality in cubical Agda is more expressive than in
|
||||
standard Agda. Alternative approaches to Cubical Agda will be
|
||||
presented and their pros and cons will be explained. As an example of
|
||||
the application of univalence two formulations of monads will be
|
||||
presented: Namely monads in the monoidal form and monads in the
|
||||
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
|
||||
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}
|
||||
In two places in my formalization was the computational behaviours of
|
||||
functional extensionality used. The reduction behaviour can be
|
||||
|
|
|
@ -46,7 +46,8 @@
|
|||
{\Huge\@title}\\[.5cm]
|
||||
{\Large A formalization of category theory in Cubical Agda}\\[6cm]
|
||||
\begin{center}
|
||||
\includegraphics[width=\linewidth,keepaspectratio]{isomorphism.png}
|
||||
\includegraphics[width=\linewidth,keepaspectratio]{isomorphism.pdf}
|
||||
%% \includepdf{isomorphism.pdf}
|
||||
\end{center}
|
||||
% Cover text
|
||||
\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
|
||||
admissible. Cubical Agda is more expressive, but there are certain
|
||||
issues that arise that are not present in standard Agda. For one thing
|
||||
ITT and standard Agda enjoys Uniqueness of Identity Proofs (UIP). This
|
||||
is not the case in Cubical Agda. In stead there exists a hierarchy of
|
||||
types with increasing \nomen{homotopical structure}{homotopy levels}.
|
||||
It turns out to be useful to built the formalization with this
|
||||
hierarchy in mind as it can simplify proofs considerably. Another
|
||||
issue one must overcome in Cubical Agda is when a type has a field
|
||||
whose type depends on a previous field. In this case paths between
|
||||
such types will be heterogeneous paths. This problem is related to
|
||||
Cubical Agda not having the K-rule. In practice it turns out to be
|
||||
considerably more difficult to work heterogeneous paths than with
|
||||
homogeneous paths. The thesis demonstrated some techniques to overcome
|
||||
these difficulties, such as based path-induction.
|
||||
Agda enjoys Uniqueness of Identity Proofs (UIP) though a flag exists
|
||||
to turn this off, which is the case in Cubical Agda. In stead
|
||||
there exists a hierarchy of types with increasing \nomen{homotopical
|
||||
structure}{homotopy levels}. It turns out to be useful to built the
|
||||
formalization with this hierarchy in mind as it can simplify proofs
|
||||
considerably. Another issue one must overcome in Cubical Agda is when
|
||||
a type has a field whose type depends on a previous field. In this
|
||||
case paths between such types will be heterogeneous paths. This
|
||||
problem is related to Cubical Agda not having the K-rule. In practice
|
||||
it turns out to be considerably more difficult to work heterogeneous
|
||||
paths than with homogeneous paths. The thesis demonstrated some
|
||||
techniques to overcome these difficulties, such as based
|
||||
path-induction.
|
||||
|
||||
This thesis formalized some of the core concepts from category theory including;
|
||||
categories, functors, products, exponentials, Cartesian closed categories,
|
||||
natural transformations, the yoneda embedding, monads and more. Category theory
|
||||
is an interesting case-study for the application of Cubical Agda for two reasons
|
||||
in particular: Because category theory is the study of abstract algebra of
|
||||
functions, meaning that functional extensionality is particularly relevant.
|
||||
Another reason is that in category theory it is commonplace to identify
|
||||
isomorphic structures and univalence allows for making this notion precise. This
|
||||
thesis also demonstrated another technique that is common in category theory;
|
||||
namely to define categories to prove properties of other structures.
|
||||
Specifically a category was defined to demonstrate that any two product objects
|
||||
in a category are isomorphic. Furthermore the thesis showed two formulations of
|
||||
monads and proved that they indeed are equivalent: Namely monads in the
|
||||
monoidal- and Kleisli- form. The monoidal formulation is more typical to
|
||||
category theoretic formulations and the Kleisli formulation will be more
|
||||
familiar to functional programmers. In the formulation we also saw how paths can
|
||||
be used to extract functions. A path between 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.
|
||||
This thesis formalized some of the core concepts from category theory
|
||||
including; categories, functors, products, exponentials, Cartesian
|
||||
closed categories, natural transformations, the yoneda embedding,
|
||||
monads and more. Category theory is an interesting case-study for the
|
||||
application of Cubical Agda for two reasons in particular: Because
|
||||
category theory is the study of abstract algebra of functions, meaning
|
||||
that functional extensionality is particularly relevant. Another
|
||||
reason is that in category theory it is commonplace to identify
|
||||
isomorphic structures and univalence allows for making this notion
|
||||
precise. This thesis also demonstrated another technique that is
|
||||
common in category theory; namely to define categories to prove
|
||||
properties of other structures. Specifically a category was defined
|
||||
to demonstrate that any two product objects in a category are
|
||||
isomorphic. Furthermore the thesis showed two formulations of monads
|
||||
and proved that they indeed are equivalent: Namely monads in the
|
||||
monoidal- and Kleisli- form. The monoidal formulation is more typical
|
||||
to category theoretic formulations and the Kleisli formulation will be
|
||||
more familiar to functional programmers. It would have been very
|
||||
difficult to make a similar proof with setoids. In the formulation we
|
||||
also saw how paths can be used to extract functions. A path between
|
||||
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
|
||||
%% overcome with cubical
|
||||
|
|
281
doc/cubical.tex
281
doc/cubical.tex
|
@ -1,29 +1,31 @@
|
|||
\chapter{Cubical Agda}
|
||||
\section{Propositional equality}
|
||||
Judgmental equality in Agda is a feature of the type system. Its something that
|
||||
can be checked automatically by the type checker: In the example from the
|
||||
introduction $n + 0$ can be judged to be equal to $n$ simply by expanding the
|
||||
definition of $+$.
|
||||
Judgmental equality in Agda is a feature of the type system. It is
|
||||
something that can be checked automatically by the type checker: In
|
||||
the example from the introduction $n + 0$ can be judged to be equal to
|
||||
$n$ simply by expanding the definition of $+$.
|
||||
|
||||
On the other hand, propositional equality is something defined within the
|
||||
language itself. Propositional equality cannot be derived automatically. The
|
||||
normal definition of judgmental equality is an inductive data type. Cubical Agda
|
||||
discards this type in favor of a new primitives that has certain computational
|
||||
properties exclusive to it.
|
||||
On the other hand, propositional equality is something defined within
|
||||
the language itself. Propositional equality cannot be derived
|
||||
automatically. The normal definition of judgmental equality is an
|
||||
inductive data type. Cubical Agda discards this type in favor of some
|
||||
new primitives.
|
||||
|
||||
The source code can be browsed online and is linked in the beginning
|
||||
of \S\ref{ch:implementation}.
|
||||
Most of the source code related with this section is implemented in
|
||||
\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}
|
||||
The usual notion of judgmental equality says that given a type $A \tp \MCU$ and
|
||||
two points of $A$; $a_0, a_1 \tp A$ we can form the type:
|
||||
The usual notion of judgmental equality says that given a type $A \tp
|
||||
\MCU$ and two points hereof $a_0, a_1 \tp A$ we can form the type:
|
||||
%
|
||||
\begin{align}
|
||||
a_0 \equiv a_1 \tp \MCU
|
||||
\end{align}
|
||||
%
|
||||
In Agda this is defined as an inductive data type with the single constructor
|
||||
for any $a \tp A$:
|
||||
In Agda this is defined as an inductive data type with the single
|
||||
constructor $\refl$ that for any $a \tp A$ gives:
|
||||
%
|
||||
\begin{align}
|
||||
\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
|
||||
\end{align}
|
||||
%
|
||||
This is likewise defined as an inductive data type with a single constructors
|
||||
for any $a \tp A$:
|
||||
This likewise has the single constructor $\refl$ that for any $a \tp
|
||||
A$ gives:
|
||||
%
|
||||
\begin{align}
|
||||
\refl \tp a \cong a
|
||||
|
@ -51,28 +53,28 @@ heterogeneous paths respectively.
|
|||
Judgmental equality in Cubical Agda is encapsulated with the type:
|
||||
%
|
||||
\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}
|
||||
%
|
||||
$I$ is a special data type called the index set. $I$ can be thought of
|
||||
simply as the interval on the real numbers from $0$ to $1$. $P$ is a
|
||||
family of types over the index set $I$. I will sometimes refer to $P$
|
||||
as the \nomenindex{path space} of some path $p \tp \Path\ P\ a\ b$. By
|
||||
this token $P\ 0$ then corresponds to the type at the left-endpoint
|
||||
and $P\ 1$ as the type at the right-endpoint. The type is called
|
||||
$\Path$ because it is connected with paths in homotopy theory. The
|
||||
intuition behind this is that $\Path$ describes paths in $\MCU$ --
|
||||
i.e.\ between types. For a path $p$ for the point $p\ i$ the index $i$
|
||||
describes how far along the path one has moved. An inhabitant of
|
||||
$\Path\ P\ a_0\ a_1$ is a (dependent-) function, $p$, from the
|
||||
index-space to the path space:
|
||||
The special type $\I$ is called the index set. The index set can be
|
||||
thought of simply as the interval on the real numbers from $0$ to $1$
|
||||
(both inclusive). The family $P$ over $\I$ will be referred to as the
|
||||
\nomenindex{path space} given some path $p \tp \Path\ P\ a\ b$. By
|
||||
that token $P\ 0$ corresponds to the type at the left endpoint of $p$.
|
||||
Likewise $P\ 1$ is the type at the right endpoint. The type is called
|
||||
$\Path$ because the idea has roots in homotopy theory. The intuition
|
||||
is that $\Path$ describes\linebreak[1] paths in $\MCU$. I.e.\ paths
|
||||
between types. For a path $p$ the expression $p\ i$ can be thought of
|
||||
as a \emph{point} on this path. The index $i$ describes how far along
|
||||
the path one has moved. An inhabitant of $\Path\ P\ a_0\ a_1$ is a
|
||||
(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
|
||||
endpoints. I.e.:
|
||||
Which must satisfy being judgmentally equal to $a_0$ at the
|
||||
left endpoint and equal to $a_1$ at the other end. I.e.:
|
||||
%
|
||||
\begin{align*}
|
||||
p\ 0 & = a_0 \\
|
||||
|
@ -80,80 +82,77 @@ endpoints. I.e.:
|
|||
\end{align*}
|
||||
%
|
||||
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:
|
||||
%
|
||||
$$
|
||||
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
|
||||
$a \equiv b$ when talking about non-dependent paths and use the notation
|
||||
$\Path\ (\lambda i \to P\ i)\ a\ b$ when the path space is of particular
|
||||
interest.
|
||||
I will generally prefer to use the notation $a \equiv b$ when talking
|
||||
about non-dependent paths and use the notation $\Path\ (\lambda\; i
|
||||
\to P\ i)\ a\ b$ when the path space is of particular interest.
|
||||
|
||||
With this definition we can also recover reflexivity. That is, for any $A \tp
|
||||
\MCU$ and $a \tp A$:
|
||||
%
|
||||
\begin{equation}
|
||||
\begin{aligned}
|
||||
\refl & \tp \Path (\lambda i \to A)\ a\ a \\
|
||||
\refl & \defeq \lambda i \to a
|
||||
\refl & \tp a \equiv a \\
|
||||
\refl & \defeq \lambda\; i \to a
|
||||
\end{aligned}
|
||||
\end{equation}
|
||||
%
|
||||
Here the path space is $P \defeq \lambda i \to A$ and it satsifies $P\ i = A$
|
||||
definitionally. So to inhabit it, is to give a path $I \to A$ which is
|
||||
judgmentally $a$ at either endpoint. This is satisfied by the constant path;
|
||||
i.e.\ the path that stays at $a$ at any index $i$.
|
||||
Here the path space is $P \defeq \lambda\; i \to A$ and it satsifies
|
||||
$P\ i = A$ definitionally. So to inhabit it, is to give a path $\I \to
|
||||
A$ which is judgmentally $a$ at either endpoint. This is satisfied by
|
||||
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
|
||||
construct a path between $f$ and $g$ -- the functions defined in the
|
||||
introduction (section \S\ref{sec:functional-extensionality}). Functional
|
||||
extensionality is the proposition, given a type $A \tp \MCU$, a family of types
|
||||
$B \tp A \to \MCU$ and functions $f, g \tp \prod_{a \tp A} B\ a$:
|
||||
It is also surprisingly easy to show functional extensionality.
|
||||
Functional extensionality is the proposition that given a type $A \tp
|
||||
\MCU$, a family of types $B \tp A \to \MCU$ and functions $f, g \tp
|
||||
\prod_{a \tp A} B\ a$ gives:
|
||||
%
|
||||
\begin{equation}
|
||||
\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}
|
||||
%
|
||||
%% 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
|
||||
g$. That is a function $I \to \prod_{a \tp A} B\ a$. So let $i \tp I$ be given.
|
||||
%% p = λ\; i a → p a i
|
||||
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.
|
||||
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
|
||||
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
|
||||
satisfied the conditions for $\phi$. In conclustion \ref{eq:funExt} is inhabited
|
||||
apply $a$ to $η$ and get the path $η\ a \tp f\ a \equiv g\ a$. And this exactly
|
||||
satisfies the conditions for $\phi$. In conclustion \ref{eq:funExt} is inhabited
|
||||
by the term:
|
||||
%
|
||||
\begin{equation}
|
||||
\label{eq:funExt}
|
||||
\funExt\ p \defeq λ i\ a → p\ a\ i
|
||||
\end{equation}
|
||||
\begin{equation*}
|
||||
\funExt\ η \defeq λ\; i\ a → η\ a\ i
|
||||
\end{equation*}
|
||||
%
|
||||
With this we can now prove the desired equality $f \equiv g$ from section
|
||||
\S\ref{sec:functional-extensionality}:
|
||||
With $\funExt$ in place we can now construct a path between
|
||||
$\var{zeroLeft}$ and $\var{zeroRight}$ -- the functions defined in the
|
||||
introduction \S\ref{sec:functional-extensionality}:
|
||||
%
|
||||
\begin{align*}
|
||||
p & \tp f \equiv g \\
|
||||
p & \defeq \funExt\ \phi
|
||||
p & \tp \var{zeroLeft} \equiv \var{zeroRight} \\
|
||||
p & \defeq \funExt\ \var{zrn}
|
||||
\end{align*}
|
||||
%
|
||||
Here $\phi \tp \prod_{n \tp \bN} \var{zeroLeft}\ n \equiv
|
||||
\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.}
|
||||
Here $\var{zrn}$ is the proof from \ref{eq:zrn}.
|
||||
%
|
||||
\section{Homotopy levels}
|
||||
In ITT all equality proofs are identical (in a closed context). This means that,
|
||||
in some sense, any two inhabitants of $a \equiv b$ are ``equally good'' -- they
|
||||
do not have any interesting structure. This is referred to as Uniqueness of
|
||||
Identity Proofs (UIP). Unfortunately it is not possible to have a type theory
|
||||
with both univalence and UIP. In stead we have a hierarchy of types with an
|
||||
increasing amount of homotopic structure. At the bottom of this hierarchy we
|
||||
have the set of contractible types:
|
||||
In ITT all equality proofs are identical (in a closed context). This
|
||||
means that, in some sense, any two inhabitants of $a \equiv b$ are
|
||||
``equally good''. They do not have any interesting structure. This is
|
||||
referred to as Uniqueness of Identity Proofs (UIP). Unfortunately it
|
||||
is not possible to have a type theory with both univalence and UIP. In
|
||||
stead in cubical Agda we have a hierarchy of types with an increasing
|
||||
amount of homotopic structure. At the bottom of this hierarchy is the
|
||||
set of contractible types:
|
||||
%
|
||||
\begin{equation}
|
||||
\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
|
||||
be thought of as ``the true proposition $A$''. And indeed $\top$ is
|
||||
contractible:
|
||||
%
|
||||
\begin{equation*}
|
||||
\var{tt} , \lambda x \to \refl \tp \isContr\ \top
|
||||
(\var{tt} , \lambda\; x \to \refl) \tp \isContr\ \top
|
||||
\end{equation*}
|
||||
%
|
||||
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:
|
||||
%
|
||||
\begin{align*}
|
||||
λ \var{tt}\ \var{tt} → refl & \tp \isProp\ ⊤ \\
|
||||
λ\varnothing\ \varnothing & \tp \isProp\ ⊥
|
||||
(λ\; \var{tt}, \var{tt} → refl) & \tp \isProp\ ⊤ \\
|
||||
λ\;\varnothing\ \varnothing & \tp \isProp\ ⊥
|
||||
\end{align*}
|
||||
%
|
||||
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.
|
||||
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$.
|
||||
|
||||
Then comes the set of homotopical sets:
|
||||
The next step in the hierarchy is the set of homotopical sets:
|
||||
%
|
||||
\begin{equation}
|
||||
\begin{aligned}
|
||||
|
@ -209,13 +209,14 @@ Then comes the set of homotopical sets:
|
|||
\end{aligned}
|
||||
\end{equation}
|
||||
%
|
||||
I will not give an example of a set at this point. It turns out that proving
|
||||
e.g.\ $\isProp\ \bN$ is not so straight-forward (see \cite[\S3.1.4]{hott-2013}).
|
||||
There will be examples of sets later in this report. At this point it should be
|
||||
noted that the term ``set'' is somewhat conflated; there is the notion of sets
|
||||
from set-theory, in 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.
|
||||
I will not give an example of a set at this point. It turns out that
|
||||
proving e.g.\ $\isProp\ \bN$ directly is not so straightforward (see
|
||||
\cite[\S3.1.4]{hott-2013}). Hedberg's theorem states that any type
|
||||
with decidable equality is a set. There will be examples of sets later
|
||||
in this report. At this point it should be noted that the term ``set''
|
||||
is somewhat conflated; there is the notion of sets from set-theory, in
|
||||
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:
|
||||
%
|
||||
|
@ -239,34 +240,40 @@ exposition:
|
|||
Proposition: Homotopy levels are cumulative. That is, if $A \tp \MCU$ has
|
||||
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$.
|
||||
Proposition: For any homotopic level $n$ this is a mere proposition.
|
||||
For any level $n$ it is the case that to be of level $n$ is a mere proposition.
|
||||
%
|
||||
\section{A few lemmas}
|
||||
Rather than getting into the nitty-gritty details of Agda I venture to
|
||||
take a more ``combinator-based'' approach. That is, I will use
|
||||
theorems about paths already that have already been formalized.
|
||||
take a more ``combinator-based'' approach. That is I will use
|
||||
theorems about paths that have already been formalized.
|
||||
Specifically the results come from the Agda library \texttt{cubical}
|
||||
(\cite{cubical-demo}). I have used a handful of results from this
|
||||
library as well as contributed a few lemmas myself.\footnote{The
|
||||
module \texttt{Cat.Prelude} lists the upstream dependencies. As well
|
||||
my contribution to \texttt{cubical} can be found in the git logs
|
||||
which are available at
|
||||
\hrefsymb{https://github.com/Saizan/cubical-demo}{\texttt{https://github.com/Saizan/cubical-demo}}.}
|
||||
library as well as contributed a few lemmas myself%
|
||||
\footnote{The module \texttt{Cat.Prelude} lists the upstream
|
||||
dependencies. As well my contribution to \texttt{cubical} can be
|
||||
found in the git logs which are available at
|
||||
\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
|
||||
such not specific to the formalization of Category Theory. I will present a few
|
||||
of these theorems here, as they will be used later in chapter
|
||||
\ref{ch:implementation} throughout.
|
||||
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 of these theorems here as they will be used throughout
|
||||
chapter \ref{ch:implementation}. They should also give the reader some
|
||||
intuition about the path type.
|
||||
|
||||
\subsection{Path induction}
|
||||
\label{sec:pathJ}
|
||||
The induction principle for paths intuitively gives us a way to reason about a
|
||||
type family indexed by a path by only considering if said path is $\refl$ (the
|
||||
\nomen{base case}{path induction}). For \emph{based path induction}, that equality is \emph{based}
|
||||
at some element $a \tp A$.
|
||||
The induction principle for paths intuitively gives us a way to reason
|
||||
about a type family indexed by a path by only considering if said path
|
||||
is $\refl$ (the \nomen{base case}{path induction}). For \emph{based
|
||||
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
|
||||
|
@ -283,7 +290,8 @@ We have the function:
|
|||
\begin{equation}
|
||||
\pathJ\ D\ d \tp \prod_{b \tp A} \prod_{p \tp a ≡ b} D\ b\ p
|
||||
\end{equation}
|
||||
%
|
||||
\end{samepage}%
|
||||
|
||||
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
|
||||
between them $p \tp a \equiv b$:
|
||||
|
@ -293,8 +301,8 @@ between them $p \tp a \equiv b$:
|
|||
\var{sym}\ (\var{sym}\ p) ≡ p
|
||||
\end{equation}
|
||||
%
|
||||
The proof will be by induction on $p$ and will be based at $a$. That is, $D$
|
||||
will be the family:
|
||||
The proof will be by induction on $p$ and will be based at $a$. That
|
||||
is $D$ will be the family:
|
||||
%
|
||||
\begin{align*}
|
||||
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
|
||||
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:
|
||||
%
|
||||
\begin{equation}
|
||||
|
@ -351,49 +359,52 @@ conclusion \ref{eq:cum-trans} is inhabited by the term:
|
|||
\pathJ\ T\ t\ d\ r
|
||||
\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}
|
||||
\label{sec:lemPropF}
|
||||
Another very useful combinator is $\lemPropF$:
|
||||
|
||||
To `promote' this to a dependent path we can use another useful combinator;
|
||||
$\lemPropF$. Given a type $A \tp \MCU$ and a type family on $A$; $P \tp A \to
|
||||
\MCU$. Let $\var{propP} \tp \prod_{x \tp A} \isProp\ (P\ x)$ be the proof that
|
||||
$P$ is a mere proposition for all elements of $A$. Furthermore say we have a
|
||||
path between some two elements in $A$; $p \tp a_0 \equiv a_1$ then we can built
|
||||
a heterogeneous path between any two elements of $p_0 \tp P\ a_0$ and $p_1 \tp
|
||||
P\ a_1$:
|
||||
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}
|
||||
\tp \prod_{x \tp A} \isProp\ (D\ x)$ be the proof that $D$ is a mere
|
||||
proposition for all elements of $A$. Furthermore say we have a path
|
||||
between some two elements in $A$; $p \tp a_0 \equiv a_1$ then we can
|
||||
built a heterogeneous path between any two elements of $d_0 \tp
|
||||
D\ a_0$ and $d_1 \tp D\ 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
|
||||
useful result.
|
||||
Note that $d_0$ and $d_1$, though points of the same family, have
|
||||
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
|
||||
$\lemPropF$ can be used to boil this complexity down to showing that the
|
||||
dependent parts of the type are mere propositions. For instance, saw we have a type:
|
||||
$\lemPropF$ can be used to boil this complexity down to showing that
|
||||
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 two elements $t_0, t_1 \tp T$ then this will be a pair of paths:
|
||||
For some proposition $D \tp A \to \MCU$. That is we have $\var{propD}
|
||||
\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*}
|
||||
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*}
|
||||
%
|
||||
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
|
||||
\tp \Path\ (\lambda i \to P\ (p\ i))\ \snd\ t_0 \equiv \snd\ t_1
|
||||
\lemPropF\ \var{propD}\ p
|
||||
\tp \Path\ (\lambda\; i \to D\ (p\ i))\ (\snd\ t_0)\ (\snd\ t_1)
|
||||
$$
|
||||
%
|
||||
\subsection{Functions over propositions}
|
||||
|
@ -407,9 +418,9 @@ $$
|
|||
\subsection{Pairs over propositions}
|
||||
\label{sec:propSig}
|
||||
%
|
||||
$\sum$-types preserve propositionality whenever its first component is a
|
||||
proposition, and its second component is a proposition for all points of in the
|
||||
left type.
|
||||
$\sum$-types preserve propositionality whenever its first component is
|
||||
a proposition, and its second component is a proposition for all
|
||||
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)
|
||||
|
|
|
@ -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
|
||||
provided as a strategy to simplify some otherwise very complicated
|
||||
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
|
||||
can help simplify these goals considerably. The lack of the J-rule has
|
||||
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.
|
||||
|
||||
\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}
|
||||
\label{sec:compiling-cubical-agda}
|
||||
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
|
||||
working on proving the initiality conjecture\TODO{Citation}. He will
|
||||
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}
|
||||
\label{ch:implementation}
|
||||
This implementaiton, including this report, is available as open
|
||||
source software at:
|
||||
The source code for this formalization, including this report, is
|
||||
available as open source software at:
|
||||
%
|
||||
\begin{center}
|
||||
\gitlink
|
||||
|
@ -17,7 +17,7 @@ link\footnote{%
|
|||
\begin{center}
|
||||
\doclink
|
||||
\end{center}
|
||||
This implementation formalizes the following concepts:
|
||||
The concepts formalized in this development are:
|
||||
%
|
||||
\begin{center}
|
||||
\begin{tabular}{ l l }
|
||||
|
@ -41,6 +41,7 @@ Span category & \sourcelink{Cat.Categories.Span} \\
|
|||
\end{tabular}
|
||||
\end{center}
|
||||
%
|
||||
\begin{samepage}
|
||||
Furthermore the following items have been partly formalized:
|
||||
%
|
||||
\begin{center}
|
||||
|
@ -54,70 +55,75 @@ Free category & \sourcelink{Cat.Categories.Free} \\
|
|||
Monoids & \sourcelink{Cat.Category.Monoid} \\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
\end{samepage}%
|
||||
%
|
||||
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
|
||||
demonstrate some of the techniques employed in this formalization and
|
||||
in the interest of brevity I will not detail all the things I have
|
||||
formalized. In stead, I have selected parts of this formalization that
|
||||
formalized. In stead I have selected parts of this formalization that
|
||||
highlight some interesting proof techniques relevant to doing proofs
|
||||
in Cubical Agda. This chapter will focus on the definition of
|
||||
\emph{categories}, \emph{equivalences}, the \emph{opposite category},
|
||||
the \emph{category of sets}, \emph{products}, the \emph{span category}
|
||||
and the two formulations of \emph{monads}.
|
||||
|
||||
One such technique that is pervasive to this formalization is the idea of
|
||||
distinguishing types with more or less homotopical structure. To do this I have
|
||||
followed the following design-principle: I have split concepts up into things
|
||||
that represent ``data'' and ``laws'' about this data. The idea is that we can
|
||||
provide a proof that the laws are mere propositions. As an example a category is
|
||||
defined to have two members: `raw` which is a collection of the data and
|
||||
`isCategory` which asserts some laws about that data.
|
||||
One technique employed throughout this formalization is the idea of
|
||||
distinguishing types with more or less homotopical structure. To do
|
||||
this I have followed the following design-principle: I have split
|
||||
concepts up into things that represent \emph{data} and \emph{laws}
|
||||
about this data. The idea is that we can provide a proof that the laws
|
||||
are mere propositions. As an example a category is defined to have two
|
||||
members: $\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'',
|
||||
where one can reason about two categories by simply focusing on the data. This
|
||||
is achieved by creating a function embodying the ``equality principle'' for a
|
||||
given type.
|
||||
This allows me to reason about things in a more ``standard
|
||||
mathematical way'', where one can reason about two categories by
|
||||
simply focusing on the data. This is achieved by creating a function
|
||||
embodying the equality principle for a given type.
|
||||
|
||||
For the rest of this chapter I will present some of these results. For
|
||||
didactic reasons no source-code has been included in this chapter. To
|
||||
see the formal definitions the reader is referred to the
|
||||
implementation which is linked in \S\ref{ch:implementation}.
|
||||
implementation which is linked in the tables above.
|
||||
|
||||
\section{Categories}
|
||||
\label{sec:categories}
|
||||
The data for a category consist of a type for the sort of objects; a type for
|
||||
the sort of arrows; an identity arrow and a composition operation for arrows.
|
||||
Another record encapsulates some laws about this data: associativity of
|
||||
composition, identity law for the identity morphism. These are standard
|
||||
constituents of a category and can be found in typical mathematical expositions
|
||||
on the topic. We, however, impose one further requirement on what it means to be
|
||||
a category, namely that the type of arrows form a set.
|
||||
The data for a category consist of a type for the sort of objects; a
|
||||
type for the sort of arrows; an identity arrow and a composition
|
||||
operation for arrows. Another record encapsulates some laws about
|
||||
this data: associativity of composition, identity law for the identity
|
||||
morphism. These are standard constituents of a category and can be
|
||||
found in typical mathematical expositions on the topic. We shall
|
||||
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
|
||||
this requirement. This would lead to the notion of higher categories (\cite[p.
|
||||
307]{hott-2013}). For the purpose of this project, however, this report will
|
||||
restrict itself to 1-categories\index{1-category}. Generalizing this work to
|
||||
higher categories would be a very natural possible extension of this work.
|
||||
Such categories are called \nomen{1-categories}{1-category}. It is
|
||||
possible to relax this requirement. This would lead to the notion of
|
||||
higher categories (\cite[p. 307]{hott-2013}). For the purpose of this
|
||||
thesis however, this report will restrict itself to
|
||||
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
|
||||
\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
|
||||
definitions: If we let $p$ be a witness to the identity law, which formally is:
|
||||
%
|
||||
\begin{equation}
|
||||
\label{eq:identity}
|
||||
\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)
|
||||
\end{equation}
|
||||
%
|
||||
Then we can construct the identity isomorphism $\idIso \tp \identity,
|
||||
\identity, p \tp A \approxeq A$ for any object $A$. Here $\approxeq$ denotes
|
||||
isomorphism on objects (whereas $\cong$ denotes isomorphism of types). This will
|
||||
be elaborated further on in sections \S\ref{sec:equiv} and
|
||||
\S\ref{sec:univalence}. Moreover, due to substitution for paths we can construct
|
||||
an isomorphism from \emph{any} path:
|
||||
Then we can construct the identity isomorphism $\idIso \tp (\identity,
|
||||
\identity, p) \tp A \approxeq A$ for any object $A$. Here $\approxeq$
|
||||
denotes isomorphism on objects (whereas $\cong$ denotes isomorphism on
|
||||
types). This will be elaborated further on in sections
|
||||
\S\ref{sec:equiv} and \S\ref{sec:univalence}. Moreover due to
|
||||
substitution for paths we can construct an isomorphism from \emph{any}
|
||||
path:
|
||||
%
|
||||
\begin{equation}
|
||||
\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)
|
||||
\end{equation}
|
||||
%
|
||||
However the two are logically equivalent: One can construct the latter from the
|
||||
former simply by ``forgetting'' that $\idToIso$ plays the role of the
|
||||
equivalence. The other direction is more involved and will be discussed in
|
||||
section \S\ref{sec:univalence}.
|
||||
However the two are logically equivalent: One can construct the latter
|
||||
from the former simply by ``forgetting'' that $\idToIso$ plays the
|
||||
role of the equivalence. The other direction is more involved and will
|
||||
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}
|
||||
\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
|
||||
quantified.
|
||||
|
||||
With all this in place it is now possible to prove that all the laws are indeed
|
||||
mere propositions. Most of the proofs simply use the fact that the type of
|
||||
arrows are sets. This is because most of the laws are a collection of equations
|
||||
between arrows in the category. And since such a proof does not have any content
|
||||
exactly because the type of arrows form a set, two witnesses must be the same.
|
||||
All the proofs are really quite mechanical. Lets have a look at one of them.
|
||||
Proving that \ref{eq:identity} is a mere proposition:
|
||||
With all this in place it is now possible to prove that all the laws
|
||||
are indeed mere propositions. Most of the proofs simply use the fact
|
||||
that the type of arrows are sets. This is because most of the laws are
|
||||
a collection of equations between arrows in the category. And since
|
||||
such a proof does not have any content exactly because the type of
|
||||
arrows form a set, two witnesses must be the same. All the proofs are
|
||||
really quite mechanical. Let us have a look at one of them: Proving
|
||||
that \ref{eq:identity} is a mere proposition:
|
||||
%
|
||||
\begin{equation}
|
||||
\isProp\ \var{IsIdentity}
|
||||
\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
|
||||
\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)
|
||||
\end{align*}
|
||||
%
|
||||
So the proof goes like this: We `eliminate' the 3 function abstractions by
|
||||
applying $\propPi$ three times. So our proof obligation becomes:
|
||||
The proof goes like this: We `eliminate' the 3 function abstractions
|
||||
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)
|
||||
$$
|
||||
%
|
||||
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
|
||||
set.
|
||||
|
||||
This example illustrates nicely how we can use these combinators to reason about
|
||||
`canonical' types like $\sum$ and $\prod$. Similar combinators can be defined at
|
||||
the other homotopic levels. These combinators are however not applicable in
|
||||
situations where we want to reason about other types - e.g.\ types we have
|
||||
defined ourselves. For instance, after we have proven that all the projections
|
||||
of pre categories are propositions, then we would like to bundle this up to show
|
||||
that the type of pre categories is also a proposition. Formally:
|
||||
This example illustrates nicely how we can use these combinators to
|
||||
reason about `canonical' types like $\sum$ and $\prod$. Similar
|
||||
combinators can be defined at the other homotopic levels. These
|
||||
combinators are however not applicable in situations where we want to
|
||||
reason about other types e.g.\ types we have defined ourselves. For
|
||||
instance, after we have proven that all the projections of
|
||||
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}
|
||||
\label{eq:propIsPreCategory}
|
||||
|
@ -235,19 +244,20 @@ Where The definition of $\IsPreCategory$ is the triple:
|
|||
\var{arrowsAreSets} & \tp \var{ArrowsAreSets}
|
||||
\end{align*}
|
||||
%
|
||||
Each corresponding to the first three laws for categories. Note that since
|
||||
$\IsPreCategory$ is not formulated with a chain of sigma-types we wont have any
|
||||
combinators available to help us here. In stead the paths must be used directly.
|
||||
Each corresponding to the first three laws for categories. Note that
|
||||
since $\IsPreCategory$ is not formulated with a chain of sigma-types
|
||||
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
|
||||
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
|
||||
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
|
||||
|
@ -261,8 +271,8 @@ $$
|
|||
a.\isIdentity \equiv b.\isIdentity
|
||||
$$
|
||||
%
|
||||
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$
|
||||
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$
|
||||
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
|
||||
\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.
|
||||
For instance, when we want to show that $\IsCategory$ is a mere
|
||||
proposition. The type $\IsCategory$ is a record with two fields, a
|
||||
witness to being a pre category and the univalence condition. Recall
|
||||
witness to being a pre-category and the univalence condition. Recall
|
||||
that the univalence condition is indexed by the identity-proof. So to
|
||||
follow the same recipe as above, let $a\ b \tp \IsCategory$ be given,
|
||||
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:
|
||||
%
|
||||
$$
|
||||
|
@ -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
|
||||
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 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
|
||||
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
|
||||
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
|
||||
|
@ -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
|
||||
\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
|
||||
that we can prove this category univalent by giving an inverse to
|
||||
$\wideoverbar{\idToIso} \tp (A \equiv B) \to (A \wideoverbar{\approxeq} B)$.
|
||||
|
@ -624,7 +634,7 @@ follows:
|
|||
\wideoverbar{\isoToId} \comp \wideoverbar{\idToIso} & =
|
||||
\isoToId \comp \shufflef \comp \wideoverbar{\idToIso}
|
||||
\\
|
||||
%% ≡⟨ cong (λ φ → φ x) (cong (λ φ → η ⊙ shuffle ⊙ φ) (funExt lem)) ⟩ \\
|
||||
%% ≡⟨ cong (λ \; φ → φ x) (cong (λ \; φ → η ⊙ shuffle ⊙ φ) (funExt lem)) ⟩ \\
|
||||
%
|
||||
& \equiv
|
||||
\isoToId \comp \shufflef \comp \inv{\shufflef} \comp \idToIso
|
||||
|
@ -641,7 +651,7 @@ follows:
|
|||
The other direction is analogous.
|
||||
|
||||
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
|
||||
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$$
|
||||
%
|
||||
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
|
||||
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)$$
|
||||
%
|
||||
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
|
||||
$\var{hA}\;\var{hB} \tp \Set$. In stead I show that this category
|
||||
satisfies:
|
||||
|
@ -956,7 +966,7 @@ underlying category. Given that $p$ is the chosen proof of
|
|||
%
|
||||
\begin{align}
|
||||
\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}
|
||||
%
|
||||
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
|
||||
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}
|
||||
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}
|
||||
\begin{split}
|
||||
p \tp & X \equiv Y \\
|
||||
& \Path\ (λ i → \Arrow\ (p\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
||||
& \Path\ (λ i → \Arrow\ (p\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||
& \Path\ (λ \; i → \Arrow\ (p\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
||||
& \Path\ (λ \; i → \Arrow\ (p\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||
\end{split}
|
||||
%% \end{split}
|
||||
\end{align}
|
||||
|
@ -1045,8 +1055,8 @@ isomorphism, and create a path from this:
|
|||
\label{eq:univ-2}
|
||||
\begin{split}
|
||||
\var{iso} \tp & X \approxeq Y \\
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||
& \Path\ (λ \; i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
||||
& \Path\ (λ \; i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||
\end{split}
|
||||
\end{align}
|
||||
%
|
||||
|
@ -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
|
||||
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
|
||||
\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
|
||||
\Arrow\ B\ X$ is a path induced by $\var{iso}$, we have the following two
|
||||
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
|
||||
%
|
||||
\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*}
|
||||
%
|
||||
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{split}
|
||||
\label{eq:product-paths}
|
||||
& \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{A}}\ i)\ x_{\mathcal{A}}\ y_{\mathcal{A}}\\
|
||||
& \Path\ (λ \; i → \widetilde{p}_{\mathcal{B}}\ i)\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||
\end{split}
|
||||
\end{align}
|
||||
%
|
||||
|
@ -1172,7 +1182,7 @@ This is achieved with the following lemma:
|
|||
%
|
||||
\begin{align}
|
||||
\prod_{a \tp A} \prod_{b \tp B} \prod_{q \tp A \equiv B} \var{coe}\ q\ a ≡ b →
|
||||
\Path\ (λ i → q\ i)\ a\ b
|
||||
\Path\ (λ \; i → q\ i)\ a\ b
|
||||
\end{align}
|
||||
%
|
||||
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
|
||||
gory details.
|
||||
%
|
||||
\subsection{Propositionality of products}
|
||||
\subsection{Products are propositions}
|
||||
%
|
||||
Now that we have constructed the span category\index{span category} I
|
||||
will demonstrate how to use this to prove that products are
|
||||
propositional. I will do this by showing that terminal objects in this
|
||||
category are equivalent to products:
|
||||
propositions. On the face of it this may seem surprising. 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}
|
||||
\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:
|
||||
%
|
||||
\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_ℬ \\
|
||||
& \Path\ (\lambda i \to \Phi\ (p\ i))\quad
|
||||
& \Path\ (\lambda\; i \to \Phi\ (p\ i))\quad
|
||||
&& \phi_f\quad && \phi_{y_𝒜 \x y_ℬ}
|
||||
\end{alignat}
|
||||
%
|
||||
|
@ -1283,7 +1298,7 @@ preserve homotopic levels along with \ref{eq:termProp} we get our final result.
|
|||
That in any category:
|
||||
%
|
||||
\begin{align}
|
||||
\prod_{A\ B \tp \Object} \isProp\ (\var{Product}\ \bC\ A\ B)
|
||||
\prod_{A, B \tp \Object} \isProp\ (\var{Product}\ \bC\ A\ B)
|
||||
\end{align}
|
||||
%
|
||||
\section{Functors and natural transformations}
|
||||
|
|
|
@ -6,22 +6,27 @@ of equality: \nomenindex{judgmental equality} and
|
|||
\nomenindex{propositional equality}. Judgmental equality is a property
|
||||
of the type system. Judgmental equality on the other hand is usually
|
||||
defined \emph{within} the system. When introducing definitions this
|
||||
report will use the notation $\defeq$. Judgmental equalities written
|
||||
$=$. For propositional equalities the notation $\equiv$ is used.
|
||||
report will use the symbol $\defeq$. Judgmental equalities will be
|
||||
denoted with $=$ and for propositional equalities the notation
|
||||
$\equiv$ is used.
|
||||
|
||||
For judgmental equality there are some properties that it must
|
||||
satisfy. \nomenindex{sound}, enjoy \nomenindex{canonicity} and be a
|
||||
\nomen{congruence relation}. Soundness means that things judged to be
|
||||
equal are equal with respects to the model of the theory (the meta
|
||||
theory). 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 \equiv y \rightarrow f\ x
|
||||
\nequiv f\ y$. 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.
|
||||
The rules of judgmental equality are related with $β$- and
|
||||
$η$-reduction which gives a notion of computation in a given type
|
||||
theory.
|
||||
%
|
||||
There are some properties that one usually want judgmental equality to
|
||||
satisfy. It must be \nomenindex{sound}, enjoy \nomenindex{canonicity}
|
||||
and be a \nomenindex{congruence relation}. Soundness means that things
|
||||
judged to be equal are equal with respects to the \nomenindex{model}
|
||||
of the theory or the \emph{meta theory}. 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
|
||||
\equiv y \rightarrow f\ x \nequiv f\ y$. 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.
|
||||
|
||||
To work as a programming languages it is necessary for judgmental
|
||||
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}).
|
||||
|
||||
There are two flavors of type-theory. \emph{Intensional-} and
|
||||
\emph{extensional-} type theory. Identity types in extensional type
|
||||
theory are required to be \nomen{propositions}{proposition}. That is,
|
||||
a type with at most one inhabitant. In extensional type thoery the
|
||||
principle of reflection
|
||||
\emph{extensional-} type theory (ITT and ETT respectively). Identity
|
||||
types in extensional type theory are required to be
|
||||
\nomen{propositions}{proposition}. That is, a type with at most one
|
||||
inhabitant. In extensional type theory the principle of reflection
|
||||
%
|
||||
$$a ≡ b → a = b$$
|
||||
%
|
||||
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
|
||||
theory. Pattern-matching in regular Agda let's one prove
|
||||
\nomenindex{axiom K}. Axiom K states that any two identity proofs are
|
||||
propositionally identical.
|
||||
Agda which at a glance can be thought of as a version of intensional
|
||||
type theory. Pattern-matching in regular Agda lets one prove
|
||||
\nomenindex{Uniqueness of Identity Proofs} (UIP). UIP states that any
|
||||
two identity proofs are propositionally identical.
|
||||
|
||||
The usual notion of propositional equality in \nomenindex{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. The
|
||||
extension is called cubical Agda. Cubical Agda drops Axiom K as this
|
||||
does not permit \nomenindex{functional extensionality} and
|
||||
The usual notion of propositional equality in 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. The extension is called cubical
|
||||
Agda. Cubical Agda drops UIP as this does not permit
|
||||
\nomenindex{functional extensionality} and
|
||||
\nomenindex{univalence}. What makes this extension particularly
|
||||
interesting is that it gives a \emph{constructive} interpretation of
|
||||
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}%
|
||||
Consider the functions:
|
||||
%
|
||||
\begin{multicols}{2}
|
||||
\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}%
|
||||
\begin{align*}%
|
||||
\var{zeroLeft} & \defeq \lambda\; (n \tp \bN) \to (0 + n \tp \bN) \\
|
||||
\var{zeroRight} & \defeq \lambda\; (n \tp \bN) \to (n + 0 \tp \bN)
|
||||
\end{align*}%
|
||||
%
|
||||
The term $n + 0$ is
|
||||
\nomenindex{definitionally} equal to $n$, which we
|
||||
write as $n + 0 = n$. This is also called
|
||||
\nomenindex{judgmental equality}.
|
||||
We call it definitional equality because the \emph{equality} arises
|
||||
from the \emph{definition} of $+$ which is:
|
||||
The term $n + 0$ is \nomenindex{definitionally} equal to $n$, which we
|
||||
write as $n + 0 = n$. This is also called \nomenindex{judgmental
|
||||
equality}. We call it definitional equality because the
|
||||
\emph{equality} arises from the \emph{definition} of $+$ which is:
|
||||
%
|
||||
\begin{align*}
|
||||
+ & \tp \bN \to \bN \to \bN \\
|
||||
n + 0 & \defeq n \\
|
||||
+ & \tp \bN \to \bN \to \bN \\
|
||||
n + 0 & \defeq n \\
|
||||
n + (\suc{m}) & \defeq \suc{(n + m)}
|
||||
\end{align*}
|
||||
%
|
||||
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
|
||||
relation we have that $n + 0 \equiv 0 + n$.
|
||||
|
||||
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.
|
||||
Note that $0 + n$ is \emph{not} definitionally equal to $n$. This is
|
||||
because $0 + n$ is in normal form. I.e.\ there is no rule for $+$
|
||||
whose left hand side matches this expression. We do however have that
|
||||
they are \nomen{propositionally}{propositional equality} equal, which
|
||||
we write as $n \equiv n + 0$. Propositional equality means that there
|
||||
is a proof that exhibits this relation. We can do induction over $n$
|
||||
to prove this:
|
||||
%
|
||||
\begin{align}
|
||||
\label{eq:zrn}
|
||||
\begin{split}
|
||||
\var{zrn}\ & \tp ∀ n → n ≡ \var{zeroRight}\ n \\
|
||||
\var{zrn}\ \var{zero} & \defeq \var{refl} \\
|
||||
\var{zrn}\ (\var{suc}\ n) & \defeq \var{cong}\ \var{suc}\ (\var{zrn}\ n)
|
||||
\end{split}
|
||||
\end{align}
|
||||
%
|
||||
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
|
||||
\var{zeroLeft}\ n \equiv \var{zeroRight}\ n$. Unfortunately we don't
|
||||
have $\var{zeroLeft} \equiv \var{zeroRight}$. There is no way to
|
||||
construct a proof asserting the obvious equivalence of
|
||||
$\var{zeroLeft}$ and $\var{zeroRight}$. 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
|
||||
$\var{zeroLeft} \equiv \var{zeroRight}$ 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{pointwise equality}, where
|
||||
the \emph{points} of a function refer to its arguments.
|
||||
%
|
||||
\subsection{Equality of isomorphic types}
|
||||
%
|
||||
|
@ -155,7 +139,6 @@ without thinking twice. Unfortunately such an identification can not
|
|||
be performed in ITT.
|
||||
|
||||
More specifically what we are interested in is a way of identifying
|
||||
|
||||
\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.
|
||||
|
@ -165,27 +148,30 @@ The principle of univalence says that:
|
|||
$$\mathit{univalence} \tp (A \simeq B) \simeq (A \equiv B)$$
|
||||
%
|
||||
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}
|
||||
%
|
||||
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
|
||||
(abstract) algebras of functions'' (\cite{awodey-2006}). By that token
|
||||
functional extensionality is particularly useful for formulating Category
|
||||
Theory. In Category theory it is also common to identify isomorphic structures
|
||||
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
|
||||
\emph{categories} themselves to be univalent as we shall see.
|
||||
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 (abstract) algebras of functions''
|
||||
(\cite{awodey-2006}). By that token functional extensionality is
|
||||
particularly useful for formulating Category Theory. In Category
|
||||
theory it is also commonplace to identify isomorphic structures 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 \emph{categories} themselves to be univalent as we shall
|
||||
see in \S\ref{sec:univalence}.
|
||||
|
||||
\section{Context}
|
||||
\label{sec:context}
|
||||
%
|
||||
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
|
||||
question on Math Overflow: \cite{mo-formalizations}. Notably these
|
||||
implementations of category theory in Agda:
|
||||
are a multitude of these available online. Notably:
|
||||
%
|
||||
\begin{itemize}
|
||||
\item
|
||||
|
@ -217,12 +203,12 @@ other shortcomings, e.g. you lose \nomenindex{canonicity}
|
|||
|
||||
Another approach is to use the \emph{setoid interpretation} of type
|
||||
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
|
||||
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 a priori. So this must be verified manually by the developer.
|
||||
gets to pick this relation it is not a\~priori a congruence
|
||||
relation. So this must be verified manually by the developer.
|
||||
Furthermore, functions between different setoids must be shown to be
|
||||
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}).
|
||||
|
||||
\section{Conventions}
|
||||
In the remainder of this paper I will use the term
|
||||
\nomenindex{Type} to describe --
|
||||
well, types. Thereby diverging from the notation in Agda where the keyword
|
||||
\texttt{Set} refers to types.
|
||||
\nomenindex{Set} on the other hand shall refer to the
|
||||
homotopical notion of a set. I will also leave all universe levels implicit.
|
||||
In the remainder of this paper I will use the term \nomenindex{Type}
|
||||
to describe -- well -- types. Thereby departing from the notation in
|
||||
Agda where the keyword \texttt{Set} refers to types. \nomenindex{Set}
|
||||
on the other hand shall refer to the homotopical notion of a set. I
|
||||
will also leave all universe levels implicit. This of course does not
|
||||
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
|
||||
\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.
|
||||
functions in Agda.
|
||||
|
||||
$\defeq$ will be used for introducing definitions. $=$ will be used to for
|
||||
judgmental equality and $\equiv$ will be used for propositional equality.
|
||||
As already noted $\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{samepage}
|
||||
\begin{center}
|
||||
\begin{tabular}{ c c c }
|
||||
Name & Agda & Notation \\
|
||||
|
@ -277,3 +267,4 @@ Judgmental equality & \null & $̱=$ \\
|
|||
Propositional equality & \null & $̱\equiv$
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
\end{samepage}
|
||||
|
|
|
@ -127,3 +127,4 @@
|
|||
\newcommand\coe{\varindex{coe}}
|
||||
\newcommand\Monoidal{\varindex{Monoidal}}
|
||||
\newcommand\Kleisli{\varindex{Kleisli}}
|
||||
\newcommand\I{\mathds{I}}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
\documentclass[a4paper]{report}
|
||||
%% \documentclass[tightpage]{preview}
|
||||
%% \documentclass[compact,a4paper]{article}
|
||||
|
||||
\input{packages.tex}
|
||||
|
@ -49,6 +50,7 @@
|
|||
\myfrontmatter
|
||||
\maketitle
|
||||
\input{abstract.tex}
|
||||
\input{acknowledgements.tex}
|
||||
\tableofcontents
|
||||
\mainmatter
|
||||
%
|
||||
|
|
|
@ -16,13 +16,14 @@
|
|||
%% \hypersetup{allbordercolors={darkorange}}
|
||||
\hypersetup{hidelinks}
|
||||
\usepackage{graphicx}
|
||||
%% \usepackage[active,tightpage]{preview}
|
||||
|
||||
\usepackage{parskip}
|
||||
\usepackage{multicol}
|
||||
\usepackage{amssymb,amsmath,amsthm,stmaryrd,mathrsfs,wasysym}
|
||||
\usepackage[toc,page]{appendix}
|
||||
\usepackage{xspace}
|
||||
\usepackage[a4paper,top=3cm,bottom=3cm]{geometry}
|
||||
\usepackage[paper=a4paper,top=3cm,bottom=3cm]{geometry}
|
||||
\usepackage{makeidx}
|
||||
\makeindex
|
||||
% \setlength{\parskip}{10pt}
|
||||
|
@ -83,7 +84,7 @@
|
|||
\newunicodechar{∨}{\textfallback{∨}}
|
||||
\newunicodechar{∧}{\textfallback{∧}}
|
||||
\newunicodechar{⊔}{\textfallback{⊔}}
|
||||
\newunicodechar{≊}{\textfallback{≊}}
|
||||
%% \newunicodechar{≊}{\textfallback{≊}}
|
||||
\newunicodechar{∈}{\textfallback{∈}}
|
||||
\newunicodechar{ℂ}{\textfallback{ℂ}}
|
||||
\newunicodechar{∘}{\textfallback{∘}}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
\documentclass[a4paper,handout]{beamer}
|
||||
\usetheme{metropolis}
|
||||
\beamertemplatenavigationsymbolsempty
|
||||
%% \usecolortheme[named=seagull]{structure}
|
||||
|
||||
|
@ -21,28 +22,28 @@
|
|||
\framesubtitle{Functional extensionality}
|
||||
Consider the functions
|
||||
\begin{align*}
|
||||
\var{zeroLeft} & \defeq \lambda (n \tp \bN) \mto (0 + n \tp \bN) \\
|
||||
\var{zeroRight} & \defeq \lambda (n \tp \bN) \mto (n + 0 \tp \bN)
|
||||
\var{zeroLeft} & ≜ \lambda (n \tp \bN) \mto (0 + n \tp \bN) \\
|
||||
\var{zeroRight} & ≜ \lambda (n \tp \bN) \mto (n + 0 \tp \bN)
|
||||
\end{align*}
|
||||
\pause
|
||||
We have
|
||||
%
|
||||
$$
|
||||
\prod_{n \tp \bN} \var{zeroLeft}\ n \equiv \var{zeroRight}\ n
|
||||
∏_{n \tp \bN} \var{zeroLeft}\ n ≡ \var{zeroRight}\ n
|
||||
$$
|
||||
%
|
||||
\pause
|
||||
But not
|
||||
%
|
||||
$$
|
||||
\var{zeroLeft} \equiv \var{zeroRight}
|
||||
\var{zeroLeft} ≡ \var{zeroRight}
|
||||
$$
|
||||
%
|
||||
\pause
|
||||
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}
|
||||
\begin{frame}
|
||||
|
@ -52,20 +53,20 @@
|
|||
$\{x \mid \phi\ x \land \psi\ x\}$
|
||||
\pause
|
||||
|
||||
If we show $\forall x . \psi\ x \equiv \top$
|
||||
If we show $∀ x . \psi\ x ≡ \top$
|
||||
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
|
||||
|
||||
We need univalence:
|
||||
$$(A \simeq B) \simeq (A \equiv B)$$
|
||||
$$(A ≃ B) ≃ (A ≡ B)$$
|
||||
\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:
|
||||
\begin{align*}
|
||||
\var{toPath} & \tp (A \simeq B) \to (A \equiv B) \\
|
||||
\var{toEquiv} & \tp (A \equiv B) \to (A \simeq B)
|
||||
\var{toPath} & \tp (A ≃ B) → (A ≡ B) \\
|
||||
\var{toEquiv} & \tp (A ≡ B) → (A ≃ B)
|
||||
\end{align*}
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
|
@ -76,11 +77,11 @@
|
|||
\Path \tp (P \tp I → \MCU) → P\ 0 → P\ 1 → \MCU
|
||||
\end{equation*}
|
||||
\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
|
||||
%
|
||||
$$
|
||||
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$
|
||||
|
@ -88,46 +89,46 @@
|
|||
|
||||
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}
|
||||
\begin{frame}
|
||||
\frametitle{Paths}
|
||||
\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
|
||||
$$
|
||||
\funExt\ p \defeq λ i\ a → p\ a\ i
|
||||
\funExt\ p ≜ λ i\ a → p\ a\ i
|
||||
$$
|
||||
\pause
|
||||
$$
|
||||
\funExt\ (\var{const}\ \refl)
|
||||
\tp
|
||||
\var{zeroLeft} \equiv \var{zeroRight}
|
||||
\var{zeroLeft} ≡ \var{zeroRight}
|
||||
$$
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
\frametitle{Paths}
|
||||
\framesubtitle{Homotopy levels}
|
||||
\begin{align*}
|
||||
& \isContr && \tp \MCU \to \MCU \\
|
||||
& \isContr\ A && \defeq \sum_{c \tp A} \prod_{a \tp A} a \equiv c
|
||||
& \isContr && \tp \MCU → \MCU \\
|
||||
& \isContr\ A && ≜ ∑_{c \tp A} ∏_{a \tp A} a ≡ c
|
||||
\end{align*}
|
||||
\pause
|
||||
\begin{align*}
|
||||
& \isProp && \tp \MCU \to \MCU \\
|
||||
& \isProp\ A && \defeq \prod_{a_0, a_1 \tp A} a_0 \equiv a_1
|
||||
& \isProp && \tp \MCU → \MCU \\
|
||||
& \isProp\ A && ≜ ∏_{a_0, a_1 \tp A} a_0 ≡ a_1
|
||||
\end{align*}
|
||||
\pause
|
||||
\begin{align*}
|
||||
& \isSet && \tp \MCU \to \MCU \\
|
||||
& \isSet\ A && \defeq \prod_{a_0, a_1 \tp A} \isProp\ (a_0 \equiv a_1)
|
||||
& \isSet && \tp \MCU → \MCU \\
|
||||
& \isSet\ A && ≜ ∏_{a_0, a_1 \tp A} \isProp\ (a_0 ≡ a_1)
|
||||
\end{align*}
|
||||
\begin{align*}
|
||||
& \isGroupoid && \tp \MCU \to \MCU \\
|
||||
& \isGroupoid\ A && \defeq \prod_{a_0, a_1 \tp A} \isSet\ (a_0 \equiv a_1)
|
||||
& \isGroupoid && \tp \MCU → \MCU \\
|
||||
& \isGroupoid\ A && ≜ ∏_{a_0, a_1 \tp A} \isSet\ (a_0 ≡ a_1)
|
||||
\end{align*}
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
|
@ -135,7 +136,7 @@
|
|||
\framesubtitle{A few lemmas}
|
||||
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
|
||||
|
@ -149,7 +150,7 @@
|
|||
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}
|
||||
\begin{frame}
|
||||
|
@ -158,9 +159,9 @@
|
|||
Given
|
||||
\begin{align*}
|
||||
A & \tp \MCU \\
|
||||
P & \tp A \to \MCU \\
|
||||
\var{propP} & \tp \prod_{x \tp A} \isProp\ (P\ x) \\
|
||||
p & \tp a_0 \equiv a_1 \\
|
||||
P & \tp A → \MCU \\
|
||||
\var{propP} & \tp ∏_{x \tp A} \isProp\ (P\ x) \\
|
||||
p & \tp a_0 ≡ a_1 \\
|
||||
p_0 & \tp P\ a_0 \\
|
||||
p_1 & \tp P\ a_1
|
||||
\end{align*}
|
||||
|
@ -176,17 +177,17 @@
|
|||
\begin{frame}
|
||||
\frametitle{Paths}
|
||||
\framesubtitle{A few lemmas}
|
||||
$\prod$ preserves $\isProp$:
|
||||
$∏$ preserves $\isProp$:
|
||||
$$
|
||||
\mathit{propPi}
|
||||
\tp
|
||||
\left(\prod_{a \tp A} \isProp\ (P\ a)\right)
|
||||
\to \isProp\ \left(\prod_{a \tp A} P\ a\right)
|
||||
\left(∏_{a \tp A} \isProp\ (P\ a)\right)
|
||||
→ \isProp\ \left(∏_{a \tp A} P\ a\right)
|
||||
$$
|
||||
\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}
|
||||
\begin{frame}
|
||||
|
@ -195,9 +196,9 @@
|
|||
Data:
|
||||
\begin{align*}
|
||||
\Object & \tp \Type \\
|
||||
\Arrow & \tp \Object \to \Object \to \Type \\
|
||||
\Arrow & \tp \Object → \Object → \Type \\
|
||||
\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*}
|
||||
%
|
||||
\pause
|
||||
|
@ -208,7 +209,7 @@
|
|||
$$
|
||||
$$
|
||||
(\identity \lll f ≡ f)
|
||||
\x
|
||||
×
|
||||
(f \lll \identity ≡ f)
|
||||
$$
|
||||
\pause
|
||||
|
@ -221,7 +222,7 @@
|
|||
\frametitle{Pre categories}
|
||||
\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
|
||||
\begin{align*}
|
||||
|
@ -247,14 +248,17 @@
|
|||
\frametitle{Categories}
|
||||
\framesubtitle{Univalence}
|
||||
\begin{align*}
|
||||
\var{IsIdentity} & \defeq
|
||||
\prod_{A\ B \tp \Object} \prod_{f \tp \Arrow\ A\ B} \phi\ f
|
||||
\var{IsIdentity} & ≜
|
||||
∏_{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*}
|
||||
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
|
||||
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:
|
||||
%
|
||||
$$
|
||||
\isEquiv\ (A \equiv B)\ (A \approxeq B)\ \idToIso
|
||||
\isEquiv\ (A ≡ B)\ (A \approxeq B)\ \idToIso
|
||||
$$
|
||||
%
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
\frametitle{Categories}
|
||||
\framesubtitle{Univalence, cont'd}
|
||||
$$\isEquiv\ (A \equiv B)\ (A \approxeq B)\ \idToIso$$
|
||||
$$\isEquiv\ (A ≡ B)\ (A \approxeq B)\ \idToIso$$
|
||||
\pause%
|
||||
$$(A \equiv B) \simeq (A \approxeq B)$$
|
||||
$$(A ≡ B) ≃ (A \approxeq B)$$
|
||||
\pause%
|
||||
$$(A \equiv B) \cong (A \approxeq B)$$
|
||||
$$(A ≡ B) ≅ (A \approxeq B)$$
|
||||
\pause%
|
||||
Name the above maps:
|
||||
$$\idToIso \tp A ≡ B → A ≊ B$$
|
||||
%
|
||||
$$\isoToId \tp (A \approxeq B) \to (A \equiv B)$$
|
||||
$$\isoToId \tp (A \approxeq B) → (A ≡ B)$$
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
\frametitle{Categories}
|
||||
\framesubtitle{Propositionality}
|
||||
$$
|
||||
\isProp\ \IsCategory = \prod_{a, b \tp \IsCategory} a \equiv b
|
||||
\isProp\ \IsCategory = ∏_{a, b \tp \IsCategory} a ≡ b
|
||||
$$
|
||||
\pause
|
||||
So, for
|
||||
|
@ -303,8 +307,8 @@
|
|||
the proof obligation is the pair:
|
||||
%
|
||||
\begin{align*}
|
||||
p & \tp a.\isPreCategory \equiv b.\isPreCategory \\
|
||||
& \mathrel{\ } \Path\ (\lambda\; i \to (p\ i).Univalent)\ a.\isPreCategory\ b.\isPreCategory
|
||||
p & \tp a.\isPreCategory ≡ b.\isPreCategory \\
|
||||
& \mathrel{\ } \Path\ (\lambda\; i → (p\ i).Univalent)\ a.\isPreCategory\ b.\isPreCategory
|
||||
\end{align*}
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
|
@ -313,17 +317,17 @@
|
|||
First path given by:
|
||||
$$
|
||||
p
|
||||
\defeq
|
||||
≜
|
||||
\var{propIsPreCategory}\ a\ b
|
||||
\tp
|
||||
a.\isPreCategory \equiv b.\isPreCategory
|
||||
a.\isPreCategory ≡ b.\isPreCategory
|
||||
$$
|
||||
\pause
|
||||
Use $\lemPropF$ for the latter.
|
||||
\pause
|
||||
%
|
||||
Univalence is indexed by an identity proof. So $A \defeq
|
||||
IsIdentity\ identity$ and $B \defeq \var{Univalent}$.
|
||||
Univalence is indexed by an identity proof. So $A ≜
|
||||
IsIdentity\ identity$ and $B ≜ \var{Univalent}$.
|
||||
\pause
|
||||
%
|
||||
$$
|
||||
|
@ -342,16 +346,16 @@
|
|||
The isomorphism induces the path
|
||||
%
|
||||
$$
|
||||
p \defeq \idToIso\ (\iota, \inv{\iota}) \tp A \equiv B
|
||||
p ≜ \idToIso\ (\iota, \inv{\iota}) \tp A ≡ B
|
||||
$$
|
||||
%
|
||||
\pause
|
||||
and consequently an arrow:
|
||||
%
|
||||
$$
|
||||
p_{\var{dom}} \defeq \congruence\ (λ x → \Arrow\ x\ X)\ p
|
||||
p_{\var{dom}} ≜ \congruence\ (λ x → \Arrow\ x\ X)\ p
|
||||
\tp
|
||||
\Arrow\ A\ X \equiv \Arrow\ B\ X
|
||||
\Arrow\ A\ X ≡ \Arrow\ B\ X
|
||||
$$
|
||||
%
|
||||
\pause
|
||||
|
@ -360,8 +364,8 @@
|
|||
\begin{align}
|
||||
\label{eq:coeDom}
|
||||
\tag{$\var{coeDom}$}
|
||||
\prod_{f \tp A \to X}
|
||||
\var{coe}\ p_{\var{dom}}\ f \equiv f \lll \inv{\iota}
|
||||
∏_{f \tp A → X}
|
||||
\var{coe}\ p_{\var{dom}}\ f ≡ f \lll \inv{\iota}
|
||||
\end{align}
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
|
@ -369,23 +373,23 @@
|
|||
\framesubtitle{A theorem, proof}
|
||||
\begin{align*}
|
||||
\var{coe}\ p_{\var{dom}}\ f
|
||||
& \equiv f \lll \inv{(\idToIso\ p)} && \text{By path-induction} \\
|
||||
& \equiv f \lll \inv{\iota}
|
||||
& ≡ f \lll \inv{(\idToIso\ p)} && \text{By path-induction} \\
|
||||
& ≡ f \lll \inv{\iota}
|
||||
&& \text{$\idToIso$ and $\isoToId$ are inverses}\\
|
||||
\end{align*}
|
||||
\pause
|
||||
%
|
||||
Induction will be based at $A$. Let $\widetilde{B}$ and $\widetilde{p}
|
||||
\tp A \equiv \widetilde{B}$ be given.
|
||||
\tp A ≡ \widetilde{B}$ be given.
|
||||
%
|
||||
\pause
|
||||
%
|
||||
Define the family:
|
||||
%
|
||||
$$
|
||||
D\ \widetilde{B}\ \widetilde{p} \defeq
|
||||
D\ \widetilde{B}\ \widetilde{p} ≜
|
||||
\var{coe}\ \widetilde{p}_{\var{dom}}\ f
|
||||
\equiv
|
||||
≡
|
||||
f \lll \inv{(\idToIso\ \widetilde{p})}
|
||||
$$
|
||||
\pause
|
||||
|
@ -393,7 +397,7 @@
|
|||
The base-case becomes:
|
||||
$$
|
||||
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}
|
||||
\begin{frame}
|
||||
|
@ -401,17 +405,17 @@
|
|||
\framesubtitle{A theorem, proof, cont'd}
|
||||
$$
|
||||
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
|
||||
\begin{align*}
|
||||
\var{coe}\ \refl^*\ f
|
||||
& \equiv f
|
||||
& ≡ f
|
||||
&& \text{$\refl$ is a neutral element for $\var{coe}$}\\
|
||||
& \equiv f \lll \identity \\
|
||||
& \equiv f \lll \var{subst}\ \refl\ \identity
|
||||
& ≡ f \lll \identity \\
|
||||
& ≡ f \lll \var{subst}\ \refl\ \identity
|
||||
&& \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$}\\
|
||||
\end{align*}
|
||||
\pause
|
||||
|
@ -429,7 +433,7 @@
|
|||
\pause
|
||||
Objects:
|
||||
$$
|
||||
\sum_{X \tp Object} \Arrow\ X\ \pairA × \Arrow\ X\ \pairB
|
||||
∑_{X \tp Object} \Arrow\ X\ \pairA × \Arrow\ X\ \pairB
|
||||
$$
|
||||
\pause
|
||||
%
|
||||
|
@ -437,9 +441,9 @@
|
|||
$B ,\ b_{\pairA} ,\ b_{\pairB}$:
|
||||
%
|
||||
$$
|
||||
\sum_{f \tp \Arrow\ A\ B}
|
||||
b_{\pairA} \lll f \equiv a_{\pairA} \x
|
||||
b_{\pairB} \lll f \equiv a_{\pairB}
|
||||
∑_{f \tp \Arrow\ A\ B}
|
||||
b_{\pairA} \lll f ≡ a_{\pairA} ×
|
||||
b_{\pairB} \lll f ≡ a_{\pairB}
|
||||
$$
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
|
@ -447,25 +451,25 @@
|
|||
\framesubtitle{Univalence}
|
||||
\begin{align*}
|
||||
\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*}
|
||||
\begin{align*}
|
||||
\label{eq:univ-1}
|
||||
\begin{split}
|
||||
p \tp & X \equiv Y \\
|
||||
& \Path\ (λ i → \Arrow\ (p\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
||||
& \Path\ (λ i → \Arrow\ (p\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||
p \tp & X ≡ Y \\
|
||||
& \Path\ (λ i → \Arrow\ (p\ i)\ 𝒜)\ x_{𝒜}\ y_{𝒜} \\
|
||||
& \Path\ (λ i → \Arrow\ (p\ i)\ ℬ)\ x_{ℬ}\ y_{ℬ}
|
||||
\end{split}
|
||||
\end{align*}
|
||||
\begin{align*}
|
||||
\begin{split}
|
||||
\var{iso} \tp & X \approxeq Y \\
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ 𝒜)\ x_{𝒜}\ y_{𝒜} \\
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ ℬ)\ x_{ℬ}\ y_{ℬ}
|
||||
\end{split}
|
||||
\end{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{frame}
|
||||
\begin{frame}
|
||||
|
@ -475,12 +479,12 @@
|
|||
\begin{align*}
|
||||
%% (f, \inv{f}, \var{inv}_f, \var{inv}_{\inv{f}})
|
||||
%% \tp
|
||||
(X, x_{\mathcal{A}}, x_{\mathcal{B}}) \approxeq (Y, y_{\mathcal{A}}, y_{\mathcal{B}})
|
||||
(X, x_{𝒜}, x_{ℬ}) \approxeq (Y, y_{𝒜}, y_{ℬ})
|
||||
\to
|
||||
\begin{split}
|
||||
\var{iso} \tp & X \approxeq Y \\
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{A})\ x_{\mathcal{A}}\ y_{\mathcal{A}} \\
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ \mathcal{B})\ x_{\mathcal{B}}\ y_{\mathcal{B}}
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ 𝒜)\ x_{𝒜}\ y_{𝒜} \\
|
||||
& \Path\ (λ i → \Arrow\ (\widetilde{p}\ i)\ ℬ)\ x_{ℬ}\ y_{ℬ}
|
||||
\end{split}
|
||||
\end{align*}
|
||||
\pause
|
||||
|
@ -503,8 +507,8 @@
|
|||
%
|
||||
\begin{align*}
|
||||
\begin{split}
|
||||
\widetilde{p} & \tp X \equiv Y \\
|
||||
\widetilde{p}_{\mathcal{A}} & \tp \Arrow\ X\ \mathcal{A} \equiv \Arrow\ Y\ \mathcal{A} \\
|
||||
\widetilde{p} & \tp X ≡ Y \\
|
||||
\widetilde{p}_{𝒜} & \tp \Arrow\ X\ 𝒜 ≡ \Arrow\ Y\ 𝒜 \\
|
||||
\end{split}
|
||||
\end{align*}
|
||||
%
|
||||
|
@ -517,7 +521,7 @@
|
|||
\begin{align*}
|
||||
\begin{split}
|
||||
\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{align*}
|
||||
\pause
|
||||
|
@ -525,9 +529,9 @@
|
|||
This is achieved with the following lemma:
|
||||
%
|
||||
\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*}
|
||||
%
|
||||
Which is used without proof.\pause
|
||||
|
@ -535,15 +539,15 @@
|
|||
So the construction reduces to:
|
||||
%
|
||||
\begin{align*}
|
||||
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}} ≡ y_{\mathcal{A}}
|
||||
\var{coe}\ \widetilde{p}_{𝒜}\ x_{𝒜} ≡ y_{𝒜}
|
||||
\end{align*}%
|
||||
\pause%
|
||||
This is proven with:
|
||||
%
|
||||
\begin{align*}
|
||||
\var{coe}\ \widetilde{p}_{\mathcal{A}}\ x_{\mathcal{A}}
|
||||
& ≡ x_{\mathcal{A}} \lll \fst\ \inv{f} && \text{\ref{eq:coeDom}} \\
|
||||
& ≡ y_{\mathcal{A}} && \text{Property of span category}
|
||||
\var{coe}\ \widetilde{p}_{𝒜}\ x_{𝒜}
|
||||
& ≡ x_{𝒜} \lll \fst\ \inv{f} && \text{\ref{eq:coeDom}} \\
|
||||
& ≡ y_{𝒜} && \text{Property of span category}
|
||||
\end{align*}
|
||||
\end{frame}
|
||||
\begin{frame}
|
||||
|
@ -556,13 +560,13 @@
|
|||
%
|
||||
We can show:
|
||||
\begin{align*}
|
||||
\var{Terminal} ≃ \var{Product}\ ℂ\ \mathcal{A}\ \mathcal{B}
|
||||
\var{Terminal} ≃ \var{Product}\ ℂ\ 𝒜\ ℬ
|
||||
\end{align*}
|
||||
\pause
|
||||
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}
|
||||
\begin{frame}
|
||||
|
@ -595,7 +599,7 @@
|
|||
%
|
||||
\begin{align*}
|
||||
\omapR & \tp \Object → \Object \\
|
||||
\pure & \tp % \prod_{X \tp Object}
|
||||
\pure & \tp % ∏_{X \tp Object}
|
||||
\Arrow\ X\ (\omapR\ X) \\
|
||||
\bind & \tp
|
||||
\Arrow\ X\ (\omapR\ Y)
|
||||
|
@ -610,7 +614,7 @@
|
|||
\Arrow\ B\ (\omapR\ C)
|
||||
→
|
||||
\Arrow\ A\ (\omapR\ C) \\
|
||||
f \fish g & \defeq f \rrr (\bind\ g)
|
||||
f \fish g & ≜ f \rrr (\bind\ g)
|
||||
\end{align*}
|
||||
\pause
|
||||
%
|
||||
|
@ -629,20 +633,20 @@
|
|||
In the monoidal formulation we can define $\bind$:
|
||||
%
|
||||
$$
|
||||
\bind\ f \defeq \join \lll \fmap\ f
|
||||
\bind\ f ≜ \join \lll \fmap\ f
|
||||
$$
|
||||
\pause
|
||||
%
|
||||
And likewise in the Kleisli formulation we can define $\join$:
|
||||
%
|
||||
$$
|
||||
\join \defeq \bind\ \identity
|
||||
\join ≜ \bind\ \identity
|
||||
$$
|
||||
\pause
|
||||
The laws are logically equivalent. So we get:
|
||||
%
|
||||
$$
|
||||
\var{Monoidal} \simeq \var{Kleisli}
|
||||
\var{Monoidal} ≃ \var{Kleisli}
|
||||
$$
|
||||
%
|
||||
\end{frame}
|
||||
|
|
Loading…
Reference in a new issue