rewrite [@IH hk hge]
α : Type u
lt : α → α → Bool
x✝ : Subarray α
i✝ : Nat
y✝ : Subarray α
k : Nat
x : Subarray α
i : Nat
y : Subarray α
hi : i < Subarray.size x
hl : 2 * i + 1 < Subarray.size x
hr : 2 * i + 2 < Subarray.size x
hx' : lt x[2 * i + 2] x[2 * i + 1] = false
hx : lt x[i] x[2 * i + 2] = true
a✝ : heapifyDown.OpSpec lt (Subarray.swap x { val := i, isLt := hi } { val := 2 * i + 2, isLt := hr }) (2 * i + 2) y
IH :
  ∀ {hk : k < Array.size y.as},
    k ≥ (Subarray.swap x { val := i, isLt := hi } { val := 2 * i + 2, isLt := hr }).stop →
      y.as[k] = (Subarray.swap x { val := i, isLt := hi } { val := 2 * i + 2, isLt := hr }).as[k]
hk : k < Array.size y.as
hge : k ≥ x.stop
⊢ y.as[k] = x.as[k]
α : Type u
lt : α → α → Bool
x✝ : Subarray α
i✝ : Nat
y✝ : Subarray α
k : Nat
x : Subarray α
i : Nat
y : Subarray α
hi : i < Subarray.size x
hl : 2 * i + 1 < Subarray.size x
hr : 2 * i + 2 < Subarray.size x
hx' : lt x[2 * i + 2] x[2 * i + 1] = false
hx : lt x[i] x[2 * i + 2] = true
a✝ : heapifyDown.OpSpec lt (Subarray.swap x { val := i, isLt := hi } { val := 2 * i + 2, isLt := hr }) (2 * i + 2) y
IH :
  ∀ {hk : k < Array.size y.as},
    k ≥ (Subarray.swap x { val := i, isLt := hi } { val := 2 * i + 2, isLt := hr }).stop →
      y.as[k] = (Subarray.swap x { val := i, isLt := hi } { val := 2 * i + 2, isLt := hr }).as[k]
hk : k < Array.size y.as
hge : k ≥ x.stop
⊢ (Subarray.swap x { val := i, isLt := hi } { val := 2 * i + 2, isLt := hr }).as[k] = x.as[k]