From 20f1b8220053dd246ed4e3a1eb501828a9249bd4 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Fri, 29 Sep 2017 13:50:10 +0200 Subject: [PATCH] Make coding style more consistent. --- theories/fin_maps.v | 64 ++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 39 deletions(-) diff --git a/theories/fin_maps.v b/theories/fin_maps.v index 14fac434..b52ce660 100644 --- a/theories/fin_maps.v +++ b/theories/fin_maps.v @@ -1008,62 +1008,48 @@ Qed. (** ** The filter operation *) Section map_Filter. Context {A} (P : K * A → Prop) `{!∀ x, Decision (P x)}. + Implicit Types m : M A. - Lemma map_filter_lookup_Some: - ∀ m k v, filter P m !! k = Some v ↔ m !! k = Some v ∧ P (k,v). + Lemma map_filter_lookup_Some m i x : + filter P m !! i = Some x ↔ m !! i = Some x ∧ P (i,x). Proof. - apply (map_fold_ind (λ m1 m2, ∀ k v, m1 !! k = Some v - ↔ m2 !! k = Some v ∧ P _)). - - setoid_rewrite lookup_empty. naive_solver. - - intros k v m m' Hm Eq k' v'. - case_match; case (decide (k' = k))as [->|?]. + revert m i x. apply (map_fold_ind (λ m1 m2, + ∀ i x, m1 !! i = Some x ↔ m2 !! i = Some x ∧ P _)); intros i x. + - rewrite lookup_empty. naive_solver. + - intros m m' Hm Eq j y. case_decide; case (decide (j = i))as [->|?]. + rewrite 2!lookup_insert. naive_solver. - + do 2 (rewrite lookup_insert_ne; [|auto]). by apply Eq. - + rewrite Eq, Hm, lookup_insert. split; [naive_solver|]. - destruct 1 as [Eq' ]. inversion Eq'. by subst. + + rewrite !lookup_insert_ne by done. by apply Eq. + + rewrite Eq, Hm, lookup_insert. naive_solver. + by rewrite lookup_insert_ne. Qed. - Lemma map_filter_lookup_None: - ∀ m k, - filter P m !! k = None ↔ m !! k = None ∨ ∀ v, m !! k = Some v → ¬ P (k,v). + Lemma map_filter_lookup_None m i : + filter P m !! i = None ↔ m !! i = None ∨ ∀ x, m !! i = Some x → ¬ P (i,x). Proof. - intros m k. rewrite eq_None_not_Some. unfold is_Some. + rewrite eq_None_not_Some. unfold is_Some. setoid_rewrite map_filter_lookup_Some. naive_solver. Qed. - Lemma map_filter_lookup_equiv m1 m2: - (∀ k v, P (k,v) → m1 !! k = Some v ↔ m2 !! k = Some v) - → filter P m1 = filter P m2. + Lemma map_filter_lookup_eq m1 m2 : + (∀ k x, P (k,x) → m1 !! k = Some x ↔ m2 !! k = Some x) → + filter P m1 = filter P m2. Proof. - intros HP. apply map_eq. intros k. - destruct (filter P m2 !! k) as [v2|] eqn:Hv2; - [apply map_filter_lookup_Some in Hv2 as [Hv2 HP2]; - specialize (HP k v2 HP2) - |apply map_filter_lookup_None; right; intros v EqS ISP; - apply map_filter_lookup_None in Hv2 as [Hv2|Hv2]]. - - apply map_filter_lookup_Some. by rewrite HP. - - specialize (HP _ _ ISP). rewrite HP, Hv2 in EqS. naive_solver. - - apply (Hv2 v); [by apply HP|done]. + intros HP. apply map_eq. intros i. apply option_eq; intros x. + rewrite !map_filter_lookup_Some. naive_solver. Qed. - Lemma map_filter_lookup_insert m k v: - P (k,v) → <[k := v]> (filter P m) = filter P (<[k := v]> m). + Lemma map_filter_lookup_insert m i x : + P (i,x) → <[i:=x]> (filter P m) = filter P (<[i:=x]> m). Proof. - intros HP. apply map_eq. intros k'. - case (decide (k' = k)) as [->|?]; - [rewrite lookup_insert|rewrite lookup_insert_ne; [|auto]]. - - symmetry. apply map_filter_lookup_Some. by rewrite lookup_insert. - - destruct (filter P (<[k:=v]> m) !! k') eqn: Hk; revert Hk; - [rewrite map_filter_lookup_Some, lookup_insert_ne; [|by auto]; - by rewrite <-map_filter_lookup_Some - |rewrite map_filter_lookup_None, lookup_insert_ne; [|auto]; - by rewrite <-map_filter_lookup_None]. + intros HP. apply map_eq. intros j. apply option_eq; intros y. + destruct (decide (j = i)) as [->|?]. + - rewrite map_filter_lookup_Some, !lookup_insert. naive_solver. + - rewrite lookup_insert_ne, !map_filter_lookup_Some, lookup_insert_ne by done. + naive_solver. Qed. - Lemma map_filter_empty : filter P ∅ = ∅. + Lemma map_filter_empty : filter P (∅ : M A) = ∅. Proof. apply map_fold_empty. Qed. - End map_Filter. (** ** Properties of the [map_Forall] predicate *) -- GitLab