apply bind_congr
α : Type u
m : Type v → Type w
inst✝¹ : Monad m
β : Type v
inst✝ : LawfulMonad m
f : α → m β
a : α
x : Array α
i : Nat
b : β
y : Array β
h : i < size x
⊢ (do
      let __do_lift ← f (cons a x)[i + 1]
      map f (cons a x) (i + 1 + 1) (push (cons b y) __do_lift)) =
    do
    let x_1 ← f x[i]
    let y ← map f x (i + 1) (push y x_1)
    pure (cons b y)
case h
α : Type u
m : Type v → Type w
inst✝¹ : Monad m
β : Type v
inst✝ : LawfulMonad m
f : α → m β
a : α
x : Array α
i : Nat
b : β
y : Array β
h : i < size x
⊢ ∀ (a_1 : β),
    map f (cons a x) (i + 1 + 1) (push (cons b y) a_1) = do
      let y ← map f x (i + 1) (push y a_1)
      pure (cons b y)