unfold foldlM.loop
case zero.refl
α : Type u
m : Type u_1 → Type u_2
β : Type u_1
inst✝ : Monad m
f : β → α → m β
arr : Array α
b : β
⊢ foldlM.loop f arr (size arr) (_ : size arr ≤ size arr) Nat.zero (size arr) b =
    List.foldlM f b (List.drop (size arr) arr.data)
case zero.refl
α : Type u
m : Type u_1 → Type u_2
β : Type u_1
inst✝ : Monad m
f : β → α → m β
arr : Array α
b : β
⊢ (if hlt : size arr < size arr then
      match Nat.zero with
      | 0 => pure b
      | Nat.succ i' =>
        let_fun this := (_ : size arr < size arr);
        do
        let __do_lift ← f b arr[size arr]
        foldlM.loop f arr (size arr) (_ : size arr ≤ size arr) i' (size arr + 1) __do_lift
    else pure b) =
    List.foldlM f b (List.drop (size arr) arr.data)