| gstore ↓[m, groupblock(prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), m0)][m1] = groupblock(gndx0, lax0, m4), gstore[m] = groupblock(gndx, lax, n0), gstore[m1] ↓ = groupblock(gndx1, lax1, m5), m1 ∈ gstore, m ∈ gstore, valid-group-nodes(gndx) ≤ n0, n0 ≤ m0, valid-group-nodes(gndx) ≤ m0 ⊦ m1 ∈ ginval, (@(m2, m3) ∈ lax0 ↔ @(m2, m3) ∈ lax1) ∧ ( @(m2, m3) ∈ lax0 → nodes(gstore ↓[m, groupblock(prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), m0)], ginval)[@(m1, m2, m3)] = nodes(gstore ↓, ginval)[@(m1, m2, m3)]) |
gstore[m] = groupblock(gndx, lax, n0), gstore ↓[m, groupblock(prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), m0)][m1] = groupblock(gndx0, lax0, m4), m1 = m, gstore[m1] ↓ = groupblock(gndx1, lax1, m5), m ∈ gstore, m1 ∈ gstore, valid-group-nodes(gndx) ≤ m0, n0 ≤ m0, valid-group-nodes(gndx) ≤ n0 ⊦ m1 ∈ ginval, (@(m2, m3) ∈ lax0 ↔ @(m2, m3) ∈ lax1) ∧ ( @(m2, m3) ∈ lax0 → nodes(gstore ↓[m, groupblock(prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), m0)], ginval)[@(m1, m2, m3)] = nodes(gstore ↓, ginval)[@(m1, m2, m3)])
Used simplifier rules: down-store-at: ⊦ n ∈ gstore → gstore ↓[n] = gstore[n] ↓;%down-store-in: ⊦ n ∈ gstore ↓ ↔ n ∈ gstore;%nodes-write-at-other: n ∈ gstore ⊦ n ≠ m0 → nodes(gstore[n, gblock], ginval)[@(m0, m1, m2)] = nodes(gstore, ginval)[@(m0, m1, m2)];% ⊦ n ≠ n0 → gstore[n0, gblock][n] = gstore[n]; (s)%⊦ groupblock(gndx, lax, m) = groupblock(gndx0, lax0, m0) ↔ gndx = gndx0 ∧ lax = lax0 ∧ m = m0; (ws) Used formulas: m1 = m