Goal:
  
  A : Type
  B : Type
  P : A → B → Type
  Q : nat → A → B → Type
  n : nat
  l : list A
  l' : list B
  ============================
   (All2 P l l'
    → All2i Q n l l'
      → All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) n l l')


DEBUG:Going to execute:
induction 2

Goals:
  
  A : Type
  B : Type
  P : A → B → Type
  Q : nat → A → B → Type
  X : All2 P [] []
  n : nat
  ============================
   (All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) n [] [])

  
  A : Type
  B : Type
  P : A → B → Type
  Q : nat → A → B → Type
  x : A
  y : B
  l : list A
  r : list B
  X : All2 P (x :: l) (y :: r)
  n : nat
  r0 : Q n x y
  X0 : All2i Q (S n) l r
  IHX0 : All2 P l r
         → All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) (S n) l r
  ============================
   (All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) n (x :: l) (y :: r))


DEBUG:Going to execute:
simpl

Goals:
  
  A : Type
  B : Type
  P : A → B → Type
  Q : nat → A → B → Type
  X : All2 P [] []
  n : nat
  ============================
   (All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) n [] [])

  
  A : Type
  B : Type
  P : A → B → Type
  Q : nat → A → B → Type
  x : A
  y : B
  l : list A
  r : list B
  X : All2 P (x :: l) (y :: r)
  n : nat
  r0 : Q n x y
  X0 : All2i Q (S n) l r
  IHX0 : All2 P l r
         → All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) (S n) l r
  ============================
   (All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) n (x :: l) (y :: r))


DEBUG:Going to execute:
intros

Goals:
  
  A : Type
  B : Type
  P : A → B → Type
  Q : nat → A → B → Type
  X : All2 P [] []
  n : nat
  ============================
   (All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) n [] [])

  
  A : Type
  B : Type
  P : A → B → Type
  Q : nat → A → B → Type
  x : A
  y : B
  l : list A
  r : list B
  X : All2 P (x :: l) (y :: r)
  n : nat
  r0 : Q n x y
  X0 : All2i Q (S n) l r
  IHX0 : All2 P l r
         → All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) (S n) l r
  ============================
   (All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) n (x :: l) (y :: r))


DEBUG:Going to execute:
constructor

Goals:
  
  A : Type
  B : Type
  P : A → B → Type
  Q : nat → A → B → Type
  X : All2 P [] []
  n : nat
  ============================
   (All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) n [] [])

  
  A : Type
  B : Type
  P : A → B → Type
  Q : nat → A → B → Type
  x : A
  y : B
  l : list A
  r : list B
  X : All2 P (x :: l) (y :: r)
  n : nat
  r0 : Q n x y
  X0 : All2i Q (S n) l r
  IHX0 : All2 P l r
         → All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) (S n) l r
  ============================
   (All2i (λ (i : nat) (x : A) (y : B), P x y × Q i x y) n (x :: l) (y :: r))


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