/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 active : [o] --> o cons : [o * o] --> o f : [o] --> o mark : [o] --> o p : [o] --> o s : [o] --> o active(f(0)) => mark(cons(0, f(s(0)))) active(f(s(0))) => mark(f(p(s(0)))) active(p(s(0))) => mark(0) mark(f(X)) => active(f(mark(X))) mark(0) => active(0) mark(cons(X, Y)) => active(cons(mark(X), Y)) mark(s(X)) => active(s(mark(X))) mark(p(X)) => active(p(mark(X))) f(mark(X)) => f(X) f(active(X)) => f(X) cons(mark(X), Y) => cons(X, Y) cons(X, mark(Y)) => cons(X, Y) cons(active(X), Y) => cons(X, Y) cons(X, active(Y)) => cons(X, Y) s(mark(X)) => s(X) s(active(X)) => s(X) p(mark(X)) => p(X) p(active(X)) => p(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] active#(f(0)) =#> mark#(cons(0, f(s(0)))) 1] active#(f(0)) =#> cons#(0, f(s(0))) 2] active#(f(0)) =#> f#(s(0)) 3] active#(f(0)) =#> s#(0) 4] active#(f(s(0))) =#> mark#(f(p(s(0)))) 5] active#(f(s(0))) =#> f#(p(s(0))) 6] active#(f(s(0))) =#> p#(s(0)) 7] active#(f(s(0))) =#> s#(0) 8] active#(p(s(0))) =#> mark#(0) 9] mark#(f(X)) =#> active#(f(mark(X))) 10] mark#(f(X)) =#> f#(mark(X)) 11] mark#(f(X)) =#> mark#(X) 12] mark#(0) =#> active#(0) 13] mark#(cons(X, Y)) =#> active#(cons(mark(X), Y)) 14] mark#(cons(X, Y)) =#> cons#(mark(X), Y) 15] mark#(cons(X, Y)) =#> mark#(X) 16] mark#(s(X)) =#> active#(s(mark(X))) 17] mark#(s(X)) =#> s#(mark(X)) 18] mark#(s(X)) =#> mark#(X) 19] mark#(p(X)) =#> active#(p(mark(X))) 20] mark#(p(X)) =#> p#(mark(X)) 21] mark#(p(X)) =#> mark#(X) 22] f#(mark(X)) =#> f#(X) 23] f#(active(X)) =#> f#(X) 24] cons#(mark(X), Y) =#> cons#(X, Y) 25] cons#(X, mark(Y)) =#> cons#(X, Y) 26] cons#(active(X), Y) =#> cons#(X, Y) 27] cons#(X, active(Y)) =#> cons#(X, Y) 28] s#(mark(X)) =#> s#(X) 29] s#(active(X)) =#> s#(X) 30] p#(mark(X)) =#> p#(X) 31] p#(active(X)) =#> p#(X) Rules R_0: active(f(0)) => mark(cons(0, f(s(0)))) active(f(s(0))) => mark(f(p(s(0)))) active(p(s(0))) => mark(0) mark(f(X)) => active(f(mark(X))) mark(0) => active(0) mark(cons(X, Y)) => active(cons(mark(X), Y)) mark(s(X)) => active(s(mark(X))) mark(p(X)) => active(p(mark(X))) f(mark(X)) => f(X) f(active(X)) => f(X) cons(mark(X), Y) => cons(X, Y) cons(X, mark(Y)) => cons(X, Y) cons(active(X), Y) => cons(X, Y) cons(X, active(Y)) => cons(X, Y) s(mark(X)) => s(X) s(active(X)) => s(X) p(mark(X)) => p(X) p(active(X)) => p(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 : 13, 14, 15 * 1 : * 2 : * 3 : * 4 : 9, 10, 11 * 5 : * 6 : * 7 : * 8 : 12 * 9 : 0, 1, 2, 3, 4, 5, 6, 7 * 10 : 22, 23 * 11 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 * 12 : * 13 : * 14 : 24, 25, 26, 27 * 15 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 * 16 : * 17 : 28, 29 * 18 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 * 19 : 8 * 20 : 30, 31 * 21 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 * 22 : 22, 23 * 23 : 22, 23 * 24 : 24, 25, 26, 27 * 25 : 24, 25, 26, 27 * 26 : 24, 25, 26, 27 * 27 : 24, 25, 26, 27 * 28 : 28, 29 * 29 : 28, 29 * 30 : 30, 31 * 31 : 30, 31 This graph has the following strongly connected components: P_1: active#(f(0)) =#> mark#(cons(0, f(s(0)))) active#(f(s(0))) =#> mark#(f(p(s(0)))) mark#(f(X)) =#> active#(f(mark(X))) mark#(f(X)) =#> mark#(X) mark#(cons(X, Y)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(p(X)) =#> mark#(X) P_2: f#(mark(X)) =#> f#(X) f#(active(X)) =#> f#(X) P_3: cons#(mark(X), Y) =#> cons#(X, Y) cons#(X, mark(Y)) =#> cons#(X, Y) cons#(active(X), Y) =#> cons#(X, Y) cons#(X, active(Y)) =#> cons#(X, Y) P_4: s#(mark(X)) =#> s#(X) s#(active(X)) =#> s#(X) P_5: p#(mark(X)) =#> p#(X) p#(active(X)) =#> p#(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), (P_2, R_0, m, f), (P_3, R_0, m, f), (P_4, R_0, m, f) and (P_5, R_0, m, f). Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative) and (P_5, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_5, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(p#) = 1 Thus, we can orient the dependency pairs as follows: nu(p#(mark(X))) = mark(X) |> X = nu(p#(X)) nu(p#(active(X))) = active(X) |> X = nu(p#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_5, 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 each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative) and (P_4, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_4, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(s#) = 1 Thus, we can orient the dependency pairs as follows: nu(s#(mark(X))) = mark(X) |> X = nu(s#(X)) nu(s#(active(X))) = active(X) |> X = nu(s#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_4, 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 each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative) and (P_3, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_3, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(cons#) = 1 Thus, we can orient the dependency pairs as follows: nu(cons#(mark(X), Y)) = mark(X) |> X = nu(cons#(X, Y)) nu(cons#(X, mark(Y))) = X = X = nu(cons#(X, Y)) nu(cons#(active(X), Y)) = active(X) |> X = nu(cons#(X, Y)) nu(cons#(X, active(Y))) = X = X = nu(cons#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_3, R_0, minimal, f) by (P_6, R_0, minimal, f), where P_6 contains: cons#(X, mark(Y)) =#> cons#(X, Y) cons#(X, active(Y)) =#> cons#(X, Y) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative) and (P_6, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_6, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(cons#) = 2 Thus, we can orient the dependency pairs as follows: nu(cons#(X, mark(Y))) = mark(Y) |> Y = nu(cons#(X, Y)) nu(cons#(X, active(Y))) = active(Y) |> Y = nu(cons#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_6, 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 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#(mark(X))) = mark(X) |> X = nu(f#(X)) nu(f#(active(X))) = active(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 [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(f(0)) >? mark#(cons(0, f(s(0)))) active#(f(s(0))) >? mark#(f(p(s(0)))) mark#(f(X)) >? active#(f(mark(X))) mark#(f(X)) >? mark#(X) mark#(cons(X, Y)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(p(X)) >? mark#(X) active(f(0)) >= mark(cons(0, f(s(0)))) active(f(s(0))) >= mark(f(p(s(0)))) active(p(s(0))) >= mark(0) mark(f(X)) >= active(f(mark(X))) mark(0) >= active(0) mark(cons(X, Y)) >= active(cons(mark(X), Y)) mark(s(X)) >= active(s(mark(X))) mark(p(X)) >= active(p(mark(X))) f(mark(X)) >= f(X) f(active(X)) >= f(X) cons(mark(X), Y) >= cons(X, Y) cons(X, mark(Y)) >= cons(X, Y) cons(active(X), Y) >= cons(X, Y) cons(X, active(Y)) >= cons(X, Y) s(mark(X)) >= s(X) s(active(X)) >= s(X) p(mark(X)) >= p(X) p(active(X)) >= p(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 0 active = \y0.y0 active# = \y0.1 cons = \y0y1.y0 f = \y0.1 + 2y0 mark = \y0.y0 mark# = \y0.y0 p = \y0.y0 s = \y0.2y0 Using this interpretation, the requirements translate to: [[active#(f(0))]] = 1 > 0 = [[mark#(cons(0, f(s(0))))]] [[active#(f(s(0)))]] = 1 >= 1 = [[mark#(f(p(s(0))))]] [[mark#(f(_x0))]] = 1 + 2x0 >= 1 = [[active#(f(mark(_x0)))]] [[mark#(f(_x0))]] = 1 + 2x0 > x0 = [[mark#(_x0)]] [[mark#(cons(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(s(_x0))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(p(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[active(f(0))]] = 1 >= 0 = [[mark(cons(0, f(s(0))))]] [[active(f(s(0)))]] = 1 >= 1 = [[mark(f(p(s(0))))]] [[active(p(s(0)))]] = 0 >= 0 = [[mark(0)]] [[mark(f(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[active(f(mark(_x0)))]] [[mark(0)]] = 0 >= 0 = [[active(0)]] [[mark(cons(_x0, _x1))]] = x0 >= x0 = [[active(cons(mark(_x0), _x1))]] [[mark(s(_x0))]] = 2x0 >= 2x0 = [[active(s(mark(_x0)))]] [[mark(p(_x0))]] = x0 >= x0 = [[active(p(mark(_x0)))]] [[f(mark(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[f(_x0)]] [[f(active(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[f(_x0)]] [[cons(mark(_x0), _x1)]] = x0 >= x0 = [[cons(_x0, _x1)]] [[cons(_x0, mark(_x1))]] = x0 >= x0 = [[cons(_x0, _x1)]] [[cons(active(_x0), _x1)]] = x0 >= x0 = [[cons(_x0, _x1)]] [[cons(_x0, active(_x1))]] = x0 >= x0 = [[cons(_x0, _x1)]] [[s(mark(_x0))]] = 2x0 >= 2x0 = [[s(_x0)]] [[s(active(_x0))]] = 2x0 >= 2x0 = [[s(_x0)]] [[p(mark(_x0))]] = x0 >= x0 = [[p(_x0)]] [[p(active(_x0))]] = x0 >= x0 = [[p(_x0)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_1, R_0, minimal, formative) by (P_7, R_0, minimal, formative), where P_7 consists of: active#(f(s(0))) =#> mark#(f(p(s(0)))) mark#(f(X)) =#> active#(f(mark(X))) mark#(cons(X, Y)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(p(X)) =#> mark#(X) Thus, the original system is terminating if (P_7, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_7, 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 : 1 * 1 : 0 * 2 : 1, 2, 3, 4 * 3 : 1, 2, 3, 4 * 4 : 1, 2, 3, 4 This graph has the following strongly connected components: P_8: active#(f(s(0))) =#> mark#(f(p(s(0)))) mark#(f(X)) =#> active#(f(mark(X))) P_9: mark#(cons(X, Y)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(p(X)) =#> mark#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_7, R_0, m, f) by (P_8, R_0, m, f) and (P_9, R_0, m, f). Thus, the original system is terminating if each of (P_8, R_0, minimal, formative) and (P_9, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_9, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(mark#) = 1 Thus, we can orient the dependency pairs as follows: nu(mark#(cons(X, Y))) = cons(X, Y) |> X = nu(mark#(X)) nu(mark#(s(X))) = s(X) |> X = nu(mark#(X)) nu(mark#(p(X))) = p(X) |> X = nu(mark#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_9, 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_8, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_8, R_0, minimal, formative). The formative rules of (P_8, R_0) are R_1 ::= active(f(0)) => mark(cons(0, f(s(0)))) active(f(s(0))) => mark(f(p(s(0)))) active(p(s(0))) => mark(0) mark(f(X)) => active(f(mark(X))) mark(0) => active(0) mark(cons(X, Y)) => active(cons(mark(X), Y)) mark(s(X)) => active(s(mark(X))) mark(p(X)) => active(p(mark(X))) f(mark(X)) => f(X) f(active(X)) => f(X) s(mark(X)) => s(X) s(active(X)) => s(X) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_8, R_0, minimal, formative) by (P_8, R_1, minimal, formative). Thus, the original system is terminating if (P_8, R_1, minimal, formative) is finite. We consider the dependency pair problem (P_8, R_1, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(f(s(0))) >? mark#(f(p(s(0)))) mark#(f(X)) >? active#(f(mark(X))) active(f(0)) >= mark(cons(0, f(s(0)))) active(f(s(0))) >= mark(f(p(s(0)))) active(p(s(0))) >= mark(0) mark(f(X)) >= active(f(mark(X))) mark(0) >= active(0) mark(cons(X, Y)) >= active(cons(mark(X), Y)) mark(s(X)) >= active(s(mark(X))) mark(p(X)) >= active(p(mark(X))) f(mark(X)) >= f(X) f(active(X)) >= f(X) s(mark(X)) >= s(X) s(active(X)) >= s(X) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 0 active = \y0.y0 active# = \y0.y0 cons = \y0y1.0 f = \y0.y0 mark = \y0.2y0 mark# = \y0.2y0 p = \y0.0 s = \y0.1 Using this interpretation, the requirements translate to: [[active#(f(s(0)))]] = 1 > 0 = [[mark#(f(p(s(0))))]] [[mark#(f(_x0))]] = 2x0 >= 2x0 = [[active#(f(mark(_x0)))]] [[active(f(0))]] = 0 >= 0 = [[mark(cons(0, f(s(0))))]] [[active(f(s(0)))]] = 1 >= 0 = [[mark(f(p(s(0))))]] [[active(p(s(0)))]] = 0 >= 0 = [[mark(0)]] [[mark(f(_x0))]] = 2x0 >= 2x0 = [[active(f(mark(_x0)))]] [[mark(0)]] = 0 >= 0 = [[active(0)]] [[mark(cons(_x0, _x1))]] = 0 >= 0 = [[active(cons(mark(_x0), _x1))]] [[mark(s(_x0))]] = 2 >= 1 = [[active(s(mark(_x0)))]] [[mark(p(_x0))]] = 0 >= 0 = [[active(p(mark(_x0)))]] [[f(mark(_x0))]] = 2x0 >= x0 = [[f(_x0)]] [[f(active(_x0))]] = x0 >= x0 = [[f(_x0)]] [[s(mark(_x0))]] = 1 >= 1 = [[s(_x0)]] [[s(active(_x0))]] = 1 >= 1 = [[s(_x0)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_8, R_1, minimal, formative) by (P_10, R_1, minimal, formative), where P_10 consists of: mark#(f(X)) =#> active#(f(mark(X))) Thus, the original system is terminating if (P_10, R_1, minimal, formative) is finite. We consider the dependency pair problem (P_10, R_1, 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 : This graph has no strongly connected components. By [Kop12, Thm. 7.31], this implies finiteness of the dependency pair problem. 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.