/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. !minus : [o * o] --> o 0 : [] --> o double : [o] --> o half : [o] --> o if : [o * o * o] --> o s : [o] --> o double(0) => 0 double(s(X)) => s(s(double(X))) half(0) => 0 half(s(0)) => 0 half(s(s(X))) => s(half(X)) !minus(X, 0) => X !minus(s(X), s(Y)) => !minus(X, Y) if(0, X, Y) => X if(s(X), Y, Z) => Z half(double(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]): double(0) >? 0 double(s(X)) >? s(s(double(X))) half(0) >? 0 half(s(0)) >? 0 half(s(s(X))) >? s(half(X)) !minus(X, 0) >? X !minus(s(X), s(Y)) >? !minus(X, Y) if(0, X, Y) >? X if(s(X), Y, Z) >? Z half(double(X)) >? X We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !minus = \y0y1.3 + y0 + y1 0 = 0 double = \y0.y0 half = \y0.1 + 2y0 if = \y0y1y2.3 + y0 + y1 + y2 s = \y0.y0 Using this interpretation, the requirements translate to: [[double(0)]] = 0 >= 0 = [[0]] [[double(s(_x0))]] = x0 >= x0 = [[s(s(double(_x0)))]] [[half(0)]] = 1 > 0 = [[0]] [[half(s(0))]] = 1 > 0 = [[0]] [[half(s(s(_x0)))]] = 1 + 2x0 >= 1 + 2x0 = [[s(half(_x0))]] [[!minus(_x0, 0)]] = 3 + x0 > x0 = [[_x0]] [[!minus(s(_x0), s(_x1))]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[!minus(_x0, _x1)]] [[if(0, _x0, _x1)]] = 3 + x0 + x1 > x0 = [[_x0]] [[if(s(_x0), _x1, _x2)]] = 3 + x0 + x1 + x2 > x2 = [[_x2]] [[half(double(_x0))]] = 1 + 2x0 > x0 = [[_x0]] We can thus remove the following rules: half(0) => 0 half(s(0)) => 0 !minus(X, 0) => X if(0, X, Y) => X if(s(X), Y, Z) => Z half(double(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]): double(0) >? 0 double(s(X)) >? s(s(double(X))) half(s(s(X))) >? s(half(X)) !minus(s(X), s(Y)) >? !minus(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !minus = \y0y1.y0 + y1 0 = 3 double = \y0.1 + y0 half = \y0.2y0 s = \y0.y0 Using this interpretation, the requirements translate to: [[double(0)]] = 4 > 3 = [[0]] [[double(s(_x0))]] = 1 + x0 >= 1 + x0 = [[s(s(double(_x0)))]] [[half(s(s(_x0)))]] = 2x0 >= 2x0 = [[s(half(_x0))]] [[!minus(s(_x0), s(_x1))]] = x0 + x1 >= x0 + x1 = [[!minus(_x0, _x1)]] We can thus remove the following rules: double(0) => 0 We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): double(s(X)) >? s(s(double(X))) half(s(s(X))) >? s(half(X)) !minus(s(X), s(Y)) >? !minus(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !minus = \y0y1.y0 + y1 double = \y0.3y0 half = \y0.y0 s = \y0.2 + y0 Using this interpretation, the requirements translate to: [[double(s(_x0))]] = 6 + 3x0 > 4 + 3x0 = [[s(s(double(_x0)))]] [[half(s(s(_x0)))]] = 4 + x0 > 2 + x0 = [[s(half(_x0))]] [[!minus(s(_x0), s(_x1))]] = 4 + x0 + x1 > x0 + x1 = [[!minus(_x0, _x1)]] We can thus remove the following rules: double(s(X)) => s(s(double(X))) half(s(s(X))) => s(half(X)) !minus(s(X), s(Y)) => !minus(X, Y) 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.