trivial/popl-2017/fig-stlc-core.tex
2016-06-27 16:00:02 -04:00

70 lines
1.3 KiB
TeX

\[
\begin{array}{l l l}
\delta & \coloneq & \checkedref \mid \unsaferef
\\[8pt]
\ectx & \coloneq & \ehole \mid \ectx~e \mid (\vlam{x}{e})~\ectx \mid \vectorgen{v,\ldots,\ectx,e,\ldots} \mid
\\ & & \delta~E~e \mid \delta~v~E
\end{array}
\]
\fbox{$\typesto{\delta~e~e}{\tau}$}
\begin{mathpar}
\inferrule*[left=T-Check]{
\typesto{e_1}{\tarray}
\\
\typesto{e_2}{\tint}
}{
\typesto{\checkedref~e_1~e_2}{\tint}
}
\inferrule*[left=T-Unsafe]{
\typesto{\vectorvn}{\tarray}
\\
\typesto{i}{\tint}
}{
\typesto{\unsaferef~\vectorvn~i}{\tint}
}
\end{mathpar}
\fbox{$\smallstep{e}{e}$}
\begin{mathpar}
\inferrule*[left=E-Ctx]{
\smallstep{e}{e'}
}{
\smallstep{\ectx[e]}{\ectx[e']}
}
\inferrule*[left=E-Lam]{
}{
\smallstep{(\vlam{x}{e})~v}{e\esubst{x}{v}}
}
\inferrule*[left=E-CheckPass]{
0 \le i < n
}{
\smallstep{\checkedref~\vectorvn~i}{v_i}
}
\inferrule*[left=E-CheckFail]{
i < 0 ~~\vee~~ i \ge n
}{
\smallstep{\checkedref~\vectorvn~i}{\indexerror}
}
\inferrule*[left=E-UnsafePass]{
0 \le i < n
}{
\smallstep{\unsaferef~\vectorvn~i}{v_i}
}
\inferrule*[left=E-UnsafeFail]{
i < 0 ~~\vee~~ i \ge n
\\
x \in \ints \cup \{ \segfault \}
}{
\smallstep{\unsaferef~\vectorvn~i}{x}
}
\end{mathpar}