| # vtbl1 = m0 + 1, is-encoded(m, subarray(buf, (ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE)) + ENCODED_VOLID_SIZE, ENCODED_NAT_SIZE)), is-encoded(v, subarray(buf, ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), ENCODED_VOLID_SIZE)), is-encoded(vtbl0, buf), is-encoded((m0 + 1) + # vtbl, subarray(buf, 0, ENCODED_NAT_SIZE)), is-encoded-rec(vtbl, subarray(buf, ENCODED_NAT_SIZE, # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE))), is-encoded-rec (vtbl1, subarray (buf, ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) * m0 + ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE)), 2 * ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) + ENCODED_VOLID_SIZE ≤ # buf, ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) + ENCODED_VOLID_SIZE ≤ # buf, 2 * ENCODED_NAT_SIZE + (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) * (m0 + # vtbl) + ENCODED_VOLID_SIZE ≤ # buf, vtbl ⊥ vtbl1, err0 = ESUCCESS → ENCODED_NAT_SIZE ≤ # buf ∧ n3 = ENCODED_NAT_SIZE, err0 = ESUCCESS ∨ ⌊err0⌋ ⊦ vtbl1 = ∅, ∃ vtbl2. vtbl[v, m] ⊥ vtbl2 ∧ # vtbl[v, m] = 1 + # vtbl ∧ # vtbl2 = m0 ∧ ENCODED_NAT_SIZE + (# vtbl2 + # vtbl[v, m]) * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ≤ # buf ∧ is-encoded-rec(vtbl[v, m], subarray(buf, ENCODED_NAT_SIZE, # vtbl[v, m] * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE))) ∧ is-encoded-rec (vtbl2, subarray (buf, ENCODED_NAT_SIZE + # vtbl[v, m] * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), # vtbl2 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE))) |
# vtbl1 = m0 + 1, is-encoded((m0 + 1) + # vtbl, subarray(buf, 0, ENCODED_NAT_SIZE)), is-encoded(vtbl0, buf), is-encoded(v, subarray(buf, ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), ENCODED_VOLID_SIZE)), is-encoded(m, subarray(buf, (ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE)) + ENCODED_VOLID_SIZE, ENCODED_NAT_SIZE)), is-encoded-rec (vtbl1, subarray (buf, ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) * m0 + ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE)), is-encoded-rec(vtbl, subarray(buf, ENCODED_NAT_SIZE, # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE))), 2 * ENCODED_NAT_SIZE + (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) * (m0 + # vtbl) + ENCODED_VOLID_SIZE ≤ # buf, ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) + ENCODED_VOLID_SIZE ≤ # buf, 2 * ENCODED_NAT_SIZE + # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) + ENCODED_VOLID_SIZE ≤ # buf, vtbl ⊥ vtbl1, err0 = ESUCCESS → ENCODED_NAT_SIZE ≤ # buf ∧ n3 = ENCODED_NAT_SIZE, err0 = ESUCCESS ∨ ⌊err0⌋ ⊦ vtbl1 = ∅, vtbl[v, m] ⊥ vtbl1 -- v ∧ # vtbl[v, m] = 1 + # vtbl ∧ #(vtbl1 -- v) = m0 ∧ ENCODED_NAT_SIZE + (#(vtbl1 -- v) + # vtbl[v, m]) * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ≤ # buf ∧ is-encoded-rec(vtbl[v, m], subarray(buf, ENCODED_NAT_SIZE, # vtbl[v, m] * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE))) ∧ is-encoded-rec (vtbl1 -- v, subarray (buf, ENCODED_NAT_SIZE + # vtbl[v, m] * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), #(vtbl1 -- v) * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE)))
Used terms: vtbl1 -- v