Goal:
    A : Type  B : Type  f : nat → A → B  l : list A  l' : list A  n : nat
  ============================
   (mapi_rec f (l ++ l') n = mapi_rec f l n ++ mapi_rec f l' (#|l| + n))


DEBUG:Going to execute:
induction l in n |- *

Goals:
    A : Type  B : Type  f : nat → A → B  l' : list A  n : nat
  ============================
   (mapi_rec f ([] ++ l') n = mapi_rec f [] n ++ mapi_rec f l' (#|[]| + n))

  
  A : Type
  B : Type
  f : nat → A → B
  a : A
  l : list A
  l' : list A
  n : nat
  IHl : ∀ n : nat,
          mapi_rec f (l ++ l') n = mapi_rec f l n ++ mapi_rec f l' (#|l| + n)
  ============================
   (mapi_rec f ((a :: l) ++ l') n =
    mapi_rec f (a :: l) n ++ mapi_rec f l' (#|a :: l| + n))


DEBUG:Going to execute:
simpl
DEBUG LTAC Evaluated term: l

Goals:
    A : Type  B : Type  f : nat → A → B  l' : list A  n : nat
  ============================
   (mapi_rec f l' n = mapi_rec f l' n)

  
  A : Type
  B : Type
  f : nat → A → B
  a : A
  l : list A
  l' : list A
  n : nat
  IHl : ∀ n : nat,
          mapi_rec f (l ++ l') n = mapi_rec f l n ++ mapi_rec f l' (#|l| + n)
  ============================
   (f n a :: mapi_rec f (l ++ l') (S n) =
    f n a :: mapi_rec f l (S n) ++ mapi_rec f l' (S (#|l| + n)))


DEBUG:Going to execute:
try congruence