| (gndx0 + gndx1).head = mkgnode(nd0, m0, boolvar1, boolvar2), gndx0.head = mkgnode(nd1, m1, boolvar3, boolvar4), gndx0[n] = mkgnode(nd2, m2, boolvar5, boolvar6), gndx0[n0] = mkgnode(nd, m, boolvar, boolvar0), n0 < # gndx0, # gndx0 < # ndx, # gndx0 + # gndx1 < # ndx, ∀ n. n < # gndx0 + # gndx1 → (gndx0 + gndx1)[n].nd = ndx[n], gndx0 + gndx1 = [] ∨ boolvar1 ∧ (∀ n. (n ≠ 0 ∧ n < # gndx0 + # gndx1 → ¬ (gndx0 + gndx1)[n].start) ∧ (n < # gndx0 + # gndx1 → ¬ (gndx0 + gndx1)[n].end)) ⊦ nd = ndx[n0], ndx = [] |
gndx0.head = mkgnode(nd1, m1, true, boolvar4), gndx0[n] = mkgnode(nd2, m2, boolvar5, boolvar6), gndx0[n0] = mkgnode(nd, m, boolvar, boolvar0), n0 < # ndx, n0 < # gndx0, # gndx0 < # ndx, # gndx0 + # gndx1 < # ndx, n0 + 1 < # ndx, ∀ n. n < # gndx0 + # gndx1 → (gndx0 + gndx1)[n].nd = ndx[n], ∀ n. (n ≠ 0 ∧ n < # gndx0 + # gndx1 → ¬ (gndx0 + gndx1)[n].start) ∧ (n < # gndx0 + # gndx1 → ¬ (gndx0 + gndx1)[n].end) ⊦ gndx0 + gndx1 = [], gndx0 = [], nd = ndx[n0], ndx = []
Used simplifier rules: ⊦ mkgnode(nd, m, boolvar, boolvar0) = mkgnode(nd0, m0, boolvar1, boolvar2) ↔ nd = nd0 ∧ m = m0 ∧ (boolvar ↔ boolvar1) ∧ (boolvar0 ↔ boolvar2); (ws)% ⊦ gndx + gndx0 = [] ↔ gndx = [] ∧ gndx0 = []; (as)% ⊦ m +1 = m + 1; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]% ⊦ gndx ≠ [] → (gndx + gndx0).head = gndx.head; (s)% ⊦ # gndx = 0 ↔ gndx = []; (s)%transitivity: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification oelem[nat-set]%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic