| # gndx1 = # lax1, # gndx = # lax, gstore[n] = groupblock(gndx, lax, m0), prefixn(valid-group-nodes(gndx), gndx)[pos(@(m1, m2), lax)] = mkgnode(nd, m5, boolvar, boolvar0), @(m1, m2) ∈ prefixn(valid-group-nodes(gndx), lax), n ∈ gstore ⊦ nd = nodes(gstore ↓[n, groupblock(gndx + gndx1, lax + lax1, m0)], ginval)[@(n, m1, m2)], n ∈ ginval |
⊦ adr ∈ nodes(gstore, ginval) → nodes(gstore, ginval)[adr] = gstore[adr].nd
# gndx = # lax, # gndx1 = # lax1, prefixn(valid-group-nodes(gndx), gndx)[pos(@(m1, m2), lax)] = mkgnode(nd, m5, boolvar, boolvar0), gstore[n] = groupblock(gndx, lax, m0), n ∈ gstore, @(m1, m2) ∈ prefixn(valid-group-nodes(gndx), lax), @(n, m1, m2) ∈ nodes(gstore ↓[n, groupblock(gndx + gndx1, lax + lax1, m0)], ginval) ⊦ nd = gstore ↓[n, groupblock(gndx + gndx1, lax + lax1, m0)][@(n, m1, m2)].nd, n ∈ ginval
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;% ⊦ ¬ adr ∈ fs → fs[adr] = (∅)[adr]; (s)% ⊦ groupblock(gndx, lax, m).ladrlist = lax; (s)% ⊦ ladr ∈ lax + lax0 ↔ ladr ∈ lax ∨ ladr ∈ lax0; (s)% ⊦ ladr ∈ prefixn(n, lax) → ladr ∈ lax; (ss)%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ @(m, m0, m1).lnum = m; (s) Used terms: @(n, m1, m2), ginval, gstore ↓[n, groupblock(gndx + gndx1, lax + lax1, m0)]