dfoldrM #
theorem Fin.dfoldrM_loop {m : Type u_1 → Type u_2} {n : Nat} {α : Fin (n + 1 + 1) → Type u_1} {i : Nat} {h : i + 1 < n + 1 + 1} [Monad m] [LawfulMonad m] (f : (i : Fin (n + 1)) → α i.succ → m (α i.castSucc)) (x : α ⟨i + 1, h⟩) :
dfoldrM.loop (n + 1) α f (i + 1) h x = dfoldrM.loop n (α ∘ succ) (fun (x : Fin n) => f x.succ) i ⋯ x >>= f 0