Goal:
    A : Type  B : Type  f : A → B  l : list A
  ============================
   (∀ l0 : list B,
      (fix aux (l : list A) (acc : list B) {struct l} : list B :=
         match l with
         | [] => acc
         | x :: l1 => aux l1 (f x :: acc)
         end) l l0 = List.rev (map f l) ++ l0)


DEBUG:Going to execute:
induction l

Goals:
    A : Type  B : Type  f : A → B
  ============================
   (∀ l : list B, l = List.rev (map f []) ++ l)

  
  A : Type
  B : Type
  f : A → B
  a : A
  l : list A
  IHl : ∀ l0 : list B,
          (fix aux (l : list A) (acc : list B) {struct l} : list B :=
             match l with
             | [] => acc
             | x :: l1 => aux l1 (f x :: acc)
             end) l l0 = List.rev (map f l) ++ l0
  ============================
   (∀ l0 : list B,
      (fix aux (l : list A) (acc : list B) {struct l} : list B :=
         match l with
         | [] => acc
         | x :: l1 => aux l1 (f x :: acc)
         end) l (f a :: l0) = List.rev (map f (a :: l)) ++ l0)


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

Goals:
    A : Type  B : Type  f : A → B
  ============================
   (∀ l : list B, l = l)

  
  A : Type
  B : Type
  f : A → B
  a : A
  l : list A
  IHl : ∀ l0 : list B,
          (fix aux (l : list A) (acc : list B) {struct l} : list B :=
             match l with
             | [] => acc
             | x :: l1 => aux l1 (f x :: acc)
             end) l l0 = List.rev (map f l) ++ l0
  ============================
   (∀ l0 : list B,
      (fix aux (l : list A) (acc : list B) {struct l} : list B :=
         match l with
         | [] => acc
         | x :: l1 => aux l1 (f x :: acc)
         end) l (f a :: l0) = (List.rev (map f l) ++ [f a]) ++ l0)


DEBUG:Going to execute:
auto

Goals:
    A : Type  B : Type  f : A → B
  ============================
   (∀ l : list B, l = l)

  
  A : Type
  B : Type
  f : A → B
  a : A
  l : list A
  IHl : ∀ l0 : list B,
          (fix aux (l : list A) (acc : list B) {struct l} : list B :=
             match l with
             | [] => acc
             | x :: l1 => aux l1 (f x :: acc)
             end) l l0 = List.rev (map f l) ++ l0
  ============================
   (∀ l0 : list B,
      (fix aux (l : list A) (acc : list B) {struct l} : list B :=
         match l with
         | [] => acc
         | x :: l1 => aux l1 (f x :: acc)
         end) l (f a :: l0) = (List.rev (map f l) ++ [f a]) ++ l0)


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