summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid A. Madore <david+git@madore.org>2023-12-13 23:59:37 +0100
committerDavid A. Madore <david+git@madore.org>2023-12-13 23:59:37 +0100
commitfa6269a195752adf2a4a1adfd9240401ef1e87ba (patch)
tree5e8fb5ae7ea6aead9973dfca84a4685b9e8be9c4
parentfdeea61df3ecc7b1009893dbd318e50903065601 (diff)
downloadinf110-lfi-fa6269a195752adf2a4a1adfd9240401ef1e87ba.tar.gz
inf110-lfi-fa6269a195752adf2a4a1adfd9240401ef1e87ba.tar.bz2
inf110-lfi-fa6269a195752adf2a4a1adfd9240401ef1e87ba.zip
Try to fix CPS transformation, but this is still broken. :-(
-rw-r--r--transp-inf110-02-typage.tex74
1 files changed, 39 insertions, 35 deletions
diff --git a/transp-inf110-02-typage.tex b/transp-inf110-02-typage.tex
index 25305e4..3d44a81 100644
--- a/transp-inf110-02-typage.tex
+++ b/transp-inf110-02-typage.tex
@@ -3590,45 +3590,54 @@ callcc\_cps (fun kf -> fun k -> kf 42 (fun v -> sum\_cps v 1 k)) (fun x -> x) ;;
\medskip
-{\footnotesize Prenons les notations logiques pour les types.\par}
+{\footnotesize Prenons ici les notations logiques pour les types :
+ notamment, $\Rightarrow$ désigne le type fonction.\par}
\smallskip
\itempoint Fixons un type $Z$ de « retour ultime ». On définit une
-traduction $P \mapsto P^{\cps}$ des types (=propositions) en posant
-$\mathop{\sim}A := (A\Rightarrow Z)$, puis (inductivement) :
+transformation $P \mapsto P^\diamond$ des types (=propositions) en posant
+$\mathop{\sim}P := (P\Rightarrow Z)$, puis (inductivement) :
\begin{itemize}
-\item $A^{\cps} = \mathop{\sim}\mathop{\sim}A$ si $A$ est une variable de type,
-\item $(P\Rightarrow Q)^{\cps} = \mathop{\sim}\mathop{\sim}(P^{\cps} \Rightarrow Q^{\cps})$,
-\item $(P\land Q)^{\cps} = \mathop{\sim}\mathop{\sim}(P^{\cps} \land Q^{\cps})$,
-\item $(P\lor Q)^{\cps} = \mathop{\sim}\mathop{\sim}(P^{\cps} \lor Q^{\cps})$,
-\item $\top^{\cps} = \mathop{\sim}\mathop{\sim}\top$,
-\quad\itempoint $\bot^{\cps} = \mathop{\sim}\mathop{\sim}\bot$.
+\item $A^\diamond = A$ si $A$ est une variable de type,
+\item $(P\Rightarrow Q)^\diamond = (P^\diamond \Rightarrow \mathop{\sim}\mathop{\sim}Q^\diamond)$,
+\item $(P\land Q)^\diamond = P^\diamond \land Q^\diamond$,
+\quad\itempoint $(P\lor Q)^\diamond = P^\diamond \lor Q^\diamond$,
+\item $\top^\diamond = \top$,
+\quad\itempoint $\bot^\diamond = \bot$.
\end{itemize}
\smallskip
-\itempoint Il faut comprendre $\mathop{\sim}A$ comme « une
-continuation qui attend un type $A$ » et $\mathop{\sim}\mathop{\sim}A$
-comme « une valeur $A$ passée par continuation ».
+\itempoint Il faut comprendre $\mathop{\sim}P$ comme « une
+continuation qui attend un type $P$ » et $\mathop{\sim}\mathop{\sim}P$
+comme « une valeur $P$ passée par continuation ».
\smallskip
-\itempoint Noter que $x:A \;\vdash\; \lambda(k:\mathop{\sim}A).kx :
-\mathop{\sim}\mathop{\sim}A$ (transformation d'une valeur « directe »
+\itempoint Noter que $x:P \;\vdash\; \lambda(k:\mathop{\sim}P).kx :
+\mathop{\sim}\mathop{\sim}P$ (transformation d'une valeur « directe »
en valeur passée par continuation).
\smallskip
-{\footnotesize
+{\footnotesize On si on préfère voir ça comme une fonction :
+ $\lambda(x:P).\,\lambda(k:\mathop{\sim}P).\,kx$ a pour type $P
+ \Rightarrow \mathop{\sim}\mathop{\sim}P$.\par}
+
+\smallskip
-\itempoint On vérifie : $\mathop{\sim} A \Leftrightarrow
-\mathop{\sim}\mathop{\sim}\mathop{\sim} A$, donc $P^{\cps}
-\Leftrightarrow \mathop{\sim}\mathop{\sim} P^{\cps}$ ; remarquer
-aussi : $\bot^{\cps} \Leftrightarrow Z$ et $(\neg P)^{\cps}
-\Leftrightarrow \mathop{\sim} P^{\cps}$.
+\itempoint On pose $P^{\cps} := \mathop{\sim}\mathop{\sim}P^\diamond$.
-\par}
+%% {\footnotesize
+%%
+%% \itempoint On vérifie : $\mathop{\sim} P \Leftrightarrow
+%% \mathop{\sim}\mathop{\sim}\mathop{\sim} P$, donc $P^{\cps}
+%% \Leftrightarrow \mathop{\sim}\mathop{\sim} P^{\cps}$ ; remarquer
+%% aussi : $\bot^{\cps} \Leftrightarrow Z$ et $(\neg P)^{\cps}
+%% \Leftrightarrow \mathop{\sim} P^{\cps}$.
+%%
+%% \par}
\end{frame}
%
@@ -3640,25 +3649,20 @@ aussi : $\bot^{\cps} \Leftrightarrow Z$ et $(\neg P)^{\cps}
\itempoint On définit maintenant la transformation $t \mapsto
t^{\cps}$ sur les termes du $\lambda$CST de manière à ce que si
$\vdash t:P$ alors $\vdash t^{\cps}:P^{\cps}$ (rappel :
-$\mathop{\sim}A := (A\Rightarrow Z)$) :
+$\mathop{\sim}P := (P\Rightarrow Z)$ et $P^{\cps} :=
+\mathop{\sim}\mathop{\sim}P^\diamond$) :
\begin{itemize}
-\item $x^{\cps} = \lambda(k:\mathop{\sim}A).kx$ si $\vdash x : A$
-\item $(fx)^{\cps} =
- \lambda(k:\mathop{\sim}Q^{\cps}).\,f^{\cps}(\lambda(f_0:P^{\cps}\Rightarrow
- Q^{\cps}).\, x^{\cps}(\lambda(x_0:P^{\cps}).\, k(f_0 x_0)))$ si
- $\vdash f : P\Rightarrow Q$ et $\vdash x : P$ ; en abrégé :
- $(fx)^{\cps} = \lambda k.\,f^{\cps}(\lambda f_0.\, x^{\cps}(\lambda
- x_0.\,k(f_0 x_0)))$
-\item $(\lambda(v:P).t)^{\cps} =
- \lambda(k:\mathop{\sim}(P^{\cps}\Rightarrow Q^{\cps})).\, k(\lambda
- (v:P^{\cps}).\, t^{\cps})$ abrégé $(\lambda(v:P).t)^{\cps} =
+\item $v^{\cps} = \lambda k.kv$ si $v$ est une variable
+\item $(fx)^{\cps} = \lambda k.\,f^{\cps}(\lambda f_0.\,
+ x^{\cps}(\lambda x_0.\, f_0 x_0 k))$
+\item $(\lambda v.t)^{\cps} =
\lambda k.\, k(\lambda v.\, t^{\cps})$
\item $\langle x,y\rangle^{\cps} = \lambda k.\, x^{\cps}(\lambda
- x_0.\, y^{\cps} (\lambda y_0.\, k\langle x_0,y_0\rangle))$ (abrégé)
+ x_0.\, y^{\cps} (\lambda y_0.\, k\langle x_0,y_0\rangle))$
\item $(\pi_i z)^{\cps} = \lambda k.\, z^{\cps}(\lambda z_0.\, k(\pi_i
- z))$ (abrégé, pour $i\in\{1,2\}$)
+ z_0))$ (pour $i\in\{1,2\}$)
\item $(\iota_i z)^{\cps} = \lambda k.\, z^{\cps}(\lambda z_0.\,
- k(\iota_i z))$ (abrégé, pour $i\in\{1,2\}$)
+ k(\iota_i z_0))$ (pour $i\in\{1,2\}$)
\item $(\texttt{match~}r\texttt{~with~}\iota_1 v_1 \mapsto t_1,\;
\iota_2 v_2 \mapsto t_2)^{\cps} = \lambda k.\, r^{\cps}(\lambda
r_0.\, (\texttt{match~}r_0\texttt{~with~}\iota_1 v_1 \mapsto