| # bh.ar = # kar0, keyset(kar0, m2 + 1) ++ key-index(key, m0) = keyset(bh.ar, m2 + 1) ++ bh.ar[m2 + 1], bh.size = 2 + m2, kar0[m2 / 2] = key-index(key0, m1), subarray(kar0, 0, m2 + 1) = subarray(kar, 0, m2 + 1), 2exp-size(# kar), 2exp-size(# kar0), m2 < # kar, m2 + 1 < # kar0, m0 < # ar, heap-order(bh.ar, 2 + m2), heap-order(kar, m2 + 1), heap-order(kar0, m2 + 1), id-idx(ar, ar0), no-dups-idx(kar, m2 + 1), no-dups-idx(kar0, m2 + 1), no-dups-idx(kar0[m2 + 1, key-index(key, m0)], 2 + m2), no-dups-idx(bh.ar, 2 + m2), valid-idx(kar, ar, m2 + 1), valid-idx(kar0, ar, m2 + 1), valid-idx(kar0[m2 + 1, key-index(key, m0)], ar[m0, ar[m0].idx:= (m2 + 1)], 2 + m2), valid-idx(bh.ar, ar0, 2 + m2), ¬ key < key0 → heap-order(kar0[m2 + 1, key-index(key, m0)], 2 + m2), key < key0 → heap-order(kar0[m2 + 1, key-index(key0, m1)], 2 + m2), ∀ ki. ki = kar[m2] ∨ ki ∈ keyset(kar, m2) → ki.idx ≠ m0 ⊦ keyset(bh.ar, m2 + 1) ++ bh.ar[m2 + 1] = keyset(kar, m2) ++ kar[m2] ++ key-index(key, m0) |
# kar1 = # kar0, keyset(kar0, m2 + 1) ++ key-index(key, m0) = keyset(kar1, m2 + 1) ++ kar1[m2 + 1], kar0[m2 / 2] = key-index(key0, m1), bh = bin-heap(kar1, m), m = 2 + m2, subarray(kar0, 0, m2 + 1) = subarray(kar, 0, m2 + 1), 2exp-size(# kar0), 2exp-size(# kar), m0 < # ar, m2 + 1 < # kar0, m2 < # kar, heap-order(kar0, m2 + 1), heap-order(kar, m2 + 1), heap-order(kar1, 2 + m2), id-idx(ar, ar0), no-dups-idx(kar1, 2 + m2), no-dups-idx(kar0[m2 + 1, key-index(key, m0)], 2 + m2), no-dups-idx(kar0, m2 + 1), no-dups-idx(kar, m2 + 1), valid-idx(kar1, ar0, 2 + m2), valid-idx(kar0[m2 + 1, key-index(key, m0)], ar[m0, ar[m0].idx:= (m2 + 1)], 2 + m2), valid-idx(kar0, ar, m2 + 1), valid-idx(kar, ar, m2 + 1), key < key0 → heap-order(kar0[m2 + 1, key-index(key0, m1)], 2 + m2), ¬ key < key0 → heap-order(kar0[m2 + 1, key-index(key, m0)], 2 + m2), ∀ ki. ki = kar[m2] ∨ ki ∈ keyset(kar, m2) → ki.idx ≠ m0 ⊦ keyset(kar1, m2 + 1) ++ kar1[m2 + 1] = keyset(kar, m2) ++ kar[m2] ++ key-index(key, m0)
Used simplifier rules: ⊦ kar = bh.ar ∧ m = bh.size ↔ bh = bin-heap(kar, m); (elim) Used terms: bh, kar1, m