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


DEBUG:Going to execute:
induction 2

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

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


DEBUG:Going to execute:
simpl

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

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


DEBUG:Going to execute:
intros

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

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


DEBUG:Going to execute:
constructor

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

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


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