\section{Categorical Notions of Partiality}

\begin{frame}[t, fragile]{Capturing Partiality Categorically}{Moggi's categorical semantics~\cite{moggi}}
Goal: interpret an effectul programming language in a category $\mathcal{C}$

\begin{itemize}
  \item<2-> Take a Monad $T$ on $\mathcal{C}$, then values are denoted by objects $A$ and computations by $TA$
  \item<3-> Programs form a category $\mathcal{C}_T$ with $\mathcal{C}_T(X,Y) := \mathcal{C}(X, TY)$
\end{itemize}

\onslide<4->
What properties should a partiality monad $T$ have?

\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.  
  \item<6-> Morphisms in $\mathcal{C}_T$ should be partial maps (How?)
\end{enumerate}

\end{frame}

\newcommand{\tdom}{\text{dom}\;}

\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}

\onslide<2->
Intuitively $\tdom f$ captures the domain of definiteness of $f$.

\begin{block}{Remark}<3->
  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}}
  The following criterion is sufficient for guaranteeing that the kleisli category is a restriction category:
  \pause
  \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}
\end{frame}

% TODO is the maybe monad an equational lifting monad? Ask sergey

\begin{frame}[t, fragile]{The Maybe Monad}
\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 \]
  \item and the following diagram commutes (i.e. it's an equational lifting monad):
    % 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}\]
  
\end{itemize}
\end{frame}

% TODO is delay equational lifting?? maybe rethink the story here...

\begin{frame}[t, fragile]{The Delay Monad}
\begin{itemize}
  \item Recall the delay codatatype:
    
    \[\mprset{fraction={===}}
    \inferrule {\;} {now\; x : DX}\hskip 2cm
    \inferrule {c : DX} {later\; c : DX}\]

  \item Categorically: $DX = \nu \gamma. X + \gamma$
  \item $D$ (if it exists) is a strong and commutative monad (on a cartesian, cocartesian, distributive category)
\end{itemize}
\end{frame}

\begin{frame}[t, fragile]{Partiality from iteration}
\begin{itemize}
  \item Elgot-Algebras
  \item Free Elgot-Algebras yield monad K
  \item K is equational lifting
  \item K instantiates to maybe and delay
\end{itemize}
\end{frame}