| # avol = n2 + n0, # lpt4 = n2 + n0, # avol1 = n2 + n0, lpt4[n0] = mklp(0, m1, lpf, m2), bleb = nobuffer, lpt = lpt0, m0 = n0, avol-replay-lpt-unchanged(avol1, avol, lpt4, log0), awbuf-inv(avol1, nobuffer), awbuf-inv(avol, nobuffer), synced(avol1), synced(avol) ⊦ ⟪if synced(avol) ∧ m0 < # avol ∧ buffered(m0) ≠ bleb then avol[m0] := unmapped else abort; n1 := n0 + 1⟫ ( n1 ≤ # avol1 ∧ awbuf-inv(avol, nobuffer) ∧ replay-lpt(lpt4, log0, n0)[n0, mklp(0, 0, LP_FREE, m2)] = replay-lpt(lpt4, log0, n1) ∧ avol-replay-lpt-unchanged(avol1, avol, lpt4, log0) ∧ # avol1 < n2 + n1), lpf = LP_INDEX_NODES, lpf = LP_FREE, n2 = 0, n0 ∈ log0 |
# avol1 = n2 + n0, # lpt4 = n2 + n0, # avol = n2 + n0, lpt4[n0] = mklp(0, m1, lpf, m2), bleb = nobuffer, lpt = lpt0, m0 = n0, avol-replay-lpt-unchanged(avol1, avol, lpt4, log0), awbuf-inv(avol, nobuffer), awbuf-inv(avol1, nobuffer), synced(avol), synced(avol1) ⊦ ⟪avol[m0] := unmapped; n1 := n0 + 1⟫ ( n1 ≤ # avol1 ∧ awbuf-inv(avol, nobuffer) ∧ replay-lpt(lpt4, log0, n0)[n0, mklp(0, 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: ⊦ awbuf-inv(avol, nobuffer) → (synced(avol) ↔ true); (ss)% ⊦ 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% ⊦ nobuffer ≠ buffered(m); (s)