| abs-padding(buf1) ∧ abs-nodes(buf0, m + # buf1, a ', @(m0, m1) ' + lax0, weak) ∨ @(m0, m1) ' + lax0 = @(m, 2 * NODE_HEADER_SIZE + a.alignedsize) ' ∧ abs-node(buf1, a) ∧ abs-nodes(buf0, m + # buf1, [], [], weak) ⊦ ∃ buf3, buf2. buf1 + buf0 = buf3 + buf2 ∧ ( abs-padding(buf3) ∧ abs-nodes(buf2, m + # buf3, a ', @(m0, m1) ' + lax0, weak) ∨ m0 = m ∧ m1 = # buf3 ∧ abs-node(buf3, a) ∧ abs-nodes(buf2, m + # buf3, [], lax0, weak)) |
abs-nodes(buf0, m + # buf1, a ', @(m0, m1) ' + lax0, weak), abs-padding(buf1) ⊦ ∃ buf3, buf2. buf1 + buf0 = buf3 + buf2 ∧ ( abs-padding(buf3) ∧ abs-nodes(buf2, m + # buf3, a ', @(m0, m1) ' + lax0, weak) ∨ m0 = m ∧ m1 = # buf3 ∧ abs-node(buf3, a) ∧ abs-nodes(buf2, m + # buf3, [], lax0, weak))
Used simplifier rules: ls-abs-node-buf-size: ⊦ abs-node(buf, nd) → # buf = nd.alignedsize + 2 * NODE_HEADER_SIZE;%abs-nodes-elems-empty-adr-empty-h: ⊦ abs-nodes(buf, m, [], lax, weak) → lax = [];% ⊦ ladr ' = ladr0 ' + lax ↔ ladr = ladr0 ∧ lax = []; (ws)%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ @(m, m0) = @(m1, m2) ↔ m = m1 ∧ m0 = m2; (ws)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ abs-node(buf0, nd) ∧ buf0 + buf1 = buf + buf2 → ¬ abs-padding(buf); (s)%⊦ abs-node(buf0, nd0) ∧ buf0 + buf2 = buf1 + buf3 → (abs-node(buf1, nd1) ↔ buf0 = buf1 ∧ nd0 = nd1); (s)% ⊦ buf + buf0 = buf + buf1 ↔ buf0 = buf1; (s)%c: ⊦ m + n = n + m; from specification nat-basic