Goal:
  
  A : Type
  B : Type
  P : A → B → Type
  l1 : list A
  l2 : list A
  r1 : list B
  r2 : list B
  e : #|l1| = #|r1|
  w1 : list B
  w2 : list B
  e1 : r1 ++ r2 = w1 ++ w2
  h1 : All2 P l1 w1
  h2 : All2 P l2 w2
  ============================
   (All2 P l1 r1 × All2 P l2 r2)


DEBUG:Going to execute:
apply app_inj_length_l in e1 as (->, ->)
DEBUG LTAC Evaluated term: All2_app_inv_l

Goals:
  
  A : Type
  B : Type
  P : A → B → Type
  l1 : list A
  l2 : list A
  w1 : list B
  e : #|l1| = #|w1|
  w2 : list B
  h1 : All2 P l1 w1
  h2 : All2 P l2 w2
  ============================
   (All2 P l1 w1 × All2 P l2 w2)

  
  A : Type
  B : Type
  P : A → B → Type
  l1 : list A
  l2 : list A
  r1 : list B
  r2 : list B
  e : #|l1| = #|r1|
  w1 : list B
  w2 : list B
  e1 : r1 ++ r2 = w1 ++ w2
  h1 : All2 P l1 w1
  h2 : All2 P l2 w2
  ============================
   (#|r1| = #|w1|)


DEBUG:Going to execute:
auto
DEBUG LTAC Evaluated term: app_inj_length_l

Goals:
  
  A : Type
  B : Type
  P : A → B → Type
  l1 : list A
  l2 : list A
  w1 : list B
  e : #|l1| = #|w1|
  w2 : list B
  h1 : All2 P l1 w1
  h2 : All2 P l2 w2
  ============================
   (All2 P l1 w1 × All2 P l2 w2)

  
  A : Type
  B : Type
  P : A → B → Type
  l1 : list A
  l2 : list A
  r1 : list B
  r2 : list B
  e : #|l1| = #|r1|
  w1 : list B
  w2 : list B
  e1 : r1 ++ r2 = w1 ++ w2
  h1 : All2 P l1 w1
  h2 : All2 P l2 w2
  ============================
   (#|r1| = #|w1|)


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