From c0fdabca473420288fa206d23c4d831d8690c191 Mon Sep 17 00:00:00 2001
From: Dan Licata <drl@cs.cmu.edu>
Date: Tue, 26 Jun 2018 12:16:12 -0400
Subject: [PATCH] typeset definitions of casts

---
 paper/gtt.tex | 88 +++++++++++++++++++++++++++++++++++----------------
 1 file changed, 61 insertions(+), 27 deletions(-)

diff --git a/paper/gtt.tex b/paper/gtt.tex
index dd212cd..1b8c8bb 100644
--- a/paper/gtt.tex
+++ b/paper/gtt.tex
@@ -1024,21 +1024,22 @@ TODO: do we actually know what would go wrong in that case?
 
     \bigskip
     
-    \framebox{Error Universal Properties}
-    
     \begin{mathpar}
+    \framebox{Error Universal Properties}
+    \qquad
     \inferrule{ \Gamma' \mid \cdot \vdash M' : \u B' }
               { \Gamma \ltdyn \Gamma' \mid \cdot \vdash \err \ltdyn M : \u B \ltdyn \u B'}
-    
+    \qquad
     \inferrule { \Gamma \mid x : \u B \vdash S : \u B'}
                {\Gamma \mid \cdot \vdash S[\err_{\u B}] \ltdyn \err_{\u{B'}} : \u B'}
     \end{mathpar}
 
     \bigskip
 
-    \framebox{Cast Success/Failure}
 
     \[
+    \framebox{Cast Success/Failure}
+    \quad
     \begin{array}{c}
       %% TODO prove these:
       %% x : A \vdash \dncast{\u F A}{\u F A'}{(\ret{(\upcast{A}{A'}{x})})} \ltdyn \ret{x} : \u F A \\
@@ -1400,31 +1401,64 @@ $\eta$-expansion \emph{up to cast at smaller type}.
 
 
 \begin{theorem}{Characterization of Casts}
-  \begin{enumerate}
-    
-  \item[+] $\upcast{A_1 + A_2}{A_1' + A_2'} \equidyn \ldots$
-  and $\dncast{\u F (A_1' + A_2')}{\u F (A_1 + A_2)} \equidyn \ldots$
+  \begin{small}
+\[
+  \begin{array}{l}
+  \upcast{A_1 + A_2}{A_1' + A_2'}{s} \equidyn \caseofXthenYelseZ{s}{x_1.\inl{(\upcast{A_1}{A_1'}{x_1})}}{x_2.\inr{(\upcast{A_2}{A_2'}{x_2})}}\\
+    \dncast{\u F (A_1' + A_2')}{\u F (A_1 + A_2)}{\bullet} \equidyn \\
+    \bindXtoYinZ{\bullet}{(s : (A_1' +
+      A_2'))}{}\\
+     \quad
+         {\caseofXthenYelseZ{s}
+           {x_1'.\bindXtoYinZ{(\dncast{\u F A_1}{\u F A_1'}{(\ret{x_1'})})}{x_1}{\ret{(\inl {x_1})}}}
+           {x_2'.\bindXtoYinZ{(\dncast{\u F A_2}{\u F A_2'}{(\ret{x_2'})})}{x_2}{\ret{(\inr {x_2})}}}}\\
+    \\
+    \upcast{A_1 \times A_2}{A_1' \times A_2'}{p} \equidyn \pmpairWtoXYinZ{p}{x_1}{x_2}{(\upcast{A_1}{A_1'}{x_1},\upcast{A_2}{A_2'}{x_2})} \\
+    \begin{array}{l}
+      \dncast{\u F (A_1' \times A_2')}{\u F (A_1 \times A_2)}{\bullet}
+      \equidyn \\
+      \qquad
+      \bindXtoYinZ{\bullet}{p'}{\pmpairWtoXYinZ{p'}{x_1'}{x_2'}{
+          \bindXtoYinZ{\dncast{\u F A_1}{\u F A_1'}{\ret x_1'}}{x_1}{
+            \bindXtoYinZ{\dncast{\u F A_2}{\u F A_2'}{\ret x_2'}}{x_2} {\ret (x_1,x_2) }}}}
+      \equidyn \\
+      \qquad
+      \bindXtoYinZ{\bullet}{p'}{\pmpairWtoXYinZ{p'}{x_1'}{x_2'}{
+          \bindXtoYinZ{\dncast{\u F A_2}{\u F A_2'}{\ret x_2'}}{x_2}{
+            \bindXtoYinZ{\dncast{\u F A_1}{\u F A_1'}{\ret x_1'}}{x_1} {\ret (x_1,x_2) }}}}
+    \end{array}\\
 
-  \item[$\times$] $\upcast{A_1 \times A_2}{A_1' \times A_2'} \equidyn \ldots$
-  and $\dncast{\u F (A_1' \times A_2')}{\u F (A_1 \times A_2)} \equidyn \ldots$
-  (both orders)
+    \\
+    \dncast{\u B_1 \with \u B_2}{\u B_1' \with \u B_2'}{\bullet} \equidyn
+    \pair{\dncast{\u B_1}{\u B_1'}{\pi \bullet}}{\dncast{\u B_2}{\u B_2'}{\pi' \bullet}}\\
+    \begin{array}{l}
+      \upcast{U (\u B_1 \with \u B_2)}{U (\u B_1' \with \u B_2')}{p} \equidyn\\
+      \thunk{\pair{\force{(\upcast{U \u B_1}{U \u B_1'}{(\thunk{\pi (\force{p})})})}}{\force{(\upcast{U \u B_2}{U \u B_2'}{(\thunk{\pi' (\force{p})})})}}}
+    \end{array}
+    \\
 
-  \item[$\with$] $\dncast{\u B_1 \with \u B_2}{\u B_1' \with \u B_2'} \equidyn \ldots$
-  and $\upcast{U (\u B_1 \with \u B_2)}{U (\u B_1' \with \u B_2')} \equidyn \ldots$
-  
-  \item[$\to$] $\dncast{A \to \u B}{A' \to \u B'} \equidyn \ldots$
-  and $\upcast{U (A \to \u B)}{U (A' \to \u B')} \equidyn \ldots$
-  
-  \item[0]
-    $\upcast{0}{A}V \equidyn \absurd V$ and 
-    $\dncast{\u F 0}{\u F A} \equidyn \err$
-  \item[1]
-    $\dncast{1}{\u B} \equidyn \{\}$ and
-    $\upcast{U 1}{U \u B} \equidyn \thunk \err$
-  \item[$\top$] $\dncast{\u B}{\top} \equiv \ldots$ 
-    $\upcast{U \u B}{U \top} \equiv \ldots$
-  
-  \end{enumerate}
+    \\
+    \dncast{A \to \u B}{A' \to \u B'}{\bullet} \equidyn
+    \lambda{x}.{\dncast{B}{B'}{(\bullet \, (\upcast{A}{A'}{x}))}} \\
+    \begin{array}{l}
+      \upcast{U (A \to \u B)}{U (A' \to \u B')}{f} \equidyn\\
+      \thunk{(\lambda x'.\bindXtoYinZ{\dncast{\u F A}{\u F A'}{(\ret
+            x')}}{x}{ \force{(\upcast{U \u B}{U \u B'}{(\thunk{(\force{(f)}\,x)})})}})}
+    \end{array}
+        \\
+
+    \\
+    \upcast{0}{A}z \equidyn \absurd z\\
+    \dncast{\u F 0}{\u F A}{M} \equidyn \err\\
+
+    \\
+    \dncast{\top}{\u B}{\bullet} \equidyn \{\}\\
+    \upcast{U \top}{U \u B}{u} \equidyn \thunk \err
+  %% \item[$\top$] $\dncast{\u B}{\top} \equiv \ldots$ 
+  %%   $\upcast{U \u B}{U \top} \equiv \ldots$
+  \end{array}
+  \]
+  \end{small}
 \end{theorem}
 
 \subsection{Upcasts are Thunkable, Downcasts are Linear, a posteriori}
-- 
GitLab