(** 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.

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.