Goal:
  
  A : Type
  P : A → A → Type
  a : A
  l : list A
  l' : list A
  r : A
  r' : A
  IHl : ∀ l' : list A, All2 P (l ++ [r]) (l' ++ [r']) → All2 P l l' × P r r'
  X : All2 P (a :: l ++ [r]) (l' ++ [r'])
  ============================
   (All2 P (a :: l) l' × P r r')


DEBUG:Going to execute:
destruct l'

Goals:
  
  A : Type
  P : A → A → Type
  a : A
  l : list A
  r : A
  r' : A
  IHl : ∀ l' : list A, All2 P (l ++ [r]) (l' ++ [r']) → All2 P l l' × P r r'
  X : All2 P (a :: l ++ [r]) ([] ++ [r'])
  ============================
   (All2 P (a :: l) [] × P r r')

  
  A : Type
  P : A → A → Type
  a : A
  l : list A
  a0 : A
  l' : list A
  r : A
  r' : A
  IHl : ∀ l' : list A, All2 P (l ++ [r]) (l' ++ [r']) → All2 P l l' × P r r'
  X : All2 P (a :: l ++ [r]) ((a0 :: l') ++ [r'])
  ============================
   (All2 P (a :: l) (a0 :: l') × P r r')


DEBUG:Going to execute:
inversion X
DEBUG LTAC Evaluated term: l'

Goals:
  
  A : Type
  P : A → A → Type
  a : A
  l : list A
  r : A
  r' : A
  IHl : ∀ l' : list A, All2 P (l ++ [r]) (l' ++ [r']) → All2 P l l' × P r r'
  X : All2 P (a :: l ++ [r]) ([] ++ [r'])
  x : A
  y : A
  l0 : list A
  l' : list A
  X0 : P a r'
  X1 : All2 P (l ++ [r]) []
  H0 : x = a
  H1 : l0 = l ++ [r]
  H : y = r'
  H3 : l' = []
  ============================
   (All2 P (a :: l) [] × P r r')

  
  A : Type
  P : A → A → Type
  a : A
  l : list A
  a0 : A
  l' : list A
  r : A
  r' : A
  IHl : ∀ l' : list A, All2 P (l ++ [r]) (l' ++ [r']) → All2 P l l' × P r r'
  X : All2 P (a :: l ++ [r]) ((a0 :: l') ++ [r'])
  x : A
  y : A
  l0 : list A
  l'0 : list A
  X0 : P a a0
  X1 : All2 P (l ++ [r]) (l' ++ [r'])
  H0 : x = a
  H1 : l0 = l ++ [r]
  H : y = a0
  H3 : l'0 = l' ++ [r']
  ============================
   (All2 P (a :: l) (a0 :: l') × P r r')


DEBUG:Going to execute:
subst

Goals:
  
  A : Type
  P : A → A → Type
  a : A
  l : list A
  r : A
  r' : A
  IHl : ∀ l' : list A, All2 P (l ++ [r]) (l' ++ [r']) → All2 P l l' × P r r'
  X : All2 P (a :: l ++ [r]) ([] ++ [r'])
  x : A
  y : A
  l0 : list A
  l' : list A
  X0 : P a r'
  X1 : All2 P (l ++ [r]) []
  H0 : x = a
  H1 : l0 = l ++ [r]
  H : y = r'
  H3 : l' = []
  ============================
   (All2 P (a :: l) [] × P r r')

  
  A : Type
  P : A → A → Type
  a : A
  l : list A
  a0 : A
  l' : list A
  r : A
  r' : A
  IHl : ∀ l' : list A, All2 P (l ++ [r]) (l' ++ [r']) → All2 P l l' × P r r'
  X : All2 P (a :: l ++ [r]) ((a0 :: l') ++ [r'])
  x : A
  y : A
  l0 : list A
  l'0 : list A
  X0 : P a a0
  X1 : All2 P (l ++ [r]) (l' ++ [r'])
  H0 : x = a
  H1 : l0 = l ++ [r]
  H : y = a0
  H3 : l'0 = l' ++ [r']
  ============================
   (All2 P (a :: l) (a0 :: l') × P r r')


DEBUG:Going to execute:
<coq-core.plugins.ltac::subst@1>