| # avol1 = n2 + n0, # lpt4 = n2 + n0, # avol = n2 + n0, lpt4[n0].ref-size = 0, lpt4[n0].flags ≠ LP_FREE, lpt4[n0].flags ≠ LP_INDEX_NODES, n2 ≠ 0, avol-replay-lpt-unchanged(avol1, avol, lpt4, log0), awbuf-inv(avol, nobuffer), awbuf-inv(avol1, nobuffer), synced(avol), synced(avol1), ¬ n0 ∈ log0 ⊦ ⟪awbuf_unmap#(n0, adr, m, log, lpt0, ns, nobuffer, isbuf; avol); n1 := n0 + 1⟫ ( n1 ≤ # avol1 ∧ awbuf-inv(avol, nobuffer) ∧ replay-lpt(lpt4, log0, n0)[n0, mklp(lpt4[n0].ref-size, 0, LP_FREE, lpt4[n0].gcheapidx)] = replay-lpt(lpt4, log0, n1) ∧ avol-replay-lpt-unchanged(avol1, avol, lpt4, log0) ∧ # avol1 < n2 + n1) |
# avol = n2 + n0, # lpt4 = n2 + n0, # avol1 = n2 + n0, lpt4[n0] = mklp(m0, m1, lpf, m2), m0 = 0, avol-replay-lpt-unchanged(avol1, avol, lpt4, log0), awbuf-inv(avol1, nobuffer), awbuf-inv(avol, nobuffer), synced(avol1), synced(avol) ⊦ ⟪awbuf_unmap#(n0, adr, m, log, lpt0, ns, nobuffer, isbuf; avol); n1 := n0 + 1⟫ ( n1 ≤ # avol1 ∧ awbuf-inv(avol, nobuffer) ∧ replay-lpt(lpt4, log0, n0)[n0, mklp(m0, 0, LP_FREE, m2)] = replay-lpt(lpt4, log0, n1) ∧ avol-replay-lpt-unchanged(avol1, avol, lpt4, log0) ∧ # avol1 < n2 + n1), lpf = LP_FREE, lpf = LP_INDEX_NODES, n2 = 0, n0 ∈ log0
Used simplifier rules: ⊦ ((m = lp.ref-size ∧ m0 = lp.size) ∧ lpf = lp.flags) ∧ m1 = lp.gcheapidx ↔ lp = mklp(m, m0, lpf, m1); (elim) Used terms: lpt4[n0], m0, m1, lpf, m2