| # gndx1 = # lax1, # gndx = # lax, # ndx = # lax1, gndx1.head = mkgnode(nd, m1, boolvar, boolvar0), gndx1.last = mkgnode(nd0, m2, boolvar1, boolvar2), gstore[n] = groupblock(gndx, lax, m0), n ∈ gstore, ∀ n. n < # lax1 → gndx1[n].nd = ndx[n], gndx1 = [] ∨ boolvar ∧ boolvar2 ∧ (∀ n0. (n0 ≠ 0 ∧ n0 < # lax1 → ¬ gndx1[n0].start) ∧ (n0 + 1 < # lax1 → ¬ gndx1[n0].end)) ⊦ dups(lax1), dups(lax), dups(lax + lax1), nodes-cons(lax1.to-adr(n), ndx, gstore[n, groupblock(gndx + gndx1, lax + lax1, m)], ginval), n ∈ ginval |
⊦ nodes-cons(ax, ndx, gstore, ginval) ↔ # ax = # ndx ∧ (∀ n. n < # ax → ax[n] ∈ gstore ∧ ¬ ax[n].lnum ∈ ginval ∧ gstore[ax[n]].nd = ndx[n])
# ndx = # lax1, # gndx = # lax, # gndx1 = # lax1, gndx1.head = mkgnode(nd, m1, boolvar, boolvar0), gndx1.last = mkgnode(nd0, m2, boolvar1, boolvar2), gstore[n] = groupblock(gndx, lax, m0), n ∈ gstore, ∀ n. n < # lax1 → gndx1[n].nd = ndx[n], gndx1 = [] ∨ boolvar ∧ boolvar2 ∧ (∀ n0. (n0 ≠ 0 ∧ n0 < # lax1 → ¬ gndx1[n0].start) ∧ (n0 + 1 < # lax1 → ¬ gndx1[n0].end)) ⊦ dups(lax + lax1), dups(lax), dups(lax1), n ∈ ginval, # lax1.to-adr(n) = # ndx ∧ (∀ n0. n0 < # lax1.to-adr(n) → lax1.to-adr(n)[n0] ∈ gstore[n, groupblock(gndx + gndx1, lax + lax1, m)] ∧ ¬ lax1.to-adr(n)[n0].lnum ∈ ginval ∧ gstore[n, groupblock(gndx + gndx1, lax + lax1, m)][lax1.to-adr(n)[n0]].nd = ndx[n0])
Used terms: ginval, gstore[n, groupblock(gndx + gndx1, lax + lax1, m)], ndx, lax1.to-adr(n)