| # gndx = # lax, gstore[n] = groupblock(gndx, lax, n0), gstore[m] ↓ = groupblock(gndx0, lax0, m4), n ∈ gstore, m ∈ gstore, @(m1, m2) ∈ lax0, n0 ≤ m0 ⊦ m ∈ ginval, ( @(m, m1, m2).lnum ∈ 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, m1, m2).pos, @(m, m1, m2).size) ∈ 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, m1, m2).lnum ] .ladrlist) ∧ 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) ] |
# gndx = # lax, gstore[n] = groupblock(gndx, lax, n0), 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) ∈ 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 ] .ladrlist
Used simplifier rules: down-store-in: ⊦ n ∈ gstore ↓ ↔ n ∈ gstore;% ⊦ n ∈ gstore[n0, gblock] ↔ n = n0 ∨ n ∈ gstore; (ws)% ⊦ @(m, m0, m1).size = m1; (s)% ⊦ @(m, m0, m1).pos = m0; (s)% ⊦ @(m, m0, m1).lnum = m; (s)