Goal:
  
  A : Type
  P : nat → A → Type
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : All_fold (λ (Γ : list A) (d : A), P (S n + #|Γ|) d) (List.rev tl)
  ============================
   (All_fold (λ (Γ : list A) (d : A), P (n + #|Γ ++ [hd]|) d) (List.rev tl))


DEBUG:Going to execute:
eapply All_fold_impl

Goals:
  
  A : Type
  P : nat → A → Type
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : All_fold (λ (Γ : list A) (d : A), P (S n + #|Γ|) d) (List.rev tl)
  ============================
   (All_fold ?P (List.rev tl))

  
  A : Type
  P : nat → A → Type
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : All_fold (λ (Γ : list A) (d : A), P (S n + #|Γ|) d) (List.rev tl)
  ============================
   (∀ (Γ : list A) (x : A), ?P Γ x → P (n + #|Γ ++ [hd]|) x)


DEBUG:Going to execute:
tea
DEBUG LTAC Evaluated term: All_fold_impl

Goals:
  
  A : Type
  P : nat → A → Type
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : All_fold (λ (Γ : list A) (d : A), P (S n + #|Γ|) d) (List.rev tl)
  ============================
   (All_fold ?P (List.rev tl))

  
  A : Type
  P : nat → A → Type
  n : nat
  hd : A
  tl : list A
  p : P n hd
  X : Alli P (S n) tl
  IHX : All_fold (λ (Γ : list A) (d : A), P (S n + #|Γ|) d) (List.rev tl)
  ============================
   (∀ (Γ : list A) (x : A), ?P Γ x → P (n + #|Γ ++ [hd]|) x)


DEBUG:Going to execute:
try eassumption