Goal:
  
  A : Type
  l1 : list A
  x : A
  y : A
  IHl1 : ∀ l2 : list A, l1 ++ [x] = l2 ++ [y] → l1 = l2 ∧ x = y
  a0 : A
  l2 : list A
  H : l1 = l2
  H0 : x = y
  ============================
   (a0 :: l1 = a0 :: l2 ∧ x = y)


DEBUG:Going to execute:
fun => <coq-core.plugins.ltac::split@0>

Goals:
  
  A : Type
  l1 : list A
  x : A
  y : A
  IHl1 : ∀ l2 : list A, l1 ++ [x] = l2 ++ [y] → l1 = l2 ∧ x = y
  a0 : A
  l2 : list A
  H : l1 = l2
  H0 : x = y
  ============================
   (a0 :: l1 = a0 :: l2)

  
  A : Type
  l1 : list A
  x : A
  y : A
  IHl1 : ∀ l2 : list A, l1 ++ [x] = l2 ++ [y] → l1 = l2 ∧ x = y
  a0 : A
  l2 : list A
  H : l1 = l2
  H0 : x = y
  ============================
   (x = y)


DEBUG:Going to execute:
congruence

Goals:
  
  A : Type
  l1 : list A
  x : A
  y : A
  IHl1 : ∀ l2 : list A, l1 ++ [x] = l2 ++ [y] → l1 = l2 ∧ x = y
  a0 : A
  l2 : list A
  H : l1 = l2
  H0 : x = y
  ============================
   (a0 :: l1 = a0 :: l2)

  
  A : Type
  l1 : list A
  x : A
  y : A
  IHl1 : ∀ l2 : list A, l1 ++ [x] = l2 ++ [y] → l1 = l2 ∧ x = y
  a0 : A
  l2 : list A
  H : l1 = l2
  H0 : x = y
  ============================
   (x = y)


DEBUG:Going to execute:
<coq-core.plugins.cc::cc@0> $1