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.