| keyset(gch0) = gc-heap(lpt1, nx), keyset(gch) = gc-heap(lpt, log), log = log0, log1 = nx, lpt0 = lpt1, bin-heap-inv(gch0, lpt1), bin-heap-inv(gch, lpt), id-idx(lpt1, lpt), ∀ n. n ∈ nx → n < # lpt1 ∧ lpt1[n].flags = LP_GROUP_NODES, ∀ n. n ∈ log → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES ⊦ ⟪let m = log.head in let ki = key-index(lpt[m].ref-size, m) in gc_heap_insert#(ki; gch, lpt); log := log.tail⟫ ( ( bin-heap-inv(gch, lpt) ∧ keyset(gch) = gc-heap(lpt, log) ∧ id-idx(lpt1, lpt) ∧ ¬ dups(log) ∧ (∀ n. n ∈ log → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES)) ∧ # log < # log0), log = [], dups(nx), dups(log) |
keyset(gch) = gc-heap(lpt, log), keyset(gch0) = gc-heap(lpt1, nx), log = log0, log1 = nx, lpt0 = lpt1, m = log.head, bin-heap-inv(gch, lpt), bin-heap-inv(gch0, lpt1), id-idx(lpt1, lpt), ∀ n. n ∈ log → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES, ∀ n. n ∈ nx → n < # lpt1 ∧ lpt1[n].flags = LP_GROUP_NODES ⊦ ⟪let ki = key-index(lpt[m].ref-size, m) in gc_heap_insert#(ki; gch, lpt); log := log.tail⟫ ( ( bin-heap-inv(gch, lpt) ∧ keyset(gch) = gc-heap(lpt, log) ∧ id-idx(lpt1, lpt) ∧ ¬ dups(log) ∧ (∀ n. n ∈ log → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES)) ∧ # log < # log0), log = [], dups(log), dups(nx)
keyset(gch) = gc-heap(lpt, log), keyset(gch0) = gc-heap(lpt1, nx), log = [], log = log0, log1 = nx, lpt0 = lpt1, bin-heap-inv(gch, lpt), bin-heap-inv(gch0, lpt1), id-idx(lpt1, lpt), ∀ n. n ∈ log → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES, ∀ n. n ∈ nx → n < # lpt1 ∧ lpt1[n].flags = LP_GROUP_NODES ⊦ log = [], dups(log), dups(nx)