2024-01-11 13:38:32 +01:00
\section { Categorical Notions of Partiality}
2024-01-14 18:12:29 +01:00
\begin { frame} [t, fragile]{ Capturing Partiality Categorically} { Moggi's categorical semantics~\cite { moggi} }
Goal: interpret an effectul programming language in a category $ \mathcal { C } $
2024-01-11 13:38:32 +01:00
\begin { itemize}
2024-01-15 14:08:42 +01:00
\item <2-> Take a Monad $ T $ on $ \mathcal { C } $ , then values are denoted by objects $ A $ and computations by $ TA $
2024-01-14 18:12:29 +01:00
\item <3-> Programs form a category $ \mathcal { C } _ T $ with $ \mathcal { C } _ T ( X,Y ) : = \mathcal { C } ( X, TY ) $
\end { itemize}
2024-01-11 13:38:32 +01:00
2024-01-14 18:12:29 +01:00
\onslide <4->
2024-01-18 19:10:09 +01:00
What properties should a monad $ T $ for modelling partiality have?
2024-01-11 13:38:32 +01:00
2024-01-14 18:12:29 +01:00
\begin { enumerate}
\item <5-> Commutativity (also entails strength), i.e. the following programs should yield equal results:
\begin { multicols} { 2}
\begin { minted} { haskell}
do x <- p
y <- q
return (x, y)
\end { minted}
\begin { minted} { haskell}
do y <- q
x <- p
return (x, y)
\end { minted}
\end { multicols}
where p and q are programs.
2024-01-18 19:10:09 +01:00
\item <6-> Morphisms in $ \mathcal { C } _ T $ should be partial maps
\item <7-> There should be no other effect besides partiality
2024-01-14 18:12:29 +01:00
\end { enumerate}
\end { frame}
2024-01-15 14:08:42 +01:00
\newcommand { \tdom } { \text { dom} \; }
2024-01-14 18:12:29 +01:00
\begin { frame} [t, fragile]{ Capturing Partiality Categorically} { Restriction Categories~\cite { restriction} }
\begin { definition} <1->
A restriction structure on $ \mathcal { C } $ is a mapping $ \tdom : \mathcal { C } ( X,Y ) \rightarrow \mathcal { C } ( X,X ) $ with the following properties:
\begin { alignat} { 1}
f \circ (\tdom f) & = f\\
(\tdom f) \circ (\tdom g) & = (\tdom g) \circ (\tdom f)\\
\tdom (g \circ (\tdom f)) & = (\tdom g) \circ (\tdom f)\\
(\tdom h) \circ f & = f \circ \tdom (h \circ f)
\end { alignat}
for any $ X, Y, Z \in \vert \mathcal { C } \vert , f : X \rightarrow KY, g : X \rightarrow KZ, h: Y \rightarrow KZ $ .
\end { definition}
2024-01-15 14:08:42 +01:00
\onslide <2->
2024-01-14 18:12:29 +01:00
Intuitively $ \tdom f $ captures the domain of definiteness of $ f $ .
2024-01-15 14:08:42 +01:00
\begin { block} { Remark} <3->
2024-01-14 18:12:29 +01:00
Every category has a trivial restriction structure $ \tdom f = id $ , we call categories with a non-trivial restriction structure \textit { restriction categories} .
\end { block}
\end { frame}
\begin { frame} [t, fragile]{ Capturing Partiality Categorically} { Equational Lifting Monads~\cite { eqlm} }
2024-01-18 19:10:09 +01:00
The following criterion guarantees that some form of partiality is the only possible side-effect:
2024-01-15 14:08:42 +01:00
\pause
2024-01-14 18:12:29 +01:00
\begin { definition}
A commutative monad $ T $ is called an \textit { equational lifting monad} if the following diagram commutes:
% https://q.uiver.app/#q=WzAsMyxbMCwwLCJUWCJdLFsyLDAsIlRYIFxcdGltZXMgVFgiXSxbMiwyLCJUKFRYIFxcdGltZXMgWCkiXSxbMCwxLCJcXERlbHRhIl0sWzEsMiwiXFx0YXUiXSxbMCwyLCJUIFxcbGFuZ2xlIFxcZXRhICwgaWQgXFxyYW5nbGUiLDJdXQ==
\[ \begin { tikzcd }
TX & & { TX \times TX} \\
\\
& & { T(TX \times X)}
\arrow ["\Delta", from=1-1, to=1-3]
\arrow ["\tau", from=1-3, to=3-3]
\arrow ["{T \langle \eta , id \rangle}"', from=1-1, to=3-3]
\end { tikzcd} \]
\end { definition}
\pause
\begin { theorem}
The Kleisli category of an equational lifting monad is a restriction category.
\end { theorem}
2024-01-11 13:38:32 +01:00
\end { frame}
2024-01-18 19:10:09 +01:00
% write on board:
% equational lifting: do x <- p; return (return x, x) = do x <- p; return (p, x)
2024-01-14 18:12:29 +01:00
2024-01-11 13:38:32 +01:00
\begin { frame} [t, fragile]{ The Maybe Monad}
2024-01-15 14:08:42 +01:00
\begin { itemize} [<+->]
\item $ MX = X + 1 $
\item on a distributive category the maybe monad is strong and commutative:
\[ \tau _ { X,Y } : = X \times ( Y + 1 ) \overset { dstr } { \longrightarrow } ( X \times Y ) + ( X \times 1 ) \overset { id + 1 } { \longrightarrow } ( X \times Y ) + 1 \]
2024-01-18 19:10:09 +01:00
\item and the following diagram commutes (i.e. it is an equational lifting monad):
2024-01-15 14:08:42 +01:00
% https://q.uiver.app/#q=WzAsNCxbMCwwLCJYKzEiXSxbMywwLCIoWCsxKVxcdGltZXMoWCsxKSJdLFszLDIsIigoWCsxKVxcdGltZXMgWCkgKygoWCsxKVxcdGltZXMgMSkiXSxbMyw0LCIoKFgrMSlcXHRpbWVzIFgpKzEiXSxbMCwxLCJcXERlbHRhIl0sWzEsMiwiZHN0ciJdLFsyLDMsImlkKyEiXSxbMCwzLCJcXGxhbmdsZSBpbmwsaWRcXHJhbmdsZSArICEiLDJdXQ==
\[ \begin { tikzcd }
{ X+1} & & & { (X+1)\times (X+1)} \\
\\
& & & { ((X+1)\times X) +((X+1)\times 1)} \\
\\
& & & { ((X+1)\times X)+1}
\arrow ["\Delta", from=1-1, to=1-4]
\arrow ["dstr", from=1-4, to=3-4]
\arrow ["{id+!}", from=3-4, to=5-4]
\arrow ["{\langle inl,id\rangle + !}"', from=1-1, to=5-4]
\end { tikzcd} \]
2024-01-11 13:38:32 +01:00
\end { itemize}
\end { frame}
\begin { frame} [t, fragile]{ The Delay Monad}
2024-01-18 19:10:09 +01:00
\begin { itemize} [<+->]
2024-01-15 14:08:42 +01:00
\item Recall the delay codatatype:
\[ \mprset { fraction = { = = = } }
2024-01-18 19:10:09 +01:00
\inferrule { x : X} { now\; x : DX} \hskip 2cm
2024-01-15 14:08:42 +01:00
\inferrule { c : DX} { later\; c : DX} \]
2024-01-18 19:10:09 +01:00
\item Categorically: $ DX = \nu A. X + A $
\item By Lambek we get $ DX \cong X + DX $ which yields:
\begin { alignat*} { 2}
& out & & : DX \rightarrow X + DX\\
& out^ { -1} & & : X + DX \rightarrow DX = [ now , later ]
\end { alignat*}
2024-01-15 14:08:42 +01:00
\item $ D $ (if it exists) is a strong and commutative monad (on a cartesian, cocartesian, distributive category)
2024-01-18 19:10:09 +01:00
\item $ D $ is not an equational lifting monad, because besides modelling partiality, it also counts steps \\ (e.g. $ now \; c \not = later \; ( now \; c ) $ )
2024-01-11 13:38:32 +01:00
\end { itemize}
\end { frame}
2024-01-18 19:10:09 +01:00
% write on board:
% \eta = now
% given f : X \rightarrow TY, f* is defined by corecursion.
%%%%%%%%
% NOTE:
% quotienting D should be covered later in the agda chapter, not here!
% \begin{frame}[t, fragile]{The quotiented Delay Monad}
% Following the work in~\cite{quotienting} we quotient $D$ by weak bisimilarity:
% \[\mprset{fraction={===}}
% \inferrule {p \downarrow c \\ q \downarrow c} {p \approx q}\hskip 2cm
% \inferrule {p \approx q} {later\; p \approx later\; q}\]
% \end{frame}
%%%%%%%
\begin { frame} [t, fragile]{ Partiality from Iteration} { Elgot Algebras}
The following is an adaptation of Ad\' amek, Milius and Velebil's \textit { complete Elgot Algebras} :
\begin { definition}
A (unguarded) Elgot Algebra consists of:
\begin { itemize}
\item An object X
\item for every $ f : S \rightarrow X + S $ the iteration $ f ^ \# : S \rightarrow X $ , satisfying:
\begin { itemize}
\item \textbf { Fixpoint} : $ f ^ \# = [ id , f ^ \# ] \circ f $
\item \textbf { Uniformity} : $ ( id + h ) \circ f = g \circ h \Rightarrow f ^ \# = g ^ \# \circ h $
\\ for $ f : S \rightarrow X + S, \; g : R \rightarrow A + R, \; h : S \rightarrow R $
\item \textbf { Folding} : $ ( ( f ^ \# + id ) \circ h ) ^ \# = [ ( id + inl ) \circ f , inr \circ h ] ^ \# $
\\ for $ f : S \rightarrow A + S, \; h : R \rightarrow S + R $
\end { itemize}
\end { itemize}
\end { definition}
\pause
\begin { block} { Remark}
Every Elgot algebra $ ( A, ( - ) ^ \# ) $ comes with a divergence constant $ \bot = ( inr : 1 \rightarrow A + 1 ) ^ \# : 1 \rightarrow A $
\end { block}
\end { frame}
% TODO
% maybe dont talk about elgot monads at all, give intuition for the initial pre Elgot monad.
\begin { frame} [t, fragile]{ Partiality from Iteration} { pre-Elgot Monads}
TODO
\end { frame}
\begin { frame} [t, fragile]{ Partiality from iteration} { The K Monad}
\begin { itemize} [<+->]
\item By defining $ KX $ as the free Elgot algebra over $ X $ we get a monad $ K $
\item $ K $ is strong and commutative
\item $ K $ is an equational lifting monad
\item $ K $ is the initial pre-Elgot monad
\end { itemize}
\end { frame}
%% TODOs:
% cite stefan
% cite sergey