From f9ad00e21bc7c03cf8a9893ee11265f36eb405f5 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Tue, 31 May 2016 00:04:12 +0200 Subject: [PATCH] Generalize insert_delete lemma. --- theories/fin_maps.v | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/theories/fin_maps.v b/theories/fin_maps.v index 101ac688..5d0f656f 100644 --- a/theories/fin_maps.v +++ b/theories/fin_maps.v @@ -366,13 +366,8 @@ Qed. Lemma delete_insert {A} (m : M A) i x : m !! i = None → delete i (<[i:=x]>m) = m. Proof. apply delete_partial_alter. Qed. -Lemma insert_delete {A} (m : M A) i x : - m !! i = Some x → <[i:=x]>(delete i m) = m. -Proof. - intros Hmi. unfold delete, map_delete, insert, map_insert. - rewrite <-partial_alter_compose. unfold compose. rewrite <-Hmi. - by apply partial_alter_self_alt. -Qed. +Lemma insert_delete {A} (m : M A) i x : <[i:=x]>(delete i m) = <[i:=x]> m. +Proof. symmetry; apply (partial_alter_compose (λ _, Some x)). Qed. Lemma delete_subseteq {A} (m : M A) i : delete i m ⊆ m. Proof. rewrite !map_subseteq_spec. intros j x. rewrite lookup_delete_Some. tauto. @@ -473,8 +468,8 @@ Lemma insert_subset_inv {A} (m1 m2 : M A) i x : ∃ m2', m2 = <[i:=x]>m2' ∧ m1 ⊂ m2' ∧ m2' !! i = None. Proof. intros Hi Hm1m2. exists (delete i m2). split_and?. - - rewrite insert_delete. done. eapply lookup_weaken, strict_include; eauto. - by rewrite lookup_insert. + - rewrite insert_delete, insert_id. done. + eapply lookup_weaken, strict_include; eauto. by rewrite lookup_insert. - eauto using insert_delete_subset. - by rewrite lookup_delete. Qed. -- GitLab