From 679acccb615a1e700ee21b1d1c2fe73ae2177e16 Mon Sep 17 00:00:00 2001 From: Ralf Jung <jung@mpi-sws.org> Date: Fri, 5 Mar 2021 18:31:07 +0100 Subject: [PATCH] add ghost_map_update lemma --- iris/base_logic/lib/ghost_map.v | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/iris/base_logic/lib/ghost_map.v b/iris/base_logic/lib/ghost_map.v index 430992308..be21d1865 100644 --- a/iris/base_logic/lib/ghost_map.v +++ b/iris/base_logic/lib/ghost_map.v @@ -43,8 +43,10 @@ Notation "k ↪[ γ ]{ dq } v" := (ghost_map_elem γ k dq v) (at level 20, γ at level 50, dq at level 50, format "k ↪[ γ ]{ dq } v") : bi_scope. Notation "k ↪[ γ ]{# q } v" := (k ↪[γ]{DfracOwn q} v)%I (at level 20, γ at level 50, q at level 50, format "k ↪[ γ ]{# q } v") : bi_scope. -Notation "k ↪[ γ ] v" := (k ↪[γ]{#1} v)%I (at level 20, γ at level 50) : bi_scope. -Notation "k ↪[ γ ]□ v" := (k ↪[γ]{DfracDiscarded} v)%I (at level 20, γ at level 50) : bi_scope. +Notation "k ↪[ γ ] v" := (k ↪[γ]{#1} v)%I + (at level 20, γ at level 50, format "k ↪[ γ ] v") : bi_scope. +Notation "k ↪[ γ ]□ v" := (k ↪[γ]{DfracDiscarded} v)%I + (at level 20, γ at level 50) : bi_scope. Local Ltac unseal := rewrite ?ghost_map_auth_eq /ghost_map_auth_def @@ -184,7 +186,7 @@ Section lemmas. eauto. Qed. - Lemma ghost_map_insert k v γ m : + Lemma ghost_map_insert {γ m} k v : m !! k = None → ghost_map_auth γ 1 m ==∗ ghost_map_auth γ 1 (<[k := v]> m) ∗ k ↪[γ] v. Proof. @@ -192,11 +194,20 @@ Section lemmas. iApply own_update. apply: gmap_view_alloc; done. Qed. - Lemma ghost_map_delete k v γ m : - ghost_map_auth γ 1 m ∗ k ↪[γ] v ==∗ ghost_map_auth γ 1 (delete k m). + Lemma ghost_map_delete {γ m k v} : + ghost_map_auth γ 1 m -∗ k ↪[γ] v ==∗ ghost_map_auth γ 1 (delete k m). Proof. - unseal. rewrite -own_op. + unseal. apply bi.wand_intro_r. rewrite -own_op. iApply own_update. apply: gmap_view_delete. Qed. + Lemma ghost_map_update {γ m k v} w : + ghost_map_auth γ 1 m -∗ k ↪[γ] v ==∗ ghost_map_auth γ 1 (<[k := w]> m) ∗ k ↪[γ] w. + Proof. + iIntros "Hauth Hel". iMod (ghost_map_delete with "Hauth Hel") as "Hauth". + iMod (ghost_map_insert k with "Hauth"). + { rewrite lookup_delete. done. } + rewrite insert_delete. eauto. + Qed. + End lemmas. -- GitLab