/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. !plus : [o * o] --> o !times : [o * o] --> o f : [o] --> o minus : [o] --> o minus(minus(X)) => X minus(!plus(X, Y)) => !times(minus(minus(minus(X))), minus(minus(minus(Y)))) minus(!times(X, Y)) => !plus(minus(minus(minus(X))), minus(minus(minus(Y)))) f(minus(X)) => minus(minus(minus(f(X)))) We use the dependency pair framework as described in [Kop12, Ch. 6/7], with static dependency pairs (see [KusIsoSakBla09] and the adaptation for AFSMs in [Kop12, Ch. 7.8]). We thus obtain the following dependency pair problem (P_0, R_0, minimal, formative): Dependency Pairs P_0: 0] minus#(!plus(X, Y)) =#> minus#(minus(minus(X))) 1] minus#(!plus(X, Y)) =#> minus#(minus(X)) 2] minus#(!plus(X, Y)) =#> minus#(X) 3] minus#(!plus(X, Y)) =#> minus#(minus(minus(Y))) 4] minus#(!plus(X, Y)) =#> minus#(minus(Y)) 5] minus#(!plus(X, Y)) =#> minus#(Y) 6] minus#(!times(X, Y)) =#> minus#(minus(minus(X))) 7] minus#(!times(X, Y)) =#> minus#(minus(X)) 8] minus#(!times(X, Y)) =#> minus#(X) 9] minus#(!times(X, Y)) =#> minus#(minus(minus(Y))) 10] minus#(!times(X, Y)) =#> minus#(minus(Y)) 11] minus#(!times(X, Y)) =#> minus#(Y) 12] f#(minus(X)) =#> minus#(minus(minus(f(X)))) 13] f#(minus(X)) =#> minus#(minus(f(X))) 14] f#(minus(X)) =#> minus#(f(X)) 15] f#(minus(X)) =#> f#(X) Rules R_0: minus(minus(X)) => X minus(!plus(X, Y)) => !times(minus(minus(minus(X))), minus(minus(minus(Y)))) minus(!times(X, Y)) => !plus(minus(minus(minus(X))), minus(minus(minus(Y)))) f(minus(X)) => minus(minus(minus(f(X)))) Thus, the original system is terminating if (P_0, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_0, R_0, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 1 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 2 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 3 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 4 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 5 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 6 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 7 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 8 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 9 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 10 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 11 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 12 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 13 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 14 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 * 15 : 12, 13, 14, 15 This graph has the following strongly connected components: P_1: minus#(!plus(X, Y)) =#> minus#(minus(minus(X))) minus#(!plus(X, Y)) =#> minus#(minus(X)) minus#(!plus(X, Y)) =#> minus#(X) minus#(!plus(X, Y)) =#> minus#(minus(minus(Y))) minus#(!plus(X, Y)) =#> minus#(minus(Y)) minus#(!plus(X, Y)) =#> minus#(Y) minus#(!times(X, Y)) =#> minus#(minus(minus(X))) minus#(!times(X, Y)) =#> minus#(minus(X)) minus#(!times(X, Y)) =#> minus#(X) minus#(!times(X, Y)) =#> minus#(minus(minus(Y))) minus#(!times(X, Y)) =#> minus#(minus(Y)) minus#(!times(X, Y)) =#> minus#(Y) P_2: f#(minus(X)) =#> f#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_0, R_0, m, f) by (P_1, R_0, m, f) and (P_2, R_0, m, f). Thus, the original system is terminating if each of (P_1, R_0, minimal, formative) and (P_2, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_2, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(f#) = 1 Thus, we can orient the dependency pairs as follows: nu(f#(minus(X))) = minus(X) |> X = nu(f#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_2, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if (P_1, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_1, R_0, minimal, formative). We will use the reduction pair processor with usable rules [Kop12, Thm. 7.44]. The usable rules of (P_1, R_0) are: minus(minus(X)) => X minus(!plus(X, Y)) => !times(minus(minus(minus(X))), minus(minus(minus(Y)))) minus(!times(X, Y)) => !plus(minus(minus(minus(X))), minus(minus(minus(Y)))) It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: minus#(!plus(X, Y)) >? minus#(minus(minus(X))) minus#(!plus(X, Y)) >? minus#(minus(X)) minus#(!plus(X, Y)) >? minus#(X) minus#(!plus(X, Y)) >? minus#(minus(minus(Y))) minus#(!plus(X, Y)) >? minus#(minus(Y)) minus#(!plus(X, Y)) >? minus#(Y) minus#(!times(X, Y)) >? minus#(minus(minus(X))) minus#(!times(X, Y)) >? minus#(minus(X)) minus#(!times(X, Y)) >? minus#(X) minus#(!times(X, Y)) >? minus#(minus(minus(Y))) minus#(!times(X, Y)) >? minus#(minus(Y)) minus#(!times(X, Y)) >? minus#(Y) minus(minus(X)) >= X minus(!plus(X, Y)) >= !times(minus(minus(minus(X))), minus(minus(minus(Y)))) minus(!times(X, Y)) >= !plus(minus(minus(minus(X))), minus(minus(minus(Y)))) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: !plus = \y0y1.1 + y0 + y1 !times = \y0y1.1 + y0 + y1 minus = \y0.y0 minus# = \y0.y0 Using this interpretation, the requirements translate to: [[minus#(!plus(_x0, _x1))]] = 1 + x0 + x1 > x0 = [[minus#(minus(minus(_x0)))]] [[minus#(!plus(_x0, _x1))]] = 1 + x0 + x1 > x0 = [[minus#(minus(_x0))]] [[minus#(!plus(_x0, _x1))]] = 1 + x0 + x1 > x0 = [[minus#(_x0)]] [[minus#(!plus(_x0, _x1))]] = 1 + x0 + x1 > x1 = [[minus#(minus(minus(_x1)))]] [[minus#(!plus(_x0, _x1))]] = 1 + x0 + x1 > x1 = [[minus#(minus(_x1))]] [[minus#(!plus(_x0, _x1))]] = 1 + x0 + x1 > x1 = [[minus#(_x1)]] [[minus#(!times(_x0, _x1))]] = 1 + x0 + x1 > x0 = [[minus#(minus(minus(_x0)))]] [[minus#(!times(_x0, _x1))]] = 1 + x0 + x1 > x0 = [[minus#(minus(_x0))]] [[minus#(!times(_x0, _x1))]] = 1 + x0 + x1 > x0 = [[minus#(_x0)]] [[minus#(!times(_x0, _x1))]] = 1 + x0 + x1 > x1 = [[minus#(minus(minus(_x1)))]] [[minus#(!times(_x0, _x1))]] = 1 + x0 + x1 > x1 = [[minus#(minus(_x1))]] [[minus#(!times(_x0, _x1))]] = 1 + x0 + x1 > x1 = [[minus#(_x1)]] [[minus(minus(_x0))]] = x0 >= x0 = [[_x0]] [[minus(!plus(_x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[!times(minus(minus(minus(_x0))), minus(minus(minus(_x1))))]] [[minus(!times(_x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[!plus(minus(minus(minus(_x0))), minus(minus(minus(_x1))))]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace a dependency pair problem (P_1, R_0) by ({}, R_0). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. As all dependency pair problems were succesfully simplified with sound (and complete) processors until nothing remained, we conclude termination. +++ Citations +++ [Kop12] C. Kop. Higher Order Termination. PhD Thesis, 2012. [KusIsoSakBla09] K. Kusakari, Y. Isogai, M. Sakai, and F. Blanqui. Static Dependency Pair Method Based On Strong Computability for Higher-Order Rewrite Systems. In volume 92(10) of IEICE Transactions on Information and Systems. 2007--2015, 2009.