Local Notation Forall := (@Forall A P).

(* Specifications: *)
Lemma Forall_inv : forall (a:A) l, Forall (a :: l) -> P a.
Theorem Forall_inv_tail : forall (a:A) l, Forall (a :: l) -> Forall l.
Lemma Forall_nil_iff : Forall [] <-> True.
Lemma Forall_cons_iff : forall (a:A) l, Forall (a :: l) <-> P a /\ Forall l.
Lemma Forall_forall (l:list A):
Forall l <-> (forall x, In x l -> P x).
Lemma Forall_nth l :
Forall l <-> forall i d, i < length l -> P (nth i l d).
Lemma Forall_app l1 l2 :
Forall (l1 ++ l2) <-> Forall l1 /\ Forall l2.
Lemma Forall_elt a l1 l2 : Forall (l1 ++ a :: l2) -> P a.
Lemma Forall_rev l : Forall l -> Forall (rev l).
Lemma Forall_rect : forall (Q : list A -> Type),
Q [] -> (forall b l, P b -> Q (b :: l)) -> forall l, Forall l -> Q l.
Lemma Forall_dec :
(forall x:A, {P x} + { ~ P x }) ->
forall l:list A, {Forall l} + {~ Forall l}.
Lemma incl_Forall l1 l2 : incl l2 l1 -> Forall l1 -> Forall l2.
End One_predicate.