| 2exp-size(# kar), heap-order(kar, m), no-dups-idx(kar, m), valid-idx(kar, lpt, m), m ≤ # kar ⊦ bin-heap-inv(bin-heap(kar, m), lpt.mapIndices(ns, λ lp. lp.size:= LEB_SIZE)) |
⊦ bin-heap-inv(bh, lpt) ↔ bh.size ≤ # bh.ar ∧ no-dups-idx(bh.ar, bh.size) ∧ valid-idx(bh.ar, lpt, bh.size) ∧ 2exp-size(# bh.ar) ∧ heap-order(bh.ar, bh.size)
2exp-size(# kar), heap-order(kar, m), no-dups-idx(kar, m), valid-idx(kar, lpt, m), m ≤ # kar ⊦ bin-heap(kar, m).size ≤ # bin-heap(kar, m).ar ∧ no-dups-idx(bin-heap(kar, m).ar, bin-heap(kar, m).size) ∧ valid-idx(bin-heap(kar, m).ar, lpt.mapIndices(ns, λ lp. lp.size:= LEB_SIZE), bin-heap(kar, m).size) ∧ 2exp-size(# bin-heap(kar, m).ar) ∧ heap-order(bin-heap(kar, m).ar, bin-heap(kar, m).size)
Used terms: lpt.mapIndices(ns, λ lp. lp.size:= LEB_SIZE), bin-heap(kar, m)