Require that a separation logic with carrier type PROP fulfills all necessary axioms.
wand :
PROP → PROP → PROP pure_intro
{φ : Prop}
{P : PROP}
:
φ → P ⊢ ⌜φ⌝pure_elim'
{φ : Prop}
{P : PROP}
:
(φ → True ⊢ P) → ⌜φ⌝ ⊢ Pand_elim_l
{P Q : PROP}
:
P ∧ Q ⊢ Pand_elim_r
{P Q : PROP}
:
P ∧ Q ⊢ Qand_intro
{P Q R : PROP}
:
(P ⊢ Q) → (P ⊢ R) → P ⊢ Q ∧ Ror_intro_l
{P Q : PROP}
:
P ⊢ P ∨ Qor_intro_r
{P Q : PROP}
:
Q ⊢ P ∨ Qor_elim
{P Q R : PROP}
:
(P ⊢ R) → (Q ⊢ R) → P ∨ Q ⊢ Rimp_intro
{P Q R : PROP}
:
(P ∧ Q ⊢ R) → P ⊢ Q → Rimp_elim
{P Q R : PROP}
:
(P ⊢ Q → R) → P ∧ Q ⊢ RsForall_intro
{P : PROP}
{Ψ : PROP → Prop}
:
(∀ (p : PROP), Ψ p → P ⊢ p) → P ⊢ sForall ΨsForall_elim
{Ψ : PROP → Prop}
{p : PROP}
:
Ψ p → sForall Ψ ⊢ psExists_intro
{Ψ : PROP → Prop}
{p : PROP}
:
Ψ p → p ⊢ sExists ΨsExists_elim
{Φ : PROP → Prop}
{Q : PROP}
:
(∀ (p : PROP), Φ p → p ⊢ Q) → sExists Φ ⊢ Qsep_mono
{P P' Q Q' : PROP}
:
(P ⊢ Q) → (P' ⊢ Q') → P ∗ P' ⊢ Q ∗ Q'emp_sep
{P : PROP}
: emp
∗ P ⊣⊢ Psep_symm
{P Q : PROP}
:
P ∗ Q ⊢ Q ∗ Psep_assoc_l
{P Q R : PROP}
: (
P ∗ Q)
∗ R ⊢ P ∗ Q ∗ Rwand_intro
{P Q R : PROP}
:
(P ∗ Q ⊢ R) → P ⊢ Q -∗ Rwand_elim
{P Q R : PROP}
:
(P ⊢ Q -∗ R) → P ∗ Q ⊢ Rpersistently_and_l
{P Q : PROP}
:
<pers> P ∧ Q ⊢ P ∗ Qlater_intro
{P : PROP}
:
P ⊢ later P
Instances