diff --git a/docs/iris/derived.tex b/docs/iris/derived.tex index 10b2cffd51d9dc9647798aed21a46f6f8ec5b358..857f881c7a34a7113552d421b0ab6b87b6d1dcea 100644 --- a/docs/iris/derived.tex +++ b/docs/iris/derived.tex @@ -93,27 +93,27 @@ Using these view shifts, we can prove STS variants of the invariant rules \ruler This holds by our premise. \end{proof} -\begin{proof}[Proof of \ruleref{VSSts}] -This is similar to above, so we only give the proof in short notation: - -\hproof{% - Context: $\knowInv\iname{\STSInv(\STSS, \pred, \gname)}$ \\ - \pline[\mask_1 \uplus \{\iname\}]{ - \ownGhost\gname{(s_0, T)} * P - } \\ - \pline[\mask_1]{% - \Exists s. \later\pred(s) * \ownGhost\gname{(s, S, T)} * P - } \qquad by \ruleref{StsOpen} \\ - Context: $s \in S \eqdef \upclose(\{s_0\}, T)$ \\ - \pline[\mask_2]{% - \Exists s', T'. \later\pred(s') * Q(s', T') * \ownGhost\gname{(s, S, T)} - } \qquad by premiss \\ - Context: $(s, T) \ststrans (s', T')$ \\ - \pline[\mask_2 \uplus \{\iname\}]{ - \ownGhost\gname{(s', T')} * Q(s', T') - } \qquad by \ruleref{StsClose} -} -\end{proof} +% \begin{proof}[Proof of \ruleref{VSSts}] +% This is similar to above, so we only give the proof in short notation: + +% \hproof{% +% Context: $\knowInv\iname{\STSInv(\STSS, \pred, \gname)}$ \\ +% \pline[\mask_1 \uplus \{\iname\}]{ +% \ownGhost\gname{(s_0, T)} * P +% } \\ +% \pline[\mask_1]{% +% \Exists s. \later\pred(s) * \ownGhost\gname{(s, S, T)} * P +% } \qquad by \ruleref{StsOpen} \\ +% Context: $s \in S \eqdef \upclose(\{s_0\}, T)$ \\ +% \pline[\mask_2]{% +% \Exists s', T'. \later\pred(s') * Q(s', T') * \ownGhost\gname{(s, S, T)} +% } \qquad by premiss \\ +% Context: $(s, T) \ststrans (s', T')$ \\ +% \pline[\mask_2 \uplus \{\iname\}]{ +% \ownGhost\gname{(s', T')} * Q(s', T') +% } \qquad by \ruleref{StsClose} +% } +% \end{proof} \subsection{Authoritative monoids with interpretation}\label{sec:authinterp} @@ -185,3 +185,8 @@ The view shifts in the specification follow immediately from \ruleref{GhostUpd} The first implication is immediate from the definition. The second implication follows by case distinction on $q_1 + q_2 \in (0, 1]$. + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "iris" +%%% End: diff --git a/docs/iris/logic.tex b/docs/iris/logic.tex index b4cfb69b564421aeccfe501829f01ed04896af24..2283fc838793d6425847411b6ea3c72cb75a7356 100644 --- a/docs/iris/logic.tex +++ b/docs/iris/logic.tex @@ -106,7 +106,7 @@ Let $\mcarp{M} \eqdef |\monoid| \setminus \{\mzero\}$. \paragraph{Signatures.} We use a signature to account syntactically for the logic's parameters. -A \emph{signature} $\SigNat = (\SigType, \SigFn)$ comprises a set +A \emph{signature} $\Sig = (\SigType, \SigFn)$ comprises a set \[ \SigType \supseteq \{ \textsort{Val}, \textsort{Exp}, \textsort{Ectx}, \textsort{State}, \textsort{Monoid}, \textsort{InvName}, \textsort{InvMask}, \Prop \} \] @@ -120,7 +120,7 @@ to express that $\sigfn$ is a function symbol with the indicated arity. \dave{Say something not-too-shabby about adequacy: We don't spell out what it means.} \paragraph{Syntax.} -Iris syntax is built up from a signature $\SigNat$ and a countably infinite set $\textdom{Var}$ of variables (ranged over by metavariables $x$, $y$, $z$, and $\pvar$): +Iris syntax is built up from a signature $\Sig$ and a countably infinite set $\textdom{Var}$ of variables (ranged over by metavariables $x$, $y$, $z$): \newcommand{\unitterm}{()}% \newcommand{\unitsort}{1}% \unit is bold. \begin{align*} @@ -145,9 +145,9 @@ Iris syntax is built up from a signature $\SigNat$ and a countably infinite set \prop * \prop \mid \prop \wand \prop \mid \\& - \MU \pvar. \pred \mid - \Exists x:\sort. \prop \mid - \All x:\sort. \prop \mid + \MU \var. \pred \mid + \Exists \var:\sort. \prop \mid + \All \var:\sort. \prop \mid \\& \knowInv{\term}{\prop} \mid \ownGGhost{\term} \mid @@ -164,7 +164,7 @@ Iris syntax is built up from a signature $\SigNat$ and a countably infinite set \sort \times \sort \mid \sort \to \sort \end{align*} -Recursive predicates must be \emph{guarded}: in $\MU \pvar. \pred$, the variable $\pvar$ can only appear under the later $\later$ modality. +Recursive predicates must be \emph{guarded}: in $\MU \var. \pred$, the variable $\var$ can only appear under the later $\later$ modality. \paragraph{Metavariable conventions.} We introduce additional metavariables ranging over terms and generally let the choice of metavariable indicate the term's sort: @@ -196,13 +196,13 @@ We omit type annotations in binders, when the type is clear from context. \subsection{Types}\label{sec:types} Iris terms are simply-typed. -The judgment $\vctx \proves_\SigNat \wtt{\term}{\sort}$ expresses that, in signature $\SigNat$ and variable context $\vctx$, the term $\term$ has sort $\sort$. +The judgment $\vctx \proves_\Sig \wtt{\term}{\sort}$ expresses that, in signature $\Sig$ and variable context $\vctx$, the term $\term$ has sort $\sort$. In giving the rules for this judgment, we omit the signature (which does not change). A variable context, $\vctx = x_1:\sort_1, \dots, x_n:\sort_n$, declares a list of variables and their sorts. In writing $\vctx, x:\sort$, we presuppose that $x$ is not already declared in $\vctx$. -\judgment{Well-typed terms}{\vctx \proves_\SigNat \wtt{\term}{\sort}} +\judgment{Well-typed terms}{\vctx \proves_\Sig \wtt{\term}{\sort}} \begin{mathparpagebreakable} %%% variables and function symbols \axiom{x : \sort \proves \wtt{x}{\sort}} @@ -274,10 +274,10 @@ In writing $\vctx, x:\sort$, we presuppose that $x$ is not already declared in $ {\vctx \proves \wtt{\prop \wand \propB}{\Prop}} \and \infer{ - \vctx, \pvar:\sort\to\Prop \proves \wtt{\pred}{\sort\to\Prop} \and - \text{$\pvar$ is guarded in $\pred$} + \vctx, \var:\sort\to\Prop \proves \wtt{\pred}{\sort\to\Prop} \and + \text{$\var$ is guarded in $\pred$} }{ - \vctx \proves \wtt{\MU \pvar. \pred}{\sort\to\Prop} + \vctx \proves \wtt{\MU \var. \pred}{\sort\to\Prop} } \and \infer{\vctx, x:\sort \proves \wtt{\prop}{\Prop}} @@ -410,31 +410,31 @@ Soundness follows from the theorem that ${\cal U}(\any, \textdom{Prop}) {\pfctx \proves \exists X: \sort. \prop} \and \infer[$\forall_2$I] - {\pfctx, \pvar: \Pred(\sort) \proves \prop} - {\pfctx \proves \forall \pvar\in \Pred(\sort).\; \prop} + {\pfctx, \var: \Pred(\sort) \proves \prop} + {\pfctx \proves \forall \var\in \Pred(\sort).\; \prop} \and \infer[$\forall_2$E] - {\pfctx \proves \forall \pvar. \prop \\ + {\pfctx \proves \forall \var. \prop \\ \pfctx \proves \propB: \Prop} - {\pfctx \proves \prop[\propB/\pvar]} + {\pfctx \proves \prop[\propB/\var]} \and \infer[$\exists_2$E] - {\pfctx \proves \exists \pvar \in \Pred(\sort).\prop \\ - \pfctx, \pvar : \Pred(\sort), \prop \proves \propB} + {\pfctx \proves \exists \var \in \Pred(\sort).\prop \\ + \pfctx, \var : \Pred(\sort), \prop \proves \propB} {\pfctx \proves \propB} \and \infer[$\exists_2$I] - {\pfctx \proves \prop[\propB/\pvar] \\ + {\pfctx \proves \prop[\propB/\var] \\ \pfctx \proves \propB: \Prop} - {\pfctx \proves \exists \pvar. \prop} + {\pfctx \proves \exists \var. \prop} \and \inferB[Elem] {\pfctx \proves \term \in (X \in \sort). \prop} {\pfctx \proves \prop[\term/X]} \and \inferB[Elem-$\mu$] - {\pfctx \proves \term \in (\mu\pvar \in \Pred(\sort). \pred)} - {\pfctx \proves \term \in \pred[\mu\pvar \in \Pred(\sort). \pred/\pvar]} + {\pfctx \proves \term \in (\mu\var \in \Pred(\sort). \pred)} + {\pfctx \proves \term \in \pred[\mu\var \in \Pred(\sort). \pred/\var]} \end{mathpar} \subsection{Axioms from the logic of (affine) bunched implications} diff --git a/docs/iris/model.tex b/docs/iris/model.tex index ab298e7d1e6ab42deaba57e3766a58fa88ab06c5..0135b58ab14e9567dd3aacbd81a3e06d7a963472 100644 --- a/docs/iris/model.tex +++ b/docs/iris/model.tex @@ -149,36 +149,36 @@ For a set $X$, write $\Delta X$ for the discrete c.o.f.e.\ with $x \nequiv{n} x'$ iff $n = 0$ or $x = x'$ \[ \begin{array}[t]{@{}l@{\ }c@{\ }l@{}} -\semSort{\textsort{Unit}} &\eqdef& \Delta \{ \star \} \\ -\semSort{\textsort{InvName}} &\eqdef& \Delta \mathbb{N} \\ -\semSort{\textsort{InvMask}} &\eqdef& \Delta \pset{\mathbb{N}} \\ -\semSort{\textsort{Monoid}} &\eqdef& \Delta |\monoid| +\Sem{\textsort{Unit}} &\eqdef& \Delta \{ \star \} \\ +\Sem{\textsort{InvName}} &\eqdef& \Delta \mathbb{N} \\ +\Sem{\textsort{InvMask}} &\eqdef& \Delta \pset{\mathbb{N}} \\ +\Sem{\textsort{Monoid}} &\eqdef& \Delta |\monoid| \end{array} \qquad\qquad \begin{array}[t]{@{}l@{\ }c@{\ }l@{}} -\semSort{\textsort{Val}} &\eqdef& \Delta \textdom{Val} \\ -\semSort{\textsort{Exp}} &\eqdef& \Delta \textdom{Exp} \\ -\semSort{\textsort{Ectx}} &\eqdef& \Delta \textdom{Ectx} \\ -\semSort{\textsort{State}} &\eqdef& \Delta \textdom{State} \\ +\Sem{\textsort{Val}} &\eqdef& \Delta \textdom{Val} \\ +\Sem{\textsort{Exp}} &\eqdef& \Delta \textdom{Exp} \\ +\Sem{\textsort{Ectx}} &\eqdef& \Delta \textdom{Ectx} \\ +\Sem{\textsort{State}} &\eqdef& \Delta \textdom{State} \\ \end{array} \qquad\qquad \begin{array}[t]{@{}l@{\ }c@{\ }l@{}} -\semSort{\sort \times \sort'} &\eqdef& \semSort{\sort} \times \semSort{\sort} \\ -\semSort{\sort \to \sort'} &\eqdef& \semSort{\sort} \to \semSort{\sort} \\ -\semSort{\Prop} &\eqdef& \textdom{Prop} \\ +\Sem{\sort \times \sort'} &\eqdef& \Sem{\sort} \times \Sem{\sort} \\ +\Sem{\sort \to \sort'} &\eqdef& \Sem{\sort} \to \Sem{\sort} \\ +\Sem{\Prop} &\eqdef& \textdom{Prop} \\ \end{array} \] -The balance of our signature $\SigNat$ is interpreted as follows. +The balance of our signature $\Sig$ is interpreted as follows. For each base type $\type$ not covered by the preceding table, we pick an object $X_\type$ in $\cal U$ and define \[ -\semSort{\type} \eqdef X_\type +\Sem{\type} \eqdef X_\type \] -For each function symbol $\sigfn : \type_1, \dots, \type_n \to \type_{n+1} \in \SigFn$, we pick an arrow $\Sem{\sigfn} : \semSort{\type_1} \times \dots \times \semSort{\type_n} \to \semSort{\type_{n+1}}$ in $\cal U$. +For each function symbol $\sigfn : \type_1, \dots, \type_n \to \type_{n+1} \in \SigFn$, we pick an arrow $\Sem{\sigfn} : \Sem{\type_1} \times \dots \times \Sem{\type_n} \to \Sem{\type_{n+1}}$ in $\cal U$. An environment $\vctx$ is interpreted as the set of maps $\rho$, with $\dom(\rho) = \dom(\vctx)$ and -$\rho(x)\in\semSort{\vctx(x)}$, +$\rho(x)\in\Sem{\vctx(x)}$, and $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land \All x\in\dom(\rho). \rho(x) \nequiv{n} \rho'(x)\bigr)$. @@ -420,89 +420,89 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land \[ \mathit{wp}_\mask(\val, q) = \mathit{vs}_{\mask}^{\mask}(q \: \val) \] \end{lem} -\typedsection{Interpretation of terms}{\Sem{\vctx \proves \term : \sort} : \Sem{\vctx} \to \semSort{\sort} \in {\cal U}} +\typedsection{Interpretation of terms}{\Sem{\vctx \proves \term : \sort} : \Sem{\vctx} \to \Sem{\sort} \in {\cal U}} -%A term $\vctx \proves \term : \sort$ is interpreted as a non-expansive map from $\Sem{\vctx}$ to $\semSort{\sort}$. +%A term $\vctx \proves \term : \sort$ is interpreted as a non-expansive map from $\Sem{\vctx}$ to $\Sem{\sort}$. \begin{align*} - \semTerm{\vctx \proves x : \sort}_\gamma &= \gamma(x) \\ - \semTerm{\vctx \proves \sigfn(\term_1, \dots, \term_n) : \type_{n+1}}_\gamma &= \Sem{\sigfn}(\semTerm{\vctx \proves \term_1 : \type_1}_\gamma, \dots, \semTerm{\vctx \proves \term_n : \type_n}_\gamma) \ \WHEN \sigfn : \type_1, \dots, \type_n \to \type_{n+1} \in \SigFn \\ - \semTerm{\vctx \proves \Lam x. \term : \sort \to \sort'}_\gamma &= - \Lam v : \semSort{\sort}. \semTerm{\vctx, x : \sort \proves \term : \sort'}_{\gamma[x \mapsto v]} \\ - \semTerm{\vctx \proves \term~\termB : \sort'}_\gamma &= - \semTerm{\vctx \proves \term : \sort \to \sort'}_\gamma(\semTerm{\vctx \proves \termB : \sort}_\gamma) \\ - \semTerm{\vctx \proves \unitterm : \unitsort}_\gamma &= \star \\ - \semTerm{\vctx \proves (\term_1, \term_2) : \sort_1 \times \sort_2}_\gamma &= (\semTerm{\vctx \proves \term_1 : \sort_1}_\gamma, \semTerm{\vctx \proves \term_2 : \sort_2}_\gamma) \\ - \semTerm{\vctx \proves \pi_i~\term : \sort_1}_\gamma &= \pi_i(\semTerm{\vctx \proves \term : \sort_1 \times \sort_2}_\gamma) + \Sem{\vctx \proves x : \sort}_\gamma &= \gamma(x) \\ + \Sem{\vctx \proves \sigfn(\term_1, \dots, \term_n) : \type_{n+1}}_\gamma &= \Sem{\sigfn}(\Sem{\vctx \proves \term_1 : \type_1}_\gamma, \dots, \Sem{\vctx \proves \term_n : \type_n}_\gamma) \ \WHEN \sigfn : \type_1, \dots, \type_n \to \type_{n+1} \in \SigFn \\ + \Sem{\vctx \proves \Lam x. \term : \sort \to \sort'}_\gamma &= + \Lam v : \Sem{\sort}. \Sem{\vctx, x : \sort \proves \term : \sort'}_{\gamma[x \mapsto v]} \\ + \Sem{\vctx \proves \term~\termB : \sort'}_\gamma &= + \Sem{\vctx \proves \term : \sort \to \sort'}_\gamma(\Sem{\vctx \proves \termB : \sort}_\gamma) \\ + \Sem{\vctx \proves \unitterm : \unitsort}_\gamma &= \star \\ + \Sem{\vctx \proves (\term_1, \term_2) : \sort_1 \times \sort_2}_\gamma &= (\Sem{\vctx \proves \term_1 : \sort_1}_\gamma, \Sem{\vctx \proves \term_2 : \sort_2}_\gamma) \\ + \Sem{\vctx \proves \pi_i~\term : \sort_1}_\gamma &= \pi_i(\Sem{\vctx \proves \term : \sort_1 \times \sort_2}_\gamma) \end{align*} % \begin{align*} - \semTerm{\vctx \proves \mzero : \textsort{Monoid}}_\gamma &= \mzero \\ - \semTerm{\vctx \proves \munit : \textsort{Monoid}}_\gamma &= \munit \\ - \semTerm{\vctx \proves \melt \mtimes \meltB : \textsort{Monoid}}_\gamma &= - \semTerm{\vctx \proves \melt : \textsort{Monoid}}_\gamma \mtimes \semTerm{\vctx \proves \meltB : \textsort{Monoid}}_\gamma + \Sem{\vctx \proves \mzero : \textsort{Monoid}}_\gamma &= \mzero \\ + \Sem{\vctx \proves \munit : \textsort{Monoid}}_\gamma &= \munit \\ + \Sem{\vctx \proves \melt \mtimes \meltB : \textsort{Monoid}}_\gamma &= + \Sem{\vctx \proves \melt : \textsort{Monoid}}_\gamma \mtimes \Sem{\vctx \proves \meltB : \textsort{Monoid}}_\gamma \end{align*} % \begin{align*} - \semTerm{\vctx \proves t =_\sort u : \Prop}_\gamma &= - \Lam W. \{\, (n, r) \mid \semTerm{\vctx \proves t : \sort}_\gamma \nequiv{n+1} \semTerm{\vctx \proves u : \sort}_\gamma \,\} \\ - \semTerm{\vctx \proves \FALSE : \Prop}_\gamma &= \Lam W. \emptyset \\ - \semTerm{\vctx \proves \TRUE : \Prop}_\gamma &= \Lam W. \mathbb{N} \times \textdom{Res} \\ - \semTerm{\vctx \proves P \land Q : \Prop}_\gamma &= - \Lam W. \semTerm{\vctx \proves P : \Prop}_\gamma(W) \cap \semTerm{\vctx \proves Q : \Prop}_\gamma(W) \\ - \semTerm{\vctx \proves P \lor Q : \Prop}_\gamma &= - \Lam W. \semTerm{\vctx \proves P : \Prop}_\gamma(W) \cup \semTerm{\vctx \proves Q : \Prop}_\gamma(W) \\ - \semTerm{\vctx \proves P \Ra Q : \Prop}_\gamma &= + \Sem{\vctx \proves t =_\sort u : \Prop}_\gamma &= + \Lam W. \{\, (n, r) \mid \Sem{\vctx \proves t : \sort}_\gamma \nequiv{n+1} \Sem{\vctx \proves u : \sort}_\gamma \,\} \\ + \Sem{\vctx \proves \FALSE : \Prop}_\gamma &= \Lam W. \emptyset \\ + \Sem{\vctx \proves \TRUE : \Prop}_\gamma &= \Lam W. \mathbb{N} \times \textdom{Res} \\ + \Sem{\vctx \proves P \land Q : \Prop}_\gamma &= + \Lam W. \Sem{\vctx \proves P : \Prop}_\gamma(W) \cap \Sem{\vctx \proves Q : \Prop}_\gamma(W) \\ + \Sem{\vctx \proves P \lor Q : \Prop}_\gamma &= + \Lam W. \Sem{\vctx \proves P : \Prop}_\gamma(W) \cup \Sem{\vctx \proves Q : \Prop}_\gamma(W) \\ + \Sem{\vctx \proves P \Ra Q : \Prop}_\gamma &= \Lam W. \begin{aligned}[t] \{\, (n, r) &\mid \All n' \leq n. \All W' \geq W. \All r' \geq r. \\ &\qquad - (n', r') \in \semTerm{\vctx \proves P : \Prop}_\gamma(W')~ \\ + (n', r') \in \Sem{\vctx \proves P : \Prop}_\gamma(W')~ \\ &\qquad - \implies (n', r') \in \semTerm{\vctx \proves Q : \Prop}_\gamma(W') \,\} + \implies (n', r') \in \Sem{\vctx \proves Q : \Prop}_\gamma(W') \,\} \end{aligned} \\ - \semTerm{\vctx \proves \All x : \sort. P : \Prop}_\gamma &= - \Lam W. \{\, (n, r) \mid \All v \in \semSort{\sort}. (n, r) \in \semTerm{\vctx, x : \sort \proves P : \Prop}_{\gamma[x \mapsto v]}(W) \,\} \\ - \semTerm{\vctx \proves \Exists x : \sort. P : \Prop}_\gamma &= - \Lam W. \{\, (n, r) \mid \Exists v \in \semSort{\sort}. (n, r) \in \semTerm{\vctx, x : \sort \proves P : \Prop}_{\gamma[x \mapsto v]}(W) \,\} + \Sem{\vctx \proves \All x : \sort. P : \Prop}_\gamma &= + \Lam W. \{\, (n, r) \mid \All v \in \Sem{\sort}. (n, r) \in \Sem{\vctx, x : \sort \proves P : \Prop}_{\gamma[x \mapsto v]}(W) \,\} \\ + \Sem{\vctx \proves \Exists x : \sort. P : \Prop}_\gamma &= + \Lam W. \{\, (n, r) \mid \Exists v \in \Sem{\sort}. (n, r) \in \Sem{\vctx, x : \sort \proves P : \Prop}_{\gamma[x \mapsto v]}(W) \,\} \end{align*} % \begin{align*} - \semTerm{\vctx \proves \always{\prop} : \Prop}_\gamma &= \always{\semTerm{\vctx \proves \prop : \Prop}_\gamma} \\ - \semTerm{\vctx \proves \later{\prop} : \Prop}_\gamma &= \later \semTerm{\vctx \proves \prop : \Prop}_\gamma\\ - \semTerm{\vctx \proves \MU x. \pred : \sort \to \Prop}_\gamma &= - \mathit{fix}(\Lam v : \semSort{\sort \to \Prop}. \semTerm{\vctx, x : \sort \to \Prop \proves \pred : \sort \to \Prop}_{\gamma[x \mapsto v]}) \\ - \semTerm{\vctx \proves \prop * \propB : \Prop}_\gamma &= + \Sem{\vctx \proves \always{\prop} : \Prop}_\gamma &= \always{\Sem{\vctx \proves \prop : \Prop}_\gamma} \\ + \Sem{\vctx \proves \later{\prop} : \Prop}_\gamma &= \later \Sem{\vctx \proves \prop : \Prop}_\gamma\\ + \Sem{\vctx \proves \MU x. \pred : \sort \to \Prop}_\gamma &= + \mathit{fix}(\Lam v : \Sem{\sort \to \Prop}. \Sem{\vctx, x : \sort \to \Prop \proves \pred : \sort \to \Prop}_{\gamma[x \mapsto v]}) \\ + \Sem{\vctx \proves \prop * \propB : \Prop}_\gamma &= \begin{aligned}[t] \Lam W. \{\, (n, r) &\mid \Exists r_1, r_2. r = r_1 \bullet r_2 \land{} \\ &\qquad - (n, r_1) \in \semTerm{\vctx \proves \prop : \Prop}_\gamma \land{} \\ + (n, r_1) \in \Sem{\vctx \proves \prop : \Prop}_\gamma \land{} \\ &\qquad - (n, r_2) \in \semTerm{\vctx \proves \propB : \Prop}_\gamma \,\} + (n, r_2) \in \Sem{\vctx \proves \propB : \Prop}_\gamma \,\} \end{aligned} \\ - \semTerm{\vctx \proves \prop \wand \propB : \Prop}_\gamma &= + \Sem{\vctx \proves \prop \wand \propB : \Prop}_\gamma &= \begin{aligned}[t] \Lam W. \{\, (n, r) &\mid \All n' \leq n. \All W' \geq W. \All r'. \\ &\qquad - (n', r') \in \semTerm{\vctx \proves \prop : \Prop}_\gamma(W') \land r \sep r' \\ + (n', r') \in \Sem{\vctx \proves \prop : \Prop}_\gamma(W') \land r \sep r' \\ &\qquad - \implies (n', r \bullet r') \in \semTerm{\vctx \proves \propB : \Prop}_\gamma(W') + \implies (n', r \bullet r') \in \Sem{\vctx \proves \propB : \Prop}_\gamma(W') \} \end{aligned} \\ - \semTerm{\vctx \proves \knowInv{\iname}{\prop} : \Prop}_\gamma &= - inv(\semTerm{\vctx \proves \iname : \textsort{InvName}}_\gamma, \semTerm{\vctx \proves \prop : \Prop}_\gamma) \\ - \semTerm{\vctx \proves \ownGGhost{\melt} : \Prop}_\gamma &= - \Lam W. \{\, (n, \rs) \mid \rs.\ghostRes \geq \semTerm{\vctx \proves \melt : \textsort{Monoid}}_\gamma \,\} \\ - \semTerm{\vctx \proves \ownPhys{\state} : \Prop}_\gamma &= - \Lam W. \{\, (n, \rs) \mid \rs.\pres = \semTerm{\vctx \proves \state : \textsort{State}}_\gamma \,\} + \Sem{\vctx \proves \knowInv{\iname}{\prop} : \Prop}_\gamma &= + inv(\Sem{\vctx \proves \iname : \textsort{InvName}}_\gamma, \Sem{\vctx \proves \prop : \Prop}_\gamma) \\ + \Sem{\vctx \proves \ownGGhost{\melt} : \Prop}_\gamma &= + \Lam W. \{\, (n, \rs) \mid \rs.\ghostRes \geq \Sem{\vctx \proves \melt : \textsort{Monoid}}_\gamma \,\} \\ + \Sem{\vctx \proves \ownPhys{\state} : \Prop}_\gamma &= + \Lam W. \{\, (n, \rs) \mid \rs.\pres = \Sem{\vctx \proves \state : \textsort{State}}_\gamma \,\} \end{align*} % \begin{align*} - \semTerm{\vctx \proves \pvsA{\prop}{\mask_1}{\mask_2} : \Prop}_\gamma &= - \textdom{vs}^{\semTerm{\vctx \proves \mask_2 : \textsort{InvMask}}_\gamma}_{\semTerm{\vctx \proves \mask_1 : \textsort{InvMask}}_\gamma}(\semTerm{\vctx \proves \prop : \Prop}_\gamma) \\ - \semTerm{\vctx \proves \dynA{\expr}{\pred}{\mask} : \Prop}_\gamma &= - \textdom{wp}_{\semTerm{\vctx \proves \mask : \textsort{InvMask}}_\gamma}(\semTerm{\vctx \proves \expr : \textsort{Exp}}_\gamma, \semTerm{\vctx \proves \pred : \textsort{Val} \to \Prop}_\gamma) \\ - \semTerm{\vctx \proves \wtt{\timeless{\prop}}{\Prop}}_\gamma &= - \textdom{timeless}(\semTerm{\vctx \proves \prop : \Prop}_\gamma) + \Sem{\vctx \proves \pvsA{\prop}{\mask_1}{\mask_2} : \Prop}_\gamma &= + \textdom{vs}^{\Sem{\vctx \proves \mask_2 : \textsort{InvMask}}_\gamma}_{\Sem{\vctx \proves \mask_1 : \textsort{InvMask}}_\gamma}(\Sem{\vctx \proves \prop : \Prop}_\gamma) \\ + \Sem{\vctx \proves \dynA{\expr}{\pred}{\mask} : \Prop}_\gamma &= + \textdom{wp}_{\Sem{\vctx \proves \mask : \textsort{InvMask}}_\gamma}(\Sem{\vctx \proves \expr : \textsort{Exp}}_\gamma, \Sem{\vctx \proves \pred : \textsort{Val} \to \Prop}_\gamma) \\ + \Sem{\vctx \proves \wtt{\timeless{\prop}}{\Prop}}_\gamma &= + \textdom{timeless}(\Sem{\vctx \proves \prop : \Prop}_\gamma) \end{align*} \typedsection{Interpretation of entailment}{\Sem{\vctx \mid \pfctx \proves \prop} : 2 \in \mathit{Sets}} @@ -514,10 +514,10 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land \forall n \in \mathbb{N}.\; \forall W \in \textdom{World}.\; \forall \rs \in \textdom{Res}.\; -\forall \gamma \in \semSort{\vctx},\; +\forall \gamma \in \Sem{\vctx},\; \\& -\bigl(\All \propB \in \pfctx. (n, \rs) \in \semTerm{\vctx \proves \propB : \Prop}_\gamma(W)\bigr) -\implies (n, \rs) \in \semTerm{\vctx \proves \prop : \Prop}_\gamma(W) +\bigl(\All \propB \in \pfctx. (n, \rs) \in \Sem{\vctx \proves \propB : \Prop}_\gamma(W)\bigr) +\implies (n, \rs) \in \Sem{\vctx \proves \prop : \Prop}_\gamma(W) \end{aligned} \] diff --git a/docs/setup.tex b/docs/setup.tex index b8e184fcc46bf33ef941974569d80733eb04e912..5ba0f0f2009666a8079fc745dde7f71f51c5715b 100644 --- a/docs/setup.tex +++ b/docs/setup.tex @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% PACKAGES +%% PACKAGES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{mathtools} %\usepackage{amsmath} @@ -32,7 +32,7 @@ \usepackage{hyperref} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SETUP +%% SETUP %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \extrarowheight=\jot % else, arrays are scrunched compared to, say, aligned @@ -85,7 +85,7 @@ \newtheorem{exercise}{Exercise} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% FONTS & FORMATTING +%% FONTS & FORMATTING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \SetSymbolFont{stmry}{bold}{U}{stmry}{m}{n} % this fixes warnings when \boldsymbol is used with stmaryrd included @@ -97,7 +97,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% GENERIC MACROS +%% GENERIC MACROS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand*{\Sref}[1]{\hyperref[#1]{\S\ref*{#1}}} \newcommand*{\secref}[1]{\hyperref[#1]{Section~\ref*{#1}}} @@ -112,18 +112,31 @@ \newcommand{\changes}{{\bf\color{red}{Changes}}} \newcommand{\TODO}{\vskip 4pt {\color{red}\bf TODO}} -%\newcommand{\bigast}{\scalebox{3}{\raisebox{-0.3ex}{$\ast$}}} -%\newcommand{\bigtimes}{\scalebox{2.5}{\raisebox{-0.3ex}{$\times$}}} -\DeclareMathOperator*{\Sep}{\scalerel*{\ast}{\sum}} -\newcommand{\bigast}{\Sep} -\newcommand*{\sep}[1][]{\mathrel{\#_{#1}}} % bad name; it's a different "sep" +\newcommand{\ie}{\emph{i.e.,} } +\newcommand{\eg}{\emph{e.g.,} } +\newcommand{\etal}{\emph{et~al.}} +\newcommand{\wrt}{w.r.t.~} -\newcommand{\ALT}{\ |\ } +\newcommand{\aaron}[1]{{\color{red}\textbf{AT: #1}}} +\newcommand{\derek}[1]{{\color{red}\textbf{DD: #1}}} +\newcommand{\lars}[1]{{\color{red}\textbf{LB: #1}}} +\newcommand{\kasper}[1]{{\color{red}\textbf{KS: #1}}} +\newcommand{\ralf}[1]{{\color{red}\textbf{RJ: #1}}} +\newcommand{\dave}[1]{{\color{red}\textbf{PDS: #1}}} +\newcommand{\hush}[1]{} +\newcommand{\relaxguys}{% + \let\aaron\hush% + \let\derek\hush% + \let\lars\hush% + \let\kasper\hush% + \let\ralf\hush% + \let\dave\hush% +} -\newenvironment{pf} - {\resetpfcounter\begin{proof}} - {\end{proof}} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MATH SYMBOLS & NOTATION & IDENTIFIERS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % superscript to the left \def\presuper#1#2% @@ -132,226 +145,196 @@ \kern-\scriptspace% #2} +\DeclareMathOperator*{\Sep}{\scalerel*{\ast}{\sum}} +\newcommand{\bigast}{\Sep} + +\newcommand*{\sep}[1][]{\mathrel{\#_{#1}}} % bad name; it's a different "sep" + +\newcommand{\ALT}{\ |\ } + \newcommand{\upclose}{\mathord{\uparrow}} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% LANGUAGE-LEVEL SYNTAX AND SEMANTICS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\All #1.{\forall #1.\;}% +\def\Exists #1.{\exists #1.\;}% +\def\Ret #1.{#1.\;}% -\newcommand{\cfg}[2]{{#1};{#2}} -\newcommand{\fork}[1]{\textlang{fork}\;{#1}} +\newcommand{\any}{{\rule[-.2ex]{1ex}{.4pt}}}% +\newcommand{\unitval}{()}% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% METAVARIABLES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newcommand{\aexpr}{a} -\newcommand{\expr}{e} -\newcommand{\type}{\tau} -\newcommand{\htype}{\sigma} -\newcommand{\ctype}{\sigma} -\newcommand{\heap}{h} -\newcommand{\tyvar}{\alpha} -\newcommand{\tyvarB}{\beta} -\newcommand{\val}{v} -\newcommand{\valB}{w} -\newcommand{\hval}{u} -\newcommand{\tls}{L} -\newcommand{\tlsVar}{L} +\newcommand{\judgment}[2]{\paragraph{#1}\hspace{\stretch{1}}\fbox{$#2$}} -\newcommand{\cenv}{\Omega} -\newcommand{\tenv}{\Gamma} -\newcommand{\tvenv}{\Delta} +\newcommand{\pfn}{\rightharpoonup} +\newcommand{\fpfn}{\stackrel{\textrm{fin}}{\rightharpoonup}} +\newcommand{\ra}{\rightarrow} +\newcommand{\Ra}{\Rightarrow} +\newcommand{\Lra}{\Leftrightarrow} +\newcommand{\monra}{\stackrel{\textrm{mon}}{\rightarrow}} -%\newcommand{\vctx}{\mathcal{X}} -\newcommand{\pvar}{p} -\newcommand{\pvarB}{q} -%\newcommand{\pvarC}{r} +\newcommand{\eqdef}{\triangleq} -\newcommand{\ectx}{K} -\newcommand{\tpool}{T} +\newcommand{\restr}[2]{\lfloor #1 \rfloor_{#2}} +\newcommand{\pset}[1]{\wp(#1)} % Powerset +\newcommand{\psetdown}[1]{\wp^\downarrow(#1)} -% \newcommand{\progexpr}{p} -% \newcommand{\progctx}{D} +\newcommand{\dom}{\textrm{dom}} +%\newcommand{\rng}{\textrm{rng}} +%\newcommand{\cod}{\textrm{cod}} -\newcommand{\subst}{\gamma} -%\newcommand{\island}{I} -\newcommand{\sisland}{\iota} -%\newcommand{\islands}{\omega} -%\newcommand{\islands}{\mathbf{\island}} +\newcommand{\IF}{\mathrel{\text{if}}} +\newcommand{\WHEN}{\textrm{when }} -\newcommand{\predinterp}{\PRED} -\newcommand{\propinterp}{\mathcal{P}} -\newcommand{\PROP}{\mathcal{P}} -\newcommand{\PROPB}{\mathcal{Q}} -\newcommand{\interp}{\textrm{interp}} -\newcommand{\interps}{\textrm{interpAll}} +\newcommand{\SET}[2]{ +\left\{% +#1% +\;\middle|\;% +#2% +\right\} +} +\newcommand{\SETB}[1]{ +\left\{% +#1% +\right\} +} +\newcommand{\SETC}[2]{#1 & #2} -\newcommand{\restype}{\theta} -\newcommand{\restypes}{\boldsymbol{\theta}} +\newenvironment{inbox}[1][]{ + \begin{array}[#1]{@{}l@{}} +}{ + \end{array} +} +\newcommand{\tabubox}[2][]{% + \begin{tabu}{@{#1}X[1,l,m]@{}}% + #2 % + \end{tabu}% +} -%\newcommand{\aprop}{{\color{red}A}} -\newcommand{\prop}{P} -\newcommand{\propB}{Q} -\newcommand{\propC}{R} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% CMRA (RESOURCE ALGEBRA) SYMBOLS & NOTATION & IDENTIFIERS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\monoid}{M} -\newcommand{\pred}{\varphi} -\newcommand{\predB}{\psi} -\newcommand{\predC}{\zeta} +\newcommand{\melt}{a} +\newcommand{\meltB}{b} +\newcommand{\meltC}{c} +\newcommand{\melts}{A} +\newcommand{\meltsB}{B} + +\newcommand{\mcar}[1]{|#1|} +\newcommand{\mcarp}[1]{\mcar{#1}^{+}} +\newcommand{\mzero}{\bot} +\newcommand{\munit}{\mathord{\varepsilon}} +\newcommand{\mtimes}{\mathbin{\cdot}} -% \newcommand{\Prop}{\mathbb{B}} -% \newcommand{\Pred}{\mathbb{P}} +\newcommand{\mupd}{\rightsquigarrow} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MODEL-SPECIFIC SYMBOLS & NOTATION & IDENTIFIERS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\wIso}{\xi} \newcommand{\rs}{r} \newcommand{\rsB}{s} -%\newcommand{\propSet}{\mathcal{P}} -%\newcommand{\apropSet}{\mathcal{A}} -%\newcommand{\pfctx}{\mathcal{C}} -\newcommand{\vctx}{\Gamma} -\newcommand{\pfctx}{\Theta} +\newcommand{\pres}{\pi} +\newcommand{\ghostRes}{g} -\newcommand{\assert}{\varphi} -\newcommand{\assertB}{\psi} +%% Various pieces of syntax +\newcommand{\fullSat}[4]{#1 \models_{#2} #3; #4} -\newcommand{\PRED}{\Phi} +\newcommand{\wtt}[2]{#1 : #2} % well-typed term -%% \newcommand{\pname}{\pi} -%% \newcommand{\prot}{\pi} -%% \newcommand{\prots}{\boldsymbol{\pi}} -%% \newcommand{\protSet}{\mathcal{N}} +\newcommand{\nequiv}[1]{\ensuremath{\mathrel{\stackrel{#1}{=}}}} +\newcommand{\notnequiv}[1]{\ensuremath{\mathrel{\stackrel{#1}{\neq}}}} +\newcommand{\nequivset}[2]{\ensuremath{\mathrel{\stackrel{#1}{=}_{#2}}}} +\newcommand{\nequivB}[1]{\ensuremath{\mathrel{\stackrel{#1}{\equiv}}}} +\newcommand{\latert}{\mathord{\blacktriangleright}} -\newcommand{\iname}{\iota} -\newcommand{\inameB}{\iota'} -\newcommand{\inv}{I} -\newcommand{\invs}{\mathcal{I}} -\newcommand{\mask}{\mathcal{E}} +\newcommand{\Sem}[1]{\llbracket #1 \rrbracket} -\newcommand{\state}{\varsigma} -\newcommand{\prescar}{\Pi} -\newcommand{\pres}{\pi} +\newcommand{\sembox}[1]{\hfill \normalfont \mbox{\fbox{\(#1\)}}} +\newcommand{\typedsection}[2]{\subsubsection*{\rm\em #1 \sembox{#2}}} -\newcommand{\var}{x} -\newcommand{\varB}{y} -\newcommand{\varC}{z} -%\newcommand{\VAL}{d} -\newcommand{\ectxVar}{\kappa} -\newcommand{\term}{t} -\newcommand{\termB}{u} -\newcommand{\termVal}{V} +%% Some commonly used identifiers +\newcommand{\UPred}{\textdom{UPred}} +\newcommand{\SPred}{\textdom{SPred}} -\newcommand{\sort}{\sigma} +\newcommand{\PropDom}{\textdom{Prop}} +\newcommand{\PredDom}{\textdom{Pred}} -\newcommand{\SigNat}{\Sigma} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOGIC SYMBOLS & NOTATION & IDENTIFIERS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\Sig}{\Sigma} \newcommand{\SigType}{\mathcal{T}} \newcommand{\SigFn}{\mathcal{F}} \newcommand{\sigfn}{F} -\newcommand{\tmap}{B} -\newcommand{\ttokSet}{I} - -\newcommand{\monoid}{M} +\newcommand{\type}{\tau} -%\newcommand{\mvar}{a} -%\newcommand{\mvarB}{b} -\newcommand{\melt}{a} -\newcommand{\meltB}{b} -\newcommand{\meltC}{c} -\newcommand{\melts}{A} -\newcommand{\meltsB}{B} -\newcommand{\ghostRes}{g} +\newcommand{\var}{x} +\newcommand{\varB}{y} +\newcommand{\varC}{z} -\newcommand{\gname}{\gamma} +\newcommand{\term}{t} +\newcommand{\termB}{u} +\newcommand{\termVal}{V} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% IDENTIFIERS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\sort}{\sigma} +\newcommand{\vctx}{\Gamma} +\newcommand{\pfctx}{\Theta} -\newcommand{\Prop}{\textlog{Prop}} -\newcommand{\Pred}{\textlog{Pred}} +\newcommand{\prop}{P} +\newcommand{\propB}{Q} +\newcommand{\propC}{R} -\newcommand{\PropDom}{\textdom{Prop}} -\newcommand{\PredDom}{\textdom{Pred}} +\newcommand{\pred}{\varphi} +\newcommand{\predB}{\psi} +\newcommand{\predC}{\zeta} +\newcommand{\gname}{\gamma} +\newcommand{\iname}{\iota} +\newcommand{\inameB}{\iota'} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SYMBOLS, NOTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\mask}{\mathcal{E}} -\def\All #1.{\forall #1.\;}% -\def\Exists #1.{\exists #1.\;}% -\def\Absp #1.{({#1}).\;} -\def\Ret #1.{#1.\;}% -\def\Lam #1.{\lambda #1.\;}% +%% various pieces of Syntax \def\MU #1.{\mu #1.\;}% -\newcommand{\any}{{\rule[-.2ex]{1ex}{.4pt}}}% -\newcommand{\unitval}{()}% +\def\Lam #1.{\lambda #1.\;}% +\newcommand{\proves}{\vdash} +\newcommand{\provesalways}{\vdash_{\!\!\boxempty}} -\newcommand{\fullSat}[4]{#1 \models_{#2} #3; #4} -\newcommand{\fullNSat}[6]{#2 \models_{#3}^{#1} #4; #5; #6} +\newcommand{\wand}{\;{{\mbox{---}}\!\!{*}}\;} -\newcommand{\erasestate}[1]{|#1|_\state} -\newcommand{\eraseexp}[1]{|#1|_\expr} +\newcommand{\fmapsto}[1][-]{\stackrel{#1}{\mapsto}} +\newcommand{\gmapsto}{\hookrightarrow}% +\newcommand{\fgmapsto}[1][-]{\stackrel{#1}{\gmapsto}}% -\newcommand{\mcar}[1]{|#1|} -\newcommand{\mcarp}[1]{\mcar{#1}^{+}} -\newcommand{\mzero}{\bot} -\newcommand{\munit}{\mathord{\varepsilon}} -\newcommand{\mtimes}{\mathbin{\cdot}} +\newcommand{\dyn}[2]{\textlog{wp}({#1}, {#2})} +\newcommand{\adyn}[2]{{#1}\;\llparenthesis{#2}\rrparenthesis} +\newcommand{\dynpred}[2]{\textdom{wp}({#1}, {#2})} +\newcommand{\dynA}[3]{\textlog{wp}_{#3}({#1}, {#2})} +\newcommand{\pvs}[1]{\textlog{vs}({#1})} +\newcommand{\pvsA}[3]{\textlog{vs}_{#2}^{#3}({#1})} -\newcommand{\gtimes}{\bullet} - - - -\newcommand{\protAt}[3]{\mbox{$ - \begin{array}{|@{}l@{}|@{}l@{}|} - \firsthline \;#1 : #2\;\; & \;#3\;\; \\ - \lasthline - \end{array}$}} -\newcommand{\protAtB}[2]{\mbox{$ - \begin{array}{|@{}l@{}|} - \firsthline \;#1 : #2\;\; \\ - \lasthline - \end{array}$}} - -% PDS: The baseline of the boxed contents of -% \oldKnowInv and \oldOwnGGhost and \oldOwnGhost isn't right: -% It can be lower than the surrounding formula. -%\newcommand{\oldKnowInv}[2]{\mbox{$ -% \begin{array}{|@{\;}c@{\;}|} -% \firsthline #2 \\ -% \lasthline -% \end{array}$}{}^{\,#1}} - -%% \newcommand{\ownGhost}[2]{{\dbox{$#1 : #2$}}} -%% \newcommand{\ownGhostB}[3]{\dbox{$#1 : #2$}{}_{#3}} - -% \newcommand{\ownGhost}[3]{\mbox{$ -% \begin{array}{:@{}l@{}:@{}l@{}:} -% \firsthdashline \;#1 : #2\;\; & \;#3\;\; \\ -% \lasthdashline -% \end{array}$}} -%\newcommand{\oldOwnGhost}[2]{\mbox{$ -% \begin{array}{:@{\;}c@{\;}:} -% \firsthdashline #2 \\ -% \lasthdashline -% \end{array}$}{}^{\,#1}} -%\newcommand{\oldOwnGGhost}[1]{\mbox{$ -% \begin{array}{:@{\;}c@{\;}:} -% \firsthdashline #1 \\ -% \lasthdashline -% \end{array}$}} +\newcommand{\later}{\mathord{\triangleright}} +\newcommand{\always}{\Box{}} +%% Invariants and Ghost ownership % PDS: Was 0pt inner, 2pt outer. % \boxedassert [tikzoptions] contents [name] \tikzstyle{boxedassert_border} = [sharp corners,line width=0.2pt] @@ -368,22 +351,7 @@ \newcommand{\ownPhys}[1]{\lfloor#1\rfloor} -\newcommand{\supported}[1]{\left[ #1 \right]} - - -%\newcommand*{\know}[2]{\knowInv{#1}{#2}}% -%\newcommand*{\own}[2]{\ownGhost{#1}{#2}}% - -%\newcommand{\varset}{\mathcal{X}} - -\newcommand{\simpl}{\textsc{i}} -\newcommand{\sspec}{\textsc{s}} -\newcommand{\IMSP}{\simpl\sspec} - -\newcommand{\pointsto}{\hookrightarrow} -\newcommand{\wand}{\;{{\mbox{---}}\!\!{*}}\;} -%\newcommand{\gm}{\Rrightarrow} - +%% View Shifts \NewDocumentCommand \vsGen {O{} m O{}}% {\mathrel{% \ifthenelse{\equal{#3}{}}{% @@ -399,143 +367,7 @@ \NewDocumentCommand \vsE {O{} O{}} % {\vsGen[#1]{\Lleftarrow\!\!\!\Rrightarrow}[#2]} -\newcommand{\mupd}{\rightsquigarrow} - -\newcommand{\heapmaps}[1]{\hookrightarrow_{#1}} -\newcommand{\codemaps}[1]{\Mapsto_{#1}} - -\newcommand{\implmaps}{\heapmaps{\IM}} -\newcommand{\implmapscode}{\codemaps{\IM}} - -\newcommand{\specmaps}{\heapmaps{\SP}} -\newcommand{\specmapscode}{\codemaps{\SP}} - -\newcommand{\IM}{\simpl} -\newcommand{\SP}{\sspec} - -%\newcommand{\tRole}[1]{\texttok{Tid}(#1)} -\newcommand{\bij}[2]{{#1} \bowtie {#2}} - -\newcommand{\iassert}[3]{\fbox{$#1$}{}^{#2}_{#3}} - -%\newcommand{\mown}[2]{\textsf{own}(#1, #2)} -\newcommand{\mown}[3]{\fbox{$#1$}^{#2}_{#3}} -\newcommand{\minterp}[2]{\textsf{interp}(#1) = #2} -\newcommand{\mdisable}[2]{\delta_{#1}(#2)} - -\newcommand{\TRUE}{\textlog{True}} -\newcommand{\FALSE}{\textlog{False}} -\newcommand{\emp}{\textsf{emp}} - -\newcommand{\const}{\textlog{Inv}} - -\newcommand{\infinite}{\textlog{infinite}} - -\newcommand{\tokPure}{\textlog{TokPure}} -\newcommand{\timeless}[1]{\textlog{timeless}(#1)} - -\newcommand{\physatomic}[1]{\text{$#1$ phys.\ atomic}} - -\newcommand{\unlimRely}[1]{\cdot \geqRely {#1}} - -\newcommand{\fmapsto}[1][-]{\stackrel{#1}{\mapsto}} -\newcommand{\gmapsto}{\hookrightarrow}% -\newcommand{\fgmapsto}[1][-]{\stackrel{#1}{\gmapsto}}% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% JUDGMENTS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newcommand{\wfte}[1]{{#1}\;\mbox{tyenv}} -\newcommand{\wtt}[2]{#1 : #2} -\newcommand{\wt}[3]{#1 \proves #2 : #3} -\newcommand{\wtd}[4]{#1; #2 \proves #3 : #4} - -\newcommand{\judgment}[2]{\paragraph{#1}\hspace{\stretch{1}}\fbox{$#2$}} -\newcommand{\judgmentB}[2]{\paragraph{#1}\hspace{\stretch{1}}{$#2$}} -\newcommand{\judgmentC}[2]{{\normalsize\textbf{\emph{#1}}}\hspace{\stretch{1}}{\fbox{$#2$}}} -\newcommand{\judgmentD}[2]{{\normalsize\textbf{\emph{#1}}}\quad{\fbox{$#2$}}} - -\newcommand{\isAtomic}[2]{\cfg{#1}{#2}\ \textrm{atomic}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% MATH SYMBOLS & NOTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newcommand{\pfn}{\rightharpoonup} -\newcommand{\fpfn}{\stackrel{\textrm{fin}}{\rightharpoonup}} -\newcommand{\ra}{\rightarrow} -\newcommand{\Ra}{\Rightarrow} -\newcommand{\Lra}{\Leftrightarrow} -\newcommand{\monra}{\stackrel{\textrm{mon}}{\rightarrow}} -%\newcommand{\res}{\upharpoonright} -\newcommand{\step}{\ra} -%\newcommand{\monora}{\stackrel{\textrm{mono}}{\longrightarrow}} -\newcommand{\monora}{\Rightarrow} - -\newcommand{\restr}[2]{\lfloor #1 \rfloor_{#2}} -% LB -\newcommand{\nequiv}[1]{\ensuremath{\mathrel{\stackrel{#1}{=}}}} -\newcommand{\notnequiv}[1]{\ensuremath{\mathrel{\stackrel{#1}{\neq}}}} -\newcommand{\nequivset}[2]{\ensuremath{\mathrel{\stackrel{#1}{=}_{#2}}}} -\newcommand{\nequivB}[1]{\ensuremath{\mathrel{\stackrel{#1}{\equiv}}}} -\newcommand{\UPred}{\textdom{UPred}} -\newcommand{\SPred}{\textdom{SPred}} -\newcommand{\latert}{\mathord{\blacktriangleright}} - -%\newcommand{\emp}{1} -% \newcommand{\lget}{\textrm{get}} -% \newcommand{\lput}{\textrm{put}} -% \newcommand{\trans}{\textrm{trans}} - -\newcommand{\lift}[1]{\lfloor {#1} \rfloor} - -\newcommand{\Sem}[1]{\llbracket #1 \rrbracket} - -\newcommand{\semSort}[1]{\Sem{#1}} -\newcommand{\semTerm}[1]{\Sem{#1}} -\newcommand{\semVCtx}[1]{\Sem{#1}} -\newcommand{\semProtSet}[1]{\Sem{#1}} -\newcommand{\semAProp}[1]{\Sem{#1}} - -%\newcommand{\semProp}[3]{#1 \models^{#2} #3} -\newcommand{\semProp}[3]{#1 \in \llbracket #3 \rrbracket^{#2}} -\newcommand{\semPropB}[2]{\llbracket #2 \rrbracket^{#1}} -\newcommand{\semPred}[2]{\llbracket{#1}\rrbracket^{#2}} - -\newcommand{\Interp}[1]{\mathcal{I}\llbracket #1 \rrbracket} -\newcommand{\Val}[1]{\llbracket #1 \rrbracket} -\newcommand{\ValB}{\mathbb{V}} -\newcommand{\LiftVal}[1]{\widehat{\mathcal{V}}\llbracket #1 \rrbracket} -\newcommand{\Exp}[1]{\mathcal{E}\llbracket #1 \rrbracket} -\newcommand{\LiftExp}[1]{\widehat{\mathcal{E}}\llbracket #1 \rrbracket} - -\newcommand{\expPred}[3]{(#1, #2) \downarrow #3} -\newcommand{\expPredPure}[3]{(#1, #2) \downarrow^{\textrm{pure}} #3} - -\newcommand{\Store}[1]{\mathcal{H}\llbracket #1 \rrbracket} -\newcommand{\Heap}[1]{\mathcal{H}\llbracket #1 \rrbracket} -\newcommand{\Env}[1]{\mathcal{G}\llbracket #1 \rrbracket} -\newcommand{\TEnv}[1]{\mathcal{D}\llbracket #1 \rrbracket} -\newcommand{\Ctx}[1]{\mathcal{K}\llbracket #1 \rrbracket} -% \newcommand{\Thread}[1]{\mathcal{T}\llbracket #1 \rrbracket} -% \newcommand{\ThreadRel}[3]{\mathcal{T}(#1,#2,#3)} -% \newcommand{\TRel}[4]{\mathcal{T}(#1,#2,#3,#4)} -% \newcommand{\TRelD}[1]{\mathcal{T}\llbracket{#1}\rrbracket} -\newcommand{\HVal}[1]{\mathcal{H}\llbracket #1 \rrbracket} -\newcommand{\Obs}[1]{\mathcal{O}(#1)} - -\newcommand{\dyn}[2]{\textlog{wp}({#1}, {#2})} -\newcommand{\adyn}[2]{{#1}\;\llparenthesis{#2}\rrparenthesis} -\newcommand{\dynpred}[2]{\textdom{wp}({#1}, {#2})} -\newcommand{\dynA}[3]{\textlog{wp}_{#3}({#1}, {#2})} -\newcommand{\pvs}[1]{\textlog{vs}({#1})} -\newcommand{\pvsA}[3]{\textlog{vs}_{#2}^{#3}({#1})} - - -% \hoaresizebox pre post -% \hoarescalebox char sizebox +%% Hoare Triples \newcommand*{\hoaresizebox}[1]{% \hbox{$\mathsurround=0pt{#1}\mathstrut$}} \newcommand*{\hoarescalebox}[2]{% @@ -576,253 +408,38 @@ \end{aligned}}% } -\newcommand{\ttrip}[4]{ - \semPropB{#1}{\rho}{\safe(#2, #3, #4)} -} -%% \newcommand{\ttrip}[4]{ -%% #1 \models^\rho -%% {#2}@{#3}\; -%% \big\{ #4 \big\} -%% } -\newcommand{\halfttrip}[3]{ - {#1}@{#2}\; - \big\{ #3 \big\} -} - -\newcommand{\rewriteSpec}{\ra_\SP} - -%\newcommand{\dyn}[2]{{#1}\;\{{#2}\}} - -\newcommand{\safe}{\textsf{safe}} - -\newcommand{\mthread}{m} -\newcommand{\absent}{\textsf{none}} - -\newcommand{\PROG}[1]{\textrm{prog}\llbracket #1 \rrbracket} -\newcommand{\PRES}[1]{\textrm{pres}\llbracket #1 \rrbracket} - -\newcommand{\pset}[1]{\wp(#1)} -\newcommand{\pmset}[1]{\wp_{m}(#1)} -\newcommand{\psetup}[1]{\wp^\uparrow(#1)} -\newcommand{\psetdown}[1]{\wp^\downarrow(#1)} -\newcommand{\fpset}[1]{\wp_{\textrm{fin}}(#1)} -\newcommand{\mset}[1]{\mathrm{bag}(#1)} -%\newcommand{\bag}[1]{\Lbag #1 \Rbag} -\newcommand{\eqdef}{\triangleq} - -\newcommand{\extendseq}{\sqsupseteq} -\newcommand{\extends}{\sqsupset} -\newcommand{\beforeeq}{\sqsubseteq} -\newcommand{\extby}{\sqsubseteq} -%\newcommand{\ntime}{\triangleright} -\newcommand{\later}{\mathord{\triangleright}} -%\newcommand{\always}[1]{\Box{#1}} -\newcommand{\always}{\Box{}} -\newcommand{\dup}[1]{\textrm{dup}({#1})} -\newcommand{\restrict}[2]{\lfloor #1 \rfloor_{#2}} - -\newcommand{\extendseqCtx}{\stackrel{\textrm{ctx}}{\sqsupseteq}} -\newcommand{\extbyCtx}{\stackrel{\textrm{ctx}}{\sqsubseteq}} - -\newcommand{\leqWT}{\sqsubseteq} -\newcommand{\geqWT}{\sqsubseteq} -\newcommand{\lubWT}{\sqcup} - -\newcommand{\leqRes}{\leq} -\newcommand{\geqRes}{\geq} - -\newcommand{\geqIS}{\sqsupseteq} - -\newcommand{\proves}{\vdash} -\newcommand{\provesalways}{\vdash_{\!\!\boxempty}} -\newcommand{\refines}{\leq} -\newcommand{\pbrk}{\mbox{\phantom{.}}} - -\newcommand{\hasHVal}[3]{#1 \Ra \textrm{hval}(#2, #3)} - - -\newcommand{\dom}{\textrm{dom}} -\newcommand{\rng}{\textrm{rng}} -\newcommand{\cod}{\textrm{cod}} - - -\newcommand{\IF}{\mathrel{\text{if}}} -\newcommand{\WHEN}{\textrm{when }} - -\newcommand{\ie}{\emph{i.e.,} } -\newcommand{\eg}{\emph{e.g.,} } -\newcommand{\etal}{\emph{et~al.}} -\newcommand{\wrt}{w.r.t.~} -\newcommand{\deadfootnote}[1]{} - -\newcommand{\idisl}[2]{{#1} \mapsto {#2}} - -%\newcommand{\region}[4] - -\newcommand{\SET}[2]{ -\left\{% -#1% -\;\middle|\;% -#2% -\right\} -} -\newcommand{\SETB}[1]{ -\left\{% -#1% -\right\} -} -\newcommand{\SETC}[2]{#1 & #2} - -\newcommand{\SPACER}{\;\;\;} - -\newcommand{\wIso}{\xi} -\newcommand{\sembox}[1]{\hfill \normalfont \mbox{\fbox{\(#1\)}}} -\newcommand{\typedsection}[2]{\subsubsection*{\rm\em #1 \sembox{#2}}} +%% Some commonly used identifiers +\newcommand{\timeless}[1]{\textlog{timeless}(#1)} +\newcommand{\physatomic}[1]{\textlog{$#1$ phys.\ atomic}} +\newcommand{\infinite}{\textlog{infinite}} -% what are we calling the manuscript? -\newcommand{\book}{book} +\newcommand{\Prop}{\textlog{Prop}} +\newcommand{\Pred}{\textlog{Pred}} -\newcommand{\aaron}[1]{{\color{red}\textbf{AT: #1}}} -\newcommand{\derek}[1]{{\color{red}\textbf{DD: #1}}} -\newcommand{\lars}[1]{{\color{red}\textbf{LB: #1}}} -\newcommand{\kasper}[1]{{\color{red}\textbf{KS: #1}}} -\newcommand{\ralf}[1]{{\color{red}\textbf{RJ: #1}}} -\newcommand{\dave}[1]{{\color{red}\textbf{PDS: #1}}} -\newcommand{\hush}[1]{} -\newcommand{\relaxguys}{% - \let\aaron\hush% - \let\derek\hush% - \let\lars\hush% - \let\kasper\hush% - \let\ralf\hush% - \let\dave\hush% -} +\newcommand{\TRUE}{\textlog{True}} +\newcommand{\FALSE}{\textlog{False}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% ATOMIC SHIFTS - -\newcommand{\funnyforall}{\boldsymbol\forall} -\newcommand{\funnyexists}{\boldsymbol\exists} - -\newcommand{\aspre}{P} -\newcommand{\asfrom}{\alpha} -\newcommand{\asto}{\beta} -\newcommand{\aspost}{Q} -%\newcommand{\asprop}{\aspost} -%\newcommand{\aspred}{\aspost} -\newcommand{\asframe}{R} -\newcommand{\asfmask}{\mask_{\asframe}} -\newcommand\nomask{\,\!}% to avoid \as defaults. It ain't empty, but it looks empty. - -% we need 10 arguments, so use some magic to get that... -\newcommand\ascore[1]{% - \def\tempflags{#1}% - \ascoreContinued% -} -\newcommand{\ascoreContinued}[9]{ - {\stretchleftright[450]{\langle}{ % - \IfSubStr{\tempflags}{l}{ \begin{inbox} }{} % - #2 - \IfSubStr{\tempflags}{b}{\vsE}{\vs} % - \IfSubStr{\tempflags}{a}{ #1.\;}{} % - #3 % - \IfSubStr{\tempflags}{x}{ \mid #4}{} % - \IfSubStr{\tempflags}{f}{ % - \mid % - \IfSubStr{\tempflags}{l}{ \\ }{} % - \IfSubStr{\tempflags}{e}{ #5.\;}{} % - #6 \vs #7 % - }{} % - \IfSubStr{\tempflags}{l}{ \end{inbox} }{} % - }{\rangle}}_{#9}^{#8} % -} -\NewDocumentCommand \as {d() m m o d() m m O{\top} O{}} - { \ascore{ % - \IfNoValueF{#1}{a} % universal quantifier - b % arrow back to start - \IfNoValueF{#4}{x} % explicit R and E - f % add forwards shift to final state - \IfNoValueF{#5}{e} % existential quantifier - }{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9} % - } -\NewDocumentCommand \asl {d() m m o d() m m O{\top} O{}} - { \ascore{ % - l % use multiple lines - \IfNoValueF{#1}{a} % universal quantifier - b % arrow back to start - \IfNoValueF{#4}{x} % explicit R and E - f % add forwards shift to final state - \IfNoValueF{#5}{e} % existential quantifier - }{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9} % - } -% \NewDocumentCommand \am {d() m m o m} -% { \ascore{ % -% \IfNoValueF{#1}{a} % universal quantifier -% b % arrow back to start -% \IfNoValueF{#4}{x} % explicit R and E -% }{#1}{#2}{#3}{#4}{#5}{}{}{} % -% } - -%%% Atomic triples - -\NewDocumentCommand \ahoare {m m m O{} O{}}{ - \triple\langle\rangle{#1}{#2}{#3}% - _{#5}^{#4}% -} - -\NewDocumentCommand \ahoareV {O{c} m m m O{} O{}}{ - {\begin{aligned}[#1] - &\anglebracket{#2} \\ - &\quad{#3} \\ - &{\anglebracket{#4}}_{#6}^{#5} - \end{aligned}}% -} - -\NewDocumentCommand \ahoareHV {O{c} m m m O{} O{}}{ - {\begin{aligned}[#1] - &\anglebracket{#2}\;\;\; {#3} \\ - &{\anglebracket{#4}}_{#6}^{#5} - \end{aligned}}% -} - +% LANGUAGE-LEVEL SYNTAX AND SEMANTICS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% hoare proof typesetting - -\newenvironment{inbox}[1][]{ - \begin{array}[#1]{@{}l@{}} -}{ - \end{array} -} - -\newcommand{\tabubox}[2][]{% - \begin{tabu}{@{#1}X[1,l,m]@{}}% - #2 % - \end{tabu}% -} -\newcommand{\hproofnospace}[1]{\noindent\parbox{\linewidth}{#1}} % -\newcommand{\hproof}[1]{\vspace{0.5em}\hproofnospace{#1}\vspace{0.5em}} % -\newcommand\psub[2]{% - \begin{tabu}{ m{0.9em} | X[1,l,m] }% - \begin{sideways}#1\end{sideways} &% - \tabubox{#2}% - \end{tabu}% -}% +\newcommand{\expr}{e} +\newcommand{\val}{v} +\newcommand{\valB}{w} +\newcommand{\state}{\sigma} +\newcommand{\step}{\ra} -\newcommand\pind[1]{\tabubox[\hspace{1em}]{#1}} -\newcommand{\pline}[2][\empty]{\ensuremath{\left\{{#2\mathstrut}\right\}_{#1}}} -\newcommand{\pmline}[2][\empty]{\ensuremath{\left\{\begin{inbox}#2\end{inbox}\right\}_{#1}}} -\newcommand{\aline}[2][\empty]{\ensuremath{{\stretchleftright[450]{\langle}{#2\mathstrut}{\rangle}}_{#1}}} -\newcommand{\amline}[2][\empty]{\ensuremath{{\stretchleftright[450]{\langle}{\begin{inbox}#2\end{inbox}}{\rangle}}_{#1}}} -\definecolor{code_color}{rgb}{0, 0, 0.6} -\newcommand{\cdline}[1]{\ensuremath{\color{code_color}#1}} +\newcommand{\ectx}{K} +\newcommand{\tpool}{T} -\definecolor{interp_p_backgr}{rgb}{0.8, 0.8, 1.0} -\definecolor{interp_q_backgr}{rgb}{0.8, 1.0, 0.8} +\newcommand{\cfg}[2]{{#1};{#2}} +\newcommand{\fork}[1]{\textlang{fork}\;{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Monoid and other constructions +% DERIVED CONSTRUCTIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Commonly used identifiers \newcommand{\FHeap}{\textsc{FHeap}} \newcommand{\AFHeap}{\textsc{AFHeap}} @@ -835,9 +452,6 @@ \newcommand{\exm}[1]{\ensuremath{\textsc{Ex}(#1)}} \newcommand{\agm}[1]{\ensuremath{\textsc{Ag}(#1)}} -%\newcommand{\dispm}[1]{\ensuremath{\textsc{Disp}(#1)}} -%\newcommand{\disposed}{\mathord{\dagger}} - \newcommand{\STSMon}[1]{\textsc{Sts}_{#1}} \newcommand{\STSInv}{\textsf{STSInv}}