diff --git a/opam b/opam
index 575e8b0ee7caaf2e2228fe2a994a566dbdb8bb28..36a4de1eed300e2040ed8bda8507d3f20184db5d 100644
--- a/opam
+++ b/opam
@@ -11,7 +11,7 @@ synopsis: "Iris is a Higher-Order Concurrent Separation Logic Framework with sup
 
 depends: [
   "coq" { (>= "8.10.2" & < "8.13~") | (= "dev") }
-  "coq-stdpp" { (= "dev.2020-09-15.0.f4a2763b") | (= "dev") }
+  "coq-stdpp" { (= "dev.2020-09-29.3.e80f1433") | (= "dev") }
 ]
 
 build: [make "-j%{jobs}%"]
diff --git a/theories/algebra/big_op.v b/theories/algebra/big_op.v
index 901e4159ec444c1cd9a77db2c4df478abdef80b1..e1207f7822f5bc88567181a438966faefb080204 100644
--- a/theories/algebra/big_op.v
+++ b/theories/algebra/big_op.v
@@ -192,6 +192,13 @@ Section list.
     ([^o list] k↦y ∈ h <$> l, f k y) ≡ ([^o list] k↦y ∈ l, f k (h y)).
   Proof. revert f. induction l as [|x l IH]=> f; csimpl=> //. by rewrite IH. Qed.
 
+  Lemma big_opL_omap {B} (h : A → option B) (f : B → M) l :
+    ([^o list] y ∈ omap h l, f y) ≡ ([^o list] y ∈ l, from_option f monoid_unit (h y)).
+  Proof.
+    revert f. induction l as [|x l IH]=> f //; csimpl.
+    case_match; csimpl; by rewrite IH // left_id.
+  Qed.
+
   Lemma big_opL_op f g l :
     ([^o list] k↦x ∈ l, f k x `o` g k x)
     ≡ ([^o list] k↦x ∈ l, f k x) `o` ([^o list] k↦x ∈ l, g k x).
@@ -323,6 +330,18 @@ Section gmap.
     by apply big_opL_proper=> ? [??].
   Qed.
 
+  Lemma big_opM_omap {B} (h : A → option B) (f : K → B → M) m :
+    ([^o map] k↦y ∈ omap h m, f k y) ≡ [^o map] k↦y ∈ m, from_option (f k) monoid_unit (h y).
+  Proof.
+    revert f. induction m as [|i x m Hmi IH] using map_ind=> f.
+    { by rewrite omap_empty !big_opM_empty. }
+    assert (omap h m !! i = None) by (by rewrite lookup_omap Hmi).
+    destruct (h x) as [y|] eqn:Hhx.
+    - by rewrite (omap_insert _ _ _ _ y) // !big_opM_insert // IH Hhx.
+    - rewrite omap_insert_None // delete_notin // big_opM_insert //.
+      by rewrite Hhx /= left_id.
+  Qed.
+
   Lemma big_opM_insert_delete `{Countable K} {B} (f : K → B → M) (m : gmap K B) i x :
     ([^o map] k↦y ∈ <[i:=x]> m, f k y) ≡ f i x `o` [^o map] k↦y ∈ delete i m, f k y.
   Proof.
diff --git a/theories/bi/big_op.v b/theories/bi/big_op.v
index 1d0fd6e21ef8b2f8c331d1858de172afdf7e7ab7..60a10ee1ba47eab16fc0274a7db3de2c947f1a90 100644
--- a/theories/bi/big_op.v
+++ b/theories/bi/big_op.v
@@ -158,6 +158,10 @@ Section sep_list.
     ([∗ list] k↦y ∈ f <$> l, Φ k y) ⊣⊢ ([∗ list] k↦y ∈ l, Φ k (f y)).
   Proof. by rewrite big_opL_fmap. Qed.
 
+  Lemma big_sepL_omap {B} (f : A → option B) (Φ : B → PROP) l :
+    ([∗ list] y ∈ omap f l, Φ y) ⊣⊢ ([∗ list] y ∈ l, from_option Φ emp (f y)).
+  Proof. by rewrite big_opL_omap. Qed.
+
   Lemma big_sepL_bind {B} (f : A → list B) (Φ : B → PROP) l :
     ([∗ list] y ∈ l ≫= f, Φ y) ⊣⊢ ([∗ list] x ∈ l, [∗ list] y ∈ f x, Φ y).
   Proof. by rewrite big_opL_bind. Qed.
@@ -513,6 +517,15 @@ Section sep_list2.
     ([∗ list] y1;y2 ∈ reverse l1;reverse l2, Φ y1 y2) ⊣⊢ ([∗ list] y1;y2 ∈ l1;l2, Φ y1 y2).
   Proof. apply (anti_symm _); by rewrite big_sepL2_reverse_2 ?reverse_involutive. Qed.
 
+  Lemma big_sepL2_replicate_l l x Φ n :
+    length l = n →
+    ([∗ list] k↦x1;x2 ∈ replicate n x; l, Φ k x1 x2) ⊣⊢ [∗ list] k↦x2 ∈ l, Φ k x x2.
+  Proof. intros <-. revert Φ. induction l as [|y l IH]=> //= Φ. by rewrite IH. Qed.
+  Lemma big_sepL2_replicate_r l x Φ n :
+    length l = n →
+    ([∗ list] k↦x1;x2 ∈ l;replicate n x, Φ k x1 x2) ⊣⊢ [∗ list] k↦x1 ∈ l, Φ k x1 x.
+  Proof. intros <-. revert Φ. induction l as [|y l IH]=> //= Φ. by rewrite IH. Qed.
+
   Lemma big_sepL2_sep Φ Ψ l1 l2 :
     ([∗ list] k↦y1;y2 ∈ l1;l2, Φ k y1 y2 ∗ Ψ k y1 y2)
     ⊣⊢ ([∗ list] k↦y1;y2 ∈ l1;l2, Φ k y1 y2) ∗ ([∗ list] k↦y1;y2 ∈ l1;l2, Ψ k y1 y2).
@@ -903,6 +916,10 @@ Section map.
     ([∗ map] k↦y ∈ f <$> m, Φ k y) ⊣⊢ ([∗ map] k↦y ∈ m, Φ k (f y)).
   Proof. by rewrite big_opM_fmap. Qed.
 
+  Lemma big_sepM_omap {B} (f : A → option B) (Φ : K → B → PROP) m :
+    ([∗ map] k↦y ∈ omap f m, Φ k y) ⊣⊢ ([∗ map] k↦y ∈ m, from_option (Φ k) emp (f y)).
+  Proof. by rewrite big_opM_omap. Qed.
+
   Lemma big_sepM_insert_override Φ m i x x' :
     m !! i = Some x → (Φ i x ⊣⊢ Φ i x') →
     ([∗ map] k↦y ∈ <[i:=x']> m, Φ k y) ⊣⊢ ([∗ map] k↦y ∈ m, Φ k y).
diff --git a/theories/bi/updates.v b/theories/bi/updates.v
index 5c87a174db178fd8d35f99fd002d80e505b015ba..c3f4c1cd646726ef8f95490907f1ac40b9d8f4c3 100644
--- a/theories/bi/updates.v
+++ b/theories/bi/updates.v
@@ -332,6 +332,13 @@ Section fupd_derived.
   Lemma big_sepL_fupd {A} E (Φ : nat → A → PROP) l :
     ([∗ list] k↦x ∈ l, |={E}=> Φ k x) ={E}=∗ [∗ list] k↦x ∈ l, Φ k x.
   Proof. by rewrite (big_opL_commute _). Qed.
+  Lemma big_sepL2_fupd {A B} E (Φ : nat → A → B → PROP) l1 l2 :
+    ([∗ list] k↦x;y ∈ l1;l2, |={E}=> Φ k x y) ={E}=∗ [∗ list] k↦x;y ∈ l1;l2, Φ k x y.
+  Proof.
+    rewrite !big_sepL2_alt !persistent_and_affinely_sep_l.
+    etrans; [| by apply fupd_frame_l]. apply sep_mono_r. apply big_sepL_fupd.
+  Qed.
+
   Lemma big_sepM_fupd `{Countable K} {A} E (Φ : K → A → PROP) m :
     ([∗ map] k↦x ∈ m, |={E}=> Φ k x) ={E}=∗ [∗ map] k↦x ∈ m, Φ k x.
   Proof. by rewrite (big_opM_commute _). Qed.