| ar = ar1[kar[m - 1].idx, ar1[kar[m - 1].idx].idx:= 0], bh0 = bin-heap(kar[0, kar[m - 1]], m - 1), # kar ≠ 0, # keyset(kar, m) ≠ 0, keyset(kar, m) ≠ ∅, m ≠ 0, m ≠ 1, 2exp-size(# kar), kar[m - 1].idx < # ar1, heap-order(kar, m), no-dups-idx(kar, m), valid-idx(kar, ar1, m), key-index(key, kar[0].idx) ∈ keyset(kar, m), m ≤ # kar, ∀ ki. ki ∈ keyset(kar, m) → ¬ ki.key < key ⊦ ⟪bin_min_heap_bubble_down#(0; bh0, ar)⟫ ( bh0.size ≤ # bh0.ar ∧ no-dups-idx(bh0.ar, bh0.size) ∧ valid-idx(bh0.ar, ar, bh0.size) ∧ 2exp-size(# bh0.ar) ∧ heap-order(bh0.ar, bh0.size) ∧ id-idx(ar1, ar) ∧ (∃ key0. key-index(key0, kar[0].idx) ∈ keyset(kar, m) ∧ keyset(bh0.ar, bh0.size) = keyset(kar, m) -- key-index(key0, kar[0].idx) ∧ (∀ ki. ki ∈ keyset(kar, m) → ¬ ki.key < key0))) |
ar = ar1[kar[m0].idx, ar1[kar[m0].idx].idx:= 0], bh0 = bin-heap(kar[0, kar[m0]], m0), m = m0 + 1, 2exp-size(# kar), kar[m0].idx < # ar1, heap-order(kar, m), no-dups-idx(kar, m), valid-idx(kar, ar1, m), key-index(key, kar[0].idx) ∈ keyset(kar, m), m ≤ # kar, ∀ ki. ki ∈ keyset(kar, m) → ¬ ki.key < key ⊦ ⟪bin_min_heap_bubble_down#(0; bh0, ar)⟫ ( bh0.size ≤ # bh0.ar ∧ no-dups-idx(bh0.ar, bh0.size) ∧ valid-idx(bh0.ar, ar, bh0.size) ∧ 2exp-size(# bh0.ar) ∧ heap-order(bh0.ar, bh0.size) ∧ id-idx(ar1, ar) ∧ (∃ key0. key-index(key0, kar[0].idx) ∈ keyset(kar, m) ∧ keyset(bh0.ar, bh0.size) = keyset(kar, m) -- key-index(key0, kar[0].idx) ∧ (∀ ki. ki ∈ keyset(kar, m) → ¬ ki.key < key0))), # kar = 0, # keyset(kar, m) = 0, keyset(kar, m) = ∅, m = 0, m = 1
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: m, m0