| keyset(gch) = gc-heap(lpt1, log0), keyset(gch0) = gc-heap(lpt1, nx), log0 ≠ [], log0.head < # lpt, bin-heap-inv(gch0, lpt1), bin-heap-inv(gch, lpt), id-idx(lpt1, lpt), ¬ dups(nx), ¬ dups(log0), ∀ n. n ∈ nx → n < # lpt1 ∧ lpt1[n].flags = LP_GROUP_NODES, ∀ n. n ∈ log0 → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES ⊦ ⟪gc_heap_insert#(key-index(lpt[log0.head].ref-size, log0.head); gch, lpt); log := log0.tail⟫ ( bin-heap-inv(gch, lpt) ∧ keyset(gch) = gc-heap(lpt1, log) ∧ id-idx(lpt1, lpt) ∧ ¬ dups(log) ∧ (∀ n. n ∈ log → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES) ∧ # log < # log0) |
keyset(gch0) = gc-heap(lpt1, nx), keyset(gch) = gc-heap(lpt1, log0), log0 = n0 + nx0, n0 < # lpt, bin-heap-inv(gch, lpt), bin-heap-inv(gch0, lpt1), id-idx(lpt1, lpt), ∀ n. n ∈ log0 → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES, ∀ n. n ∈ nx → n < # lpt1 ∧ lpt1[n].flags = LP_GROUP_NODES ⊦ ⟪gc_heap_insert#(key-index(lpt[n0].ref-size, n0); gch, lpt); log := nx0⟫ ( bin-heap-inv(gch, lpt) ∧ keyset(gch) = gc-heap(lpt1, log) ∧ id-idx(lpt1, lpt) ∧ ¬ dups(log) ∧ (∀ n. n ∈ log → n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES) ∧ # log < # log0), log0 = [], dups(nx), dups(log0)
Used simplifier rules: nx ≠ [] ⊦ n = nx.head ∧ nx0 = nx.tail ↔ nx = n + nx0; (elim) Used terms: log0, n0, nx0