| gndx = [], inv(gstore2), n ∈ gstore2, ¬ n ∈ ginval ⊦ ⟪index_read_gblock_nodes#(n, fi0, fi, ginval, gstore2, gstore, nx, pmaxino, p_os, jvalid0; log, gndx; err); if err = ESUCCESS then {jvalid := false; while ¬ jvalid ∧ gndx ≠ [] do {/* (term-remove-nonend-blocks: invariant # gndx ≤ # log ∧ inv(gstore2) wfbound (jvalid ⊃ 0;# gndx)) */; if gndx.last.end then jvalid := true else {log := log.butlast; gndx := gndx.butlast}}}⟫ true |
jvalid ↔ jvalid0, ax = log, gndx = [], gstore0 = gstore2, jro = ginval, lnum = n, inv(gstore2), n ∈ gstore2 ⊦ ⟪if lnum ∈ gstore0 ∧ ¬ lnum ∈ jro then {fail_or_success#(; ; err); if err = ESUCCESS then ax := ax + gstore0[lnum].ladrlist.to-adr(lnum), gndx := gndx + gstore0[lnum].gndlist else ax := ?, gndx := ?} else abort; if err = ESUCCESS then {jvalid := false; log := ax; while ¬ jvalid ∧ gndx ≠ [] do {/* (term-remove-nonend-blocks: invariant # gndx ≤ # log ∧ inv(gstore2) wfbound (jvalid ⊃ 0;# gndx)) */; if gndx.last.end then jvalid := true else {log := log.butlast; gndx := gndx.butlast}}}⟫ true, n ∈ ginval
Used simplifier rules: index_read_gblock_nodes# (LNUM, PRI, PFI, PINVAL, PSTORE, PSTORE0, PNL, PMAXINO, P_OS, ISYNCED ; ADRLIST, GNDLIST ; ERR ) {if LNUM ∈ PSTORE ∧ ¬ LNUM ∈ PINVAL then {fail_or_success#(; ; ERR); if ERR = ESUCCESS then ADRLIST := ADRLIST + PSTORE[LNUM].ladrlist.to-adr(LNUM), GNDLIST := GNDLIST + PSTORE[LNUM].gndlist else ADRLIST := ?, GNDLIST := ?} else abort };