End Lemmas.
End Compare.
Notation list_compare := list_compare.
Section Exists_Forall.
(** * Existential and universal predicates over lists *)
Variable A:Type.
Section One_predicate.
Variable P:A->Prop.
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).
#[local]
Hint Constructors Exists : core.

(* 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_rev l : Exists l -> Exists (rev l).
Lemma Exists_dec l:
(forall x:A, {P x} + { ~ P x }) ->
{Exists l} + {~ Exists l}.
Lemma incl_Exists l1 l2 : incl l1 l2 -> Exists l1 -> Exists l2.
#[local]
Hint Constructors Forall : core.