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.
......
......@@ -29,15 +29,15 @@ Notation "◇ P" := (uPred_except_0 P)
Instance: Params (@uPred_except_0) 1.
Typeclasses Opaque uPred_except_0.
Class TimelessP {M} (P : uPred M) := timelessP : P P.
Class Timeless {M} (P : uPred M) := timelessP : P P.
Arguments timelessP {_} _ {_}.
Hint Mode TimelessP + ! : typeclass_instances.
Instance: Params (@TimelessP) 1.
Hint Mode Timeless + ! : typeclass_instances.
Instance: Params (@Timeless) 1.
Class PersistentP {M} (P : uPred M) := persistentP : P P.
Arguments persistentP {_} _ {_}.
Hint Mode PersistentP + ! : typeclass_instances.
Instance: Params (@PersistentP) 1.
Class Persistent {M} (P : uPred M) := persistent : P P.
Arguments persistent {_} _ {_}.
Hint Mode Persistent + ! : typeclass_instances.
Instance: Params (@Persistent) 1.
Module uPred.
Section derived.
......@@ -794,33 +794,32 @@ Proof.
by rewrite -bupd_intro -or_intro_l.
Qed.
(* Discrete instances *)
Global Instance TimelessP_proper : Proper (() ==> iff) (@TimelessP M).
Global Instance Timeless_proper : Proper (() ==> iff) (@Timeless M).
Proof. solve_proper. Qed.
Global Instance pure_timeless φ : TimelessP (⌜φ⌝ : uPred M)%I.
Global Instance pure_timeless φ : Timeless (⌜φ⌝ : uPred M)%I.
Proof.
rewrite /TimelessP pure_alt later_exist_false. by setoid_rewrite later_True.
rewrite /Timeless pure_alt later_exist_false. by setoid_rewrite later_True.
Qed.
Global Instance valid_timeless {A : cmraT} `{CmraDiscrete A} (a : A) :
TimelessP ( a : uPred M)%I.
Proof. rewrite /TimelessP !discrete_valid. apply (timelessP _). Qed.
Global Instance and_timeless P Q: TimelessP P TimelessP Q TimelessP (P Q).
Proof. intros; rewrite /TimelessP except_0_and later_and; auto. Qed.
Global Instance or_timeless P Q : TimelessP P TimelessP Q TimelessP (P Q).
Proof. intros; rewrite /TimelessP except_0_or later_or; auto. Qed.
Global Instance impl_timeless P Q : TimelessP Q TimelessP (P Q).
Proof.
rewrite /TimelessP=> HQ. rewrite later_false_excluded_middle.
Timeless ( a : uPred M)%I.
Proof. rewrite /Timeless !discrete_valid. apply (timelessP _). Qed.
Global Instance and_timeless P Q: Timeless P Timeless Q Timeless (P Q).
Proof. intros; rewrite /Timeless except_0_and later_and; auto. Qed.
Global Instance or_timeless P Q : Timeless P Timeless Q Timeless (P Q).
Proof. intros; rewrite /Timeless except_0_or later_or; auto. Qed.
Global Instance impl_timeless P Q : Timeless Q Timeless (P Q).
Proof.
rewrite /Timeless=> HQ. rewrite later_false_excluded_middle.
apply or_mono, impl_intro_l; first done.
rewrite -{2}(löb Q); apply impl_intro_l.
rewrite HQ /uPred_except_0 !and_or_r. apply or_elim; last auto.
by rewrite assoc (comm _ _ P) -assoc !impl_elim_r.
Qed.
Global Instance sep_timeless P Q: TimelessP P TimelessP Q TimelessP (P Q).
Proof. intros; rewrite /TimelessP except_0_sep later_sep; auto. Qed.
Global Instance wand_timeless P Q : TimelessP Q TimelessP (P - Q).
Global Instance sep_timeless P Q: Timeless P Timeless Q Timeless (P Q).
Proof. intros; rewrite /Timeless except_0_sep later_sep; auto. Qed.
Global Instance wand_timeless P Q : Timeless Q Timeless (P - Q).
Proof.
rewrite /TimelessP=> HQ. rewrite later_false_excluded_middle.
rewrite /Timeless=> HQ. rewrite later_false_excluded_middle.
apply or_mono, wand_intro_l; first done.
rewrite -{2}(löb Q); apply impl_intro_l.
rewrite HQ /uPred_except_0 !and_or_r. apply or_elim; last auto.
......@@ -828,113 +827,113 @@ Proof.
by rewrite assoc (comm _ _ P) -assoc -always_and_sep_l' impl_elim_r wand_elim_r.
Qed.
Global Instance forall_timeless {A} (Ψ : A uPred M) :
( x, TimelessP (Ψ x)) TimelessP ( x, Ψ x).
( x, Timeless (Ψ x)) Timeless ( x, Ψ x).
Proof.
rewrite /TimelessP=> HQ. rewrite later_false_excluded_middle.
rewrite /Timeless=> HQ. rewrite later_false_excluded_middle.
apply or_mono; first done. apply forall_intro=> x.
rewrite -(löb (Ψ x)); apply impl_intro_l.
rewrite HQ /uPred_except_0 !and_or_r. apply or_elim; last auto.
by rewrite impl_elim_r (forall_elim x).
Qed.
Global Instance exist_timeless {A} (Ψ : A uPred M) :
( x, TimelessP (Ψ x)) TimelessP ( x, Ψ x).
( x, Timeless (Ψ x)) Timeless ( x, Ψ x).
Proof.
rewrite /TimelessP=> ?. rewrite later_exist_false. apply or_elim.
rewrite /Timeless=> ?. rewrite later_exist_false. apply or_elim.
- rewrite /uPred_except_0; auto.
- apply exist_elim=> x. rewrite -(exist_intro x); auto.
Qed.
Global Instance always_timeless P : TimelessP P TimelessP ( P).
Proof. intros; rewrite /TimelessP except_0_always -always_later; auto. Qed.
Global Instance always_if_timeless p P : TimelessP P TimelessP (?p P).
Global Instance always_timeless P : Timeless P Timeless ( P).
Proof. intros; rewrite /Timeless except_0_always -always_later; auto. Qed.
Global Instance always_if_timeless p P : Timeless P Timeless (?p P).
Proof. destruct p; apply _. Qed.
Global Instance eq_timeless {A : ofeT} (a b : A) :
Discrete a TimelessP (a b : uPred M)%I.
Proof. intros. rewrite /TimelessP !discrete_eq. apply (timelessP _). Qed.
Global Instance ownM_timeless (a : M) : Discrete a TimelessP (uPred_ownM a).
Discrete a Timeless (a b : uPred M)%I.
Proof. intros. rewrite /Timeless !discrete_eq. apply (timelessP _). Qed.
Global Instance ownM_timeless (a : M) : Discrete a Timeless (uPred_ownM a).
Proof.
intros ?. rewrite /TimelessP later_ownM. apply exist_elim=> b.
intros ?. rewrite /Timeless later_ownM. apply exist_elim=> b.
rewrite (timelessP (ab)) (except_0_intro (uPred_ownM b)) -except_0_and.
apply except_0_mono. rewrite internal_eq_sym.
apply (internal_eq_rewrite b a (uPred_ownM)); first apply _; auto.
Qed.
Global Instance from_option_timeless {A} P (Ψ : A uPred M) (mx : option A) :
( x, TimelessP (Ψ x)) TimelessP P TimelessP (from_option Ψ P mx).
( x, Timeless (Ψ x)) Timeless P Timeless (from_option Ψ P mx).
Proof. destruct mx; apply _. Qed.
(* Derived lemmas for persistence *)
Global Instance PersistentP_proper : Proper (() ==> iff) (@PersistentP M).
Global Instance Persistent_proper : Proper (() ==> iff) (@Persistent M).
Proof. solve_proper. Qed.
Global Instance limit_preserving_PersistentP {A:ofeT} `{Cofe A} (Φ : A uPred M) :
NonExpansive Φ LimitPreserving (λ x, PersistentP (Φ x)).
Global Instance limit_preserving_Persistent {A:ofeT} `{Cofe A} (Φ : A uPred M) :
NonExpansive Φ LimitPreserving (λ x, Persistent (Φ x)).
Proof. intros. apply limit_preserving_entails; solve_proper. Qed.
Lemma always_always P `{!PersistentP P} : P P.
Lemma always_always P `{!Persistent P} : P P.
Proof. apply (anti_symm ()); auto using always_elim. Qed.
Lemma always_if_always p P `{!PersistentP P} : ?p P P.
Lemma always_if_always p P `{!Persistent P} : ?p P P.
Proof. destruct p; simpl; auto using always_always. Qed.
Lemma always_intro P Q `{!PersistentP P} : (P Q) P Q.
Lemma always_intro P Q `{!Persistent P} : (P Q) P Q.
Proof. rewrite -(always_always P); apply always_intro'. Qed.
Lemma always_and_sep_l P Q `{!PersistentP P} : P Q P Q.
Lemma always_and_sep_l P Q `{!Persistent P} : P Q P Q.
Proof. by rewrite -(always_always P) always_and_sep_l'. Qed.
Lemma always_and_sep_r P Q `{!PersistentP Q} : P Q P Q.
Lemma always_and_sep_r P Q `{!Persistent Q} : P Q P Q.
Proof. by rewrite -(always_always Q) always_and_sep_r'. Qed.
Lemma always_sep_dup P `{!PersistentP P} : P P P.
Lemma always_sep_dup P `{!Persistent P} : P P P.
Proof. by rewrite -(always_always P) -always_sep_dup'. Qed.
Lemma always_entails_l P Q `{!PersistentP Q} : (P Q) P Q P.
Lemma always_entails_l P Q `{!Persistent Q} : (P Q) P Q P.
Proof. by rewrite -(always_always Q); apply always_entails_l'. Qed.
Lemma always_entails_r P Q `{!PersistentP Q} : (P Q) P P Q.
Lemma always_entails_r P Q `{!Persistent Q} : (P Q) P P Q.
Proof. by rewrite -(always_always Q); apply always_entails_r'. Qed.
Lemma always_impl_wand P `{!PersistentP P} Q : (P Q) (P - Q).
Lemma always_impl_wand P `{!Persistent P} Q : (P Q) (P - Q).
Proof.
apply (anti_symm _); auto using impl_wand.
apply impl_intro_l. by rewrite always_and_sep_l wand_elim_r.
Qed.
(* Persistence *)
Global Instance pure_persistent φ : PersistentP (⌜φ⌝ : uPred M)%I.
Proof. by rewrite /PersistentP always_pure. Qed.
Global Instance pure_persistent φ : Persistent (⌜φ⌝ : uPred M)%I.
Proof. by rewrite /Persistent always_pure. Qed.
Global Instance pure_impl_persistent φ Q :
PersistentP Q PersistentP (⌜φ⌝ Q)%I.
Persistent Q Persistent (⌜φ⌝ Q)%I.
Proof.
rewrite /PersistentP pure_impl_forall always_forall. auto using forall_mono.
rewrite /Persistent pure_impl_forall always_forall. auto using forall_mono.
Qed.
Global Instance pure_wand_persistent φ Q :
PersistentP Q PersistentP (⌜φ⌝ - Q)%I.
Persistent Q Persistent (⌜φ⌝ - Q)%I.
Proof.
rewrite /PersistentP -always_impl_wand pure_impl_forall always_forall.
rewrite /Persistent -always_impl_wand pure_impl_forall always_forall.
auto using forall_mono.
Qed.
Global Instance always_persistent P : PersistentP ( P).
Global Instance always_persistent P : Persistent ( P).
Proof. by intros; apply always_intro'. Qed.
Global Instance and_persistent P Q :
PersistentP P PersistentP Q PersistentP (P Q).
Proof. by intros; rewrite /PersistentP always_and; apply and_mono. Qed.
Persistent P Persistent Q Persistent (P Q).
Proof. by intros; rewrite /Persistent always_and; apply and_mono. Qed.
Global Instance or_persistent P Q :
PersistentP P PersistentP Q PersistentP (P Q).
Proof. by intros; rewrite /PersistentP always_or; apply or_mono. Qed.
Persistent P Persistent Q Persistent (P Q).
Proof. by intros; rewrite /Persistent always_or; apply or_mono. Qed.
Global Instance sep_persistent P Q :
PersistentP P PersistentP Q PersistentP (P Q).
Proof. by intros; rewrite /PersistentP always_sep; apply sep_mono. Qed.
Persistent P Persistent Q Persistent (P Q).
Proof. by intros; rewrite /Persistent always_sep; apply sep_mono. Qed.
Global Instance forall_persistent {A} (Ψ : A uPred M) :
( x, PersistentP (Ψ x)) PersistentP ( x, Ψ x).
Proof. by intros; rewrite /PersistentP always_forall; apply forall_mono. Qed.
( x, Persistent (Ψ x)) Persistent ( x, Ψ x).
Proof. by intros; rewrite /Persistent always_forall; apply forall_mono. Qed.
Global Instance exist_persistent {A} (Ψ : A uPred M) :
( x, PersistentP (Ψ x)) PersistentP ( x, Ψ x).
Proof. by intros; rewrite /PersistentP always_exist; apply exist_mono. Qed.
( x, Persistent (Ψ x)) Persistent ( x, Ψ x).
Proof. by intros; rewrite /Persistent always_exist; apply exist_mono. Qed.
Global Instance internal_eq_persistent {A : ofeT} (a b : A) :
PersistentP (a b : uPred M)%I.
Proof. by intros; rewrite /PersistentP always_internal_eq. Qed.
Persistent (a b : uPred M)%I.
Proof. by intros; rewrite /Persistent always_internal_eq. Qed.
Global Instance cmra_valid_persistent {A : cmraT} (a : A) :
PersistentP ( a : uPred M)%I.
Proof. by intros; rewrite /PersistentP always_cmra_valid. Qed.
Global Instance later_persistent P : PersistentP P PersistentP ( P).
Proof. by intros; rewrite /PersistentP always_later; apply later_mono. Qed.
Global Instance laterN_persistent n P : PersistentP P PersistentP (^n P).
Persistent ( a : uPred M)%I.
Proof. by intros; rewrite /Persistent always_cmra_valid. Qed.
Global Instance later_persistent P : Persistent P Persistent ( P).
Proof. by intros; rewrite /Persistent always_later; apply later_mono. Qed.
Global Instance laterN_persistent n P : Persistent P Persistent (^n P).
Proof. induction n; apply _. Qed.
Global Instance ownM_persistent : CoreId a PersistentP (@uPred_ownM M a).
Proof. intros. by rewrite /PersistentP always_ownM. Qed.
Global Instance ownM_persistent : CoreId a Persistent (@uPred_ownM M a).
Proof. intros. by rewrite /Persistent always_ownM. Qed.
Global Instance from_option_persistent {A} P (Ψ : A uPred M) (mx : option A) :
( x, PersistentP (Ψ x)) PersistentP P PersistentP (from_option Ψ P mx).
( x, Persistent (Ψ x)) Persistent P Persistent (from_option Ψ P mx).
Proof. destruct mx; apply _. Qed.
(* For big ops *)
......
......@@ -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).