| # lax = # gndx0 + # gndx2 + 1, # ax2 = # gndx2, lax.to-adr(lnum) = ax1 + adr1 ' + ax2, jvalid ↔ nd.key ∈ ri, gstore2[lnum] = groupblock(gndx0 + mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2, lax, m), ax = adr1 ' + ax2, err = err0, err = ESUCCESS, gndx = mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2, jvalid, ndx = nodes(gstore2 ↓, ginval)[referenced-adrs(ax1, ri)], inv(groupblock(gndx0 + mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2, lax, m)), inv(gstore2 \ ginval), ri-cons(ri, nodes(gstore2 ↓, ginval)), nd.key ∈ ri, lnum ∈ gstore2, err = ESUCCESS → jvalid → nd.key ∈ ri, ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ ⟪gndx := gndx.tail⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → (∃ ax0, gndx3. lax.to-adr(lnum) = ax0 + ax.tail ∧ gndx0 + mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2 = gndx3 + gndx ∧ # ax.tail = # gndx ∧ ndx = nodes(gstore2 ↓, ginval)[referenced-adrs(ax0, ri)])) ∧ ¬ # ax2 < (err = ESUCCESS ⊃ # ax.tail;0)), ax = [], lnum ∈ ginval, err = ESUCCESS ∧ jvalid ∧ ri[nd.key] = adr1 |
# ax2 = # gndx2, # lax = # gndx0 + # gndx2 + 1, lax.to-adr(lnum) = ax1 + adr1 ' + ax2, jvalid ↔ nd.key ∈ ri, gstore2[lnum] = groupblock(gndx0 + mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2, lax, m), ax = adr1 ' + ax2, err = ESUCCESS, err = err0, gndx = mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2, jvalid, ndx = nodes(gstore2 ↓, ginval)[referenced-adrs(ax1, ri)], inv(gstore2 \ ginval), inv(groupblock(gndx0 + mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2, lax, m)), ri-cons(ri, nodes(gstore2 ↓, ginval)), lnum ∈ gstore2, nd.key ∈ ri, err = ESUCCESS → jvalid → nd.key ∈ ri, ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ ax = [], gndx = [], lnum ∈ ginval, err = ESUCCESS ∧ jvalid ∧ ri[nd.key] = adr1, (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → (∃ ax0, gndx3. lax.to-adr(lnum) = ax0 + ax.tail ∧ gndx0 + mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2 = gndx3 + gndx.tail ∧ # ax.tail = # gndx.tail ∧ ndx = nodes(gstore2 ↓, ginval)[referenced-adrs(ax0, ri)])) ∧ ¬ # ax2 < (err = ESUCCESS ⊃ # ax.tail;0)
Used simplifier rules: ⊦ gndx + gndx0 = [] ↔ gndx = [] ∧ gndx0 = []; (as)% ⊦ gnd ' ≠ []; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]