Inductive Forall2 : list A -> list B -> Prop :=
    | Forall2_nil : Forall2 [] []
    | Forall2_cons : forall x y l l',
      R x y -> Forall2 l l' -> Forall2 (x::l) (y::l').Inductive Forall2 : list A -> list B -> Prop :=
    | Forall2_nil : Forall2 [] []
    | Forall2_cons : forall x y l l',
      R x y -> Forall2 l l' -> Forall2 (x::l) (y::l').Inductive Forall2 : list A -> list B -> Prop :=
    | Forall2_nil : Forall2 [] []
    | Forall2_cons : forall x y l l',
      R x y -> Forall2 l l' -> Forall2 (x::l) (y::l').

(* Specifications: *)
#[deprecated(since = "8.18", use = Forall2_nil)] Theorem Forall2_refl : Forall2 [] [].
Theorem Forall2_cons_iff : forall x y l l', Forall2 (x :: l) (y :: l') <-> R x y /\ Forall2 l l'.
Theorem Forall2_length : forall l l', Forall2 l l' -> length l = length l'.
Theorem Forall2_app_inv_l : forall l1 l2 l', Forall2 (l1 ++ l2) l' -> exists l1' l2', Forall2 l1 l1' /\ Forall2 l2 l2' /\ l' = l1' ++ l2'.
Theorem Forall2_app_inv_r : forall l1' l2' l, Forall2 l (l1' ++ l2') -> exists l1 l2, Forall2 l1 l1' /\ Forall2 l2 l2' /\ l = l1 ++ l2.
Theorem Forall2_app : forall l1 l2 l1' l2', Forall2 l1 l1' -> Forall2 l2 l2' -> Forall2 (l1 ++ l2) (l1' ++ l2').
Theorem Forall_Exists_exists_Forall2 l1 l2 : Forall (fun a => Exists (R a) l2) l1 -> exists l2', Forall2 l1 l2' /\ incl l2' l2.
Lemma Forall2_impl (A B : Type) (R1 R2 : A -> B -> Prop) : (forall a b, R1 a b -> R2 a b) -> forall l1 l2, Forall2 R1 l1 l2 -> Forall2 R2 l1 l2.
Lemma Forall2_flip (A B : Type) (R : A -> B -> Prop) l1 l2 : Forall2 R l1 l2 -> Forall2 (fun b a => R a b) l2 l1.