| # buf = (x + a ').flashsize ⊦ abs-nodes(buf, m, x + a ', lax + ladr ', false) ↔ (∃ buf0, buf1. buf = buf0 + buf1 ∧ abs-nodes(buf0, m, x, lax, false) ∧ abs-node(buf1, a) ∧ ladr = @(# buf0 + m, 2 * NODE_HEADER_SIZE + a.alignedsize)) |
# buf = (x + a ').flashsize, abs-nodes(buf, m, x + a ', lax + ladr ', false) ⊦ ∃ buf0, buf1. buf = buf0 + buf1 ∧ abs-nodes(buf0, m, x, lax, false) ∧ abs-node(buf1, a) ∧ ladr = @(# buf0 + m, 2 * NODE_HEADER_SIZE + a.alignedsize)
Used simplifier rules: abs-nodes-append-h: ⊦ abs-nodes(buf0, m, x0, lax0, false) → ( abs-nodes(buf0 + buf1, m, x0 + x1, lax0 + lax1, weak) ↔ abs-nodes(buf1, m + # buf0, x1, lax1, weak));%abs-nodes-one-abs-node: ⊦ abs-node(buf, a) → (abs-nodes(buf, m, a ', ladr ', false) ↔ ladr = @(m, a.flashsize));%inj-adr: ⊦ @(m0, m1) = @(m2, m3) ↔ m0 = m2 ∧ m1 = m3;% ⊦ #(buf + buf0) = # buf + # buf0; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ nd.flashsize = 2 * NODE_HEADER_SIZE + nd.alignedsize; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]%a: ⊦ (x + y) + z = x + y + z; from specification list