conv =>
  lhs; unfold loop
  rw [dif_pos (Nat.succ_lt_succ hlt)]
  rw [get_cons_succ a x (hi₁:=Nat.succ_lt_succ hlt) (hi₂:=hlt)]
  rhs; ext b'; rw [push_cons_eq_cons_push]
  rw [mapM.loop_cons_succ f a x (hi₁:=Nat.succ_lt_succ hlt) (hi₂:=hlt) b (r.push b')]
case inr
α : Type u
β : Type v
γ : Type w
n : Nat
m : Type v → Type w
inst✝¹ : Monad m
inst✝ : LawfulMonad m
f : α → m β
a : α
x : SizedArray α n
i : Nat
hi₁ : i + 1 ≤ n + 1
hi₂ : i ≤ n
b : β
r : SizedArray β i
hlt : i < n
⊢ loop f (cons a x) (i + 1) hi₁ (cons b r) = do
    let y ← loop f x i hi₂ r
    pure (cons b y)
case inr
α : Type u
β : Type v
γ : Type w
n : Nat
m : Type v → Type w
inst✝¹ : Monad m
inst✝ : LawfulMonad m
f : α → m β
a : α
x : SizedArray α n
i : Nat
hi₁ : i + 1 ≤ n + 1
hi₂ : i ≤ n
b : β
r : SizedArray β i
hlt : i < n
⊢ (do
      let b' ← f x[i]
      let y ← loop f x (i + 1) hlt (push r b')
      pure (cons b y)) =
    do
    let y ← loop f x i hi₂ r
    pure (cons b y)