| # gndx0 + 1 = # ndx, gndx0.last = mkgnode(nd3, m3, boolvar6, true), prefixn(m1, gndx0)[n0 - 1] = mkgnode(nd2, m2, boolvar4, true), (mkgnode(nd, m, true, boolvar0) ' + prefixn(m1, gndx0))[n1] = mkgnode(nd0, m0, boolvar, boolvar1), gndx0[n0 - 1] = mkgnode(nd1, m4, false, false), n0 < # gndx0, m1 < # gndx0, n0 < # ndx, n0 ≤ m1, 1 ≤ # gndx0, ∀ n2. n2 < # ndx → (mkgnode(nd, m, true, boolvar0) ' + gndx0)[n2].nd = ndx[n2] ⊦ # ndx = 1, gndx0 = [], n0 = 0, ndx = [] |
Used simplifier rules: ⊦ m + 1 ≠ 0; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ m + 1 ≤ n ↔ m < n; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%transitivity: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification oelem[nat-set]%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ m < n ∧ m < # gndx → prefixn(n, gndx)[m] = gndx[m]; (s)% ⊦ m < n → n ≠ 0; (s)% ⊦ m +1 = m + 1; (s)% ⊦ m + n < m0 → m + n < m0 + n0; (s)% ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s)%⊦ mkgnode(nd, m, boolvar, boolvar0) = mkgnode(nd0, m0, boolvar1, boolvar2) ↔ nd = nd0 ∧ m = m0 ∧ (boolvar ↔ boolvar1) ∧ (boolvar0 ↔ boolvar2); (ws)%n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n0, m5