/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 2ndsneg : [o * o] --> o 2ndspos : [o * o] --> o activate : [o] --> o cons : [o * o] --> o from : [o] --> o n!6220!6220cons : [o * o] --> o n!6220!6220from : [o] --> o n!6220!6220s : [o] --> o negrecip : [o] --> o pi : [o] --> o plus : [o * o] --> o posrecip : [o] --> o rcons : [o * o] --> o rnil : [] --> o s : [o] --> o square : [o] --> o times : [o * o] --> o from(X) => cons(X, n!6220!6220from(n!6220!6220s(X))) 2ndspos(0, X) => rnil 2ndspos(s(X), cons(Y, n!6220!6220cons(Z, U))) => rcons(posrecip(activate(Z)), 2ndsneg(X, activate(U))) 2ndsneg(0, X) => rnil 2ndsneg(s(X), cons(Y, n!6220!6220cons(Z, U))) => rcons(negrecip(activate(Z)), 2ndspos(X, activate(U))) pi(X) => 2ndspos(X, from(0)) plus(0, X) => X plus(s(X), Y) => s(plus(X, Y)) times(0, X) => 0 times(s(X), Y) => plus(Y, times(X, Y)) square(X) => times(X, X) from(X) => n!6220!6220from(X) s(X) => n!6220!6220s(X) cons(X, Y) => n!6220!6220cons(X, Y) activate(n!6220!6220from(X)) => from(activate(X)) activate(n!6220!6220s(X)) => s(activate(X)) activate(n!6220!6220cons(X, Y)) => cons(activate(X), Y) 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]): from(X) >? cons(X, n!6220!6220from(n!6220!6220s(X))) 2ndspos(0, X) >? rnil 2ndspos(s(X), cons(Y, n!6220!6220cons(Z, U))) >? rcons(posrecip(activate(Z)), 2ndsneg(X, activate(U))) 2ndsneg(0, X) >? rnil 2ndsneg(s(X), cons(Y, n!6220!6220cons(Z, U))) >? rcons(negrecip(activate(Z)), 2ndspos(X, activate(U))) pi(X) >? 2ndspos(X, from(0)) plus(0, X) >? X plus(s(X), Y) >? s(plus(X, Y)) times(0, X) >? 0 times(s(X), Y) >? plus(Y, times(X, Y)) square(X) >? times(X, X) from(X) >? n!6220!6220from(X) s(X) >? n!6220!6220s(X) cons(X, Y) >? n!6220!6220cons(X, Y) activate(n!6220!6220from(X)) >? from(activate(X)) activate(n!6220!6220s(X)) >? s(activate(X)) activate(n!6220!6220cons(X, Y)) >? cons(activate(X), Y) activate(X) >? X about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[0]] = _|_ [[posrecip(x_1)]] = x_1 [[rnil]] = _|_ We choose Lex = {2ndsneg, 2ndspos} and Mul = {activate, cons, from, n!6220!6220cons, n!6220!6220from, n!6220!6220s, negrecip, pi, plus, rcons, s, square, times}, and the following precedence: pi > square > times > plus > 2ndsneg = 2ndspos > negrecip > rcons > activate > from > n!6220!6220s = s > n!6220!6220from > cons > n!6220!6220cons Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: from(X) > cons(X, n!6220!6220from(n!6220!6220s(X))) 2ndspos(_|_, X) >= _|_ 2ndspos(s(X), cons(Y, n!6220!6220cons(Z, U))) >= rcons(activate(Z), 2ndsneg(X, activate(U))) 2ndsneg(_|_, X) >= _|_ 2ndsneg(s(X), cons(Y, n!6220!6220cons(Z, U))) >= rcons(negrecip(activate(Z)), 2ndspos(X, activate(U))) pi(X) > 2ndspos(X, from(_|_)) plus(_|_, X) >= X plus(s(X), Y) >= s(plus(X, Y)) times(_|_, X) >= _|_ times(s(X), Y) > plus(Y, times(X, Y)) square(X) >= times(X, X) from(X) >= n!6220!6220from(X) s(X) >= n!6220!6220s(X) cons(X, Y) > n!6220!6220cons(X, Y) activate(n!6220!6220from(X)) > from(activate(X)) activate(n!6220!6220s(X)) >= s(activate(X)) activate(n!6220!6220cons(X, Y)) > cons(activate(X), Y) activate(X) >= X With these choices, we have: 1] from(X) > cons(X, n!6220!6220from(n!6220!6220s(X))) because [2], by definition 2] from*(X) >= cons(X, n!6220!6220from(n!6220!6220s(X))) because from > cons, [3] and [5], by (Copy) 3] from*(X) >= X because [4], by (Select) 4] X >= X by (Meta) 5] from*(X) >= n!6220!6220from(n!6220!6220s(X)) because from > n!6220!6220from and [6], by (Copy) 6] from*(X) >= n!6220!6220s(X) because from > n!6220!6220s and [3], by (Copy) 7] 2ndspos(_|_, X) >= _|_ by (Bot) 8] 2ndspos(s(X), cons(Y, n!6220!6220cons(Z, U))) >= rcons(activate(Z), 2ndsneg(X, activate(U))) because [9], by (Star) 9] 2ndspos*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= rcons(activate(Z), 2ndsneg(X, activate(U))) because 2ndspos > rcons, [10] and [17], by (Copy) 10] 2ndspos*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= activate(Z) because 2ndspos > activate and [11], by (Copy) 11] 2ndspos*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= Z because [12], by (Select) 12] cons(Y, n!6220!6220cons(Z, U)) >= Z because [13], by (Star) 13] cons*(Y, n!6220!6220cons(Z, U)) >= Z because [14], by (Select) 14] n!6220!6220cons(Z, U) >= Z because [15], by (Star) 15] n!6220!6220cons*(Z, U) >= Z because [16], by (Select) 16] Z >= Z by (Meta) 17] 2ndspos*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= 2ndsneg(X, activate(U)) because 2ndspos = 2ndsneg, [18], [21] and [23], by (Stat) 18] s(X) > X because [19], by definition 19] s*(X) >= X because [20], by (Select) 20] X >= X by (Meta) 21] 2ndspos*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= X because [22], by (Select) 22] s(X) >= X because [19], by (Star) 23] 2ndspos*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= activate(U) because 2ndspos > activate and [24], by (Copy) 24] 2ndspos*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= U because [25], by (Select) 25] cons(Y, n!6220!6220cons(Z, U)) >= U because [26], by (Star) 26] cons*(Y, n!6220!6220cons(Z, U)) >= U because [27], by (Select) 27] n!6220!6220cons(Z, U) >= U because [28], by (Star) 28] n!6220!6220cons*(Z, U) >= U because [29], by (Select) 29] U >= U by (Meta) 30] 2ndsneg(_|_, X) >= _|_ by (Bot) 31] 2ndsneg(s(X), cons(Y, n!6220!6220cons(Z, U))) >= rcons(negrecip(activate(Z)), 2ndspos(X, activate(U))) because [32], by (Star) 32] 2ndsneg*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= rcons(negrecip(activate(Z)), 2ndspos(X, activate(U))) because 2ndsneg > rcons, [33] and [36], by (Copy) 33] 2ndsneg*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= negrecip(activate(Z)) because 2ndsneg > negrecip and [34], by (Copy) 34] 2ndsneg*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= activate(Z) because 2ndsneg > activate and [35], by (Copy) 35] 2ndsneg*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= Z because [12], by (Select) 36] 2ndsneg*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= 2ndspos(X, activate(U)) because 2ndsneg = 2ndspos, [18], [37] and [38], by (Stat) 37] 2ndsneg*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= X because [22], by (Select) 38] 2ndsneg*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= activate(U) because 2ndsneg > activate and [39], by (Copy) 39] 2ndsneg*(s(X), cons(Y, n!6220!6220cons(Z, U))) >= U because [25], by (Select) 40] pi(X) > 2ndspos(X, from(_|_)) because [41], by definition 41] pi*(X) >= 2ndspos(X, from(_|_)) because pi > 2ndspos, [42] and [43], by (Copy) 42] pi*(X) >= X because [4], by (Select) 43] pi*(X) >= from(_|_) because pi > from and [44], by (Copy) 44] pi*(X) >= _|_ by (Bot) 45] plus(_|_, X) >= X because [46], by (Star) 46] plus*(_|_, X) >= X because [16], by (Select) 47] plus(s(X), Y) >= s(plus(X, Y)) because [48], by (Star) 48] plus*(s(X), Y) >= s(plus(X, Y)) because plus > s and [49], by (Copy) 49] plus*(s(X), Y) >= plus(X, Y) because plus in Mul, [50] and [52], by (Stat) 50] s(X) > X because [51], by definition 51] s*(X) >= X because [4], by (Select) 52] Y >= Y by (Meta) 53] times(_|_, X) >= _|_ by (Bot) 54] times(s(X), Y) > plus(Y, times(X, Y)) because [55], by definition 55] times*(s(X), Y) >= plus(Y, times(X, Y)) because times > plus, [56] and [57], by (Copy) 56] times*(s(X), Y) >= Y because [52], by (Select) 57] times*(s(X), Y) >= times(X, Y) because times in Mul, [50] and [52], by (Stat) 58] square(X) >= times(X, X) because [59], by (Star) 59] square*(X) >= times(X, X) because square > times, [60] and [60], by (Copy) 60] square*(X) >= X because [4], by (Select) 61] from(X) >= n!6220!6220from(X) because [62], by (Star) 62] from*(X) >= n!6220!6220from(X) because from > n!6220!6220from and [3], by (Copy) 63] s(X) >= n!6220!6220s(X) because s = n!6220!6220s, s in Mul and [64], by (Fun) 64] X >= X by (Meta) 65] cons(X, Y) > n!6220!6220cons(X, Y) because [66], by definition 66] cons*(X, Y) >= n!6220!6220cons(X, Y) because cons > n!6220!6220cons, [67] and [69], by (Copy) 67] cons*(X, Y) >= X because [68], by (Select) 68] X >= X by (Meta) 69] cons*(X, Y) >= Y because [70], by (Select) 70] Y >= Y by (Meta) 71] activate(n!6220!6220from(X)) > from(activate(X)) because [72], by definition 72] activate*(n!6220!6220from(X)) >= from(activate(X)) because activate > from and [73], by (Copy) 73] activate*(n!6220!6220from(X)) >= activate(X) because activate in Mul and [74], by (Stat) 74] n!6220!6220from(X) > X because [75], by definition 75] n!6220!6220from*(X) >= X because [64], by (Select) 76] activate(n!6220!6220s(X)) >= s(activate(X)) because [77], by (Star) 77] activate*(n!6220!6220s(X)) >= s(activate(X)) because activate > s and [78], by (Copy) 78] activate*(n!6220!6220s(X)) >= activate(X) because activate in Mul and [79], by (Stat) 79] n!6220!6220s(X) > X because [80], by definition 80] n!6220!6220s*(X) >= X because [64], by (Select) 81] activate(n!6220!6220cons(X, Y)) > cons(activate(X), Y) because [82], by definition 82] activate*(n!6220!6220cons(X, Y)) >= cons(activate(X), Y) because activate > cons, [83] and [86], by (Copy) 83] activate*(n!6220!6220cons(X, Y)) >= activate(X) because activate in Mul and [84], by (Stat) 84] n!6220!6220cons(X, Y) > X because [85], by definition 85] n!6220!6220cons*(X, Y) >= X because [68], by (Select) 86] activate*(n!6220!6220cons(X, Y)) >= Y because [87], by (Select) 87] n!6220!6220cons(X, Y) >= Y because [88], by (Star) 88] n!6220!6220cons*(X, Y) >= Y because [70], by (Select) 89] activate(X) >= X because [90], by (Star) 90] activate*(X) >= X because [64], by (Select) We can thus remove the following rules: from(X) => cons(X, n!6220!6220from(n!6220!6220s(X))) pi(X) => 2ndspos(X, from(0)) times(s(X), Y) => plus(Y, times(X, Y)) cons(X, Y) => n!6220!6220cons(X, Y) activate(n!6220!6220from(X)) => from(activate(X)) activate(n!6220!6220cons(X, Y)) => cons(activate(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]): 2ndspos(0, X) >? rnil 2ndspos(s(X), cons(Y, n!6220!6220cons(Z, U))) >? rcons(posrecip(activate(Z)), 2ndsneg(X, activate(U))) 2ndsneg(0, X) >? rnil 2ndsneg(s(X), cons(Y, n!6220!6220cons(Z, U))) >? rcons(negrecip(activate(Z)), 2ndspos(X, activate(U))) plus(0, X) >? X plus(s(X), Y) >? s(plus(X, Y)) times(0, X) >? 0 square(X) >? times(X, X) from(X) >? n!6220!6220from(X) s(X) >? n!6220!6220s(X) activate(n!6220!6220s(X)) >? s(activate(X)) activate(X) >? X We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 0 2ndsneg = \y0y1.2 + y0 + 2y1 2ndspos = \y0y1.1 + y0 + 2y1 activate = \y0.2y0 cons = \y0y1.3 + y0 + 3y1 from = \y0.3 + 3y0 n!6220!6220cons = \y0y1.3 + 3y0 + 3y1 n!6220!6220from = \y0.y0 n!6220!6220s = \y0.y0 negrecip = \y0.y0 plus = \y0y1.y1 + 3y0 posrecip = \y0.y0 rcons = \y0y1.y0 + y1 rnil = 0 s = \y0.y0 square = \y0.3 + 3y0 times = \y0y1.2 + y0 + y1 Using this interpretation, the requirements translate to: [[2ndspos(0, _x0)]] = 1 + 2x0 > 0 = [[rnil]] [[2ndspos(s(_x0), cons(_x1, n!6220!6220cons(_x2, _x3)))]] = 25 + x0 + 2x1 + 18x2 + 18x3 > 2 + x0 + 2x2 + 4x3 = [[rcons(posrecip(activate(_x2)), 2ndsneg(_x0, activate(_x3)))]] [[2ndsneg(0, _x0)]] = 2 + 2x0 > 0 = [[rnil]] [[2ndsneg(s(_x0), cons(_x1, n!6220!6220cons(_x2, _x3)))]] = 26 + x0 + 2x1 + 18x2 + 18x3 > 1 + x0 + 2x2 + 4x3 = [[rcons(negrecip(activate(_x2)), 2ndspos(_x0, activate(_x3)))]] [[plus(0, _x0)]] = x0 >= x0 = [[_x0]] [[plus(s(_x0), _x1)]] = x1 + 3x0 >= x1 + 3x0 = [[s(plus(_x0, _x1))]] [[times(0, _x0)]] = 2 + x0 > 0 = [[0]] [[square(_x0)]] = 3 + 3x0 > 2 + 2x0 = [[times(_x0, _x0)]] [[from(_x0)]] = 3 + 3x0 > x0 = [[n!6220!6220from(_x0)]] [[s(_x0)]] = x0 >= x0 = [[n!6220!6220s(_x0)]] [[activate(n!6220!6220s(_x0))]] = 2x0 >= 2x0 = [[s(activate(_x0))]] [[activate(_x0)]] = 2x0 >= x0 = [[_x0]] We can thus remove the following rules: 2ndspos(0, X) => rnil 2ndspos(s(X), cons(Y, n!6220!6220cons(Z, U))) => rcons(posrecip(activate(Z)), 2ndsneg(X, activate(U))) 2ndsneg(0, X) => rnil 2ndsneg(s(X), cons(Y, n!6220!6220cons(Z, U))) => rcons(negrecip(activate(Z)), 2ndspos(X, activate(U))) times(0, X) => 0 square(X) => times(X, X) from(X) => n!6220!6220from(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]): plus(0, X) >? X plus(s(X), Y) >? s(plus(X, Y)) s(X) >? n!6220!6220s(X) activate(n!6220!6220s(X)) >? s(activate(X)) activate(X) >? X We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 3 activate = \y0.2y0 n!6220!6220s = \y0.1 + y0 plus = \y0y1.2y1 + 3y0 s = \y0.1 + y0 Using this interpretation, the requirements translate to: [[plus(0, _x0)]] = 9 + 2x0 > x0 = [[_x0]] [[plus(s(_x0), _x1)]] = 3 + 2x1 + 3x0 > 1 + 2x1 + 3x0 = [[s(plus(_x0, _x1))]] [[s(_x0)]] = 1 + x0 >= 1 + x0 = [[n!6220!6220s(_x0)]] [[activate(n!6220!6220s(_x0))]] = 2 + 2x0 > 1 + 2x0 = [[s(activate(_x0))]] [[activate(_x0)]] = 2x0 >= x0 = [[_x0]] We can thus remove the following rules: plus(0, X) => X plus(s(X), Y) => s(plus(X, Y)) activate(n!6220!6220s(X)) => s(activate(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]): s(X) >? n!6220!6220s(X) activate(X) >? X We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: activate = \y0.3 + y0 n!6220!6220s = \y0.y0 s = \y0.3 + 3y0 Using this interpretation, the requirements translate to: [[s(_x0)]] = 3 + 3x0 > x0 = [[n!6220!6220s(_x0)]] [[activate(_x0)]] = 3 + x0 > x0 = [[_x0]] We can thus remove the following rules: s(X) => n!6220!6220s(X) activate(X) => 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.