| # ax1 = # gndx, # lax = # gndx0 + # gndx, lax.to-adr(lnum) = ax + ax1, gstore2[lnum] = groupblock(gndx0 + gndx, lax, m), ax1 ≠ [], gndx ≠ [], inv(gstore2 \ ginval), inv(groupblock(gndx0 + gndx, lax, m)), ri-cons(ri, nodes(gstore2 ↓, ginval)), lnum ∈ gstore2, ¬ lnum ∈ ginval ⊦ ⟪index_index_lookup#(gndx.head.nd.key, ri, fi, ginval, gstore2, gstore, nx, pmaxino, p_os, jvalid0; jvalid, adr0; err); ndx := nodes(gstore2 ↓, ginval)[referenced-adrs(ax, ri)]; if err = ESUCCESS ∧ jvalid ∧ adr0 = ax1.head then ndx := ndx + gndx.head.nd '; ax := ax1; gndx1 := gndx0 + gndx; if err = ESUCCESS then {ax := ax.tail; gndx := gndx.tail}⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → (∃ ax0, gndx0. lax.to-adr(lnum) = ax0 + ax ∧ gndx1 = gndx0 + gndx ∧ # ax = # gndx ∧ ndx = nodes(gstore2 ↓, ginval)[referenced-adrs(ax0, ri)])) ∧ (err = ESUCCESS ⊃ # ax;0) < # ax1) |
# lax = # gndx0 + # gndx, # ax1 = # gndx, lax.to-adr(lnum) = ax + ax1, gstore2[lnum] = groupblock(gndx0 + gndx, lax, m), ax1 = adr + ax2, inv(groupblock(gndx0 + gndx, lax, m)), inv(gstore2 \ ginval), ri-cons(ri, nodes(gstore2 ↓, ginval)), lnum ∈ gstore2 ⊦ ⟪index_index_lookup#(gndx.head.nd.key, ri, fi, ginval, gstore2, gstore, nx, pmaxino, p_os, jvalid0; jvalid, adr0; err); ndx := nodes(gstore2 ↓, ginval)[referenced-adrs(ax, ri)]; if err = ESUCCESS ∧ jvalid ∧ adr0 = adr then ndx := ndx + gndx.head.nd '; ax := ax1; gndx1 := gndx0 + gndx; if err = ESUCCESS then {ax := ax.tail; gndx := gndx.tail}⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → (∃ ax0, gndx0. lax.to-adr(lnum) = ax0 + ax ∧ gndx1 = gndx0 + gndx ∧ # ax = # gndx ∧ ndx = nodes(gstore2 ↓, ginval)[referenced-adrs(ax0, ri)])) ∧ (err = ESUCCESS ⊃ # ax;0) < # ax1), ax1 = [], gndx = [], lnum ∈ ginval
Used simplifier rules: ax ≠ [] ⊦ adr = ax.head ∧ ax0 = ax.tail ↔ ax = adr + ax0; (elim) Used terms: ax1, adr, ax2