have IH := IH (j+1) $ H.trans $ Nat.succ_add i j
case succ
α : Type u
m : Type u_1 → Type u_2
β : Type u_1
inst✝ : Monad m
f : β → α → m β
arr : Array α
i : Nat
IH :
  ∀ (j : Nat),
    size arr = i + j →
      ∀ (b : β), foldlM.loop f arr (size arr) (_ : size arr ≤ size arr) i j b = List.foldlM f b (List.drop j arr.data)
j : Nat
H : size arr = Nat.succ i + j
b : β
⊢ foldlM.loop f arr (size arr) (_ : size arr ≤ size arr) (Nat.succ i) j b = List.foldlM f b (List.drop j arr.data)
case succ
α : Type u
m : Type u_1 → Type u_2
β : Type u_1
inst✝ : Monad m
f : β → α → m β
arr : Array α
i : Nat
IH✝ :
  ∀ (j : Nat),
    size arr = i + j →
      ∀ (b : β), foldlM.loop f arr (size arr) (_ : size arr ≤ size arr) i j b = List.foldlM f b (List.drop j arr.data)
j : Nat
H : size arr = Nat.succ i + j
b : β
IH :
  ∀ (b : β),
    foldlM.loop f arr (size arr) (_ : size arr ≤ size arr) i (j + 1) b = List.foldlM f b (List.drop (j + 1) arr.data)
⊢ foldlM.loop f arr (size arr) (_ : size arr ≤ size arr) (Nat.succ i) j b = List.foldlM f b (List.drop j arr.data)