suffices ∀ i j (hj : i + j = n) macc,
  (macc >>= fun acc => foldlM.aux n f i acc) =
    foldl.loop n _ macc i
  by
  have := this 0 n (by simp) (pure init)
  simp at this
  exact this
m : Type u → Type u_1
inst✝¹ : Monad m
inst✝ : LawfulMonad m
n : ℕ
β : Type u
init : β
f : Fin n → β → m β
⊢ foldlM.aux n f 0 init =
    foldl.loop n
      (fun macc i => do
        let acc ← macc
        f i acc)
      (pure init) 0
m : Type u → Type u_1
inst✝¹ : Monad m
inst✝ : LawfulMonad m
n : ℕ
β : Type u
init : β
f : Fin n → β → m β
⊢ ∀ (i j : ℕ),
    i + j = n →
      ∀ (macc : m β),
        (do
            let acc ← macc
            foldlM.aux n f i acc) =
          foldl.loop n
            (fun macc i => do
              let acc ← macc
              f i acc)
            macc i