diff --git a/base_logic/big_op.v b/base_logic/big_op.v
index d09749fd9dd0b275dbd796611c7d5e414c253af1..67c73bcc7ac6aff64768b321a93ad554f4aa4cbf 100644
--- a/base_logic/big_op.v
+++ b/base_logic/big_op.v
@@ -526,6 +526,17 @@ Section gset.
       by rewrite !big_sepS_insert // IH pure_False // False_impl left_id.
   Qed.
 
+  Lemma big_sepS_filter_acc (P : A → Prop) `{∀ y, Decision (P y)} Φ X Y :
+    (∀ y, y ∈ Y → P y → y ∈ X) →
+    ([∗ set] y ∈ X, Φ y) -∗
+      ([∗ set] y ∈ Y, ⌜P y⌝ → Φ y) ∗
+      (([∗ set] y ∈ Y, ⌜P y⌝ → Φ y) -∗ [∗ set] y ∈ X, Φ y).
+  Proof.
+    intros ?. destruct (proj1 (subseteq_disjoint_union_L (filter P Y) X))
+      as (Z&->&?); first set_solver.
+    rewrite big_sepS_union // big_sepS_filter. by apply sep_mono_r, wand_intro_l.
+  Qed.
+
   Lemma big_sepS_sepS Φ Ψ X :
     ([∗ set] y ∈ X, Φ y ∗ Ψ y) ⊣⊢ ([∗ set] y ∈ X, Φ y) ∗ ([∗ set] y ∈ X, Ψ y).
   Proof. apply: big_opS_opS. Qed.