| lpt[n].flags = LP_GROUP_NODES, gc-heap(lpt, log, n) = keyset(gch), gch0 = bin-heap(mkkeyarray(1), 0), ki = key-index(lpt[n].ref-size, n), log = nx, lpt = lpt1, lpt0 = lpt2, n = n0, n1 = 0, n < # lpt, bin-heap-inv(gch, lpt), id-idx(lpt2, lpt), n ≤ # lpt ⊦ ⟪gc_heap_insert#(ki; gch, lpt); n := n + 1⟫ ((n ≤ # lpt ∧ bin-heap-inv(gch, lpt) ∧ gc-heap(lpt, log, n) = keyset(gch) ∧ id-idx(lpt2, lpt)) ∧ # lpt - n < # lpt1 - n0), n ∈ log |
lpt1[n0].flags = LP_GROUP_NODES, gc-heap(lpt2, log, n0) = keyset(gch), lpt = lpt1, n0 < # lpt1, bin-heap-inv(gch, lpt1), id-idx(lpt2, lpt1), ¬ n0 ∈ log ⊦ ⟪gc_heap_insert#(key-index(lpt1[n0].ref-size, n0); gch, lpt); n := n0 + 1⟫ (n ≤ # lpt ∧ bin-heap-inv(gch, lpt) ∧ gc-heap(lpt2, log, n) = keyset(gch) ∧ id-idx(lpt2, lpt) ∧ # lpt < (# lpt1 - n0) + n)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s)% ⊦ m ≤ n → (n < m ↔ false); (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)%m ≤ # lpt1 ⊦ id-idx(lpt0, lpt1) → gc-heap(lpt1, nx, m) = gc-heap(lpt0, nx, m); (s)% ⊦ m < n → m ≤ n; (s)