Goal:
  
  A : Type
  B : Type
  P : nat → A → Type
  f : nat → A → B
  g : nat → A → B
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : (∀ (n : nat) (x : A), P n x → f n x = g n x)
        → mapi_rec f tl (S n) = mapi_rec g tl (S n)
  Heq : ∀ (n : nat) (x : A), P n x → f n x = g n x
  ============================
   (f n hd :: mapi_rec f tl (S n) = g n hd :: mapi_rec g tl (S n))


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

Goals:
  
  A : Type
  B : Type
  P : nat → A → Type
  f : nat → A → B
  g : nat → A → B
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : (∀ (n : nat) (x : A), P n x → f n x = g n x)
        → mapi_rec f tl (S n) = mapi_rec g tl (S n)
  Heq : ∀ (n : nat) (x : A), P n x → f n x = g n x
  ============================
   (P n hd)

  
  A : Type
  B : Type
  P : nat → A → Type
  f : nat → A → B
  g : nat → A → B
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : (∀ (n : nat) (x : A), P n x → f n x = g n x)
        → mapi_rec f tl (S n) = mapi_rec g tl (S n)
  Heq : ∀ (n : nat) (x : A), P n x → f n x = g n x
  ============================
   (g n hd :: mapi_rec f tl (S n) = g n hd :: mapi_rec g tl (S n))


DEBUG:Going to execute:
f_equal
DEBUG LTAC Evaluated term: Heq
DEBUG LTAC Evaluated term: Heq

Goals:
  
  A : Type
  B : Type
  P : nat → A → Type
  f : nat → A → B
  g : nat → A → B
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : (∀ (n : nat) (x : A), P n x → f n x = g n x)
        → mapi_rec f tl (S n) = mapi_rec g tl (S n)
  Heq : ∀ (n : nat) (x : A), P n x → f n x = g n x
  ============================
   (P n hd)

  
  A : Type
  B : Type
  P : nat → A → Type
  f : nat → A → B
  g : nat → A → B
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : (∀ (n : nat) (x : A), P n x → f n x = g n x)
        → mapi_rec f tl (S n) = mapi_rec g tl (S n)
  Heq : ∀ (n : nat) (x : A), P n x → f n x = g n x
  ============================
   (g n hd :: mapi_rec f tl (S n) = g n hd :: mapi_rec g tl (S n))


DEBUG:Going to execute:
fun => <coq-core.plugins.cc::f_equal@0>

Goals:
  
  A : Type
  B : Type
  P : nat → A → Type
  f : nat → A → B
  g : nat → A → B
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : (∀ (n : nat) (x : A), P n x → f n x = g n x)
        → mapi_rec f tl (S n) = mapi_rec g tl (S n)
  Heq : ∀ (n : nat) (x : A), P n x → f n x = g n x
  ============================
   (P n hd)

  
  A : Type
  B : Type
  P : nat → A → Type
  f : nat → A → B
  g : nat → A → B
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : (∀ (n : nat) (x : A), P n x → f n x = g n x)
        → mapi_rec f tl (S n) = mapi_rec g tl (S n)
  Heq : ∀ (n : nat) (x : A), P n x → f n x = g n x
  ============================
   (mapi_rec f tl (S n) = mapi_rec g tl (S n))


DEBUG:Going to execute:
auto

Goals:
  
  A : Type
  B : Type
  P : nat → A → Type
  f : nat → A → B
  g : nat → A → B
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : (∀ (n : nat) (x : A), P n x → f n x = g n x)
        → mapi_rec f tl (S n) = mapi_rec g tl (S n)
  Heq : ∀ (n : nat) (x : A), P n x → f n x = g n x
  ============================
   (P n hd)

  
  A : Type
  B : Type
  P : nat → A → Type
  f : nat → A → B
  g : nat → A → B
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : (∀ (n : nat) (x : A), P n x → f n x = g n x)
        → mapi_rec f tl (S n) = mapi_rec g tl (S n)
  Heq : ∀ (n : nat) (x : A), P n x → f n x = g n x
  ============================
   (mapi_rec f tl (S n) = mapi_rec g tl (S n))


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