diff --git a/iris/bi/big_op.v b/iris/bi/big_op.v
index c1ffa2d5046b125058c2cb0f5cfd669022698096..fbd30a16ee7f95f85ef669d3e4875904f5adcd26 100644
--- a/iris/bi/big_op.v
+++ b/iris/bi/big_op.v
@@ -416,32 +416,36 @@ Section sep_list2.
     by rewrite IH -assoc.
   Qed.
   Lemma big_sepL2_app_inv Φ l1 l2 l1' l2' :
-    length l1 = length l1' →
+    length l1 = length l1' ∨ length l2 = length l2' →
     ([∗ list] k↦y1;y2 ∈ l1 ++ l2; l1' ++ l2', Φ k y1 y2) -∗
     ([∗ list] k↦y1;y2 ∈ l1; l1', Φ k y1 y2) ∗
     ([∗ list] k↦y1;y2 ∈ l2; l2', Φ (length l1 + k)%nat y1 y2).
   Proof.
-    revert Φ l1'. induction l1 as [|x1 l1 IH]=> Φ -[|x1' l1'] //= ?; simplify_eq.
+    revert Φ l1'. induction l1 as [|x1 l1 IH]=> Φ -[|x1' l1'] /= Hlen.
     - by rewrite left_id.
-    - by rewrite -assoc IH.
+    - destruct Hlen as [[=]|Hlen]. rewrite big_sepL2_length Hlen /= app_length.
+      apply pure_elim'; lia.
+    - destruct Hlen as [[=]|Hlen]. rewrite big_sepL2_length -Hlen /= app_length.
+      apply pure_elim'; lia.
+    - by rewrite -assoc IH; last lia.
+  Qed.
+  Lemma big_sepL2_app_same_length Φ l1 l2 l1' l2' :
+    length l1 = length l1' ∨ length l2 = length l2' →
+    ([∗ list] k↦y1;y2 ∈ l1 ++ l2; l1' ++ l2', Φ k y1 y2) ⊣⊢
+    ([∗ list] k↦y1;y2 ∈ l1; l1', Φ k y1 y2) ∗
+    ([∗ list] k↦y1;y2 ∈ l2; l2', Φ (length l1 + k)%nat y1 y2).
+  Proof.
+    intros. apply (anti_symm _).
+    - by apply big_sepL2_app_inv.
+    - apply wand_elim_l'. apply big_sepL2_app.
   Qed.
 
   Lemma big_sepL2_snoc Φ x1 x2 l1 l2 :
-    ([∗ list] k↦y1;y2 ∈ (l1 ++ [x1]);(l2 ++ [x2]), Φ k y1 y2) ⊣⊢
-    ([∗ list] k↦y1;y2 ∈ l1;l2, Φ k y1 y2) ∗ Φ (length l1) x1 x2.
-  Proof.
-    apply (anti_symm (⊢)); last first.
-    - apply wand_elim_l'. rewrite big_sepL2_app. apply wand_mono; last done.
-      rewrite big_sepL2_singleton Nat.add_0_r. done.
-    - rewrite big_sepL2_app_inv_l. apply exist_elim=>l2l. apply exist_elim=>l2r.
-      apply pure_elim_l=>Hl2.
-      apply (pure_elim (length [x1] = length l2r)).
-      { rewrite !big_sepL2_length sep_elim_r. done. }
-      simpl. destruct l2r as [? l2r|]; first done.
-      destruct l2r as [|]; last done. intros _.
-      apply app_inj_tail in Hl2 as [-> ->].
-      apply sep_mono_r.
-      rewrite big_sepL2_singleton Nat.add_0_r. done.
+    ([∗ list] k↦y1;y2 ∈ l1 ++ [x1]; l2 ++ [x2], Φ k y1 y2) ⊣⊢
+    ([∗ list] k↦y1;y2 ∈ l1; l2, Φ k y1 y2) ∗ Φ (length l1) x1 x2.
+  Proof.
+    rewrite big_sepL2_app_same_length; last by auto.
+    by rewrite big_sepL2_singleton Nat.add_0_r.
   Qed.
 
   (** The lemmas [big_sepL2_mono], [big_sepL2_ne] and [big_sepL2_proper] are more