| # lax1 = # gndx1, # lax = # gndx, gstore[n] = groupblock(gndx, lax, m), transaction(ndx, gndx1), n ∈ gstore ⊦ dups(lax + lax1), dups(lax), dups(lax1), n ∈ ginval, ∀ adr. (adr ∈ nodes(gstore[n, groupblock(gndx + gndx1, lax + lax1, m0)], ginval) ↔ adr ∈ nodes(gstore, ginval)[lax1.to-adr(n), ndx]) ∧ ( adr ∈ nodes(gstore[n, groupblock(gndx + gndx1, lax + lax1, m0)], ginval) → nodes(gstore[n, groupblock(gndx + gndx1, lax + lax1, m0)], ginval)[adr] = nodes(gstore, ginval)[lax1.to-adr(n), ndx][adr]) |
# lax = # gndx, # lax1 = # gndx1, gstore[n] = groupblock(gndx, lax, m), transaction(ndx, gndx1), n ∈ gstore ⊦ dups(lax + lax1), dups(lax), dups(lax1), n ∈ ginval, (adr ∈ gstore ∧ ¬ adr.lnum ∈ ginval ∨ adr ∈ lax1.to-adr(n) → (adr ∈ gstore ∨ adr ∈ lax1.to-adr(n)) ∧ ¬ adr.lnum ∈ ginval) ∧ ( (adr ∈ gstore ∨ adr ∈ lax1.to-adr(n)) ∧ ¬ adr.lnum ∈ ginval → nodes(gstore[n, groupblock(gndx + gndx1, lax + lax1, m0)], ginval)[adr] = nodes(gstore, ginval)[lax1.to-adr(n), ndx][adr])
Used simplifier rules: nodes-gstore-in: ⊦ adr ∈ nodes(gstore, ginval) ↔ ¬ ¬(adr ∈ gstore ∧ ¬ adr.lnum ∈ ginval);%a: ⊦ ¬ dups(lax + lax0) → ¬ dups(lax) ∧ ¬ dups(lax0); (forward) from specification list-dup[laddress-list]%# ax = # ndx ⊦ adr ∈ fs[ax, ndx] ↔ adr ∈ fs ∨ adr ∈ ax; (s)% ⊦ # gndx = n ∧ transaction(ndx, gndx) → (# ndx = n ↔ true); (ss)% ⊦ # lax.to-adr(n) = # lax; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]%# gndx = # lax1, # gndx0 = # lax, gstore[n].gndlist = gndx0, gstore[n].ladrlist = lax ⊦ n ∈ gstore → ( adr ∈ gstore[n, groupblock(gndx0 + gndx, lax + lax1, m)] ↔ adr ∈ gstore ∨ adr ∈ lax1.to-adr(n)); (s)% ⊦ groupblock(gndx, lax, m).ladrlist = lax; (s)% ⊦ groupblock(gndx, lax, m).gndlist = gndx; (s)