Skip to content
Snippets Groups Projects
Commit 20f1b822 authored by Robbert Krebbers's avatar Robbert Krebbers
Browse files

Make coding style more consistent.

parent 29f26e4e
Branches
Tags
No related merge requests found
...@@ -1008,62 +1008,48 @@ Qed. ...@@ -1008,62 +1008,48 @@ Qed.
(** ** The filter operation *) (** ** The filter operation *)
Section map_Filter. Section map_Filter.
Context {A} (P : K * A Prop) `{!∀ x, Decision (P x)}. Context {A} (P : K * A Prop) `{!∀ x, Decision (P x)}.
Implicit Types m : M A.
Lemma map_filter_lookup_Some: Lemma map_filter_lookup_Some m i x :
m k v, filter P m !! k = Some v m !! k = Some v P (k,v). filter P m !! i = Some x m !! i = Some x P (i,x).
Proof. Proof.
apply (map_fold_ind (λ m1 m2, k v, m1 !! k = Some v revert m i x. apply (map_fold_ind (λ m1 m2,
m2 !! k = Some v P _)). i x, m1 !! i = Some x m2 !! i = Some x P _)); intros i x.
- setoid_rewrite lookup_empty. naive_solver. - rewrite lookup_empty. naive_solver.
- intros k v m m' Hm Eq k' v'. - intros m m' Hm Eq j y. case_decide; case (decide (j = i))as [->|?].
case_match; case (decide (k' = k))as [->|?].
+ rewrite 2!lookup_insert. naive_solver. + rewrite 2!lookup_insert. naive_solver.
+ do 2 (rewrite lookup_insert_ne; [|auto]). by apply Eq. + rewrite !lookup_insert_ne by done. by apply Eq.
+ rewrite Eq, Hm, lookup_insert. split; [naive_solver|]. + rewrite Eq, Hm, lookup_insert. naive_solver.
destruct 1 as [Eq' ]. inversion Eq'. by subst.
+ by rewrite lookup_insert_ne. + by rewrite lookup_insert_ne.
Qed. Qed.
Lemma map_filter_lookup_None: Lemma map_filter_lookup_None m i :
m k, filter P m !! i = None m !! i = None x, m !! i = Some x ¬ P (i,x).
filter P m !! k = None m !! k = None v, m !! k = Some v ¬ P (k,v).
Proof. 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. setoid_rewrite map_filter_lookup_Some. naive_solver.
Qed. Qed.
Lemma map_filter_lookup_equiv m1 m2: Lemma map_filter_lookup_eq m1 m2 :
( k v, P (k,v) m1 !! k = Some v m2 !! k = Some v) ( k x, P (k,x) m1 !! k = Some x m2 !! k = Some x)
filter P m1 = filter P m2. filter P m1 = filter P m2.
Proof. Proof.
intros HP. apply map_eq. intros k. intros HP. apply map_eq. intros i. apply option_eq; intros x.
destruct (filter P m2 !! k) as [v2|] eqn:Hv2; rewrite !map_filter_lookup_Some. naive_solver.
[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].
Qed. Qed.
Lemma map_filter_lookup_insert m k v: Lemma map_filter_lookup_insert m i x :
P (k,v) <[k := v]> (filter P m) = filter P (<[k := v]> m). P (i,x) <[i:=x]> (filter P m) = filter P (<[i:=x]> m).
Proof. Proof.
intros HP. apply map_eq. intros k'. intros HP. apply map_eq. intros j. apply option_eq; intros y.
case (decide (k' = k)) as [->|?]; destruct (decide (j = i)) as [->|?].
[rewrite lookup_insert|rewrite lookup_insert_ne; [|auto]]. - rewrite map_filter_lookup_Some, !lookup_insert. naive_solver.
- symmetry. apply map_filter_lookup_Some. by rewrite lookup_insert. - rewrite lookup_insert_ne, !map_filter_lookup_Some, lookup_insert_ne by done.
- destruct (filter P (<[k:=v]> m) !! k') eqn: Hk; revert Hk; naive_solver.
[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].
Qed. Qed.
Lemma map_filter_empty : filter P = ∅. Lemma map_filter_empty : filter P ( : M A) = ∅.
Proof. apply map_fold_empty. Qed. Proof. apply map_fold_empty. Qed.
End map_Filter. End map_Filter.
(** ** Properties of the [map_Forall] predicate *) (** ** Properties of the [map_Forall] predicate *)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment