diff --git a/macros.tex b/macros.tex index 853680d..d15f8a1 100644 --- a/macros.tex +++ b/macros.tex @@ -161,6 +161,7 @@ %% \newcommand{\defas}[0]{\mathrel{\overset{\makebox[0pt]{\mbox{\normalfont\tiny\text{def}}}}{=}}} \newcommand{\defnas}[0]{\mathrel{:=}} +\newcommand{\simdefas}[0]{\mathrel{\overset{\makebox[0pt]{\mbox{\normalfont\tiny\text{def}}}}{\simeq}}} %% %% Partiality diff --git a/thesis.tex b/thesis.tex index b6e1510..a82c9de 100644 --- a/thesis.tex +++ b/thesis.tex @@ -619,7 +619,7 @@ structure as follows. \begin{eqs} (A \eff E)\sigma &\defas& A\sigma \eff E\sigma\\ (A \to C)\sigma &\defas& A\sigma \to C\sigma\\ - (\forall \alpha^K.C)\sigma &\defas& \forall \alpha^K.C\sigma \quad \text{convert if } \alpha \in \dom(\sigma)\\ + (\forall \alpha^K.C)\sigma &\simdefas& \forall \alpha^K.C\sigma\\ \alpha\sigma &\defas& \begin{cases} A & \text{if } (\alpha,A) \in \sigma\\ \alpha & \text{otherwise} @@ -976,7 +976,7 @@ cannot be satisfied. \paragraph{Typing computations} The \tylab{App} rule states that an application $V\,W$ has computation -type $C$ if the abstractor term $V$ has type $A \to C$ and the +type $C$ if the function-term $V$ has type $A \to C$ and the argument term $W$ has type $A$, that is both the argument type and the domain type of the abstractor agree. % @@ -1050,87 +1050,83 @@ that the binder $x : A$. \label{fig:base-language-small-step} \end{figure} % -In this section we present the dynamic semantics of \BCalc{}. We -choose to use a contextual small-step semantics, since in conjunction -with fine-grain call-by-value, it yields a considerably simpler -semantics than the traditional structural operational semantics -(SOS)~\cite{Plotkin04a}, because only the rule for let bindings admits -a continuation whereas in ordinary call-by-value SOS each congruence -rule admits a continuation. -% - -The semantics are based on a substitution model of computation. Thus, -before presenting the reduction rules, we define an adequate -substitution function. As usual we work up to +In this section we present the dynamic semantics of \BCalc{}. We opt +to use a \citet{Felleisen87}-style contextual small-step semantics, +since in conjunction with fine-grain call-by-value (FGCBV), it yields +a considerably simpler semantics than the traditional structural +operational semantics (SOS)~\cite{Plotkin04a}, because only the rule +for let bindings admits a continuation wheres in ordinary +call-by-value SOS each congruence rule admits a continuation. +% +The simpler semantics comes at the expense of a more verbose syntax, +which is not a concern as one can readily convert between fine-grain +call-by-value and ordinary call-by-value. + +The reduction semantics are based on a substitution model of +computation. Thus, before presenting the reduction rules, we define an +adequate substitution function. As usual we work up to $\alpha$-conversion~\cite{Church32} of terms in $\BCalc{}$. % \paragraph{Term substitution} -We write $M[V/x]$ for the substitution of some value $V$ for some -variable $x$ in some computation term $M$. We use the same notation -for substitution on values, i.e. $W[V/x]$ denotes the substitution of -$V$ for $x$ in some value $W$. We define substitution as a ternary -function, whose signature is given by +We define a term substitution map, +$\sigma : (\VarCat \times \ValCat)^\ast$ as list of pairs mapping a +variable to its value replacement. We denote a single mapping as $V/x$ +meaning substitute $V$ for the variable $x$. We write multiple +mappings using list notation, i.e. $[V_0/x_0,\dots,V_n/x_n]$. The +domain of a substitution map is set generated by projecting the first +component, i.e. % \[ --[-/-] : \TermCat \times \ValCat \times \VarCat \to \CompCat, + \bl + \dom : (\VarCat \times \ValCat)^\ast \to \ValCat\\ + \dom(\sigma) \defas \{ x \mid (\_/x) \in \sigma \} + \el \] % -and we realise it by pattern matching on the first argument. +The application of a type substitution map on a term $t \in \TermCat$, +written $t\sigma$, is defined inductively on the term structure as +follows. % \[ +\ba[t]{@{~}l@{~}c@{~}r} + \begin{eqs} + x\sigma &\defas& \begin{cases} + V & \text{if } (x, V) \in \sigma\\ + x & \text{otherwise} + \end{cases}\\ + (\lambda x^A.M)\sigma &\simdefas& \lambda x^A.M\sigma\\ + (\Lambda \alpha^K.M)\sigma &\defas& \Lambda \alpha^K.M\sigma\\ + (V~T)\sigma &\defas& V\sigma~T + \end{eqs} + &~~& \begin{eqs} - x[V/y] &\defas& \begin{cases} - V & \text{if } x = y\\ - x & \text{otherwise } - \end{cases}\\ - (\lambda x^A.M)[V/y] &\defas& \lambda x^A.M[V/y] \quad \text{if } x \neq y \text{ and } x \notin \FV(V)\\ - (\Lambda \alpha^K. M)[V/y] &\defas& \Lambda \alpha^K. M[V/y]\\ - \Unit[V/y] &\defas& \Unit\\ - \Record{\ell = W; W'}[V/y] &\defas& \Record{\ell = W[V/y]; W'[V/y]}\\ - (\ell~W)^R[V/y] &\defas& (\ell~W[V/y])^R\\ - (W\,W')[V/y] &\defas& W[V/y]\,W'[V/y]\\ - (W\,T)[V/y] &\defas& W[V/y]~T\\ - (\ba[t]{@{}l} - \Let\;\Record{\ell = x; y} = W\\ - \In\;N)[V/z] - \ea &\defas& - \ba[t]{@{~}l} - \Let\;\Record{\ell = x; y} = W[V/z]\\ - \In\;N[V/z] - \ea \quad - \ba[t]{@{}l} - \text{if } x \neq z, y \neq z,\\ - \text{and } x,y\notin \FV(V) - \ea\\ - (\Case\;(\ell~W)^R\{ - \ba[t]{@{}l} - \ell~x \mapsto M\\ - ; y \mapsto N \})[V/z] - \ea - &\defas& - \Case\;(\ell~W[V/z])^R\{ - \ba[t]{@{}l} - \ell~x \mapsto M[V/z]\\ - ; y \mapsto N[V/z] \} - \ea\quad - \ba[t]{@{}l} - \text{if } x \neq z, y \neq z,\\ - \text{and } x, y \notin \FV(V) - \ea\\ - (\Let\;x \revto M \;\In\;N)[V/y] &\defas& \Let\;x \revto M[V/y] \;\In\;N[V/y] \quad\text{if } x \neq y \text{ and } x \notin \FV(V) - \end{eqs} - \] - % - % \begin{cases} - % \Let\;x \revto M[V/y]\;\In\;N & \text{if } x = y\\ - % \Let\;x \revto M[V/y]\;\In\;N[V/y] & \text{otherwise} - % \end{cases} - % \end{eqs} -% - We write $t[t_0/x_0,\dots,t_n/x_n]$ to mean the simultaneous - substitution of $t_0$ for $x_0$ up to $t_n$ for $x_n$ in $t$. - % - + (V~W)\sigma &\defas& V\sigma~W\sigma\\ + \Unit\sigma &\defas& \Unit\\ + \Record{\ell = V; W}\sigma &\defas& \Record{\ell = V\sigma;W\sigma}\\ + (\ell~V)^R\sigma &\defas& (\ell~V\sigma)^R\\ + \end{eqs}\bigskip\\ + \multicolumn{3}{c}{ + \begin{eqs} + (\Let\;\Record{\ell = x; y} = V\;\In\;N)\sigma &\simdefas& \Let\;\Record{\ell = x; y} = V\sigma\;\In\;N\sigma\\ + (\Case\;(\ell~V)^R\{ + \ell~x \mapsto M + ; y \mapsto N \})\sigma + &\simdefas& + \Case\;(\ell~V\sigma)^R\{ + \ell~x \mapsto M\sigma + ; y \mapsto N\sigma \}\\ + (\Let\;x \revto M \;\In\;N)\sigma &\simdefas& \Let\;x \revto M[V/y] \;\In\;N\sigma + \end{eqs}} +\ea +\] +% +The attentive reader will notice that we are using the same notation +for type and term substitutions. We justify this choice by the fact +that we can lift type substitution pointwise on the term syntax +constructors, enabling us to use one uniform notation for +substitution. Thus we shall generally allow a mix of pairs of +variables and values and pairs of type variables and types to occur in +the same substitution map. \paragraph{Reduction semantics} The reduction relation $\reducesto : \CompCat \pto \CompCat$ is defined