| # lpt1 = n1 + n0, # lpt2 = n1 + n0, # lpt = n1 + n0, lpt1[n0] = mklp(m, m0, LP_GROUP_NODES, m1), lpt2[n0] = mklp(m2, m3, lpf, m4), gc-heap(lpt2, log, n0) = keyset(gch), keyset(gch0) = gc-heap(lpt2, log, n0) ++ key-index(m, n0), bin-heap-inv(gch, lpt1), bin-heap-inv(gch0, lpt), ∀ n. n < n1 + n0 → lpt1[n].ref-size = lpt[n].ref-size ∧ lpt1[n].size = lpt[n].size ∧ lpt1[n].flags = lpt[n].flags, ∀ ki. ki ∈ gc-heap(lpt2, log, ki.idx) → ki.idx ≠ n0, ∀ n. n < n1 + n0 → lpt2[n].ref-size = lpt1[n].ref-size ∧ lpt2[n].size = lpt1[n].size ∧ lpt2[n].flags = lpt1[n].flags ⊦ n1 = 0, gc-heap(lpt2, log, n0) ∪ (lpf = LP_GROUP_NODES ⊃ ∅ ++ key-index(m2, n0);∅) = gc-heap(lpt2, log, n0) ++ key-index(m, n0), n0 ∈ log |
Used simplifier rules: ⊦ m < m + n ↔ n ≠ 0; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ mklp(n2, n3, lpf, m).flags = lpf; (s)% ⊦ mklp(n2, n3, lpf, m).size = n3; (s)% ⊦ mklp(n2, n3, lpf, m).ref-size = n2; (s)% ⊦ (gchs ++ ki) ∪ gchs0 = (gchs ∪ gchs0) ++ ki; (s)% ⊦ gchs ∪ ∅ = gchs; (s)%una: ⊦ (gchs ∪ gchs0) ∪ gchs1 = gchs ∪ gchs0 ∪ gchs1; from specification set-union[gc-heap-rename-gc-heap-base-keyindex-set]%unc: ⊦ gchs ∪ gchs0 = gchs0 ∪ gchs; from specification set-union[gc-heap-rename-gc-heap-base-keyindex-set] Used terms: n0