| # buf = # vtbl1 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), # buf = # vtbl0 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), is-encoded-rec(vtbl0, buf), is-encoded-rec(vtbl1, buf), v ∈ vtbl0, ∀ vtbl, buf, vtbl1. # vtbl < # vtbl0 → # buf = # vtbl1 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ # buf = # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ is-encoded-rec(vtbl, buf) ∧ is-encoded-rec(vtbl1, buf) → vtbl = vtbl1 ⊦ vtbl0 = vtbl1 |
⊦ v ∈ vtbl ↔ (∃ n, vtbl0. vtbl = vtbl0[v, n] ∧ ¬ v ∈ vtbl0)
# buf = # vtbl0 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), # buf = # vtbl1 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE), v ∈ vtbl0 ↔ (∃ n, vtbl1. vtbl0 = vtbl1[v, n] ∧ ¬ v ∈ vtbl1), is-encoded-rec(vtbl1, buf), is-encoded-rec(vtbl0, buf), v ∈ vtbl0, ∀ vtbl, buf, vtbl1. # vtbl < # vtbl0 → # buf = # vtbl1 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ # buf = # vtbl * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ is-encoded-rec(vtbl, buf) ∧ is-encoded-rec(vtbl1, buf) → vtbl = vtbl1 ⊦ vtbl0 = vtbl1
Used terms: v, vtbl0