| # gndx0 = m1 + 1, gndx + mkgnode(nd, n, boolvar, true) ' = mkgnode(nd0, m, true, boolvar1) ' + gndx0, gndx0[m1] = mkgnode(nd1, m0, boolvar0, boolvar2), # gndx + 1 < # ndx, mkgnode(nd, n, boolvar, true) ∈ gndx0, mkgnode(nd0, m, true, boolvar1) ∈ gndx, ¬ # gndx < # gndx0 → ¬ boolvar2, ¬ # gndx < # gndx0 → ¬ boolvar0, ∀ n0. ¬ # gndx < n0 → (mkgnode(nd0, m, true, boolvar1) ' + gndx0)[n0].nd = ndx[n0] ⊦ # gndx0 = 0, gndx0 = [], ndx = [] |
# gndx0 = m1 + 1, gndx + mkgnode(nd, n, boolvar, true) ' = mkgnode(nd0, m, true, boolvar1) ' + gndx0, gndx0[m1] = mkgnode(nd1, m0, boolvar0, boolvar2), # gndx + 1 < # ndx, mkgnode(nd, n, boolvar, true) ∈ gndx0, mkgnode(nd0, m, true, boolvar1) ∈ gndx, m1 < # gndx → ¬ boolvar2, m1 < # gndx → ¬ boolvar0, ∀ n0. ¬ # gndx < n0 → (mkgnode(nd0, m, true, boolvar1) ' + gndx0)[n0].nd = ndx[n0] ⊦ gndx0 = [], ndx = []
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m < n + 1 ↔ ¬ n < m; (s)% ⊦ # gndx = 0 ↔ gndx = []; (s)