Goal:
  
  A : Type
  B : Type
  R : A → B → Type
  n : nat
  x : A
  y : B
  l : list A
  l' : list B
  r : R x y
  h : All2 R l l'
  IHh : ∀ n : nat, All2 R (firstn n l) (firstn n l')
  ============================
   (All2 R (firstn (S n) (x :: l)) (firstn (S n) (y :: l')))


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

Goals:
  
  A : Type
  B : Type
  R : A → B → Type
  n : nat
  x : A
  y : B
  l : list A
  l' : list B
  r : R x y
  h : All2 R l l'
  IHh : ∀ n : nat, All2 R (firstn n l) (firstn n l')
  ============================
   (R x y)

  
  A : Type
  B : Type
  R : A → B → Type
  n : nat
  x : A
  y : B
  l : list A
  l' : list B
  r : R x y
  h : All2 R l l'
  IHh : ∀ n : nat, All2 R (firstn n l) (firstn n l')
  ============================
   (All2 R
      ((fix firstn (n : nat) (l : list A) {struct n} : list A :=
          match n with
          | 0 => []
          | S n0 =>
              match l with
              | [] => []
              | a :: l0 => a :: firstn n0 l0
              end
          end) n l)
      ((fix firstn (n : nat) (l : list B) {struct n} : list B :=
          match n with
          | 0 => []
          | S n0 =>
              match l with
              | [] => []
              | a :: l0 => a :: firstn n0 l0
              end
          end) n l'))


DEBUG:Going to execute:
PTRDEBUGTACeauto

Goals:
  
  A : Type
  B : Type
  R : A → B → Type
  n : nat
  x : A
  y : B
  l : list A
  l' : list B
  r : R x y
  h : All2 R l l'
  IHh : ∀ n : nat, All2 R (firstn n l) (firstn n l')
  ============================
   (R x y)

  
  A : Type
  B : Type
  R : A → B → Type
  n : nat
  x : A
  y : B
  l : list A
  l' : list B
  r : R x y
  h : All2 R l l'
  IHh : ∀ n : nat, All2 R (firstn n l) (firstn n l')
  ============================
   (All2 R
      ((fix firstn (n : nat) (l : list A) {struct n} : list A :=
          match n with
          | 0 => []
          | S n0 =>
              match l with
              | [] => []
              | a :: l0 => a :: firstn n0 l0
              end
          end) n l)
      ((fix firstn (n : nat) (l : list B) {struct n} : list B :=
          match n with
          | 0 => []
          | S n0 =>
              match l with
              | [] => []
              | a :: l0 => a :: firstn n0 l0
              end
          end) n l'))


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