intro k hk bs IH j hj _ hbsk
case refine_2
α : Type u
β : Type v
p : α → Prop
f : (a : α) → p a → β
as : Array α
h : ∀ (i : Nat) (hi : i < size as), p as[i]
i : Nat
hi : i < size (pmap f as h)
⊢ ∀ (i : Nat) (hi : i < size as) (a : Array β),
    (fun k bs => ∀ (j : Nat) (hjk : j < k) (hk : k ≤ size as) (hbsk : size bs = k), bs[j] = f as[j] (_ : p as[j])) i a →
      (fun k bs => ∀ (j : Nat) (hjk : j < k) (hk : k ≤ size as) (hbsk : size bs = k), bs[j] = f as[j] (_ : p as[j]))
        (i + 1) (push a (f as[{ val := i, isLt := hi }.val] (_ : p as[{ val := i, isLt := hi }.val])))
case refine_2
α : Type u
β : Type v
p : α → Prop
f : (a : α) → p a → β
as : Array α
h : ∀ (i : Nat) (hi : i < size as), p as[i]
i : Nat
hi : i < size (pmap f as h)
k : Nat
hk : k < size as
bs : Array β
IH : ∀ (j : Nat) (hjk : j < k) (hk : k ≤ size as) (hbsk : size bs = k), bs[j] = f as[j] (_ : p as[j])
j : Nat
hj : j < k + 1
hk✝ : k + 1 ≤ size as
hbsk : size (push bs (f as[{ val := k, isLt := hk }.val] (_ : p as[{ val := k, isLt := hk }.val]))) = k + 1
⊢ (push bs (f as[{ val := k, isLt := hk }.val] (_ : p as[{ val := k, isLt := hk }.val])))[j] = f as[j] (_ : p as[j])