@@ -28,9 +28,9 @@ One way to understand this definition is to re-write it a little.
We start by defining the COFE of \emph{step-indexed propositions}:
\begin{align*}
\SProp\eqdef{}&\psetdown{\mathbb{N}}\\
\eqdef{}&\setComp{\prop\in\pset{\mathbb{N}}}{\All n, m. n \geq m \Ra n \in\prop\Ra m \in\prop}\\
\prop\nequiv{n}\propB\eqdef{}&\All m \leq n. m \in\prop\Lra m \in\propB
\end{align*}
where $\psetdown{N}$ denotes the set of \emph{down-closed} sets of natural numbers: If $n$ is in the set, then all smaller numbers also have to be in there.
Now we can rewrite $\UPred(\monoid)$ as monotone step-indexed predicates over $\monoid$, where the definition of a ``monotone'' function here is a little funny.
\begin{align*}
\UPred(\monoid) \approx{}&\monoid\monra\SProp\\
...
...
@@ -80,7 +80,7 @@ Given some COFE $\cofe$, we define $\agm(\cofe)$ as follows:
\newcommand{\agc}{\mathrm{c}}% the "c" field of an agreement element
\newcommand{\agV}{\mathrm{V}}% the "V" field of an agreement element
\begin{align*}
\agm(\cofe) \eqdef{}&\recordComp{\agc : \mathbb{N}\to\cofe , \agV : \pset{\mathbb{N}}}{\All n, m. n \geq m \Ra n \in\agV\Ra m \in\agV}\\
\melt\equiv\meltB\eqdef{}&\melt.\agV = \meltB.\agV\land\All n. n \in\melt.\agV\Ra\melt.\agc(n) \nequiv{n}\meltB.\agc(n) \\
\melt\nequiv{n}\meltB\eqdef{}& (\All m \leq n. m \in\melt.\agV\Lra m \in\meltB.\agV) \land (\All m \leq n. m \in\melt.\agV\Ra\melt.\agc(m) \nequiv{m}\meltB.\agc(m)) \\
\section{Derived proof rules and other constructions}
We will below abuse notation, using the \emph{term} meta-variables like $\val$ to range over (bound) \emph{variables} of the corresponding type..
We omit type annotations in binders and equality, when the type is clear from context.
We assume that the signature $\Sig$ embeds all the meta-level concepts we use, and their properties, into the logic.
(The Coq formalization is a \emph{shallow embedding} of the logic, so we have direct access to all meta-level notions within the logic anyways.)
\subsection{Base logic}
We collect here some important and frequently used derived proof rules.
...
...
@@ -245,10 +250,10 @@ Whenever needed (in particular, for masks at view shifts and Hoare triples), we
We use the notation $\namesp.\iname$ for the namespace $[\iname]\dplus\namesp$.
We define the inclusion relation on namespaces as $\namesp_1\sqsubseteq\namesp_2\Lra\Exists\namesp_3. \namesp_2=\namesp_3\dplus\namesp_1$, \ie$\namesp_1$ is a suffix of $\namesp_2$.
We have that $\namesp_1\sqsubseteq\namesp_2\Ra\namecl\namesp_2\subseteq\namecl\namesp_1$.
We have that $\namesp_1\sqsubseteq\namesp_2\Ra\namecl{\namesp_2}\subseteq\namecl{\namesp_1}$.
Similarly, we define $\namesp_1\sep\namesp_2\eqdef\Exists\namesp_1', \namesp_2'. \namesp_1' \sqsubseteq\namesp_1\land\namesp_2' \sqsubseteq\namesp_2\land |\namesp_1'| = |\namesp_2'| \land\namesp_1' \neq\namesp_2'$, \ie there exists a distinguishing suffix.
We have that $\namesp_1\sep\namesp_2\Ra\namecl\namesp_2\sep\namecl\namesp_1$, and furthermore $\iname_1\neq\iname_2\Ra\namesp.\iname_1\sep\namesp.\iname_2$.
We have that $\namesp_1\sep\namesp_2\Ra\namecl{\namesp_2}\sep\namecl{\namesp_1}$, and furthermore $\iname_1\neq\iname_2\Ra\namesp.\iname_1\sep\namesp.\iname_2$.
We will overload the usual Iris notation for invariant assertions in the following:
Here we define $\wpre{\expr'}[\mask]{\Ret\var.\prop}\eqdef\TRUE$ if $\expr' =\bot$ (remember that our stepping relation can, but does not have to, define a forked-off expression).