Inductive Exists : list A -> Prop :=
      | Exists_cons_hd : forall x l, P x -> Exists (x::l)
      | Exists_cons_tl : forall x l, Exists l -> Exists (x::l).Inductive Exists : list A -> Prop :=
      | Exists_cons_hd : forall x l, P x -> Exists (x::l)
      | Exists_cons_tl : forall x l, Exists l -> Exists (x::l).Inductive Exists : list A -> Prop :=
      | Exists_cons_hd : forall x l, P x -> Exists (x::l)
      | Exists_cons_tl : forall x l, Exists l -> Exists (x::l).

(* Specifications: *)
Lemma Exists_exists (l:list A) : Exists l <-> (exists x, In x l /\ P x).
Lemma Exists_nth l : Exists l <-> exists i d, i < length l /\ P (nth i l d).
Lemma Exists_nil : Exists [] <-> False.
Lemma Exists_cons x l: Exists (x::l) <-> P x \/ Exists l.
Lemma Exists_app l1 l2 : Exists (l1 ++ l2) <-> Exists l1 \/ Exists l2.
Lemma Exists_rev l : Exists l -> Exists (rev l).
Lemma Exists_dec l: (forall x:A, {P x} + { ~ P x }) -> {Exists l} + {~ Exists l}.
Lemma Exists_fold_right l : Exists l <-> fold_right (fun x => or (P x)) False l.
Lemma incl_Exists l1 l2 : incl l1 l2 -> Exists l1 -> Exists l2.