| avols[default-volid][m2] = mapped(buf0, n1), buf1 = buf2, err = ESUCCESS, m2 < # avols[default-volid], ebm-cons(avols), ebm-vol-inv(abs(avols[default-volid])), default-volid ∈ avols, m1 + n2 ≤ LEB_SIZE, n3 + n2 ≤ # buf2 ⊦ (m1 + n2 ≤ #(abs(avols[default-volid])[m2].data + mkempbuf(LEB_SIZE - # abs(avols[default-volid])[m2].data)) ∧ n3 + n2 ≤ # buf2) ∧ (abs(avols[default-volid])[m2].mapped? ∧ m2 < # abs(avols[default-volid]) ∧ default-volid ∈ avols) ∧ LEB_SIZE ≥ # abs(avols[default-volid])[m2].data ∧ abs(avols[default-volid])[m2].mapped? ∧ m2 < # abs(avols[default-volid]) ∧ default-volid ∈ avols |
avols[default-volid][m2] = mapped(buf0, n1), m2 < # avols[default-volid], ebm-cons(avols), ebm-vol-inv(abs(avols[default-volid])), default-volid ∈ avols, m1 + n2 ≤ LEB_SIZE, n3 + n2 ≤ # buf2, m1 + n2 ≤ n1 + (LEB_SIZE - n1) ⊦ ∃ buf, n. mapped(buf0, n1) = mapped(buf, n)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ ¬ n + (m - n) < m; (s)% ⊦ m < n → n ≠ 0; (s)%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ m ≤ n ↔ ¬ n < m; (ss)%⊦ v ∈ avols ∧ m < # avols[v] ∧ avols[v][m] = mapped(buf, n) ∧ ebm-cons(avols) → n ≤ LEB_SIZE; (ss)% ⊦ # subarray(buf, m, n) = n; (s)% ⊦ mapped(buf).data = buf; (s)% ⊦ abs(mapped(buf, n)) = mapped(subarray(buf, 0, n)); (s)% ⊦ n ≥ m ↔ m ≤ n; (s)% ⊦ # abs(evol) = # evol; (s)% ⊦ abs(leb).mapped? ↔ (∃ buf, n. leb = mapped(buf, n)); (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ # mkempbuf(n) = n; (s)% ⊦ #(buf + buf0) = # buf + # buf0; (s)% ⊦ n < # evol → abs(evol)[n] = abs(evol[n]); (s)