| # gndx = # lax, gstore[n] = groupblock(gndx, lax, n0), gstore ↓ [n, groupblock (prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + mkgnode(nd, m3, boolvar, boolvar0) '), prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ] [m ] = groupblock(gndx1, lax1, m5), gstore[m] ↓ = groupblock(gndx0, lax0, m4), m ∈ gstore ↓ [n, groupblock (prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + mkgnode(nd, m3, boolvar, boolvar0) '), prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ], @(m1, m2) ∈ lax0, m ∈ gstore, n ∈ gstore, n0 ≤ m0 ⊦ m ∈ ginval, nodes(gstore ↓, ginval)[@(m, m1, m2)] = nodes (gstore ↓ [n, groupblock (prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + mkgnode(nd, m3, boolvar, boolvar0) '), prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ], ginval) [@(m, m1, m2) ] ∧ @(m1, m2) ∈ lax1 |
⊦ n ≠ n0 → gstore[n0, gblock][n] = gstore[n]
# gndx = # lax, gstore ↓ [n, groupblock (prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + mkgnode(nd, m3, boolvar, boolvar0) '), prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ] [m ] = groupblock(gndx1, lax1, m5), gstore[n] = groupblock(gndx, lax, n0), m = n, gstore[m] ↓ = groupblock(gndx0, lax0, m4), n ∈ gstore, m ∈ gstore, @(m1, m2) ∈ lax0, m ∈ gstore ↓ [n, groupblock (prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + mkgnode(nd, m3, boolvar, boolvar0) '), prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ], n0 ≤ m0 ⊦ m ∈ ginval, nodes(gstore ↓, ginval)[@(m, m1, m2)] = nodes (gstore ↓ [n, groupblock (prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + mkgnode(nd, m3, boolvar, boolvar0) '), prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ], ginval) [@(m, m1, m2) ] ∧ @(m1, m2) ∈ lax1
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)];% ⊦ n ≠ n0 → (n ∈ gstore[n0, gblock] ↔ n ∈ gstore); (s)%⊦ groupblock(gndx, lax, m) = groupblock(gndx0, lax0, m0) ↔ gndx = gndx0 ∧ lax = lax0 ∧ m = m0; (ws) Used terms: m, groupblock (prefixn ((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + mkgnode(nd, m3, boolvar, boolvar0) '), prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0), n, gstore ↓