From d6c5699bc0638165b7ef57b938ac85c9672f8c51 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Wed, 15 Jan 2020 23:11:26 +0100 Subject: [PATCH] Bump std++. --- opam | 2 +- theories/heap_lang/metatheory.v | 26 ++++---------------------- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/opam b/opam index d74960e72..0a6ebc1e6 100644 --- a/opam +++ b/opam @@ -11,7 +11,7 @@ synopsis: "This is the Coq development of the Iris Project" depends: [ "coq" { (= "8.8.2") | (>= "8.9.1" & < "8.12~") | (= "dev") } - "coq-stdpp" { (= "dev.2019-11-22.2.16eb222f") | (= "dev") } + "coq-stdpp" { (= "dev.2020-01-15.0.ec91c14f") | (= "dev") } ] build: [make "-j%{jobs}%"] diff --git a/theories/heap_lang/metatheory.v b/theories/heap_lang/metatheory.v index 090b22601..a2874c21c 100644 --- a/theories/heap_lang/metatheory.v +++ b/theories/heap_lang/metatheory.v @@ -138,19 +138,6 @@ Proof. - case_match; try apply map_Forall_insert_2; by naive_solver. Qed. -(* Parallel substitution with maps of values indexed by strings *) -Definition binder_delete {A} (x : binder) (vs : gmap string A) : gmap string A := - if x is BNamed x' then delete x' vs else vs. -Definition binder_insert {A} (x : binder) (v : A) (vs : gmap string A) : gmap string A := - if x is BNamed x' then <[x':=v]>vs else vs. - -Lemma binder_insert_fmap {A B : Type} (f : A → B) (x : A) b vs : - f <$> binder_insert b x vs = binder_insert b (f x) (f <$> vs). -Proof. destruct b; rewrite ?fmap_insert //. Qed. -Lemma lookup_binder_delete_None {A : Type} (vs : gmap string A) x y : - binder_delete x vs !! y = None ↔ x = BNamed y ∨ vs !! y = None. -Proof. destruct x; rewrite /= ?lookup_delete_None; naive_solver. Qed. - Fixpoint subst_map (vs : gmap string val) (e : expr) : expr := match e with | Val _ => e @@ -185,21 +172,16 @@ Qed. Lemma subst_map_insert x v vs e : subst_map (<[x:=v]>vs) e = subst x v (subst_map (delete x vs) e). Proof. - revert vs. assert (∀ (y : binder) (vs : gmap _ val), y ≠BNamed x → - binder_delete y (<[x:=v]> vs) = <[x:=v]> (binder_delete y vs)) as Hins. - { intros [|y] vs ?; rewrite /= ?delete_insert_ne //; congruence. } - assert (∀ (y : binder) (vs : gmap _ val), - binder_delete y (delete x vs) = delete x (binder_delete y vs)) as Hdel. - { by intros [|y] ?; rewrite /= 1?delete_commute. } - induction e=> vs; simplify_map_eq; auto with f_equal. + revert vs. induction e=> vs; simplify_map_eq; auto with f_equal. - match goal with | |- context [ <[?x:=_]> _ !! ?y ] => destruct (decide (x = y)); simplify_map_eq=> // end. by case (vs !! _); simplify_option_eq. - destruct (decide _) as [[??]|[<-%dec_stable|[<-%dec_stable ?]]%not_and_l_alt]. - + rewrite !Hins // !Hdel. eauto with f_equal. + + rewrite !binder_delete_insert // !binder_delete_delete; eauto with f_equal. + by rewrite /= delete_insert_delete delete_idemp. - + by rewrite /= Hins // delete_insert_delete !Hdel delete_idemp. + + by rewrite /= binder_delete_insert // delete_insert_delete + !binder_delete_delete delete_idemp. Qed. Lemma subst_map_binder_insert b v vs e : subst_map (binder_insert b v vs) e = -- GitLab