| # ndx = # lax1, # gndx = # lax, # gndx1 = # lax1, gndx1.head = mkgnode(nd, m1, boolvar, boolvar0), gndx1.last = mkgnode(nd0, m2, boolvar1, boolvar2), gstore[n] = groupblock(gndx, lax, m0), n ∈ gstore, ∀ n. n < # lax1 → gndx1[n].nd = ndx[n], gndx1 = [] ∨ boolvar ∧ boolvar2 ∧ (∀ n0. (n0 ≠ 0 ∧ n0 < # lax1 → ¬ gndx1[n0].start) ∧ (n0 + 1 < # lax1 → ¬ gndx1[n0].end)) ⊦ dups(lax + lax1), dups(lax), dups(lax1), n ∈ ginval, # lax1.to-adr(n) = # ndx ∧ (∀ n0. n0 < # lax1.to-adr(n) → lax1.to-adr(n)[n0] ∈ gstore[n, groupblock(gndx + gndx1, lax + lax1, m)] ∧ ¬ lax1.to-adr(n)[n0].lnum ∈ ginval ∧ gstore[n, groupblock(gndx + gndx1, lax + lax1, m)][lax1.to-adr(n)[n0]].nd = ndx[n0]) |
# gndx1 = # lax1, # gndx = # lax, # ndx = # lax1, gndx1.head = mkgnode(nd, m1, true, boolvar0), gndx1.last = mkgnode(nd0, m2, boolvar1, true), gstore[n] = groupblock(gndx, lax, m0), n0 < # lax1, n ∈ gstore, ∀ n0. (n0 ≠ 0 ∧ n0 < # lax1 → ¬ gndx1[n0].start) ∧ (n0 + 1 < # lax1 → ¬ gndx1[n0].end), ∀ n. n < # lax1 → gndx1[n].nd = ndx[n] ⊦ gndx1 = [], lax1 = [], dups(lax + lax1), dups(lax), dups(lax1), n ∈ ginval, (lax1.to-adr(n)[n0] ∈ gstore ∨ lax1.to-adr(n)[n0] ∈ lax1.to-adr(n)) ∧ ¬ lax1.to-adr(n)[n0].lnum ∈ ginval ∧ gstore[n, groupblock(gndx + gndx1, lax + lax1, m)][lax1.to-adr(n)[n0]].nd = ndx[n0]
Used simplifier rules: ⊦ # [] = 0; (s)% ⊦ # lax = 0 ↔ lax = []; (s)%a: ⊦ ¬ dups(lax + lax0) → ¬ dups(lax) ∧ ¬ dups(lax0); (forward) from specification list-dup[laddress-list]%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%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)% ⊦ # lax.to-adr(n) = # lax; (s)