| jvalid ↔ false, gstore2[n] = groupblock(gndx0, lax, m), ax = ax1 + gstore2[n].ladrlist.to-adr(n), ax1 = ax0, err = err0, err = ESUCCESS, gndx = gndx1 + gstore2[n].gndlist, gndx1 = [], inv(gstore2 \ ginval), inv(groupblock(gndx0, lax, m)), n ∈ gstore2, ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ ⟪while ¬ jvalid ∧ gndx ≠ [] do {/* (term-remove-nonend-blocks: invariant # gndx ≤ # ax ∧ inv(gstore2) wfbound (jvalid ⊃ 0;# gndx)) */; if gndx.last.end then jvalid := true else {ax := ax.butlast; gndx := gndx.butlast}}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ax = ax0 + prefixn(valid-group-nodes(gndx0), lax).to-adr(n))), n ∈ ginval |
gstore2[n] = groupblock(gndx0, lax, m), ax = ax0 + lax.to-adr(n), gndx = gndx0, ¬ jvalid, inv(gstore2 \ ginval), inv(groupblock(gndx0, lax, m)), n ∈ gstore2, ¬ n ∈ ginval ⊦ ⟪while ¬ jvalid ∧ gndx ≠ [] do {/* (term-remove-nonend-blocks: invariant # gndx ≤ # ax ∧ inv(gstore2) wfbound (jvalid ⊃ 0;# gndx)) */; if gndx.last.end then jvalid := true else {ax := ax.butlast; gndx := gndx.butlast}}⟫ (ax = ax0 + prefixn(valid-group-nodes(gndx0), lax).to-adr(n))
Used simplifier rules: ⊦ groupblock(gndx, lax, m).gndlist = gndx; (s)% ⊦ groupblock(gndx, lax, m).ladrlist = lax; (s)% ⊦ ¬ ⌊ESUCCESS⌋ ; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]% ⊦ [] + gndx = gndx; (s)