apply bind_congr
α✝ : Type u
m : Type u → Type v
inst✝¹ : Monad m
inst✝ : LawfulMonad m
α : Type u
x : Array α
n : Nat
f : α → m α
h : n < size x
⊢ (do
      let x_1 ← f x[n]
      let a ←
        pure
            { val := set x { val := n, isLt := h } x_1,
              property := (_ : size (set x { val := n, isLt := h } x_1) = size x) }
      pure a.val) =
    do
    let v ← f x[n]
    pure (set x { val := n, isLt := h } v)
case h
α✝ : Type u
m : Type u → Type v
inst✝¹ : Monad m
inst✝ : LawfulMonad m
α : Type u
x : Array α
n : Nat
f : α → m α
h : n < size x
⊢ ∀ (a : α),
    (do
        let a ←
          pure
              { val := set x { val := n, isLt := h } a,
                property := (_ : size (set x { val := n, isLt := h } a) = size x) }
        pure a.val) =
      pure (set x { val := n, isLt := h } a)