| ⟨fail_or_success#(; ; err)⟩ (err = err2), # lpt = # avol, nx + m1 = nx1, avol[m3] = mapped(buf), buffered(m1) = bleb0, err2 = ESUCCESS, err2 = err1, m = m2, m0 = # avol[m3].data, m1 = m3, avol[m3].mapped?, m3 < # avol, awbuf-inv(avol, bleb), synced(avol), avol0 ↓ avol ⊦ ∃ err0. (⌊err0⌋ ∨ err0 = ESUCCESS) ∧ ⟨err := err0; if err = ESUCCESS then nx := nx + m3 ', bleb := buffered(m3)⟩ (nx1 = nx), nx1 = nx |
⟨fail_or_success#(; ; err)⟩ (err = ESUCCESS), # lpt = # avol, nx + m3 ' = nx1, avol[m3] = mapped(buf), m3 < # avol, awbuf-inv(avol, bleb), synced(avol), avol0 ↓ avol ⊦ ∃ err0. (⌊err0⌋ ∨ err0 = ESUCCESS) ∧ ⟨err := err0; if err = ESUCCESS then nx := nx + m3 ', bleb := buffered(m3)⟩ (nx1 = nx)
Used simplifier rules: ⊦ n ∈ n0 ' ↔ n = n0; (s)% ⊦ n ∈ nx + nx0 ↔ n ∈ nx ∨ n ∈ nx0; (s)% ⊦ mapped(buf) = mapped(buf0) ↔ buf = buf0; (s)%in-15: ⊦ nx + n ' = nx0 → n ∈ nx0; (forward) from specification list[nat-list-set]% ⊦ aleb.mapped? ↔ (∃ buf. aleb = mapped(buf)); (as)%a: ⊦ (nx + nx0) + nx1 = nx + nx0 + nx1; from specification list[nat-list-set]% ⊦ n ' ≠ []; (s)% ⊦ nx = nx + nx0 ↔ nx0 = []; (s)% ⊦ nx + n = nx + n '; (s)