| # lax = # gndx1 + # gndx, jvalid ↔ false, gstore2[n] = groupblock(gndx1 + gndx, lax, m), valid-group-nodes(gndx1) = valid-group-nodes(gndx1 + gndx), inv(gstore2 \ ginval), inv(groupblock(gndx1 + gndx, lax, m)), n ∈ gstore2 ⊦ ⟪gndx2 := gndx1; ax := ax0 + prefixn(# gndx1, lax).to-adr(n); if gndx2.last.end then jvalid := true else {ax := ax.butlast; gndx2 := gndx2.butlast}⟫ ( (∃ gndx3. # lax = # gndx2 + # gndx3 ∧ gndx1 + gndx = gndx2 + gndx3 ∧ ax = ax0 + prefixn(# gndx2, lax).to-adr(n) ∧ valid-group-nodes(gndx2) = valid-group-nodes(gndx2 + gndx3) ∧ (jvalid → # gndx2 = valid-group-nodes(gndx2 + gndx3))) ∧ (jvalid ⊃ 0;# gndx2) < # gndx1), gndx1 = [], n ∈ ginval |
# lax = # gndx1 + # gndx, jvalid ↔ false, gstore2[n] = groupblock(gndx1 + gndx, lax, m), gndx2 = gndx1, valid-group-nodes(gndx1) = valid-group-nodes(gndx1 + gndx), inv(groupblock(gndx1 + gndx, lax, m)), inv(gstore2 \ ginval), n ∈ gstore2 ⊦ ⟪ax := ax0 + prefixn(# gndx1, lax).to-adr(n); if gndx2.last.end then jvalid := true else {ax := ax.butlast; gndx2 := gndx2.butlast}⟫ ( (∃ gndx3. # lax = # gndx2 + # gndx3 ∧ gndx1 + gndx = gndx2 + gndx3 ∧ ax = ax0 + prefixn(# gndx2, lax).to-adr(n) ∧ valid-group-nodes(gndx2) = valid-group-nodes(gndx2 + gndx3) ∧ (jvalid → # gndx2 = valid-group-nodes(gndx2 + gndx3))) ∧ (jvalid ⊃ 0;# gndx2) < # gndx1), gndx1 = [], n ∈ ginval