Definition in_eq: forall {A: Type} (a:A) l, In a (a::l) :=
fun A a l => or_introl eq_refl.
Definition Forall_forall: forall {A : Type} (P : A -> Prop) (l : list A),
Forall P l <-> (forall x : A, In x l -> P x)   :=
fun (A : Type) (P : A -> Prop) (l : list A) =>
conj
(fun H : Forall P l =>
Forall_ind (fun l0 : list A => forall x : A, In x l0 -> P x)
(fun (x : A) (H0 : In x nil) => False_ind (P x) H0)
(fun (x : A) (l0 : list A) (H0 : P x) (_ : Forall P l0)
(IHForall : forall x0 : A, In x0 l0 -> P x0) (x0 : A)
(H2 : In x0 (x :: l0)) =>
or_ind
(fun H3 : x = x0 =>
eq_ind_r (fun x1 : A => P x1 -> P x0) (fun H4 : P x0 => H4) H3 H0)
(fun H3 : In x0 l0 =>
(fun H4 : In x0 l0 -> P x0 => (fun H5 : P x0 => H5) (H4 H3))
(IHForall x0)) H2) H)
(list_ind
(fun l0 : list A => (forall x : A, In x l0 -> P x) -> Forall P l0)
(fun _ : forall x : A, In x nil -> P x => Forall_nil P)
(fun (a : A) (l0 : list A)
(IHl : (forall x : A, In x l0 -> P x) -> Forall P l0)
(H : forall x : A, In x (a :: l0) -> P x) =>
(fun H0 : forall x : A, In x l0 -> P x =>
(fun H1 : forall x : A, In x l0 -> P x =>
(fun H2 : Forall P l0 =>
(fun H3 : A =>
(fun X : A =>
(fun H4 : In X (a :: l0) -> P X =>
(fun (_ : a = X -> P X)
(_ : (fix In (a0 : A) (l1 : list A) {struct l1} : Prop :=
match l1 with
| nil => False
| b :: m => b = a0 \/ In a0 m
end) X l0 -> P X) =>
Forall_cons a (H a (in_eq a l0)) H2)
(fun H5 : a = X => H4 (or_introl H5))
(fun
H5 : (fix In (a0 : A) (l1 : list A) {struct l1} : Prop :=
match l1 with
| nil => False
| b :: m => b = a0 \/ In a0 m
end) X l0 => H4 (or_intror H5))) (H X)) H3) a)
(IHl H1)) H0)
(fun (x : A) (H0 : In x l0) =>
(fun H1 : In x (a :: l0) -> P x =>
(fun (_ : a = x -> P x)
(H3 : (fix In (a0 : A) (l1 : list A) {struct l1} : Prop :=
match l1 with
| nil => False
| b :: m => b = a0 \/ In a0 m
end) x l0 -> P x) => (fun H4 : P x => H4) (H3 H0))
(fun H2 : a = x => H1 (or_introl H2))
(fun
H2 : (fix In (a0 : A) (l1 : list A) {struct l1} : Prop :=
match l1 with
| nil => False
| b :: m => b = a0 \/ In a0 m
end) x l0 => H1 (or_intror H2))) (H x))) l).

Lemma Forall_forall1: forall {A : Type} (P : A -> Prop) (l : list A),
Forall P l -> (forall x : A, In x l -> P x).