| # x1 = # lax1, # x = # lax, st[n, mkblock(x + x1, lax + lax1, m)][m0] = mkblock(x2, lax2, m5), st[n] = mkblock(x, lax, m3), st[m0] = mkblock(x0, lax0, m4), m0 = n, n ∈ st, m0 ∈ st, @(m1, m2) ∈ lax0 ⊦ x2[pos(@(m1, m2), lax2)] = x0[pos(@(m1, m2), lax0)], dups(lax + lax1), dups(lax), dups(lax1) |
# x0 = # lax0, # x1 = # lax1, st[n] = mkblock(x0, lax0, m4), @(m1, m2) ∈ lax0, n ∈ st ⊦ (x0 + x1)[pos(@(m1, m2), lax0)] = x0[pos(@(m1, m2), lax0)], dups(lax0 + lax1), dups(lax0), dups(lax1)
Used simplifier rules: a: ⊦ ¬ dups(lax + lax0) → ¬ dups(lax) ∧ ¬ dups(lax0); (forward) from specification list-dup[laddress-list]%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ ladr ∈ lax → pos(ladr, lax + lax0) = pos(ladr, lax); (s)%⊦ mkblock(x, lax, m) = mkblock(x0, lax0, m0) ↔ x = x0 ∧ lax = lax0 ∧ m = m0; (ws)% ⊦ st[n, ablock][n] = ablock; (s)