From 2a6c18d6f2f764834cd7ebbe23d0cffce24b9d36 Mon Sep 17 00:00:00 2001
From: Eric Giovannini <ecg19@seas.upenn.edu>
Date: Fri, 17 Nov 2023 12:40:42 -0500
Subject: [PATCH] begin description of denotational model for intensional
 gradual typing

---
 paper-new/defs.tex               |   8 +-
 paper-new/denotational-model.tex | 292 +++++++++++++++++++++++++++++++
 paper-new/paper.tex              |   3 +
 3 files changed, 302 insertions(+), 1 deletion(-)
 create mode 100644 paper-new/denotational-model.tex

diff --git a/paper-new/defs.tex b/paper-new/defs.tex
index 8623ee0..5263ecd 100644
--- a/paper-new/defs.tex
+++ b/paper-new/defs.tex
@@ -140,4 +140,10 @@
 \newcommand{\wlp}{w_l^p}
 
 \newcommand{\sem}[1]{\llbracket {#1} \rrbracket}
-\newcommand{\semgl}[1]{{\sem{#1}}^\text{gl}}
\ No newline at end of file
+\newcommand{\semgl}[1]{{\sem{#1}}^\text{gl}}
+
+
+% Denotational model
+\newcommand{\ptb}{\text{ptb}}
+\newcommand{\push}{\text{push}}
+\newcommand{\pull}{\text{pull}}
diff --git a/paper-new/denotational-model.tex b/paper-new/denotational-model.tex
new file mode 100644
index 0000000..17b38e0
--- /dev/null
+++ b/paper-new/denotational-model.tex
@@ -0,0 +1,292 @@
+\section{A Denotational Model for Intensional Gradual Typing}
+
+In this section we model intensional gradual typing in a suitable double category.
+
+We construct a (thin) double category $\mathsf{IGTT}$ as follows.
+
+% First, we fix a set $D$ with a partial order $\le_D$ and bisimilarity relation $\bisim_D$.
+% This is intended to model the dynamic type. Now we define the double category:
+
+\begin{itemize}
+  \item \textbf{Objects}: An object consists of the following data:
+    \begin{itemize}
+        \item A double poset $X$, i.e., a set $X$ equipped with a partial order $\le_X$
+        and a reflexive, symmetric ``bisimilarity'' relation $\bisim_X$.
+        \item Two commutative monoids of perturbations $P_V$ and $P_C$ with homomorphisms
+        \begin{align*}
+        \ptb_V &: P_V \to \{ f : X \to_m X \mid f \bisim \id \} \\
+        \ptb_C &: P_C \to \{ f : X \to_m \li X \mid f \bisim \eta \}
+        \end{align*}
+        (where composition in the latter monoid of functions is given by Kleisli composition).
+
+    \end{itemize}
+
+  \item \textbf{Vertical arrows}: An vertical arrow from $(X, P_V^X, P_C^X)$ to $(Y, P_V^Y, P_C^Y)$ is
+  a function $f : X \to Y$ that is \emph{monotone} (preserves ordering) and preserves the bisimilarity relation.
+  % that preserves ordering and bisimilarity.
+  
+  \item \textbf{Horizontal arrows}: A horizontal arrow from $(X, P_V^X, P_C^X)$ to $(Y, P_V^Y, P_C^Y)$
+  consists of:
+  \begin{itemize}
+    \item A relation $R : X \nrightarrow Y$ that is antitone with respect to $\le_X$ and
+    monotone with respect to $\le_Y$.
+    \item An embedding $e_{XY} : X \to_m Y$ preserving ordering and bisimilarity.
+    \item A projection $p_{XY} : Y \to_m \li X$ preserving ordering and bisimilarity.
+  \end{itemize}
+  
+  such that (1) $R$ is \emph{quasi-representable} by $e_{XY}$ and $p_{XY}$, and 
+  (2) $R$ satisfies the \emph{push-pull} property.
+  
+  \vspace{3ex}
+  The former means that there are distinguished elements $\delta^{l,e} \in P_V^X$, $\delta^{r,e} \in P_V^Y$, 
+  $\delta^{l,p} \in P_C^X$ and $\delta^{r,p} \in P_C^Y$ such that the following squares commute:
+
+  \begin{center}
+    \begin{tabular}{ c | c } 
+        \hline
+        \hspace{3em} 
+        % UpL
+        % https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzAsMSwiWSJdLFsxLDAsIlkiXSxbMSwxLCJZIl0sWzAsMiwiUiIsMCx7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImJhcnJlZCJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzEsMywiXFxsZV9ZIiwyLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiYmFycmVkIn0sImhlYWQiOnsibmFtZSI6Im5vbmUifX19XSxbMCwxLCJlX3tYWX0iLDJdLFsyLDMsIlxccHRiX1ZeWShcXGRlbHRhXntyLGV9KSJdLFs2LDcsIlxcbHRkeW4iLDEseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9LCJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJub25lIn0sImhlYWQiOnsibmFtZSI6Im5vbmUifX19XV0=
+        \begin{tikzcd}[ampersand replacement=\&]
+            X \& Y \\
+            Y \& Y
+            \arrow["R", "\shortmid"{marking}, no head, from=1-1, to=1-2]
+            \arrow["{\le_Y}"', "\shortmid"{marking}, no head, from=2-1, to=2-2]
+            \arrow[""{name=0, anchor=center, inner sep=0}, "{e_{XY}}"', from=1-1, to=2-1]
+            \arrow[""{name=1, anchor=center, inner sep=0}, "{\ptb_V^Y(\delta^{r,e})}", from=1-2, to=2-2]
+            \arrow["\ltdyn"{description}, draw=none, from=0, to=1]
+        \end{tikzcd} & 
+        % UpR
+        % https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzAsMSwiWCJdLFsxLDAsIlgiXSxbMSwxLCJZIl0sWzAsMSwiXFxwdGJfVl5YKFxcZGVsdGFee2wsZX0pIiwyXSxbMiwzLCJlX3tYWX0iXSxbMSwzLCJSIiwyLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiYmFycmVkIn0sImhlYWQiOnsibmFtZSI6Im5vbmUifX19XSxbMCwyLCJcXGxlX1giLDAseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJiYXJyZWQifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFs0LDUsIlxcbHRkeW4iLDEseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9LCJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJub25lIn0sImhlYWQiOnsibmFtZSI6Im5vbmUifX19XV0=
+        \begin{tikzcd}[ampersand replacement=\&]
+            X \& X \\
+            X \& Y
+            \arrow[""{name=0, anchor=center, inner sep=0}, "{\ptb_V^X(\delta^{l,e})}"', from=1-1, to=2-1]
+            \arrow[""{name=1, anchor=center, inner sep=0}, "{e_{XY}}", from=1-2, to=2-2]
+            \arrow["R"', "\shortmid"{marking}, no head, from=2-1, to=2-2]
+            \arrow["{\le_X}", "\shortmid"{marking}, no head, from=1-1, to=1-2]
+            \arrow["\ltdyn"{description}, draw=none, from=0, to=1]
+        \end{tikzcd} \\
+        \hline
+        % DnR
+        % https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzEsMCwiWSJdLFswLDEsIkxYIl0sWzEsMSwiTFgiXSxbMCwyLCJcXHB0Yl9DXlgoXFxkZWx0YV57bCxwfSkiLDJdLFsxLDMsInBfe1hZfSJdLFswLDEsIlIiLDAseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJiYXJyZWQifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFsyLDMsIlxcbGVfe0xYfSIsMix7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImJhcnJlZCJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzQsNSwiXFxsdGR5biIsMSx7InNob3J0ZW4iOnsic291cmNlIjoyMCwidGFyZ2V0IjoyMH0sInN0eWxlIjp7ImJvZHkiOnsibmFtZSI6Im5vbmUifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ==
+        \begin{tikzcd}[ampersand replacement=\&]
+            X \& Y \\
+            LX \& LX
+            \arrow[""{name=0, anchor=center, inner sep=0}, "{\ptb_C^X(\delta^{l,p})}"', from=1-1, to=2-1]
+            \arrow[""{name=1, anchor=center, inner sep=0}, "{p_{XY}}", from=1-2, to=2-2]
+            \arrow["R", "\shortmid"{marking}, no head, from=1-1, to=1-2]
+            \arrow["{\le_{LX}}"', "\shortmid"{marking}, no head, from=2-1, to=2-2]
+            \arrow["\ltdyn"{description}, draw=none, from=0, to=1]
+        \end{tikzcd} & 
+            \hspace{3em} 
+            % DnL
+            % https://q.uiver.app/#q=WzAsNCxbMCwwLCJZIl0sWzEsMCwiWSJdLFswLDEsIkxYIl0sWzEsMSwiTFkiXSxbMCwxLCJcXGxlX1kiLDAseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJiYXJyZWQifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFswLDIsInBfe1hZfSIsMl0sWzEsMywiXFxwdGJfQ15ZKFxcZGVsdGFee3IscH0pIl0sWzIsMywiTFIiLDIseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJiYXJyZWQifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFs1LDYsIlxcbHRkeW4iLDEseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9LCJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJub25lIn0sImhlYWQiOnsibmFtZSI6Im5vbmUifX19XV0=
+            \begin{tikzcd}[ampersand replacement=\&]
+                Y \& Y \\
+                LX \& LY
+                \arrow["{\le_Y}", "\shortmid"{marking}, no head, from=1-1, to=1-2]
+                \arrow[""{name=0, anchor=center, inner sep=0}, "{p_{XY}}"', from=1-1, to=2-1]
+                \arrow[""{name=1, anchor=center, inner sep=0}, "{\ptb_C^Y(\delta^{r,p})}", from=1-2, to=2-2]
+                \arrow["LR"', "\shortmid"{marking}, no head, from=2-1, to=2-2]
+                \arrow["\ltdyn"{description}, draw=none, from=0, to=1]
+            \end{tikzcd} \\ 
+        \hline
+    \end{tabular}
+    \end{center}
+    (Here, $LR$ is the lock step lifting of the relation $R$.)
+
+    \vspace{3ex}
+
+    The push-pull property is defined as follows:
+    \begin{itemize}
+        \item Given any perturbation $\delta_X \in P_V^X$, we can \emph{push} it forward along $R$ to a
+        perturbation $\push(\delta_X) \in P_V^Y$, such that $\ptb_V^X(\delta_X) \le \ptb_V^Y(\push(\delta_X))$.
+
+        \item Conversely, given any perturbation $\delta_Y \in P_V^Y$, we can \emph{pull} it back along $R$
+        to a perturbation $\pull(\delta_Y) \in P_V^X$, such that $\ptb_V^X(\pull(\delta_Y)) \le \ptb_V^Y(\delta_Y)$.
+
+        \item Likewise, we can push any perturbation $\delta_X \in P_C^X$ along $LR$
+        to get a perturbation $\push(\delta_X) \in P_C^Y$ such that
+        $\ptb_C^X(\delta_X) \le \ptb_C^Y(\push(\delta_X))$.
+
+        \item And similarly, we can pull a perturbation in $P_C^Y$ along $LR$ to a perturbation in $P_C^X$
+        satisfying the analogous property.
+    \end{itemize}
+
+    \textbf{TODO: push and pull might need to be monoid homomorphisms}
+
+  \item \textbf{Two-cells}: Let $f : W \to X$ and $g : Y \to Z$ and let $R : W \nrightarrow Y$ and 
+  $S : X \nrightarrow Z$. We define $f \le g$ to mean for all $(w, y) \in R$, we have
+  $(f(w), g(y)) \in S$. This is depicted in the square below:
+
+  % https://q.uiver.app/#q=WzAsNCxbMCwwLCJXIl0sWzAsMSwiWCJdLFsxLDAsIlkiXSxbMSwxLCJaIl0sWzAsMiwiUiIsMCx7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImJhcnJlZCJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzEsMywiUyIsMix7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImJhcnJlZCJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzAsMSwiZiIsMl0sWzIsMywiZyJdLFs0LDUsIlxcc3FzdWJzZXRlcSIsMSx7InNob3J0ZW4iOnsic291cmNlIjoyMCwidGFyZ2V0IjoyMH0sInN0eWxlIjp7ImJvZHkiOnsibmFtZSI6Im5vbmUifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ==
+\[\begin{tikzcd}[ampersand replacement=\&]
+	W \& Y \\
+	X \& Z
+	\arrow[""{name=0, anchor=center, inner sep=0}, "R", "\shortmid"{marking}, no head, from=1-1, to=1-2]
+	\arrow[""{name=1, anchor=center, inner sep=0}, "S"', "\shortmid"{marking}, no head, from=2-1, to=2-2]
+	\arrow["f"', from=1-1, to=2-1]
+	\arrow["g", from=1-2, to=2-2]
+	\arrow["\sqsubseteq"{description}, draw=none, from=0, to=1]
+\end{tikzcd}\]
+  
+\end{itemize}
+
+The category satisfies the following additional properties:
+\begin{itemize}
+    \item \emph{Existence of Dyn}: There is an object $D$ with the property that for any
+    object $X$, there is a horizontal arrow $X \nrightarrow D$.
+    The underlying double poset is defined by guarded recursion as the solution to
+    \[ D \cong \mathbb{N}\, + \later \hspace{-0.5ex} (D \to_m \li D). \]
+
+    \textbf{TODO: define the perturbations for Dyn and show there is a horizontal arrow $X \nrightarrow D$ for all $X$.}
+    
+    \item \emph{Thinness}: There is at most one two-cell for any given square.
+
+    % \item \emph{Push-Pull}: Let $X$ and $Y$ be objects, and let $R : X \nrightarrow Y$.
+    % \begin{itemize}
+    %     \item Given any perturbation $\delta_X \in P_V^X$, we can \emph{push} it forward along $R$ to a
+    %     perturbation $\push(\delta_X) \in P_V^Y$, such that $\ptb_V^X(\delta_X) \le \ptb_V^Y(\push(\delta_X))$.
+
+    %     \item Conversely, given any perturbation $\delta_Y \in P_V^Y$, we can \emph{pull} it back along $R$
+    %     to a perturbation $\pull(\delta_Y) \in P_V^X$, such that $\ptb_V^X(\pull(\delta_Y)) \le \ptb_V^Y(\delta_Y)$.
+
+    %     \item Likewise, we can push any perturbation $\delta_X \in P_C^X$ along $L\, R$
+    %     (the lock-step lifting of the relation $R$) to get a perturbation $\push(\delta_X) \in P_C^Y$ such that
+    %     $\ptb_C^X(\delta_X) \le \ptb_C^Y(\push(\delta_X))$.
+
+    %     \item And similarly we can pull a perturbation in $P_C^Y$ to a perturbation in $P_C^X$
+    %     satisfying the analogous property.
+    % \end{itemize}
+\end{itemize}
+
+% Composability of embedding and projections
+
+We need to verify that this forms a thin double category. 
+\begin{itemize}
+    \item \emph{Horizontal identity morphism}: 
+    Let $X$ be an object. We take $R$ to be $\le_X$ (the ordering relation on $X$),
+    which is trivially antitone and monotone with respect to itself.
+    We let $e_{XX} = \id$ and $p_{XX} = \eta$. These clearly preserve the
+    ordering and bisimilarity.
+
+    \vspace{3ex}
+    
+    We first need to show that $R$ is quasi-representable.
+    We prove the UpR rule; the others are similar.
+    We need to specify a distinguished element $\delta^{l,e} \in P_V^X$ such that
+    the following square commutes:
+    
+    % https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzAsMSwiWCJdLFsxLDAsIlgiXSxbMSwxLCJYIl0sWzAsMSwiXFxwdGJfVl5YKFxcZGVsdGFee2wsZX0pIiwyXSxbMiwzLCJlX3tYWH0gPSBcXGlkIl0sWzAsMiwiXFxsZV9YIiwwLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiYmFycmVkIn0sImhlYWQiOnsibmFtZSI6Im5vbmUifX19XSxbMSwzLCJcXGxlX1giLDIseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJiYXJyZWQifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ==
+    \[\begin{tikzcd}[ampersand replacement=\&]
+        X \& X \\
+        X \& X
+        \arrow["{\ptb_V^X(\delta^{l,e})}"', from=1-1, to=2-1]
+        \arrow["{e_{XX} = \id}", from=1-2, to=2-2]
+        \arrow["{\le_X}", "\shortmid"{marking}, no head, from=1-1, to=1-2]
+        \arrow["{\le_X}"', "\shortmid"{marking}, no head, from=2-1, to=2-2]
+    \end{tikzcd}\]
+
+    Taking $\delta^{l,e} = \id$ (the identity of the monoid), we observe that since
+    $\ptb_V^X$ is a homomorphism of monoids, we have $\ptb_V^X(\id) = \id$.
+    Now it is clear that the above square commutes.
+
+    \vspace{3ex}
+
+    We also need to show that $R$ satisfies the four push-pull properties.
+    We show one; the others are similar. Let $\delta_X \in P_V^X$.
+    We need to define $\push(\delta_X) \in P_V^X$ such that the following square commutes:
+
+    % https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzAsMSwiWCJdLFsxLDAsIlgiXSxbMSwxLCJYIl0sWzAsMiwiXFxsZV9YIiwwLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiYmFycmVkIn0sImhlYWQiOnsibmFtZSI6Im5vbmUifX19XSxbMSwzLCJcXGxlX1giLDIseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJiYXJyZWQifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFswLDEsIlxccHRiX1ZeWChcXGRlbHRhX1gpIiwyXSxbMiwzLCJcXHB0Yl9WXlgoXFxwdXNoKFxcZGVsdGFfWCkpIiwwLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiZGFzaGVkIn19fV1d
+    \[\begin{tikzcd}[ampersand replacement=\&]
+	X \& X \\
+	X \& X
+	\arrow["{\le_X}", "\shortmid"{marking}, no head, from=1-1, to=1-2]
+	\arrow["{\le_X}"', "\shortmid"{marking}, no head, from=2-1, to=2-2]
+	\arrow["{\ptb_V^X(\delta_X)}"', from=1-1, to=2-1]
+	\arrow["{\ptb_V^X(\push(\delta_X))}", dashed, from=1-2, to=2-2]
+    \end{tikzcd}\]
+
+    Let $\push(\delta_X) = \delta_X$. We need to show that for $x \le_X x'$,
+    we have $\ptb_V^X(\delta_X)(x) \le \ptb_V^X(\delta_X)(x')$, which holds because
+    $\ptb_V^X(\delta_X)$ is monotone with respect to $\le_X$.
+
+
+    \item \emph{Horizontal composition}:
+    
+    Let $R : X \nrightarrow Y$ and $S : Y \nrightarrow Z$.
+    We define
+    $e_{XZ} = e_{YZ} \circ e_{XY}$ and $p_{XZ} = \ext{p_{XY}}{} \circ p_{YZ}$.
+    We define the distinguished perturbations in the representability rules as follows:
+
+    \begin{align*}
+        \delta_{R\circ S}^{l,e} &= \pull_R(\delta_S^{l,e}) \cdot \delta_R^{l,e} \\
+        \delta_{R\circ S}^{r,e} &= \delta_S^{r,e} \cdot \push_S(\delta_R^{r,e}) \\
+        \delta_{R\circ S}^{l,p} &= \delta_R^{l,p} \cdot \pull_{LR}(\delta_S^{l,p}) \\
+        \delta_{R\circ S}^{r,p} &= \push_{LS}(\delta_R^{r,p}) \cdot \delta_S^{r,p}
+    \end{align*}
+    where $\cdot$ denotes composition in the appropriate monoid of perturbations.
+
+    We can then show that the four quasi-representability rules are valid with these definitions.
+    \textbf{TODO show one or two of the cases}
+
+    \vspace{3ex}
+
+    We also need to show that the push-pull rules hold of the composition $R \circ S$.
+    This follows from the fact that they hold for both $R$ and $S$.
+    Specifically, we define
+
+    \begin{align*}
+        \push_{R \circ S}(\delta^X) &= \push_S(\push_R(\delta^X)) \\
+        \pull_{R \circ S}(\delta^Z) &= \pull_R(\pull_S(\delta^Z)) \\
+        \push_{L(R \circ S)}(\delta^X) &= \push_{LS}(\push_{LR}(\delta^X)) \\
+        \pull_{L(R \circ S)}(\delta^Z) &= \pull_{LR}(\pull_{LS}(\delta^Z))
+    \end{align*}
+
+    Then we can verify that the relevant push-pull inequalities hold using the above definitions.
+    \textbf{TODO maybe show one of the cases}
+
+    \item \emph{Identity two-cells}:
+    The horizontal identity two-cells have the form
+
+    % https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzAsMSwiWSJdLFsxLDAsIlgiXSxbMSwxLCJZIl0sWzAsMSwiZiIsMl0sWzIsMywiZiJdLFswLDIsIlxcbGVfWCJdLFsxLDMsIlxcbGVfWSIsMl0sWzQsNSwiXFxsdGR5biIsMSx7InNob3J0ZW4iOnsic291cmNlIjoyMCwidGFyZ2V0IjoyMH0sInN0eWxlIjp7ImJvZHkiOnsibmFtZSI6Im5vbmUifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ==
+    \[\begin{tikzcd}[ampersand replacement=\&]
+        X \& X \\
+        Y \& Y
+        \arrow[""{name=0, anchor=center, inner sep=0}, "f"', from=1-1, to=2-1]
+        \arrow[""{name=1, anchor=center, inner sep=0}, "f", from=1-2, to=2-2]
+        \arrow["{\le_X}", from=1-1, to=1-2]
+        \arrow["{\le_Y}"', from=2-1, to=2-2]
+        \arrow["\ltdyn"{description}, draw=none, from=0, to=1]
+    \end{tikzcd}\]
+
+    This square commutes because $f$ is monotone with respect to the ordering relation.
+
+    The vertical two-cells have the form
+
+    % https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzAsMSwiWCJdLFsxLDAsIlkiXSxbMSwxLCJZIl0sWzAsMiwiUiIsMCx7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImJhcnJlZCJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzEsMywiUiIsMCx7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImJhcnJlZCJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzAsMSwiXFxpZF9YIiwyXSxbMiwzLCJcXGlkX1kiXSxbNiw3LCJcXGx0ZHluIiwxLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfSwic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoibm9uZSJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV1d
+    \[\begin{tikzcd}[ampersand replacement=\&]
+        X \& Y \\
+        X \& Y
+        \arrow["R", "\shortmid"{marking}, no head, from=1-1, to=1-2]
+        \arrow["R", "\shortmid"{marking}, no head, from=2-1, to=2-2]
+        \arrow[""{name=0, anchor=center, inner sep=0}, "{\id_X}"', from=1-1, to=2-1]
+        \arrow[""{name=1, anchor=center, inner sep=0}, "{\id_Y}", from=1-2, to=2-2]
+        \arrow["\ltdyn"{description}, draw=none, from=0, to=1],
+    \end{tikzcd}\]
+
+    which commutes trivially.
+
+    \item \emph{Composition of two-cells}:
+    Two-cells compose vertically and horizontally, which follows from the definition
+    definition of a two-cell in this category.
+
+    \textbf{TODO: elaborate}
+\end{itemize}
+
+\vspace{3ex}
+
+\textbf{Kleisli internal hom: TODO}
+
+% The arrow => takes a value type and an algebra and constructs an algebra
\ No newline at end of file
diff --git a/paper-new/paper.tex b/paper-new/paper.tex
index 949a3a9..291687d 100644
--- a/paper-new/paper.tex
+++ b/paper-new/paper.tex
@@ -8,6 +8,7 @@
 \usepackage{wrapfig}
 \usepackage{fancyvrb}
 \usepackage{comment}
+\usepackage{array}
 
 
 
@@ -126,6 +127,8 @@
 
 \input{graduality}
 
+\input{denotational-model}
+
 % \section{Discussion}\label{sec:discussion}
 
 % \subsection{Synthetic Ordering}
-- 
GitLab