| # orphans1 ≠ 0, # orphans2 ≠ 0, orphans1 ≠ ∅, orphans2 ≠ ∅, is-aligned(# buf, EB_PAGE_SIZE), is-encoded(orphans2 \ orphans1, subarray(buf, 0, m0)), n ∈ orphans1, n ∈ orphans2, # buf ≤ LEB_SIZE, # orphans2 * ENCODED_NAT_SIZE ≤ LEB_SIZE, m0 + # orphans1 * ENCODED_NAT_SIZE ≤ # buf, m0 + # orphans1 * ENCODED_NAT_SIZE ≤ LEB_SIZE, orphans1 ⊆ orphans2 ⊦ ⟪encode_nat#(n, m0; buf, m; err); m0 := m0 + ENCODED_NAT_SIZE; orphans := orphans1 -- n⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ is-aligned(# buf, EB_PAGE_SIZE) ∧ orphans ⊆ orphans2 ∧ # buf ≤ LEB_SIZE ∧ (err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans2 \ orphans, subarray(buf, 0, m0))) ∧ # orphans < # orphans1) |
n1 + encoding-size(n) ≤ # buf, buf0 = buf ⊦ ⟪encode_nat#(n, n1; buf, n0; err)⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf0 ∧ subarray(buf, 0, n1) = subarray(buf0, 0, n1) ∧ subarray(buf, n1 + encoding-size(n), # buf - n1 + encoding-size(n)) = subarray(buf0, n1 + encoding-size(n), # buf - n1 + encoding-size(n)) ∧ (err = ESUCCESS → is-encoded(n, subarray(buf, n1, encoding-size(n))) ∧ n0 = encoding-size(n)))
buf = buf, buf1 = buf, n2 = m0, n3 = n, is-aligned(# buf, EB_PAGE_SIZE), is-encoded(orphans2 \ orphans1, subarray(buf, 0, m0)), n ∈ orphans2, n ∈ orphans1, m0 + # orphans1 * ENCODED_NAT_SIZE ≤ LEB_SIZE, m0 + # orphans1 * ENCODED_NAT_SIZE ≤ # buf, # orphans2 * ENCODED_NAT_SIZE ≤ LEB_SIZE, # buf ≤ LEB_SIZE, m0 + encoding-size(n) ≤ # buf, orphans1 ⊆ orphans2 ⊦ [encode_nat#(n, m0; buf, m; err)] ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf1 ∧ subarray(buf, 0, n2) = subarray(buf1, 0, n2) ∧ subarray(buf, n2 + encoding-size(n3), # buf - n2 + encoding-size(n3)) = subarray(buf1, n2 + encoding-size(n3), # buf - n2 + encoding-size(n3)) ∧ (err = ESUCCESS → is-encoded(n3, subarray(buf, n2, encoding-size(n3))) ∧ m = encoding-size(n3)) → ⟪m0 := m0 + ENCODED_NAT_SIZE; orphans := orphans1 -- n⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ is-aligned(# buf, EB_PAGE_SIZE) ∧ orphans ⊆ orphans2 ∧ # buf ≤ LEB_SIZE ∧ (err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans2 \ orphans, subarray(buf, 0, m0))) ∧ # orphans < # orphans1)), # orphans1 = 0, # orphans2 = 0, orphans1 = ∅, orphans2 = ∅
Used simplifier rules: ⊦ encoding-size(n) = ENCODED_NAT_SIZE; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat% ⊦ m < n → n ≠ 0; (s)% ⊦ m + n < m + n0 ↔ n < n0; (s)% ⊦ m0 * m < m ↔ m0 = 0 ∧ m ≠ 0; (ws)%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult%mult-c: ⊦ m * n = n * m; from specification nat-mult%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%# buf = n ⊦ subarray(buf, 0, n) = buf; (s)