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