Goal:
  
  A : Type
  B : Type
  f : nat → A → B
  g : nat → A → B
  a : A
  l : list A
  n : nat
  Hfg : ∀ (k : nat) (x : A), n ≤ k → k < #|a :: l| + n → f k x = g k x
  IHl : ∀ n : nat,
          (∀ (k : nat) (x : A), n ≤ k → k < #|l| + n → f k x = g k x)
          → mapi_rec f l n = mapi_rec g l n
  ============================
   (f n a :: mapi_rec f l (S n) = g n a :: mapi_rec g l (S n))


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

Goals:
  
  A : Type
  B : Type
  f : nat → A → B
  g : nat → A → B
  a : A
  l : list A
  n : nat
  Hfg : ∀ (k : nat) (x : A), n ≤ k → k < #|a :: l| + n → f k x = g k x
  IHl : ∀ n : nat,
          (∀ (k : nat) (x : A), n ≤ k → k < #|l| + n → f k x = g k x)
          → mapi_rec f l n = mapi_rec g l n
  ============================
   (n ≤ n)

  
  A : Type
  B : Type
  f : nat → A → B
  g : nat → A → B
  a : A
  l : list A
  n : nat
  Hfg : ∀ (k : nat) (x : A), n ≤ k → k < #|a :: l| + n → f k x = g k x
  IHl : ∀ n : nat,
          (∀ (k : nat) (x : A), n ≤ k → k < #|l| + n → f k x = g k x)
          → mapi_rec f l n = mapi_rec g l n
  ============================
   (n < #|a :: l| + n)

  
  A : Type
  B : Type
  f : nat → A → B
  g : nat → A → B
  a : A
  l : list A
  n : nat
  Hfg : ∀ (k : nat) (x : A), n ≤ k → k < #|a :: l| + n → f k x = g k x
  IHl : ∀ n : nat,
          (∀ (k : nat) (x : A), n ≤ k → k < #|l| + n → f k x = g k x)
          → mapi_rec f l n = mapi_rec g l n
  ============================
   (g n a :: mapi_rec f l (S n) = g n a :: mapi_rec g l (S n))


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

Goals:
  
  A : Type
  B : Type
  f : nat → A → B
  g : nat → A → B
  a : A
  l : list A
  n : nat
  Hfg : ∀ (k : nat) (x : A), n ≤ k → k < #|a :: l| + n → f k x = g k x
  IHl : ∀ n : nat,
          (∀ (k : nat) (x : A), n ≤ k → k < #|l| + n → f k x = g k x)
          → mapi_rec f l n = mapi_rec g l n
  ============================
   (n ≤ n)

  
  A : Type
  B : Type
  f : nat → A → B
  g : nat → A → B
  a : A
  l : list A
  n : nat
  Hfg : ∀ (k : nat) (x : A), n ≤ k → k < #|a :: l| + n → f k x = g k x
  IHl : ∀ n : nat,
          (∀ (k : nat) (x : A), n ≤ k → k < #|l| + n → f k x = g k x)
          → mapi_rec f l n = mapi_rec g l n
  ============================
   (n < S (#|l| + n))

  
  A : Type
  B : Type
  f : nat → A → B
  g : nat → A → B
  a : A
  l : list A
  n : nat
  Hfg : ∀ (k : nat) (x : A), n ≤ k → k < #|a :: l| + n → f k x = g k x
  IHl : ∀ n : nat,
          (∀ (k : nat) (x : A), n ≤ k → k < #|l| + n → f k x = g k x)
          → mapi_rec f l n = mapi_rec g l n
  ============================
   (g n a :: mapi_rec f l (S n) = g n a :: mapi_rec g l (S n))


DEBUG:Going to execute:
try lia