diff --git a/tests/sets.v b/tests/sets.v
index 9aea1a62b0bda62f4f1c373be747ed670ff9ba38..9939a187a5e4343c356c9f4b6363ac1e8e401082 100644
--- a/tests/sets.v
+++ b/tests/sets.v
@@ -2,3 +2,8 @@ From stdpp Require Import sets.
 
 Lemma foo `{Set_ A C} (x : A) (X Y : C) : x ∈ X ∩ Y → x ∈ X.
 Proof. intros Hx. set_unfold in Hx. tauto. Qed.
+
+(** Test [set_unfold_list_bind]. *)
+Lemma elem_of_list_bind_again {A B} (x : B) (l : list A) f :
+  x ∈ l ≫= f ↔ ∃ y, x ∈ f y ∧ y ∈ l.
+Proof. set_solver. Qed.
diff --git a/theories/sets.v b/theories/sets.v
index 6152085c67f807e3e25f05a3ea7ae89012c5ac17..ec22d0c24c1029d5c37ba618675c235d838d95e3 100644
--- a/theories/sets.v
+++ b/theories/sets.v
@@ -308,6 +308,10 @@ Section set_unfold_list.
     SetUnfoldElemOf x l P → SetUnfoldElemOf x (rotate n l) P.
   Proof. constructor. by rewrite elem_of_rotate, (set_unfold_elem_of x l P). Qed.
 
+  Global Instance set_unfold_list_bind {B} (f : A → list B) l P Q y :
+    (∀ x, SetUnfoldElemOf x l (P x)) → (∀ x, SetUnfoldElemOf y (f x) (Q x)) →
+    SetUnfoldElemOf y (l ≫= f) (∃ x, Q x ∧ P x).
+  Proof. constructor. rewrite elem_of_list_bind. naive_solver. Qed.
 End set_unfold_list.
 
 Tactic Notation "set_unfold" :=