| # lpt4 = # avol1, # avol = # avol1, lpt4[n0].ref-size = 0, lpt4[n0].flags ≠ LP_INDEX_NODES, lpt4[n0].flags ≠ LP_FREE, n0 < # avol1, 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 < (# avol1 - n0) + n1) |
# avol = # avol1, # lpt4 = # avol1, # avol1 = n2 + n0, lpt4[n0].ref-size = 0, n0 < # avol1, avol-replay-lpt-unchanged(avol1, avol, lpt4, log0), awbuf-inv(avol1, nobuffer), awbuf-inv(avol, nobuffer), synced(avol1), synced(avol), n0 ≤ # avol1 ⊦ ⟪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), lpt4[n0].flags = LP_INDEX_NODES, lpt4[n0].flags = LP_FREE, n0 ∈ log0
Used simplifier rules: ⊦ m < n → m ≤ n; (s)%n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # avol1, n0, n