/export/starexec/sandbox2/solver/bin/starexec_run_FirstOrder /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES We consider the system theBenchmark. We are asked to determine termination of the following first-order TRS. !6220!6220 : [o * o] --> o U11 : [o * o] --> o U12 : [o] --> o U21 : [o * o * o] --> o U22 : [o * o] --> o U23 : [o] --> o U31 : [o * o] --> o U32 : [o] --> o U41 : [o * o * o] --> o U42 : [o * o] --> o U43 : [o] --> o U51 : [o * o * o] --> o U52 : [o * o] --> o U53 : [o] --> o U61 : [o * o] --> o U62 : [o] --> o U71 : [o * o] --> o U72 : [o] --> o a : [] --> o active : [o] --> o and : [o * o] --> o e : [] --> o i : [] --> o isList : [o] --> o isNeList : [o] --> o isNePal : [o] --> o isPal : [o] --> o isPalListKind : [o] --> o isQid : [o] --> o mark : [o] --> o nil : [] --> o o : [] --> o tt : [] --> o u : [] --> o active(!6220!6220(!6220!6220(X, Y), Z)) => mark(!6220!6220(X, !6220!6220(Y, Z))) active(!6220!6220(X, nil)) => mark(X) active(!6220!6220(nil, X)) => mark(X) active(U11(tt, X)) => mark(U12(isNeList(X))) active(U12(tt)) => mark(tt) active(U21(tt, X, Y)) => mark(U22(isList(X), Y)) active(U22(tt, X)) => mark(U23(isList(X))) active(U23(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isQid(X))) active(U32(tt)) => mark(tt) active(U41(tt, X, Y)) => mark(U42(isList(X), Y)) active(U42(tt, X)) => mark(U43(isNeList(X))) active(U43(tt)) => mark(tt) active(U51(tt, X, Y)) => mark(U52(isNeList(X), Y)) active(U52(tt, X)) => mark(U53(isList(X))) active(U53(tt)) => mark(tt) active(U61(tt, X)) => mark(U62(isQid(X))) active(U62(tt)) => mark(tt) active(U71(tt, X)) => mark(U72(isNePal(X))) active(U72(tt)) => mark(tt) active(and(tt, X)) => mark(X) active(isList(X)) => mark(U11(isPalListKind(X), X)) active(isList(nil)) => mark(tt) active(isList(!6220!6220(X, Y))) => mark(U21(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(X)) => mark(U31(isPalListKind(X), X)) active(isNeList(!6220!6220(X, Y))) => mark(U41(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(!6220!6220(X, Y))) => mark(U51(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNePal(X)) => mark(U61(isPalListKind(X), X)) active(isNePal(!6220!6220(X, !6220!6220(Y, X)))) => mark(and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y)))) active(isPal(X)) => mark(U71(isPalListKind(X), X)) active(isPal(nil)) => mark(tt) active(isPalListKind(a)) => mark(tt) active(isPalListKind(e)) => mark(tt) active(isPalListKind(i)) => mark(tt) active(isPalListKind(nil)) => mark(tt) active(isPalListKind(o)) => mark(tt) active(isPalListKind(u)) => mark(tt) active(isPalListKind(!6220!6220(X, Y))) => mark(and(isPalListKind(X), isPalListKind(Y))) active(isQid(a)) => mark(tt) active(isQid(e)) => mark(tt) active(isQid(i)) => mark(tt) active(isQid(o)) => mark(tt) active(isQid(u)) => mark(tt) mark(!6220!6220(X, Y)) => active(!6220!6220(mark(X), mark(Y))) mark(nil) => active(nil) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNeList(X)) => active(isNeList(X)) mark(U21(X, Y, Z)) => active(U21(mark(X), Y, Z)) mark(U22(X, Y)) => active(U22(mark(X), Y)) mark(isList(X)) => active(isList(X)) mark(U23(X)) => active(U23(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(isQid(X)) => active(isQid(X)) mark(U41(X, Y, Z)) => active(U41(mark(X), Y, Z)) mark(U42(X, Y)) => active(U42(mark(X), Y)) mark(U43(X)) => active(U43(mark(X))) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y)) => active(U52(mark(X), Y)) mark(U53(X)) => active(U53(mark(X))) mark(U61(X, Y)) => active(U61(mark(X), Y)) mark(U62(X)) => active(U62(mark(X))) mark(U71(X, Y)) => active(U71(mark(X), Y)) mark(U72(X)) => active(U72(mark(X))) mark(isNePal(X)) => active(isNePal(X)) mark(and(X, Y)) => active(and(mark(X), Y)) mark(isPalListKind(X)) => active(isPalListKind(X)) mark(isPal(X)) => active(isPal(X)) mark(a) => active(a) mark(e) => active(e) mark(i) => active(i) mark(o) => active(o) mark(u) => active(u) !6220!6220(mark(X), Y) => !6220!6220(X, Y) !6220!6220(X, mark(Y)) => !6220!6220(X, Y) !6220!6220(active(X), Y) => !6220!6220(X, Y) !6220!6220(X, active(Y)) => !6220!6220(X, Y) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNeList(mark(X)) => isNeList(X) isNeList(active(X)) => isNeList(X) U21(mark(X), Y, Z) => U21(X, Y, Z) U21(X, mark(Y), Z) => U21(X, Y, Z) U21(X, Y, mark(Z)) => U21(X, Y, Z) U21(active(X), Y, Z) => U21(X, Y, Z) U21(X, active(Y), Z) => U21(X, Y, Z) U21(X, Y, active(Z)) => U21(X, Y, Z) U22(mark(X), Y) => U22(X, Y) U22(X, mark(Y)) => U22(X, Y) U22(active(X), Y) => U22(X, Y) U22(X, active(Y)) => U22(X, Y) isList(mark(X)) => isList(X) isList(active(X)) => isList(X) U23(mark(X)) => U23(X) U23(active(X)) => U23(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) isQid(mark(X)) => isQid(X) isQid(active(X)) => isQid(X) U41(mark(X), Y, Z) => U41(X, Y, Z) U41(X, mark(Y), Z) => U41(X, Y, Z) U41(X, Y, mark(Z)) => U41(X, Y, Z) U41(active(X), Y, Z) => U41(X, Y, Z) U41(X, active(Y), Z) => U41(X, Y, Z) U41(X, Y, active(Z)) => U41(X, Y, Z) U42(mark(X), Y) => U42(X, Y) U42(X, mark(Y)) => U42(X, Y) U42(active(X), Y) => U42(X, Y) U42(X, active(Y)) => U42(X, Y) U43(mark(X)) => U43(X) U43(active(X)) => U43(X) U51(mark(X), Y, Z) => U51(X, Y, Z) U51(X, mark(Y), Z) => U51(X, Y, Z) U51(X, Y, mark(Z)) => U51(X, Y, Z) U51(active(X), Y, Z) => U51(X, Y, Z) U51(X, active(Y), Z) => U51(X, Y, Z) U51(X, Y, active(Z)) => U51(X, Y, Z) U52(mark(X), Y) => U52(X, Y) U52(X, mark(Y)) => U52(X, Y) U52(active(X), Y) => U52(X, Y) U52(X, active(Y)) => U52(X, Y) U53(mark(X)) => U53(X) U53(active(X)) => U53(X) U61(mark(X), Y) => U61(X, Y) U61(X, mark(Y)) => U61(X, Y) U61(active(X), Y) => U61(X, Y) U61(X, active(Y)) => U61(X, Y) U62(mark(X)) => U62(X) U62(active(X)) => U62(X) U71(mark(X), Y) => U71(X, Y) U71(X, mark(Y)) => U71(X, Y) U71(active(X), Y) => U71(X, Y) U71(X, active(Y)) => U71(X, Y) U72(mark(X)) => U72(X) U72(active(X)) => U72(X) isNePal(mark(X)) => isNePal(X) isNePal(active(X)) => isNePal(X) and(mark(X), Y) => and(X, Y) and(X, mark(Y)) => and(X, Y) and(active(X), Y) => and(X, Y) and(X, active(Y)) => and(X, Y) isPalListKind(mark(X)) => isPalListKind(X) isPalListKind(active(X)) => isPalListKind(X) isPal(mark(X)) => isPal(X) isPal(active(X)) => isPal(X) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(!6220!6220(!6220!6220(X, Y), Z)) >? mark(!6220!6220(X, !6220!6220(Y, Z))) active(!6220!6220(X, nil)) >? mark(X) active(!6220!6220(nil, X)) >? mark(X) active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U12(tt)) >? mark(tt) active(U21(tt, X, Y)) >? mark(U22(isList(X), Y)) active(U22(tt, X)) >? mark(U23(isList(X))) active(U23(tt)) >? mark(tt) active(U31(tt, X)) >? mark(U32(isQid(X))) active(U32(tt)) >? mark(tt) active(U41(tt, X, Y)) >? mark(U42(isList(X), Y)) active(U42(tt, X)) >? mark(U43(isNeList(X))) active(U43(tt)) >? mark(tt) active(U51(tt, X, Y)) >? mark(U52(isNeList(X), Y)) active(U52(tt, X)) >? mark(U53(isList(X))) active(U53(tt)) >? mark(tt) active(U61(tt, X)) >? mark(U62(isQid(X))) active(U62(tt)) >? mark(tt) active(U71(tt, X)) >? mark(U72(isNePal(X))) active(U72(tt)) >? mark(tt) active(and(tt, X)) >? mark(X) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isList(nil)) >? mark(tt) active(isList(!6220!6220(X, Y))) >? mark(U21(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(X)) >? mark(U31(isPalListKind(X), X)) active(isNeList(!6220!6220(X, Y))) >? mark(U41(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(!6220!6220(X, Y))) >? mark(U51(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) active(isNePal(!6220!6220(X, !6220!6220(Y, X)))) >? mark(and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y)))) active(isPal(X)) >? mark(U71(isPalListKind(X), X)) active(isPal(nil)) >? mark(tt) active(isPalListKind(a)) >? mark(tt) active(isPalListKind(e)) >? mark(tt) active(isPalListKind(i)) >? mark(tt) active(isPalListKind(nil)) >? mark(tt) active(isPalListKind(o)) >? mark(tt) active(isPalListKind(u)) >? mark(tt) active(isPalListKind(!6220!6220(X, Y))) >? mark(and(isPalListKind(X), isPalListKind(Y))) active(isQid(a)) >? mark(tt) active(isQid(e)) >? mark(tt) active(isQid(i)) >? mark(tt) active(isQid(o)) >? mark(tt) active(isQid(u)) >? mark(tt) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[U12(x_1)]] = x_1 [[U32(x_1)]] = x_1 [[U43(x_1)]] = x_1 [[U53(x_1)]] = x_1 [[U72(x_1)]] = x_1 [[active(x_1)]] = x_1 [[i]] = _|_ [[mark(x_1)]] = x_1 [[nil]] = _|_ [[o]] = _|_ [[tt]] = _|_ We choose Lex = {!6220!6220, and, isNePal} and Mul = {U11, U21, U22, U23, U31, U41, U42, U51, U52, U61, U62, U71, a, e, isList, isNeList, isPal, isPalListKind, isQid, u}, and the following precedence: e > !6220!6220 > U41 > U42 > isPal > U71 > and = isNePal > U21 > U22 > U51 > U52 > isList > a > U11 = isNeList > isPalListKind > U31 > U61 > U23 > U62 > isQid > u Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: !6220!6220(!6220!6220(X, Y), Z) >= !6220!6220(X, !6220!6220(Y, Z)) !6220!6220(X, _|_) > X !6220!6220(_|_, X) > X U11(_|_, X) >= isNeList(X) _|_ >= _|_ U21(_|_, X, Y) >= U22(isList(X), Y) U22(_|_, X) > U23(isList(X)) U23(_|_) >= _|_ U31(_|_, X) > isQid(X) _|_ >= _|_ U41(_|_, X, Y) >= U42(isList(X), Y) U42(_|_, X) >= isNeList(X) _|_ >= _|_ U51(_|_, X, Y) > U52(isNeList(X), Y) U52(_|_, X) >= isList(X) _|_ >= _|_ U61(_|_, X) > U62(isQid(X)) U62(_|_) >= _|_ U71(_|_, X) >= isNePal(X) _|_ >= _|_ and(_|_, X) >= X isList(X) >= U11(isPalListKind(X), X) isList(_|_) >= _|_ isList(!6220!6220(X, Y)) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) isNeList(X) >= U31(isPalListKind(X), X) isNeList(!6220!6220(X, Y)) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) isNeList(!6220!6220(X, Y)) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) isNePal(X) >= U61(isPalListKind(X), X) isNePal(!6220!6220(X, !6220!6220(Y, X))) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) isPal(X) >= U71(isPalListKind(X), X) isPal(_|_) >= _|_ isPalListKind(a) > _|_ isPalListKind(e) >= _|_ isPalListKind(_|_) >= _|_ isPalListKind(_|_) > _|_ isPalListKind(_|_) >= _|_ isPalListKind(u) > _|_ isPalListKind(!6220!6220(X, Y)) >= and(isPalListKind(X), isPalListKind(Y)) isQid(a) >= _|_ isQid(e) >= _|_ isQid(_|_) >= _|_ isQid(_|_) > _|_ isQid(u) > _|_ !6220!6220(X, Y) >= !6220!6220(X, Y) _|_ >= _|_ U11(X, Y) >= U11(X, Y) _|_ >= _|_ X >= X isNeList(X) >= isNeList(X) U21(X, Y, Z) >= U21(X, Y, Z) U22(X, Y) >= U22(X, Y) isList(X) >= isList(X) U23(X) >= U23(X) U31(X, Y) >= U31(X, Y) X >= X isQid(X) >= isQid(X) U41(X, Y, Z) >= U41(X, Y, Z) U42(X, Y) >= U42(X, Y) X >= X U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y) >= U52(X, Y) X >= X U61(X, Y) >= U61(X, Y) U62(X) >= U62(X) U71(X, Y) >= U71(X, Y) X >= X isNePal(X) >= isNePal(X) and(X, Y) >= and(X, Y) isPalListKind(X) >= isPalListKind(X) isPal(X) >= isPal(X) a >= a e >= e _|_ >= _|_ _|_ >= _|_ u >= u !6220!6220(X, Y) >= !6220!6220(X, Y) !6220!6220(X, Y) >= !6220!6220(X, Y) !6220!6220(X, Y) >= !6220!6220(X, Y) !6220!6220(X, Y) >= !6220!6220(X, Y) U11(X, Y) >= U11(X, Y) U11(X, Y) >= U11(X, Y) U11(X, Y) >= U11(X, Y) U11(X, Y) >= U11(X, Y) X >= X X >= X isNeList(X) >= isNeList(X) isNeList(X) >= isNeList(X) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U22(X, Y) >= U22(X, Y) U22(X, Y) >= U22(X, Y) U22(X, Y) >= U22(X, Y) U22(X, Y) >= U22(X, Y) isList(X) >= isList(X) isList(X) >= isList(X) U23(X) >= U23(X) U23(X) >= U23(X) U31(X, Y) >= U31(X, Y) U31(X, Y) >= U31(X, Y) U31(X, Y) >= U31(X, Y) U31(X, Y) >= U31(X, Y) X >= X X >= X isQid(X) >= isQid(X) isQid(X) >= isQid(X) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U42(X, Y) >= U42(X, Y) U42(X, Y) >= U42(X, Y) U42(X, Y) >= U42(X, Y) U42(X, Y) >= U42(X, Y) X >= X X >= X U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y) >= U52(X, Y) U52(X, Y) >= U52(X, Y) U52(X, Y) >= U52(X, Y) U52(X, Y) >= U52(X, Y) X >= X X >= X U61(X, Y) >= U61(X, Y) U61(X, Y) >= U61(X, Y) U61(X, Y) >= U61(X, Y) U61(X, Y) >= U61(X, Y) U62(X) >= U62(X) U62(X) >= U62(X) U71(X, Y) >= U71(X, Y) U71(X, Y) >= U71(X, Y) U71(X, Y) >= U71(X, Y) U71(X, Y) >= U71(X, Y) X >= X X >= X isNePal(X) >= isNePal(X) isNePal(X) >= isNePal(X) and(X, Y) >= and(X, Y) and(X, Y) >= and(X, Y) and(X, Y) >= and(X, Y) and(X, Y) >= and(X, Y) isPalListKind(X) >= isPalListKind(X) isPalListKind(X) >= isPalListKind(X) isPal(X) >= isPal(X) isPal(X) >= isPal(X) With these choices, we have: 1] !6220!6220(!6220!6220(X, Y), Z) >= !6220!6220(X, !6220!6220(Y, Z)) because [2], by (Star) 2] !6220!6220*(!6220!6220(X, Y), Z) >= !6220!6220(X, !6220!6220(Y, Z)) because [3], [6] and [8], by (Stat) 3] !6220!6220(X, Y) > X because [4], by definition 4] !6220!6220*(X, Y) >= X because [5], by (Select) 5] X >= X by (Meta) 6] !6220!6220*(!6220!6220(X, Y), Z) >= X because [7], by (Select) 7] !6220!6220(X, Y) >= X because [4], by (Star) 8] !6220!6220*(!6220!6220(X, Y), Z) >= !6220!6220(Y, Z) because [9], [12] and [14], by (Stat) 9] !6220!6220(X, Y) > Y because [10], by definition 10] !6220!6220*(X, Y) >= Y because [11], by (Select) 11] Y >= Y by (Meta) 12] !6220!6220*(!6220!6220(X, Y), Z) >= Y because [13], by (Select) 13] !6220!6220(X, Y) >= Y because [10], by (Star) 14] !6220!6220*(!6220!6220(X, Y), Z) >= Z because [15], by (Select) 15] Z >= Z by (Meta) 16] !6220!6220(X, _|_) > X because [17], by definition 17] !6220!6220*(X, _|_) >= X because [5], by (Select) 18] !6220!6220(_|_, X) > X because [19], by definition 19] !6220!6220*(_|_, X) >= X because [5], by (Select) 20] U11(_|_, X) >= isNeList(X) because [21], by (Star) 21] U11*(_|_, X) >= isNeList(X) because U11 = isNeList, U11 in Mul and [22], by (Stat) 22] X >= X by (Meta) 23] _|_ >= _|_ by (Bot) 24] U21(_|_, X, Y) >= U22(isList(X), Y) because [25], by (Star) 25] U21*(_|_, X, Y) >= U22(isList(X), Y) because U21 > U22, [26] and [29], by (Copy) 26] U21*(_|_, X, Y) >= isList(X) because U21 > isList and [27], by (Copy) 27] U21*(_|_, X, Y) >= X because [28], by (Select) 28] X >= X by (Meta) 29] U21*(_|_, X, Y) >= Y because [30], by (Select) 30] Y >= Y by (Meta) 31] U22(_|_, X) > U23(isList(X)) because [32], by definition 32] U22*(_|_, X) >= U23(isList(X)) because U22 > U23 and [33], by (Copy) 33] U22*(_|_, X) >= isList(X) because U22 > isList and [34], by (Copy) 34] U22*(_|_, X) >= X because [30], by (Select) 35] U23(_|_) >= _|_ by (Bot) 36] U31(_|_, X) > isQid(X) because [37], by definition 37] U31*(_|_, X) >= isQid(X) because U31 > isQid and [38], by (Copy) 38] U31*(_|_, X) >= X because [22], by (Select) 39] _|_ >= _|_ by (Bot) 40] U41(_|_, X, Y) >= U42(isList(X), Y) because [41], by (Star) 41] U41*(_|_, X, Y) >= U42(isList(X), Y) because U41 > U42, [42] and [44], by (Copy) 42] U41*(_|_, X, Y) >= isList(X) because U41 > isList and [43], by (Copy) 43] U41*(_|_, X, Y) >= X because [28], by (Select) 44] U41*(_|_, X, Y) >= Y because [30], by (Select) 45] U42(_|_, X) >= isNeList(X) because [46], by (Star) 46] U42*(_|_, X) >= isNeList(X) because U42 > isNeList and [47], by (Copy) 47] U42*(_|_, X) >= X because [30], by (Select) 48] _|_ >= _|_ by (Bot) 49] U51(_|_, X, Y) > U52(isNeList(X), Y) because [50], by definition 50] U51*(_|_, X, Y) >= U52(isNeList(X), Y) because U51 > U52, [51] and [53], by (Copy) 51] U51*(_|_, X, Y) >= isNeList(X) because U51 > isNeList and [52], by (Copy) 52] U51*(_|_, X, Y) >= X because [28], by (Select) 53] U51*(_|_, X, Y) >= Y because [30], by (Select) 54] U52(_|_, X) >= isList(X) because [55], by (Star) 55] U52*(_|_, X) >= isList(X) because U52 > isList and [56], by (Copy) 56] U52*(_|_, X) >= X because [30], by (Select) 57] _|_ >= _|_ by (Bot) 58] U61(_|_, X) > U62(isQid(X)) because [59], by definition 59] U61*(_|_, X) >= U62(isQid(X)) because U61 > U62 and [60], by (Copy) 60] U61*(_|_, X) >= isQid(X) because U61 > isQid and [61], by (Copy) 61] U61*(_|_, X) >= X because [22], by (Select) 62] U62(_|_) >= _|_ by (Bot) 63] U71(_|_, X) >= isNePal(X) because [64], by (Star) 64] U71*(_|_, X) >= isNePal(X) because U71 > isNePal and [65], by (Copy) 65] U71*(_|_, X) >= X because [22], by (Select) 66] _|_ >= _|_ by (Bot) 67] and(_|_, X) >= X because [68], by (Star) 68] and*(_|_, X) >= X because [5], by (Select) 69] isList(X) >= U11(isPalListKind(X), X) because [70], by (Star) 70] isList*(X) >= U11(isPalListKind(X), X) because isList > U11, [71] and [72], by (Copy) 71] isList*(X) >= isPalListKind(X) because isList > isPalListKind and [72], by (Copy) 72] isList*(X) >= X because [22], by (Select) 73] isList(_|_) >= _|_ by (Bot) 74] isList(!6220!6220(X, Y)) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [75], by (Star) 75] isList*(!6220!6220(X, Y)) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [76], by (Select) 76] !6220!6220(X, Y) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [77], by (Star) 77] !6220!6220*(X, Y) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) because !6220!6220 > U21, [78], [80] and [82], by (Copy) 78] !6220!6220*(X, Y) >= and(isPalListKind(X), isPalListKind(Y)) because !6220!6220 > and, [79] and [81], by (Copy) 79] !6220!6220*(X, Y) >= isPalListKind(X) because !6220!6220 > isPalListKind and [80], by (Copy) 80] !6220!6220*(X, Y) >= X because [28], by (Select) 81] !6220!6220*(X, Y) >= isPalListKind(Y) because !6220!6220 > isPalListKind and [82], by (Copy) 82] !6220!6220*(X, Y) >= Y because [30], by (Select) 83] isNeList(X) >= U31(isPalListKind(X), X) because [84], by (Star) 84] isNeList*(X) >= U31(isPalListKind(X), X) because isNeList > U31, [85] and [86], by (Copy) 85] isNeList*(X) >= isPalListKind(X) because isNeList > isPalListKind and [86], by (Copy) 86] isNeList*(X) >= X because [22], by (Select) 87] isNeList(!6220!6220(X, Y)) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [88], by (Star) 88] isNeList*(!6220!6220(X, Y)) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [89], by (Select) 89] !6220!6220(X, Y) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [90], by (Star) 90] !6220!6220*(X, Y) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) because !6220!6220 > U41, [78], [80] and [82], by (Copy) 91] isNeList(!6220!6220(X, Y)) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [92], by (Star) 92] isNeList*(!6220!6220(X, Y)) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [93], by (Select) 93] !6220!6220(X, Y) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [94], by (Star) 94] !6220!6220*(X, Y) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) because !6220!6220 > U51, [78], [80] and [82], by (Copy) 95] isNePal(X) >= U61(isPalListKind(X), X) because [96], by (Star) 96] isNePal*(X) >= U61(isPalListKind(X), X) because isNePal > U61, [97] and [98], by (Copy) 97] isNePal*(X) >= isPalListKind(X) because isNePal > isPalListKind and [98], by (Copy) 98] isNePal*(X) >= X because [22], by (Select) 99] isNePal(!6220!6220(X, !6220!6220(Y, X))) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) because [100], by (Star) 100] isNePal*(!6220!6220(X, !6220!6220(Y, X))) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) because isNePal = and, [101], [107] and [113], by (Stat) 101] !6220!6220(X, !6220!6220(Y, X)) > and(isQid(X), isPalListKind(X)) because [102], by definition 102] !6220!6220*(X, !6220!6220(Y, X)) >= and(isQid(X), isPalListKind(X)) because !6220!6220 > and, [103] and [106], by (Copy) 103] !6220!6220*(X, !6220!6220(Y, X)) >= isQid(X) because !6220!6220 > isQid and [104], by (Copy) 104] !6220!6220*(X, !6220!6220(Y, X)) >= X because [105], by (Select) 105] X >= X by (Meta) 106] !6220!6220*(X, !6220!6220(Y, X)) >= isPalListKind(X) because !6220!6220 > isPalListKind and [104], by (Copy) 107] isNePal*(!6220!6220(X, !6220!6220(Y, X))) >= and(isQid(X), isPalListKind(X)) because isNePal = and, [108], [109] and [111], by (Stat) 108] !6220!6220(X, !6220!6220(Y, X)) > isQid(X) because [103], by definition 109] isNePal*(!6220!6220(X, !6220!6220(Y, X))) >= isQid(X) because [110], by (Select) 110] !6220!6220(X, !6220!6220(Y, X)) >= isQid(X) because [103], by (Star) 111] isNePal*(!6220!6220(X, !6220!6220(Y, X))) >= isPalListKind(X) because [112], by (Select) 112] !6220!6220(X, !6220!6220(Y, X)) >= isPalListKind(X) because [106], by (Star) 113] isNePal*(!6220!6220(X, !6220!6220(Y, X))) >= and(isPal(Y), isPalListKind(Y)) because isNePal = and, [114], [120] and [122], by (Stat) 114] !6220!6220(X, !6220!6220(Y, X)) > isPal(Y) because [115], by definition 115] !6220!6220*(X, !6220!6220(Y, X)) >= isPal(Y) because !6220!6220 > isPal and [116], by (Copy) 116] !6220!6220*(X, !6220!6220(Y, X)) >= Y because [117], by (Select) 117] !6220!6220(Y, X) >= Y because [118], by (Star) 118] !6220!6220*(Y, X) >= Y because [119], by (Select) 119] Y >= Y by (Meta) 120] isNePal*(!6220!6220(X, !6220!6220(Y, X))) >= isPal(Y) because [121], by (Select) 121] !6220!6220(X, !6220!6220(Y, X)) >= isPal(Y) because [115], by (Star) 122] isNePal*(!6220!6220(X, !6220!6220(Y, X))) >= isPalListKind(Y) because [123], by (Select) 123] !6220!6220(X, !6220!6220(Y, X)) >= isPalListKind(Y) because [124], by (Star) 124] !6220!6220*(X, !6220!6220(Y, X)) >= isPalListKind(Y) because [125], by (Select) 125] !6220!6220(Y, X) >= isPalListKind(Y) because [126], by (Star) 126] !6220!6220*(Y, X) >= isPalListKind(Y) because !6220!6220 > isPalListKind and [127], by (Copy) 127] !6220!6220*(Y, X) >= Y because [119], by (Select) 128] isPal(X) >= U71(isPalListKind(X), X) because [129], by (Star) 129] isPal*(X) >= U71(isPalListKind(X), X) because isPal > U71, [130] and [131], by (Copy) 130] isPal*(X) >= isPalListKind(X) because isPal > isPalListKind and [131], by (Copy) 131] isPal*(X) >= X because [22], by (Select) 132] isPal(_|_) >= _|_ by (Bot) 133] isPalListKind(a) > _|_ because [134], by definition 134] isPalListKind*(a) >= _|_ by (Bot) 135] isPalListKind(e) >= _|_ by (Bot) 136] isPalListKind(_|_) >= _|_ by (Bot) 137] isPalListKind(_|_) > _|_ because [138], by definition 138] isPalListKind*(_|_) >= _|_ by (Bot) 139] isPalListKind(_|_) >= _|_ by (Bot) 140] isPalListKind(u) > _|_ because [141], by definition 141] isPalListKind*(u) >= _|_ by (Bot) 142] isPalListKind(!6220!6220(X, Y)) >= and(isPalListKind(X), isPalListKind(Y)) because [143], by (Star) 143] isPalListKind*(!6220!6220(X, Y)) >= and(isPalListKind(X), isPalListKind(Y)) because [144], by (Select) 144] !6220!6220(X, Y) >= and(isPalListKind(X), isPalListKind(Y)) because [78], by (Star) 145] isQid(a) >= _|_ by (Bot) 146] isQid(e) >= _|_ by (Bot) 147] isQid(_|_) >= _|_ by (Bot) 148] isQid(_|_) > _|_ because [149], by definition 149] isQid*(_|_) >= _|_ by (Bot) 150] isQid(u) > _|_ because [151], by definition 151] isQid*(u) >= _|_ by (Bot) 152] !6220!6220(X, Y) >= !6220!6220(X, Y) because [153] and [154], by (Fun) 153] X >= X by (Meta) 154] Y >= Y by (Meta) 155] _|_ >= _|_ by (Bot) 156] U11(X, Y) >= U11(X, Y) because U11 in Mul, [153] and [154], by (Fun) 157] _|_ >= _|_ by (Bot) 158] X >= X by (Meta) 159] isNeList(X) >= isNeList(X) because isNeList in Mul and [160], by (Fun) 160] X >= X by (Meta) 161] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [153], [154] and [162], by (Fun) 162] Z >= Z by (Meta) 163] U22(X, Y) >= U22(X, Y) because U22 in Mul, [153] and [154], by (Fun) 164] isList(X) >= isList(X) because isList in Mul and [160], by (Fun) 165] U23(X) >= U23(X) because U23 in Mul and [166], by (Fun) 166] X >= X by (Meta) 167] U31(X, Y) >= U31(X, Y) because U31 in Mul, [153] and [154], by (Fun) 168] X >= X by (Meta) 169] isQid(X) >= isQid(X) because isQid in Mul and [166], by (Fun) 170] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [153], [154] and [162], by (Fun) 171] U42(X, Y) >= U42(X, Y) because U42 in Mul, [153] and [154], by (Fun) 172] X >= X by (Meta) 173] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [153], [154] and [162], by (Fun) 174] U52(X, Y) >= U52(X, Y) because U52 in Mul, [153] and [154], by (Fun) 175] X >= X by (Meta) 176] U61(X, Y) >= U61(X, Y) because U61 in Mul, [153] and [154], by (Fun) 177] U62(X) >= U62(X) because U62 in Mul and [166], by (Fun) 178] U71(X, Y) >= U71(X, Y) because U71 in Mul, [153] and [154], by (Fun) 179] X >= X by (Meta) 180] isNePal(X) >= isNePal(X) because [166], by (Fun) 181] and(X, Y) >= and(X, Y) because [153] and [154], by (Fun) 182] isPalListKind(X) >= isPalListKind(X) because isPalListKind in Mul and [166], by (Fun) 183] isPal(X) >= isPal(X) because isPal in Mul and [166], by (Fun) 184] a >= a by (Fun) 185] e >= e by (Fun) 186] _|_ >= _|_ by (Bot) 187] _|_ >= _|_ by (Bot) 188] u >= u by (Fun) 189] !6220!6220(X, Y) >= !6220!6220(X, Y) because [190] and [154], by (Fun) 190] X >= X by (Meta) 191] !6220!6220(X, Y) >= !6220!6220(X, Y) because [153] and [192], by (Fun) 192] Y >= Y by (Meta) 193] !6220!6220(X, Y) >= !6220!6220(X, Y) because [194] and [154], by (Fun) 194] X >= X by (Meta) 195] !6220!6220(X, Y) >= !6220!6220(X, Y) because [153] and [196], by (Fun) 196] Y >= Y by (Meta) 197] U11(X, Y) >= U11(X, Y) because U11 in Mul, [190] and [154], by (Fun) 198] U11(X, Y) >= U11(X, Y) because U11 in Mul, [153] and [192], by (Fun) 199] U11(X, Y) >= U11(X, Y) because U11 in Mul, [194] and [154], by (Fun) 200] U11(X, Y) >= U11(X, Y) because U11 in Mul, [153] and [196], by (Fun) 201] X >= X by (Meta) 202] X >= X by (Meta) 203] isNeList(X) >= isNeList(X) because isNeList in Mul and [204], by (Fun) 204] X >= X by (Meta) 205] isNeList(X) >= isNeList(X) because isNeList in Mul and [206], by (Fun) 206] X >= X by (Meta) 207] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [190], [154] and [162], by (Fun) 208] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [153], [192] and [162], by (Fun) 209] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [153], [154] and [210], by (Fun) 210] Z >= Z by (Meta) 211] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [194], [154] and [162], by (Fun) 212] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [153], [196] and [162], by (Fun) 213] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [153], [154] and [214], by (Fun) 214] Z >= Z by (Meta) 215] U22(X, Y) >= U22(X, Y) because U22 in Mul, [190] and [154], by (Fun) 216] U22(X, Y) >= U22(X, Y) because U22 in Mul, [153] and [192], by (Fun) 217] U22(X, Y) >= U22(X, Y) because U22 in Mul, [194] and [154], by (Fun) 218] U22(X, Y) >= U22(X, Y) because U22 in Mul, [153] and [196], by (Fun) 219] isList(X) >= isList(X) because isList in Mul and [204], by (Fun) 220] isList(X) >= isList(X) because isList in Mul and [206], by (Fun) 221] U23(X) >= U23(X) because U23 in Mul and [204], by (Fun) 222] U23(X) >= U23(X) because U23 in Mul and [206], by (Fun) 223] U31(X, Y) >= U31(X, Y) because U31 in Mul, [190] and [154], by (Fun) 224] U31(X, Y) >= U31(X, Y) because U31 in Mul, [153] and [192], by (Fun) 225] U31(X, Y) >= U31(X, Y) because U31 in Mul, [194] and [154], by (Fun) 226] U31(X, Y) >= U31(X, Y) because U31 in Mul, [153] and [196], by (Fun) 227] X >= X by (Meta) 228] X >= X by (Meta) 229] isQid(X) >= isQid(X) because isQid in Mul and [204], by (Fun) 230] isQid(X) >= isQid(X) because isQid in Mul and [206], by (Fun) 231] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [190], [154] and [162], by (Fun) 232] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [153], [192] and [162], by (Fun) 233] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [153], [154] and [210], by (Fun) 234] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [194], [154] and [162], by (Fun) 235] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [153], [196] and [162], by (Fun) 236] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [153], [154] and [214], by (Fun) 237] U42(X, Y) >= U42(X, Y) because U42 in Mul, [190] and [154], by (Fun) 238] U42(X, Y) >= U42(X, Y) because U42 in Mul, [153] and [192], by (Fun) 239] U42(X, Y) >= U42(X, Y) because U42 in Mul, [194] and [154], by (Fun) 240] U42(X, Y) >= U42(X, Y) because U42 in Mul, [153] and [196], by (Fun) 241] X >= X by (Meta) 242] X >= X by (Meta) 243] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [190], [154] and [162], by (Fun) 244] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [153], [192] and [162], by (Fun) 245] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [153], [154] and [210], by (Fun) 246] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [194], [154] and [162], by (Fun) 247] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [153], [196] and [162], by (Fun) 248] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [153], [154] and [214], by (Fun) 249] U52(X, Y) >= U52(X, Y) because U52 in Mul, [190] and [154], by (Fun) 250] U52(X, Y) >= U52(X, Y) because U52 in Mul, [153] and [192], by (Fun) 251] U52(X, Y) >= U52(X, Y) because U52 in Mul, [194] and [154], by (Fun) 252] U52(X, Y) >= U52(X, Y) because U52 in Mul, [153] and [196], by (Fun) 253] X >= X by (Meta) 254] X >= X by (Meta) 255] U61(X, Y) >= U61(X, Y) because U61 in Mul, [190] and [154], by (Fun) 256] U61(X, Y) >= U61(X, Y) because U61 in Mul, [153] and [192], by (Fun) 257] U61(X, Y) >= U61(X, Y) because U61 in Mul, [194] and [154], by (Fun) 258] U61(X, Y) >= U61(X, Y) because U61 in Mul, [153] and [196], by (Fun) 259] U62(X) >= U62(X) because U62 in Mul and [204], by (Fun) 260] U62(X) >= U62(X) because U62 in Mul and [206], by (Fun) 261] U71(X, Y) >= U71(X, Y) because U71 in Mul, [190] and [154], by (Fun) 262] U71(X, Y) >= U71(X, Y) because U71 in Mul, [153] and [192], by (Fun) 263] U71(X, Y) >= U71(X, Y) because U71 in Mul, [194] and [154], by (Fun) 264] U71(X, Y) >= U71(X, Y) because U71 in Mul, [153] and [196], by (Fun) 265] X >= X by (Meta) 266] X >= X by (Meta) 267] isNePal(X) >= isNePal(X) because [204], by (Fun) 268] isNePal(X) >= isNePal(X) because [206], by (Fun) 269] and(X, Y) >= and(X, Y) because [190] and [154], by (Fun) 270] and(X, Y) >= and(X, Y) because [153] and [192], by (Fun) 271] and(X, Y) >= and(X, Y) because [194] and [154], by (Fun) 272] and(X, Y) >= and(X, Y) because [153] and [196], by (Fun) 273] isPalListKind(X) >= isPalListKind(X) because isPalListKind in Mul and [204], by (Fun) 274] isPalListKind(X) >= isPalListKind(X) because isPalListKind in Mul and [206], by (Fun) 275] isPal(X) >= isPal(X) because isPal in Mul and [204], by (Fun) 276] isPal(X) >= isPal(X) because isPal in Mul and [206], by (Fun) We can thus remove the following rules: active(!6220!6220(X, nil)) => mark(X) active(!6220!6220(nil, X)) => mark(X) active(U22(tt, X)) => mark(U23(isList(X))) active(U31(tt, X)) => mark(U32(isQid(X))) active(U51(tt, X, Y)) => mark(U52(isNeList(X), Y)) active(U61(tt, X)) => mark(U62(isQid(X))) active(isPalListKind(a)) => mark(tt) active(isPalListKind(nil)) => mark(tt) active(isPalListKind(u)) => mark(tt) active(isQid(o)) => mark(tt) active(isQid(u)) => mark(tt) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(!6220!6220(!6220!6220(X, Y), Z)) >? mark(!6220!6220(X, !6220!6220(Y, Z))) active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U12(tt)) >? mark(tt) active(U21(tt, X, Y)) >? mark(U22(isList(X), Y)) active(U23(tt)) >? mark(tt) active(U32(tt)) >? mark(tt) active(U41(tt, X, Y)) >? mark(U42(isList(X), Y)) active(U42(tt, X)) >? mark(U43(isNeList(X))) active(U43(tt)) >? mark(tt) active(U52(tt, X)) >? mark(U53(isList(X))) active(U53(tt)) >? mark(tt) active(U62(tt)) >? mark(tt) active(U71(tt, X)) >? mark(U72(isNePal(X))) active(U72(tt)) >? mark(tt) active(and(tt, X)) >? mark(X) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isList(nil)) >? mark(tt) active(isList(!6220!6220(X, Y))) >? mark(U21(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(X)) >? mark(U31(isPalListKind(X), X)) active(isNeList(!6220!6220(X, Y))) >? mark(U41(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(!6220!6220(X, Y))) >? mark(U51(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) active(isNePal(!6220!6220(X, !6220!6220(Y, X)))) >? mark(and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y)))) active(isPal(X)) >? mark(U71(isPalListKind(X), X)) active(isPal(nil)) >? mark(tt) active(isPalListKind(e)) >? mark(tt) active(isPalListKind(i)) >? mark(tt) active(isPalListKind(o)) >? mark(tt) active(isPalListKind(!6220!6220(X, Y))) >? mark(and(isPalListKind(X), isPalListKind(Y))) active(isQid(a)) >? mark(tt) active(isQid(e)) >? mark(tt) active(isQid(i)) >? mark(tt) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[active(x_1)]] = x_1 [[mark(x_1)]] = x_1 [[tt]] = _|_ We choose Lex = {!6220!6220, U31} and Mul = {U11, U12, U21, U22, U23, U32, U41, U42, U43, U51, U52, U53, U61, U62, U71, U72, a, and, e, i, isList, isNeList, isNePal, isPal, isPalListKind, isQid, nil, o, u}, and the following precedence: i > !6220!6220 > isPal > U52 > isQid > e > u > U71 > isNePal > U61 > U21 > U53 > U41 > U42 > U72 > isList > U11 = isNeList > isPalListKind > and > U31 > U12 > U23 > U62 > U51 > U43 > U32 > a > nil > U22 > o Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: !6220!6220(!6220!6220(X, Y), Z) > !6220!6220(X, !6220!6220(Y, Z)) U11(_|_, X) >= U12(isNeList(X)) U12(_|_) >= _|_ U21(_|_, X, Y) > U22(isList(X), Y) U23(_|_) >= _|_ U32(_|_) >= _|_ U41(_|_, X, Y) >= U42(isList(X), Y) U42(_|_, X) >= U43(isNeList(X)) U43(_|_) >= _|_ U52(_|_, X) >= U53(isList(X)) U53(_|_) >= _|_ U62(_|_) >= _|_ U71(_|_, X) >= U72(isNePal(X)) U72(_|_) >= _|_ and(_|_, X) >= X isList(X) >= U11(isPalListKind(X), X) isList(nil) > _|_ isList(!6220!6220(X, Y)) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) isNeList(X) > U31(isPalListKind(X), X) isNeList(!6220!6220(X, Y)) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) isNeList(!6220!6220(X, Y)) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) isNePal(X) >= U61(isPalListKind(X), X) isNePal(!6220!6220(X, !6220!6220(Y, X))) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) isPal(X) >= U71(isPalListKind(X), X) isPal(nil) > _|_ isPalListKind(e) >= _|_ isPalListKind(i) > _|_ isPalListKind(o) >= _|_ isPalListKind(!6220!6220(X, Y)) >= and(isPalListKind(X), isPalListKind(Y)) isQid(a) >= _|_ isQid(e) > _|_ isQid(i) >= _|_ !6220!6220(X, Y) >= !6220!6220(X, Y) nil >= nil U11(X, Y) >= U11(X, Y) _|_ >= _|_ U12(X) >= U12(X) isNeList(X) >= isNeList(X) U21(X, Y, Z) >= U21(X, Y, Z) U22(X, Y) >= U22(X, Y) isList(X) >= isList(X) U23(X) >= U23(X) U31(X, Y) >= U31(X, Y) U32(X) >= U32(X) isQid(X) >= isQid(X) U41(X, Y, Z) >= U41(X, Y, Z) U42(X, Y) >= U42(X, Y) U43(X) >= U43(X) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y) >= U52(X, Y) U53(X) >= U53(X) U61(X, Y) >= U61(X, Y) U62(X) >= U62(X) U71(X, Y) >= U71(X, Y) U72(X) >= U72(X) isNePal(X) >= isNePal(X) and(X, Y) >= and(X, Y) isPalListKind(X) >= isPalListKind(X) isPal(X) >= isPal(X) a >= a e >= e i >= i o >= o u >= u !6220!6220(X, Y) >= !6220!6220(X, Y) !6220!6220(X, Y) >= !6220!6220(X, Y) !6220!6220(X, Y) >= !6220!6220(X, Y) !6220!6220(X, Y) >= !6220!6220(X, Y) U11(X, Y) >= U11(X, Y) U11(X, Y) >= U11(X, Y) U11(X, Y) >= U11(X, Y) U11(X, Y) >= U11(X, Y) U12(X) >= U12(X) U12(X) >= U12(X) isNeList(X) >= isNeList(X) isNeList(X) >= isNeList(X) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U21(X, Y, Z) >= U21(X, Y, Z) U22(X, Y) >= U22(X, Y) U22(X, Y) >= U22(X, Y) U22(X, Y) >= U22(X, Y) U22(X, Y) >= U22(X, Y) isList(X) >= isList(X) isList(X) >= isList(X) U23(X) >= U23(X) U23(X) >= U23(X) U31(X, Y) >= U31(X, Y) U31(X, Y) >= U31(X, Y) U31(X, Y) >= U31(X, Y) U31(X, Y) >= U31(X, Y) U32(X) >= U32(X) U32(X) >= U32(X) isQid(X) >= isQid(X) isQid(X) >= isQid(X) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U41(X, Y, Z) >= U41(X, Y, Z) U42(X, Y) >= U42(X, Y) U42(X, Y) >= U42(X, Y) U42(X, Y) >= U42(X, Y) U42(X, Y) >= U42(X, Y) U43(X) >= U43(X) U43(X) >= U43(X) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y) >= U52(X, Y) U52(X, Y) >= U52(X, Y) U52(X, Y) >= U52(X, Y) U52(X, Y) >= U52(X, Y) U53(X) >= U53(X) U53(X) >= U53(X) U61(X, Y) >= U61(X, Y) U61(X, Y) >= U61(X, Y) U61(X, Y) >= U61(X, Y) U61(X, Y) >= U61(X, Y) U62(X) >= U62(X) U62(X) >= U62(X) U71(X, Y) >= U71(X, Y) U71(X, Y) >= U71(X, Y) U71(X, Y) >= U71(X, Y) U71(X, Y) >= U71(X, Y) U72(X) >= U72(X) U72(X) >= U72(X) isNePal(X) >= isNePal(X) isNePal(X) >= isNePal(X) and(X, Y) >= and(X, Y) and(X, Y) >= and(X, Y) and(X, Y) >= and(X, Y) and(X, Y) >= and(X, Y) isPalListKind(X) >= isPalListKind(X) isPalListKind(X) >= isPalListKind(X) isPal(X) >= isPal(X) isPal(X) >= isPal(X) With these choices, we have: 1] !6220!6220(!6220!6220(X, Y), Z) > !6220!6220(X, !6220!6220(Y, Z)) because [2], by definition 2] !6220!6220*(!6220!6220(X, Y), Z) >= !6220!6220(X, !6220!6220(Y, Z)) because [3], [6] and [8], by (Stat) 3] !6220!6220(X, Y) > X because [4], by definition 4] !6220!6220*(X, Y) >= X because [5], by (Select) 5] X >= X by (Meta) 6] !6220!6220*(!6220!6220(X, Y), Z) >= X because [7], by (Select) 7] !6220!6220(X, Y) >= X because [4], by (Star) 8] !6220!6220*(!6220!6220(X, Y), Z) >= !6220!6220(Y, Z) because [9], [12] and [14], by (Stat) 9] !6220!6220(X, Y) > Y because [10], by definition 10] !6220!6220*(X, Y) >= Y because [11], by (Select) 11] Y >= Y by (Meta) 12] !6220!6220*(!6220!6220(X, Y), Z) >= Y because [13], by (Select) 13] !6220!6220(X, Y) >= Y because [10], by (Star) 14] !6220!6220*(!6220!6220(X, Y), Z) >= Z because [15], by (Select) 15] Z >= Z by (Meta) 16] U11(_|_, X) >= U12(isNeList(X)) because [17], by (Star) 17] U11*(_|_, X) >= U12(isNeList(X)) because U11 > U12 and [18], by (Copy) 18] U11*(_|_, X) >= isNeList(X) because U11 = isNeList, U11 in Mul and [19], by (Stat) 19] X >= X by (Meta) 20] U12(_|_) >= _|_ by (Bot) 21] U21(_|_, X, Y) > U22(isList(X), Y) because [22], by definition 22] U21*(_|_, X, Y) >= U22(isList(X), Y) because U21 > U22, [23] and [26], by (Copy) 23] U21*(_|_, X, Y) >= isList(X) because U21 > isList and [24], by (Copy) 24] U21*(_|_, X, Y) >= X because [25], by (Select) 25] X >= X by (Meta) 26] U21*(_|_, X, Y) >= Y because [27], by (Select) 27] Y >= Y by (Meta) 28] U23(_|_) >= _|_ by (Bot) 29] U32(_|_) >= _|_ by (Bot) 30] U41(_|_, X, Y) >= U42(isList(X), Y) because [31], by (Star) 31] U41*(_|_, X, Y) >= U42(isList(X), Y) because U41 > U42, [32] and [34], by (Copy) 32] U41*(_|_, X, Y) >= isList(X) because U41 > isList and [33], by (Copy) 33] U41*(_|_, X, Y) >= X because [25], by (Select) 34] U41*(_|_, X, Y) >= Y because [27], by (Select) 35] U42(_|_, X) >= U43(isNeList(X)) because [36], by (Star) 36] U42*(_|_, X) >= U43(isNeList(X)) because U42 > U43 and [37], by (Copy) 37] U42*(_|_, X) >= isNeList(X) because U42 > isNeList and [38], by (Copy) 38] U42*(_|_, X) >= X because [27], by (Select) 39] U43(_|_) >= _|_ by (Bot) 40] U52(_|_, X) >= U53(isList(X)) because [41], by (Star) 41] U52*(_|_, X) >= U53(isList(X)) because U52 > U53 and [42], by (Copy) 42] U52*(_|_, X) >= isList(X) because U52 > isList and [43], by (Copy) 43] U52*(_|_, X) >= X because [27], by (Select) 44] U53(_|_) >= _|_ by (Bot) 45] U62(_|_) >= _|_ by (Bot) 46] U71(_|_, X) >= U72(isNePal(X)) because [47], by (Star) 47] U71*(_|_, X) >= U72(isNePal(X)) because U71 > U72 and [48], by (Copy) 48] U71*(_|_, X) >= isNePal(X) because U71 > isNePal and [49], by (Copy) 49] U71*(_|_, X) >= X because [19], by (Select) 50] U72(_|_) >= _|_ by (Bot) 51] and(_|_, X) >= X because [52], by (Star) 52] and*(_|_, X) >= X because [5], by (Select) 53] isList(X) >= U11(isPalListKind(X), X) because [54], by (Star) 54] isList*(X) >= U11(isPalListKind(X), X) because isList > U11, [55] and [56], by (Copy) 55] isList*(X) >= isPalListKind(X) because isList > isPalListKind and [56], by (Copy) 56] isList*(X) >= X because [19], by (Select) 57] isList(nil) > _|_ because [58], by definition 58] isList*(nil) >= _|_ by (Bot) 59] isList(!6220!6220(X, Y)) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [60], by (Star) 60] isList*(!6220!6220(X, Y)) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [61], by (Select) 61] !6220!6220(X, Y) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [62], by (Star) 62] !6220!6220*(X, Y) >= U21(and(isPalListKind(X), isPalListKind(Y)), X, Y) because !6220!6220 > U21, [63], [65] and [67], by (Copy) 63] !6220!6220*(X, Y) >= and(isPalListKind(X), isPalListKind(Y)) because !6220!6220 > and, [64] and [66], by (Copy) 64] !6220!6220*(X, Y) >= isPalListKind(X) because !6220!6220 > isPalListKind and [65], by (Copy) 65] !6220!6220*(X, Y) >= X because [25], by (Select) 66] !6220!6220*(X, Y) >= isPalListKind(Y) because !6220!6220 > isPalListKind and [67], by (Copy) 67] !6220!6220*(X, Y) >= Y because [27], by (Select) 68] isNeList(X) > U31(isPalListKind(X), X) because [69], by definition 69] isNeList*(X) >= U31(isPalListKind(X), X) because isNeList > U31, [70] and [71], by (Copy) 70] isNeList*(X) >= isPalListKind(X) because isNeList > isPalListKind and [71], by (Copy) 71] isNeList*(X) >= X because [19], by (Select) 72] isNeList(!6220!6220(X, Y)) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [73], by (Star) 73] isNeList*(!6220!6220(X, Y)) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [74], by (Select) 74] !6220!6220(X, Y) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [75], by (Star) 75] !6220!6220*(X, Y) >= U41(and(isPalListKind(X), isPalListKind(Y)), X, Y) because !6220!6220 > U41, [63], [65] and [67], by (Copy) 76] isNeList(!6220!6220(X, Y)) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [77], by (Star) 77] isNeList*(!6220!6220(X, Y)) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [78], by (Select) 78] !6220!6220(X, Y) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) because [79], by (Star) 79] !6220!6220*(X, Y) >= U51(and(isPalListKind(X), isPalListKind(Y)), X, Y) because !6220!6220 > U51, [63], [65] and [67], by (Copy) 80] isNePal(X) >= U61(isPalListKind(X), X) because [81], by (Star) 81] isNePal*(X) >= U61(isPalListKind(X), X) because isNePal > U61, [82] and [83], by (Copy) 82] isNePal*(X) >= isPalListKind(X) because isNePal > isPalListKind and [83], by (Copy) 83] isNePal*(X) >= X because [19], by (Select) 84] isNePal(!6220!6220(X, !6220!6220(Y, X))) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) because [85], by (Star) 85] isNePal*(!6220!6220(X, !6220!6220(Y, X))) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) because [86], by (Select) 86] !6220!6220(X, !6220!6220(Y, X)) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) because [87], by (Star) 87] !6220!6220*(X, !6220!6220(Y, X)) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) because [88], by (Select) 88] !6220!6220(Y, X) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) because [89], by (Star) 89] !6220!6220*(Y, X) >= and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y))) because !6220!6220 > and, [90] and [95], by (Copy) 90] !6220!6220*(Y, X) >= and(isQid(X), isPalListKind(X)) because !6220!6220 > and, [91] and [94], by (Copy) 91] !6220!6220*(Y, X) >= isQid(X) because !6220!6220 > isQid and [92], by (Copy) 92] !6220!6220*(Y, X) >= X because [93], by (Select) 93] X >= X by (Meta) 94] !6220!6220*(Y, X) >= isPalListKind(X) because !6220!6220 > isPalListKind and [92], by (Copy) 95] !6220!6220*(Y, X) >= and(isPal(Y), isPalListKind(Y)) because !6220!6220 > and, [96] and [99], by (Copy) 96] !6220!6220*(Y, X) >= isPal(Y) because !6220!6220 > isPal and [97], by (Copy) 97] !6220!6220*(Y, X) >= Y because [98], by (Select) 98] Y >= Y by (Meta) 99] !6220!6220*(Y, X) >= isPalListKind(Y) because !6220!6220 > isPalListKind and [97], by (Copy) 100] isPal(X) >= U71(isPalListKind(X), X) because [101], by (Star) 101] isPal*(X) >= U71(isPalListKind(X), X) because isPal > U71, [102] and [103], by (Copy) 102] isPal*(X) >= isPalListKind(X) because isPal > isPalListKind and [103], by (Copy) 103] isPal*(X) >= X because [19], by (Select) 104] isPal(nil) > _|_ because [105], by definition 105] isPal*(nil) >= _|_ by (Bot) 106] isPalListKind(e) >= _|_ by (Bot) 107] isPalListKind(i) > _|_ because [108], by definition 108] isPalListKind*(i) >= _|_ by (Bot) 109] isPalListKind(o) >= _|_ by (Bot) 110] isPalListKind(!6220!6220(X, Y)) >= and(isPalListKind(X), isPalListKind(Y)) because [111], by (Star) 111] isPalListKind*(!6220!6220(X, Y)) >= and(isPalListKind(X), isPalListKind(Y)) because isPalListKind > and, [112] and [114], by (Copy) 112] isPalListKind*(!6220!6220(X, Y)) >= isPalListKind(X) because isPalListKind in Mul and [113], by (Stat) 113] !6220!6220(X, Y) > X because [65], by definition 114] isPalListKind*(!6220!6220(X, Y)) >= isPalListKind(Y) because isPalListKind in Mul and [115], by (Stat) 115] !6220!6220(X, Y) > Y because [67], by definition 116] isQid(a) >= _|_ by (Bot) 117] isQid(e) > _|_ because [118], by definition 118] isQid*(e) >= _|_ by (Bot) 119] isQid(i) >= _|_ by (Bot) 120] !6220!6220(X, Y) >= !6220!6220(X, Y) because [121] and [122], by (Fun) 121] X >= X by (Meta) 122] Y >= Y by (Meta) 123] nil >= nil by (Fun) 124] U11(X, Y) >= U11(X, Y) because U11 in Mul, [121] and [122], by (Fun) 125] _|_ >= _|_ by (Bot) 126] U12(X) >= U12(X) because U12 in Mul and [127], by (Fun) 127] X >= X by (Meta) 128] isNeList(X) >= isNeList(X) because isNeList in Mul and [127], by (Fun) 129] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [121], [122] and [130], by (Fun) 130] Z >= Z by (Meta) 131] U22(X, Y) >= U22(X, Y) because U22 in Mul, [121] and [122], by (Fun) 132] isList(X) >= isList(X) because isList in Mul and [127], by (Fun) 133] U23(X) >= U23(X) because U23 in Mul and [127], by (Fun) 134] U31(X, Y) >= U31(X, Y) because [121] and [122], by (Fun) 135] U32(X) >= U32(X) because U32 in Mul and [127], by (Fun) 136] isQid(X) >= isQid(X) because isQid in Mul and [127], by (Fun) 137] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [121], [122] and [130], by (Fun) 138] U42(X, Y) >= U42(X, Y) because U42 in Mul, [121] and [122], by (Fun) 139] U43(X) >= U43(X) because U43 in Mul and [127], by (Fun) 140] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [121], [122] and [130], by (Fun) 141] U52(X, Y) >= U52(X, Y) because U52 in Mul, [121] and [122], by (Fun) 142] U53(X) >= U53(X) because U53 in Mul and [127], by (Fun) 143] U61(X, Y) >= U61(X, Y) because U61 in Mul, [121] and [122], by (Fun) 144] U62(X) >= U62(X) because U62 in Mul and [127], by (Fun) 145] U71(X, Y) >= U71(X, Y) because U71 in Mul, [121] and [122], by (Fun) 146] U72(X) >= U72(X) because U72 in Mul and [127], by (Fun) 147] isNePal(X) >= isNePal(X) because isNePal in Mul and [127], by (Fun) 148] and(X, Y) >= and(X, Y) because and in Mul, [121] and [122], by (Fun) 149] isPalListKind(X) >= isPalListKind(X) because isPalListKind in Mul and [127], by (Fun) 150] isPal(X) >= isPal(X) because isPal in Mul and [127], by (Fun) 151] a >= a by (Fun) 152] e >= e by (Fun) 153] i >= i by (Fun) 154] o >= o by (Fun) 155] u >= u by (Fun) 156] !6220!6220(X, Y) >= !6220!6220(X, Y) because [157] and [122], by (Fun) 157] X >= X by (Meta) 158] !6220!6220(X, Y) >= !6220!6220(X, Y) because [121] and [159], by (Fun) 159] Y >= Y by (Meta) 160] !6220!6220(X, Y) >= !6220!6220(X, Y) because [161] and [122], by (Fun) 161] X >= X by (Meta) 162] !6220!6220(X, Y) >= !6220!6220(X, Y) because [121] and [163], by (Fun) 163] Y >= Y by (Meta) 164] U11(X, Y) >= U11(X, Y) because U11 in Mul, [157] and [122], by (Fun) 165] U11(X, Y) >= U11(X, Y) because U11 in Mul, [121] and [159], by (Fun) 166] U11(X, Y) >= U11(X, Y) because U11 in Mul, [161] and [122], by (Fun) 167] U11(X, Y) >= U11(X, Y) because U11 in Mul, [121] and [163], by (Fun) 168] U12(X) >= U12(X) because U12 in Mul and [169], by (Fun) 169] X >= X by (Meta) 170] U12(X) >= U12(X) because U12 in Mul and [171], by (Fun) 171] X >= X by (Meta) 172] isNeList(X) >= isNeList(X) because isNeList in Mul and [169], by (Fun) 173] isNeList(X) >= isNeList(X) because isNeList in Mul and [171], by (Fun) 174] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [157], [122] and [130], by (Fun) 175] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [121], [159] and [130], by (Fun) 176] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [121], [122] and [177], by (Fun) 177] Z >= Z by (Meta) 178] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [161], [122] and [130], by (Fun) 179] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [121], [163] and [130], by (Fun) 180] U21(X, Y, Z) >= U21(X, Y, Z) because U21 in Mul, [121], [122] and [181], by (Fun) 181] Z >= Z by (Meta) 182] U22(X, Y) >= U22(X, Y) because U22 in Mul, [157] and [122], by (Fun) 183] U22(X, Y) >= U22(X, Y) because U22 in Mul, [121] and [159], by (Fun) 184] U22(X, Y) >= U22(X, Y) because U22 in Mul, [161] and [122], by (Fun) 185] U22(X, Y) >= U22(X, Y) because U22 in Mul, [121] and [163], by (Fun) 186] isList(X) >= isList(X) because isList in Mul and [169], by (Fun) 187] isList(X) >= isList(X) because isList in Mul and [171], by (Fun) 188] U23(X) >= U23(X) because U23 in Mul and [169], by (Fun) 189] U23(X) >= U23(X) because U23 in Mul and [171], by (Fun) 190] U31(X, Y) >= U31(X, Y) because [157] and [122], by (Fun) 191] U31(X, Y) >= U31(X, Y) because [121] and [159], by (Fun) 192] U31(X, Y) >= U31(X, Y) because [161] and [122], by (Fun) 193] U31(X, Y) >= U31(X, Y) because [121] and [163], by (Fun) 194] U32(X) >= U32(X) because U32 in Mul and [169], by (Fun) 195] U32(X) >= U32(X) because U32 in Mul and [171], by (Fun) 196] isQid(X) >= isQid(X) because isQid in Mul and [169], by (Fun) 197] isQid(X) >= isQid(X) because isQid in Mul and [171], by (Fun) 198] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [157], [122] and [130], by (Fun) 199] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [121], [159] and [130], by (Fun) 200] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [121], [122] and [177], by (Fun) 201] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [161], [122] and [130], by (Fun) 202] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [121], [163] and [130], by (Fun) 203] U41(X, Y, Z) >= U41(X, Y, Z) because U41 in Mul, [121], [122] and [181], by (Fun) 204] U42(X, Y) >= U42(X, Y) because U42 in Mul, [157] and [122], by (Fun) 205] U42(X, Y) >= U42(X, Y) because U42 in Mul, [121] and [159], by (Fun) 206] U42(X, Y) >= U42(X, Y) because U42 in Mul, [161] and [122], by (Fun) 207] U42(X, Y) >= U42(X, Y) because U42 in Mul, [121] and [163], by (Fun) 208] U43(X) >= U43(X) because U43 in Mul and [169], by (Fun) 209] U43(X) >= U43(X) because U43 in Mul and [171], by (Fun) 210] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [157], [122] and [130], by (Fun) 211] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [121], [159] and [130], by (Fun) 212] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [121], [122] and [177], by (Fun) 213] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [161], [122] and [130], by (Fun) 214] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [121], [163] and [130], by (Fun) 215] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [121], [122] and [181], by (Fun) 216] U52(X, Y) >= U52(X, Y) because U52 in Mul, [157] and [122], by (Fun) 217] U52(X, Y) >= U52(X, Y) because U52 in Mul, [121] and [159], by (Fun) 218] U52(X, Y) >= U52(X, Y) because U52 in Mul, [161] and [122], by (Fun) 219] U52(X, Y) >= U52(X, Y) because U52 in Mul, [121] and [163], by (Fun) 220] U53(X) >= U53(X) because U53 in Mul and [169], by (Fun) 221] U53(X) >= U53(X) because U53 in Mul and [171], by (Fun) 222] U61(X, Y) >= U61(X, Y) because U61 in Mul, [157] and [122], by (Fun) 223] U61(X, Y) >= U61(X, Y) because U61 in Mul, [121] and [159], by (Fun) 224] U61(X, Y) >= U61(X, Y) because U61 in Mul, [161] and [122], by (Fun) 225] U61(X, Y) >= U61(X, Y) because U61 in Mul, [121] and [163], by (Fun) 226] U62(X) >= U62(X) because U62 in Mul and [169], by (Fun) 227] U62(X) >= U62(X) because U62 in Mul and [171], by (Fun) 228] U71(X, Y) >= U71(X, Y) because U71 in Mul, [157] and [122], by (Fun) 229] U71(X, Y) >= U71(X, Y) because U71 in Mul, [121] and [159], by (Fun) 230] U71(X, Y) >= U71(X, Y) because U71 in Mul, [161] and [122], by (Fun) 231] U71(X, Y) >= U71(X, Y) because U71 in Mul, [121] and [163], by (Fun) 232] U72(X) >= U72(X) because U72 in Mul and [169], by (Fun) 233] U72(X) >= U72(X) because U72 in Mul and [171], by (Fun) 234] isNePal(X) >= isNePal(X) because isNePal in Mul and [169], by (Fun) 235] isNePal(X) >= isNePal(X) because isNePal in Mul and [171], by (Fun) 236] and(X, Y) >= and(X, Y) because and in Mul, [157] and [122], by (Fun) 237] and(X, Y) >= and(X, Y) because and in Mul, [121] and [159], by (Fun) 238] and(X, Y) >= and(X, Y) because and in Mul, [161] and [122], by (Fun) 239] and(X, Y) >= and(X, Y) because and in Mul, [121] and [163], by (Fun) 240] isPalListKind(X) >= isPalListKind(X) because isPalListKind in Mul and [169], by (Fun) 241] isPalListKind(X) >= isPalListKind(X) because isPalListKind in Mul and [171], by (Fun) 242] isPal(X) >= isPal(X) because isPal in Mul and [169], by (Fun) 243] isPal(X) >= isPal(X) because isPal in Mul and [171], by (Fun) We can thus remove the following rules: active(!6220!6220(!6220!6220(X, Y), Z)) => mark(!6220!6220(X, !6220!6220(Y, Z))) active(U21(tt, X, Y)) => mark(U22(isList(X), Y)) active(isList(nil)) => mark(tt) active(isNeList(X)) => mark(U31(isPalListKind(X), X)) active(isPal(nil)) => mark(tt) active(isPalListKind(i)) => mark(tt) active(isQid(e)) => mark(tt) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U12(tt)) >? mark(tt) active(U23(tt)) >? mark(tt) active(U32(tt)) >? mark(tt) active(U41(tt, X, Y)) >? mark(U42(isList(X), Y)) active(U42(tt, X)) >? mark(U43(isNeList(X))) active(U43(tt)) >? mark(tt) active(U52(tt, X)) >? mark(U53(isList(X))) active(U53(tt)) >? mark(tt) active(U62(tt)) >? mark(tt) active(U71(tt, X)) >? mark(U72(isNePal(X))) active(U72(tt)) >? mark(tt) active(and(tt, X)) >? mark(X) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isList(!6220!6220(X, Y))) >? mark(U21(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(!6220!6220(X, Y))) >? mark(U41(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(!6220!6220(X, Y))) >? mark(U51(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) active(isNePal(!6220!6220(X, !6220!6220(Y, X)))) >? mark(and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y)))) active(isPal(X)) >? mark(U71(isPalListKind(X), X)) active(isPalListKind(e)) >? mark(tt) active(isPalListKind(o)) >? mark(tt) active(isPalListKind(!6220!6220(X, Y))) >? mark(and(isPalListKind(X), isPalListKind(Y))) active(isQid(a)) >? mark(tt) active(isQid(i)) >? mark(tt) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.2 + 3y0 + 3y1 U11 = \y0y1.y0 + 2y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.3 + y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.1 + 2y0 + 2y2 + 3y1 U42 = \y0y1.y0 + 2y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.3 + y0 + 3y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + 2y1 U72 = \y0.y0 a = 2 active = \y0.y0 and = \y0y1.y0 + y1 e = 0 i = 0 isList = \y0.3y0 isNeList = \y0.2y0 isNePal = \y0.2y0 isPal = \y0.3y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.y0 nil = 0 o = 0 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[active(U11(tt, _x0))]] = 2x0 >= 2x0 = [[mark(U12(isNeList(_x0)))]] [[active(U12(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U23(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U32(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U41(tt, _x0, _x1))]] = 1 + 2x1 + 3x0 > 2x1 + 3x0 = [[mark(U42(isList(_x0), _x1))]] [[active(U42(tt, _x0))]] = 2x0 >= 2x0 = [[mark(U43(isNeList(_x0)))]] [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U52(tt, _x0))]] = 3 + 3x0 > 3x0 = [[mark(U53(isList(_x0)))]] [[active(U53(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U62(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U71(tt, _x0))]] = 2x0 >= 2x0 = [[mark(U72(isNePal(_x0)))]] [[active(U72(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(and(tt, _x0))]] = x0 >= x0 = [[mark(_x0)]] [[active(isList(_x0))]] = 3x0 >= 3x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[active(isList(!6220!6220(_x0, _x1)))]] = 6 + 9x0 + 9x1 > 2x0 + 2x1 = [[mark(U21(and(isPalListKind(_x0), isPalListKind(_x1)), _x0, _x1))]] [[active(isNeList(!6220!6220(_x0, _x1)))]] = 4 + 6x0 + 6x1 > 1 + 4x1 + 5x0 = [[mark(U41(and(isPalListKind(_x0), isPalListKind(_x1)), _x0, _x1))]] [[active(isNeList(!6220!6220(_x0, _x1)))]] = 4 + 6x0 + 6x1 > 2x0 + 2x1 = [[mark(U51(and(isPalListKind(_x0), isPalListKind(_x1)), _x0, _x1))]] [[active(isNePal(_x0))]] = 2x0 >= 2x0 = [[mark(U61(isPalListKind(_x0), _x0))]] [[active(isNePal(!6220!6220(_x0, !6220!6220(_x1, _x0))))]] = 16 + 18x1 + 24x0 > 2x0 + 4x1 = [[mark(and(and(isQid(_x0), isPalListKind(_x0)), and(isPal(_x1), isPalListKind(_x1))))]] [[active(isPal(_x0))]] = 3x0 >= 3x0 = [[mark(U71(isPalListKind(_x0), _x0))]] [[active(isPalListKind(e))]] = 0 >= 0 = [[mark(tt)]] [[active(isPalListKind(o))]] = 0 >= 0 = [[mark(tt)]] [[active(isPalListKind(!6220!6220(_x0, _x1)))]] = 2 + 3x0 + 3x1 > x0 + x1 = [[mark(and(isPalListKind(_x0), isPalListKind(_x1)))]] [[active(isQid(a))]] = 2 > 0 = [[mark(tt)]] [[active(isQid(i))]] = 0 >= 0 = [[mark(tt)]] [[mark(!6220!6220(_x0, _x1))]] = 2 + 3x0 + 3x1 >= 2 + 3x0 + 3x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = 2x0 >= 2x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 3x0 >= 3x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = x0 >= x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = x0 >= x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = 1 + 2x0 + 2x2 + 3x1 >= 1 + 2x0 + 2x2 + 3x1 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = x0 >= x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = 3 + x0 + 3x1 >= 3 + x0 + 3x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = x0 >= x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = x0 >= x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = x0 >= x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 2x0 >= 2x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = 3x0 >= 3x0 = [[active(isPal(_x0))]] [[mark(a)]] = 2 >= 2 = [[active(a)]] [[mark(e)]] = 0 >= 0 = [[active(e)]] [[mark(i)]] = 0 >= 0 = [[active(i)]] [[mark(o)]] = 0 >= 0 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = 2 + 3x0 + 3x1 >= 2 + 3x0 + 3x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = 2 + 3x0 + 3x1 >= 2 + 3x0 + 3x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = 2 + 3x0 + 3x1 >= 2 + 3x0 + 3x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = 2 + 3x0 + 3x1 >= 2 + 3x0 + 3x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 2x0 >= 2x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = 2x0 >= 2x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 3x0 >= 3x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 3x0 >= 3x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = 1 + 2x0 + 2x2 + 3x1 >= 1 + 2x0 + 2x2 + 3x1 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = 1 + 2x0 + 2x2 + 3x1 >= 1 + 2x0 + 2x2 + 3x1 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = 1 + 2x0 + 2x2 + 3x1 >= 1 + 2x0 + 2x2 + 3x1 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = 1 + 2x0 + 2x2 + 3x1 >= 1 + 2x0 + 2x2 + 3x1 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = 1 + 2x0 + 2x2 + 3x1 >= 1 + 2x0 + 2x2 + 3x1 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = 1 + 2x0 + 2x2 + 3x1 >= 1 + 2x0 + 2x2 + 3x1 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = 3 + x0 + 3x1 >= 3 + x0 + 3x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = 3 + x0 + 3x1 >= 3 + x0 + 3x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = 3 + x0 + 3x1 >= 3 + x0 + 3x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = 3 + x0 + 3x1 >= 3 + x0 + 3x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 3x0 >= 3x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = 3x0 >= 3x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U41(tt, X, Y)) => mark(U42(isList(X), Y)) active(U52(tt, X)) => mark(U53(isList(X))) active(isList(!6220!6220(X, Y))) => mark(U21(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(!6220!6220(X, Y))) => mark(U41(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNeList(!6220!6220(X, Y))) => mark(U51(and(isPalListKind(X), isPalListKind(Y)), X, Y)) active(isNePal(!6220!6220(X, !6220!6220(Y, X)))) => mark(and(and(isQid(X), isPalListKind(X)), and(isPal(Y), isPalListKind(Y)))) active(isPalListKind(!6220!6220(X, Y))) => mark(and(isPalListKind(X), isPalListKind(Y))) active(isQid(a)) => mark(tt) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U12(tt)) >? mark(tt) active(U23(tt)) >? mark(tt) active(U32(tt)) >? mark(tt) active(U42(tt, X)) >? mark(U43(isNeList(X))) active(U43(tt)) >? mark(tt) active(U53(tt)) >? mark(tt) active(U62(tt)) >? mark(tt) active(U71(tt, X)) >? mark(U72(isNePal(X))) active(U72(tt)) >? mark(tt) active(and(tt, X)) >? mark(X) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) active(isPal(X)) >? mark(U71(isPalListKind(X), X)) active(isPalListKind(e)) >? mark(tt) active(isPalListKind(o)) >? mark(tt) active(isQid(i)) >? mark(tt) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.1 + y1 + 2y0 U12 = \y0.1 + y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.3 + y0 U71 = \y0y1.y0 + 2y1 U72 = \y0.y0 a = 0 active = \y0.y0 and = \y0y1.y0 + y1 e = 0 i = 0 isList = \y0.1 + 3y0 isNeList = \y0.y0 isNePal = \y0.2y0 isPal = \y0.3y0 isPalListKind = \y0.y0 isQid = \y0.2 + 2y0 mark = \y0.y0 nil = 0 o = 1 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[active(U11(tt, _x0))]] = 1 + x0 >= 1 + x0 = [[mark(U12(isNeList(_x0)))]] [[active(U12(tt))]] = 1 > 0 = [[mark(tt)]] [[active(U23(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U32(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U42(tt, _x0))]] = x0 >= x0 = [[mark(U43(isNeList(_x0)))]] [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U53(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U62(tt))]] = 3 > 0 = [[mark(tt)]] [[active(U71(tt, _x0))]] = 2x0 >= 2x0 = [[mark(U72(isNePal(_x0)))]] [[active(U72(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(and(tt, _x0))]] = x0 >= x0 = [[mark(_x0)]] [[active(isList(_x0))]] = 1 + 3x0 >= 1 + 3x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[active(isNePal(_x0))]] = 2x0 >= 2x0 = [[mark(U61(isPalListKind(_x0), _x0))]] [[active(isPal(_x0))]] = 3x0 >= 3x0 = [[mark(U71(isPalListKind(_x0), _x0))]] [[active(isPalListKind(e))]] = 0 >= 0 = [[mark(tt)]] [[active(isPalListKind(o))]] = 1 > 0 = [[mark(tt)]] [[active(isQid(i))]] = 2 > 0 = [[mark(tt)]] [[mark(!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 1 + 3x0 >= 1 + 3x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = x0 >= x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = 2 + 2x0 >= 2 + 2x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = x0 >= x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = x0 >= x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = 3 + x0 >= 3 + x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = x0 >= x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 2x0 >= 2x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = 3x0 >= 3x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 0 >= 0 = [[active(e)]] [[mark(i)]] = 0 >= 0 = [[active(i)]] [[mark(o)]] = 1 >= 1 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 1 + 3x0 >= 1 + 3x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 1 + 3x0 >= 1 + 3x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 2 + 2x0 >= 2 + 2x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = 2 + 2x0 >= 2 + 2x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 3 + x0 >= 3 + x0 = [[U62(_x0)]] [[U62(active(_x0))]] = 3 + x0 >= 3 + x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 3x0 >= 3x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = 3x0 >= 3x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U12(tt)) => mark(tt) active(U62(tt)) => mark(tt) active(isPalListKind(o)) => mark(tt) active(isQid(i)) => mark(tt) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U23(tt)) >? mark(tt) active(U32(tt)) >? mark(tt) active(U42(tt, X)) >? mark(U43(isNeList(X))) active(U43(tt)) >? mark(tt) active(U53(tt)) >? mark(tt) active(U71(tt, X)) >? mark(U72(isNePal(X))) active(U72(tt)) >? mark(tt) active(and(tt, X)) >? mark(X) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) active(isPal(X)) >? mark(U71(isPalListKind(X), X)) active(isPalListKind(e)) >? mark(tt) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.3 + y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.1 + y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.1 + y0 + y1 + y2 U42 = \y0y1.2 + 2y0 + 2y1 U43 = \y0.2y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + 2y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + 2y1 U72 = \y0.y0 a = 0 active = \y0.y0 and = \y0y1.1 + y0 + y1 e = 2 i = 0 isList = \y0.2y0 isNeList = \y0.y0 isNePal = \y0.2y0 isPal = \y0.2 + 3y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.y0 nil = 0 o = 0 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[active(U11(tt, _x0))]] = x0 >= x0 = [[mark(U12(isNeList(_x0)))]] [[active(U23(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U32(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U42(tt, _x0))]] = 2 + 2x0 > 2x0 = [[mark(U43(isNeList(_x0)))]] [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U53(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U71(tt, _x0))]] = 2x0 >= 2x0 = [[mark(U72(isNePal(_x0)))]] [[active(U72(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(and(tt, _x0))]] = 1 + x0 > x0 = [[mark(_x0)]] [[active(isList(_x0))]] = 2x0 >= 2x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[active(isNePal(_x0))]] = 2x0 >= 2x0 = [[mark(U61(isPalListKind(_x0), _x0))]] [[active(isPal(_x0))]] = 2 + 3x0 > 3x0 = [[mark(U71(isPalListKind(_x0), _x0))]] [[active(isPalListKind(e))]] = 2 > 0 = [[mark(tt)]] [[mark(!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 2x0 >= 2x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = x0 >= x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = x0 >= x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = 2 + 2x0 + 2x1 >= 2 + 2x0 + 2x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = 2x0 >= 2x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = x0 >= x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = x0 >= x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = x0 >= x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 2x0 >= 2x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = 2 + 3x0 >= 2 + 3x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 2 >= 2 = [[active(e)]] [[mark(i)]] = 0 >= 0 = [[active(i)]] [[mark(o)]] = 0 >= 0 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2x0 >= 2x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 2x0 >= 2x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = 2 + 2x0 + 2x1 >= 2 + 2x0 + 2x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = 2 + 2x0 + 2x1 >= 2 + 2x0 + 2x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = 2 + 2x0 + 2x1 >= 2 + 2x0 + 2x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = 2 + 2x0 + 2x1 >= 2 + 2x0 + 2x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 2x0 >= 2x0 = [[U43(_x0)]] [[U43(active(_x0))]] = 2x0 >= 2x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 2 + 3x0 >= 2 + 3x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = 2 + 3x0 >= 2 + 3x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U42(tt, X)) => mark(U43(isNeList(X))) active(and(tt, X)) => mark(X) active(isPal(X)) => mark(U71(isPalListKind(X), X)) active(isPalListKind(e)) => mark(tt) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U23(tt)) >? mark(tt) active(U32(tt)) >? mark(tt) active(U43(tt)) >? mark(tt) active(U53(tt)) >? mark(tt) active(U71(tt, X)) >? mark(U72(isNePal(X))) active(U72(tt)) >? mark(tt) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.1 + y0 + y1 U11 = \y0y1.y0 + 2y1 U12 = \y0.2y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.1 + y0 U71 = \y0y1.1 + y0 + 2y1 U72 = \y0.1 + y0 a = 0 active = \y0.y0 and = \y0y1.y0 + 2y1 e = 0 i = 0 isList = \y0.3y0 isNeList = \y0.y0 isNePal = \y0.2y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.y0 nil = 0 o = 0 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[active(U11(tt, _x0))]] = 2x0 >= 2x0 = [[mark(U12(isNeList(_x0)))]] [[active(U23(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U32(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U53(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U71(tt, _x0))]] = 1 + 2x0 >= 1 + 2x0 = [[mark(U72(isNePal(_x0)))]] [[active(U72(tt))]] = 1 > 0 = [[mark(tt)]] [[active(isList(_x0))]] = 3x0 >= 3x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[active(isNePal(_x0))]] = 2x0 >= 2x0 = [[mark(U61(isPalListKind(_x0), _x0))]] [[mark(!6220!6220(_x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = 2x0 >= 2x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 3x0 >= 3x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = x0 >= x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = x0 >= x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = x0 >= x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = x0 >= x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 2x0 >= 2x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = x0 >= x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 0 >= 0 = [[active(e)]] [[mark(i)]] = 0 >= 0 = [[active(i)]] [[mark(o)]] = 0 >= 0 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= 2x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 2x0 >= 2x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 3x0 >= 3x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 3x0 >= 3x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U62(_x0)]] [[U62(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U72(_x0)]] [[U72(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U72(tt)) => mark(tt) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U23(tt)) >? mark(tt) active(U32(tt)) >? mark(tt) active(U43(tt)) >? mark(tt) active(U53(tt)) >? mark(tt) active(U71(tt, X)) >? mark(U72(isNePal(X))) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y1 + 2y0 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y1 + 2y0 U32 = \y0.1 + y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + 2y1 U72 = \y0.y0 a = 0 active = \y0.y0 and = \y0y1.y0 + y1 e = 0 i = 0 isList = \y0.3y0 isNeList = \y0.y0 isNePal = \y0.2y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.y0 nil = 0 o = 0 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[active(U11(tt, _x0))]] = x0 >= x0 = [[mark(U12(isNeList(_x0)))]] [[active(U23(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U32(tt))]] = 1 > 0 = [[mark(tt)]] [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U53(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U71(tt, _x0))]] = 2x0 >= 2x0 = [[mark(U72(isNePal(_x0)))]] [[active(isList(_x0))]] = 3x0 >= 3x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[active(isNePal(_x0))]] = 2x0 >= 2x0 = [[mark(U61(isPalListKind(_x0), _x0))]] [[mark(!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 3x0 >= 3x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = x0 >= x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = x0 >= x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = x0 >= x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = x0 >= x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = x0 >= x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = x0 >= x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 2x0 >= 2x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = x0 >= x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 0 >= 0 = [[active(e)]] [[mark(i)]] = 0 >= 0 = [[active(i)]] [[mark(o)]] = 0 >= 0 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 3x0 >= 3x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 3x0 >= 3x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U32(_x0)]] [[U32(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U32(tt)) => mark(tt) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U23(tt)) >? mark(tt) active(U43(tt)) >? mark(tt) active(U53(tt)) >? mark(tt) active(U71(tt, X)) >? mark(U72(isNePal(X))) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.2 + y0 + 2y1 U72 = \y0.y0 a = 0 active = \y0.y0 and = \y0y1.y0 + y1 e = 0 i = 3 isList = \y0.2y0 isNeList = \y0.y0 isNePal = \y0.2y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.y0 nil = 0 o = 0 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[active(U11(tt, _x0))]] = x0 >= x0 = [[mark(U12(isNeList(_x0)))]] [[active(U23(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U53(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U71(tt, _x0))]] = 2 + 2x0 > 2x0 = [[mark(U72(isNePal(_x0)))]] [[active(isList(_x0))]] = 2x0 >= 2x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[active(isNePal(_x0))]] = 2x0 >= 2x0 = [[mark(U61(isPalListKind(_x0), _x0))]] [[mark(!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 2x0 >= 2x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = x0 >= x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = x0 >= x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = x0 >= x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = x0 >= x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = x0 >= x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = 2 + x0 + 2x1 >= 2 + x0 + 2x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = x0 >= x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 2x0 >= 2x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = x0 >= x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 0 >= 0 = [[active(e)]] [[mark(i)]] = 3 >= 3 = [[active(i)]] [[mark(o)]] = 0 >= 0 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2x0 >= 2x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 2x0 >= 2x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = 2 + x0 + 2x1 >= 2 + x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = 2 + x0 + 2x1 >= 2 + x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = 2 + x0 + 2x1 >= 2 + x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = 2 + x0 + 2x1 >= 2 + x0 + 2x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 2x0 >= 2x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U71(tt, X)) => mark(U72(isNePal(X))) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U23(tt)) >? mark(tt) active(U43(tt)) >? mark(tt) active(U53(tt)) >? mark(tt) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y1 + 2y0 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.1 + y0 + y1 U23 = \y0.2y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.1 + y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.1 + y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.1 + y0 U61 = \y0y1.y0 + 2y1 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.y0 a = 0 active = \y0.y0 and = \y0y1.y0 + y1 e = 0 i = 0 isList = \y0.3y0 isNeList = \y0.y0 isNePal = \y0.3y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.y0 nil = 0 o = 0 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[active(U11(tt, _x0))]] = x0 >= x0 = [[mark(U12(isNeList(_x0)))]] [[active(U23(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U53(tt))]] = 1 > 0 = [[mark(tt)]] [[active(isList(_x0))]] = 3x0 >= 3x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[active(isNePal(_x0))]] = 3x0 >= 3x0 = [[mark(U61(isPalListKind(_x0), _x0))]] [[mark(!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 3x0 >= 3x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = 2x0 >= 2x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = x0 >= x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = x0 >= x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = x0 >= x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = x0 >= x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 3x0 >= 3x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = x0 >= x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 0 >= 0 = [[active(e)]] [[mark(i)]] = 0 >= 0 = [[active(i)]] [[mark(o)]] = 0 >= 0 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 3x0 >= 3x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 3x0 >= 3x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 2x0 >= 2x0 = [[U23(_x0)]] [[U23(active(_x0))]] = 2x0 >= 2x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U53(_x0)]] [[U53(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 3x0 >= 3x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 3x0 >= 3x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U53(tt)) => mark(tt) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U11(tt, X)) >? mark(U12(isNeList(X))) active(U23(tt)) >? mark(tt) active(U43(tt)) >? mark(tt) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.1 + y0 + 2y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.1 + y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + 2y1 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.y0 a = 0 active = \y0.y0 and = \y0y1.y0 + 2y1 e = 0 i = 0 isList = \y0.1 + 3y0 isNeList = \y0.y0 isNePal = \y0.3y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.y0 nil = 0 o = 0 tt = 1 u = 0 Using this interpretation, the requirements translate to: [[active(U11(tt, _x0))]] = 2 + 2x0 > x0 = [[mark(U12(isNeList(_x0)))]] [[active(U23(tt))]] = 1 >= 1 = [[mark(tt)]] [[active(U43(tt))]] = 1 >= 1 = [[mark(tt)]] [[active(isList(_x0))]] = 1 + 3x0 >= 1 + 3x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[active(isNePal(_x0))]] = 3x0 >= 3x0 = [[mark(U61(isPalListKind(_x0), _x0))]] [[mark(!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 1 >= 1 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 1 + 3x0 >= 1 + 3x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = x0 >= x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = x0 >= x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = x0 >= x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = x0 >= x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = x0 >= x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = x0 >= x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 3x0 >= 3x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = x0 >= x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 0 >= 0 = [[active(e)]] [[mark(i)]] = 0 >= 0 = [[active(i)]] [[mark(o)]] = 0 >= 0 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = 1 + x0 + 2x1 >= 1 + x0 + 2x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 1 + 3x0 >= 1 + 3x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 1 + 3x0 >= 1 + 3x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 3x0 >= 3x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 3x0 >= 3x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U11(tt, X)) => mark(U12(isNeList(X))) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U23(tt)) >? mark(tt) active(U43(tt)) >? mark(tt) active(isList(X)) >? mark(U11(isPalListKind(X), X)) active(isNePal(X)) >? mark(U61(isPalListKind(X), X)) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.1 + y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + 2y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.1 + y1 + 2y0 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.y0 a = 0 active = \y0.y0 and = \y0y1.y0 + y1 e = 0 i = 0 isList = \y0.2y0 isNeList = \y0.y0 isNePal = \y0.2 + 3y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.y0 nil = 0 o = 0 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[active(U23(tt))]] = 1 > 0 = [[mark(tt)]] [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(isList(_x0))]] = 2x0 >= 2x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[active(isNePal(_x0))]] = 2 + 3x0 > 1 + 3x0 = [[mark(U61(isPalListKind(_x0), _x0))]] [[mark(!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 2x0 >= 2x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = x0 >= x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = x0 >= x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = x0 >= x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = x0 >= x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = x0 >= x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 2 + 3x0 >= 2 + 3x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = x0 >= x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 0 >= 0 = [[active(e)]] [[mark(i)]] = 0 >= 0 = [[active(i)]] [[mark(o)]] = 0 >= 0 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2x0 >= 2x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 2x0 >= 2x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U23(_x0)]] [[U23(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2 + 3x0 >= 2 + 3x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 2 + 3x0 >= 2 + 3x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U23(tt)) => mark(tt) active(isNePal(X)) => mark(U61(isPalListKind(X), X)) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U43(tt)) >? mark(tt) active(isList(X)) >? mark(U11(isPalListKind(X), X)) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y1 + 2y0 U12 = \y0.1 + y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.2y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.1 + y0 a = 0 active = \y0.y0 and = \y0y1.y0 + y1 e = 0 i = 0 isList = \y0.2 + 3y0 isNeList = \y0.1 + y0 isNePal = \y0.1 + 2y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.y0 nil = 0 o = 0 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(isList(_x0))]] = 2 + 3x0 > 3x0 = [[mark(U11(isPalListKind(_x0), _x0))]] [[mark(!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 0 >= 0 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = 1 + x0 >= 1 + x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 2 + 3x0 >= 2 + 3x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = x0 >= x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = x0 >= x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = x0 >= x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = 2x0 >= 2x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = x0 >= x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = x0 >= x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 0 >= 0 = [[active(e)]] [[mark(i)]] = 0 >= 0 = [[active(i)]] [[mark(o)]] = 0 >= 0 = [[active(o)]] [[mark(u)]] = 0 >= 0 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = 1 + x0 >= 1 + x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2 + 3x0 >= 2 + 3x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 2 + 3x0 >= 2 + 3x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 2x0 >= 2x0 = [[U53(_x0)]] [[U53(active(_x0))]] = 2x0 >= 2x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U72(_x0)]] [[U72(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: active(isList(X)) => mark(U11(isPalListKind(X), X)) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U43(tt)) >? mark(tt) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(nil) >? active(nil) mark(U11(X, Y)) >? active(U11(mark(X), Y)) mark(tt) >? active(tt) mark(U12(X)) >? active(U12(mark(X))) mark(isNeList(X)) >? active(isNeList(X)) mark(U21(X, Y, Z)) >? active(U21(mark(X), Y, Z)) mark(U22(X, Y)) >? active(U22(mark(X), Y)) mark(isList(X)) >? active(isList(X)) mark(U23(X)) >? active(U23(mark(X))) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(isQid(X)) >? active(isQid(X)) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U42(X, Y)) >? active(U42(mark(X), Y)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U61(X, Y)) >? active(U61(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(U71(X, Y)) >? active(U71(mark(X), Y)) mark(U72(X)) >? active(U72(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(and(X, Y)) >? active(and(mark(X), Y)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) mark(e) >? active(e) mark(i) >? active(i) mark(o) >? active(o) mark(u) >? active(u) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + 2y1 U11 = \y0y1.2 + y0 + 2y1 U12 = \y0.2 + y0 U21 = \y0y1y2.1 + y0 + y1 + y2 U22 = \y0y1.2 + y0 + y1 U23 = \y0.2 + y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.3 + y0 + y1 U43 = \y0.2y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + 2y1 U53 = \y0.y0 U61 = \y0y1.1 + y0 + y1 U62 = \y0.y0 U71 = \y0y1.2 + y0 + y1 U72 = \y0.1 + y0 a = 0 active = \y0.y0 and = \y0y1.1 + y0 + y1 e = 1 i = 2 isList = \y0.2 + 2y0 isNeList = \y0.y0 isNePal = \y0.y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.1 + 2y0 mark = \y0.2y0 nil = 1 o = 1 tt = 0 u = 1 Using this interpretation, the requirements translate to: [[active(U43(tt))]] = 0 >= 0 = [[mark(tt)]] [[mark(!6220!6220(_x0, _x1))]] = 2x0 + 4x1 >= 2x0 + 4x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(nil)]] = 2 > 1 = [[active(nil)]] [[mark(U11(_x0, _x1))]] = 4 + 2x0 + 4x1 > 2 + 2x0 + 2x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = 4 + 2x0 > 2 + 2x0 = [[active(U12(mark(_x0)))]] [[mark(isNeList(_x0))]] = 2x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U21(_x0, _x1, _x2))]] = 2 + 2x0 + 2x1 + 2x2 > 1 + x1 + x2 + 2x0 = [[active(U21(mark(_x0), _x1, _x2))]] [[mark(U22(_x0, _x1))]] = 4 + 2x0 + 2x1 > 2 + x1 + 2x0 = [[active(U22(mark(_x0), _x1))]] [[mark(isList(_x0))]] = 4 + 4x0 > 2 + 2x0 = [[active(isList(_x0))]] [[mark(U23(_x0))]] = 4 + 2x0 > 2 + 2x0 = [[active(U23(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = 2x0 >= 2x0 = [[active(U32(mark(_x0)))]] [[mark(isQid(_x0))]] = 2 + 4x0 > 1 + 2x0 = [[active(isQid(_x0))]] [[mark(U41(_x0, _x1, _x2))]] = 2x0 + 2x1 + 2x2 >= x1 + x2 + 2x0 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U42(_x0, _x1))]] = 6 + 2x0 + 2x1 > 3 + x1 + 2x0 = [[active(U42(mark(_x0), _x1))]] [[mark(U43(_x0))]] = 4x0 >= 4x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = 2x0 + 2x1 + 2x2 >= x1 + x2 + 2x0 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = 2x0 + 4x1 >= 2x0 + 2x1 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = 2x0 >= 2x0 = [[active(U53(mark(_x0)))]] [[mark(U61(_x0, _x1))]] = 2 + 2x0 + 2x1 > 1 + x1 + 2x0 = [[active(U61(mark(_x0), _x1))]] [[mark(U62(_x0))]] = 2x0 >= 2x0 = [[active(U62(mark(_x0)))]] [[mark(U71(_x0, _x1))]] = 4 + 2x0 + 2x1 > 2 + x1 + 2x0 = [[active(U71(mark(_x0), _x1))]] [[mark(U72(_x0))]] = 2 + 2x0 > 1 + 2x0 = [[active(U72(mark(_x0)))]] [[mark(isNePal(_x0))]] = 2x0 >= x0 = [[active(isNePal(_x0))]] [[mark(and(_x0, _x1))]] = 2 + 2x0 + 2x1 > 1 + x1 + 2x0 = [[active(and(mark(_x0), _x1))]] [[mark(isPalListKind(_x0))]] = 2x0 >= x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = 2x0 >= x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[mark(e)]] = 2 > 1 = [[active(e)]] [[mark(i)]] = 4 > 2 = [[active(i)]] [[mark(o)]] = 2 > 1 = [[active(o)]] [[mark(u)]] = 2 > 1 = [[active(u)]] [[!6220!6220(mark(_x0), _x1)]] = 2x0 + 2x1 >= x0 + 2x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + 4x1 >= x0 + 2x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = 2 + 2x0 + 2x1 >= 2 + x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = 2 + x0 + 4x1 >= 2 + x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 2 + x0 + 2x1 >= 2 + x0 + 2x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = 2 + x0 + 2x1 >= 2 + x0 + 2x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2 + 2x0 >= 2 + x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 2 + x0 >= 2 + x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 2x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = 1 + x1 + x2 + 2x0 >= 1 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = 1 + x0 + x2 + 2x1 >= 1 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = 1 + x0 + x1 + 2x2 >= 1 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = 2 + x1 + 2x0 >= 2 + x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = 2 + x0 + 2x1 >= 2 + x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = 2 + x0 + x1 >= 2 + x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = 2 + x0 + x1 >= 2 + x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2 + 4x0 >= 2 + 2x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 2 + 2x0 >= 2 + 2x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 2 + 2x0 >= 2 + x0 = [[U23(_x0)]] [[U23(active(_x0))]] = 2 + x0 >= 2 + x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 2x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 1 + 4x0 >= 1 + 2x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = 3 + x1 + 2x0 >= 3 + x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = 3 + x0 + 2x1 >= 3 + x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 4x0 >= 2x0 = [[U43(_x0)]] [[U43(active(_x0))]] = 2x0 >= 2x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = 2x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + 4x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 2x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = 1 + x1 + 2x0 >= 1 + x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = 1 + x0 + 2x1 >= 1 + x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 2x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = 2 + x1 + 2x0 >= 2 + x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = 2 + x0 + 2x1 >= 2 + x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = 2 + x0 + x1 >= 2 + x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = 2 + x0 + x1 >= 2 + x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 1 + 2x0 >= 1 + x0 = [[U72(_x0)]] [[U72(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = x0 >= x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = 1 + x1 + 2x0 >= 1 + x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = 1 + x0 + 2x1 >= 1 + x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 2x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 2x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: mark(nil) => active(nil) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(U12(X)) => active(U12(mark(X))) mark(U21(X, Y, Z)) => active(U21(mark(X), Y, Z)) mark(U22(X, Y)) => active(U22(mark(X), Y)) mark(isList(X)) => active(isList(X)) mark(U23(X)) => active(U23(mark(X))) mark(isQid(X)) => active(isQid(X)) mark(U42(X, Y)) => active(U42(mark(X), Y)) mark(U61(X, Y)) => active(U61(mark(X), Y)) mark(U71(X, Y)) => active(U71(mark(X), Y)) mark(U72(X)) => active(U72(mark(X))) mark(and(X, Y)) => active(and(mark(X), Y)) mark(e) => active(e) mark(i) => active(i) mark(o) => active(o) mark(u) => active(u) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): active(U43(tt)) >? mark(tt) mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(tt) >? active(tt) mark(isNeList(X)) >? active(isNeList(X)) mark(U31(X, Y)) >? active(U31(mark(X), Y)) mark(U32(X)) >? active(U32(mark(X))) mark(U41(X, Y, Z)) >? active(U41(mark(X), Y, Z)) mark(U43(X)) >? active(U43(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U53(X)) >? active(U53(mark(X))) mark(U62(X)) >? active(U62(mark(X))) mark(isNePal(X)) >? active(isNePal(X)) mark(isPalListKind(X)) >? active(isPalListKind(X)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y1 + y2 + 2y0 U22 = \y0y1.y0 + y1 U23 = \y0.2y0 U31 = \y0y1.2 + y0 + 2y1 U32 = \y0.y0 U41 = \y0y1y2.3 + y0 + y1 + y2 U42 = \y0y1.y1 + 2y0 U43 = \y0.2 + y0 U51 = \y0y1y2.y0 + y2 + 2y1 U52 = \y0y1.y0 + y1 U53 = \y0.1 + y0 U61 = \y0y1.y0 + 2y1 U62 = \y0.2y0 U71 = \y0y1.y0 + y1 U72 = \y0.y0 a = 0 active = \y0.y0 and = \y0y1.y1 + 2y0 isList = \y0.y0 isNeList = \y0.2y0 isNePal = \y0.1 + y0 isPal = \y0.2y0 isPalListKind = \y0.2 + y0 isQid = \y0.y0 mark = \y0.2y0 tt = 0 Using this interpretation, the requirements translate to: [[active(U43(tt))]] = 2 > 0 = [[mark(tt)]] [[mark(!6220!6220(_x0, _x1))]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(isNeList(_x0))]] = 4x0 >= 2x0 = [[active(isNeList(_x0))]] [[mark(U31(_x0, _x1))]] = 4 + 2x0 + 4x1 > 2 + 2x0 + 2x1 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = 2x0 >= 2x0 = [[active(U32(mark(_x0)))]] [[mark(U41(_x0, _x1, _x2))]] = 6 + 2x0 + 2x1 + 2x2 > 3 + x1 + x2 + 2x0 = [[active(U41(mark(_x0), _x1, _x2))]] [[mark(U43(_x0))]] = 4 + 2x0 > 2 + 2x0 = [[active(U43(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = 2x0 + 2x2 + 4x1 >= x2 + 2x0 + 2x1 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[active(U52(mark(_x0), _x1))]] [[mark(U53(_x0))]] = 2 + 2x0 > 1 + 2x0 = [[active(U53(mark(_x0)))]] [[mark(U62(_x0))]] = 4x0 >= 4x0 = [[active(U62(mark(_x0)))]] [[mark(isNePal(_x0))]] = 2 + 2x0 > 1 + x0 = [[active(isNePal(_x0))]] [[mark(isPalListKind(_x0))]] = 4 + 2x0 > 2 + x0 = [[active(isPalListKind(_x0))]] [[mark(isPal(_x0))]] = 4x0 >= 2x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[!6220!6220(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 4x0 >= 2x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = 2x0 >= 2x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x1 + x2 + 4x0 >= x1 + x2 + 2x0 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x2 + 2x0 + 2x1 >= x1 + x2 + 2x0 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x1 + 2x0 + 2x2 >= x1 + x2 + 2x0 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x1 + x2 + 2x0 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x1 + x2 + 2x0 >= x1 + x2 + 2x0 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x1 + x2 + 2x0 >= x1 + x2 + 2x0 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2x0 >= x0 = [[isList(_x0)]] [[isList(active(_x0))]] = x0 >= x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 4x0 >= 2x0 = [[U23(_x0)]] [[U23(active(_x0))]] = 2x0 >= 2x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = 2 + 2x0 + 2x1 >= 2 + x0 + 2x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = 2 + x0 + 4x1 >= 2 + x0 + 2x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = 2 + x0 + 2x1 >= 2 + x0 + 2x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = 2 + x0 + 2x1 >= 2 + x0 + 2x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 2x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 2x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = 3 + x1 + x2 + 2x0 >= 3 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = 3 + x0 + x2 + 2x1 >= 3 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = 3 + x0 + x1 + 2x2 >= 3 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = 3 + x0 + x1 + x2 >= 3 + x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x1 + 4x0 >= x1 + 2x0 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 2 + 2x0 >= 2 + x0 = [[U43(_x0)]] [[U43(active(_x0))]] = 2 + x0 >= 2 + x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x2 + 2x0 + 2x1 >= x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x2 + 4x1 >= x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + 2x1 + 2x2 >= x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x2 + 2x1 >= x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x2 + 2x1 >= x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 1 + 2x0 >= 1 + x0 = [[U53(_x0)]] [[U53(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = 2x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 4x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 4x0 >= 2x0 = [[U62(_x0)]] [[U62(active(_x0))]] = 2x0 >= 2x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 2x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 1 + 2x0 >= 1 + x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 1 + x0 >= 1 + x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x1 + 4x0 >= x1 + 2x0 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 2 + 2x0 >= 2 + x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = 2 + x0 >= 2 + x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 4x0 >= 2x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = 2x0 >= 2x0 = [[isPal(_x0)]] We can thus remove the following rules: active(U43(tt)) => mark(tt) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U41(X, Y, Z)) => active(U41(mark(X), Y, Z)) mark(U43(X)) => active(U43(mark(X))) mark(U53(X)) => active(U53(mark(X))) mark(isNePal(X)) => active(isNePal(X)) mark(isPalListKind(X)) => active(isPalListKind(X)) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(tt) >? active(tt) mark(isNeList(X)) >? active(isNeList(X)) mark(U32(X)) >? active(U32(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(U62(X)) >? active(U62(mark(X))) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.2y0 U41 = \y0y1y2.y0 + y2 + 2y1 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.2 + y0 U71 = \y0y1.y0 + y1 U72 = \y0.2y0 a = 0 active = \y0.y0 and = \y0y1.y1 + 2y0 isList = \y0.y0 isNeList = \y0.y0 isNePal = \y0.y0 isPal = \y0.2y0 isPalListKind = \y0.2y0 isQid = \y0.y0 mark = \y0.2y0 tt = 0 Using this interpretation, the requirements translate to: [[mark(!6220!6220(_x0, _x1))]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(isNeList(_x0))]] = 2x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U32(_x0))]] = 4x0 >= 4x0 = [[active(U32(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = 2x0 + 2x1 + 2x2 >= x1 + x2 + 2x0 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[active(U52(mark(_x0), _x1))]] [[mark(U62(_x0))]] = 4 + 2x0 > 2 + 2x0 = [[active(U62(mark(_x0)))]] [[mark(isPal(_x0))]] = 4x0 >= 2x0 = [[active(isPal(_x0))]] [[mark(a)]] = 0 >= 0 = [[active(a)]] [[!6220!6220(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 2x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2x0 >= x0 = [[isList(_x0)]] [[isList(active(_x0))]] = x0 >= x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 2x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 4x0 >= 2x0 = [[U32(_x0)]] [[U32(active(_x0))]] = 2x0 >= 2x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 2x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x2 + 2x0 + 2x1 >= x0 + x2 + 2x1 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x2 + 4x1 >= x0 + x2 + 2x1 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + 2x1 + 2x2 >= x0 + x2 + 2x1 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x2 + 2x1 >= x0 + x2 + 2x1 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x2 + 2x1 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x2 + 2x1 >= x0 + x2 + 2x1 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 2x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 2x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 2 + 2x0 >= 2 + x0 = [[U62(_x0)]] [[U62(active(_x0))]] = 2 + x0 >= 2 + x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 4x0 >= 2x0 = [[U72(_x0)]] [[U72(active(_x0))]] = 2x0 >= 2x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = x0 >= x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x1 + 4x0 >= x1 + 2x0 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 4x0 >= 2x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = 2x0 >= 2x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 4x0 >= 2x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = 2x0 >= 2x0 = [[isPal(_x0)]] We can thus remove the following rules: mark(U62(X)) => active(U62(mark(X))) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(tt) >? active(tt) mark(isNeList(X)) >? active(isNeList(X)) mark(U32(X)) >? active(U32(mark(X))) mark(U51(X, Y, Z)) >? active(U51(mark(X), Y, Z)) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(isPal(X)) >? active(isPal(X)) mark(a) >? active(a) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.2y0 U51 = \y0y1y2.2 + y0 + y2 + 2y1 U52 = \y0y1.y0 + 2y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.2y0 a = 2 active = \y0.y0 and = \y0y1.y0 + y1 isList = \y0.y0 isNeList = \y0.2y0 isNePal = \y0.y0 isPal = \y0.2y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.2y0 tt = 0 Using this interpretation, the requirements translate to: [[mark(!6220!6220(_x0, _x1))]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(isNeList(_x0))]] = 4x0 >= 2x0 = [[active(isNeList(_x0))]] [[mark(U32(_x0))]] = 2x0 >= 2x0 = [[active(U32(mark(_x0)))]] [[mark(U51(_x0, _x1, _x2))]] = 4 + 2x0 + 2x2 + 4x1 > 2 + x2 + 2x0 + 2x1 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1))]] = 2x0 + 4x1 >= 2x0 + 2x1 = [[active(U52(mark(_x0), _x1))]] [[mark(isPal(_x0))]] = 4x0 >= 2x0 = [[active(isPal(_x0))]] [[mark(a)]] = 4 > 2 = [[active(a)]] [[!6220!6220(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 4x0 >= 2x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = 2x0 >= 2x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2x0 >= x0 = [[isList(_x0)]] [[isList(active(_x0))]] = x0 >= x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 2x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 2x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 2x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 4x0 >= 2x0 = [[U43(_x0)]] [[U43(active(_x0))]] = 2x0 >= 2x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = 2 + x2 + 2x0 + 2x1 >= 2 + x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = 2 + x0 + x2 + 4x1 >= 2 + x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = 2 + x0 + 2x1 + 2x2 >= 2 + x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = 2 + x0 + x2 + 2x1 >= 2 + x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = 2 + x0 + x2 + 2x1 >= 2 + x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = 2 + x0 + x2 + 2x1 >= 2 + x0 + x2 + 2x1 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = 2x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + 4x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 2x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 2x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 4x0 >= 2x0 = [[U72(_x0)]] [[U72(active(_x0))]] = 2x0 >= 2x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = x0 >= x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 2x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 4x0 >= 2x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = 2x0 >= 2x0 = [[isPal(_x0)]] We can thus remove the following rules: mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(a) => active(a) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(tt) >? active(tt) mark(isNeList(X)) >? active(isNeList(X)) mark(U32(X)) >? active(U32(mark(X))) mark(U52(X, Y)) >? active(U52(mark(X), Y)) mark(isPal(X)) >? active(isPal(X)) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y1 + 2y0 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.1 + y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.y0 active = \y0.y0 and = \y0y1.y1 + 2y0 isList = \y0.y0 isNeList = \y0.y0 isNePal = \y0.y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.2y0 tt = 0 Using this interpretation, the requirements translate to: [[mark(!6220!6220(_x0, _x1))]] = 2x1 + 4x0 >= 2x1 + 4x0 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(isNeList(_x0))]] = 2x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U32(_x0))]] = 2x0 >= 2x0 = [[active(U32(mark(_x0)))]] [[mark(U52(_x0, _x1))]] = 2 + 2x0 + 2x1 > 1 + x1 + 2x0 = [[active(U52(mark(_x0), _x1))]] [[mark(isPal(_x0))]] = 2x0 >= x0 = [[active(isPal(_x0))]] [[!6220!6220(mark(_x0), _x1)]] = x1 + 4x0 >= x1 + 2x0 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 2x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2x0 >= x0 = [[isList(_x0)]] [[isList(active(_x0))]] = x0 >= x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 2x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 2x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 2x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 2x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = 1 + x1 + 2x0 >= 1 + x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = 1 + x0 + 2x1 >= 1 + x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 2x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 2x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 2x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = x0 >= x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x1 + 4x0 >= x1 + 2x0 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 2x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 2x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: mark(U52(X, Y)) => active(U52(mark(X), Y)) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(tt) >? active(tt) mark(isNeList(X)) >? active(isNeList(X)) mark(U32(X)) >? active(U32(mark(X))) mark(isPal(X)) >? active(isPal(X)) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.2y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.y0 active = \y0.y0 and = \y0y1.y0 + y1 isList = \y0.y0 isNeList = \y0.y0 isNePal = \y0.y0 isPal = \y0.1 + y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.2y0 tt = 0 Using this interpretation, the requirements translate to: [[mark(!6220!6220(_x0, _x1))]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(isNeList(_x0))]] = 2x0 >= x0 = [[active(isNeList(_x0))]] [[mark(U32(_x0))]] = 4x0 >= 4x0 = [[active(U32(mark(_x0)))]] [[mark(isPal(_x0))]] = 2 + 2x0 > 1 + x0 = [[active(isPal(_x0))]] [[!6220!6220(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 2x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2x0 >= x0 = [[isList(_x0)]] [[isList(active(_x0))]] = x0 >= x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 2x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 4x0 >= 2x0 = [[U32(_x0)]] [[U32(active(_x0))]] = 2x0 >= 2x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 2x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 2x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 2x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 2x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 2x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = x0 >= x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 2x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 1 + 2x0 >= 1 + x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = 1 + x0 >= 1 + x0 = [[isPal(_x0)]] We can thus remove the following rules: mark(isPal(X)) => active(isPal(X)) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): mark(!6220!6220(X, Y)) >? active(!6220!6220(mark(X), mark(Y))) mark(tt) >? active(tt) mark(isNeList(X)) >? active(isNeList(X)) mark(U32(X)) >? active(U32(mark(X))) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.2 + y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.2y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.y0 active = \y0.y0 and = \y0y1.y0 + y1 isList = \y0.y0 isNeList = \y0.1 + y0 isNePal = \y0.y0 isPal = \y0.2y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.2y0 tt = 0 Using this interpretation, the requirements translate to: [[mark(!6220!6220(_x0, _x1))]] = 4 + 2x0 + 2x1 > 2 + 2x0 + 2x1 = [[active(!6220!6220(mark(_x0), mark(_x1)))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(isNeList(_x0))]] = 2 + 2x0 > 1 + x0 = [[active(isNeList(_x0))]] [[mark(U32(_x0))]] = 4x0 >= 4x0 = [[active(U32(mark(_x0)))]] [[!6220!6220(mark(_x0), _x1)]] = 2 + x1 + 2x0 >= 2 + x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = 2 + x0 + 2x1 >= 2 + x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = 2 + x0 + x1 >= 2 + x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = 2 + x0 + x1 >= 2 + x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 1 + 2x0 >= 1 + x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = 1 + x0 >= 1 + x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 2x0 >= x0 = [[isList(_x0)]] [[isList(active(_x0))]] = x0 >= x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 2x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 4x0 >= 2x0 = [[U32(_x0)]] [[U32(active(_x0))]] = 2x0 >= 2x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 2x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 2x0 >= x0 = [[U43(_x0)]] [[U43(active(_x0))]] = x0 >= x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 2x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 2x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 2x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = x0 >= x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 2x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 4x0 >= 2x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = 2x0 >= 2x0 = [[isPal(_x0)]] We can thus remove the following rules: mark(!6220!6220(X, Y)) => active(!6220!6220(mark(X), mark(Y))) mark(isNeList(X)) => active(isNeList(X)) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): mark(tt) >? active(tt) mark(U32(X)) >? active(U32(mark(X))) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y1 + 2y0 U11 = \y0y1.y0 + y1 U12 = \y0.2y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.2y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + 2y1 U72 = \y0.2y0 active = \y0.y0 and = \y0y1.y0 + y1 isList = \y0.2y0 isNeList = \y0.y0 isNePal = \y0.y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.y0 mark = \y0.2y0 tt = 2 Using this interpretation, the requirements translate to: [[mark(tt)]] = 4 > 2 = [[active(tt)]] [[mark(U32(_x0))]] = 2x0 >= 2x0 = [[active(U32(mark(_x0)))]] [[!6220!6220(mark(_x0), _x1)]] = x1 + 4x0 >= x1 + 2x0 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 4x0 >= 2x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 2x0 >= 2x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 2x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 4x0 >= 2x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 2x0 >= 2x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 2x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 2x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 2x0 >= x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = x0 >= x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 4x0 >= 2x0 = [[U43(_x0)]] [[U43(active(_x0))]] = 2x0 >= 2x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 2x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 2x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = 2x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 4x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 4x0 >= 2x0 = [[U72(_x0)]] [[U72(active(_x0))]] = 2x0 >= 2x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = x0 >= x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 2x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 2x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: mark(tt) => active(tt) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): mark(U32(X)) >? active(U32(mark(X))) !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + 2y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y1 + 2y0 U32 = \y0.1 + y0 U41 = \y0y1y2.y0 + y1 + 2y2 U42 = \y0y1.y1 + 2y0 U43 = \y0.2y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.y0 active = \y0.y0 and = \y0y1.y0 + y1 isList = \y0.2y0 isNeList = \y0.y0 isNePal = \y0.y0 isPal = \y0.y0 isPalListKind = \y0.y0 isQid = \y0.2y0 mark = \y0.2y0 Using this interpretation, the requirements translate to: [[mark(U32(_x0))]] = 2 + 2x0 > 1 + 2x0 = [[active(U32(mark(_x0)))]] [[!6220!6220(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 2x0 >= x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = x0 >= x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = x1 + 2x0 + 2x2 >= x0 + x1 + 2x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = x0 + 2x1 + 2x2 >= x0 + x1 + 2x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = x0 + x1 + 4x2 >= x0 + x1 + 2x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 4x0 >= 2x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 2x0 >= 2x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 2x0 >= x0 = [[U23(_x0)]] [[U23(active(_x0))]] = x0 >= x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 4x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 1 + 2x0 >= 1 + x0 = [[U32(_x0)]] [[U32(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 4x0 >= 2x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = 2x0 >= 2x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = x1 + 2x0 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = x0 + 2x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = x0 + x1 + 4x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = x1 + 4x0 >= x1 + 2x0 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = 2x0 + 2x1 >= x1 + 2x0 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 4x0 >= 2x0 = [[U43(_x0)]] [[U43(active(_x0))]] = 2x0 >= 2x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = x1 + x2 + 2x0 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x0 + x2 + 2x1 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 2x0 >= x0 = [[U53(_x0)]] [[U53(active(_x0))]] = x0 >= x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 2x0 >= x0 = [[U62(_x0)]] [[U62(active(_x0))]] = x0 >= x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 2x0 >= x0 = [[U72(_x0)]] [[U72(active(_x0))]] = x0 >= x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 2x0 >= x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = x0 >= x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = x1 + 2x0 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = x0 + 2x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 2x0 >= x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = x0 >= x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 2x0 >= x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = x0 >= x0 = [[isPal(_x0)]] We can thus remove the following rules: mark(U32(X)) => active(U32(mark(X))) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): !6220!6220(mark(X), Y) >? !6220!6220(X, Y) !6220!6220(X, mark(Y)) >? !6220!6220(X, Y) !6220!6220(active(X), Y) >? !6220!6220(X, Y) !6220!6220(X, active(Y)) >? !6220!6220(X, Y) U11(mark(X), Y) >? U11(X, Y) U11(X, mark(Y)) >? U11(X, Y) U11(active(X), Y) >? U11(X, Y) U11(X, active(Y)) >? U11(X, Y) U12(mark(X)) >? U12(X) U12(active(X)) >? U12(X) isNeList(mark(X)) >? isNeList(X) isNeList(active(X)) >? isNeList(X) U21(mark(X), Y, Z) >? U21(X, Y, Z) U21(X, mark(Y), Z) >? U21(X, Y, Z) U21(X, Y, mark(Z)) >? U21(X, Y, Z) U21(active(X), Y, Z) >? U21(X, Y, Z) U21(X, active(Y), Z) >? U21(X, Y, Z) U21(X, Y, active(Z)) >? U21(X, Y, Z) U22(mark(X), Y) >? U22(X, Y) U22(X, mark(Y)) >? U22(X, Y) U22(active(X), Y) >? U22(X, Y) U22(X, active(Y)) >? U22(X, Y) isList(mark(X)) >? isList(X) isList(active(X)) >? isList(X) U23(mark(X)) >? U23(X) U23(active(X)) >? U23(X) U31(mark(X), Y) >? U31(X, Y) U31(X, mark(Y)) >? U31(X, Y) U31(active(X), Y) >? U31(X, Y) U31(X, active(Y)) >? U31(X, Y) U32(mark(X)) >? U32(X) U32(active(X)) >? U32(X) isQid(mark(X)) >? isQid(X) isQid(active(X)) >? isQid(X) U41(mark(X), Y, Z) >? U41(X, Y, Z) U41(X, mark(Y), Z) >? U41(X, Y, Z) U41(X, Y, mark(Z)) >? U41(X, Y, Z) U41(active(X), Y, Z) >? U41(X, Y, Z) U41(X, active(Y), Z) >? U41(X, Y, Z) U41(X, Y, active(Z)) >? U41(X, Y, Z) U42(mark(X), Y) >? U42(X, Y) U42(X, mark(Y)) >? U42(X, Y) U42(active(X), Y) >? U42(X, Y) U42(X, active(Y)) >? U42(X, Y) U43(mark(X)) >? U43(X) U43(active(X)) >? U43(X) U51(mark(X), Y, Z) >? U51(X, Y, Z) U51(X, mark(Y), Z) >? U51(X, Y, Z) U51(X, Y, mark(Z)) >? U51(X, Y, Z) U51(active(X), Y, Z) >? U51(X, Y, Z) U51(X, active(Y), Z) >? U51(X, Y, Z) U51(X, Y, active(Z)) >? U51(X, Y, Z) U52(mark(X), Y) >? U52(X, Y) U52(X, mark(Y)) >? U52(X, Y) U52(active(X), Y) >? U52(X, Y) U52(X, active(Y)) >? U52(X, Y) U53(mark(X)) >? U53(X) U53(active(X)) >? U53(X) U61(mark(X), Y) >? U61(X, Y) U61(X, mark(Y)) >? U61(X, Y) U61(active(X), Y) >? U61(X, Y) U61(X, active(Y)) >? U61(X, Y) U62(mark(X)) >? U62(X) U62(active(X)) >? U62(X) U71(mark(X), Y) >? U71(X, Y) U71(X, mark(Y)) >? U71(X, Y) U71(active(X), Y) >? U71(X, Y) U71(X, active(Y)) >? U71(X, Y) U72(mark(X)) >? U72(X) U72(active(X)) >? U72(X) isNePal(mark(X)) >? isNePal(X) isNePal(active(X)) >? isNePal(X) and(mark(X), Y) >? and(X, Y) and(X, mark(Y)) >? and(X, Y) and(active(X), Y) >? and(X, Y) and(X, active(Y)) >? and(X, Y) isPalListKind(mark(X)) >? isPalListKind(X) isPalListKind(active(X)) >? isPalListKind(X) isPal(mark(X)) >? isPal(X) isPal(active(X)) >? isPal(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0y1y2.y0 + y1 + y2 U22 = \y0y1.y0 + y1 U23 = \y0.y0 U31 = \y0y1.y0 + y1 U32 = \y0.y0 U41 = \y0y1y2.y0 + y1 + y2 U42 = \y0y1.y0 + y1 U43 = \y0.y0 U51 = \y0y1y2.y0 + y1 + y2 U52 = \y0y1.y0 + y1 U53 = \y0.y0 U61 = \y0y1.y0 + y1 U62 = \y0.y0 U71 = \y0y1.y0 + y1 U72 = \y0.y0 active = \y0.3 + 3y0 and = \y0y1.y0 + y1 isList = \y0.y0 isNeList = \y0.y0 isNePal = \y0.y0 isPal = \y0.y0 isPalListKind = \y0.2y0 isQid = \y0.y0 mark = \y0.3 + 3y0 Using this interpretation, the requirements translate to: [[!6220!6220(mark(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, mark(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(active(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[!6220!6220(_x0, _x1)]] [[!6220!6220(_x0, active(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[!6220!6220(_x0, _x1)]] [[U11(mark(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 3 + 3x0 > x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 3 + 3x0 > x0 = [[U12(_x0)]] [[isNeList(mark(_x0))]] = 3 + 3x0 > x0 = [[isNeList(_x0)]] [[isNeList(active(_x0))]] = 3 + 3x0 > x0 = [[isNeList(_x0)]] [[U21(mark(_x0), _x1, _x2)]] = 3 + x1 + x2 + 3x0 > x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, mark(_x1), _x2)]] = 3 + x0 + x2 + 3x1 > x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, mark(_x2))]] = 3 + x0 + x1 + 3x2 > x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(active(_x0), _x1, _x2)]] = 3 + x1 + x2 + 3x0 > x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, active(_x1), _x2)]] = 3 + x0 + x2 + 3x1 > x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U21(_x0, _x1, active(_x2))]] = 3 + x0 + x1 + 3x2 > x0 + x1 + x2 = [[U21(_x0, _x1, _x2)]] [[U22(mark(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, mark(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U22(_x0, _x1)]] [[U22(active(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U22(_x0, _x1)]] [[U22(_x0, active(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U22(_x0, _x1)]] [[isList(mark(_x0))]] = 3 + 3x0 > x0 = [[isList(_x0)]] [[isList(active(_x0))]] = 3 + 3x0 > x0 = [[isList(_x0)]] [[U23(mark(_x0))]] = 3 + 3x0 > x0 = [[U23(_x0)]] [[U23(active(_x0))]] = 3 + 3x0 > x0 = [[U23(_x0)]] [[U31(mark(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 3 + 3x0 > x0 = [[U32(_x0)]] [[U32(active(_x0))]] = 3 + 3x0 > x0 = [[U32(_x0)]] [[isQid(mark(_x0))]] = 3 + 3x0 > x0 = [[isQid(_x0)]] [[isQid(active(_x0))]] = 3 + 3x0 > x0 = [[isQid(_x0)]] [[U41(mark(_x0), _x1, _x2)]] = 3 + x1 + x2 + 3x0 > x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, mark(_x1), _x2)]] = 3 + x0 + x2 + 3x1 > x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, mark(_x2))]] = 3 + x0 + x1 + 3x2 > x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(active(_x0), _x1, _x2)]] = 3 + x1 + x2 + 3x0 > x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, active(_x1), _x2)]] = 3 + x0 + x2 + 3x1 > x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U41(_x0, _x1, active(_x2))]] = 3 + x0 + x1 + 3x2 > x0 + x1 + x2 = [[U41(_x0, _x1, _x2)]] [[U42(mark(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, mark(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U42(_x0, _x1)]] [[U42(active(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U42(_x0, _x1)]] [[U42(_x0, active(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U42(_x0, _x1)]] [[U43(mark(_x0))]] = 3 + 3x0 > x0 = [[U43(_x0)]] [[U43(active(_x0))]] = 3 + 3x0 > x0 = [[U43(_x0)]] [[U51(mark(_x0), _x1, _x2)]] = 3 + x1 + x2 + 3x0 > x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = 3 + x0 + x2 + 3x1 > x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = 3 + x0 + x1 + 3x2 > x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = 3 + x1 + x2 + 3x0 > x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = 3 + x0 + x2 + 3x1 > x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = 3 + x0 + x1 + 3x2 > x0 + x1 + x2 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, mark(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U52(_x0, _x1)]] [[U52(active(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U52(_x0, _x1)]] [[U52(_x0, active(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U52(_x0, _x1)]] [[U53(mark(_x0))]] = 3 + 3x0 > x0 = [[U53(_x0)]] [[U53(active(_x0))]] = 3 + 3x0 > x0 = [[U53(_x0)]] [[U61(mark(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, mark(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U61(_x0, _x1)]] [[U61(active(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U61(_x0, _x1)]] [[U61(_x0, active(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U61(_x0, _x1)]] [[U62(mark(_x0))]] = 3 + 3x0 > x0 = [[U62(_x0)]] [[U62(active(_x0))]] = 3 + 3x0 > x0 = [[U62(_x0)]] [[U71(mark(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, mark(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U71(_x0, _x1)]] [[U71(active(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[U71(_x0, _x1)]] [[U71(_x0, active(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[U71(_x0, _x1)]] [[U72(mark(_x0))]] = 3 + 3x0 > x0 = [[U72(_x0)]] [[U72(active(_x0))]] = 3 + 3x0 > x0 = [[U72(_x0)]] [[isNePal(mark(_x0))]] = 3 + 3x0 > x0 = [[isNePal(_x0)]] [[isNePal(active(_x0))]] = 3 + 3x0 > x0 = [[isNePal(_x0)]] [[and(mark(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, mark(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[and(_x0, _x1)]] [[and(active(_x0), _x1)]] = 3 + x1 + 3x0 > x0 + x1 = [[and(_x0, _x1)]] [[and(_x0, active(_x1))]] = 3 + x0 + 3x1 > x0 + x1 = [[and(_x0, _x1)]] [[isPalListKind(mark(_x0))]] = 6 + 6x0 > 2x0 = [[isPalListKind(_x0)]] [[isPalListKind(active(_x0))]] = 6 + 6x0 > 2x0 = [[isPalListKind(_x0)]] [[isPal(mark(_x0))]] = 3 + 3x0 > x0 = [[isPal(_x0)]] [[isPal(active(_x0))]] = 3 + 3x0 > x0 = [[isPal(_x0)]] We can thus remove the following rules: !6220!6220(mark(X), Y) => !6220!6220(X, Y) !6220!6220(X, mark(Y)) => !6220!6220(X, Y) !6220!6220(active(X), Y) => !6220!6220(X, Y) !6220!6220(X, active(Y)) => !6220!6220(X, Y) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNeList(mark(X)) => isNeList(X) isNeList(active(X)) => isNeList(X) U21(mark(X), Y, Z) => U21(X, Y, Z) U21(X, mark(Y), Z) => U21(X, Y, Z) U21(X, Y, mark(Z)) => U21(X, Y, Z) U21(active(X), Y, Z) => U21(X, Y, Z) U21(X, active(Y), Z) => U21(X, Y, Z) U21(X, Y, active(Z)) => U21(X, Y, Z) U22(mark(X), Y) => U22(X, Y) U22(X, mark(Y)) => U22(X, Y) U22(active(X), Y) => U22(X, Y) U22(X, active(Y)) => U22(X, Y) isList(mark(X)) => isList(X) isList(active(X)) => isList(X) U23(mark(X)) => U23(X) U23(active(X)) => U23(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) isQid(mark(X)) => isQid(X) isQid(active(X)) => isQid(X) U41(mark(X), Y, Z) => U41(X, Y, Z) U41(X, mark(Y), Z) => U41(X, Y, Z) U41(X, Y, mark(Z)) => U41(X, Y, Z) U41(active(X), Y, Z) => U41(X, Y, Z) U41(X, active(Y), Z) => U41(X, Y, Z) U41(X, Y, active(Z)) => U41(X, Y, Z) U42(mark(X), Y) => U42(X, Y) U42(X, mark(Y)) => U42(X, Y) U42(active(X), Y) => U42(X, Y) U42(X, active(Y)) => U42(X, Y) U43(mark(X)) => U43(X) U43(active(X)) => U43(X) U51(mark(X), Y, Z) => U51(X, Y, Z) U51(X, mark(Y), Z) => U51(X, Y, Z) U51(X, Y, mark(Z)) => U51(X, Y, Z) U51(active(X), Y, Z) => U51(X, Y, Z) U51(X, active(Y), Z) => U51(X, Y, Z) U51(X, Y, active(Z)) => U51(X, Y, Z) U52(mark(X), Y) => U52(X, Y) U52(X, mark(Y)) => U52(X, Y) U52(active(X), Y) => U52(X, Y) U52(X, active(Y)) => U52(X, Y) U53(mark(X)) => U53(X) U53(active(X)) => U53(X) U61(mark(X), Y) => U61(X, Y) U61(X, mark(Y)) => U61(X, Y) U61(active(X), Y) => U61(X, Y) U61(X, active(Y)) => U61(X, Y) U62(mark(X)) => U62(X) U62(active(X)) => U62(X) U71(mark(X), Y) => U71(X, Y) U71(X, mark(Y)) => U71(X, Y) U71(active(X), Y) => U71(X, Y) U71(X, active(Y)) => U71(X, Y) U72(mark(X)) => U72(X) U72(active(X)) => U72(X) isNePal(mark(X)) => isNePal(X) isNePal(active(X)) => isNePal(X) and(mark(X), Y) => and(X, Y) and(X, mark(Y)) => and(X, Y) and(active(X), Y) => and(X, Y) and(X, active(Y)) => and(X, Y) isPalListKind(mark(X)) => isPalListKind(X) isPalListKind(active(X)) => isPalListKind(X) isPal(mark(X)) => isPal(X) isPal(active(X)) => isPal(X) All rules were succesfully removed. Thus, termination of the original system has been reduced to termination of the beta-rule, which is well-known to hold. +++ Citations +++ [Kop12] C. Kop. Higher Order Termination. PhD Thesis, 2012.