Goal:
  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  a : A
  l : list A
  b : B
  l' : list B
  IHl : ∀ (n : nat) (l' : list B), #|l| = #|l'| → All2i R n l l'
  ============================
   (S #|l| = S #|l'| → All2i R n (a :: l) (b :: l'))


DEBUG:Going to execute:
<coq-core.plugins.ltac::discriminate@0>

Goals:
  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  ============================
   (0 = 0 → All2i R n [] [])

  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  a : A
  l : list A
  b : B
  l' : list B
  IHl : ∀ (n : nat) (l' : list B), #|l| = #|l'| → All2i R n l l'
  ============================
   (S #|l| = S #|l'| → All2i R n (a :: l) (b :: l'))


DEBUG:Going to execute:
intros
Level 0: Backtrace:

No primitive equality found.
Level 0: Backtrace:

No primitive equality found.

Goals:
  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  H0 : 0 = 0
  ============================
   (All2i R n [] [])

  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  a : A
  l : list A
  b : B
  l' : list B
  IHl : ∀ (n : nat) (l' : list B), #|l| = #|l'| → All2i R n l l'
  H0 : S #|l| = S #|l'|
  ============================
   (All2i R n (a :: l) (b :: l'))


DEBUG:Going to execute:
constructor

Goals:
  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  H0 : 0 = 0
  ============================
   (All2i R n [] [])

  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  a : A
  l : list A
  b : B
  l' : list B
  IHl : ∀ (n : nat) (l' : list B), #|l| = #|l'| → All2i R n l l'
  H0 : S #|l| = S #|l'|
  ============================
   (All2i R n (a :: l) (b :: l'))


DEBUG:Going to execute:
<coq-core.plugins.ltac::constructor@0>

Goals:
  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  a : A
  l : list A
  b : B
  l' : list B
  IHl : ∀ (n : nat) (l' : list B), #|l| = #|l'| → All2i R n l l'
  H0 : S #|l| = S #|l'|
  ============================
   (R n a b)

  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  a : A
  l : list A
  b : B
  l' : list B
  IHl : ∀ (n : nat) (l' : list B), #|l| = #|l'| → All2i R n l l'
  H0 : S #|l| = S #|l'|
  ============================
   (All2i R (S n) l l')


DEBUG:Going to execute:
auto

Goals:
  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  a : A
  l : list A
  b : B
  l' : list B
  IHl : ∀ (n : nat) (l' : list B), #|l| = #|l'| → All2i R n l l'
  H0 : S #|l| = S #|l'|
  ============================
   (R n a b)

  
  A : Type
  B : Type
  R : nat → A → B → Type
  H : ∀ (n : nat) (x : A) (y : B), R n x y
  n : nat
  a : A
  l : list A
  b : B
  l' : list B
  IHl : ∀ (n : nat) (l' : list B), #|l| = #|l'| → All2i R n l l'
  H0 : S #|l| = S #|l'|
  ============================
   (All2i R (S n) l l')


DEBUG:Going to execute:
<coq-core.plugins.ltac::auto@0> $1 $2 $3