Add variable substitution in typecases

This allows to explicit how to do occurence typing

Fixes #6
This commit is contained in:
regnat 2017-04-24 17:08:51 +02:00
parent b2c8475bde
commit ef5b2c837d
3 changed files with 6 additions and 9 deletions

View File

@ -6,7 +6,7 @@
\alt \p/:\e/ \| \e/ \e/
\alt \{ \e/ = \e/ \}
\alt with \e/; \e/
\alt (\e/ $\bm{\in}$ \t/) ? \e/ : \e/
\alt (\x/ := \e/ $\bm{\in}$ \t/) ? \e/ : \e/
\alt let \x/ = \e/; $\cdots{}$; \x/ = \e/; in \e/
\alt let rec \x/ = \e/; $\cdots{}$; \x/ = \e/; in \e/
\alt \o/

View File

@ -16,8 +16,8 @@ figure~\pref{fig:semantics:nix-light:patterns}
\e/[\assign{l_1}{\eone}; ...; \assign{l_n}{\en}]
}{}
\dstepa{raise \e/}{$\bot$}{}
\dstepa{($v \in $ ? \eone : $e_2$)}{\eone}{if $\vdash v : $}
\dstepa{($v \in $ ? \eone : $e_2$)}{$e_2$}{if $\vdash v : \lnot$}
\dstepa{($x := v \in $ ? \eone : $e_2$)}{\subst{x}{v}{\eone}}{if $\vdash v : $}
\dstepa{($x := v \in $ ? \eone : $e_2$)}{\subst{x}{v}{$e_2$}}{if $\vdash v : \lnot$}
\dstepa{let \xone = \eone; $\cdots{}$; \xn = \en; in \e/}{%
\e/[\assign{x_1}{\eone}; ...; \assign{x_n}{\en}]
}{}

View File

@ -28,13 +28,10 @@
\and
\inferrule{%
\Gamma \vdash e : \tau \\
% TODO: fix display of cases here
\begin{cases}
\tau \not\subtype \lnot t \Rightarrow \Gamma \vdash e_1 : \sigma_1 &
\tau \not\subtype t \Rightarrow \Gamma \vdash e_2 : \sigma_2
\end{cases}
; x : \wedge t \vdash e_1 : \sigma_1 \\
; x : \wedge \lnot t \vdash e_2 : \sigma_2
}{%
\Gamma \vdash ((e \in t) ? e_1 : e_2) : \sigma_1 \vee \sigma_2
\Gamma \vdash ((x := e \in t) ? e_1 : e_2) : \sigma_1 \vee \sigma_2
}
(Tcase)