diff --git a/algebra/cmra.v b/algebra/cmra.v index fe76e9cbb9a91bf7f1750da556fb924eab21d579..5c8a685e9ea235e38ed8a3a2d3b6f3d85c6c7c2e 100644 --- a/algebra/cmra.v +++ b/algebra/cmra.v @@ -320,10 +320,10 @@ Lemma cmra_pcore_r' x cx : pcore x ≡ Some cx → x ⋅ cx ≡ x. Proof. intros (cx'&?&->)%equiv_Some_inv_r'. by apply cmra_pcore_r. Qed. Lemma cmra_pcore_idemp' x cx : pcore x ≡ Some cx → pcore cx ≡ Some cx. Proof. intros (cx'&?&->)%equiv_Some_inv_r'. eauto using cmra_pcore_idemp. Qed. -Lemma cmra_pcore_pcore x cx : pcore x = Some cx → cx ⋅ cx ≡ cx. -Proof. eauto using cmra_pcore_r', cmra_pcore_idemp. Qed. -Lemma cmra_pcore_pcore' x cx : pcore x ≡ Some cx → cx ⋅ cx ≡ cx. -Proof. eauto using cmra_pcore_r', cmra_pcore_idemp'. Qed. +Lemma cmra_pcore_dup x cx : pcore x = Some cx → cx ≡ cx ⋅ cx. +Proof. intros; symmetry; eauto using cmra_pcore_r', cmra_pcore_idemp. Qed. +Lemma cmra_pcore_dup' x cx : pcore x ≡ Some cx → cx ≡ cx ⋅ cx. +Proof. intros; symmetry; eauto using cmra_pcore_r', cmra_pcore_idemp'. Qed. Lemma cmra_pcore_validN n x cx : ✓{n} x → pcore x = Some cx → ✓{n} cx. Proof. intros Hvx Hx%cmra_pcore_l. move: Hvx; rewrite -Hx. apply cmra_validN_op_l. @@ -333,6 +333,10 @@ Proof. intros Hv Hx%cmra_pcore_l. move: Hv; rewrite -Hx. apply cmra_valid_op_l. Qed. +(** ** Persistent elements *) +Lemma persistent_dup x `{!Persistent x} : x ≡ x ⋅ x. +Proof. by apply cmra_pcore_dup' with x. Qed. + (** ** Order *) Lemma cmra_included_includedN n x y : x ≼ y → x ≼{n} y. Proof. intros [z ->]. by exists z. Qed. @@ -428,8 +432,8 @@ Section total_core. Lemma cmra_core_r x : x ⋅ core x ≡ x. Proof. by rewrite (comm _ x) cmra_core_l. Qed. - Lemma cmra_core_core x : core x ⋅ core x ≡ core x. - Proof. by rewrite -{2}(cmra_core_idemp x) cmra_core_r. Qed. + Lemma cmra_core_dup x : core x ≡ core x ⋅ core x. + Proof. by rewrite -{3}(cmra_core_idemp x) cmra_core_r. Qed. Lemma cmra_core_validN n x : ✓{n} x → ✓{n} core x. Proof. rewrite -{1}(cmra_core_l x); apply cmra_validN_op_l. Qed. Lemma cmra_core_valid x : ✓ x → ✓ core x. diff --git a/algebra/upred.v b/algebra/upred.v index 0a72da7b07a5f0c63b8aebaa0117409a61a7bd42..a354f58b1b3f9d828cc2f1c6c2d017ca8adc274a 100644 --- a/algebra/upred.v +++ b/algebra/upred.v @@ -876,7 +876,7 @@ Proof. by unseal. Qed. Lemma always_and_sep_1 P Q : □ (P ∧ Q) ⊢ □ (P ★ Q). Proof. unseal; split=> n x ? [??]. - exists (core x), (core x); rewrite cmra_core_core; auto. + exists (core x), (core x); rewrite -cmra_core_dup; auto. Qed. Lemma always_and_sep_l_1 P Q : (□ P ∧ Q) ⊢ (□ P ★ Q). Proof.