(** Checks that some member of a list is P *)
Fixpoint exlist (A : Set) (P : A -> Prop) (qlist : list A) {struct qlist} :
Prop :=
match qlist with
| Nil => False
| Cons m l => P m \/ exlist A P l
end.

(* Specifications: *)
Lemma exlist_dec :
forall (A : Set) (P : A -> Prop) (l : list A),
(forall x : A, P x \/ ~ P x) -> exlist A P l \/ ~ exlist A P l.