| avols[default-volid][m] = mapped(buf1, n1), buf = buf0, m < # avols[default-volid], ebm-cons(avols), ebm-vol-inv(abs(avols[default-volid])), default-volid ∈ avols, m0 + n0 ≤ LEB_SIZE, n + n0 ≤ # buf0 ⊦ ⟪ebm_vol_read#(m, m0, n, n0, default-volid, avols; buf; err)⟫ ⟨ebm_avol_read#(m, m0, n, n0, abs(avols[default-volid]); buf0; err0)⟩ (buf = buf0 ∧ err = err0) |
avols[default-volid][m2] = mapped(buf1, n1), buf = buf0, m = m1, m0 = m2, n = n2, n0 = n3, v = default-volid, m2 < # avols[default-volid], ebm-cons(avols), ebm-vol-inv(abs(avols[default-volid])), default-volid ∈ avols, n3 + n2 ≤ # buf0, m1 + n2 ≤ LEB_SIZE ⊦ ⟪if avols[v][m0].mapped? ∧ m0 < # avols[v] ∧ m + n ≤ LEB_SIZE ∧ n0 + n ≤ # buf then ebm_read#(v, m0, m, n0, n, avols; buf; err) else abort⟫ ⟨ebm_avol_read#(m2, m1, n3, n2, abs(avols[default-volid]); buf0; err0)⟩ (buf = buf0 ∧ err = err0)
Used simplifier rules: ebm_vol_read#(LNUM, OFFSET, N0, N, VOLID, AVOLS; BUF; ERR) {if AVOLS[VOLID][LNUM].mapped? ∧ LNUM < # AVOLS[VOLID] ∧ OFFSET + N ≤ LEB_SIZE ∧ N0 + N ≤ # BUF then ebm_read#(VOLID, LNUM, OFFSET, N0, N, AVOLS; BUF; ERR) else abort };