| # ndx = # gndx, gndx + mkgnode(nd, n, ndx = [], false) ' = mkgnode(nd0, m, boolvar, true) ' + gndx0, gndx.head = mkgnode(nd2, m1, true, false), gndx0.last = mkgnode(nd, n, ndx = [], false), (mkgnode(nd0, m, true, true) ' + gndx0)[n1] = mkgnode(nd1, m0, boolvar1, boolvar2), mkgnode(nd0, m, boolvar, true) ∈ gndx, mkgnode(nd, n, ndx = [], false) ∈ gndx0, ∀ n. n < # gndx → gndx[n].nd = (ndx + nd ' + ndx1)[n] ⊦ gndx = [], mkgnode(nd, n, ndx = [], false) = mkgnode(nd0, m, boolvar, true), ndx1 = [] |
Used simplifier rules: ⊦ gnd + gndx = gnd ' + gndx; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]% ⊦ gnd ' + gndx = gnd0 ' + gndx0 ↔ gnd = gnd0 ∧ gndx = gndx0; (ws)% ⊦ #(gnd ' + gndx) = (# gndx)+1; (s)% ⊦ m +1 = m + 1; (s)%⊦ mkgnode(nd, m, boolvar, boolvar0) = mkgnode(nd0, m0, boolvar1, boolvar2) ↔ nd = nd0 ∧ m = m0 ∧ (boolvar ↔ boolvar1) ∧ (boolvar0 ↔ boolvar2); (ws)%gndx ≠ [] ⊦ gnd = gndx.head ∧ gndx0 = gndx.tail ↔ gndx = gnd + gndx0; (elim) Used terms: gndx, gnd, gndx1