From afcc7d41a2c6815df30cdf88e2b50189f6f82046 Mon Sep 17 00:00:00 2001
From: Max New <maxsnew@gmail.com>
Date: Wed, 17 Aug 2022 11:33:15 -0400
Subject: [PATCH] sketch of a naive view of gradual types

---
 denotational-gradual-typing.tex | 133 ++++++++++++++++++++++++++++++++
 1 file changed, 133 insertions(+)
 create mode 100644 denotational-gradual-typing.tex

diff --git a/denotational-gradual-typing.tex b/denotational-gradual-typing.tex
new file mode 100644
index 0000000..26ee13d
--- /dev/null
+++ b/denotational-gradual-typing.tex
@@ -0,0 +1,133 @@
+\documentclass{article}
+\usepackage{amssymb}
+\usepackage{amsmath}
+\usepackage{amsthm}
+\usepackage{tikz-cd}
+\usepackage{mathpartir}
+\usepackage{stmaryrd}
+
+\newtheorem{theorem}{Theorem}[section]
+\newtheorem{nonnum-theorem}{Theorem}[section]
+\newtheorem{corollary}{Corollary}[section]
+\newtheorem{definition}{Definition}[section]
+\newtheorem{lemma}{Lemma}[section]
+
+\newcommand{\dynv}{\text{Dyn}^+}
+\newcommand{\dync}{\text{Dyn}^-}
+\newcommand{\good}[1]{\text{good}_{#1}}
+\newcommand{\prop}{\mathbb P}
+\newcommand{\with}{\mathrel{\&}}
+\newcommand{\eqv}{\simeq}
+\newcommand{\soln}{\text{Sol}}
+\newcommand{\police}[1]{\text{police}_{#1}}
+\newcommand{\later}{{\blacktriangleright}}
+
+\begin{document}
+
+\title{Gradual Types as Subsets}
+\author{Max S. New}
+
+\maketitle
+
+We fix a predomain $\dynv$ with poset structure and a domain $\dync$
+with bounded below poset structure as solutions to the domain
+equations:
+
+\[ \dynv = 2 + \dync \]
+\[ \dync = (\dynv \to \dync) \with L (\dynv_{\mho}) \]
+
+Q: does this actually get us the right order?
+Q: what domain-theoretic properties does the order have that matter?
+
+There are several ways to define essentially the same interpretation
+of CBV gradually typed lambda calculus with booleans into this
+semantics:
+
+\begin{enumerate}
+\item Types as ((Co-)Kleisli) co-reflections
+\item Types as interior operators
+\end{enumerate}
+
+I want to explore one that I previously dismissed as somewhat na\"ive:
+value types are (well-behaved) subsets of the universal predomain and
+computation types are (well-behaved) quotients of the universal
+domain.
+
+\begin{enumerate}
+\item A value type $A$ is a \emph{policeable} predicate $\good A :
+  \dynv \to \prop$
+\item A computation type $B$ is a \emph{envelopable} equivalence
+  relation $\eqv B : \text{Equivalence}(\dynv)$
+\end{enumerate}
+
+Let's explain what these mean.
+%
+First, define $\soln A$ to be the set of ``good'' elements of $\dynv$
+according to $A$, i.e., $\{ d : \dynv \,|\, \good A d \}$.
+%
+$\good A$ is \emph{policeable} when there exists a function $\police A
+: \dynv \to (\soln A)_\mho$ satisfying two properties:
+\begin{enumerate}
+\item (monotonicity) $\forall d \sqsubseteq d'. \police A d \sqsubseteq \police A d'$
+\item (retraction) $\forall x \in \soln A. \police A x = \eta x$
+\item (projection) $\forall d \in \dynv. \police d \sqsubseteq \eta d$
+\end{enumerate}
+
+If $\sqsubseteq$ is a poset and $\eta : A \to A_\mho$ is order-reflecting,
+then $\police A$ is uniquely determined by these two properties, for
+if there were another such function $(\police A)'$ we would have
+\[ \]
+
+\subsection{Synthetic Guarded Domain Theory}
+
+We can solve the domain equation using synthetic guarded domain
+theory.
+
+\begin{align*}
+  \dynv &= \mu (\lambda D^+. 2 + \mu (\lambda D^-. L (1 + D^+) \times (D^+ \to D^-) ))\\
+  \dync &= \mu (\lambda D^-. L (1 + \later \dynv) \times (\later \dynv \to D^-) )
+\end{align*}
+
+unfolding this gives us
+
+\begin{align*}
+  \dynv &\cong 2 + \dync \\
+  \dync &= L (1 + \later \dynv) \times (\later \dynv \to \later \dync)\\
+  &\cong L (1 + \later \dynv) \times \later (\dynv \to \dync)
+\end{align*}
+
+\begin{lemma}{Universal Domain}
+  $\dync$ is a domain with algebra
+  \[ \theta_\dync = \lambda p: \later \dync. (\pi_1p, ) \]
+\end{lemma}
+
+Let's define orderings.
+\begin{verbatim}
+data _<=_ : Dyn+ -> Dyn+ -> Prop where
+  bool : forall b : 2. inl b <= inl b
+
+
+data _<=_ : Dyn- -> Dyn- -> Prop where
+
+err-ord : BinRel a -> BinRel (a + 1)
+err-ord _<=_ (inr *)       y = T
+err-ord _<=_ (inl x) (inl y) = x <= y
+err-ord _<=_ _ _ = _|_
+
+laterr-ord< BinRel a -> BinRel (L (a + 1))
+laterr-ord< _<=_ (done (inr *)) _ = T
+laterr-ord< _<=_ (done (inl *)) _ = T
+
+
+laterr-ord> BinRel a -> BinRel (L (a + 1))
+  
+
+err : Dyn-
+err = mu (\e. ((inl (inl *)), \x. e))
+
+
+\end{verbatim}
+
+Let's define
+
+\end{document}
-- 
GitLab