Goal:
    A : Type  l : list A  l' : list A  n : nat  t : A
  ============================
   (nth_error l n = Some t → nth_error (l ++ l') n = Some t)


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

Goals:
    A : Type  l' : list A  n : nat  t : A
  ============================
   (nth_error [] n = Some t → nth_error ([] ++ l') n = Some t)

  
  A : Type
  a : A
  l : list A
  l' : list A
  n : nat
  t : A
  IHl : ∀ n : nat, nth_error l n = Some t → nth_error (l ++ l') n = Some t
  ============================
   (nth_error (a :: l) n = Some t → nth_error ((a :: l) ++ l') n = Some t)


DEBUG:Going to execute:
destruct n
DEBUG LTAC Evaluated term: l

Goals:
    A : Type  l' : list A  t : A
  ============================
   (nth_error [] 0 = Some t → nth_error ([] ++ l') 0 = Some t)

    A : Type  l' : list A  n : nat  t : A
  ============================
   (nth_error [] (S n) = Some t → nth_error ([] ++ l') (S n) = Some t)

  
  A : Type
  a : A
  l : list A
  l' : list A
  t : A
  IHl : ∀ n : nat, nth_error l n = Some t → nth_error (l ++ l') n = Some t
  ============================
   (nth_error (a :: l) 0 = Some t → nth_error ((a :: l) ++ l') 0 = Some t)

  
  A : Type
  a : A
  l : list A
  l' : list A
  n : nat
  t : A
  IHl : ∀ n : nat, nth_error l n = Some t → nth_error (l ++ l') n = Some t
  ============================
   (nth_error (a :: l) (S n) = Some t
    → nth_error ((a :: l) ++ l') (S n) = Some t)


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

Goals:
    A : Type  l' : list A  t : A
  ============================
   (None = Some t
    → match l' with
      | [] => None
      | x :: _ => Some x
      end = Some t)

    A : Type  l' : list A  n : nat  t : A
  ============================
   (None = Some t
    → match l' with
      | [] => None
      | _ :: l => nth_error l n
      end = Some t)

  
  A : Type
  a : A
  l : list A
  l' : list A
  t : A
  IHl : ∀ n : nat, nth_error l n = Some t → nth_error (l ++ l') n = Some t
  ============================
   (Some a = Some t → Some a = Some t)

  
  A : Type
  a : A
  l : list A
  l' : list A
  n : nat
  t : A
  IHl : ∀ n : nat, nth_error l n = Some t → nth_error (l ++ l') n = Some t
  ============================
   (nth_error l n = Some t → nth_error (l ++ l') n = Some t)


DEBUG:Going to execute:
try congruence