| # gndx0 = # lax0, # gndx1 = # lax1, ri[nodes(gstore ↓, ginval)[@(n, n0, n1)].key] = @(n, n0, n1), gstore[n] = groupblock(gndx0 + mkgnode(nd, m, boolvar, boolvar0) ' + gndx1, lax0 + @(n0, n1) ' + lax1, m0), inv-flashsize(gndx0 + mkgnode(nd, m, boolvar, boolvar0) ' + gndx1, lax0 + @(n0, n1) ' + lax1), n ∈ gstore, nodes(gstore ↓, ginval)[@(n, n0, n1)].key ∈ ri, @(n0, n1) ∈ prefixn(valid-group-nodes(gndx0 + mkgnode(nd, m, boolvar, boolvar0) ' + gndx1), lax0 + @(n0, n1) ' + lax1) ⊦ dups(lax0 + lax1), dups(lax0), dups(lax1), n ∈ ginval, @(n0, n1) ∈ lax0, @(n0, n1) ∈ lax1, nd.key ∈ ri ∧ ri[nd.key] = @(n, n0, n1) |
⊦ adr ∈ nodes(gstore, ginval) → nodes(gstore, ginval)[adr] = gstore[adr].nd
# gndx1 = # lax1, # gndx0 = # lax0, gstore[n] = groupblock(gndx0 + mkgnode(nd, m, boolvar, boolvar0) ' + gndx1, lax0 + @(n0, n1) ' + lax1, m0), ri[gstore ↓[@(n, n0, n1)].nd.key] = @(n, n0, n1), inv-flashsize(gndx0 + mkgnode(nd, m, boolvar, boolvar0) ' + gndx1, lax0 + @(n0, n1) ' + lax1), @(n0, n1) ∈ prefixn(valid-group-nodes(gndx0 + mkgnode(nd, m, boolvar, boolvar0) ' + gndx1), lax0 + @(n0, n1) ' + lax1), gstore ↓[@(n, n0, n1)].nd.key ∈ ri, n ∈ gstore, @(n, n0, n1) ∈ nodes(gstore ↓, ginval) ⊦ dups(lax1), dups(lax0), dups(lax0 + lax1), @(n0, n1) ∈ lax1, @(n0, n1) ∈ lax0, n ∈ ginval, nd.key ∈ ri ∧ ri[nd.key] = @(n, n0, n1)
Used simplifier rules: nodes-gstore-in: ⊦ adr ∈ nodes(gstore, ginval) ↔ ¬ ¬(adr ∈ gstore ∧ ¬ adr.lnum ∈ ginval);%down-store-adr-in-explicit: ⊦ @(m0, m1, m2) ∈ gstore ↓ ↔ m0 ∈ gstore ∧ @(m1, m2) ∈ gstore ↓[m0].ladrlist;%down-store-at: ⊦ n ∈ gstore → gstore ↓[n] = gstore[n] ↓;%down-block-explicit: ⊦ groupblock(gndx, lax, m0) ↓ = groupblock (prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), m0);% ⊦ ¬ adr ∈ fs → fs[adr] = (∅)[adr]; (s)% ⊦ @(m, m0, m1).lnum = m; (s)% ⊦ groupblock(gndx, lax, m).ladrlist = lax; (s) Used terms: @(n, n0, n1), ginval, gstore ↓