| ax = ax0, err = ESUCCESS, ri0 = ri, replay-safe(ax0, fs, ri) ⊦ ⟪while err = ESUCCESS ∧ ax ≠ [] do {/* (replaylog-prog : invariant (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → (∃ ax0. ax` = ax0 + ax ∧ replay-safe(ax, fs, ri) ∧ ri = replay-log(ax0, fs`, ri`))) wfbound # ax) */; let adr = ax.head in aubifs_replayone#(adr, fi, ro, fo, fs, log, boolvar; err, ri); ax := ax.tail}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ri = replay-log(ax0, fs, ri0))) |
ax = ax1, ax2 = ax0, err = ESUCCESS, err0 = ESUCCESS, ri0 = ri1, replay-safe(ax0, fs, ri1), err = ESUCCESS → (∃ ax0. ax2 = ax0 + ax ∧ replay-safe(ax, fs, ri) ∧ ri = replay-log(ax0, fs, ri1)), err = ESUCCESS ∨ ⌊err⌋ ⊦ ⟪let adr = ax.head in aubifs_replayone#(adr, fi, ro, fo, fs, log, boolvar; err, ri); ax := ax.tail⟫ ( ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → (∃ ax0. ax2 = ax0 + ax ∧ replay-safe(ax, fs, ri) ∧ ri = replay-log(ax0, fs, ri1)))) ∧ # ax < # ax1), ax = []
Used simplifier rules: ⊦ ax + [] = ax; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ ax = ax0 + ax ↔ ax0 = []; (s)% ⊦ replay-log([], fs, ri) = ri; (s) Used formulas: (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → (∃ ax0. ax` = ax0 + ax ∧ replay-safe(ax, fs, ri) ∧ ri = replay-log(ax0, fs`, ri`))), # ax = # ax