Goal:
  
  A : Type
  B : Type
  R : A → B → Prop
  l : list A
  H : ∀ (x : A) (y : B), R x y
  ============================
   (∀ l' : list B, #|l| = #|l'| → Forall2 R l l')


DEBUG:Going to execute:
induction l

Goals:
    A : Type  B : Type  R : A → B → Prop  H : ∀ (x : A) (y : B), R x y
  ============================
   (∀ l' : list B, #|[]| = #|l'| → Forall2 R [] l')

  
  A : Type
  B : Type
  R : A → B → Prop
  a : A
  l : list A
  H : ∀ (x : A) (y : B), R x y
  IHl : ∀ l' : list B, #|l| = #|l'| → Forall2 R l l'
  ============================
   (∀ l' : list B, #|a :: l| = #|l'| → Forall2 R (a :: l) l')


DEBUG:Going to execute:
simpl
DEBUG LTAC Evaluated term: l

Goals:
    A : Type  B : Type  R : A → B → Prop  H : ∀ (x : A) (y : B), R x y
  ============================
   (∀ l' : list B, 0 = #|l'| → Forall2 R [] l')

  
  A : Type
  B : Type
  R : A → B → Prop
  a : A
  l : list A
  H : ∀ (x : A) (y : B), R x y
  IHl : ∀ l' : list B, #|l| = #|l'| → Forall2 R l l'
  ============================
   (∀ l' : list B, S #|l| = #|l'| → Forall2 R (a :: l) l')


DEBUG:Going to execute:
intros [] e

Goals:
  
  A : Type
  B : Type
  R : A → B → Prop
  H : ∀ (x : A) (y : B), R x y
  e : 0 = #|[]|
  ============================
   (Forall2 R [] [])

  
  A : Type
  B : Type
  R : A → B → Prop
  H : ∀ (x : A) (y : B), R x y
  b : B
  l : list B
  e : 0 = #|b :: l|
  ============================
   (Forall2 R [] (b :: l))

  
  A : Type
  B : Type
  R : A → B → Prop
  a : A
  l : list A
  H : ∀ (x : A) (y : B), R x y
  IHl : ∀ l' : list B, #|l| = #|l'| → Forall2 R l l'
  e : S #|l| = #|[]|
  ============================
   (Forall2 R (a :: l) [])

  
  A : Type
  B : Type
  R : A → B → Prop
  a : A
  l : list A
  H : ∀ (x : A) (y : B), R x y
  IHl : ∀ l' : list B, #|l| = #|l'| → Forall2 R l l'
  b : B
  l0 : list B
  e : S #|l| = #|b :: l0|
  ============================
   (Forall2 R (a :: l) (b :: l0))


DEBUG:Going to execute:
try discriminate e