have _hdecreasing := ‹x.size - j < x.size - i›
α : Type u
lt : α → α → Bool
x : Subarray α
i : Nat
lhs : Nat := 2 * i + 1
rhs : Nat := lhs + 1
hr : rhs < Subarray.size x
hi : i < Subarray.size x
hl : lhs < Subarray.size x
j : Nat := if lt x[rhs] x[lhs] = true then lhs else rhs
hj : i < j ∧ j < Subarray.size x
this : Subarray.size x - j < Subarray.size x - i
⊢ heapifyDown.OpSpec lt x i
    (if lt x[i] x[j] = true then
      heapifyDownAux lt (Subarray.swap x { val := i, isLt := hi } { val := j, isLt := (_ : j < Subarray.size x) }) j
    else x)
α : Type u
lt : α → α → Bool
x : Subarray α
i : Nat
lhs : Nat := 2 * i + 1
rhs : Nat := lhs + 1
hr : rhs < Subarray.size x
hi : i < Subarray.size x
hl : lhs < Subarray.size x
j : Nat := if lt x[rhs] x[lhs] = true then lhs else rhs
hj : i < j ∧ j < Subarray.size x
this _hdecreasing : Subarray.size x - j < Subarray.size x - i
⊢ heapifyDown.OpSpec lt x i
    (if lt x[i] x[j] = true then
      heapifyDownAux lt (Subarray.swap x { val := i, isLt := hi } { val := j, isLt := (_ : j < Subarray.size x) }) j
    else x)