| gstore2[n] = groupblock(gndx, lax, m), log = abs-log(nx0, gstore2 ↓), elems(nx0 + n ' + nx2) ∩ ginval = ∅, inv(gstore2 \ ginval), n ∈ gstore2, elems(nx0 + n ' + nx2) ⊆ dom gstore2 ⊦ [gjournal_remove_nonend_blocks#(n, fi0, fi, ginval, gstore2, gstore, nx, pmaxino, p_os, jvalid; log; err)] ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → log = abs-log(nx0, gstore2 ↓) + prefixn(valid-group-nodes(gndx), lax).to-adr(n)) → ⟪nx := nx2⟫ ( (∃ nx1. nx0 + n ' + nx2 = nx1 + nx ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → log = abs-log(nx1, gstore2 ↓))) ∧ ¬ # nx2 < # nx)), n ∈ ginval |
gstore2[n] = groupblock(gndx, lax, m), log = abs-log(nx0, gstore2 ↓), elems(nx0 + n ' + nx2) ∩ ginval = ∅, inv(gstore2 \ ginval), inv(groupblock(gndx, lax, m)), n ∈ gstore2, elems(nx0 + n ' + nx2) ⊆ dom gstore2, ¬ n ∈ ginval ⊦ [gjournal_remove_nonend_blocks#(n, fi0, fi, ginval, gstore2, gstore, nx, pmaxino, p_os, jvalid; log; err)] ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → log = abs-log(nx0, gstore2 ↓) + prefixn(valid-group-nodes(gndx), lax).to-adr(n)) → ⟪nx := nx2⟫ ( (∃ nx1. nx0 + n ' + nx2 = nx1 + nx ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → log = abs-log(nx1, gstore2 ↓))) ∧ ¬ # nx2 < # nx))
Used simplifier rules: fwd-inv-gblock-rem: ⊦ inv(gstore \ ginval) ∧ n ∈ gstore ∧ ¬ n ∈ ginval ∧ gstore[n] = gblock → inv(gblock); (forward) from specification apersistence-base