| buf0 + buf1 = buf2 + buf3, # buf2 < # buf0, is-encoded(a, buf0), is-encoded(b, buf2) ⊦ is-encoded(b, subarray(buf0, 0, # buf2)), # buf0 = # buf2 ∧ a = b |
⊦ is-encoded(a, buf) → (is-encoded(b, buf) ↔ a = b)
buf0 + buf1 = buf2 + buf3, # buf2 < # buf0, is-encoded(a, buf0), is-encoded(b, buf2) ⊦ # buf0 = # buf2, is-encoded(b, subarray(buf0, 0, # buf2))
Used simplifier rules: is-encoded-unique: ⊦ is-encoded(a, buf) → (is-encoded(b, buf) ↔ a = b);% ⊦ ¬ n < n; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%# buf = n ⊦ subarray(buf, 0, n) = buf; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]%⊦ # buf = # buf0 → (buf + buf1 = buf0 + buf2 ↔ buf = buf0 ∧ buf1 = buf2); (ws)