From 2ccdb1041bd7e70b02a1705b9da7c23f7756bf69 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Tue, 2 Feb 2016 14:54:41 +0100 Subject: [PATCH] Basic properties of frame preserving updates and those for products. --- modures/cmra.v | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/modures/cmra.v b/modures/cmra.v index ed96b1f58..0f443ad52 100644 --- a/modures/cmra.v +++ b/modures/cmra.v @@ -318,6 +318,15 @@ Proof. * by intros Hx z ?; exists y; split; [done|apply (Hx z)]. * by intros Hx z n ?; destruct (Hx z n) as (?&<-&?). Qed. +Lemma ra_updateP_id (P : A → Prop) x : P x → x â‡: P. +Proof. by intros ? z n ?; exists x. Qed. +Lemma ra_updateP_compose (P Q : A → Prop) x : + x â‡: P → (∀ y, P y → y â‡: Q) → x â‡: Q. +Proof. + intros Hx Hy z n ?. destruct (Hx z n) as (y&?&?); auto. by apply (Hy y). +Qed. +Lemma ra_updateP_weaken (P Q : A → Prop) x : x â‡: P → (∀ y, P y → Q y) → x â‡: Q. +Proof. eauto using ra_updateP_compose, ra_updateP_id. Qed. End cmra. Hint Extern 0 (_ ≼{0} _) => apply cmra_includedN_0. @@ -384,14 +393,14 @@ Section discrete. Qed. Definition discreteRA : cmraT := CMRAT (cofe_mixin A) discrete_cmra_mixin discrete_extend_mixin. - Lemma discrete_updateP (x : A) (P : A → Prop) `{!Inhabited (sig P)} : - (∀ z, ✓ (x â‹… z) → ∃ y, P y ∧ ✓ (y â‹… z)) → (x : discreteRA) â‡: P. + Lemma discrete_updateP (x : discreteRA) (P : A → Prop) `{!Inhabited (sig P)} : + (∀ z, ✓ (x â‹… z) → ∃ y, P y ∧ ✓ (y â‹… z)) → x â‡: P. Proof. intros Hvalid z [|n]; [|apply Hvalid]. by destruct (_ : Inhabited (sig P)) as [[y ?]]; exists y. Qed. - Lemma discrete_update (x y : A) : - (∀ z, ✓ (x â‹… z) → ✓ (y â‹… z)) → (x : discreteRA) ⇠y. + Lemma discrete_update (x y : discreteRA) : + (∀ z, ✓ (x â‹… z) → ✓ (y â‹… z)) → x ⇠y. Proof. intros Hvalid z [|n]; [done|apply Hvalid]. Qed. End discrete. @@ -465,6 +474,15 @@ Section prod. * by split; rewrite /=left_id. * by intros ? [??]; split; apply (timeless _). Qed. + Lemma prod_update x y : x.1 ⇠y.1 → x.2 ⇠y.2 → x ⇠y. + Proof. intros ?? z n [??]; split; simpl in *; auto. Qed. + Lemma prod_updateP (P : A * B → Prop) P1 P2 x : + x.1 â‡: P1 → x.2 â‡: P2 → (∀ y, P1 (y.1) → P2 (y.2) → P y) → x â‡: P. + Proof. + intros Hx1 Hx2 HP z n [??]; simpl in *. + destruct (Hx1 (z.1) n) as (a&?&?), (Hx2 (z.2) n) as (b&?&?); auto. + exists (a,b); repeat split; auto. + Qed. End prod. Arguments prodRA : clear implicits. -- GitLab