| keyset(gch) = gc-heap(lpt, nx), lpt0 = lpt, bin-heap-inv(gch, lpt), ¬ dups(nx), ∀ n. n ∈ nx → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES ⊦ ⟪persistence_gc_heap_add_log#(; nx, lpt, gch)⟫ (nx = [] ∧ bin-heap-inv(gch, lpt) ∧ keyset(gch) = gc-heap(lpt0, []) ∧ id-idx(lpt0, lpt)) |
keyset(gch) = gc-heap(lpt, nx), log = nx, lpt0 = lpt, bin-heap-inv(gch, lpt), ∀ n. n ∈ nx → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES ⊦ ⟪while log ≠ [] do {/* (prepost-gcheap-add-log : invariant bin-heap-inv(gch, lpt) ∧ keyset(gch) = gc-heap(lpt, log) ∧ id-idx(lpt`, lpt) ∧ ¬ dups(log) ∧ (∀ n. n ∈ log → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES) wfbound # log) */; let m = log.head in let ki = key-index(lpt[m].ref-size, m) in gc_heap_insert#(ki; gch, lpt); log := log.tail}⟫ (log = [] ∧ bin-heap-inv(gch, lpt) ∧ keyset(gch) = gc-heap(lpt0, []) ∧ id-idx(lpt0, lpt)), dups(nx)
Used simplifier rules: heap-add-log: ⊦ ;