| # ndx = # gndx, ∀ n. n < # gndx → gndx[n].nd = (ndx + nd ' + ndx1)[n], gndx = [] ∨ gndx.head.start ∧ (∀ n0. (n0 ≠ 0 ∧ n0 < # gndx → ¬ gndx[n0].start) ∧ (n0 < # gndx → ¬ gndx[n0].end)) ⊦ ndx1 = [], (gndx + mkgnode(nd, n, ndx = [], false) ').head.start ∧ (n0 ≠ 0 ∧ ¬ # gndx < n0 → ¬ (gndx + mkgnode(nd, n, ndx = [], false) ')[n0].start) ∧ (¬ # gndx < n0 → ¬ (gndx + mkgnode(nd, n, ndx = [], false) ')[n0].end) ∧ (¬ # gndx < n1 → (gndx + mkgnode(nd, n, ndx = [], false) ')[n1].nd = (ndx + nd ' + ndx1)[n1]) |
# ndx = # gndx, gndx + mkgnode(nd, n, ndx = [], false) ' = gnd + gndx0, ∀ n. n < # gndx → gndx[n].nd = (ndx + nd ' + ndx1)[n], gndx = [] ∨ gndx.head.start ∧ (∀ n0. (n0 ≠ 0 ∧ n0 < # gndx → ¬ gndx[n0].start) ∧ (n0 < # gndx → ¬ gndx[n0].end)) ⊦ gndx + mkgnode(nd, n, ndx = [], false) ' = [], ndx1 = [], gnd.start ∧ (n0 ≠ 0 ∧ ¬ # gndx < n0 → ¬ (gndx + mkgnode(nd, n, ndx = [], false) ')[n0].start) ∧ (¬ # gndx < n0 → ¬ (gndx + mkgnode(nd, n, ndx = [], false) ')[n0].end) ∧ (¬ # gndx < n1 → (gndx + mkgnode(nd, n, ndx = [], false) ')[n1].nd = (ndx + nd ' + ndx1)[n1])
Used simplifier rules: ⊦ gndx + gndx0 = [] ↔ gndx = [] ∧ gndx0 = []; (as)% ⊦ gnd ' ≠ []; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]%gndx ≠ [] ⊦ gnd = gndx.head ∧ gndx0 = gndx.tail ↔ gndx = gnd + gndx0; (elim) Used terms: gndx + mkgnode(nd, n, ndx = [], false) ', gnd, gndx0