| # lax = # gndx, lax.to-adr(lnum) = ax, jvalid0 ↔ boolvar0, gstore2[lnum] = groupblock(gndx, lax, m), fi0 = ri, gstore = gstore1, gstore0 = gstore2, jro = ginval, nx = nx0, p_os = ns, pmaxino = maxino, inv(groupblock(gndx, lax, m)), inv(gstore2 \ ginval), ri-cons(ri, nodes(gstore2 ↓, ginval)), lnum ∈ gstore2 ⊦ ⟪err := ESUCCESS; ndx := []; while err = ESUCCESS ∧ ax ≠ [] do {/* (prepost-gc-referenced-nodes : invariant (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → (∃ ax0, gndx0. ax` = ax0 + ax ∧ gndx` = gndx0 + gndx ∧ # ax` = # gndx` ∧ # ax = # gndx ∧ ndx = nodes(gstore0 ↓, jro)[referenced-adrs(ax0, fi0)])) wfbound (err = ESUCCESS ⊃ # ax;0)) */; let jvalid = ?, adr0 = ? in {let adr = ax.head, gnd = gndx.head in let key = gnd.nd.key in {index_index_lookup#(key, fi0, fi, jro, gstore0, gstore, nx, pmaxino, p_os, jvalid0; jvalid, adr0; err); if err = ESUCCESS ∧ jvalid ∧ adr0 = adr then ndx := ndx + gnd.nd}; if err = ESUCCESS then {ax := ax.tail; gndx := gndx.tail}}}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ndx = nodes(gstore2 ↓, ginval)[referenced-adrs(lax.to-adr(lnum), ri)])), lnum ∈ ginval |
# lax = # gndx, lax.to-adr(lnum) = ax, jvalid0 ↔ boolvar0, gstore2[lnum] = groupblock(gndx, lax, m), err = ESUCCESS, fi0 = ri, gstore = gstore1, gstore0 = gstore2, jro = ginval, nx = nx0, p_os = ns, pmaxino = maxino, inv(gstore2 \ ginval), inv(groupblock(gndx, lax, m)), ri-cons(ri, nodes(gstore2 ↓, ginval)), lnum ∈ gstore2 ⊦ ⟪ndx := []; while err = ESUCCESS ∧ ax ≠ [] do {/* (prepost-gc-referenced-nodes : invariant (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → (∃ ax0, gndx0. ax` = ax0 + ax ∧ gndx` = gndx0 + gndx ∧ # ax` = # gndx` ∧ # ax = # gndx ∧ ndx = nodes(gstore0 ↓, jro)[referenced-adrs(ax0, fi0)])) wfbound (err = ESUCCESS ⊃ # ax;0)) */; let jvalid = ?, adr0 = ? in {let adr = ax.head, gnd = gndx.head in let key = gnd.nd.key in {index_index_lookup#(key, fi0, fi, jro, gstore0, gstore, nx, pmaxino, p_os, jvalid0; jvalid, adr0; err); if err = ESUCCESS ∧ jvalid ∧ adr0 = adr then ndx := ndx + gnd.nd}; if err = ESUCCESS then {ax := ax.tail; gndx := gndx.tail}}}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ndx = nodes(gstore2 ↓, ginval)[referenced-adrs(lax.to-adr(lnum), ri)])), lnum ∈ ginval