| # gndx0 = # lax0 + # lax2, # ndx = # lax0 + # lax2 + 1, # gndx = # lax, (mkgnode(nd, m1, true, boolvar0) ' + gndx0).last = mkgnode(nd0, m2, boolvar1, true), gstore[m6] = groupblock(gndx1, lax1, m9), gstore[n, groupblock(gndx + mkgnode(nd, m1, true, boolvar0) ' + gndx0, lax + lax0 + @(m4, m5) ' + lax2, m)][@(m6, m7, m8)] = mkgnode(nd1, m3, boolvar, boolvar2), gstore[n] = groupblock(gndx, lax, m0), (@(n, m4, m5) ' + lax2.to-adr(n))[# lax0 - # lax0.to-adr(n)] = @(m6, m7, m8), n ∈ gstore, # lax0 ≤ # gndx0, ∀ n0. ¬ # gndx0 < n0 → (mkgnode(nd, m1, true, boolvar0) ' + gndx0)[n0].nd = ndx[n0], ∀ n0. (n0 ≠ 0 ∧ ¬ # gndx0 < n0 → ¬ (mkgnode(nd, m1, true, boolvar0) ' + gndx0)[n0].start) ∧ (n0 < # gndx0 → ¬ (mkgnode(nd, m1, true, boolvar0) ' + gndx0)[n0].end) ⊦ # lax0 < # lax0.to-adr(n), dups(lax + lax0), dups(lax0 + lax2), dups(lax2), dups((lax + lax0) + lax2), dups(lax), dups(lax0), @(m4, m5) ∈ lax2, @(m4, m5) ∈ lax0, @(m4, m5) ∈ lax, n ∈ ginval, (m6 ∈ gstore ∧ @(m7, m8) ∈ lax1 ∨ m6 = n ∧ @(m7, m8) ∈ lax0 ∨ @(m6, m7, m8) = @(n, m4, m5) ∨ m6 = n ∧ @(m7, m8) ∈ lax2) ∧ nd1 = ndx[# lax0] |
# gndx0 = # lax0 + # lax2, # ndx = # lax0 + # lax2 + 1, # gndx1 = # lax1, (mkgnode(nd, m1, true, boolvar0) ' + gndx0).last = mkgnode(nd0, m2, boolvar1, true), gstore[m6, groupblock(gndx1 + mkgnode(nd, m1, true, boolvar0) ' + gndx0, lax1 + lax0 + @(m7, m8) ' + lax2, m)][@(m6, m7, m8)] = mkgnode(nd1, m3, boolvar, boolvar2), gstore[m6] = groupblock(gndx1, lax1, m9), m6 ∈ gstore, # lax0 ≤ # gndx0, ∀ n0. ¬ # gndx0 < n0 → (mkgnode(nd, m1, true, boolvar0) ' + gndx0)[n0].nd = ndx[n0], ∀ n0. (n0 ≠ 0 ∧ ¬ # gndx0 < n0 → ¬ (mkgnode(nd, m1, true, boolvar0) ' + gndx0)[n0].start) ∧ (n0 < # gndx0 → ¬ (mkgnode(nd, m1, true, boolvar0) ' + gndx0)[n0].end) ⊦ nd1 = ndx[# lax0], dups((lax1 + lax0) + lax2), dups(lax1), dups(lax0 + lax2), dups(lax1 + lax0), dups(lax2), dups(lax0), @(m7, m8) ∈ lax2, @(m7, m8) ∈ lax0, @(m7, m8) ∈ lax1, m6 ∈ ginval
Used simplifier rules: a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]%a: ⊦ ¬ dups(lax + lax0) → ¬ dups(lax) ∧ ¬ dups(lax0); (forward) from specification list-dup[laddress-list]%⊦ groupblock(gndx, lax, m) = groupblock(gndx0, lax0, m0) ↔ gndx = gndx0 ∧ lax = lax0 ∧ m = m0; (ws)% ⊦ m ≤ m; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ @(m, m0, m1) = @(m2, m3, m4) ↔ m = m2 ∧ m0 = m3 ∧ m1 = m4; (ws)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ (adr ' + ax)[0] = adr; (s)% ⊦ m - m = 0; (s)% ⊦ # lax.to-adr(n) = # lax; (s)