/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 U21 : [o * o] --> o U22 : [o] --> o U31 : [o] --> o U41 : [o * o] --> o U42 : [o] --> o U51 : [o * o] --> o U52 : [o] --> o U61 : [o] --> o U71 : [o * o] --> o U72 : [o] --> o U81 : [o] --> o a : [] --> o activate : [o] --> o e : [] --> o i : [] --> o isList : [o] --> o isNeList : [o] --> o isNePal : [o] --> o isPal : [o] --> o isQid : [o] --> o n!6220!6220!6220!6220 : [o * o] --> o n!6220!6220a : [] --> o n!6220!6220e : [] --> o n!6220!6220i : [] --> o n!6220!6220nil : [] --> o n!6220!6220o : [] --> o n!6220!6220u : [] --> o nil : [] --> o o : [] --> o tt : [] --> o u : [] --> o !6220!6220(!6220!6220(X, Y), Z) => !6220!6220(X, !6220!6220(Y, Z)) !6220!6220(X, nil) => X !6220!6220(nil, X) => X U11(tt) => tt U21(tt, X) => U22(isList(activate(X))) U22(tt) => tt U31(tt) => tt U41(tt, X) => U42(isNeList(activate(X))) U42(tt) => tt U51(tt, X) => U52(isList(activate(X))) U52(tt) => tt U61(tt) => tt U71(tt, X) => U72(isPal(activate(X))) U72(tt) => tt U81(tt) => tt isList(X) => U11(isNeList(activate(X))) isList(n!6220!6220nil) => tt isList(n!6220!6220!6220!6220(X, Y)) => U21(isList(activate(X)), activate(Y)) isNeList(X) => U31(isQid(activate(X))) isNeList(n!6220!6220!6220!6220(X, Y)) => U41(isList(activate(X)), activate(Y)) isNeList(n!6220!6220!6220!6220(X, Y)) => U51(isNeList(activate(X)), activate(Y)) isNePal(X) => U61(isQid(activate(X))) isNePal(n!6220!6220!6220!6220(X, n!6220!6220!6220!6220(Y, X))) => U71(isQid(activate(X)), activate(Y)) isPal(X) => U81(isNePal(activate(X))) isPal(n!6220!6220nil) => tt isQid(n!6220!6220a) => tt isQid(n!6220!6220e) => tt isQid(n!6220!6220i) => tt isQid(n!6220!6220o) => tt isQid(n!6220!6220u) => tt nil => n!6220!6220nil !6220!6220(X, Y) => n!6220!6220!6220!6220(X, Y) a => n!6220!6220a e => n!6220!6220e i => n!6220!6220i o => n!6220!6220o u => n!6220!6220u activate(n!6220!6220nil) => nil activate(n!6220!6220!6220!6220(X, Y)) => !6220!6220(activate(X), activate(Y)) activate(n!6220!6220a) => a activate(n!6220!6220e) => e activate(n!6220!6220i) => i activate(n!6220!6220o) => o activate(n!6220!6220u) => u activate(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]): !6220!6220(!6220!6220(X, Y), Z) >? !6220!6220(X, !6220!6220(Y, Z)) !6220!6220(X, nil) >? X !6220!6220(nil, X) >? X U11(tt) >? tt U21(tt, X) >? U22(isList(activate(X))) U22(tt) >? tt U31(tt) >? tt U41(tt, X) >? U42(isNeList(activate(X))) U42(tt) >? tt U51(tt, X) >? U52(isList(activate(X))) U52(tt) >? tt U61(tt) >? tt U71(tt, X) >? U72(isPal(activate(X))) U72(tt) >? tt U81(tt) >? tt isList(X) >? U11(isNeList(activate(X))) isList(n!6220!6220nil) >? tt isList(n!6220!6220!6220!6220(X, Y)) >? U21(isList(activate(X)), activate(Y)) isNeList(X) >? U31(isQid(activate(X))) isNeList(n!6220!6220!6220!6220(X, Y)) >? U41(isList(activate(X)), activate(Y)) isNeList(n!6220!6220!6220!6220(X, Y)) >? U51(isNeList(activate(X)), activate(Y)) isNePal(X) >? U61(isQid(activate(X))) isNePal(n!6220!6220!6220!6220(X, n!6220!6220!6220!6220(Y, X))) >? U71(isQid(activate(X)), activate(Y)) isPal(X) >? U81(isNePal(activate(X))) isPal(n!6220!6220nil) >? tt isQid(n!6220!6220a) >? tt isQid(n!6220!6220e) >? tt isQid(n!6220!6220i) >? tt isQid(n!6220!6220o) >? tt isQid(n!6220!6220u) >? tt nil >? n!6220!6220nil !6220!6220(X, Y) >? n!6220!6220!6220!6220(X, Y) a >? n!6220!6220a e >? n!6220!6220e i >? n!6220!6220i o >? n!6220!6220o u >? n!6220!6220u activate(n!6220!6220nil) >? nil activate(n!6220!6220!6220!6220(X, Y)) >? !6220!6220(activate(X), activate(Y)) activate(n!6220!6220a) >? a activate(n!6220!6220e) >? e activate(n!6220!6220i) >? i activate(n!6220!6220o) >? o activate(n!6220!6220u) >? u activate(X) >? X We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.2 + y1 + 2y0 U11 = \y0.y0 U21 = \y0y1.y0 + 2y1 U22 = \y0.y0 U31 = \y0.y0 U41 = \y0y1.2 + y0 + 2y1 U42 = \y0.2 + y0 U51 = \y0y1.y0 + 2y1 U52 = \y0.y0 U61 = \y0.y0 U71 = \y0y1.2 + 2y0 + 2y1 U72 = \y0.y0 U81 = \y0.2y0 a = 0 activate = \y0.y0 e = 0 i = 0 isList = \y0.2y0 isNeList = \y0.2y0 isNePal = \y0.y0 isPal = \y0.2y0 isQid = \y0.y0 n!6220!6220!6220!6220 = \y0y1.2 + y1 + 2y0 n!6220!6220a = 0 n!6220!6220e = 0 n!6220!6220i = 0 n!6220!6220nil = 0 n!6220!6220o = 1 n!6220!6220u = 0 nil = 0 o = 1 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[!6220!6220(!6220!6220(_x0, _x1), _x2)]] = 6 + x2 + 2x1 + 4x0 > 4 + x2 + 2x0 + 2x1 = [[!6220!6220(_x0, !6220!6220(_x1, _x2))]] [[!6220!6220(_x0, nil)]] = 2 + 2x0 > x0 = [[_x0]] [[!6220!6220(nil, _x0)]] = 2 + x0 > x0 = [[_x0]] [[U11(tt)]] = 0 >= 0 = [[tt]] [[U21(tt, _x0)]] = 2x0 >= 2x0 = [[U22(isList(activate(_x0)))]] [[U22(tt)]] = 0 >= 0 = [[tt]] [[U31(tt)]] = 0 >= 0 = [[tt]] [[U41(tt, _x0)]] = 2 + 2x0 >= 2 + 2x0 = [[U42(isNeList(activate(_x0)))]] [[U42(tt)]] = 2 > 0 = [[tt]] [[U51(tt, _x0)]] = 2x0 >= 2x0 = [[U52(isList(activate(_x0)))]] [[U52(tt)]] = 0 >= 0 = [[tt]] [[U61(tt)]] = 0 >= 0 = [[tt]] [[U71(tt, _x0)]] = 2 + 2x0 > 2x0 = [[U72(isPal(activate(_x0)))]] [[U72(tt)]] = 0 >= 0 = [[tt]] [[U81(tt)]] = 0 >= 0 = [[tt]] [[isList(_x0)]] = 2x0 >= 2x0 = [[U11(isNeList(activate(_x0)))]] [[isList(n!6220!6220nil)]] = 0 >= 0 = [[tt]] [[isList(n!6220!6220!6220!6220(_x0, _x1))]] = 4 + 2x1 + 4x0 > 2x0 + 2x1 = [[U21(isList(activate(_x0)), activate(_x1))]] [[isNeList(_x0)]] = 2x0 >= x0 = [[U31(isQid(activate(_x0)))]] [[isNeList(n!6220!6220!6220!6220(_x0, _x1))]] = 4 + 2x1 + 4x0 > 2 + 2x0 + 2x1 = [[U41(isList(activate(_x0)), activate(_x1))]] [[isNeList(n!6220!6220!6220!6220(_x0, _x1))]] = 4 + 2x1 + 4x0 > 2x0 + 2x1 = [[U51(isNeList(activate(_x0)), activate(_x1))]] [[isNePal(_x0)]] = x0 >= x0 = [[U61(isQid(activate(_x0)))]] [[isNePal(n!6220!6220!6220!6220(_x0, n!6220!6220!6220!6220(_x1, _x0)))]] = 4 + 2x1 + 3x0 > 2 + 2x0 + 2x1 = [[U71(isQid(activate(_x0)), activate(_x1))]] [[isPal(_x0)]] = 2x0 >= 2x0 = [[U81(isNePal(activate(_x0)))]] [[isPal(n!6220!6220nil)]] = 0 >= 0 = [[tt]] [[isQid(n!6220!6220a)]] = 0 >= 0 = [[tt]] [[isQid(n!6220!6220e)]] = 0 >= 0 = [[tt]] [[isQid(n!6220!6220i)]] = 0 >= 0 = [[tt]] [[isQid(n!6220!6220o)]] = 1 > 0 = [[tt]] [[isQid(n!6220!6220u)]] = 0 >= 0 = [[tt]] [[nil]] = 0 >= 0 = [[n!6220!6220nil]] [[!6220!6220(_x0, _x1)]] = 2 + x1 + 2x0 >= 2 + x1 + 2x0 = [[n!6220!6220!6220!6220(_x0, _x1)]] [[a]] = 0 >= 0 = [[n!6220!6220a]] [[e]] = 0 >= 0 = [[n!6220!6220e]] [[i]] = 0 >= 0 = [[n!6220!6220i]] [[o]] = 1 >= 1 = [[n!6220!6220o]] [[u]] = 0 >= 0 = [[n!6220!6220u]] [[activate(n!6220!6220nil)]] = 0 >= 0 = [[nil]] [[activate(n!6220!6220!6220!6220(_x0, _x1))]] = 2 + x1 + 2x0 >= 2 + x1 + 2x0 = [[!6220!6220(activate(_x0), activate(_x1))]] [[activate(n!6220!6220a)]] = 0 >= 0 = [[a]] [[activate(n!6220!6220e)]] = 0 >= 0 = [[e]] [[activate(n!6220!6220i)]] = 0 >= 0 = [[i]] [[activate(n!6220!6220o)]] = 1 >= 1 = [[o]] [[activate(n!6220!6220u)]] = 0 >= 0 = [[u]] [[activate(_x0)]] = x0 >= x0 = [[_x0]] We can thus remove the following rules: !6220!6220(!6220!6220(X, Y), Z) => !6220!6220(X, !6220!6220(Y, Z)) !6220!6220(X, nil) => X !6220!6220(nil, X) => X U42(tt) => tt U71(tt, X) => U72(isPal(activate(X))) isList(n!6220!6220!6220!6220(X, Y)) => U21(isList(activate(X)), activate(Y)) isNeList(n!6220!6220!6220!6220(X, Y)) => U41(isList(activate(X)), activate(Y)) isNeList(n!6220!6220!6220!6220(X, Y)) => U51(isNeList(activate(X)), activate(Y)) isNePal(n!6220!6220!6220!6220(X, n!6220!6220!6220!6220(Y, X))) => U71(isQid(activate(X)), activate(Y)) isQid(n!6220!6220o) => 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]): U11(tt) >? tt U21(tt, X) >? U22(isList(activate(X))) U22(tt) >? tt U31(tt) >? tt U41(tt, X) >? U42(isNeList(activate(X))) U51(tt, X) >? U52(isList(activate(X))) U52(tt) >? tt U61(tt) >? tt U72(tt) >? tt U81(tt) >? tt isList(X) >? U11(isNeList(activate(X))) isList(n!6220!6220nil) >? tt isNeList(X) >? U31(isQid(activate(X))) isNePal(X) >? U61(isQid(activate(X))) isPal(X) >? U81(isNePal(activate(X))) isPal(n!6220!6220nil) >? tt isQid(n!6220!6220a) >? tt isQid(n!6220!6220e) >? tt isQid(n!6220!6220i) >? tt isQid(n!6220!6220u) >? tt nil >? n!6220!6220nil !6220!6220(X, Y) >? n!6220!6220!6220!6220(X, Y) a >? n!6220!6220a e >? n!6220!6220e i >? n!6220!6220i o >? n!6220!6220o u >? n!6220!6220u activate(n!6220!6220nil) >? nil activate(n!6220!6220!6220!6220(X, Y)) >? !6220!6220(activate(X), activate(Y)) activate(n!6220!6220a) >? a activate(n!6220!6220e) >? e activate(n!6220!6220i) >? i activate(n!6220!6220o) >? o activate(n!6220!6220u) >? u activate(X) >? 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 = \y0.y0 U21 = \y0y1.3 + 3y0 + 3y1 U22 = \y0.y0 U31 = \y0.y0 U41 = \y0y1.3 + 3y0 + 3y1 U42 = \y0.y0 U51 = \y0y1.3 + 3y0 + 3y1 U52 = \y0.y0 U61 = \y0.y0 U72 = \y0.3 + 3y0 U81 = \y0.y0 a = 0 activate = \y0.y0 e = 0 i = 0 isList = \y0.2 + 2y0 isNeList = \y0.1 + 2y0 isNePal = \y0.y0 isPal = \y0.3 + 3y0 isQid = \y0.y0 n!6220!6220!6220!6220 = \y0y1.y0 + y1 n!6220!6220a = 0 n!6220!6220e = 0 n!6220!6220i = 0 n!6220!6220nil = 0 n!6220!6220o = 0 n!6220!6220u = 0 nil = 0 o = 0 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[U11(tt)]] = 0 >= 0 = [[tt]] [[U21(tt, _x0)]] = 3 + 3x0 > 2 + 2x0 = [[U22(isList(activate(_x0)))]] [[U22(tt)]] = 0 >= 0 = [[tt]] [[U31(tt)]] = 0 >= 0 = [[tt]] [[U41(tt, _x0)]] = 3 + 3x0 > 1 + 2x0 = [[U42(isNeList(activate(_x0)))]] [[U51(tt, _x0)]] = 3 + 3x0 > 2 + 2x0 = [[U52(isList(activate(_x0)))]] [[U52(tt)]] = 0 >= 0 = [[tt]] [[U61(tt)]] = 0 >= 0 = [[tt]] [[U72(tt)]] = 3 > 0 = [[tt]] [[U81(tt)]] = 0 >= 0 = [[tt]] [[isList(_x0)]] = 2 + 2x0 > 1 + 2x0 = [[U11(isNeList(activate(_x0)))]] [[isList(n!6220!6220nil)]] = 2 > 0 = [[tt]] [[isNeList(_x0)]] = 1 + 2x0 > x0 = [[U31(isQid(activate(_x0)))]] [[isNePal(_x0)]] = x0 >= x0 = [[U61(isQid(activate(_x0)))]] [[isPal(_x0)]] = 3 + 3x0 > x0 = [[U81(isNePal(activate(_x0)))]] [[isPal(n!6220!6220nil)]] = 3 > 0 = [[tt]] [[isQid(n!6220!6220a)]] = 0 >= 0 = [[tt]] [[isQid(n!6220!6220e)]] = 0 >= 0 = [[tt]] [[isQid(n!6220!6220i)]] = 0 >= 0 = [[tt]] [[isQid(n!6220!6220u)]] = 0 >= 0 = [[tt]] [[nil]] = 0 >= 0 = [[n!6220!6220nil]] [[!6220!6220(_x0, _x1)]] = x0 + x1 >= x0 + x1 = [[n!6220!6220!6220!6220(_x0, _x1)]] [[a]] = 0 >= 0 = [[n!6220!6220a]] [[e]] = 0 >= 0 = [[n!6220!6220e]] [[i]] = 0 >= 0 = [[n!6220!6220i]] [[o]] = 0 >= 0 = [[n!6220!6220o]] [[u]] = 0 >= 0 = [[n!6220!6220u]] [[activate(n!6220!6220nil)]] = 0 >= 0 = [[nil]] [[activate(n!6220!6220!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(activate(_x0), activate(_x1))]] [[activate(n!6220!6220a)]] = 0 >= 0 = [[a]] [[activate(n!6220!6220e)]] = 0 >= 0 = [[e]] [[activate(n!6220!6220i)]] = 0 >= 0 = [[i]] [[activate(n!6220!6220o)]] = 0 >= 0 = [[o]] [[activate(n!6220!6220u)]] = 0 >= 0 = [[u]] [[activate(_x0)]] = x0 >= x0 = [[_x0]] We can thus remove the following rules: U21(tt, X) => U22(isList(activate(X))) U41(tt, X) => U42(isNeList(activate(X))) U51(tt, X) => U52(isList(activate(X))) U72(tt) => tt isList(X) => U11(isNeList(activate(X))) isList(n!6220!6220nil) => tt isNeList(X) => U31(isQid(activate(X))) isPal(X) => U81(isNePal(activate(X))) isPal(n!6220!6220nil) => 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]): U11(tt) >? tt U22(tt) >? tt U31(tt) >? tt U52(tt) >? tt U61(tt) >? tt U81(tt) >? tt isNePal(X) >? U61(isQid(activate(X))) isQid(n!6220!6220a) >? tt isQid(n!6220!6220e) >? tt isQid(n!6220!6220i) >? tt isQid(n!6220!6220u) >? tt nil >? n!6220!6220nil !6220!6220(X, Y) >? n!6220!6220!6220!6220(X, Y) a >? n!6220!6220a e >? n!6220!6220e i >? n!6220!6220i o >? n!6220!6220o u >? n!6220!6220u activate(n!6220!6220nil) >? nil activate(n!6220!6220!6220!6220(X, Y)) >? !6220!6220(activate(X), activate(Y)) activate(n!6220!6220a) >? a activate(n!6220!6220e) >? e activate(n!6220!6220i) >? i activate(n!6220!6220o) >? o activate(n!6220!6220u) >? u activate(X) >? 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 = \y0.3 + 3y0 U22 = \y0.3 + 3y0 U31 = \y0.3 + 3y0 U52 = \y0.3 + 3y0 U61 = \y0.1 + y0 U81 = \y0.3 + 3y0 a = 0 activate = \y0.y0 e = 0 i = 1 isNePal = \y0.3 + 3y0 isQid = \y0.y0 n!6220!6220!6220!6220 = \y0y1.y0 + y1 n!6220!6220a = 0 n!6220!6220e = 0 n!6220!6220i = 1 n!6220!6220nil = 0 n!6220!6220o = 1 n!6220!6220u = 1 nil = 0 o = 1 tt = 0 u = 1 Using this interpretation, the requirements translate to: [[U11(tt)]] = 3 > 0 = [[tt]] [[U22(tt)]] = 3 > 0 = [[tt]] [[U31(tt)]] = 3 > 0 = [[tt]] [[U52(tt)]] = 3 > 0 = [[tt]] [[U61(tt)]] = 1 > 0 = [[tt]] [[U81(tt)]] = 3 > 0 = [[tt]] [[isNePal(_x0)]] = 3 + 3x0 > 1 + x0 = [[U61(isQid(activate(_x0)))]] [[isQid(n!6220!6220a)]] = 0 >= 0 = [[tt]] [[isQid(n!6220!6220e)]] = 0 >= 0 = [[tt]] [[isQid(n!6220!6220i)]] = 1 > 0 = [[tt]] [[isQid(n!6220!6220u)]] = 1 > 0 = [[tt]] [[nil]] = 0 >= 0 = [[n!6220!6220nil]] [[!6220!6220(_x0, _x1)]] = x0 + x1 >= x0 + x1 = [[n!6220!6220!6220!6220(_x0, _x1)]] [[a]] = 0 >= 0 = [[n!6220!6220a]] [[e]] = 0 >= 0 = [[n!6220!6220e]] [[i]] = 1 >= 1 = [[n!6220!6220i]] [[o]] = 1 >= 1 = [[n!6220!6220o]] [[u]] = 1 >= 1 = [[n!6220!6220u]] [[activate(n!6220!6220nil)]] = 0 >= 0 = [[nil]] [[activate(n!6220!6220!6220!6220(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[!6220!6220(activate(_x0), activate(_x1))]] [[activate(n!6220!6220a)]] = 0 >= 0 = [[a]] [[activate(n!6220!6220e)]] = 0 >= 0 = [[e]] [[activate(n!6220!6220i)]] = 1 >= 1 = [[i]] [[activate(n!6220!6220o)]] = 1 >= 1 = [[o]] [[activate(n!6220!6220u)]] = 1 >= 1 = [[u]] [[activate(_x0)]] = x0 >= x0 = [[_x0]] We can thus remove the following rules: U11(tt) => tt U22(tt) => tt U31(tt) => tt U52(tt) => tt U61(tt) => tt U81(tt) => tt isNePal(X) => U61(isQid(activate(X))) isQid(n!6220!6220i) => tt isQid(n!6220!6220u) => 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]): isQid(n!6220!6220a) >? tt isQid(n!6220!6220e) >? tt nil >? n!6220!6220nil !6220!6220(X, Y) >? n!6220!6220!6220!6220(X, Y) a >? n!6220!6220a e >? n!6220!6220e i >? n!6220!6220i o >? n!6220!6220o u >? n!6220!6220u activate(n!6220!6220nil) >? nil activate(n!6220!6220!6220!6220(X, Y)) >? !6220!6220(activate(X), activate(Y)) activate(n!6220!6220a) >? a activate(n!6220!6220e) >? e activate(n!6220!6220i) >? i activate(n!6220!6220o) >? o activate(n!6220!6220u) >? u activate(X) >? X We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.2 + 2y0 + 2y1 a = 0 activate = \y0.2y0 e = 0 i = 0 isQid = \y0.3 + 3y0 n!6220!6220!6220!6220 = \y0y1.1 + 2y0 + 2y1 n!6220!6220a = 0 n!6220!6220e = 0 n!6220!6220i = 0 n!6220!6220nil = 0 n!6220!6220o = 2 n!6220!6220u = 0 nil = 0 o = 3 tt = 0 u = 0 Using this interpretation, the requirements translate to: [[isQid(n!6220!6220a)]] = 3 > 0 = [[tt]] [[isQid(n!6220!6220e)]] = 3 > 0 = [[tt]] [[nil]] = 0 >= 0 = [[n!6220!6220nil]] [[!6220!6220(_x0, _x1)]] = 2 + 2x0 + 2x1 > 1 + 2x0 + 2x1 = [[n!6220!6220!6220!6220(_x0, _x1)]] [[a]] = 0 >= 0 = [[n!6220!6220a]] [[e]] = 0 >= 0 = [[n!6220!6220e]] [[i]] = 0 >= 0 = [[n!6220!6220i]] [[o]] = 3 > 2 = [[n!6220!6220o]] [[u]] = 0 >= 0 = [[n!6220!6220u]] [[activate(n!6220!6220nil)]] = 0 >= 0 = [[nil]] [[activate(n!6220!6220!6220!6220(_x0, _x1))]] = 2 + 4x0 + 4x1 >= 2 + 4x0 + 4x1 = [[!6220!6220(activate(_x0), activate(_x1))]] [[activate(n!6220!6220a)]] = 0 >= 0 = [[a]] [[activate(n!6220!6220e)]] = 0 >= 0 = [[e]] [[activate(n!6220!6220i)]] = 0 >= 0 = [[i]] [[activate(n!6220!6220o)]] = 4 > 3 = [[o]] [[activate(n!6220!6220u)]] = 0 >= 0 = [[u]] [[activate(_x0)]] = 2x0 >= x0 = [[_x0]] We can thus remove the following rules: isQid(n!6220!6220a) => tt isQid(n!6220!6220e) => tt !6220!6220(X, Y) => n!6220!6220!6220!6220(X, Y) o => n!6220!6220o activate(n!6220!6220o) => o We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): nil >? n!6220!6220nil a >? n!6220!6220a e >? n!6220!6220e i >? n!6220!6220i u >? n!6220!6220u activate(n!6220!6220nil) >? nil activate(n!6220!6220!6220!6220(X, Y)) >? !6220!6220(activate(X), activate(Y)) activate(n!6220!6220a) >? a activate(n!6220!6220e) >? e activate(n!6220!6220i) >? i activate(n!6220!6220u) >? u activate(X) >? X We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !6220!6220 = \y0y1.y0 + y1 a = 0 activate = \y0.2 + 3y0 e = 2 i = 2 n!6220!6220!6220!6220 = \y0y1.3 + 3y0 + 3y1 n!6220!6220a = 0 n!6220!6220e = 1 n!6220!6220i = 1 n!6220!6220nil = 0 n!6220!6220u = 1 nil = 1 u = 2 Using this interpretation, the requirements translate to: [[nil]] = 1 > 0 = [[n!6220!6220nil]] [[a]] = 0 >= 0 = [[n!6220!6220a]] [[e]] = 2 > 1 = [[n!6220!6220e]] [[i]] = 2 > 1 = [[n!6220!6220i]] [[u]] = 2 > 1 = [[n!6220!6220u]] [[activate(n!6220!6220nil)]] = 2 > 1 = [[nil]] [[activate(n!6220!6220!6220!6220(_x0, _x1))]] = 11 + 9x0 + 9x1 > 4 + 3x0 + 3x1 = [[!6220!6220(activate(_x0), activate(_x1))]] [[activate(n!6220!6220a)]] = 2 > 0 = [[a]] [[activate(n!6220!6220e)]] = 5 > 2 = [[e]] [[activate(n!6220!6220i)]] = 5 > 2 = [[i]] [[activate(n!6220!6220u)]] = 5 > 2 = [[u]] [[activate(_x0)]] = 2 + 3x0 > x0 = [[_x0]] We can thus remove the following rules: nil => n!6220!6220nil e => n!6220!6220e i => n!6220!6220i u => n!6220!6220u activate(n!6220!6220nil) => nil activate(n!6220!6220!6220!6220(X, Y)) => !6220!6220(activate(X), activate(Y)) activate(n!6220!6220a) => a activate(n!6220!6220e) => e activate(n!6220!6220i) => i activate(n!6220!6220u) => u activate(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]): a >? n!6220!6220a We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: a = 3 n!6220!6220a = 0 Using this interpretation, the requirements translate to: [[a]] = 3 > 0 = [[n!6220!6220a]] We can thus remove the following rules: a => n!6220!6220a 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.