| # gndx = # lax, # gndx1 = # lax1, gndx0[pos(@(m1, m2), lax0)] = mkgnode(nd, m5, boolvar, boolvar0), gstore ↓[n, groupblock(gndx + gndx1, lax + lax1, m0)][m] = groupblock(gndx2, lax2, m4), gstore[n] = groupblock(gndx, lax, m0), gstore[m] ↓ = groupblock(gndx0, lax0, m3), n ∈ gstore, m ∈ gstore, @(m1, m2) ∈ lax0, m ∈ gstore ↓[n, groupblock(gndx + gndx1, lax + lax1, m0)] ⊦ m = n, m ∈ ginval, nd = nodes(gstore ↓[n, groupblock(gndx + gndx1, lax + lax1, m0)], ginval)[@(m, m1, m2)] ∧ @(m1, m2) ∈ lax2 |
# gndx1 = # lax1, # gndx = # lax, gstore[n] = groupblock(gndx, lax, m0), gndx0[pos(@(m1, m2), lax0)] = mkgnode(nd, m5, boolvar, boolvar0), gstore[m] ↓ = groupblock(gndx0, lax0, m3), @(m1, m2) ∈ lax0, n ∈ gstore, m ∈ gstore ⊦ m = n, nd = nodes(gstore ↓, ginval)[@(m, m1, m2)], m ∈ ginval
Used simplifier rules: down-store-at: ⊦ n ∈ gstore → gstore ↓[n] = gstore[n] ↓;%down-store-in: ⊦ n ∈ gstore ↓ ↔ n ∈ gstore;%nodes-write-at-other: n ∈ gstore ⊦ n ≠ m0 → nodes(gstore[n, gblock], ginval)[@(m0, m1, m2)] = nodes(gstore, ginval)[@(m0, m1, m2)];%⊦ groupblock(gndx, lax, m) = groupblock(gndx0, lax0, m0) ↔ gndx = gndx0 ∧ lax = lax0 ∧ m = m0; (ws)% ⊦ n ≠ n0 → (n ∈ gstore[n0, gblock] ↔ n ∈ gstore); (s)% ⊦ n ≠ n0 → gstore[n0, gblock][n] = gstore[n]; (s)