| ⟨fail_or_success#(; ; err)⟩ (err = err2), # lpt = # avol, avol[m0, unmapped] = avol1, err2 = err1, m = m1, m0 = m2, m2 < # avol, m0 < # avol, awbuf-inv(avol, bleb), synced(avol), avol0 ↓ avol1 ⊦ ∃ err0. (⌊err0⌋ ∨ err0 = ESUCCESS) ∧ ⟨err := err0; if err = ESUCCESS then avol[m2] := mapped(mkbuf(0)) else {skip or avol[m2] := unmapped}⟩ (synced(avol) ∧ avol0 ↓ avol), buffered(m2) = bleb, err2 = ESUCCESS, avol0 ↓ avol |
⟨fail_or_success#(; ; err)⟩ (err = err2), # lpt = # avol, buffered(m2) ≠ bleb, err2 ≠ ESUCCESS, m2 < # avol, awbuf-inv(avol, bleb), synced(avol), avol0 ↓ avol[m2, unmapped], ¬ avol0[m2] ↓ avol[m2] ⊦ ∃ err0. (⌊err0⌋ ∨ err0 = ESUCCESS) ∧ ⟨err := err0; if err = ESUCCESS then avol[m2] := mapped(mkbuf(0)) else {skip or avol[m2] := unmapped}⟩ (synced(avol) ∧ avol0 ↓ avol)
Used simplifier rules: n < # avol0 ⊦ avol1 ↓ avol0[n, aleb] → (avol1 ↓ avol0 ↔ avol1[n] ↓ avol0[n]); (ss)% ⊦ m < n → (n ≤ m ↔ false); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)