From 628ad2ad1d44b90519e7d212e4d305ad05ffca35 Mon Sep 17 00:00:00 2001 From: Ralf Jung <jung@mpi-sws.org> Date: Mon, 22 Mar 2021 20:43:47 +0100 Subject: [PATCH] tweaks --- iris/base_logic/lib/ghost_map.v | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/iris/base_logic/lib/ghost_map.v b/iris/base_logic/lib/ghost_map.v index 9cb4bbb09..ce25d09b1 100644 --- a/iris/base_logic/lib/ghost_map.v +++ b/iris/base_logic/lib/ghost_map.v @@ -175,7 +175,7 @@ Section lemmas. Qed. (** * Lemmas about the interaction of [ghost_map_auth] with the elements *) - Lemma ghost_map_lookup k γ q m dq v : + Lemma ghost_map_lookup {γ q m k dq v} : ghost_map_auth γ q m -∗ k ↪[γ]{dq} v -∗ ⌜m !! k = Some vâŒ. Proof. unseal. iIntros "Hauth Hel". @@ -216,8 +216,8 @@ Section lemmas. Qed. (** Derived big-op versions of above lemmas *) - Lemma ghost_map_lookup_big γ m m0 : - ghost_map_auth γ 1 m -∗ + Lemma ghost_map_lookup_big {γ q m} m0 : + ghost_map_auth γ q m -∗ ([∗ map] k↦v ∈ m0, k ↪[γ] v) -∗ ⌜m0 ⊆ mâŒ. Proof. @@ -234,9 +234,10 @@ Section lemmas. ghost_map_auth γ 1 m ==∗ ghost_map_auth γ 1 (m' ∪ m) ∗ ([∗ map] k ↦ v ∈ m', k ↪[γ] v). Proof. - revert m; induction m' as [|k v m' Hk IH] using map_ind; iIntros (m Hdisj) "Hm". + iInduction m' as [|k v m' Hk] "IH" using map_ind forall (m); iIntros (Hdisj) "Hm". { rewrite left_id_L. auto. } - iMod (IH with "Hm") as "[Hm'm Hm']"; first by eapply map_disjoint_insert_l. + iMod ("IH" with "[] Hm") as "[Hm'm Hm']". + { iPureIntro. by eapply map_disjoint_insert_l. } decompose_map_disjoint. rewrite !big_opM_insert // -insert_union_l //. by iMod (ghost_map_insert with "Hm'm") as "($ & $)"; @@ -253,27 +254,27 @@ Section lemmas. iIntros "!#" (k v) "_". iApply ghost_map_elem_persist. Qed. - Lemma ghost_map_delete_big {γ m m0} : + Lemma ghost_map_delete_big {γ m} m0 : ghost_map_auth γ 1 m -∗ - ([∗ map] k↦v ∈ m0, k ↪[γ] v) -∗ - |==> ghost_map_auth γ 1 (m ∖ m0). + ([∗ map] k↦v ∈ m0, k ↪[γ] v) ==∗ + ghost_map_auth γ 1 (m ∖ m0). Proof. iInduction m0 as [|k v m0 Hk IH] "IH" using map_ind. - { iIntros "Hauth _". rewrite right_id //. } + { iIntros "Hauth _". rewrite right_id_L //. } rewrite big_sepM_insert //. iIntros "Hauth [Helem Hm0]". iMod ("IH" with "Hauth Hm0") as "Hauth". iMod (ghost_map_delete with "Hauth Helem") as "Hauth". rewrite -delete_difference. done. Qed. - Theorem ghost_map_update_big {γ m m0} m1 : + Theorem ghost_map_update_big {γ m} m0 m1 : dom (gset K) m0 = dom (gset K) m1 → ghost_map_auth γ 1 m -∗ - ([∗ map] k↦v ∈ m0, k ↪[γ] v) -∗ - |==> ghost_map_auth γ 1 (m1 ∪ m) ∗ + ([∗ map] k↦v ∈ m0, k ↪[γ] v) ==∗ + ghost_map_auth γ 1 (m1 ∪ m) ∗ [∗ map] k↦v ∈ m1, k ↪[γ] v. Proof. - iIntros (Hdom) "Hauth Hm0". apply (comm (R:=(↔)) (=)) in Hdom. + iIntros (Hdom%eq_sym) "Hauth Hm0". iInduction m0 as [|k v m0 Hk] "IH" using map_ind forall (m m1 Hdom). - rewrite dom_empty_L in Hdom. apply dom_empty_inv_L in Hdom as ->. -- GitLab