| # buf = lptsize(# lpt, LEB_SIZE), buf0 = buf, err = ESUCCESS, lpt0 = lpt, n = 0 ⊦ ⟪while err = ESUCCESS ∧ n < # lpt do {/* (prepost-decode-lpt : invariant n ≤ # lpt ∧ # buf = lptsize(# lpt, LEB_SIZE) ∧ # lpt = # lpt` ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded(lpt, buf, n)) wfbound # lpt - n) */; let m = ? in decode_lprops#(n * ENCODED_LPROPS_SIZE, buf; lpt[n], m; err); n := n + 1}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf0 ∧ (err = ESUCCESS → is-encoded(lpt, buf) ∧ # lpt = # lpt0)) |
# buf = lptsize(# lpt, LEB_SIZE), buf0 = buf, err = ESUCCESS, lpt0 = lpt, n = 0 ⊦ n ≤ # lpt ∧ # buf = lptsize(# lpt, LEB_SIZE) ∧ # lpt = # lpt ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded(lpt, buf, n))
# buf = lptsize(# lpt2, LEB_SIZE), # buf = lptsize(# lpt, LEB_SIZE), # lpt = # lpt2, buf0 = buf, err = ESUCCESS, err0 = ESUCCESS, lpt = lpt1, lpt0 = lpt2, n = n0, n1 = 0, n < # lpt, n ≤ # lpt, err = ESUCCESS → is-encoded(lpt, buf, n), err = ESUCCESS ∨ ⌊err⌋ ⊦ ⟪let m = ? in decode_lprops#(n * ENCODED_LPROPS_SIZE, buf; lpt[n], m; err); n := n + 1⟫ ( ( n ≤ # lpt ∧ # buf = lptsize(# lpt, LEB_SIZE) ∧ # lpt = # lpt2 ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded(lpt, buf, n))) ∧ # lpt - n < # lpt1 - n0)
# buf = lptsize(# lpt2, LEB_SIZE), # buf = lptsize(# lpt, LEB_SIZE), # lpt = # lpt2, buf0 = buf, err0 = ESUCCESS, lpt0 = lpt2, n1 = 0, n ≤ # lpt, err = ESUCCESS → is-encoded(lpt, buf, n), err = ESUCCESS ∨ ⌊err⌋ ⊦ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf0 ∧ (err = ESUCCESS → is-encoded(lpt, buf) ∧ # lpt = # lpt0), err = ESUCCESS ∧ n < # lpt
Used formulas: n ≤ # lpt ∧ # buf = lptsize(# lpt, LEB_SIZE) ∧ # lpt = # lpt` ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded(lpt, buf, n)), # lpt - n = # lpt - n