diff --git a/theories/fin_maps.v b/theories/fin_maps.v index d33449b0845b4c5579ea278c4edf78e3fc27eca9..7fd11ef73f24a9bea2f2c31bfaa6c0b9b09f9d83 100644 --- a/theories/fin_maps.v +++ b/theories/fin_maps.v @@ -2408,6 +2408,13 @@ Proof. unfold intersection, map_intersection. rewrite lookup_intersection_with. destruct (m1 !! i), (m2 !! i); compute; naive_solver. Qed. +Lemma map_intersection_filter {A} (m1 m2 : M A) : + m1 ∩ m2 = filter (λ kx, is_Some (m1 !! kx.1) ∧ is_Some (m2 !! kx.1)) (m1 ∪ m2). +Proof. + apply map_eq; intros i. apply option_eq; intros x. + rewrite lookup_intersection_Some, map_filter_lookup_Some, lookup_union; simpl. + unfold is_Some. destruct (m1 !! i), (m2 !! i); naive_solver. +Qed. (** ** Properties of the [difference_with] operation *) Lemma lookup_difference_with {A} (f : A → A → option A) (m1 m2 : M A) i : @@ -2481,6 +2488,12 @@ Proof. rewrite lookup_insert_Some, !lookup_difference_Some, lookup_delete_None. destruct (decide (i = j)); naive_solver. Qed. +Lemma map_difference_filter {A} (m1 m2 : M A) : + m1 ∖ m2 = filter (λ kx, m2 !! kx.1 = None) m1. +Proof. + apply map_eq; intros i. apply option_eq; intros x. + by rewrite lookup_difference_Some, map_filter_lookup_Some. +Qed. (** ** Setoids *) Section setoid.