diff --git a/algebra/cofe.v b/algebra/cofe.v index ddf170fe7b5cace107f407599078039a67e0ef7c..b1bf310324209bec3d7716dfbc14e9642a5dff28 100644 --- a/algebra/cofe.v +++ b/algebra/cofe.v @@ -89,6 +89,8 @@ Section cofe_mixin. End cofe_mixin. (** Discrete COFEs and Timeless elements *) +(* TODO RJ: On paper, I called these "discrete elements". I think that makes + more sense. *) Class Timeless {A : cofeT} (x : A) := timeless y : x ≡{0}≡ y → x ≡ y. Arguments timeless {_} _ {_} _ _. Class Discrete (A : cofeT) := discrete_timeless (x : A) :> Timeless x. diff --git a/docs/algebra.tex b/docs/algebra.tex index e96cd7e49a3b7e915f0705db1f45de3b378234f5..522d15e97846edf92de153da932554d854d1f928 100644 --- a/docs/algebra.tex +++ b/docs/algebra.tex @@ -18,7 +18,28 @@ \ralf{Copy the explanation from the paper, when that one is more polished.} -\ralf{Describe non-expansive, contractive, category $\COFEs$, later, locally non-expansive/contractive, black later, discrete elements, discrete CMRAs.} +\begin{defn} + An element $x \in A$ of a COFE is called \emph{discrete} if + \[ \All y \in A. x \nequiv{0} y \Ra x = y\] + A COFE $A$ is called \emph{discrete} if all its elements are discrete. +\end{defn} + +\begin{defn} + A function $f : A \to B$ between two COFEs is \emph{non-expansive} if + \[\All n, x \in A, y \in A. x \nequiv{n} y \Ra f(x) \nequiv{n} f(y) \] + It is \emph{contractive} if + \[ \All n, x \in A, y \in A. (\All m < n. x \nequiv{m} y) \Ra f(x) \nequiv{n} f(x) \] +\end{defn} + +\begin{defn} + The category $\COFEs$ consists of COFEs as objects, and non-expansive functions as arrows. +\end{defn} +Note that $\COFEs$ is cartesian closed. + +\begin{defn} + A functor $F : \COFEs \to COFEs$ is called \emph{locally non-expansive} if its actions $F_1$ on arrows is itself a non-expansive map. + Similarly, $F$ is called \emph{locally contractive} if $F_1$ is a contractive map. +\end{defn} \subsection{RA} @@ -91,17 +112,33 @@ This operation is needed to prove that $\later$ commutes with existential quanti \end{mathpar} (This assumes that the type $\type$ is non-empty.) -\ralf{Describe monotone, category $\CMRAs$.} - \begin{defn} It is possible to do a \emph{frame-preserving update} from $\melt \in \monoid$ to $\meltsB \subseteq \monoid$, written $\melt \mupd \meltsB$, if \[ \All n, \melt_f. \melt \mtimes \melt_f \in \mval_n \Ra \Exists \meltB \in \meltsB. \meltB \mtimes \melt_f \in \mval_n \] We further define $\melt \mupd \meltB \eqdef \melt \mupd \set\meltB$. \end{defn} - Note that for RAs, this and the RA-based definition of a frame-preserving update coincide. +\ralf{Describe discrete CMRAs, and how they correspond to RAs.} + +\begin{defn} + A function $f : M \to N$ between two CMRAs is \emph{monotone} if it satisfies the following conditions: + \begin{enumerate} + \item $f$ is non-expansive + \item $f$ preserves validity: \\ + $\All n, x \in M. x \in \mval_n \Ra f(x) \in \mval_n$ + \item $f$ preserves CMRA inclusion:\\ + $\All x, y. x \mincl y \Ra f(x) \mincl f(y)$ + \end{enumerate} +\end{defn} + +\begin{defn} + The category $\CMRAs$ consists of CMRAs as objects, and monotone functions as arrows. +\end{defn} +Note that $\CMRAs$ is a subcategory of $\COFEs$. +The notion of a locally non-expansive (or contractive) functor naturally generalizes to functors between these categories. + %%% Local Variables: %%% mode: latex diff --git a/docs/logic.tex b/docs/logic.tex index e12cdd02ca2e034d74cc66caa03e3af8bc92c15b..c1caf48a06b781457cb3865435553cd819d5f923 100644 --- a/docs/logic.tex +++ b/docs/logic.tex @@ -25,12 +25,15 @@ It does not matter whether they fork off an arbitrary expression. \end{itemize} \begin{defn}[Context] - A function $\lctx : \textdom{Expr} \to \textdom{Expr}$ is a \emph{context} if the following conditions are satisfied - \begin{align*} - \All\expr.& \toval(\expr) = \bot \Ra \toval(\lctx(\expr)) = \bot \tagH{lang-ctx-not-val}\\ - \All \expr_1, \state_1, \expr_2, \state_2, \expr'.& \expr_1, \state_1 \step \expr_2,\state_2,\expr' \Ra \lctx(\expr_1), \state_1 \step \lctx(\expr_2),\state_2,\expr' \tagH{lang-ctx-step}\\ - \All \expr_1', \state_1, \expr_2, \state_2, \expr'.& \toval(\expr_1') = \bot \land \lctx(\expr_1'), \state_1 \step \expr_2,\state_2,\expr' \Ra \Exists\expr_2'. \expr_2 = \lctx(\expr_2') \land \expr_1', \state_1 \step \expr_2',\state_2,\expr' \tagH{lang-ctx-step-inv} - \end{align*} + A function $\lctx : \textdom{Expr} \to \textdom{Expr}$ is a \emph{context} if the following conditions are satisfied: + \begin{enumerate} + \item $\lctx$ does not turn non-values into values:\\ + $\All\expr. \toval(\expr) = \bot \Ra \toval(\lctx(\expr)) = \bot $ + \item One can perform reductions below $\lctx$:\\ + $\All \expr_1, \state_1, \expr_2, \state_2, \expr'. \expr_1, \state_1 \step \expr_2,\state_2,\expr' \Ra \lctx(\expr_1), \state_1 \step \lctx(\expr_2),\state_2,\expr' $ + \item Reductions stay below $\lctx$ until there is a value in the hole:\\ + $\All \expr_1', \state_1, \expr_2, \state_2, \expr'. \toval(\expr_1') = \bot \land \lctx(\expr_1'), \state_1 \step \expr_2,\state_2,\expr' \Ra \Exists\expr_2'. \expr_2 = \lctx(\expr_2') \land \expr_1', \state_1 \step \expr_2',\state_2,\expr' $ + \end{enumerate} \end{defn} \subsection{The concurrent language} @@ -62,6 +65,7 @@ To instantiate Iris, you need to define the following parameters: \begin{itemize} \item A language $\Lang$ \item A locally contractive functor $\iFunc : \COFEs \to \CMRAs$ defining the ghost state + \ralf{$\iFunc$ also needs to have a single-unit.} \end{itemize} \noindent diff --git a/docs/model.tex b/docs/model.tex index c3d8fd1685931cfc48d82576ab3df1521f2ed9e6..c2391766731ed2b0994a027670c68b55ee01ad4b 100644 --- a/docs/model.tex +++ b/docs/model.tex @@ -1,5 +1,7 @@ \section{Model and semantics} +\ralf{What also needs to be done here: Define uPred and its later function; define black later; define the resource CMRA} + The semantics closely follows the ideas laid out in~\cite{catlogic}. We just repeat some of the most important definitions here.