Skip to content
Snippets Groups Projects
Commit f01811c1 authored by Ralf Jung's avatar Ralf Jung
Browse files

setup.tex: remove loads of unused stuff, start sorting a little

parent 511f26a4
No related branches found
No related tags found
No related merge requests found
\section{Algebraic Structures} \section{Algebraic Structures}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "iris"
%%% End:
...@@ -379,3 +379,8 @@ By upward-closedness, it suffices to show $\textsf{frame}(s, T_f) \ststrans \tex ...@@ -379,3 +379,8 @@ By upward-closedness, it suffices to show $\textsf{frame}(s, T_f) \ststrans \tex
This follows by induction on the path $(s, T) \ststrans (s', T')$, and using the lemma proven above for each step. This follows by induction on the path $(s, T) \ststrans (s', T')$, and using the lemma proven above for each step.
\end{proof} \end{proof}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "iris"
%%% End:
...@@ -38,11 +38,16 @@ ...@@ -38,11 +38,16 @@
%\clearpage %\clearpage
\tableofcontents \tableofcontents
\clearpage\input{algebra} \clearpage
\clearpage\input{constructions} \input{algebra}
\clearpage\input{logic} \clearpage
\clearpage\input{model} \input{constructions}
\clearpage\input{derived} \clearpage
\input{logic}
\clearpage
\input{model}
\clearpage
\input{derived}
\clearpage\printbibliography % If we want biblatex \clearpage\printbibliography % If we want biblatex
......
...@@ -22,20 +22,20 @@ ...@@ -22,20 +22,20 @@
expression then so is $\fork{\expr}$. We moreover assume a value expression then so is $\fork{\expr}$. We moreover assume a value
\textsf{fRet} (giving the intended return value of a fork), and we assume that \textsf{fRet} (giving the intended return value of a fork), and we assume that
\begin{align*} \begin{align*}
\fork{\expr} &\notin \textdom{Val} \\ \fork{\expr} &\notin \textdom{Val} \\
\fork{\expr_1} = \fork{\expr_2} &\implies \expr_1 = \expr_2 \fork{\expr_1} = \fork{\expr_2} &\implies \expr_1 = \expr_2
\end{align*} \end{align*}
\item A set $\textdom{Ectx}$ of \emph{evaluation contexts} ($\ectx$) that includes the empty context $[\; ]$, \item A set $\textdom{Ectx}$ of \emph{evaluation contexts} ($\ectx$) that includes the empty context $[\; ]$,
a plugging operation $\ectx[\expr]$ that produces an expression, and context composition $\circ$ a plugging operation $\ectx[\expr]$ that produces an expression, and context composition $\circ$
satisfying the following axioms: satisfying the following axioms:
\begin{align*} \begin{align*}
[\; ][ \expr ] &= \expr \\ [\; ][ \expr ] &= \expr \\
\ectx_1[\ectx_2[\expr]] &= (\ectx_1 \circ \ectx_2) [\expr] \\ \ectx_1[\ectx_2[\expr]] &= (\ectx_1 \circ \ectx_2) [\expr] \\
\ectx_1[\expr] = \ectx_2[\expr] &\implies \ectx_1 = \ectx_2 \\ \ectx_1[\expr] = \ectx_2[\expr] &\implies \ectx_1 = \ectx_2 \\
\ectx[\expr_1] = \ectx[\expr_2] &\implies \expr_1 = \expr_2 \\ \ectx[\expr_1] = \ectx[\expr_2] &\implies \expr_1 = \expr_2 \\
\ectx_1 \circ \ectx_2 = [\; ] &\implies \ectx_1 = \ectx_2 = [\; ] \\ \ectx_1 \circ \ectx_2 = [\; ] &\implies \ectx_1 = \ectx_2 = [\; ] \\
\ectx[\expr] \in \textdom{Val} &\implies \ectx = [\;] \\ \ectx[\expr] \in \textdom{Val} &\implies \ectx = [\;] \\
\ectx[\expr] = \fork{\expr'} &\implies \ectx = [\;] \ectx[\expr] = \fork{\expr'} &\implies \ectx = [\;]
\end{align*} \end{align*}
\item A set \textdom{State} of shared machine states (\eg heaps), metavariable $\state$. \item A set \textdom{State} of shared machine states (\eg heaps), metavariable $\state$.
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
and notions of an expression to be \emph{reducible} or \emph{stuck}, such that and notions of an expression to be \emph{reducible} or \emph{stuck}, such that
\begin{align*} \begin{align*}
\textlog{reducible}(\expr) &\iff \Exists \state, \expr_2, \state_2. \cfg{\state}{\expr} \step \cfg{\state_2}{\expr_2} \\ \textlog{reducible}(\expr) &\iff \Exists \state, \expr_2, \state_2. \cfg{\state}{\expr} \step \cfg{\state_2}{\expr_2} \\
\textlog{stuck}(\expr) &\iff \All \ectx, \expr'. \expr = \ectx[\expr'] \implies % \textlog{stuck}(\expr) &\iff \All \ectx, \expr'. \expr = \ectx[\expr'] \implies
\lnot \textlog{reducible}(\expr') \lnot \textlog{reducible}(\expr')
\end{align*} \end{align*}
and the following hold and the following hold
...@@ -340,14 +340,13 @@ Axioms $\prop \Ra \propB$ stand for judgments $\vctx \mid \cdot \proves \prop \R ...@@ -340,14 +340,13 @@ Axioms $\prop \Ra \propB$ stand for judgments $\vctx \mid \cdot \proves \prop \R
% %
% Proof rules implicitly assume well-sortedness. % Proof rules implicitly assume well-sortedness.
\subsection{Laws of intuitionistic higher-order logic with guarded recursion over a simply-typed lambda calculus}\label{sec:HOL} % e\subsection{Laws of intuitionistic higher-order logic with guarded recursion over a simply-typed lambda calculus}\label{sec:HOL}
Standard. This is entirely standard.
Soundness follows from the theorem that ${\cal U}(\any, \textdom{Prop}) Soundness follows from the theorem that ${\cal U}(\any, \textdom{Prop})
: {\cal U}^\textrm{op} \to \textrm{Poset}$ is a hyperdoctrine. : {\cal U}^{\textrm{op}} \to \textrm{Poset}$ is a hyperdoctrine.
\elide{
\begin{mathpar} \begin{mathpar}
\inferH{Asm} \inferH{Asm}
{\prop \in \pfctx} {\prop \in \pfctx}
...@@ -357,87 +356,86 @@ Soundness follows from the theorem that ${\cal U}(\any, \textdom{Prop}) ...@@ -357,87 +356,86 @@ Soundness follows from the theorem that ${\cal U}(\any, \textdom{Prop})
{\pfctx \proves \prop(\term) \\ \pfctx \proves \term = \term'} {\pfctx \proves \prop(\term) \\ \pfctx \proves \term = \term'}
{\pfctx \proves \prop(\term')} {\pfctx \proves \prop(\term')}
\and \and
\inferH{$\wedge$I} \infer[$\wedge$I]
{\pfctx \proves \prop \\ \pfctx \proves \propB} {\pfctx \proves \prop \\ \pfctx \proves \propB}
{\pfctx \proves \prop \wedge \propB} {\pfctx \proves \prop \wedge \propB}
\and \and
\inferH{$\wedge$EL} \infer[$\wedge$EL]
{\pfctx \proves \prop \wedge \propB} {\pfctx \proves \prop \wedge \propB}
{\pfctx \proves \prop} {\pfctx \proves \prop}
\and \and
\inferH{$\wedge$ER} \infer[$\wedge$ER]
{\pfctx \proves \prop \wedge \propB} {\pfctx \proves \prop \wedge \propB}
{\pfctx \proves \propB} {\pfctx \proves \propB}
\and \and
\inferH{$\vee$E} \infer[$\vee$E]
{\pfctx \proves \prop \vee \propB \\ {\pfctx \proves \prop \vee \propB \\
\pfctx, \prop \proves \propC \\ \pfctx, \prop \proves \propC \\
\pfctx, \propB \proves \propC} \pfctx, \propB \proves \propC}
{\pfctx \proves \propC} {\pfctx \proves \propC}
\and \and
\inferH{$\vee$IL} \infer[$\vee$IL]
{\pfctx \proves \prop } {\pfctx \proves \prop }
{\pfctx \proves \prop \vee \propB} {\pfctx \proves \prop \vee \propB}
\and \and
\inferH{$\vee$IR} \infer[$\vee$IR]
{\pfctx \proves \propB} {\pfctx \proves \propB}
{\pfctx \proves \prop \vee \propB} {\pfctx \proves \prop \vee \propB}
\and \and
\inferH{$\Ra$I} \infer[$\Ra$I]
{\pfctx, \prop \proves \propB} {\pfctx, \prop \proves \propB}
{\pfctx \proves \prop \Ra \propB} {\pfctx \proves \prop \Ra \propB}
\and \and
\inferH{$\Ra$E} \infer[$\Ra$E]
{\pfctx \proves \prop \Ra \propB \\ \pfctx \proves \prop} {\pfctx \proves \prop \Ra \propB \\ \pfctx \proves \prop}
{\pfctx \proves \propB} {\pfctx \proves \propB}
\and \and
\inferH{$\forall_1$I} \infer[$\forall_1$I]
{\pfctx, x : \sort \proves \prop} {\pfctx, x : \sort \proves \prop}
{\pfctx \proves \forall x: \sort.\; \prop} {\pfctx \proves \forall x: \sort.\; \prop}
\and \and
\inferH{$\forall_1$E} \infer[$\forall_1$E]
{\pfctx \proves \forall X \in \sort.\; \prop \\ {\pfctx \proves \forall X \in \sort.\; \prop \\
\pfctx \proves \term: \sort} \pfctx \proves \term: \sort}
{\pfctx \proves \prop[\term/X]} {\pfctx \proves \prop[\term/X]}
\and \and
\inferH{$\exists_1$E} \infer[$\exists_1$E]
{\pfctx \proves \exists X\in \sort.\; \prop \\ {\pfctx \proves \exists X\in \sort.\; \prop \\
\pfctx, X : \sort, \prop \proves \propB} \pfctx, X : \sort, \prop \proves \propB}
{\pfctx \proves \propB} {\pfctx \proves \propB}
\and \and
\inferH{$\exists_1$I} \infer[$\exists_1$I]
{\pfctx \proves \prop[\term/X] \\ {\pfctx \proves \prop[\term/X] \\
\pfctx \proves \term: \sort} \pfctx \proves \term: \sort}
{\pfctx \proves \exists X: \sort. \prop} {\pfctx \proves \exists X: \sort. \prop}
\and \and
\inferH{$\forall_2$I} \infer[$\forall_2$I]
{\pfctx, \pvar: \Pred(\sort) \proves \prop} {\pfctx, \pvar: \Pred(\sort) \proves \prop}
{\pfctx \proves \forall \pvar\in \Pred(\sort).\; \prop} {\pfctx \proves \forall \pvar\in \Pred(\sort).\; \prop}
\and \and
\inferH{$\forall_2$E} \infer[$\forall_2$E]
{\pfctx \proves \forall \pvar. \prop \\ {\pfctx \proves \forall \pvar. \prop \\
\pfctx \proves \propB: \Prop} \pfctx \proves \propB: \Prop}
{\pfctx \proves \prop[\propB/\pvar]} {\pfctx \proves \prop[\propB/\pvar]}
\and \and
\inferH{$\exists_2$E} \infer[$\exists_2$E]
{\pfctx \proves \exists \pvar \in \Pred(\sort).\prop \\ {\pfctx \proves \exists \pvar \in \Pred(\sort).\prop \\
\pfctx, \pvar : \Pred(\sort), \prop \proves \propB} \pfctx, \pvar : \Pred(\sort), \prop \proves \propB}
{\pfctx \proves \propB} {\pfctx \proves \propB}
\and \and
\inferH{$\exists_2$I} \infer[$\exists_2$I]
{\pfctx \proves \prop[\propB/\pvar] \\ {\pfctx \proves \prop[\propB/\pvar] \\
\pfctx \proves \propB: \Prop} \pfctx \proves \propB: \Prop}
{\pfctx \proves \exists \pvar. \prop} {\pfctx \proves \exists \pvar. \prop}
\and \and
\inferHB{Elem} \inferB[Elem]
{\pfctx \proves \term \in (X \in \sort). \prop} {\pfctx \proves \term \in (X \in \sort). \prop}
{\pfctx \proves \prop[\term/X]} {\pfctx \proves \prop[\term/X]}
\and \and
\inferHB{Elem-$\mu$} \inferB[Elem-$\mu$]
{\pfctx \proves \term \in (\mu\pvar \in \Pred(\sort). \pred)} {\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 \pred[\mu\pvar \in \Pred(\sort). \pred/\pvar]}
\end{mathpar} \end{mathpar}
}
\subsection{Axioms from the logic of (affine) bunched implications} \subsection{Axioms from the logic of (affine) bunched implications}
\begin{mathpar} \begin{mathpar}
...@@ -807,3 +805,8 @@ The following specializations cover all cases of a heap-manipulating lambda calc ...@@ -807,3 +805,8 @@ The following specializations cover all cases of a heap-manipulating lambda calc
The first is restricted to deterministic pure reductions, like $\beta$-reduction. The first is restricted to deterministic pure reductions, like $\beta$-reduction.
The second is suited to proving triples for (possibly non-deterministic) atomic expressions; for example, with $\expr \eqdef \;!\ell$ (dereferencing $\ell$) and $\state \eqdef h \mtimes \ell \mapsto \valB$ and $\pred(\val, \state') \eqdef \state' = (h \mtimes \ell \mapsto \valB) \land \val = \valB$, one obtains the axiom $\All h, \ell, \valB. \hoare{\ownPhys{h \mtimes \ell \mapsto \valB}}{!\ell}{\Ret\val. \val = \valB \land \ownPhys{h \mtimes \ell \mapsto \valB} }$. The second is suited to proving triples for (possibly non-deterministic) atomic expressions; for example, with $\expr \eqdef \;!\ell$ (dereferencing $\ell$) and $\state \eqdef h \mtimes \ell \mapsto \valB$ and $\pred(\val, \state') \eqdef \state' = (h \mtimes \ell \mapsto \valB) \land \val = \valB$, one obtains the axiom $\All h, \ell, \valB. \hoare{\ownPhys{h \mtimes \ell \mapsto \valB}}{!\ell}{\Ret\val. \val = \valB \land \ownPhys{h \mtimes \ell \mapsto \valB} }$.
%Axioms for CAS-like operations can be obtained by first deriving rules for the two possible cases, and then using the disjunction rule. %Axioms for CAS-like operations can be obtained by first deriving rules for the two possible cases, and then using the disjunction rule.
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "iris"
%%% End:
...@@ -84,7 +84,7 @@ action on morphisms). ...@@ -84,7 +84,7 @@ action on morphisms).
\textdom{Res} &\eqdef& \textdom{Res} &\eqdef&
\{\, \rs = (\pres, \ghostRes) \mid \{\, \rs = (\pres, \ghostRes) \mid
\pres \in \textdom{State} \uplus \{\munit\} \land \ghostRes \in \mcarp{\monoid} \,\} \\[0.5em] \pres \in \textdom{State} \uplus \{\munit\} \land \ghostRes \in \mcarp{\monoid} \,\} \\[0.5em]
(\pres, \ghostRes) \rsplit (\pres, \ghostRes) \rtimes
(\pres', \ghostRes') &\eqdef& (\pres', \ghostRes') &\eqdef&
\begin{cases} \begin{cases}
(\pres, \ghostRes \mtimes \ghostRes') & \mbox{if $\pres' = \munit$ and $\ghostRes \mtimes \ghostRes' \neq \mzero$} \\ (\pres, \ghostRes \mtimes \ghostRes') & \mbox{if $\pres' = \munit$ and $\ghostRes \mtimes \ghostRes' \neq \mzero$} \\
...@@ -93,7 +93,7 @@ action on morphisms). ...@@ -93,7 +93,7 @@ action on morphisms).
\\[0.5em] \\[0.5em]
% %
\rs \leq \rs' & \eqdef & \rs \leq \rs' & \eqdef &
\Exists \rs''. \rs' = \rs \rsplit \rs''\\[1em] \Exists \rs''. \rs' = \rs \rtimes \rs''\\[1em]
% %
\UPred(\textdom{Res}) &\eqdef& \UPred(\textdom{Res}) &\eqdef&
\{\, p \subseteq \mathbb{N} \times \textdom{Res} \mid \{\, p \subseteq \mathbb{N} \times \textdom{Res} \mid
...@@ -149,7 +149,7 @@ For a set $X$, write $\Delta X$ for the discrete c.o.f.e.\ with $x \nequiv{n} ...@@ -149,7 +149,7 @@ 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'$ x'$ iff $n = 0$ or $x = x'$
\[ \[
\begin{array}[t]{@{}l@{\ }c@{\ }l@{}} \begin{array}[t]{@{}l@{\ }c@{\ }l@{}}
\semSort{\unit} &\eqdef& \Delta \{ \star \} \\ \semSort{\textsort{Unit}} &\eqdef& \Delta \{ \star \} \\
\semSort{\textsort{InvName}} &\eqdef& \Delta \mathbb{N} \\ \semSort{\textsort{InvName}} &\eqdef& \Delta \mathbb{N} \\
\semSort{\textsort{InvMask}} &\eqdef& \Delta \pset{\mathbb{N}} \\ \semSort{\textsort{InvMask}} &\eqdef& \Delta \pset{\mathbb{N}} \\
\semSort{\textsort{Monoid}} &\eqdef& \Delta |\monoid| \semSort{\textsort{Monoid}} &\eqdef& \Delta |\monoid|
...@@ -234,7 +234,7 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land ...@@ -234,7 +234,7 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land
\begin{align*} \begin{align*}
\fullSat{\state}{\mask}{\rs}{W} &= \fullSat{\state}{\mask}{\rs}{W} &=
\begin{aligned}[t] \begin{aligned}[t]
\{\, n + 1 \in \mathbb{N} \mid &\Exists \rsB:\mathbb{N} \fpfn \textdom{Res}. (\rs \rsplit \rsB).\pres = \state \land{}\\ \{\, n + 1 \in \mathbb{N} \mid &\Exists \rsB:\mathbb{N} \fpfn \textdom{Res}. (\rs \rtimes \rsB).\pres = \state \land{}\\
&\quad \All \iota \in \dom(W). \iota \in \dom(W) \leftrightarrow \iota \in \dom(\rsB) \land {}\\ &\quad \All \iota \in \dom(W). \iota \in \dom(W) \leftrightarrow \iota \in \dom(\rsB) \land {}\\
&\quad\quad \iota \in \mask \ra (n, \rsB(\iota)) \in \wIso^{-1}(W(\iota))(W) \,\} \cup \{ 0 \} &\quad\quad \iota \in \mask \ra (n, \rsB(\iota)) \in \wIso^{-1}(W(\iota))(W) \,\} \cup \{ 0 \}
\end{aligned} \end{aligned}
...@@ -295,9 +295,9 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land ...@@ -295,9 +295,9 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land
\begin{aligned}[t] \begin{aligned}[t]
\{\, (n, \rs) &\mid \All W_F \geq W. \All \rs_F, \mask_F, \state. \All k \leq n.\\ \{\, (n, \rs) &\mid \All W_F \geq W. \All \rs_F, \mask_F, \state. \All k \leq n.\\
&\qquad &\qquad
k \in (\fullSat{\state}{\mask_1 \cup \mask_F}{\rs \rsplit \rs_F}{W_F}) \land k > 0 \land \mask_F \sep (\mask_1 \cup \mask_2) \implies{} \\ k \in (\fullSat{\state}{\mask_1 \cup \mask_F}{\rs \rtimes \rs_F}{W_F}) \land k > 0 \land \mask_F \sep (\mask_1 \cup \mask_2) \implies{} \\
&\qquad &\qquad
\Exists W' \geq W_F. \Exists \rs'. k \in (\fullSat{\state}{\mask_2 \cup \mask_F}{\rs' \rsplit \rs_F}{W'}) \land (k, \rs') \in q(W') \Exists W' \geq W_F. \Exists \rs'. k \in (\fullSat{\state}{\mask_2 \cup \mask_F}{\rs' \rtimes \rs_F}{W'}) \land (k, \rs') \in q(W')
\,\} \,\}
\end{aligned} \end{aligned}
\end{align*} \end{align*}
...@@ -392,19 +392,19 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land ...@@ -392,19 +392,19 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land
\begin{align*} \begin{align*}
\mathit{wp}_\mask(\expr, q) &\eqdef \Lam W. \mathit{wp}_\mask(\expr, q) &\eqdef \Lam W.
\begin{aligned}[t] \begin{aligned}[t]
\{\, (n, \rs) &\mid \All W_F \geq W; k \leq n; \rs_F; \state; \mask_F \sep \mask. k > 0 \land k \in (\fullSat{\state}{\mask \cup \mask_F}{\rs \rsplit \rs_F}{W_F}) \implies{}\\ \{\, (n, \rs) &\mid \All W_F \geq W; k \leq n; \rs_F; \state; \mask_F \sep \mask. k > 0 \land k \in (\fullSat{\state}{\mask \cup \mask_F}{\rs \rtimes \rs_F}{W_F}) \implies{}\\
&\qquad &\qquad
(\expr \in \textdom{Val} \implies \Exists W' \geq W_F. \Exists \rs'. \\ (\expr \in \textdom{Val} \implies \Exists W' \geq W_F. \Exists \rs'. \\
&\qquad\qquad &\qquad\qquad
k \in (\fullSat{\state}{\mask \cup \mask_F}{\rs' \rsplit \rs_F}{W'}) \land (k, \rs') \in q(\expr)(W'))~\land \\ k \in (\fullSat{\state}{\mask \cup \mask_F}{\rs' \rtimes \rs_F}{W'}) \land (k, \rs') \in q(\expr)(W'))~\land \\
&\qquad &\qquad
(\All\ectx,\expr_0,\expr'_0,\state'. \expr = \ectx[\expr_0] \land \cfg{\state}{\expr_0} \step \cfg{\state'}{\expr'_0} \implies \Exists W' \geq W_F. \Exists \rs'. \\ (\All\ectx,\expr_0,\expr'_0,\state'. \expr = \ectx[\expr_0] \land \cfg{\state}{\expr_0} \step \cfg{\state'}{\expr'_0} \implies \Exists W' \geq W_F. \Exists \rs'. \\
&\qquad\qquad &\qquad\qquad
k - 1 \in (\fullSat{\state'}{\mask \cup \mask_F}{\rs' \rsplit \rs_F}{W'}) \land (k-1, \rs') \in wp_\mask(\ectx[\expr_0'], q)(W'))~\land \\ k - 1 \in (\fullSat{\state'}{\mask \cup \mask_F}{\rs' \rtimes \rs_F}{W'}) \land (k-1, \rs') \in wp_\mask(\ectx[\expr_0'], q)(W'))~\land \\
&\qquad &\qquad
(\All\ectx,\expr'. \expr = \ectx[\fork{\expr'}] \implies \Exists W' \geq W_F. \Exists \rs', \rs_1', \rs_2'. \\ (\All\ectx,\expr'. \expr = \ectx[\fork{\expr'}] \implies \Exists W' \geq W_F. \Exists \rs', \rs_1', \rs_2'. \\
&\qquad\qquad &\qquad\qquad
k - 1 \in (\fullSat{\state}{\mask \cup \mask_F}{\rs' \rsplit \rs_F}{W'}) \land \rs' = \rs_1' \rsplit \rs_2'~\land \\ k - 1 \in (\fullSat{\state}{\mask \cup \mask_F}{\rs' \rtimes \rs_F}{W'}) \land \rs' = \rs_1' \rtimes \rs_2'~\land \\
&\qquad\qquad &\qquad\qquad
(k-1, \rs_1') \in \mathit{wp}_\mask(\ectx[\textsf{fRet}], q)(W') \land (k-1, \rs_1') \in \mathit{wp}_\mask(\ectx[\textsf{fRet}], q)(W') \land
(k-1, \rs_2') \in \mathit{wp}_\top(\expr', \Lam\any. \top)(W')) (k-1, \rs_2') \in \mathit{wp}_\top(\expr', \Lam\any. \top)(W'))
...@@ -520,3 +520,8 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land ...@@ -520,3 +520,8 @@ $\rho\nequiv{n} \rho' \iff n=0 \lor \bigl(\dom(\rho)=\dom(\rho') \land
\implies (n, \rs) \in \semTerm{\vctx \proves \prop : \Prop}_\gamma(W) \implies (n, \rs) \in \semTerm{\vctx \proves \prop : \Prop}_\gamma(W)
\end{aligned} \end{aligned}
\] \]
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "iris"
%%% End:
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
\newcommand*{\axiomhref}[3]{\inferhref{#1}{#2}{}{#3}} \newcommand*{\axiomhref}[3]{\inferhref{#1}{#2}{}{#3}}
\newcommand*{\axiomH}[2]{\inferH{#1}{}{#2}} \newcommand*{\axiomH}[2]{\inferH{#1}{}{#2}}
\newcommand*{\inferhrefB}[4]{{\BIIMP\inferhref{#1}{#2}{#3}{#4}}} \newcommand*{\inferhrefB}[4]{{\BIIMP\inferhref{#1}{#2}{#3}{#4}}}
\newcommand*{\inferB}[3][]{{\BIIMP\infer[#1]{#2}{#3}}}
\newcommand*{\inferHB}[3]{{\BIIMP\inferH{#1}{#2}{#3}}} \newcommand*{\inferHB}[3]{{\BIIMP\inferH{#1}{#2}{#3}}}
\newcommand*{\taghref}[2]{\label{#2}\tag{\rulenamestyle{#1}}} \newcommand*{\taghref}[2]{\label{#2}\tag{\rulenamestyle{#1}}}
\newcommand*{\tagH}[1]{\taghref{#1}{#1}} \newcommand*{\tagH}[1]{\taghref{#1}{#1}}
......
...@@ -7,58 +7,43 @@ ...@@ -7,58 +7,43 @@
\usepackage{amsthm} \usepackage{amsthm}
\usepackage{amssymb} \usepackage{amssymb}
\usepackage{stmaryrd} \usepackage{stmaryrd}
\SetSymbolFont{stmry}{bold}{U}{stmry}{m}{n} % this fixes warnings when \boldsymbol is used with stmaryrd included
\usepackage{mathpartir} \usepackage{mathpartir}
\usepackage{array}\extrarowheight=\jot % else, arrays are scrunched compared to, say, aligned \usepackage{array}
\newcolumntype{.}{@{}} \usepackage{tabu}
% Array {rMcMl} modifies array {rcl}, putting mathrel-style spacing
% around the centered column. (We used this, for example, in laying
% out some of Iris' axioms. Generally, aligned is simpler but aligned
% does not work in mathpar because \\ inherits mathpar's 2em vskip.)
% The capital M stands for THICKMuskip. The smaller medmuskip would be
% right for mathbin-style spacing.
\newcolumntype{M}{@{\mskip\thickmuskip}}
\usepackage{tabu}%\tabulinesep=_0pt^\jot
\usepackage{dashbox} \usepackage{dashbox}
%\usepackage{arydshln}
%\setlength{\dashlinegap}{1pt}
%\setlength{\dashlinedash}{3pt}
\usepackage{hyperref}
\hypersetup{%
linktocpage=true, pdfstartview=FitV,
breaklinks=true, pageanchor=true, pdfpagemode=UseOutlines,
plainpages=false, bookmarksnumbered, bookmarksopen=true, bookmarksopenlevel=3,
hypertexnames=true, pdfhighlight=/O,
colorlinks=true,linkcolor=LinkColor,citecolor=CiteColor,
urlcolor=LinkColor
}
\newcommand*{\Sref}[1]{\hyperref[#1]{\S\ref*{#1}}}
\newcommand*{\secref}[1]{\hyperref[#1]{Section~\ref*{#1}}}
\newcommand*{\lemref}[1]{\hyperref[#1]{Lemma~\ref*{#1}}}
\newcommand{\corref}[1]{\hyperref[#1]{Cor.~\ref*{#1}}}
\newcommand*{\defref}[1]{\hyperref[#1]{Definition~\ref*{#1}}}
\newcommand*{\egref}[1]{\hyperref[#1]{Example~\ref*{#1}}}
\newcommand*{\appendixref}[1]{\hyperref[#1]{Appendix~\ref*{#1}}}
\newcommand*{\figref}[1]{\hyperref[#1]{Figure~\ref*{#1}}}
\newcommand*{\tabref}[1]{\hyperref[#1]{Table~\ref*{#1}}}
\usepackage{pftools} \usepackage{pftools}
%\usepackage{pfsteps}
%\newcommand*{\pflab}[1]{\steppfcounter[#1](\thepfcounter)}
%\newcommand*{\pftag}[1]{\steppfcounter[#1]\tag{\thepfcounter}}
%\renewcommand\byCasesEveryCase{} % turn off counter reset on cases
%\renewcommand\byCasesEveryOtherwise{}
%\usepackage[monochrome]{color} % for print version
\usepackage{xcolor} % for print version \usepackage{xcolor} % for print version
\usepackage{graphicx} \usepackage{graphicx}
\usepackage{tikz}
\usepackage{scalerel}
\usepackage{rotating}
\usepackage{xparse}
\usepackage{xstring}
\usepackage{semantic}
\usepackage{csquotes}
\usepackage{hyperref}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% SETUP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\extrarowheight=\jot % else, arrays are scrunched compared to, say, aligned
\newcolumntype{.}{@{}}
% Array {rMcMl} modifies array {rcl}, putting mathrel-style spacing
% around the centered column. (We used this, for example, in laying
% out some of Iris' axioms. Generally, aligned is simpler but aligned
% does not work in mathpar because \\ inherits mathpar's 2em vskip.)
% The capital M stands for THICKMuskip. The smaller medmuskip would be
% right for mathbin-style spacing.
\newcolumntype{M}{@{\mskip\thickmuskip}}
\definecolor{StringRed}{rgb}{.637,0.082,0.082} \definecolor{StringRed}{rgb}{.637,0.082,0.082}
\definecolor{CommentGreen}{rgb}{0.0,0.55,0.3} \definecolor{CommentGreen}{rgb}{0.0,0.55,0.3}
...@@ -67,7 +52,6 @@ ...@@ -67,7 +52,6 @@
\definecolor{CiteColor}{rgb}{0.55,0.0,0.3} \definecolor{CiteColor}{rgb}{0.55,0.0,0.3}
\definecolor{HighlightColor}{rgb}{0.0,0.0,0.0} \definecolor{HighlightColor}{rgb}{0.0,0.0,0.0}
\usepackage{tikz}
\usetikzlibrary{shapes} \usetikzlibrary{shapes}
%\usetikzlibrary{snakes} %\usetikzlibrary{snakes}
\usetikzlibrary{arrows} \usetikzlibrary{arrows}
...@@ -80,12 +64,16 @@ ...@@ -80,12 +64,16 @@
\definecolor{grey}{rgb}{0.5,0.5,0.5} \definecolor{grey}{rgb}{0.5,0.5,0.5}
\definecolor{red}{rgb}{1,0,0} \definecolor{red}{rgb}{1,0,0}
%\renewcommand{\pfcounteranchor}[1]
% {{\scriptsize#1\color{grey}.}\ \ }
% {{\scriptsize{\color{grey}(}#1{\color{grey})}}\ \ }
% \usepackage[all,cmtip]{xy} \hypersetup{%
% \usepackage{diagxy} linktocpage=true, pdfstartview=FitV,
breaklinks=true, pageanchor=true, pdfpagemode=UseOutlines,
plainpages=false, bookmarksnumbered, bookmarksopen=true, bookmarksopenlevel=3,
hypertexnames=true, pdfhighlight=/O,
colorlinks=true,linkcolor=LinkColor,citecolor=CiteColor,
urlcolor=LinkColor
}
%\theoremstyle{definition} %\theoremstyle{definition}
%\newtheorem{prop}{Prop} %\newtheorem{prop}{Prop}
...@@ -96,16 +84,30 @@ ...@@ -96,16 +84,30 @@
\newtheorem{thm}{Theorem} \newtheorem{thm}{Theorem}
\newtheorem{exercise}{Exercise} \newtheorem{exercise}{Exercise}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FONTS & FORMATTING
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\SetSymbolFont{stmry}{bold}{U}{stmry}{m}{n} % this fixes warnings when \boldsymbol is used with stmaryrd included
\newcommand{\textdom}[1]{\textit{#1}}
\newcommand{\textlog}[1]{\textsf{#1}}
\newcommand{\textsort}[1]{\textlog{#1}}
\newcommand{\textlang}[1]{\texttt{#1}}
\newcommand{\textmon}[1]{\textsc{#1}}
\usepackage{rotating}
\usepackage{xparse}
\usepackage{xstring}
\usepackage{semantic}
\usepackage{csquotes}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MACROS % GENERIC MACROS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand*{\Sref}[1]{\hyperref[#1]{\S\ref*{#1}}}
\newcommand*{\secref}[1]{\hyperref[#1]{Section~\ref*{#1}}}
\newcommand*{\lemref}[1]{\hyperref[#1]{Lemma~\ref*{#1}}}
\newcommand{\corref}[1]{\hyperref[#1]{Cor.~\ref*{#1}}}
\newcommand*{\defref}[1]{\hyperref[#1]{Definition~\ref*{#1}}}
\newcommand*{\egref}[1]{\hyperref[#1]{Example~\ref*{#1}}}
\newcommand*{\appendixref}[1]{\hyperref[#1]{Appendix~\ref*{#1}}}
\newcommand*{\figref}[1]{\hyperref[#1]{Figure~\ref*{#1}}}
\newcommand*{\tabref}[1]{\hyperref[#1]{Table~\ref*{#1}}}
\newcommand{\changes}{{\bf\color{red}{Changes}}} \newcommand{\changes}{{\bf\color{red}{Changes}}}
\newcommand{\TODO}{\vskip 4pt {\color{red}\bf TODO}} \newcommand{\TODO}{\vskip 4pt {\color{red}\bf TODO}}
...@@ -117,7 +119,6 @@ ...@@ -117,7 +119,6 @@
\newcommand*{\sep}[1][]{\mathrel{\#_{#1}}} % bad name; it's a different "sep" \newcommand*{\sep}[1][]{\mathrel{\#_{#1}}} % bad name; it's a different "sep"
\newcommand{\kw}[1]{\textbf{\textsf{#1}}}
\newcommand{\ALT}{\ |\ } \newcommand{\ALT}{\ |\ }
\newenvironment{pf} \newenvironment{pf}
...@@ -133,6 +134,14 @@ ...@@ -133,6 +134,14 @@
\newcommand{\upclose}{\mathord{\uparrow}} \newcommand{\upclose}{\mathord{\uparrow}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LANGUAGE-LEVEL SYNTAX AND SEMANTICS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\cfg}[2]{{#1};{#2}}
\newcommand{\fork}[1]{\textlang{fork}\;{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% METAVARIABLES % METAVARIABLES
...@@ -168,10 +177,10 @@ ...@@ -168,10 +177,10 @@
\newcommand{\subst}{\gamma} \newcommand{\subst}{\gamma}
\newcommand{\island}{I} %\newcommand{\island}{I}
\newcommand{\sisland}{\iota} \newcommand{\sisland}{\iota}
%\newcommand{\islands}{\omega} %\newcommand{\islands}{\omega}
\newcommand{\islands}{\mathbf{\island}} %\newcommand{\islands}{\mathbf{\island}}
\newcommand{\predinterp}{\PRED} \newcommand{\predinterp}{\PRED}
\newcommand{\propinterp}{\mathcal{P}} \newcommand{\propinterp}{\mathcal{P}}
...@@ -186,7 +195,7 @@ ...@@ -186,7 +195,7 @@
\newcommand{\restypes}{\boldsymbol{\theta}} \newcommand{\restypes}{\boldsymbol{\theta}}
\newcommand{\aprop}{{\color{red}A}} %\newcommand{\aprop}{{\color{red}A}}
\newcommand{\prop}{P} \newcommand{\prop}{P}
\newcommand{\propB}{Q} \newcommand{\propB}{Q}
...@@ -196,12 +205,6 @@ ...@@ -196,12 +205,6 @@
\newcommand{\predB}{\psi} \newcommand{\predB}{\psi}
\newcommand{\predC}{\zeta} \newcommand{\predC}{\zeta}
\newcommand{\Prop}{\textlog{Prop}}
\newcommand{\Pred}{\textlog{Pred}}
\newcommand{\PropDom}{\textit{Prop}}
\newcommand{\PredDom}{\textit{Pred}}
% \newcommand{\Prop}{\mathbb{B}} % \newcommand{\Prop}{\mathbb{B}}
% \newcommand{\Pred}{\mathbb{P}} % \newcommand{\Pred}{\mathbb{P}}
...@@ -214,23 +217,6 @@ ...@@ -214,23 +217,6 @@
\newcommand{\vctx}{\Gamma} \newcommand{\vctx}{\Gamma}
\newcommand{\pfctx}{\Theta} \newcommand{\pfctx}{\Theta}
\newcommand{\PCLCTX}{Prop context}
\newcommand{\PCVARS}{Variables}
\newcommand{\PContextStyle}[1]{\fbox{\extrasepB{0.5pt}\color{CommentGreen}$#1$}}
%\newcommand{\PContextStyle}[1]{\ensuremath{\color{CommentGreen}\left[#1\right]}}
\newcommand{\PContext}[1]{\PContextStyle{\begin{array}{@{}l@{}}\textbf{\PCLCTX: }\\#1\end{array}}}
\newcommand{\PContextB}[2]{\PContextStyle{\begin{array}{@{}l@{}}
\textbf{\PCLCTX: }\hspace{\stretch{1}}\textbf{\PCVARS: }{#1}
\\#2
\end{array}}}
\newcommand{\PContextC}[2]{\PContextStyle{\begin{array}{@{}l@{}}
\textbf{\PCLCTX: }\qquad\textbf{\PCVARS: }{#1}
\\#2
\end{array}}}
\newcommand{\PContextD}[2]{\PContextStyle{
\textbf{\PCLCTX: }{#2}\qquad\textbf{\PCVARS: }{#1}}}
\newcommand{\PContextE}[1]{\PContextStyle{\textbf{\PCVARS: }{#1}}}
\newcommand{\assert}{\varphi} \newcommand{\assert}{\varphi}
\newcommand{\assertB}{\psi} \newcommand{\assertB}{\psi}
...@@ -247,18 +233,11 @@ ...@@ -247,18 +233,11 @@
\newcommand{\inv}{I} \newcommand{\inv}{I}
\newcommand{\invs}{\mathcal{I}} \newcommand{\invs}{\mathcal{I}}
\newcommand{\mask}{\mathcal{E}} \newcommand{\mask}{\mathcal{E}}
\newcommand{\consistent}{\textsf{consistent}}
\newcommand{\fullSat}[4]{#1 \models_{#2} #3; #4}
\newcommand{\fullNSat}[6]{#2 \models_{#3}^{#1} #4; #5; #6}
\newcommand{\state}{\varsigma} \newcommand{\state}{\varsigma}
\newcommand{\prescar}{\Pi} \newcommand{\prescar}{\Pi}
\newcommand{\pres}{\pi} \newcommand{\pres}{\pi}
\newcommand{\erasestate}[1]{|#1|_\state}
\newcommand{\eraseexp}[1]{|#1|_\expr}
\newcommand{\var}{x} \newcommand{\var}{x}
\newcommand{\varB}{y} \newcommand{\varB}{y}
\newcommand{\varC}{z} \newcommand{\varC}{z}
...@@ -280,11 +259,7 @@ ...@@ -280,11 +259,7 @@
\newcommand{\ttokSet}{I} \newcommand{\ttokSet}{I}
\newcommand{\monoid}{M} \newcommand{\monoid}{M}
\newcommand{\mcar}[1]{|#1|}
\newcommand{\mcarp}[1]{\mcar{#1}^{+}}
\newcommand{\mzero}{\bot}
\newcommand{\munit}{\mathord{\varepsilon}}
\newcommand{\mtimes}{\mathbin{\cdot}}
%\newcommand{\mvar}{a} %\newcommand{\mvar}{a}
%\newcommand{\mvarB}{b} %\newcommand{\mvarB}{b}
\newcommand{\melt}{a} \newcommand{\melt}{a}
...@@ -293,46 +268,23 @@ ...@@ -293,46 +268,23 @@
\newcommand{\melts}{A} \newcommand{\melts}{A}
\newcommand{\meltsB}{B} \newcommand{\meltsB}{B}
\newcommand{\ghostRes}{g} \newcommand{\ghostRes}{g}
\newcommand{\gtimes}{\bullet}
\newcommand{\monoids}{\textrm{ProdMonoid}}
\newcommand{\gname}{\gamma}
\newcommand{\valid}{\textsf{valid}}
\newcommand{\textmon}[1]{\textsc{#1}}
\newcommand{\textstate}[1]{\textsf{#1}}
\newcommand{\texttok}[1]{\textsc{#1}}
\newcommand{\atlas}{A}
\newcommand{\gname}{\gamma}
\newcommand{\chmap}{C} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\bag}{M} % IDENTIFIERS
\newcommand{\chan}{c} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\chanmaps}{\Yleft}
\newcommand{\fchanmaps}[1][-]{\stackrel{#1}{\chanmaps}}
\newcommand{\msg}{m} \newcommand{\Prop}{\textlog{Prop}}
\newcommand{\dest}{d} \newcommand{\Pred}{\textlog{Pred}}
\let\mkbag=\bag
\newcommand{\bagB}{N}
\newcommand{\emptybag}{\emptyset}
\newcommand{\MASK}{InvMask}
\newcommand{\CHAN}{Chan}
\newcommand{\VAR}{Var}
\newcommand{\VAL}{Val}
\newcommand{\EXP}{Exp}
\newcommand{\ECTX}{Ctx}
\newcommand{\hole}{[]}
\newcommand{\BAG}{Bag}
\newcommand{\STATE}{State}
\newcommand{\rvar}{r}
\newcommand{\PropDom}{\textdom{Prop}}
\newcommand{\PredDom}{\textdom{Pred}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% SYNTAX % SYMBOLS, NOTATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\All #1.{\forall #1.\;}% \def\All #1.{\forall #1.\;}%
...@@ -344,149 +296,21 @@ ...@@ -344,149 +296,21 @@
\newcommand{\any}{{\rule[-.2ex]{1ex}{.4pt}}}% \newcommand{\any}{{\rule[-.2ex]{1ex}{.4pt}}}%
\newcommand{\unitval}{()}% \newcommand{\unitval}{()}%
%\newcommand{\emptytenv}{\bullet}
%\newcommand{\fn}[2]{\lambda {#1}. {#2}}
%\newcommand{\app}[2]{{#1}\;{#2}}
%\newcommand{\pair}[1]{\llparenthesis #1 \rrparenthesis}
%\newcommand{\true}{\kw{true}}
%\newcommand{\false}{\kw{false}}
%\newcommand{\ite}[3]{\kw{if}\ #1\ \kw{then}\ #2\ \kw{else}\ #3}
%\newcommand{\new}{\kw{new}\;}
%\newcommand{\deref}[1]{\kw{get}\;{#1}}
%\newcommand{\assign}[2]{{#1}\;:=\;{#2}}
%\newcommand{\cas}{\kw{CAS}}
%\newcommand{\unfold}{\kw{unfold}\ }
%\newcommand{\fold}{\kw{fold}\ }
%\newcommand{\unroll}{\kw{unroll}\ }
%\newcommand{\roll}{\kw{roll}\ }
%\newcommand{\rec}[2]{\kw{rec}\; {#1}.{#2}}
%\newcommand{\recf}[3]{\kw{rec}\;{#1}({#2}).{#3}}
%\newcommand{\recf}[3]{\mu{#1}({#2}).{#3}}
%\newcommand{\fix}[2]{\kw{fix}\ {#1}.{#2}}
%\newcommand{\pack}[1]{\kw{pack}\;{#1}}
%\newcommand{\unpack}[3]{\kw{unpack}\ #1\ \kw{as}\ #2\ \kw{in}\ #3}
%\newcommand{\atomic}[1]{\kw{atomic}\;{#1}}
%\newcommand{\inatomic}[1]{\kw{inatomic}\;{#1}}
%\newcommand{\bind}[2]{\kw{let}\;{#1}\;\kw{in}\;{#2}}
%
%\newcommand{\lnew}{\kw{newLcl}}
%\newcommand{\lderef}[1]{\kw{getLcl}({#1})}
%\newcommand{\lassign}[2]{\kw{setLcl}({#1},{#2})}
%
%\newcommand{\makeAtomic}{\textsf{mkAtomic}}
%\newcommand{\withLock}{\textsf{withLock}}
\newcommand{\inj}[2]{\kw{inj}_{#1}\;#2}
\newcommand{\inl}[1]{\inj{1}{#1}}
\newcommand{\inr}[1]{\inj{2}{#1}}
\newcommand{\prj}[2]{\kw{prj}_{#1}\;#2}
\newcommand{\prl}[1]{\prj{1}{#1}}
\newcommand{\prr}[1]{\prj{2}{#1}}
%% \newcommand{\match}[5]{\kw{case}\;{#1}\;\kw{of}\;
%% \inl{#2} \Rightarrow {#3}\;|\;
%% \inr{#4} \Rightarrow {#5}}
\newcommand{\match}[5]{
\kw{case}({#1}, #2 \Rightarrow {#3}, {#4} \Rightarrow {#5})}
\newcommand{\tabs}[1]{\Lambda. {#1}}
\newcommand{\tapp}[1]{{#1}\;\any}
\newcommand{\fork}[1]{\kw{fork}\;{#1}}
\newcommand{\forkid}[1]{\textsf{forkID}\;{#1}}
\newcommand{\join}[1]{\textsf{join}\;{#1}}
\newcommand{\tryAcq}{\textsf{tryAcq}}
\newcommand{\acq}{\textsf{acq}}
\newcommand{\rel}{\textsf{rel}}
%\newcommand{\sync}[2]{\textsf{sync}(#1)\;\{\;{#2}\;\}}
\newcommand{\sync}{\textsf{sync}}
\newcommand{\mkSync}{\textsf{mkSync}}
\definecolor{Erased}{rgb}{0.35,0.35,0.35}
\definecolor{ErasedLight}{rgb}{0.5,0.5,0.5}
\newcommand{\erased}[1]{{\color{ErasedLight}[}{\color{Erased}#1}{\color{ErasedLight}]}}
%\newcommand{\erased}[1]{\underline{#1}}
\newcommand{\bool}{\kw{B}}
\newcommand{\nat}{\kw{N}}
\newcommand{\unit}{\kw{1}}
%% \newcommand{\b\ool}{\kw{bool}}
%% \newcommand{\nat}{\kw{nat}}
%% \newcommand{\unit}{\kw{unit}}
%\newcommand{\refTy}[1]{\kw{ref}\;{#1}}
%\newcommand{\lrefTy}[1]{\kw{refLcl}\;{#1}}
%\newcommand{\optrefTy}[1]{\kw{ref}_{?}({#1})}
%\newcommand{\optTy}[1]{{#1}_{?}}
%\newcommand{\none}{\textsf{none}}
%\newcommand{\some}{\textsf{some}}
%\newcommand{\threadTy}[1]{\kw{thread}\;{#1}}
%\newcommand{\all}[2]{\forall {#1}.{#2}}
%\newcommand{\ex}[2]{\exists {#1}.{#2}}
%\newcommand{\recTy}[2]{\mu {#1}.{#2}}
%\newcommand{\thread}[1]{\kw{thread}\;{#1}}
%
%\newcommand{\derefi}[2]{\kw{get}({#1}[{#2}])}
%\newcommand{\assigni}[3]{{#1}[#2]\;:=\;{#3}}
%\newcommand{\casi}[4]{\cas({#1}[{#2}], #3, #4)}
%
%\newcommand{\casF}[3]{\cas({#1}, #2, #3)}
%% \newcommand{\mpair}[2]{#1 \otimes #2}
%% \newcommand{\assignL}[2]{{#1}\;:=_1\;{#2}}
%% \newcommand{\assignR}[2]{{#1}\;:=_2\;{#2}}
\newcommand{\emptyivar}{\bot}
\newcommand{\cfg}[2]{{#1};{#2}} \newcommand{\fullSat}[4]{#1 \models_{#2} #3; #4}
\newcommand{\acfg}[3]{{#1};\;{#2};\;{#3}} \newcommand{\fullNSat}[6]{#2 \models_{#3}^{#1} #4; #5; #6}
\newcommand{\enables}[2]{#1\mbox{ enables }#2}
\newcommand{\erasestate}[1]{|#1|_\state}
\newcommand{\R}[1]{\mbox{$\{\;\begin{array}[t]{@{}l@{}}{#1}\;\}\end{array}$}} \newcommand{\eraseexp}[1]{|#1|_\expr}
\newcommand{\id}{\bot} \newcommand{\mcar}[1]{|#1|}
\newcommand{\mcarp}[1]{\mcar{#1}^{+}}
\newcommand{\isvar}{N} \newcommand{\mzero}{\bot}
\newcommand{\iset}{N} \newcommand{\munit}{\mathord{\varepsilon}}
\newcommand{\mtimes}{\mathbin{\cdot}}
%\newcommand*\kwd[1]{\textup{\textbf{\texttt{#1}}}} \newcommand{\gtimes}{\bullet}
\let\kwd\kw
\newcommand*\dform[1]{\textsf{#1}}
\newcommand*{\ide}[1]{\mathit{#1}}
\reservestyle{\keyword}{\kw}
\reservestyle{\langop}{\mathrm}
\reservestyle{\derivedform}{\dform}
\reservestyle{\identifier}{\ide}
\keyword{let[let\:],let*[let],in[\:in\:],if[if\:],then[\:then\:],else[\:else\:],skip,skip*[skip]}
\keyword{case[case\:],of[\:of\:]}%
\keyword{rec[rec\:],rec*[rec]}
\def\Rec #1.{\<rec>{#1}.\;}
\keyword{fork[fork\:],newch,newch*[newch],send,send*[send],tryrecv[tryrecv\:],tryrecv*[tryrecv]}%
\derivedform{recv[recv\:],recv*[recv]}%
\derivedform{cas,cas*[cas],ref[ref\:],ref*[ref]}
%\newcommand{\cas}{\<cas*>}% override setup's \kw{CAS}
\langop{!,:=}
\derivedform{true,false}
\derivedform{Some,None}
\derivedform{null}
\identifier{reply}%
\derivedform{srv,rpc,rpc*[rpc],Get,Set,Cas}%
\derivedform{spawn,join}
\newcommand\parcomp{\mathrel{||}}
\identifier{loop}%
\newcommand*{\Esend}[2]{\<send>(#1, #2)}
\newcommand{\Eref}{\mask_\textsf{ref}}
\newcommand*{\refmaps}{\mapsto}
\newcommand{\Echan}{\mask_\mathsf{chan}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ASSERTIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\protAt}[3]{\mbox{$ \newcommand{\protAt}[3]{\mbox{$
...@@ -618,131 +442,6 @@ ...@@ -618,131 +442,6 @@
\newcommand{\gmapsto}{\hookrightarrow}% \newcommand{\gmapsto}{\hookrightarrow}%
\newcommand{\fgmapsto}[1][-]{\stackrel{#1}{\gmapsto}}% \newcommand{\fgmapsto}[1][-]{\stackrel{#1}{\gmapsto}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% EXAMPLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\onemany}[3]{
\draw[thick,->] (#1) to node [swap] {#2} (#3)
% \draw[-,thick] (#1) to node [swap] {#2} (#3)
}
\newcommand{\onemanyB}[3]{
\draw[thick,->] (#1) to node {#2} (#3)
% \draw[-,thick] (#1) to node [swap] {#2} (#3)
}
\newcommand{\onemanyabove}[3]{
\draw[thick,->] (#1) to [out=90,in=90] node [swap] {#2} (#3)
% \draw[-,thick] (#1) to [out=90,in=90] node [swap] {#2} (#3)
}
\newcommand{\ret}{\textsf{ret}}
\newcommand{\try}{\textsf{try}}
%\newcommand{\lock}{\textsf{lock}}
%\newcommand{\unlock}{\textsf{unlock}}
%\newcommand{\newlock}{\textsf{newlock}}
\newcommand{\head}{\textsf{hd}}
\newcommand{\optionTy}{\textsf{option}}
\newcommand{\extract}[1]{\textsf{getVal}(#1)}
\newcommand{\listTy}{\textsf{list}}
\newcommand{\cons}{\textsf{cons}}
\newcommand{\nil}{\textsf{nil}}
\newcommand{\nullv}{\textsf{null}}
%\newcommand{\nil}{\none}
\newcommand{\setNext}{\textsf{setNext}}
\newcommand{\consAtI}[3]{{#1} \propto_\simpl \cons({#2}, {#3})}
\newcommand{\consAtS}[3]{{#1} \propto_\sspec \cons({#2}, {#3})}
%\newcommand{\consAt}[3]{\cons({#1}, {#2})@{#3}}
\newcommand{\enq}{\textsf{enq}}
%\newcommand{\tryDeq}{\textsf{tryDeq}}
\newcommand{\deq}{\textsf{deq}}
\newcommand{\live}{\textsf{Live}}
\newcommand{\dead}{\textsf{Dead}}
\newcommand{\sentinel}{\textsf{Sentinel}}
\newcommand{\link}{\textlog{Link}}
%\newcommand{\lateChoice}{\textsf{lateChoice}}
%\newcommand{\earlyChoice}{\textsf{earlyChoice}}
%\newcommand{\rand}{\textsf{rand}}
%\newcommand{\redFlag}{\textsf{redFlag}}
%\newcommand{\blueFlag}{\textsf{blueFlag}}
%\newcommand{\flag}{\textit{flag}}
%\newcommand{\chan}{\textit{chan}}
%\newcommand{\flip}{\textsf{flip}}
%\newcommand{\flipBody}{\textsf{flipBody}}
%\newcommand{\read}{\textsf{read}}
%\newcommand{\install}{\textsf{install}}
%\newcommand{\commit}{\textsf{commit}}
%\newcommand{\abort}{\textsf{abort}}
%\newcommand{\complete}{\textsf{complete}}
\newcommand{\undecided}{\textsf{U}}
\newcommand{\committed}{\textsf{C}}
\newcommand{\aborted}{\textsf{A}}
\newcommand{\descriptor}{\textsf{descriptor}}
\newcommand{\ccas}{\widehat{\textsf{ccas}}}
\newcommand{\ccasCAS}{\widehat{\textsf{cas}}}
\newcommand{\ccasRead}{\widehat{\textsf{read}}}
\newcommand{\Empty}{\textsf{Empty}}
\newcommand{\Offered}{\textsf{Offered}}
\newcommand{\Accepted}{\textsf{Accepted}}
\newcommand{\counter}{\textsf{counter}}
\newcommand{\fun}{\textsf{fun}}
\newcommand{\get}{\textsf{get}}
\newcommand{\complete}{\textsf{complete}}
\newcommand{\setFlag}{\textsf{setFlag}}
\newcommand{\condInc}{\textsf{cinc}}
\newcommand{\Signaled}{\textsf{Signaled}}
\newcommand{\Speculated}{\textsf{Speculated}}
\newcommand{\Completed}{\textsf{Done}}
\newcommand{\Withdrawn}{\textsf{Gone}}
\newcommand{\Upd}{\textsf{Upd}}
\newcommand{\Const}{\textsf{Const}}
\newcommand{\reach}{\textsf{reach}}
\newcommand{\ann}[1]{
{\color{KeywordBlue}\ensuremath{
\{
\begin{array}[t]{@{}l@{}}
#1
\end{array}
\}}}
}
\newcommand{\annB}[1]{
{\color{KeywordBlue}\ensuremath{
\left\{
\begin{array}{@{}l@{}}
#1
\end{array}
\right\}}}
}
\newcommand{\aann}[1]{
{\color{KeywordBlue}
\begin{array}{@{}l@{}}
\llparenthesis #1 \rrparenthesis
\end{array}}
}
\newcommand{\sortOf}{\textlog{sort}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% JUDGMENTS % JUDGMENTS
...@@ -761,44 +460,9 @@ ...@@ -761,44 +460,9 @@
\newcommand{\isAtomic}[2]{\cfg{#1}{#2}\ \textrm{atomic}} \newcommand{\isAtomic}[2]{\cfg{#1}{#2}\ \textrm{atomic}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MATH % MATH SYMBOLS & NOTATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\pabs}{\lambda}
\newcommand{\textdom}[1]{\textit{#1}}
%\newcommand{\texttok}[1]{\textit{#1}}
\newcommand{\textlog}[1]{\textsf{#1}}
\newcommand{\textsort}[1]{\textlog{#1}}
\newcommand{\textvar}[1]{\textit{#1}}
\newcommand{\erase}[1]{\lfloor #1 \rfloor}
\newcommand{\UNLIMITED}{\textdom{UWorld}}
\newcommand{\sat}[3]{(#1,#2) : {#3}}
\newcommand{\satw}[3]{#1, #2 : #3}
\newcommand{\satwi}[4]{#1, #2 : #3, #4}
\newcommand{\satwiB}[3]{#1 : #2, #3}
\newcommand{\satall}[5]{#1, #2 \models_{#3} #4, #5}
\newcommand{\ftv}[1]{\mathrm{ftv}(#1)}
\newcommand{\tv}[1]{\mathrm{tyvars}(#1)}
\newcommand{\vars}[1]{\mathrm{vars}(#1)}
\newcommand{\threads}[1]{\mathrm{threads}(#1)}
\newcommand{\spec}[2]{\mathrm{spec}(#1,#2)}
\newcommand{\refisland}[2]{\mathrm{ref}(#1, #2)}
\newcommand{\hvalisland}[2]{\mathrm{hval}(#1, #2)}
\newcommand{\halloc}[2]{\mathrm{halloc}\left(#1, #2\right)}
\newcommand{\withIsland}{\blacktriangleleft}
\newcommand{\withIslands}{\blacktriangleleft}
\newcommand{\wimplspecextend}[2]{#1 \blacktriangleleft #2}
\newcommand{\whvalalloc}[3]{#1 \blacktriangleleft_{#2} #3}
\newcommand{\wok}[1]{{#1}\;\mbox{valid}} % ``World OK''
\newcommand{\pfn}{\rightharpoonup} \newcommand{\pfn}{\rightharpoonup}
\newcommand{\fpfn}{\stackrel{\textrm{fin}}{\rightharpoonup}} \newcommand{\fpfn}{\stackrel{\textrm{fin}}{\rightharpoonup}}
\newcommand{\ra}{\rightarrow} \newcommand{\ra}{\rightarrow}
...@@ -806,54 +470,11 @@ ...@@ -806,54 +470,11 @@
\newcommand{\Lra}{\Leftrightarrow} \newcommand{\Lra}{\Leftrightarrow}
\newcommand{\monra}{\stackrel{\textrm{mon}}{\rightarrow}} \newcommand{\monra}{\stackrel{\textrm{mon}}{\rightarrow}}
%\newcommand{\res}{\upharpoonright} %\newcommand{\res}{\upharpoonright}
\newcommand{\restr}[2]{\lfloor #1 \rfloor_{#2}}
\newcommand{\zipTo}{\upharpoonright}
\newcommand{\OLDPRIMSTEP}[1]{{\color{red}\hookrightarrow}}
\newcommand{\reachable}{\diamond}
\newcommand{\cstep}{\rightrightarrows}
\newcommand{\primstep}[1]{\stackrel{#1}{\rightarrow}}
\newcommand{\purestep}{\stackrel{\textrm{pure}}{\rightarrow}}%
\newcommand{\step}{\ra} \newcommand{\step}{\ra}
\newcommand{\lstep}[1]{\stackrel{#1}{\step}}
\newcommand{\starstep}{\step^{*}}
\newcommand{\stepstar}{\starstep}
\newcommand{\resstep}[3]{#1 \vdash #2 \step #3}
\newcommand{\lresstep}[4]{#1 \vdash #2 \lstep{#4} #3}
\newcommand{\heapOf}{\textrm{heap}}
\newcommand{\mstep}[1]{\stackrel{#1}{\leadsto}}
\newcommand{\exclusive}[1]{\textrm{ex}(#1)}
\newcommand{\tpalg}[1]{\overline{\wp}(#1)}
\newcommand{\optional}[1]{{#1}_\id}
\newcommand{\tsys}[1]{\textrm{trans}(#1)}
\newcommand{\pstep}{\leadsto}
\newcommand{\lpstep}[1]{\stackrel{#1}{\pstep}}
\newcommand{\downto}{\searrow}
\newcommand{\wstep}[5]{\langle#1, #2\rangle \stackrel{#3}{\rightarrow} \langle#4, #5\rangle}
\newcommand{\wsplit}{\bullet}
\newcommand{\rsplit}{\bullet}
\newcommand{\issplit}{\otimes}
\newcommand{\ssplit}{\otimes}
\newcommand{\orspec}{\oplus}
\newcommand{\withCtx}{\triangleleft}
\newcommand{\protStatus}{E}
\newcommand{\disabled}{\textsf{disabled}}
\newcommand{\enabled}{\textsf{enabled}}
%\newcommand{\monora}{\stackrel{\textrm{mono}}{\longrightarrow}} %\newcommand{\monora}{\stackrel{\textrm{mono}}{\longrightarrow}}
\newcommand{\monora}{\Rightarrow} \newcommand{\monora}{\Rightarrow}
\newcommand{\restr}[2]{\lfloor #1 \rfloor_{#2}}
% LB % LB
\newcommand{\nequiv}[1]{\ensuremath{\mathrel{\stackrel{#1}{=}}}} \newcommand{\nequiv}[1]{\ensuremath{\mathrel{\stackrel{#1}{=}}}}
\newcommand{\notnequiv}[1]{\ensuremath{\mathrel{\stackrel{#1}{\neq}}}} \newcommand{\notnequiv}[1]{\ensuremath{\mathrel{\stackrel{#1}{\neq}}}}
...@@ -913,7 +534,6 @@ ...@@ -913,7 +534,6 @@
\newcommand{\pvsA}[3]{\textlog{vs}_{#2}^{#3}({#1})} \newcommand{\pvsA}[3]{\textlog{vs}_{#2}^{#3}({#1})}
\usepackage{scalerel}
% \hoaresizebox pre post % \hoaresizebox pre post
% \hoarescalebox char sizebox % \hoarescalebox char sizebox
\newcommand*{\hoaresizebox}[1]{% \newcommand*{\hoaresizebox}[1]{%
...@@ -1013,32 +633,6 @@ ...@@ -1013,32 +633,6 @@
\newcommand{\geqIS}{\sqsupseteq} \newcommand{\geqIS}{\sqsupseteq}
\newcommand{\relyguar}{\textrm{rg}}
\newcommand{\leqRG}{\stackrel{\relyguar}{\sqsubseteq}}
\newcommand{\leqRGB}[1]{\stackrel{\textrm{rg}}{\sqsubseteq_{#1}}}
\newcommand{\geqAll}{\sqsupseteq}
\newcommand{\geqRely}{\stackrel{\textrm{rely}}{\sqsupseteq}}
\newcommand{\geqRelyB}[1]{\stackrel{\textrm{rely}}{\sqsupseteq_{#1}}}
\newcommand{\geqRelyC}[1]{\sqsupseteq^{\textrm{rely}}_{#1}}
\newcommand{\geqGuar}{\stackrel{\textrm{guar}}{\sqsupseteq}}
\newcommand{\geqGuarB}[1]{\stackrel{\textrm{guar}}{\sqsupseteq_{#1}}}
\newcommand{\geqGuarC}[1]{\sqsupseteq^{\textrm{guar}}_{#1}}
\newcommand{\leqRely}{\stackrel{\textrm{rely}}{\sqsubseteq}}
\newcommand{\leqRelyB}[1]{\stackrel{\textrm{rely}}{\sqsubseteq_{#1}}}
\newcommand{\leqRelyC}[1]{\sqsubseteq^{\textrm{rely}}_{#1}}
\newcommand{\leqGuar}{\stackrel{\textrm{guar}}{\sqsubseteq}}
\newcommand{\leqGuarB}[1]{\stackrel{\textrm{guar}}{\sqsubseteq_{#1}}}
\newcommand{\leqGuarC}[1]{\sqsubseteq^{\textrm{guar}}_{#1}}
\newcommand{\intleq}{\stackrel{\textrm{int}}{\sqsubseteq}}
\newcommand{\extleq}{\stackrel{\textrm{ext}}{\sqsubseteq}}
\newcommand{\intgeq}{\stackrel{\textrm{int}}{\sqsupseteq}}
\newcommand{\extgeq}{\stackrel{\textrm{ext}}{\sqsupseteq}}
\newcommand{\withframe}{\ \mbox{${<}\!\!*$}\ }
\newcommand{\proves}{\vdash} \newcommand{\proves}{\vdash}
\newcommand{\provesalways}{\vdash_{\!\!\boxempty}} \newcommand{\provesalways}{\vdash_{\!\!\boxempty}}
\newcommand{\refines}{\leq} \newcommand{\refines}{\leq}
...@@ -1046,102 +640,14 @@ ...@@ -1046,102 +640,14 @@
\newcommand{\hasHVal}[3]{#1 \Ra \textrm{hval}(#2, #3)} \newcommand{\hasHVal}[3]{#1 \Ra \textrm{hval}(#2, #3)}
\newcommand{\multi}[1]{\!\!\!\begin{array}[t]{l}
#1
\end{array}
}
\newcommand{\multic}[1]{\!\!\!\begin{array}[c]{l}
#1
\end{array}
}
\newcommand{\pureleq}{\preceq_{\textrm{pure}}}
\newcommand{\logleq}[4]{#1 \proves #2 \preceq #3 : #4}
\newcommand{\semleq}[4]{#1 \models #2 \preceq #3 : #4}
\newcommand{\hypleq}[6]{{#1}; {#2} \models {#3} \proves {#4} \preceq {#5} : {#6}}
\newcommand{\progleq}[4]{#1 \models #2 \stackrel{\textrm{prog}}{\preceq} #3 : #4}
\newcommand{\specleq}[4]{#1 \models #2 \stackrel{\textrm{spec}}{\preceq} #3 : #4}
\newcommand{\mixleq}[4]{#1 \models #2 \stackrel{\textrm{mix}}{\preceq} #3 : #4}
\newcommand{\result}[2]{\pbrk
\begin{quotation}
\hskip -0.25in
$\begin{array}{@{}ll}
\textrm{If} & #1 \\
\textrm{then} & #2
\end{array}$
\end{quotation}
}
\newcommand{\resrule}[2]{\pbrk
\begin{quotation}
\hskip -0.25in
$\infer{#1}{#2}$
\end{quotation}
}
%\newcommand{\rand}{\\&}
\newcommand{\randB}{\qquad}
%\renewcommand{\labelitemi}{$\bullet$}
%\renewcommand{\labelitemii}{$\bullet$}
%\renewcommand{\labelitemiii}{$\bullet$}
%\renewcommand{\labelitemiv}{$\bullet$}
\newcommand{\mc}[1]{\multicolumn{2}{@{}l}{#1}}
\newcommand{\mcl}[2]{\multicolumn{#1}{@{}l}{#2}}
\newcommand{\citem}[1]{\item\textit{Case: } \fbox{$#1$}\quad}
\newcommand{\cand}{\textrm{ and }}
\newcommand{\claim}[1]{\vskip 5pt \noindent \mbox{\textit{Claim: } \fbox{$#1$}}\quad}
\newcommand{\case}[1]{\vskip 5pt \noindent \textit{Case: } \fbox{$#1$}\quad}
\newcommand{\casec}[1]{\vskip 5pt \noindent \mbox{\textit{Case \textsc{#1}}: \ }}
\newcommand{\subcase}[1]{\vskip 5pt \textit{Subcase: } \fbox{$#1$}\ }
\newcommand{\subcasec}[1]{\vskip 5pt \noindent \qquad \mbox{\textit{Subcase \textsc{#1}}: \ }}
\newcommand{\subcasen}{\vskip 5pt \noindent \qquad \mbox{\textit{Subcase: } \ }}
\newcommand{\have}[1]{$\begin{array}[t]{@{}l} #1 \end{array}$}
\newcommand{\TIME}{\textrm{time}}
\newcommand{\MAP}{\textrm{map}}
\newcommand{\dom}{\textrm{dom}} \newcommand{\dom}{\textrm{dom}}
\newcommand{\rng}{\textrm{rng}} \newcommand{\rng}{\textrm{rng}}
\newcommand{\cod}{\textrm{cod}} \newcommand{\cod}{\textrm{cod}}
\newcommand{\elide}[1]{}
\newcommand{\ov}[1]{\overline{#1}}
\newcommand{\CR}{\mathcal{R}}
\newcommand{\CS}{\mathcal{S}}
\newcommand{\IF}{\mathrel{\text{if}}} \newcommand{\IF}{\mathrel{\text{if}}}
\newcommand{\OW}{\text{otherwise}} % not a relation
\newcommand{\WHEN}{\textrm{when }} \newcommand{\WHEN}{\textrm{when }}
\newcommand{\FIX}{\textrm{Fix }}
\newcommand{\LET}{\textrm{Let }}
\newcommand{\IN}{\textrm{ in }}
\newcommand{\SUPPOSE}{\textrm{Suppose }}
\newcommand{\HAVE}{\textrm{Have }}
\newcommand{\RAND}{\textrm{ and }}
\newcommand{\WHERE}{\mathrel{\text{where}}}
\newcommand{\ASSUMPTION}{\textrm{assumption}}
\newcommand{\THEN}{\textrm{Then }}
\newcommand{\WRITE}{\textrm{Write }}
\newcommand{\PICK}{\textrm{Pick }}
\newcommand{\WITH}{\textrm{ with }}
\newcommand{\WLOG}{\textrm{ WLOG}}
%newcommand{\STS}{\textrm{Suffices to show }}
\newcommand{\extrasep}{\setlength{\extrarowheight}{1.5pt}}
\newcommand{\extrasepB}[1]{\setlength{\extrarowheight}{#1}}
\newcommand{\medextrasep}{\setlength{\extrarowheight}{2pt}}
\newcommand{\bigextrasep}{\setlength{\extrarowheight}{3pt}}
\newcommand{\hugeextrasep}{\setlength{\extrarowheight}{5pt}}
\newcommand{\noextrasep}{\setlength{\extrarowheight}{0pt}}
\newcommand{\iffrule}{\mprset{fraction={===}}}
\newcommand{\ie}{\emph{i.e.,} } \newcommand{\ie}{\emph{i.e.,} }
\newcommand{\eg}{\emph{e.g.,} } \newcommand{\eg}{\emph{e.g.,} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment