Commit 0ad1d2bd authored by Robbert Krebbers's avatar Robbert Krebbers

Rename `PersistentP` → `Persistent` and `TimelessP` → `Timeless`.

parent c311eeca
......@@ -126,7 +126,7 @@ Section list.
Proof. apply (big_opL_commute _). Qed.
Lemma big_sepL_forall Φ l :
( k x, PersistentP (Φ k x))
( k x, Persistent (Φ k x))
([ list] kx l, Φ k x) ( k x, l !! k = Some x Φ k x).
Proof.
intros HΦ. apply (anti_symm _).
......@@ -150,23 +150,23 @@ Section list.
Qed.
Global Instance big_sepL_nil_persistent Φ :
PersistentP ([ list] kx [], Φ k x).
Persistent ([ list] kx [], Φ k x).
Proof. simpl; apply _. Qed.
Global Instance big_sepL_persistent Φ l :
( k x, PersistentP (Φ k x)) PersistentP ([ list] kx l, Φ k x).
( k x, Persistent (Φ k x)) Persistent ([ list] kx l, Φ k x).
Proof. revert Φ. induction l as [|x l IH]=> Φ ? /=; apply _. Qed.
Global Instance big_sepL_persistent_id Ps :
TCForall PersistentP Ps PersistentP ([] Ps).
TCForall Persistent Ps Persistent ([] Ps).
Proof. induction 1; simpl; apply _. Qed.
Global Instance big_sepL_nil_timeless Φ :
TimelessP ([ list] kx [], Φ k x).
Timeless ([ list] kx [], Φ k x).
Proof. simpl; apply _. Qed.
Global Instance big_sepL_timeless Φ l :
( k x, TimelessP (Φ k x)) TimelessP ([ list] kx l, Φ k x).
( k x, Timeless (Φ k x)) Timeless ([ list] kx l, Φ k x).
Proof. revert Φ. induction l as [|x l IH]=> Φ ? /=; apply _. Qed.
Global Instance big_sepL_timeless_id Ps :
TCForall TimelessP Ps TimelessP ([] Ps).
TCForall Timeless Ps Timeless ([] Ps).
Proof. induction 1; simpl; apply _. Qed.
End list.
......@@ -316,7 +316,7 @@ Section gmap.
Proof. apply (big_opM_commute _). Qed.
Lemma big_sepM_forall Φ m :
( k x, PersistentP (Φ k x))
( k x, Persistent (Φ k x))
([ map] kx m, Φ k x) ( k x, m !! k = Some x Φ k x).
Proof.
intros. apply (anti_symm _).
......@@ -343,16 +343,16 @@ Section gmap.
Qed.
Global Instance big_sepM_empty_persistent Φ :
PersistentP ([ map] kx , Φ k x).
Persistent ([ map] kx , Φ k x).
Proof. rewrite /big_opM map_to_list_empty. apply _. Qed.
Global Instance big_sepM_persistent Φ m :
( k x, PersistentP (Φ k x)) PersistentP ([ map] kx m, Φ k x).
( k x, Persistent (Φ k x)) Persistent ([ map] kx m, Φ k x).
Proof. intros. apply big_sepL_persistent=> _ [??]; apply _. Qed.
Global Instance big_sepM_nil_timeless Φ :
TimelessP ([ map] kx , Φ k x).
Timeless ([ map] kx , Φ k x).
Proof. rewrite /big_opM map_to_list_empty. apply _. Qed.
Global Instance big_sepM_timeless Φ m :
( k x, TimelessP (Φ k x)) TimelessP ([ map] kx m, Φ k x).
( k x, Timeless (Φ k x)) Timeless ([ map] kx m, Φ k x).
Proof. intros. apply big_sepL_timeless=> _ [??]; apply _. Qed.
End gmap.
......@@ -468,7 +468,7 @@ Section gset.
Proof. apply (big_opS_commute _). Qed.
Lemma big_sepS_forall Φ X :
( x, PersistentP (Φ x)) ([ set] x X, Φ x) ( x, x X Φ x).
( x, Persistent (Φ x)) ([ set] x X, Φ x) ( x, x X Φ x).
Proof.
intros. apply (anti_symm _).
{ apply forall_intro=> x.
......@@ -490,15 +490,15 @@ Section gset.
by rewrite -always_wand_impl always_elim wand_elim_l.
Qed.
Global Instance big_sepS_empty_persistent Φ : PersistentP ([ set] x , Φ x).
Global Instance big_sepS_empty_persistent Φ : Persistent ([ set] x , Φ x).
Proof. rewrite /big_opS elements_empty. apply _. Qed.
Global Instance big_sepS_persistent Φ X :
( x, PersistentP (Φ x)) PersistentP ([ set] x X, Φ x).
( x, Persistent (Φ x)) Persistent ([ set] x X, Φ x).
Proof. rewrite /big_opS. apply _. Qed.
Global Instance big_sepS_nil_timeless Φ : TimelessP ([ set] x , Φ x).
Global Instance big_sepS_nil_timeless Φ : Timeless ([ set] x , Φ x).
Proof. rewrite /big_opS elements_empty. apply _. Qed.
Global Instance big_sepS_timeless Φ X :
( x, TimelessP (Φ x)) TimelessP ([ set] x X, Φ x).
( x, Timeless (Φ x)) Timeless ([ set] x X, Φ x).
Proof. rewrite /big_opS. apply _. Qed.
End gset.
......@@ -578,15 +578,15 @@ Section gmultiset.
?q ([ mset] y X, Φ y) ([ mset] y X, ?q Φ y).
Proof. apply (big_opMS_commute _). Qed.
Global Instance big_sepMS_empty_persistent Φ : PersistentP ([ mset] x , Φ x).
Global Instance big_sepMS_empty_persistent Φ : Persistent ([ mset] x , Φ x).
Proof. rewrite /big_opMS gmultiset_elements_empty. apply _. Qed.
Global Instance big_sepMS_persistent Φ X :
( x, PersistentP (Φ x)) PersistentP ([ mset] x X, Φ x).
( x, Persistent (Φ x)) Persistent ([ mset] x X, Φ x).
Proof. rewrite /big_opMS. apply _. Qed.
Global Instance big_sepMS_nil_timeless Φ : TimelessP ([ mset] x , Φ x).
Global Instance big_sepMS_nil_timeless Φ : Timeless ([ mset] x , Φ x).
Proof. rewrite /big_opMS gmultiset_elements_empty. apply _. Qed.
Global Instance big_sepMS_timeless Φ X :
( x, TimelessP (Φ x)) TimelessP ([ mset] x X, Φ x).
( x, Timeless (Φ x)) Timeless ([ mset] x X, Φ x).
Proof. rewrite /big_opMS. apply _. Qed.
End gmultiset.
End big_op.
......
This diff is collapsed.
......@@ -30,9 +30,9 @@ Section definitions.
Proof. solve_proper. Qed.
Global Instance auth_own_proper : Proper (() ==> ()) auth_own.
Proof. solve_proper. Qed.
Global Instance auth_own_timeless a : TimelessP (auth_own a).
Global Instance auth_own_timeless a : Timeless (auth_own a).
Proof. apply _. Qed.
Global Instance auth_own_core_id a : CoreId a PersistentP (auth_own a).
Global Instance auth_own_core_id a : CoreId a Persistent (auth_own a).
Proof. apply _. Qed.
Global Instance auth_inv_ne n :
......@@ -51,7 +51,7 @@ Section definitions.
Proper (pointwise_relation T () ==>
pointwise_relation T () ==> ()) (auth_ctx N).
Proof. solve_proper. Qed.
Global Instance auth_ctx_persistent N f φ : PersistentP (auth_ctx N f φ).
Global Instance auth_ctx_persistent N f φ : Persistent (auth_ctx N f φ).
Proof. apply _. Qed.
End definitions.
......
......@@ -65,7 +65,7 @@ Proof. solve_contractive. Qed.
Global Instance slice_proper γ : Proper (() ==> ()) (slice N γ).
Proof. apply ne_proper, _. Qed.
Global Instance slice_persistent γ P : PersistentP (slice N γ P).
Global Instance slice_persistent γ P : Persistent (slice N γ P).
Proof. apply _. Qed.
Global Instance box_contractive f : Contractive (box N f).
......
......@@ -24,7 +24,7 @@ Instance: Params (@cinv) 5.
Section proofs.
Context `{invG Σ, cinvG Σ}.
Global Instance cinv_own_timeless γ p : TimelessP (cinv_own γ p).
Global Instance cinv_own_timeless γ p : Timeless (cinv_own γ p).
Proof. rewrite /cinv_own; apply _. Qed.
Global Instance cinv_contractive N γ : Contractive (cinv N γ).
......@@ -34,7 +34,7 @@ Section proofs.
Global Instance cinv_proper N γ : Proper (() ==> ()) (cinv N γ).
Proof. exact: ne_proper. Qed.
Global Instance cinv_persistent N γ P : PersistentP (cinv N γ P).
Global Instance cinv_persistent N γ P : Persistent (cinv N γ P).
Proof. rewrite /cinv; apply _. Qed.
Global Instance cinv_own_fractionnal γ : Fractional (cinv_own γ).
......
......@@ -15,7 +15,7 @@ Import uPred.
*)
Definition coreP {M : ucmraT} (P : uPred M) : uPred M :=
( `(!PersistentP Q), P Q Q)%I.
( `(!Persistent Q), P Q Q)%I.
Instance: Params (@coreP) 1.
Typeclasses Opaque coreP.
......@@ -26,7 +26,7 @@ Section core.
Lemma coreP_intro P : P - coreP P.
Proof. rewrite /coreP. iIntros "HP". by iIntros (Q HQ ->). Qed.
Global Instance coreP_persistent P : PersistentP (coreP P).
Global Instance coreP_persistent P : Persistent (coreP P).
Proof. rewrite /coreP. apply _. Qed.
Global Instance coreP_mono : Proper (() ==> ()) (@coreP M).
......@@ -38,7 +38,7 @@ Section core.
Global Instance coreP_proper : Proper (() ==> ()) (@coreP M).
Proof. intros P Q. rewrite !equiv_spec=>-[??]. by split; apply coreP_mono. Qed.
Lemma coreP_elim P : PersistentP P coreP P - P.
Lemma coreP_elim P : Persistent P coreP P - P.
Proof. rewrite /coreP. iIntros (?) "HCP". unshelve iApply ("HCP" $! P); auto. Qed.
Lemma coreP_wand P Q :
......
......@@ -12,7 +12,7 @@ Module savedprop. Section savedprop.
(** Saved Propositions and the update modality *)
Context (sprop : Type) (saved : sprop iProp iProp).
Hypothesis sprop_persistent : i P, PersistentP (saved i P).
Hypothesis sprop_persistent : i P, Persistent (saved i P).
Hypothesis sprop_alloc_dep :
(P : sprop iProp), (|==> ( i, saved i (P i)))%I.
Hypothesis sprop_agree : i P Q, saved i P saved i Q (P Q).
......@@ -69,7 +69,7 @@ Module inv. Section inv.
(** We have invariants *)
Context (name : Type) (inv : name iProp iProp).
Hypothesis inv_persistent : i P, PersistentP (inv i P).
Hypothesis inv_persistent : i P, Persistent (inv i P).
Hypothesis inv_alloc : P, P fupd M1 ( i, inv i P).
Hypothesis inv_open :
i P Q R, (P Q fupd M0 (P R)) (inv i P Q fupd M1 R).
......@@ -132,7 +132,7 @@ Module inv. Section inv.
(** Now to the actual counterexample. We start with a weird form of saved propositions. *)
Definition saved (γ : gname) (P : iProp) : iProp :=
i, inv i (start γ (finished γ P)).
Global Instance saved_persistent γ P : PersistentP (saved γ P) := _.
Global Instance saved_persistent γ P : Persistent (saved γ P) := _.
Lemma saved_alloc (P : gname iProp) : fupd M1 ( γ, saved γ (P γ)).
Proof.
......@@ -165,7 +165,7 @@ Module inv. Section inv.
(** And now we tie a bad knot. *)
Notation "¬ P" := ( (P - fupd M1 False))%I : uPred_scope.
Definition A i : iProp := P, ¬P saved i P.
Global Instance A_persistent i : PersistentP (A i) := _.
Global Instance A_persistent i : Persistent (A i) := _.
Lemma A_alloc : fupd M1 ( i, saved i (A i)).
Proof. by apply saved_alloc. Qed.
......
......@@ -13,7 +13,7 @@ Notation "P ={ E1 , E2 }=> Q" := (vs E1 E2 P Q)
format "P ={ E1 , E2 }=> Q") : uPred_scope.
Context (vs_ne : E1 E2, NonExpansive2 (vs E1 E2)).
Context (vs_persistent : E1 E2 P Q, PersistentP (P ={E1,E2}=> Q)).
Context (vs_persistent : E1 E2 P Q, Persistent (P ={E1,E2}=> Q)).
Context (vs_impl : E P Q, (P Q) P ={E,E}=> Q).
Context (vs_transitive : E1 E2 E3 P Q R,
......@@ -24,7 +24,7 @@ Context (vs_frame_r : ∀ E1 E2 P Q R, (P ={E1,E2}=> Q) ⊢ P ∗ R ={E1,E2}=> Q
Context (vs_exists : {A} E1 E2 (Φ : A uPred M) Q,
( x, Φ x ={E1,E2}=> Q) ( x, Φ x) ={E1,E2}=> Q).
Context (vs_persistent_intro_r : E1 E2 P Q R,
PersistentP R
Persistent R
(R - (P ={E1,E2}=> Q)) P R ={E1,E2}=> Q).
Definition fupd (E1 E2 : coPset) (P : uPred M) : uPred M :=
......
......@@ -50,7 +50,7 @@ Section fractional.
(** Fractional and logical connectives *)
Global Instance persistent_fractional P :
PersistentP P Fractional (λ _, P).
Persistent P Fractional (λ _, P).
Proof. intros HP q q'. by apply uPred.always_sep_dup. Qed.
Global Instance fractional_sep Φ Ψ :
......
......@@ -82,7 +82,7 @@ Section gen_heap.
Implicit Types v : V.
(** General properties of mapsto *)
Global Instance mapsto_timeless l q v : TimelessP (l {q} v).
Global Instance mapsto_timeless l q v : Timeless (l {q} v).
Proof. rewrite mapsto_eq /mapsto_def. apply _. Qed.
Global Instance mapsto_fractional l v : Fractional (λ q, l {q} v)%I.
Proof.
......
......@@ -31,7 +31,7 @@ Proof. apply contractive_ne, _. Qed.
Global Instance inv_Proper N : Proper (() ==> ()) (inv N).
Proof. apply ne_proper, _. Qed.
Global Instance inv_persistent N P : PersistentP (inv N P).
Global Instance inv_persistent N P : Persistent (inv N P).
Proof. rewrite inv_eq /inv; apply _. Qed.
Lemma fresh_inv_name (E : gset positive) N : i, i E i (N:coPset).
......@@ -81,7 +81,7 @@ Proof.
iIntros "HP [Hw $] !> !>". iApply ownI_close; by iFrame.
Qed.
Lemma inv_open_timeless E N P `{!TimelessP P} :
Lemma inv_open_timeless E N P `{!Timeless P} :
N E inv N P ={E,E∖↑N}= P (P ={E∖↑N,E}= True).
Proof.
iIntros (?) "Hinv". iMod (inv_open with "Hinv") as "[>HP Hclose]"; auto.
......
......@@ -32,7 +32,7 @@ Typeclasses Opaque na_own na_inv.
Section proofs.
Context `{invG Σ, na_invG Σ}.
Global Instance na_own_timeless p E : TimelessP (na_own p E).
Global Instance na_own_timeless p E : Timeless (na_own p E).
Proof. rewrite /na_own; apply _. Qed.
Global Instance na_inv_ne p N : NonExpansive (na_inv p N).
......@@ -40,7 +40,7 @@ Section proofs.
Global Instance na_inv_proper p N : Proper (() ==> ()) (na_inv p N).
Proof. apply (ne_proper _). Qed.
Global Instance na_inv_persistent p N P : PersistentP (na_inv p N P).
Global Instance na_inv_persistent p N P : Persistent (na_inv p N P).
Proof. rewrite /na_inv; apply _. Qed.
Lemma na_alloc : (|==> p, na_own p )%I.
......
......@@ -106,9 +106,9 @@ Proof. apply: uPred.always_entails_r. apply own_valid. Qed.
Lemma own_valid_l γ a : own γ a a own γ a.
Proof. by rewrite comm -own_valid_r. Qed.
Global Instance own_timeless γ a : Discrete a TimelessP (own γ a).
Global Instance own_timeless γ a : Discrete a Timeless (own γ a).
Proof. rewrite !own_eq /own_def; apply _. Qed.
Global Instance own_core_persistent γ a : CoreId a PersistentP (own γ a).
Global Instance own_core_persistent γ a : CoreId a Persistent (own γ a).
Proof. rewrite !own_eq /own_def; apply _. Qed.
(** ** Allocation *)
......
......@@ -23,7 +23,7 @@ Section saved_prop.
Implicit Types x y : F (iProp Σ).
Implicit Types γ : gname.
Global Instance saved_prop_persistent γ x : PersistentP (saved_prop_own γ x).
Global Instance saved_prop_persistent γ x : Persistent (saved_prop_own γ x).
Proof. rewrite /saved_prop_own; apply _. Qed.
Lemma saved_prop_alloc_strong x (G : gset gname) :
......
......@@ -43,11 +43,11 @@ Section definitions.
Global Instance sts_ctx_proper `{!invG Σ} N :
Proper (pointwise_relation _ () ==> ()) (sts_ctx N).
Proof. solve_proper. Qed.
Global Instance sts_ctx_persistent `{!invG Σ} N φ : PersistentP (sts_ctx N φ).
Global Instance sts_ctx_persistent `{!invG Σ} N φ : Persistent (sts_ctx N φ).
Proof. apply _. Qed.
Global Instance sts_own_persistent s : PersistentP (sts_own s ).
Global Instance sts_own_persistent s : Persistent (sts_own s ).
Proof. apply _. Qed.
Global Instance sts_ownS_persistent S : PersistentP (sts_ownS S ).
Global Instance sts_ownS_persistent S : Persistent (sts_ownS S ).
Proof. apply _. Qed.
End definitions.
......
......@@ -41,7 +41,7 @@ Proof. solve_proper. Qed.
Lemma vs_false_elim E1 E2 P : False ={E1,E2}=> P.
Proof. iIntros "!# []". Qed.
Lemma vs_timeless E P : TimelessP P P ={E}=> P.
Lemma vs_timeless E P : Timeless P P ={E}=> P.
Proof. by iIntros (?) "!# > ?". Qed.
Lemma vs_transitive E1 E2 E3 P Q R :
......
......@@ -49,7 +49,7 @@ Instance invariant_unfold_contractive : Contractive (@invariant_unfold Σ).
Proof. solve_contractive. Qed.
Global Instance ownI_contractive i : Contractive (@ownI Σ _ i).
Proof. solve_contractive. Qed.
Global Instance ownI_persistent i P : PersistentP (ownI i P).
Global Instance ownI_persistent i P : Persistent (ownI i P).
Proof. rewrite /ownI. apply _. Qed.
Lemma ownE_empty : (|==> ownE )%I.
......
......@@ -29,7 +29,7 @@ Section mono_proof.
( γ, inv N (mcounter_inv γ l) own γ ( (n : mnat)))%I.
(** The main proofs. *)
Global Instance mcounter_persistent l n : PersistentP (mcounter l n).
Global Instance mcounter_persistent l n : Persistent (mcounter l n).
Proof. apply _. Qed.
Lemma newcounter_mono_spec :
......
......@@ -14,8 +14,8 @@ Structure lock Σ `{!heapG Σ} := Lock {
locked (γ: name) : iProp Σ;
(* -- general properties -- *)
is_lock_ne N γ lk : NonExpansive (is_lock N γ lk);
is_lock_persistent N γ lk R : PersistentP (is_lock N γ lk R);
locked_timeless γ : TimelessP (locked γ);
is_lock_persistent N γ lk R : Persistent (is_lock N γ lk R);
locked_timeless γ : Timeless (locked γ);
locked_exclusive γ : locked γ - locked γ - False;
(* -- operation specs -- *)
newlock_spec N (R : iProp Σ) :
......
......@@ -40,9 +40,9 @@ Section proof.
Proof. solve_proper. Qed.
(** The main proofs. *)
Global Instance is_lock_persistent γ l R : PersistentP (is_lock γ l R).
Global Instance is_lock_persistent γ l R : Persistent (is_lock γ l R).
Proof. apply _. Qed.
Global Instance locked_timeless γ : TimelessP (locked γ).
Global Instance locked_timeless γ : Timeless (locked γ).
Proof. apply _. Qed.
Lemma newlock_spec (R : iProp Σ):
......
......@@ -59,9 +59,9 @@ Section proof.
Proof. solve_proper. Qed.
Global Instance is_lock_ne γ lk : NonExpansive (is_lock γ lk).
Proof. solve_proper. Qed.
Global Instance is_lock_persistent γ lk R : PersistentP (is_lock γ lk R).
Global Instance is_lock_persistent γ lk R : Persistent (is_lock γ lk R).
Proof. apply _. Qed.
Global Instance locked_timeless γ : TimelessP (locked γ).
Global Instance locked_timeless γ : Timeless (locked γ).
Proof. apply _. Qed.
Lemma locked_exclusive (γ : gname) : locked γ - locked γ - False.
......
......@@ -75,7 +75,7 @@ Section lifting.
Lemma ownP_twice σ1 σ2 : ownP σ1 ownP σ2 False.
Proof. rewrite /ownP -own_op own_valid. by iIntros (?). Qed.
Global Instance ownP_timeless σ : TimelessP (@ownP (state Λ) Σ _ σ).
Global Instance ownP_timeless σ : Timeless (@ownP (state Λ) Σ _ σ).
Proof. rewrite /ownP; apply _. Qed.
Lemma ownP_lift_step E Φ e1 :
......
......@@ -139,14 +139,14 @@ Proof.
rewrite -Hx. apply pure_intro. done.
Qed.
(* IntoPersistentP *)
Global Instance into_persistentP_always_trans p P Q :
IntoPersistentP true P Q IntoPersistentP p ( P) Q | 0.
Proof. rewrite /IntoPersistentP /==> ->. by rewrite always_if_always. Qed.
Global Instance into_persistentP_always P : IntoPersistentP true P P | 1.
(* IntoPersistent *)
Global Instance into_persistent_always_trans p P Q :
IntoPersistent true P Q IntoPersistent p ( P) Q | 0.
Proof. rewrite /IntoPersistent /==> ->. by rewrite always_if_always. Qed.
Global Instance into_persistent_always P : IntoPersistent true P P | 1.
Proof. done. Qed.
Global Instance into_persistentP_persistent P :
PersistentP P IntoPersistentP false P P | 100.
Global Instance into_persistent_persistent P :
Persistent P IntoPersistent false P P | 100.
Proof. done. Qed.
(* IntoLater *)
......@@ -339,10 +339,10 @@ Proof. by apply mk_from_and_and. Qed.
Global Instance from_and_sep P1 P2 : FromAnd false (P1 P2) P1 P2 | 100.
Proof. done. Qed.
Global Instance from_and_sep_persistent_l P1 P2 :
PersistentP P1 FromAnd true (P1 P2) P1 P2 | 9.
Persistent P1 FromAnd true (P1 P2) P1 P2 | 9.
Proof. intros. by rewrite /FromAnd always_and_sep_l. Qed.
Global Instance from_and_sep_persistent_r P1 P2 :
PersistentP P2 FromAnd true (P1 P2) P1 P2 | 10.
Persistent P2 FromAnd true (P1 P2) P1 P2 | 10.
Proof. intros. by rewrite /FromAnd always_and_sep_r. Qed.
Global Instance from_and_pure p φ ψ : @FromAnd M p ⌜φ ψ⌝ ⌜φ⌝ ⌜ψ⌝.
......@@ -385,7 +385,7 @@ Global Instance from_and_big_sepL_cons {A} (Φ : nat → A → uPred M) x l :
FromAnd false ([ list] k y x :: l, Φ k y) (Φ 0 x) ([ list] k y l, Φ (S k) y).
Proof. by rewrite /FromAnd big_sepL_cons. Qed.
Global Instance from_and_big_sepL_cons_persistent {A} (Φ : nat A uPred M) x l :
PersistentP (Φ 0 x)
Persistent (Φ 0 x)
FromAnd true ([ list] k y x :: l, Φ k y) (Φ 0 x) ([ list] k y l, Φ (S k) y).
Proof. intros. by rewrite /FromAnd big_opL_cons always_and_sep_l. Qed.
......@@ -394,7 +394,7 @@ Global Instance from_and_big_sepL_app {A} (Φ : nat → A → uPred M) l1 l2 :
([ list] k y l1, Φ k y) ([ list] k y l2, Φ (length l1 + k) y).
Proof. by rewrite /FromAnd big_opL_app. Qed.
Global Instance from_sep_big_sepL_app_persistent {A} (Φ : nat A uPred M) l1 l2 :
( k y, PersistentP (Φ k y))
( k y, Persistent (Φ k y))
FromAnd true ([ list] k y l1 ++ l2, Φ k y)
([ list] k y l1, Φ k y) ([ list] k y l2, Φ (length l1 + k) y).
Proof. intros. by rewrite /FromAnd big_opL_app always_and_sep_l. Qed.
......@@ -430,10 +430,10 @@ Proof. intros. apply mk_into_and_sep. by rewrite (is_op a) ownM_op. Qed.
Global Instance into_and_and P Q : IntoAnd true (P Q) P Q.
Proof. done. Qed.
Global Instance into_and_and_persistent_l P Q :
PersistentP P IntoAnd false (P Q) P Q.
Persistent P IntoAnd false (P Q) P Q.
Proof. intros; by rewrite /IntoAnd /= always_and_sep_l. Qed.
Global Instance into_and_and_persistent_r P Q :
PersistentP Q IntoAnd false (P Q) P Q.
Persistent Q IntoAnd false (P Q) P Q.
Proof. intros; by rewrite /IntoAnd /= always_and_sep_r. Qed.
Global Instance into_and_pure p φ ψ : @IntoAnd M p ⌜φ ψ⌝ ⌜φ⌝ ⌜ψ⌝.
......@@ -783,13 +783,13 @@ Proof.
by rewrite -except_0_sep wand_elim_r.
Qed.
Global Instance elim_modal_timeless_bupd P Q :
TimelessP P IsExcept0 Q ElimModal ( P) P Q Q.
Timeless P IsExcept0 Q ElimModal ( P) P Q Q.
Proof.
intros. rewrite /ElimModal (except_0_intro (_ - _)) (timelessP P).
by rewrite -except_0_sep wand_elim_r.
Qed.
Global Instance elim_modal_timeless_bupd' p P Q :
TimelessP P IsExcept0 Q ElimModal (?p P) P Q Q.
Timeless P IsExcept0 Q ElimModal (?p P) P Q Q.
Proof.
destruct p; simpl; auto using elim_modal_timeless_bupd.
intros _ _. by rewrite /ElimModal wand_elim_r.
......
......@@ -54,10 +54,10 @@ Class FromPure {M} (P : uPred M) (φ : Prop) := from_pure : ⌜φ⌝ ⊢ P.
Arguments from_pure {_} _ _ {_}.
Hint Mode FromPure + ! - : typeclass_instances.
Class IntoPersistentP {M} (p : bool) (P Q : uPred M) :=
into_persistentP : ?p P Q.
Arguments into_persistentP {_} _ _ _ {_}.
Hint Mode IntoPersistentP + + ! - : typeclass_instances.
Class IntoPersistent {M} (p : bool) (P Q : uPred M) :=
into_persistent : ?p P Q.
Arguments into_persistent {_} _ _ _ {_}.
Hint Mode IntoPersistent + + ! - : typeclass_instances.
(* The class [IntoLaterN] has only two instances:
......@@ -122,7 +122,7 @@ Lemma mk_from_and_and {M} p (P Q1 Q2 : uPred M) :
(Q1 Q2 P) FromAnd p P Q1 Q2.
Proof. rewrite /FromAnd=><-. destruct p; auto using sep_and. Qed.
Lemma mk_from_and_persistent {M} (P Q1 Q2 : uPred M) :
Or (PersistentP Q1) (PersistentP Q2) (Q1 Q2 P) FromAnd true P Q1 Q2.
Or (Persistent Q1) (Persistent Q2) (Q1 Q2 P) FromAnd true P Q1 Q2.
Proof.
intros [?|?] ?; rewrite /FromAnd.
- by rewrite always_and_sep_l.
......
......@@ -302,7 +302,7 @@ Proof.
Qed.
Lemma env_spatial_is_nil_persistent Δ :
env_spatial_is_nil Δ = true PersistentP Δ.
env_spatial_is_nil Δ = true Persistent Δ.
Proof. intros; destruct Δ as [? []]; simplify_eq/=; apply _. Qed.
Hint Immediate env_spatial_is_nil_persistent : typeclass_instances.
......@@ -483,33 +483,33 @@ Qed.
Lemma tac_persistent Δ Δ' i p P P' Q :
envs_lookup i Δ = Some (p, P)
IntoPersistentP p P P'
IntoPersistent p P P'
envs_replace i p true (Esnoc Enil i P') Δ = Some Δ'
(Δ' Q) Δ Q.
Proof.
intros ? HP ? <-. rewrite envs_replace_sound //; simpl.
by rewrite right_id (into_persistentP _ P) wand_elim_r.
by rewrite right_id (into_persistent _ P) wand_elim_r.
Qed.
(** * Implication and wand *)
Lemma tac_impl_intro Δ Δ' i P Q :
(if env_spatial_is_nil Δ then TCTrue else PersistentP P)
(if env_spatial_is_nil Δ then TCTrue else Persistent P)
envs_app false (Esnoc Enil i P) Δ = Some Δ'
(Δ' Q) Δ P Q.
Proof.
intros ?? <-. destruct (env_spatial_is_nil Δ) eqn:?.
- rewrite (persistentP Δ) envs_app_sound //; simpl.
- rewrite (persistent Δ) envs_app_sound //; simpl.
by rewrite right_id always_wand_impl always_elim.
- apply impl_intro_l. rewrite envs_app_sound //; simpl.
by rewrite always_and_sep_l right_id wand_elim_r.
Qed.
Lemma tac_impl_intro_persistent Δ Δ' i P P' Q :
IntoPersistentP false P P'
IntoPersistent false P P'
envs_app true (Esnoc Enil i P') Δ = Some Δ'
(Δ' Q) Δ P Q.
Proof.
intros ?? HQ. rewrite envs_app_sound //=; simpl. apply impl_intro_l.
rewrite (_ : P = ?false P) // (into_persistentP false P).
rewrite (_ : P = ?false P) // (into_persistent false P).