| # 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 |
⊦ adr ∈ nodes(gstore, ginval) → nodes(gstore, ginval)[adr] = gstore[adr].nd
# gndx = # lax, # gndx1 = # lax1, gndx0[pos(@(m1, m2), lax0)] = mkgnode(nd, m5, boolvar, boolvar0), gstore[n] = groupblock(gndx, lax, m0), gstore[m] ↓ = groupblock(gndx0, lax0, m3), m ∈ gstore, n ∈ gstore, @(m1, m2) ∈ lax0, @(m, m1, m2) ∈ nodes(gstore ↓, ginval) ⊦ m = n, nd = gstore ↓[@(m, m1, m2)].nd, m ∈ ginval
Used simplifier rules: nodes-gstore-in: ⊦ adr ∈ nodes(gstore, ginval) ↔ ¬ ¬(adr ∈ gstore ∧ ¬ adr.lnum ∈ ginval);%down-store-adr-in-explicit-simp: ⊦ gstore[m0] ↓ = groupblock(gndx, lax, n0) ∧ @(m1, m2) ∈ lax → (@(m0, m1, m2) ∈ gstore ↓ ↔ m0 ∈ gstore ↓);%down-store-in: ⊦ n ∈ gstore ↓ ↔ n ∈ gstore;% ⊦ ¬ adr ∈ fs → fs[adr] = (∅)[adr]; (s)% ⊦ @(m, m0, m1).lnum = m; (s) Used terms: @(m, m1, m2), ginval, gstore ↓