| # lax1 = # gndx1, # lax = # gndx, gstore[n] = groupblock(gndx, lax, m), gstore[n, groupblock(gndx + gndx1, lax + lax1, m0)][@(n, m2, m3)] = mkgnode(nd, m4, boolvar, boolvar0), transaction(ndx, gndx1), @(m2, m3) ∈ lax1, n ∈ gstore ⊦ nd = nodes(gstore, ginval)[lax1.to-adr(n), ndx][@(n, m2, m3)], dups(lax1), dups(lax), dups(lax + lax1), n ∈ ginval |
⊦ # ax = # ndx ∧ adr ∈ ax ∧ ¬ dups(ax) → fs[ax, ndx][adr] = ndx[pos(adr, ax)]
# lax = # gndx, # lax1 = # gndx1, # lax1.to-adr(n) = # ndx, gstore[n, groupblock(gndx + gndx1, lax + lax1, m0)][@(n, m2, m3)] = mkgnode(nd, m4, boolvar, boolvar0), gstore[n] = groupblock(gndx, lax, m), transaction(ndx, gndx1), n ∈ gstore, @(m2, m3) ∈ lax1, @(n, m2, m3) ∈ lax1.to-adr(n) ⊦ nd = ndx[pos(@(n, m2, m3), lax1.to-adr(n))], dups(lax + lax1), dups(lax), dups(lax1), dups(lax1.to-adr(n)), n ∈ ginval
Used simplifier rules: ⊦ # lax.to-adr(n) = # lax; (s)% ⊦ # gndx = n ∧ transaction(ndx, gndx) → (# ndx = n ↔ true); (ss)% ⊦ @(m, m0, m1) ∈ lax.to-adr(n) ↔ m = n ∧ @(m0, m1) ∈ lax; (ws)% ⊦ dups(lax.to-adr(n)) ↔ dups(lax); (s) Used terms: @(n, m2, m3), ndx, lax1.to-adr(n), nodes(gstore, ginval)