| orphans0 = orphans ⊦ ⟪persistence_io_encode_orphans#(EB_PAGE_SIZE, LEB_SIZE; orphans, buf; err)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded-pad(orphans0, # orphans0, buf) ∧ # buf ≤ LEB_SIZE)) |
m1 = LEB_SIZE, m2 = EB_PAGE_SIZE, orphans0 = orphans ⊦ ⟪if # orphans * ENCODED_NAT_SIZE > m1 then err := ENOSPC else {err := ESUCCESS; buf := mkbuf(align↑(# orphans * ENCODED_NAT_SIZE, m2)); let m0 = 0, m = ? in while err = ESUCCESS ∧ orphans ≠ ∅ do {/* (prepost-encode-orphans : invariant (err = ESUCCESS ∨ ⌊err⌋ ) ∧ is-aligned(# buf, m2) ∧ orphans ⊆ orphans` ∧ # buf ≤ m1 ∧ ( err = ESUCCESS → m0 + # orphans * ENCODED_NAT_SIZE ≤ # buf ∧ is-encoded(orphans` \ orphans, subarray(buf, 0, m0))) wfbound # orphans) */; choose n with n ∈ orphans in {encode_nat#(n, m0; buf, m; err); m0 := m0 + ENCODED_NAT_SIZE; orphans := orphans -- n}}}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded-pad(orphans0, # orphans0, buf) ∧ # buf ≤ LEB_SIZE))
Used simplifier rules: encode-orphans: ⊦ ;