| # buf = (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) * # vtbl + ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE, # buf = # vtbl1 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), is-encoded-rec(vtbl[v, n], buf), is-encoded-rec(vtbl1, buf), ∀ vtbl2, buf, vtbl1. # vtbl2 < # vtbl[v, n] → # buf = # vtbl1 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ # buf = # vtbl2 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ is-encoded-rec(vtbl2, buf) ∧ is-encoded-rec(vtbl1, buf) → vtbl2 = vtbl1 ⊦ vtbl[v, n] = vtbl1, v ∈ vtbl |
vtbl ≠ ∅ ⊦ is-encoded-rec(vtbl, buf) ↔ (∃ v, buf0, buf1, buf2. v ∈ vtbl ∧ buf = buf0 + buf1 + buf2 ∧ is-encoded(v, buf0) ∧ is-encoded(vtbl[v], buf1) ∧ is-encoded-rec(vtbl -- v, buf2))
# buf = # vtbl1 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), # buf = (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) * # vtbl + ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE, is-encoded-rec(vtbl1, buf), ∃ v0, buf0, buf1, buf2. v0 ∈ vtbl[v, n] ∧ buf = buf0 + buf1 + buf2 ∧ is-encoded(v0, buf0) ∧ is-encoded(vtbl[v, n][v0], buf1) ∧ is-encoded-rec(vtbl[v, n] -- v0, buf2), ∀ vtbl2, buf, vtbl1. # vtbl2 < # vtbl[v, n] → # buf = # vtbl1 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ # buf = # vtbl2 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ is-encoded-rec(vtbl2, buf) ∧ is-encoded-rec(vtbl1, buf) → vtbl2 = vtbl1 ⊦ vtbl[v, n] = vtbl1, vtbl[v, n] = ∅, v ∈ vtbl
Used simplifier rules: ⊦ vtbl[v, n] ≠ ∅; (s) Used terms: buf, vtbl[v, n]