| elems nx ∩ ginval = ∅, inv(gstore \ ginval), elems nx ⊆ dom gstore ⊦ ⟪gjournal_restore_log#(nx, ri, fi, ginval, gstore, gstore0, nx0, maxino, ns, boolvar0; ax; err)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ax = abs-log(nx, gstore ↓))) |
jvalid ↔ boolvar0, fi0 = ri, gstore = gstore1, gstore0 = gstore2, jro = ginval, log = ax, nx = nx1, nx0 = nx2, p_os = ns, pmaxino = maxino, elems nx2 ∩ ginval = ∅, inv(gstore2 \ ginval), elems nx2 ⊆ dom gstore2 ⊦ ⟪log := []; err := ESUCCESS; while nx0 ≠ [] ∧ err = ESUCCESS do {/* (term-restore-log: invariant elems nx0 ⊆ dom gstore0 ∧ elems nx0 ∩ jro = ∅ ∧ inv(gstore0) wfbound # nx0) */; gjournal_remove_nonend_blocks#(nx0.head, fi0, fi, jro, gstore0, gstore, nx, pmaxino, p_os, jvalid; log; err); nx0 := nx0.tail}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → log = abs-log(nx2, gstore2 ↓)))
Used simplifier rules: gjournal_restore_log# (JNL, PRI, PFI, PINVAL, PSTORE, PSTORE0, PNL, PMAXINO, P_OS, ISYNCED ; LOG ; ERR ) {LOG := []; ERR := ESUCCESS; while JNL ≠ [] ∧ ERR = ESUCCESS do {/* (term-restore-log : invariant elems JNL ⊆ dom PSTORE ∧ elems JNL ∩ PINVAL = ∅ ∧ inv(PSTORE) wfbound # JNL) */; gjournal_remove_nonend_blocks# (JNL.head, PRI, PFI, PINVAL, PSTORE, PSTORE0, PNL, PMAXINO, P_OS, ISYNCED ; LOG ; ERR); JNL := JNL.tail} };