diff --git a/theories/fin_collections.v b/theories/fin_collections.v
index 3683caf81fe9ecf9207976648f6aade74ccd901c..9205563962c6769e78051cf04109df222f5633a5 100644
--- a/theories/fin_collections.v
+++ b/theories/fin_collections.v
@@ -249,18 +249,38 @@ Section filter.
 End filter.
 
 (** * Decision procedures *)
-Global Instance set_Forall_dec `(P : A → Prop)
-  `{∀ x, Decision (P x)} X : Decision (set_Forall P X) | 100.
+Lemma set_Forall_elements P X : set_Forall P X ↔ Forall P (elements X).
+Proof. rewrite Forall_forall. by setoid_rewrite elem_of_elements. Qed.
+Lemma set_Exists_elements P X : set_Exists P X ↔ Exists P (elements X).
+Proof. rewrite Exists_exists. by setoid_rewrite elem_of_elements. Qed.
+
+Lemma set_Forall_Exists_dec {P Q : A → Prop} (dec : ∀ x, {P x} + {Q x}) X :
+  {set_Forall P X} + {set_Exists Q X}.
+Proof.
+ refine (cast_if (Forall_Exists_dec dec (elements X)));
+   [by apply set_Forall_elements|by apply set_Exists_elements].
+Defined.
+
+Lemma not_set_Forall_Exists P `{dec : ∀ x, Decision (P x)} X :
+  ¬set_Forall P X → set_Exists (not ∘ P) X.
+Proof. intro. by destruct (set_Forall_Exists_dec dec X). Qed.
+Lemma not_set_Exists_Forall P `{dec : ∀ x, Decision (P x)} X :
+  ¬set_Exists P X → set_Forall (not ∘ P) X.
+Proof.
+  by destruct (@set_Forall_Exists_dec
+    (not ∘ P) _ (λ x, swap_if (decide (P x))) X).
+Qed.
+
+Global Instance set_Forall_dec (P : A → Prop) `{∀ x, Decision (P x)} X :
+  Decision (set_Forall P X) | 100.
 Proof.
-  refine (cast_if (decide (Forall P (elements X))));
-    abstract (unfold set_Forall; setoid_rewrite <-elem_of_elements;
-      by rewrite <-Forall_forall).
+ refine (cast_if (decide (Forall P (elements X))));
+   by rewrite set_Forall_elements.
 Defined.
 Global Instance set_Exists_dec `(P : A → Prop) `{∀ x, Decision (P x)} X :
   Decision (set_Exists P X) | 100.
 Proof.
-  refine (cast_if (decide (Exists P (elements X))));
-    abstract (unfold set_Exists; setoid_rewrite <-elem_of_elements;
-      by rewrite <-Exists_exists).
+ refine (cast_if (decide (Exists P (elements X))));
+   by rewrite set_Exists_elements.
 Defined.
 End fin_collection.