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