/export/starexec/sandbox/solver/bin/starexec_run_FirstOrder /export/starexec/sandbox/benchmark/theBenchmark.xml /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES We consider the system theBenchmark. We are asked to determine termination of the following first-order TRS. a : [] --> o b : [] --> o c : [] --> o d : [] --> o e : [] --> o f : [o] --> o g : [o * o] --> o h : [o * o] --> o f(a) => b f(c) => d f(g(X, Y)) => g(f(X), f(Y)) f(h(X, Y)) => g(h(Y, f(X)), h(X, f(Y))) g(X, X) => h(e, 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]): f(a) >? b f(c) >? d f(g(X, Y)) >? g(f(X), f(Y)) f(h(X, Y)) >? g(h(Y, f(X)), h(X, f(Y))) g(X, X) >? h(e, X) about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[b]] = _|_ [[d]] = _|_ [[e]] = _|_ We choose Lex = {} and Mul = {a, c, f, g, h}, and the following precedence: c > a > f > g > h Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: f(a) > _|_ f(c) >= _|_ f(g(X, Y)) >= g(f(X), f(Y)) f(h(X, Y)) > g(h(Y, f(X)), h(X, f(Y))) g(X, X) >= h(_|_, X) With these choices, we have: 1] f(a) > _|_ because [2], by definition 2] f*(a) >= _|_ by (Bot) 3] f(c) >= _|_ by (Bot) 4] f(g(X, Y)) >= g(f(X), f(Y)) because [5], by (Star) 5] f*(g(X, Y)) >= g(f(X), f(Y)) because f > g, [6] and [10], by (Copy) 6] f*(g(X, Y)) >= f(X) because f in Mul and [7], by (Stat) 7] g(X, Y) > X because [8], by definition 8] g*(X, Y) >= X because [9], by (Select) 9] X >= X by (Meta) 10] f*(g(X, Y)) >= f(Y) because f in Mul and [11], by (Stat) 11] g(X, Y) > Y because [12], by definition 12] g*(X, Y) >= Y because [13], by (Select) 13] Y >= Y by (Meta) 14] f(h(X, Y)) > g(h(Y, f(X)), h(X, f(Y))) because [15], by definition 15] f*(h(X, Y)) >= g(h(Y, f(X)), h(X, f(Y))) because f > g, [16] and [23], by (Copy) 16] f*(h(X, Y)) >= h(Y, f(X)) because f > h, [17] and [20], by (Copy) 17] f*(h(X, Y)) >= Y because [18], by (Select) 18] h(X, Y) >= Y because [19], by (Star) 19] h*(X, Y) >= Y because [13], by (Select) 20] f*(h(X, Y)) >= f(X) because f in Mul and [21], by (Stat) 21] h(X, Y) > X because [22], by definition 22] h*(X, Y) >= X because [9], by (Select) 23] f*(h(X, Y)) >= h(X, f(Y)) because f > h, [24] and [26], by (Copy) 24] f*(h(X, Y)) >= X because [25], by (Select) 25] h(X, Y) >= X because [22], by (Star) 26] f*(h(X, Y)) >= f(Y) because f in Mul and [27], by (Stat) 27] h(X, Y) > Y because [28], by definition 28] h*(X, Y) >= Y because [13], by (Select) 29] g(X, X) >= h(_|_, X) because [30], by (Star) 30] g*(X, X) >= h(_|_, X) because g > h, [31] and [32], by (Copy) 31] g*(X, X) >= _|_ by (Bot) 32] g*(X, X) >= X because [9], by (Select) We can thus remove the following rules: f(a) => b f(h(X, Y)) => g(h(Y, f(X)), h(X, f(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]): f(c) >? d f(g(X, Y)) >? g(f(X), f(Y)) g(X, X) >? h(e, X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: c = 3 d = 0 e = 0 f = \y0.3y0 g = \y0y1.3 + y0 + y1 h = \y0y1.y0 + y1 Using this interpretation, the requirements translate to: [[f(c)]] = 9 > 0 = [[d]] [[f(g(_x0, _x1))]] = 9 + 3x0 + 3x1 > 3 + 3x0 + 3x1 = [[g(f(_x0), f(_x1))]] [[g(_x0, _x0)]] = 3 + 2x0 > x0 = [[h(e, _x0)]] We can thus remove the following rules: f(c) => d f(g(X, Y)) => g(f(X), f(Y)) g(X, X) => h(e, 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.