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

add bidirectional turnstile

parent 3cf0a5fc
No related branches found
No related tags found
No related merge requests found
......@@ -8,13 +8,13 @@ We collect here some important and frequently used derived proof rules.
{\prop \Ra \propB \proves \prop \wand \propB}
\infer{}
{\prop * \Exists\var.\propB \Lra \Exists\var. \prop * \propB}
{\prop * \Exists\var.\propB \provesIff \Exists\var. \prop * \propB}
\infer{}
{\prop * \Exists\var.\propB \proves \Exists\var. \prop * \propB}
\infer{}
{\always(\prop*\propB) \Lra \always\prop * \always\propB}
{\always(\prop*\propB) \provesIff \always\prop * \always\propB}
\infer{}
{\always(\prop \Ra \propB) \proves \always\prop \Ra \always\propB}
......@@ -23,7 +23,7 @@ We collect here some important and frequently used derived proof rules.
{\always(\prop \wand \propB) \proves \always\prop \wand \always\propB}
\infer{}
{\always(\prop \wand \propB) \Lra \always(\prop \Ra \propB)}
{\always(\prop \wand \propB) \provesIff \always(\prop \Ra \propB)}
\infer{}
{\later(\prop \Ra \propB) \proves \later\prop \Ra \later\propB}
......
......@@ -184,6 +184,7 @@
\def\Lam #1.{\lambda #1.\spac}%
\newcommand{\proves}{\vdash}
\newcommand{\provesIff}{\mathrel{\dashv\vdash}}
\newcommand{\wand}{\;{{\mbox{---}}\!\!{*}}\;}
......
......@@ -303,8 +303,7 @@ In writing $\vctx, x:\type$, we presuppose that $x$ is not already declared in $
The judgment $\vctx \mid \pfctx \proves \prop$ says that with free variables $\vctx$, proposition $\prop$ holds whenever all assumptions $\pfctx$ hold.
We implicitly assume that an arbitrary variable context, $\vctx$, is added to every constituent of the rules.
Furthermore, an arbitrary \emph{boxed} assertion context $\always\pfctx$ may be added to every constituent.
Axioms $\prop \Ra \propB$ stand for judgments $\vctx \mid \cdot \proves \prop \Ra \propB$ with no assumptions.
(Bi-implications are analogous.)
Axioms $\vctx \mid \prop \provesIff \propB$ indicate that both $\vctx \mid \prop \proves \propB$ and $\vctx \mid \propB \proves \prop$ can be derived.
\judgment{}{\vctx \mid \pfctx \proves \prop}
\paragraph{Laws of intuitionistic higher-order logic with equality.}
......@@ -395,9 +394,9 @@ This is entirely standard.
\paragraph{Laws of (affine) bunched implications.}
\begin{mathpar}
\begin{array}{rMcMl}
\TRUE * \prop &\Lra& \prop \\
\prop * \propB &\Lra& \propB * \prop \\
(\prop * \propB) * \propC &\Lra& \prop * (\propB * \propC)
\TRUE * \prop &\provesIff& \prop \\
\prop * \propB &\provesIff& \propB * \prop \\
(\prop * \propB) * \propC &\provesIff& \prop * (\propB * \propC)
\end{array}
\and
\infer[$*$-mono]
......@@ -413,14 +412,14 @@ This is entirely standard.
\paragraph{Laws for ghosts and physical resources.}
\begin{mathpar}
\begin{array}{rMcMl}
\ownGGhost{\melt} * \ownGGhost{\meltB} &\Lra& \ownGGhost{\melt \mtimes \meltB} \\
\ownGGhost{\melt} &\Ra& \melt \in \mval \\
\TRUE &\Ra& \ownGGhost{\munit}
\ownGGhost{\melt} * \ownGGhost{\meltB} &\provesIff& \ownGGhost{\melt \mtimes \meltB} \\
\ownGGhost{\melt} &\provesIff& \melt \in \mval \\
\TRUE &\proves& \ownGGhost{\munit}
\end{array}
\and
\and
\begin{array}{c}
\ownPhys{\state} * \ownPhys{\state'} \Ra \FALSE
\ownPhys{\state} * \ownPhys{\state'} \proves \FALSE
\end{array}
\end{mathpar}
......@@ -439,14 +438,14 @@ This is entirely standard.
{\later{\Exists x:\type.\prop} \proves \Exists x:\type. \later\prop}
\\\\
\begin{array}[c]{rMcMl}
\later{(\prop \wedge \propB)} &\Lra& \later{\prop} \wedge \later{\propB} \\
\later{(\prop \vee \propB)} &\Lra& \later{\prop} \vee \later{\propB} \\
\later{(\prop \wedge \propB)} &\provesIff& \later{\prop} \wedge \later{\propB} \\
\later{(\prop \vee \propB)} &\provesIff& \later{\prop} \vee \later{\propB} \\
\end{array}
\and
\begin{array}[c]{rMcMl}
\later{\All x.\prop} &\Lra& \All x. \later\prop \\
\Exists x. \later\prop &\Ra& \later{\Exists x.\prop} \\
\later{(\prop * \propB)} &\Lra& \later\prop * \later\propB
\later{\All x.\prop} &\provesIff& \All x. \later\prop \\
\Exists x. \later\prop &\proves& \later{\Exists x.\prop} \\
\later{(\prop * \propB)} &\provesIff& \later\prop * \later\propB
\end{array}
\end{mathpar}
......@@ -487,26 +486,26 @@ This is entirely standard.
{\always{\pfctx} \proves \always{\prop}}
\and
\infer[$\always$E]{}
{\always{\prop} \Ra \prop}
{\always{\prop} \proves \prop}
\and
\begin{array}[c]{rMcMl}
\always{(\prop * \propB)} &\Ra& \always{(\prop \land \propB)} \\
\always{\prop} * \propB &\Ra& \always{\prop} \land \propB \\
\always{\later\prop} &\Lra& \later\always{\prop} \\
\always{(\prop * \propB)} &\proves& \always{(\prop \land \propB)} \\
\always{\prop} * \propB &\proves& \always{\prop} \land \propB \\
\always{\later\prop} &\provesIff& \later\always{\prop} \\
\end{array}
\and
\begin{array}[c]{rMcMl}
\always{(\prop \land \propB)} &\Lra& \always{\prop} \land \always{\propB} \\
\always{(\prop \lor \propB)} &\Lra& \always{\prop} \lor \always{\propB} \\
\always{\All x. \prop} &\Lra& \All x. \always{\prop} \\
\always{\Exists x. \prop} &\Lra& \Exists x. \always{\prop} \\
\always{(\prop \land \propB)} &\provesIff& \always{\prop} \land \always{\propB} \\
\always{(\prop \lor \propB)} &\provesIff& \always{\prop} \lor \always{\propB} \\
\always{\All x. \prop} &\provesIff& \All x. \always{\prop} \\
\always{\Exists x. \prop} &\provesIff& \Exists x. \always{\prop} \\
\end{array}
\and
{ \term =_\type \term' \Ra \always \term =_\type \term'}
{ \term =_\type \term' \proves \always \term =_\type \term'}
\and
{ \knowInv\iname\prop \Ra \always \knowInv\iname\prop}
{ \knowInv\iname\prop \proves \always \knowInv\iname\prop}
\and
{ \ownGGhost{\mcore\melt} \Ra \always \ownGGhost{\mcore\melt}}
{ \ownGGhost{\mcore\melt} \proves \always \ownGGhost{\mcore\melt}}
\end{mathpar}
\paragraph{Laws of primitive view shifts.}
......
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