From 0e3ba050a2300047ef0ad4f9189472f715403b08 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Wed, 12 Jan 2022 16:40:38 +0100 Subject: [PATCH] Add similar filter lemmas for maps and sets. --- theories/fin_maps.v | 7 +++++++ theories/fin_sets.v | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/theories/fin_maps.v b/theories/fin_maps.v index 6cb16d4e..e5c1e065 100644 --- a/theories/fin_maps.v +++ b/theories/fin_maps.v @@ -1279,6 +1279,13 @@ Section map_filter_lookup. m !! i = None ∨ (∀ x : A, m !! i = Some x → ¬ P (i, x)) → filter P m !! i = None. Proof. apply map_filter_lookup_None. Qed. + + Lemma map_filter_empty_not_lookup m i x : + filter P m = ∅ → P (i,x) → m !! i ≠Some x. + Proof. + rewrite map_empty. setoid_rewrite map_filter_lookup_None. intros Hm ?. + destruct (Hm i); naive_solver. + Qed. End map_filter_lookup. Section map_filter_ext. diff --git a/theories/fin_sets.v b/theories/fin_sets.v index ed7e1034..41f8311c 100644 --- a/theories/fin_sets.v +++ b/theories/fin_sets.v @@ -353,6 +353,9 @@ Section filter. Lemma filter_singleton_not x : ¬P x → filter P ({[ x ]} : C) ≡ ∅. Proof. set_solver. Qed. + Lemma filter_empty_not_elem_of X x : filter P X ≡ ∅ → P x → x ∉ X. + Proof. set_solver. Qed. + Lemma disjoint_filter X Y : X ## Y → filter P X ## filter P Y. Proof. set_solver. Qed. Lemma filter_union X Y : filter P (X ∪ Y) ≡ filter P X ∪ filter P Y. @@ -371,6 +374,9 @@ Section filter. Lemma filter_singleton_not_L x : ¬P x → filter P ({[ x ]} : C) = ∅. Proof. unfold_leibniz. apply filter_singleton_not. Qed. + Lemma filter_empty_not_elem_of_L X x : filter P X = ∅ → P x → x ∉ X. + Proof. unfold_leibniz. apply filter_empty_not_elem_of. Qed. + Lemma filter_union_L X Y : filter P (X ∪ Y) = filter P X ∪ filter P Y. Proof. unfold_leibniz. apply filter_union. Qed. Lemma filter_union_complement_L X Y : filter P X ∪ filter (λ x, ¬P x) X = X. -- GitLab