| avol0[n] = mapped(buf), n < # avol, abs(avol, bleb, wbuf, avol0, rofs) ⊦ avol[n].mapped? ↔ true |
# avol = # avol0, avol[n] = unmapped, avol0[n] = mapped(buf), n < # avol0, ∀ n. n < # avol0 → (buffered(n) ≠ bleb → avol[n] = avol0[n]) ∧ (¬ rofs ∧ buffered(n) = bleb → avol[n] = abs⊕(avol0[n], wbuf)) ∧ ( rofs ∧ buffered(n) = bleb → wbuf.offset = # avol0[n].data ∧ avol[n] = abs⊕(avol0[n], wbuf) ∨ wbuf.offset < # avol0[n].data ∧ wbuf.offset + wbuf.nbytes < # avol0[n].data ∧ avol[n] = avol0[n] ∧ subarray(wbuf.content, 0, wbuf.nbytes) = subarray(avol0[n].data, wbuf.offset, wbuf.nbytes)) ⊦
Used simplifier rules: abs-def: ⊦ abs(avol0, bleb, wbuf, avol1, rofs) ↔ # avol0 = # avol1 ∧ (∀ n. n < # avol0 → (buffered(n) ≠ bleb → avol0[n] = avol1[n]) ∧ ( ¬ rofs ∧ buffered(n) = bleb → avol0[n] = abs⊕(avol1[n], wbuf)) ∧ ( rofs ∧ buffered(n) = bleb → wbuf.offset = # avol1[n].data ∧ avol0[n] = abs⊕(avol1[n], wbuf) ∨ wbuf.offset < # avol1[n].data ∧ wbuf.offset + wbuf.nbytes < # avol1[n].data ∧ avol0[n] = avol1[n] ∧ subarray(wbuf.content, 0, wbuf.nbytes) = subarray (avol1[n].data, wbuf.offset, wbuf.nbytes)));% ⊦ m < n → n ≠ 0; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ aleb.mapped? ↔ aleb ≠ unmapped; (ss)