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

62 lines
1.1 KiB
TeX

\[
\begin{array}{l l l}
v & \coloneq & x \mid \vlam{x}{e} \mid \ints \mid \vectorvn
\\[8pt]
e & \coloneq & v \mid e~e \mid \vectoren \mid \aref{e}{e}
\\[8pt]
\tau & \coloneq & \tint \mid \tarray \mid \tau \rightarrow \tau
\\[8pt]
\tenv & \coloneq & \tenvempty \mid x:\tau,\tenv
\end{array}
\]
\fbox{$\typesto{e}{\tau}$}
\begin{mathpar}
\inferrule*[left=T-Var]{
\tenv(x) = \tau
}{
\typesto{x}{\tau}
}
\inferrule*[left=T-Lam]{
\typestogen{x:\tau,\tenv}{e}{\tau'}
}{
\typesto{\vlam{x}{e}}{\tau \rightarrow \tau'}
}
\inferrule*[left=T-App]{
\typesto{e_1}{\tau \rightarrow \tau'}
\\
\typesto{e_2}{\tau}
}{
\typesto{e_1~e_2}{\tau'}
}
\inferrule*[left=T-Int]{
i \in \ints
}{
\typesto{i}{\tint}
}
\inferrule*[left=T-Arr]{
\typesto{e_0}{\tint}
\\
\ldots
\\
\typesto{e_{n-1}}{\tint}
}{
\typesto{\vectoren}{\tarray}
}
\inferrule*[left=T-Ref]{
\typesto{e_1}{\tarray}
\\
\typesto{e_2}{\tint}
}{
\typesto{\aref{e_1}{e_2}}{\tint}
}
\end{mathpar}