diff --git a/algebra/cmra_big_op.v b/algebra/cmra_big_op.v
index 4c7517be32b5885a839e6d087469debf8dd796ea..ce7886b0101bbc392aca224563ceb35d583a370b 100644
--- a/algebra/cmra_big_op.v
+++ b/algebra/cmra_big_op.v
@@ -284,12 +284,12 @@ Section gmap.
     f_equiv; apply reflexive_eq, list_fmap_ext. by intros []. done.
   Qed.
 
-  Lemma big_opM_insert_override (f : K → M) m i x y :
-    m !! i = Some x →
-    ([⋅ map] k↦_ ∈ <[i:=y]> m, f k) ≡ ([⋅ map] k↦_ ∈ m, f k).
+  Lemma big_opM_insert_override (f : K → A → M) m i x x' :
+    m !! i = Some x → f i x ≡ f i x' →
+    ([⋅ map] k↦y ∈ <[i:=x']> m, f k y) ≡ ([⋅ map] k↦y ∈ m, f k y).
   Proof.
-    intros. rewrite -insert_delete big_opM_insert ?lookup_delete //.
-    by rewrite -big_opM_delete.
+    intros ? Hx. rewrite -insert_delete big_opM_insert ?lookup_delete //.
+    by rewrite -Hx -big_opM_delete.
   Qed.
 
   Lemma big_opM_fn_insert {B} (g : K → A → B → M) (f : K → B) m i (x : A) b :
@@ -307,12 +307,13 @@ Section gmap.
   Proof. apply (big_opM_fn_insert (λ _ _, id)). Qed.
 
   Lemma big_opM_opM f g m :
-       ([⋅ map] k↦x ∈ m, f k x ⋅ g k x)
+    ([⋅ map] k↦x ∈ m, f k x ⋅ g k x)
     ≡ ([⋅ map] k↦x ∈ m, f k x) ⋅ ([⋅ map] k↦x ∈ m, g k x).
   Proof.
-    rewrite /big_opM.
-    induction (map_to_list m) as [|[i x] l IH]; csimpl; rewrite ?right_id //.
-    by rewrite IH -!assoc (assoc _ (g _ _)) [(g _ _ â‹… _)]comm -!assoc.
+    induction m as [|i x ?? IH] using map_ind.
+    { by rewrite !big_opM_empty left_id. }
+    rewrite !big_opM_insert // IH.
+    by rewrite -!assoc (assoc _ (g _ _)) [(g _ _ â‹… _)]comm -!assoc.
   Qed.
 End gmap.
 
@@ -404,12 +405,19 @@ Section gset.
   Lemma big_opS_opS f g X :
     ([⋅ set] y ∈ X, f y ⋅ g y) ≡ ([⋅ set] y ∈ X, f y) ⋅ ([⋅ set] y ∈ X, g y).
   Proof.
-    rewrite /big_opS.
-    induction (elements X) as [|x l IH]; csimpl; first by rewrite ?right_id.
-    by rewrite IH -!assoc (assoc _ (g _)) [(g _ â‹… _)]comm -!assoc.
+    induction X as [|x X ? IH] using collection_ind_L.
+    { by rewrite !big_opS_empty left_id. }
+    rewrite !big_opS_insert // IH.
+    by rewrite -!assoc (assoc _ (g _)) [(g _ â‹… _)]comm -!assoc.
   Qed.
 End gset.
 
+Lemma big_opM_dom `{Countable K} {A} (f : K → M) (m : gmap K A) :
+  ([⋅ map] k↦_ ∈ m, f k) ≡ ([⋅ set] k ∈ dom _ m, f k).
+Proof.
+  induction m as [|i x ?? IH] using map_ind; [by rewrite dom_empty_L|].
+  by rewrite dom_insert_L big_opM_insert // IH big_opS_insert ?not_elem_of_dom.
+Qed.
 
 (** ** Big ops over finite msets *)
 Section gmultiset.
@@ -478,9 +486,10 @@ Section gmultiset.
   Lemma big_opMS_opMS f g X :
     ([⋅ mset] y ∈ X, f y ⋅ g y) ≡ ([⋅ mset] y ∈ X, f y) ⋅ ([⋅ mset] y ∈ X, g y).
   Proof.
-    rewrite /big_opMS.
-    induction (elements X) as [|x l IH]; csimpl; first by rewrite ?right_id.
-    by rewrite IH -!assoc (assoc _ (g _)) [(g _ â‹… _)]comm -!assoc.
+    induction X as [|x X IH] using gmultiset_ind.
+    { by rewrite !big_opMS_empty left_id. }
+    rewrite !big_opMS_union !big_opMS_singleton IH.
+    by rewrite -!assoc (assoc _ (g _)) [(g _ â‹… _)]comm -!assoc.
   Qed.
 End gmultiset.
 End big_op.
diff --git a/base_logic/big_op.v b/base_logic/big_op.v
index 67c73bcc7ac6aff64768b321a93ad554f4aa4cbf..639590a1e89e54a99a831b563cc3168483b4be2c 100644
--- a/base_logic/big_op.v
+++ b/base_logic/big_op.v
@@ -366,11 +366,31 @@ Section gmap.
     ([∗ map] k↦y ∈ f <$> m, Φ k y) ⊣⊢ ([∗ map] k↦y ∈ m, Φ k (f y)).
   Proof. by rewrite big_opM_fmap. Qed.
 
-  Lemma big_sepM_insert_override (Φ : K → uPred M) m i x y :
-    m !! i = Some x →
-    ([∗ map] k↦_ ∈ <[i:=y]> m, Φ k) ⊣⊢ ([∗ map] k↦_ ∈ m, Φ k).
+  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).
   Proof. apply: big_opM_insert_override. Qed.
 
+  Lemma big_sepM_insert_override_1 Φ m i x x' :
+    m !! i = Some x →
+    ([∗ map] k↦y ∈ <[i:=x']> m, Φ k y) ⊢
+      (Φ i x' -∗ Φ i x) -∗ ([∗ map] k↦y ∈ m, Φ k y).
+  Proof.
+    intros ?. apply wand_intro_l.
+    rewrite -insert_delete big_sepM_insert ?lookup_delete //.
+    by rewrite assoc wand_elim_l -big_sepM_delete.
+  Qed.
+
+  Lemma big_sepM_insert_override_2 Φ m i x x' :
+    m !! i = Some x →
+    ([∗ map] k↦y ∈ m, Φ k y) ⊢
+      (Φ i x -∗ Φ i x') -∗ ([∗ map] k↦y ∈ <[i:=x']> m, Φ k y).
+  Proof.
+    intros ?. apply wand_intro_l.
+    rewrite {1}big_sepM_delete //; rewrite assoc wand_elim_l.
+    rewrite -insert_delete big_sepM_insert ?lookup_delete //.
+  Qed.
+
   Lemma big_sepM_fn_insert {B} (Ψ : K → A → B → uPred M) (f : K → B) m i x b :
     m !! i = None →
        ([∗ map] k↦y ∈ <[i:=x]> m, Ψ k y (<[i:=b]> f k))
@@ -594,6 +614,10 @@ Section gset.
   Proof. rewrite /big_opS. apply _. Qed.
 End gset.
 
+Lemma big_sepM_dom `{Countable K} {A} (Φ : K → uPred M) (m : gmap K A) :
+  ([∗ map] k↦_ ∈ m, Φ k) ⊣⊢ ([∗ set] k ∈ dom _ m, Φ k).
+Proof. apply: big_opM_dom. Qed.
+
 
 (** ** Big ops over finite multisets *)
 Section gmultiset.
diff --git a/base_logic/lib/boxes.v b/base_logic/lib/boxes.v
index f2794751628968d14aa4a828f99fc4fa4adbde8c..8e53d5347f5ac51c7facd30edee618d74dd413bd 100644
--- a/base_logic/lib/boxes.v
+++ b/base_logic/lib/boxes.v
@@ -29,7 +29,7 @@ Section box_defs.
 
   Definition box (f : gmap slice_name bool) (P : iProp Σ) : iProp Σ :=
     (∃ Φ : slice_name → iProp Σ,
-      ▷ (P ≡ [∗ map] γ ↦ b ∈ f, Φ γ) ∗
+      ▷ (P ≡ [∗ map] γ ↦ _ ∈ f, Φ γ) ∗
       [∗ map] γ ↦ b ∈ f, box_own_auth γ (◯ Excl' b) ∗ box_own_prop γ (Φ γ) ∗
                          inv N (slice_inv γ (Φ γ)))%I.
 End box_defs.