Commit 48371b50 authored by Ralf Jung's avatar Ralf Jung
Browse files

Implement JH's idea of a "core of an assertion"

parent cd9d4a5b
...@@ -84,6 +84,7 @@ theories/base_logic/lib/cancelable_invariants.v ...@@ -84,6 +84,7 @@ theories/base_logic/lib/cancelable_invariants.v
theories/base_logic/lib/counter_examples.v theories/base_logic/lib/counter_examples.v
theories/base_logic/lib/fractional.v theories/base_logic/lib/fractional.v
theories/base_logic/lib/gen_heap.v theories/base_logic/lib/gen_heap.v
theories/program_logic/adequacy.v theories/program_logic/adequacy.v
theories/program_logic/lifting.v theories/program_logic/lifting.v
theories/program_logic/weakestpre.v theories/program_logic/weakestpre.v
From iris.base_logic Require Import base_logic.
From iris.proofmode Require Import tactics.
Import uPred.
(** The "core" of an assertion is its maximal persistent part.
It can be defined entirely within the logic... at least
in the shallow embedding. *)
Definition coreP {M : ucmraT} (P : uPred M) : uPred M :=
( (Q : uPred M) `(!PersistentP Q, !P - Q), Q)%I.
Section core.
Context {M : ucmraT}.
Implicit Types P Q : uPred M.
Lemma coreP_intro P :
P - coreP P.
iIntros "HP". iIntros (Q HQ HPQ). by iApply HPQ.
Global Instance coreP_persistent P :
PersistentP (coreP P).
iIntros "HCP". iApply always_forall. iIntros (Q).
iApply always_forall. iIntros (HQ). iApply always_forall.
iIntros (HPQ). iApply HQ. unshelve iApply ("HCP" $! Q). done.
Lemma corP_elim P :
PersistentP P coreP P - P.
iIntros (?) "HCP". unshelve iApply ("HCP" $! P).
iIntros "P". done.
End core.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment