α : Type u_1
β : Type u_2
as : Array α
motive : Nat → β → Prop
init : β
h0 : motive 0 init
f : β → α → β
hf : ∀ (i : Fin (size as)) (b : β), motive i.val b → motive (i.val + 1) (f b as[i])
this :
  (∀ (i : Fin (size as)) (b : β), motive i.val b → SatisfiesM (motive (i.val + 1)) (f b as[i])) →
    SatisfiesM (motive (size as)) (foldlM f init as 0 (size as))
⊢ motive (size as) (foldl f init as 0 (size as))
α : Type u_1
β : Type u_2
as : Array α
motive : Nat → β → Prop
init : β
h0 : motive 0 init
f : β → α → β
hf : ∀ (i : Fin (size as)) (b : β), motive i.val b → motive (i.val + 1) (f b as[i])
⊢ motive (size as) (foldl f init as 0 (size as))
have := SatisfiesM_foldlM (m := Id) (as := as) (f := f) motive h0
α : Type u_1
β : Type u_2
as : Array α
motive : Nat → β → Prop
init : β
h0 : motive 0 init
f : β → α → β
hf : ∀ (i : Fin (size as)) (b : β), motive i.val b → motive (i.val + 1) (f b as[i])
this :
  (∀ (i : Fin (size as)) (b : β), motive i.val b → motive (i.val + 1) (f b as[i])) →
    motive (size as) (foldlM f init as 0 (size as))
⊢ motive (size as) (foldl f init as 0 (size as))
α : Type u_1
β : Type u_2
as : Array α
motive : Nat → β → Prop
init : β
h0 : motive 0 init
f : β → α → β
hf : ∀ (i : Fin (size as)) (b : β), motive i.val b → motive (i.val + 1) (f b as[i])
this :
  (∀ (i : Fin (size as)) (b : β), motive i.val b → SatisfiesM (motive (i.val + 1)) (f b as[i])) →
    SatisfiesM (motive (size as)) (foldlM f init as 0 (size as))
⊢ motive (size as) (foldl f init as 0 (size as))
simp [SatisfiesM_Id_eq] at this
no goals
α : Type u_1
β : Type u_2
as : Array α
motive : Nat → β → Prop
init : β
h0 : motive 0 init
f : β → α → β
hf : ∀ (i : Fin (size as)) (b : β), motive i.val b → motive (i.val + 1) (f b as[i])
this :
  (∀ (i : Fin (size as)) (b : β), motive i.val b → motive (i.val + 1) (f b as[i])) →
    motive (size as) (foldlM f init as 0 (size as))
⊢ motive (size as) (foldl f init as 0 (size as))
exact this hf