| decode_vtbl#(BUF; ; VTBL, ERR) {VTBL := ∅; ERR := ESUCCESS; let N = ?, INDEX = 0, SIZE = ? in {decode_nat#(INDEX, BUF; N, SIZE; ERR); INDEX := INDEX + SIZE; while N ≠ 0 ∧ ERR = ESUCCESS do {/* (decode : invariant (ERR = ESUCCESS ∨ ⌊ERR⌋ ) ∧ ( ERR = ESUCCESS → (∃ vtbl1. VTBL ⊥ vtbl1 ∧ # vtbl1 + # VTBL = N` ∧ # vtbl1 = N ∧ # BUF ≥ ENCODED_NAT_SIZE + N` * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ INDEX = ENCODED_NAT_SIZE + # VTBL * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) ∧ is-encoded(N`, subarray(BUF, 0, ENCODED_NAT_SIZE)) ∧ is-encoded-rec(VTBL, subarray(BUF, ENCODED_NAT_SIZE, # VTBL * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE))) ∧ is-encoded-rec(vtbl1, subarray(BUF, INDEX, # vtbl1 * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE))))) wfbound N) */; let VOLID = ?, M = ? in {decode_volid#(INDEX, BUF; VOLID, SIZE; ERR); if ERR = ESUCCESS then {INDEX := INDEX + SIZE; decode_nat#(INDEX, BUF; M, SIZE; ERR); if ERR = ESUCCESS then {INDEX := INDEX + SIZE; VTBL[VOLID] := M}}}; N := N - 1}} } |