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
  k : nat
  x : A
  H0 : BinInt.Z.lt (BinInt.Z.of_nat k)
         (BinInt.Z.add (BinInt.Z.of_nat #|l|)
            (BinInt.Z.add (BinInt.Z.of_nat n) (BinNums.Zpos BinNums.xH)))
  H : BinInt.Z.le
        (BinInt.Z.add (BinInt.Z.of_nat n) (BinNums.Zpos BinNums.xH))
        (BinInt.Z.of_nat k)
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat k)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat n)
  cstr1 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|l|)
  ============================
   (BinInt.Z.lt (BinInt.Z.of_nat k)
      (BinInt.Z.add (BinInt.Z.add (BinInt.Z.of_nat #|l|) (BinInt.Z.of_nat n))
         (BinNums.Zpos BinNums.xH)))


DEBUG:Going to execute:
Zify.zify_to_euclidean_division_equations