. simp only [getElem]
  have lhs_rw := Array.get_set a ⟨i, i_in_bounds⟩ i i_in_bounds (f (Array.get a ⟨i, i_in_bounds⟩))
  simp only [getElem] at lhs_rw
  rw [lhs_rw]
  simp only [Array.get_eq_getElem, ite_true]
case isTrue
α : Type u_1
a : Array α
i : Nat
i_in_bounds : i < a.size
f : α → α
h✝ : i < a.size
⊢ (a.set ⟨i, ⋯⟩ (f (a.get ⟨i, ⋯⟩)))[i] = f a[i]

case isFalse
α : Type u_1
a : Array α
i : Nat
i_in_bounds : i < a.size
f : α → α
h✝ : ¬i < a.size
⊢ (a.set ⟨i, ⋯⟩ (f (a.get ⟨i, ⋯⟩)))[i] = f a[i]
case isFalse
α : Type u_1
a : Array α
i : Nat
i_in_bounds : i < a.size
f : α → α
h✝ : ¬i < a.size
⊢ (a.set ⟨i, ⋯⟩ (f (a.get ⟨i, ⋯⟩)))[i] = f a[i]