/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. !870 : [o * o] --> o !dot : [o * o] --> o and : [o * o] --> o del : [o] --> o f : [o * o * o * o] --> o false : [] --> o nil : [] --> o true : [] --> o u : [] --> o v : [] --> o del(!dot(X, !dot(Y, Z))) => f(!870(X, Y), X, Y, Z) f(true, X, Y, Z) => del(!dot(Y, Z)) f(false, X, Y, Z) => !dot(X, del(!dot(Y, Z))) !870(nil, nil) => true !870(!dot(X, Y), nil) => false !870(nil, !dot(X, Y)) => false !870(!dot(X, Y), !dot(u, v)) => and(!870(X, u), !870(Y, v)) As the system is orthogonal, it is terminating if it is innermost terminating by [Gra95]. Then, by [FuhGieParSchSwi11], it suffices to prove (innermost) termination of the typed system, with sort annotations chosen to respect the rules, as follows: !870 : [bc * bc] --> kc !dot : [bc * bc] --> bc and : [kc * kc] --> kc del : [bc] --> bc f : [kc * bc * bc * bc] --> bc false : [] --> kc nil : [] --> bc true : [] --> kc u : [] --> bc v : [] --> bc 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] del#(!dot(X, !dot(Y, Z))) =#> f#(!870(X, Y), X, Y, Z) 1] del#(!dot(X, !dot(Y, Z))) =#> !870#(X, Y) 2] f#(true, X, Y, Z) =#> del#(!dot(Y, Z)) 3] f#(false, X, Y, Z) =#> del#(!dot(Y, Z)) 4] !870#(!dot(X, Y), !dot(u, v)) =#> !870#(X, u) 5] !870#(!dot(X, Y), !dot(u, v)) =#> !870#(Y, v) Rules R_0: del(!dot(X, !dot(Y, Z))) => f(!870(X, Y), X, Y, Z) f(true, X, Y, Z) => del(!dot(Y, Z)) f(false, X, Y, Z) => !dot(X, del(!dot(Y, Z))) !870(nil, nil) => true !870(!dot(X, Y), nil) => false !870(nil, !dot(X, Y)) => false !870(!dot(X, Y), !dot(u, v)) => and(!870(X, u), !870(Y, v)) 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 : 2, 3 * 1 : 4, 5 * 2 : 0, 1 * 3 : 0, 1 * 4 : * 5 : This graph has the following strongly connected components: P_1: del#(!dot(X, !dot(Y, Z))) =#> f#(!870(X, Y), X, Y, Z) f#(true, X, Y, Z) =#> del#(!dot(Y, Z)) f#(false, X, Y, Z) =#> del#(!dot(Y, Z)) 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). 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). The formative rules of (P_1, R_0) are R_1 ::= del(!dot(X, !dot(Y, Z))) => f(!870(X, Y), X, Y, Z) f(true, X, Y, Z) => del(!dot(Y, Z)) f(false, X, Y, Z) => !dot(X, del(!dot(Y, Z))) !870(nil, nil) => true !870(!dot(X, Y), nil) => false !870(nil, !dot(X, Y)) => false By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_1, R_0, minimal, formative) by (P_1, R_1, minimal, formative). Thus, the original system is terminating if (P_1, R_1, minimal, formative) is finite. We consider the dependency pair problem (P_1, R_1, minimal, formative). We will use the reduction pair processor with usable rules [Kop12, Thm. 7.44]. The usable rules of (P_1, R_1) are: !870(nil, nil) => true !870(!dot(X, Y), nil) => false !870(nil, !dot(X, Y)) => false It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: del#(!dot(X, !dot(Y, Z))) >? f#(!870(X, Y), X, Y, Z) f#(true, X, Y, Z) >? del#(!dot(Y, Z)) f#(false, X, Y, Z) >? del#(!dot(Y, Z)) !870(nil, nil) >= true !870(!dot(X, Y), nil) >= false !870(nil, !dot(X, Y)) >= false We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: f#(x_1,x_2,x_3,x_4) = f#(x_2x_3,x_4) This leaves the following ordering requirements: del#(!dot(X, !dot(Y, Z))) >= f#(!870(X, Y), X, Y, Z) f#(true, X, Y, Z) > del#(!dot(Y, Z)) f#(false, X, Y, Z) >= del#(!dot(Y, Z)) The following interpretation satisfies the requirements: !870 = \y0y1.0 !dot = \y0y1.1 + 3y0 + 3y1 del# = \y0.y0 f# = \y0y1y2y3.2 + 3y2 + 3y3 false = 0 nil = 3 true = 0 Using this interpretation, the requirements translate to: [[del#(!dot(_x0, !dot(_x1, _x2)))]] = 4 + 3x0 + 9x1 + 9x2 > 2 + 3x1 + 3x2 = [[f#(!870(_x0, _x1), _x0, _x1, _x2)]] [[f#(true, _x0, _x1, _x2)]] = 2 + 3x1 + 3x2 > 1 + 3x1 + 3x2 = [[del#(!dot(_x1, _x2))]] [[f#(false, _x0, _x1, _x2)]] = 2 + 3x1 + 3x2 > 1 + 3x1 + 3x2 = [[del#(!dot(_x1, _x2))]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace a dependency pair problem (P_1, R_1) by ({}, R_1). 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 +++ [FuhGieParSchSwi11] C. Fuhs, J. Giesl, M. Parting, P. Schneider-Kamp, and S. Swiderski. Proving Termination by Dependency Pairs and Inductive Theorem Proving. In volume 47(2) of Journal of Automated Reasoning. 133--160, 2011. [Gra95] B. Gramlich. Abstract Relations Between Restricted Termination and Confluence Properties of Rewrite Systems. In volume 24(1-2) of Fundamentae Informaticae. 3--23, 1995. [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.