/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. 0 : [] --> o ack : [o * o] --> o s : [o] --> o ack(0, X) => s(X) ack(s(X), 0) => ack(X, s(0)) ack(s(X), s(Y)) => ack(X, ack(s(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]): ack(0, X) >? s(X) ack(s(X), 0) >? ack(X, s(0)) ack(s(X), s(Y)) >? ack(X, ack(s(X), Y)) about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. We choose Lex = {ack} and Mul = {0, s}, and the following precedence: ack > s > 0 With these choices, we have: 1] ack(0, X) >= s(X) because [2], by (Star) 2] ack*(0, X) >= s(X) because ack > s and [3], by (Copy) 3] ack*(0, X) >= X because [4], by (Select) 4] X >= X by (Meta) 5] ack(s(X), 0) >= ack(X, s(0)) because [6], by (Star) 6] ack*(s(X), 0) >= ack(X, s(0)) because [7], [10] and [12], by (Stat) 7] s(X) > X because [8], by definition 8] s*(X) >= X because [9], by (Select) 9] X >= X by (Meta) 10] ack*(s(X), 0) >= X because [11], by (Select) 11] s(X) >= X because [8], by (Star) 12] ack*(s(X), 0) >= s(0) because ack > s and [13], by (Copy) 13] ack*(s(X), 0) >= 0 because [14], by (Select) 14] s(X) >= 0 because [15], by (Star) 15] s*(X) >= 0 because s > 0, by (Copy) 16] ack(s(X), s(Y)) > ack(X, ack(s(X), Y)) because [17], by definition 17] ack*(s(X), s(Y)) >= ack(X, ack(s(X), Y)) because [7], [18] and [19], by (Stat) 18] ack*(s(X), s(Y)) >= X because [11], by (Select) 19] ack*(s(X), s(Y)) >= ack(s(X), Y) because [20], [22], [24] and [25], by (Stat) 20] s(X) >= s(X) because s in Mul and [21], by (Fun) 21] X >= X by (Meta) 22] s(Y) > Y because [23], by definition 23] s*(Y) >= Y because [4], by (Select) 24] ack*(s(X), s(Y)) >= s(X) because [20], by (Select) 25] ack*(s(X), s(Y)) >= Y because [26], by (Select) 26] s(Y) >= Y because [23], by (Star) We can thus remove the following rules: ack(s(X), s(Y)) => ack(X, ack(s(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]): ack(0, X) >? s(X) ack(s(X), 0) >? ack(X, s(0)) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 0 ack = \y0y1.3 + y0 + y1 s = \y0.y0 Using this interpretation, the requirements translate to: [[ack(0, _x0)]] = 3 + x0 > x0 = [[s(_x0)]] [[ack(s(_x0), 0)]] = 3 + x0 >= 3 + x0 = [[ack(_x0, s(0))]] We can thus remove the following rules: ack(0, X) => s(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]): ack(s(X), 0) >? ack(X, s(0)) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 0 ack = \y0y1.2y1 + 3y0 s = \y0.2 + y0 Using this interpretation, the requirements translate to: [[ack(s(_x0), 0)]] = 6 + 3x0 > 4 + 3x0 = [[ack(_x0, s(0))]] We can thus remove the following rules: ack(s(X), 0) => ack(X, s(0)) 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.