Goal:
    A : Type  B : Type  f : nat → A → B  l : list A
  ============================
   (∀ n k : nat,
      k ≤ n
      → List.rev (mapi_rec f l (n - k)) =
        mapi_rec (λ (k0 : nat) (x : A), f (Nat.pred #|l| + n - k0) x)
          (List.rev l) k)


DEBUG:Going to execute:
induction l using rev_ind

Goals:
    A : Type  B : Type  f : nat → A → B
  ============================
   (∀ n k : nat,
      k ≤ n
      → List.rev (mapi_rec f [] (n - k)) =
        mapi_rec (λ (k0 : nat) (x : A), f (Nat.pred #|[]| + n - k0) x)
          (List.rev []) k)

  
  A : Type
  B : Type
  f : nat → A → B
  x : A
  l : list A
  IHl : ∀ n k : nat,
          k ≤ n
          → List.rev (mapi_rec f l (n - k)) =
            mapi_rec (λ (k0 : nat) (x : A), f (Nat.pred #|l| + n - k0) x)
              (List.rev l) k
  ============================
   (∀ n k : nat,
      k ≤ n
      → List.rev (mapi_rec f (l ++ [x]) (n - k)) =
        mapi_rec
          (λ (k0 : nat) (x0 : A), f (Nat.pred #|l ++ [x]| + n - k0) x0)
          (List.rev (l ++ [x])) k)


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

Goals:
    A : Type  B : Type  f : nat → A → B
  ============================
   (∀ n k : nat, k ≤ n → [] = [])

  
  A : Type
  B : Type
  f : nat → A → B
  x : A
  l : list A
  IHl : ∀ n k : nat,
          k ≤ n
          → List.rev (mapi_rec f l (n - k)) =
            mapi_rec (λ (k0 : nat) (x : A), f (Nat.pred #|l| + n - k0) x)
              (List.rev l) k
  ============================
   (∀ n k : nat,
      k ≤ n
      → List.rev (mapi_rec f (l ++ [x]) (n - k)) =
        mapi_rec
          (λ (k0 : nat) (x0 : A), f (Nat.pred #|l ++ [x]| + n - k0) x0)
          (List.rev (l ++ [x])) k)


DEBUG:Going to execute:
try congruence