bsc-leon-vatthauer/thesis/main.tex
2024-03-13 13:26:38 +01:00

252 lines
8.5 KiB
TeX

\documentclass[a4paper,11pt,numbers=noenddot]{scrbook}
\usepackage[top=2cm,lmargin=1in,rmargin=1in,bottom=3cm,hmarginratio=1:1]{geometry}
\usepackage[ngerman, main=british]{babel}
\babeltags{german=ngerman}
\usepackage{minted}
\setminted[agda]{
linenos=true,
breaklines=true,
encoding=utf8,
fontsize=\small,
frame=lines,
autogobble
}
\usepackage[dvipsnames]{xcolor} % Coloured text etc.
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{thmtools}
\usepackage{fancyvrb}
\usepackage{mathtools}
\usepackage{amsmath}
\usepackage{mathabx}
\usepackage{mathpartir}
% packages for draft version
\usepackage{lineno}
\usepackage[colorinlistoftodos,prependcaption,textsize=tiny]{todonotes}
\usepackage{ifdraft}
% mathpartir uses \atop, amsmath overrides it to throw a warning tho, so we override it back to the original!
\makeatletter
\let\atop\@@atop
\makeatother
\usepackage{tikz}
\usetikzlibrary{cd, babel, quotes}
\usepackage{quiver}
\usepackage{stmaryrd} % for \llbracket and \rrbracket
\usepackage{ifthen}
\usepackage{xspace}
\usepackage[final]{hyperref}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{fvextra}
\usepackage[style=ieee, sorting=ynt, language=british]{biblatex} % advanced citations, british to make dates DD-MM-YYYY
\usepackage[english=british]{csquotes} % biblatex recommended to load this
\usepackage{etoolbox,xpatch}
\makeatletter
\AtBeginEnvironment{minted}{\dontdofcolorbox}\def\dontdofcolorbox{\renewcommand\fcolorbox[4][]{##4}}\xpatchcmd{\inputminted}{\minted@fvset}{\minted@fvset\dontdofcolorbox}{}{}\xpatchcmd{\mintinline}{\minted@fvset}{\minted@fvset\dontdofcolorbox}{}{} % see https://tex.stackexchange.com/a/401250/
\makeatother
\usepackage{scrhack}
\usepackage{multicol}
\addbibresource{bib.bib}
%\usepackage[right]{showlabels}
%\usepackage[justific=raggedright,totoc]{idxlayout}
\usepackage[type=CC, modifier=by-sa,version=4.0]{doclicense}
% autoref for minted listings
\providecommand*{\listingautorefname}{Listing}
\addto\extrasenglish{
\renewcommand{\chapterautorefname}{Section}
\renewcommand{\sectionautorefname}{Section}
\renewcommand{\subsectionautorefname}{Subsection}
}
\newcommand\chap[1]{%
\chapter*{#1}%
\chaptermark{#1}%
\addcontentsline{toc}{chapter}{#1}}
\declaretheorem[name=Definition,style=definition,numberwithin=chapter]{definition}
\declaretheorem[name=Example,style=definition,sibling=definition]{example}
\declaretheorem[style=definition,numbered=no]{exercise}
\declaretheorem[name=Remark,style=definition,sibling=definition]{remark}
\declaretheorem[name=Assumption,style=definition,sibling=definition]{assumption}
\declaretheorem[name=Observation,style=definition,sibling=definition]{observation}
\declaretheorem[name=Theorem,sibling=definition]{theorem}
\declaretheorem[sibling=definition]{corollary}
\declaretheorem[name=Fact,sibling=definition]{fact}
\declaretheorem[sibling=definition]{lemma}
\declaretheorem[sibling=lemma]{proposition}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Spacing settings %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt}
\setlength{\marginparsep}{0cm}
\title{Implementing Categorical Notions of Partiality and Delay in Agda}
\author{Leon Vatthauer}
\makeatletter
\hypersetup{
pdfauthor={\@author},
pdftitle={\@title},
% kill those ugly red rectangles around links
hidelinks,
}
\newcommand*{\theauthor}{\@author}
\makeatother
\usepackage[scale=.8]{noto-mono}
\usepackage{unicode-math}
\usepackage{mathrsfs}
\usepackage{xargs}
\usepackage{xstring}
\newcommand*{\dbtilde}[1]{\tilde{\raisebox{0pt}[0.85\height]{\(\tilde{#1}\)}}}
% https://unicodeplus.com/U+3016
\newcommand*{\lbparen}{}
\newcommand*{\rbparen}{}
% category C
\newcommand*{\C}{\ensuremath{\mathscr{C}}}
\newcommand*{\D}{\ensuremath{\mathscr{D}}}
% objects of category
\newcommand*{\obj}[1]{\ensuremath{\vert #1 \vert}}
% category of elgot algebras on #1
\newcommand*{\elgotalgs}[1]{\ensuremath{\mathit{ElgotAlgs}(#1)}}
% category of monads on #1
\newcommand*{\coalgs}[1]{\ensuremath{\mathit{Coalgs}(#1)}}
\newcommand*{\monads}[1]{\ensuremath{\mathit{Monads}(#1)}}
\newcommand*{\strongmonads}[1]{\ensuremath{\mathit{StrongMonads}(#1)}}
% category of pre-Elgot monads on #1
\newcommand*{\preelgot}[1]{\ensuremath{\mathit{PreElgot}(#1)}}
\newcommand*{\strongpreelgot}[1]{\ensuremath{\mathit{StrongPreElgot}(#1)}}
\newcommand*{\setoids}{\ensuremath{\mathit{Setoids}}}
% free objects
\newcommand*{\freee}[1]{\ensuremath{#1^\star}}
\newcommand*{\free}[1]{
\ensuremath{
\IfSubStr{#1}{\circ}
{{\freee{(#1)}}}
{\IfSubStr{#1}{\;}
{\freee{(#1)}}
{\freee{#1}}
}
}
}
% right stability
\newcommand*{\rss}[1]{\ensuremath{#1^\blacktriangleright}}
\newcommand*{\rs}[1]{
\ensuremath{
\IfSubStr{#1}{\circ}{{\rss{(#1)}}}{\rss{#1}}
}
}
% left stability
\newcommand*{\lss}[1]{\ensuremath{#1^\blacktriangleleft}}
\newcommand*{\ls}[1]{
\ensuremath{
\IfSubStr{#1}{\circ}{{\lss{(#1)}}}{\lss{#1}}
}
}
% terminal coalgebra
\newcommand*{\coalg}[1]{\ensuremath{\lbparen#1\rbparen}}
% discretized setoids
\newcommand*{\disc}[1]{\ensuremath{\vert #1 \vert}}
% Defines the `mycase` environment, copied from https://tex.stackexchange.com/questions/251053/how-to-use-case-1-case-2-in-a-proof-ieee-confs
\newcounter{cases}
\newcounter{subcases}[cases]
\newenvironment{mycase}
{
\setcounter{cases}{0}
\setcounter{subcases}{0}
\newcommand{\case}
{
\par\indent\stepcounter{cases}\textbf{Case \thecases.}
}
\newcommand{\subcase}
{
\par\indent\stepcounter{subcases}\textit{Subcase (\thesubcases):}
}
}
{
\par
}
\renewcommand*\thecases{\arabic{cases}}
\renewcommand*\thesubcases{\roman{subcases}}
\begin{document}
\pagestyle{plain}
\input{src/titlepage}%
\chapter*{Disclaimer}
\begin{german}
Ich versichere, dass ich die Arbeit ohne fremde Hilfe und ohne Benutzung anderer als der angegebenen Quellen angefertigt habe und dass die Arbeit in gleicher oder ähnlicher Form noch keiner anderen Prüfungsbehörde vorgelegen hat und von dieser als Teil einer Prüfungsleistung angenommen wurde.
Alle Ausführungen, die wörtlich oder sinngemäß übernommen wurden, sind als solche gekennzeichnet.
\vspace{5em}
Erlangen, \today{} \rule{7cm}{1pt}\\
\phantom{Erlangen, \today{}} \theauthor{}
\end{german}
% \chapter*{Licensing}
% \doclicenseThis{}
\chapter*{Abstract}
Moggi famously showed how to use category theory (specifically monads) to model the semantics of effectful computations.
In this thesis we want to specifically examine how to model possibly non-terminating computations, which requires a monad supporting some form of partiality.
For that we will consider categorical properties that a monad that models partiality should satisfy and then compare concrete monads in view of these properties.
Capretta's delay monad is a typical example for a partiality monad, but it comes with a too intensional notion of built-in equality.
Since fixing this seems to be impossible without additional axioms, we will look at a novel approach to defining a partiality monad that works in a general setting by making use of previous research on iteration theories and drawing on the inherent connection between partiality and iteration. Lastly, we will see that in the category of setoids this partiality monad instantiates to a quotient of the delay monad.
\tableofcontents
\listoftodos\
\newcommandx{\unsure}[2][1=]{\todo[inline,linecolor=red,backgroundcolor=red!25,bordercolor=red,#1]{#2}}
\newcommandx{\change}[2][1=]{\todo[linecolor=blue,backgroundcolor=blue!25,bordercolor=blue,#1]{#2}}
\newcommandx{\info}[2][1=]{\todo[inline,linecolor=OliveGreen,backgroundcolor=OliveGreen!25,bordercolor=OliveGreen,#1]{#2}}
\newcommandx{\improvement}[2][1=]{\todo[inline,linecolor=Plum,backgroundcolor=Plum!25,bordercolor=Plum,#1]{#2}}
% for creating custom labels like (Fixpoint)
\makeatletter
\newcommand{\customlabel}[2]{%
\protected@write \@auxout {}{\string \newlabel {#1}{{#2}{\thepage}{#2}{#1}{}} }% chktex 1
\hypertarget{#1}{#2}%
}
\makeatother
\ifdraft{\linenumbers}
\include{src/00_introduction}
\include{src/01_preliminaries}
\include{src/02_agda-categories}
\include{src/03_partiality-monads}
\include{src/04_iteration}
\include{src/05_setoids}
\include{src/10_conclusion}
\todo[inline]{Add fullstop behind every proof}
\appendix
\medskip
\printbibliography[heading=bibintoc]{}
\end{document}