diff --git a/CHANGELOG.md b/CHANGELOG.md
index 768bf1001e50a7477a00ab99bf54d5930eb9619c..0d57fe9ec2ccde7d4b9accb775f4808a92a6c80b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -28,6 +28,12 @@ Coq 8.11 is no longer supported in this version of Iris.
   is not very well-behaved.
 * Extend `gmap_view` with lemmas for "big" operations on maps.
 
+**Changes in `bi`:**
+
+* Add new lemmas `big_sepM2_delete_l` and `big_sepM2_delete_r`.
+* Rename `big_sepM2_lookup_1` → `big_sepM2_lookup_l` and
+  `big_sepM2_lookup_2` → `big_sepM2_lookup_r`.
+
 **Changes in `proofmode`:**
 
 * Add support for pure names `%H` in intro patterns. This is now natively
@@ -77,6 +83,9 @@ s/\b(auth|view)_(auth|both|update)_frac_(is_op|op_invN|op_inv|inv_L|validN|op_va
 s/\bgset_bij_auth_frac_(\w*)\b/gset_bij_auth_dfrac_\1/g
 s/\bgset_bij_auth_empty_frac_valid\b/gset_bij_auth_empty_dfrac_valid/g
 s/\bbij_both_frac_valid\b/bij_both_dfrac_valid/g
+# big_sepM renames
+s/\bbig_sepM2_lookup_1\b/big_sepM2_lookup_l/g
+s/\bbig_sepM2_lookup_2\b/big_sepM2_lookup_r/g
 EOF
 ```
 
diff --git a/iris/bi/big_op.v b/iris/bi/big_op.v
index 8f29847b1569607e6da81da14ec46bbfa06625f1..446257f15af736e3e4c229ea25f0fde2f9258a84 100644
--- a/iris/bi/big_op.v
+++ b/iris/bi/big_op.v
@@ -1471,6 +1471,47 @@ Section map2.
       apply (big_sepM_delete (λ i xx, Φ i xx.1 xx.2) (map_zip m1 m2) i (x1,x2)).
       by rewrite map_lookup_zip_with Hx1 Hx2.
   Qed.
+  Lemma big_sepM2_delete_l Φ m1 m2 i x1 :
+    m1 !! i = Some x1 →
+    ([∗ map] k↦y1;y2 ∈ m1;m2, Φ k y1 y2)
+    ⊣⊢ ∃ x2, ⌜m2 !! i = Some x2⌝ ∧
+            (Φ i x1 x2 ∗ [∗ map] k↦y1;y2 ∈ delete i m1;delete i m2, Φ k y1 y2).
+  Proof.
+    intros Hm1. apply (anti_symm _).
+    - rewrite big_sepM2_eq /big_sepM2_def. apply pure_elim_l=> Hm.
+      assert (is_Some (m2 !! i)) as [x2 Hm2].
+      { apply Hm. by econstructor. }
+      rewrite -(exist_intro x2).
+      rewrite (big_sepM_delete _ _ i (x1,x2)) /=;
+        last by rewrite map_lookup_zip_with Hm1 Hm2.
+      rewrite pure_True // left_id.
+      f_equiv. apply and_intro.
+      + apply pure_intro=> k. by rewrite !lookup_delete_is_Some Hm.
+      + by rewrite -map_delete_zip_with.
+    - apply exist_elim=> x2. apply pure_elim_l=> ?.
+      by rewrite -big_sepM2_delete.
+  Qed.
+  Lemma big_sepM2_delete_r Φ m1 m2 i x2 :
+    m2 !! i = Some x2 →
+    ([∗ map] k↦y1;y2 ∈ m1;m2, Φ k y1 y2)
+    ⊣⊢ ∃ x1, ⌜m1 !! i = Some x1⌝ ∧
+            (Φ i x1 x2 ∗ [∗ map] k↦y1;y2 ∈ delete i m1;delete i m2, Φ k y1 y2).
+  Proof.
+    intros Hm2. apply (anti_symm _).
+    - rewrite big_sepM2_eq /big_sepM2_def.
+      apply pure_elim_l=> Hm.
+      assert (is_Some (m1 !! i)) as [x1 Hm1].
+      { apply Hm. by econstructor. }
+      rewrite -(exist_intro x1).
+      rewrite (big_sepM_delete _ _ i (x1,x2)) /=;
+        last by rewrite map_lookup_zip_with Hm1 Hm2.
+      rewrite pure_True // left_id.
+      f_equiv. apply and_intro.
+      + apply pure_intro=> k. by rewrite !lookup_delete_is_Some Hm.
+      + by rewrite -map_delete_zip_with.
+    - apply exist_elim=> x1. apply pure_elim_l=> ?.
+      by rewrite -big_sepM2_delete.
+  Qed.
 
   Lemma big_sepM2_insert_delete Φ m1 m2 i x1 x2 :
     ([∗ map] k↦y1;y2 ∈ <[i:=x1]>m1; <[i:=x2]>m2, Φ k y1 y2)
@@ -1524,39 +1565,21 @@ Section map2.
     m1 !! i = Some x1 → m2 !! i = Some x2 →
     ([∗ map] k↦y1;y2 ∈ m1;m2, Φ k y1 y2) ⊢ Φ i x1 x2.
   Proof. intros. rewrite big_sepM2_lookup_acc //. by rewrite sep_elim_l. Qed.
-
-  Lemma big_sepM2_lookup_1 Φ m1 m2 i x1 `{!∀ x2, Absorbing (Φ i x1 x2)} :
+  Lemma big_sepM2_lookup_l Φ m1 m2 i x1 `{!∀ x2, Absorbing (Φ i x1 x2)} :
     m1 !! i = Some x1 →
     ([∗ map] k↦y1;y2 ∈ m1;m2, Φ k y1 y2)
     ⊢ ∃ x2, ⌜m2 !! i = Some x2⌝ ∧ Φ i x1 x2.
   Proof.
-    intros Hm1. rewrite big_sepM2_eq /big_sepM2_def.
-    rewrite persistent_and_sep_1.
-    apply wand_elim_l'. apply pure_elim'=>Hm.
-    assert (is_Some (m2 !! i)) as [x2 Hm2].
-    { apply Hm. by econstructor. }
-    apply wand_intro_r. rewrite -(exist_intro x2).
-    rewrite /big_sepM2 (big_sepM_lookup _ _ i (x1,x2));
-      last by rewrite map_lookup_zip_with Hm1 Hm2.
-    rewrite pure_True// sep_elim_r.
-    apply and_intro=>//. by apply pure_intro.
+    intros Hm1. rewrite big_sepM2_delete_l //.
+    f_equiv=> x2. by rewrite sep_elim_l.
   Qed.
-
-  Lemma big_sepM2_lookup_2 Φ m1 m2 i x2 `{!∀ x1, Absorbing (Φ i x1 x2)} :
+  Lemma big_sepM2_lookup_r Φ m1 m2 i x2 `{!∀ x1, Absorbing (Φ i x1 x2)} :
     m2 !! i = Some x2 →
     ([∗ map] k↦y1;y2 ∈ m1;m2, Φ k y1 y2)
     ⊢ ∃ x1, ⌜m1 !! i = Some x1⌝ ∧ Φ i x1 x2.
   Proof.
-    intros Hm2. rewrite big_sepM2_eq /big_sepM2_def.
-    rewrite persistent_and_sep_1.
-    apply wand_elim_l'. apply pure_elim'=>Hm.
-    assert (is_Some (m1 !! i)) as [x1 Hm1].
-    { apply Hm. by econstructor. }
-    apply wand_intro_r. rewrite -(exist_intro x1).
-    rewrite /big_sepM2 (big_sepM_lookup _ _ i (x1,x2));
-      last by rewrite map_lookup_zip_with Hm1 Hm2.
-    rewrite pure_True// sep_elim_r.
-    apply and_intro=>//. by apply pure_intro.
+    intros Hm2. rewrite big_sepM2_delete_r //.
+    f_equiv=> x1. by rewrite sep_elim_l.
   Qed.
 
   Lemma big_sepM2_singleton Φ i x1 x2 :