| # gndx = # lax, gstore[n] = groupblock(gndx, lax, n0), adr = @(m, m1, m2), adr ∈ gstore ↓, n ∈ gstore, n0 ≤ m0 ⊦ m ∈ ginval, adr ∈ gstore ↓ [n, groupblock (prefixn((gnd.end ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + gnd '), prefixn((gnd.end ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ] ∧ nodes(gstore ↓, ginval)[adr] = nodes (gstore ↓ [n, groupblock (prefixn((gnd.end ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + gnd '), prefixn((gnd.end ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ], ginval) [adr ] |
# gndx = # lax, gstore[n] = groupblock(gndx, lax, n0), n ∈ gstore, m ∈ gstore, @(m1, m2) ∈ gstore[m] ↓.ladrlist, n0 ≤ m0 ⊦ m ∈ ginval, @(m, m1, m2) ∈ gstore ↓ [n, groupblock (prefixn((gnd.end ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + gnd '), prefixn((gnd.end ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ] ∧ nodes(gstore ↓, ginval)[@(m, m1, m2)] = nodes (gstore ↓ [n, groupblock (prefixn((gnd.end ⊃ # lax + 1;valid-group-nodes(gndx)), gndx + gnd '), prefixn((gnd.end ⊃ # lax + 1;valid-group-nodes(gndx)), lax + ladr '), m0) ], ginval) [@(m, m1, m2) ]
Used simplifier rules: 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] ↓;