| # gndx = # lax, gstore ↓[@(n, m1, m2)] = mkgnode(nd0, m, boolvar1, boolvar2), gstore[n] = groupblock(gndx, lax, n0), n ∈ gstore, @(m1, m2) ∈ prefixn(valid-group-nodes(gndx), lax), n0 ≤ m0 ⊦ n ∈ ginval, @(n, 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), nd0 = 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) [@(n, m1, m2) ] ∧ @(m1, m2) ∈ prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr ') |
# gndx = # lax, gstore[n] = groupblock(gndx, lax, n0), gstore ↓[@(n, m1, m2)] = mkgnode(nd0, m, boolvar1, boolvar2), @(m1, m2) ∈ prefixn(valid-group-nodes(gndx), lax), n ∈ gstore, n0 ≤ m0 ⊦ n ∈ ginval, @(m1, m2) ∈ prefixn((boolvar0 ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr ')
Used simplifier rules: nodes-gstore-in: ⊦ adr ∈ nodes(gstore, ginval) ↔ ¬ ¬(adr ∈ gstore ∧ ¬ adr.lnum ∈ ginval);%down-store-write-same: ⊦ @(n, n0, n1) ∈ gstore ↓[n, gblock] ↔ @(n0, n1) ∈ gblock.ladrlist;%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]%# lax ≤ m ⊦ prefixn(m, lax) = lax; (s)%n ≤ # lax ⊦ prefixn(n, lax + lax0) = prefixn(n, lax); (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]%# gndx ≤ m ⊦ prefixn(m, gndx) = gndx; (s)%n ≤ # gndx ⊦ prefixn(n, gndx + gndx0) = prefixn(n, gndx); (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ @(m, m0, m1).lnum = m; (s)% ⊦ groupblock(gndx, lax, m).ladrlist = lax; (s)