YES proof of Transformed_CSR_04_Ex26_Luc03b_Z.trs # AProVE Commit ID: c69e44bd14796315568835c1ffa2502984884775 jera 20211004 unpublished Termination w.r.t. Q of the given QTRS could be proven: (0) QTRS (1) DependencyPairsProof [EQUIVALENT, 1 ms] (2) QDP (3) DependencyGraphProof [EQUIVALENT, 0 ms] (4) QDP (5) QDPOrderProof [EQUIVALENT, 59 ms] (6) QDP (7) QDPOrderProof [EQUIVALENT, 31 ms] (8) QDP (9) DependencyGraphProof [EQUIVALENT, 0 ms] (10) AND (11) QDP (12) UsableRulesProof [EQUIVALENT, 0 ms] (13) QDP (14) QDPSizeChangeProof [EQUIVALENT, 0 ms] (15) YES (16) QDP (17) QDPOrderProof [EQUIVALENT, 14 ms] (18) QDP (19) PisEmptyProof [EQUIVALENT, 0 ms] (20) YES ---------------------------------------- (0) Obligation: Q restricted rewrite system: The TRS R consists of the following rules: terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) sqr(0) -> 0 sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) dbl(0) -> 0 dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) add(0, X) -> X add(s(X), Y) -> s(n__add(activate(X), Y)) first(0, X) -> nil first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) terms(X) -> n__terms(X) add(X1, X2) -> n__add(X1, X2) s(X) -> n__s(X) dbl(X) -> n__dbl(X) first(X1, X2) -> n__first(X1, X2) activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X Q is empty. ---------------------------------------- (1) DependencyPairsProof (EQUIVALENT) Using Dependency Pairs [AG00,LPAR04] we result in the following initial DP problem. ---------------------------------------- (2) Obligation: Q DP problem: The TRS P consists of the following rules: TERMS(N) -> SQR(N) TERMS(N) -> S(N) SQR(s(X)) -> S(n__add(sqr(activate(X)), dbl(activate(X)))) SQR(s(X)) -> SQR(activate(X)) SQR(s(X)) -> ACTIVATE(X) SQR(s(X)) -> DBL(activate(X)) DBL(s(X)) -> S(n__s(n__dbl(activate(X)))) DBL(s(X)) -> ACTIVATE(X) ADD(s(X), Y) -> S(n__add(activate(X), Y)) ADD(s(X), Y) -> ACTIVATE(X) FIRST(s(X), cons(Y, Z)) -> ACTIVATE(X) FIRST(s(X), cons(Y, Z)) -> ACTIVATE(Z) ACTIVATE(n__terms(X)) -> TERMS(X) ACTIVATE(n__add(X1, X2)) -> ADD(X1, X2) ACTIVATE(n__s(X)) -> S(X) ACTIVATE(n__dbl(X)) -> DBL(X) ACTIVATE(n__first(X1, X2)) -> FIRST(X1, X2) The TRS R consists of the following rules: terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) sqr(0) -> 0 sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) dbl(0) -> 0 dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) add(0, X) -> X add(s(X), Y) -> s(n__add(activate(X), Y)) first(0, X) -> nil first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) terms(X) -> n__terms(X) add(X1, X2) -> n__add(X1, X2) s(X) -> n__s(X) dbl(X) -> n__dbl(X) first(X1, X2) -> n__first(X1, X2) activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (3) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 5 less nodes. ---------------------------------------- (4) Obligation: Q DP problem: The TRS P consists of the following rules: SQR(s(X)) -> SQR(activate(X)) SQR(s(X)) -> ACTIVATE(X) ACTIVATE(n__terms(X)) -> TERMS(X) TERMS(N) -> SQR(N) SQR(s(X)) -> DBL(activate(X)) DBL(s(X)) -> ACTIVATE(X) ACTIVATE(n__add(X1, X2)) -> ADD(X1, X2) ADD(s(X), Y) -> ACTIVATE(X) ACTIVATE(n__dbl(X)) -> DBL(X) ACTIVATE(n__first(X1, X2)) -> FIRST(X1, X2) FIRST(s(X), cons(Y, Z)) -> ACTIVATE(X) FIRST(s(X), cons(Y, Z)) -> ACTIVATE(Z) The TRS R consists of the following rules: terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) sqr(0) -> 0 sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) dbl(0) -> 0 dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) add(0, X) -> X add(s(X), Y) -> s(n__add(activate(X), Y)) first(0, X) -> nil first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) terms(X) -> n__terms(X) add(X1, X2) -> n__add(X1, X2) s(X) -> n__s(X) dbl(X) -> n__dbl(X) first(X1, X2) -> n__first(X1, X2) activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (5) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. ACTIVATE(n__dbl(X)) -> DBL(X) The remaining pairs can at least be oriented weakly. Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: <<< POL(SQR(x_1)) = [[4A]] + [[3A]] * x_1 >>> <<< POL(s(x_1)) = [[-I]] + [[0A]] * x_1 >>> <<< POL(activate(x_1)) = [[0A]] + [[0A]] * x_1 >>> <<< POL(ACTIVATE(x_1)) = [[4A]] + [[1A]] * x_1 >>> <<< POL(n__terms(x_1)) = [[-I]] + [[5A]] * x_1 >>> <<< POL(TERMS(x_1)) = [[4A]] + [[5A]] * x_1 >>> <<< POL(DBL(x_1)) = [[4A]] + [[3A]] * x_1 >>> <<< POL(n__add(x_1, x_2)) = [[4A]] + [[0A]] * x_1 + [[0A]] * x_2 >>> <<< POL(ADD(x_1, x_2)) = [[5A]] + [[1A]] * x_1 + [[1A]] * x_2 >>> <<< POL(n__dbl(x_1)) = [[5A]] + [[5A]] * x_1 >>> <<< POL(n__first(x_1, x_2)) = [[2A]] + [[2A]] * x_1 + [[2A]] * x_2 >>> <<< POL(FIRST(x_1, x_2)) = [[4A]] + [[3A]] * x_1 + [[1A]] * x_2 >>> <<< POL(cons(x_1, x_2)) = [[-I]] + [[-I]] * x_1 + [[0A]] * x_2 >>> <<< POL(terms(x_1)) = [[-I]] + [[5A]] * x_1 >>> <<< POL(add(x_1, x_2)) = [[4A]] + [[0A]] * x_1 + [[0A]] * x_2 >>> <<< POL(n__s(x_1)) = [[-I]] + [[0A]] * x_1 >>> <<< POL(dbl(x_1)) = [[5A]] + [[5A]] * x_1 >>> <<< POL(first(x_1, x_2)) = [[2A]] + [[2A]] * x_1 + [[2A]] * x_2 >>> <<< POL(sqr(x_1)) = [[5A]] + [[5A]] * x_1 >>> <<< POL(0) = [[5A]] >>> <<< POL(recip(x_1)) = [[1A]] + [[0A]] * x_1 >>> <<< POL(nil) = [[4A]] >>> The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) sqr(0) -> 0 dbl(0) -> 0 dbl(X) -> n__dbl(X) s(X) -> n__s(X) terms(X) -> n__terms(X) terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) add(0, X) -> X add(X1, X2) -> n__add(X1, X2) add(s(X), Y) -> s(n__add(activate(X), Y)) dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) first(0, X) -> nil first(X1, X2) -> n__first(X1, X2) first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) ---------------------------------------- (6) Obligation: Q DP problem: The TRS P consists of the following rules: SQR(s(X)) -> SQR(activate(X)) SQR(s(X)) -> ACTIVATE(X) ACTIVATE(n__terms(X)) -> TERMS(X) TERMS(N) -> SQR(N) SQR(s(X)) -> DBL(activate(X)) DBL(s(X)) -> ACTIVATE(X) ACTIVATE(n__add(X1, X2)) -> ADD(X1, X2) ADD(s(X), Y) -> ACTIVATE(X) ACTIVATE(n__first(X1, X2)) -> FIRST(X1, X2) FIRST(s(X), cons(Y, Z)) -> ACTIVATE(X) FIRST(s(X), cons(Y, Z)) -> ACTIVATE(Z) The TRS R consists of the following rules: terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) sqr(0) -> 0 sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) dbl(0) -> 0 dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) add(0, X) -> X add(s(X), Y) -> s(n__add(activate(X), Y)) first(0, X) -> nil first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) terms(X) -> n__terms(X) add(X1, X2) -> n__add(X1, X2) s(X) -> n__s(X) dbl(X) -> n__dbl(X) first(X1, X2) -> n__first(X1, X2) activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (7) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. ACTIVATE(n__terms(X)) -> TERMS(X) ACTIVATE(n__first(X1, X2)) -> FIRST(X1, X2) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( DBL_1(x_1) ) = x_1 + 2 POL( SQR_1(x_1) ) = 2x_1 + 2 POL( activate_1(x_1) ) = x_1 POL( n__terms_1(x_1) ) = 2x_1 + 2 POL( terms_1(x_1) ) = 2x_1 + 2 POL( n__add_2(x_1, x_2) ) = x_1 + x_2 POL( add_2(x_1, x_2) ) = x_1 + x_2 POL( n__s_1(x_1) ) = x_1 POL( s_1(x_1) ) = x_1 POL( n__dbl_1(x_1) ) = max{0, -2} POL( dbl_1(x_1) ) = 0 POL( n__first_2(x_1, x_2) ) = x_1 + 2x_2 + 2 POL( first_2(x_1, x_2) ) = x_1 + 2x_2 + 2 POL( sqr_1(x_1) ) = 2x_1 + 1 POL( cons_2(x_1, x_2) ) = x_1 + x_2 POL( recip_1(x_1) ) = max{0, -2} POL( 0 ) = 0 POL( nil ) = 2 POL( ACTIVATE_1(x_1) ) = x_1 + 2 POL( TERMS_1(x_1) ) = 2x_1 + 2 POL( ADD_2(x_1, x_2) ) = x_1 + 2 POL( FIRST_2(x_1, x_2) ) = x_1 + 2x_2 + 2 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) sqr(0) -> 0 dbl(0) -> 0 dbl(X) -> n__dbl(X) s(X) -> n__s(X) terms(X) -> n__terms(X) terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) add(0, X) -> X add(X1, X2) -> n__add(X1, X2) add(s(X), Y) -> s(n__add(activate(X), Y)) dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) first(0, X) -> nil first(X1, X2) -> n__first(X1, X2) first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) ---------------------------------------- (8) Obligation: Q DP problem: The TRS P consists of the following rules: SQR(s(X)) -> SQR(activate(X)) SQR(s(X)) -> ACTIVATE(X) TERMS(N) -> SQR(N) SQR(s(X)) -> DBL(activate(X)) DBL(s(X)) -> ACTIVATE(X) ACTIVATE(n__add(X1, X2)) -> ADD(X1, X2) ADD(s(X), Y) -> ACTIVATE(X) FIRST(s(X), cons(Y, Z)) -> ACTIVATE(X) FIRST(s(X), cons(Y, Z)) -> ACTIVATE(Z) The TRS R consists of the following rules: terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) sqr(0) -> 0 sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) dbl(0) -> 0 dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) add(0, X) -> X add(s(X), Y) -> s(n__add(activate(X), Y)) first(0, X) -> nil first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) terms(X) -> n__terms(X) add(X1, X2) -> n__add(X1, X2) s(X) -> n__s(X) dbl(X) -> n__dbl(X) first(X1, X2) -> n__first(X1, X2) activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (9) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 2 SCCs with 6 less nodes. ---------------------------------------- (10) Complex Obligation (AND) ---------------------------------------- (11) Obligation: Q DP problem: The TRS P consists of the following rules: ADD(s(X), Y) -> ACTIVATE(X) ACTIVATE(n__add(X1, X2)) -> ADD(X1, X2) The TRS R consists of the following rules: terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) sqr(0) -> 0 sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) dbl(0) -> 0 dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) add(0, X) -> X add(s(X), Y) -> s(n__add(activate(X), Y)) first(0, X) -> nil first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) terms(X) -> n__terms(X) add(X1, X2) -> n__add(X1, X2) s(X) -> n__s(X) dbl(X) -> n__dbl(X) first(X1, X2) -> n__first(X1, X2) activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (12) UsableRulesProof (EQUIVALENT) We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R. ---------------------------------------- (13) Obligation: Q DP problem: The TRS P consists of the following rules: ADD(s(X), Y) -> ACTIVATE(X) ACTIVATE(n__add(X1, X2)) -> ADD(X1, X2) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (14) QDPSizeChangeProof (EQUIVALENT) By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs: *ACTIVATE(n__add(X1, X2)) -> ADD(X1, X2) The graph contains the following edges 1 > 1, 1 > 2 *ADD(s(X), Y) -> ACTIVATE(X) The graph contains the following edges 1 > 1 ---------------------------------------- (15) YES ---------------------------------------- (16) Obligation: Q DP problem: The TRS P consists of the following rules: SQR(s(X)) -> SQR(activate(X)) The TRS R consists of the following rules: terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) sqr(0) -> 0 sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) dbl(0) -> 0 dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) add(0, X) -> X add(s(X), Y) -> s(n__add(activate(X), Y)) first(0, X) -> nil first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) terms(X) -> n__terms(X) add(X1, X2) -> n__add(X1, X2) s(X) -> n__s(X) dbl(X) -> n__dbl(X) first(X1, X2) -> n__first(X1, X2) activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (17) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. SQR(s(X)) -> SQR(activate(X)) The remaining pairs can at least be oriented weakly. Used ordering: Combined order from the following AFS and order. SQR(x1) = SQR(x1) s(x1) = s(x1) activate(x1) = x1 n__terms(x1) = n__terms terms(x1) = terms n__add(x1, x2) = n__add(x1, x2) add(x1, x2) = add(x1, x2) n__s(x1) = n__s(x1) n__dbl(x1) = n__dbl(x1) dbl(x1) = dbl(x1) n__first(x1, x2) = n__first(x1) first(x1, x2) = first(x1) sqr(x1) = sqr(x1) 0 = 0 cons(x1, x2) = x2 recip(x1) = recip nil = nil Recursive path order with status [RPO]. Quasi-Precedence: SQR_1 > [s_1, n__s_1, recip] [n__terms, terms] > [s_1, n__s_1, recip] [n__dbl_1, dbl_1, sqr_1] > [n__add_2, add_2] > [s_1, n__s_1, recip] [n__dbl_1, dbl_1, sqr_1] > 0 > nil > [s_1, n__s_1, recip] [n__first_1, first_1] > [s_1, n__s_1, recip] Status: SQR_1: [1] s_1: multiset status n__terms: [] terms: [] n__add_2: multiset status add_2: multiset status n__s_1: multiset status n__dbl_1: [1] dbl_1: [1] n__first_1: [1] first_1: [1] sqr_1: [1] 0: multiset status recip: multiset status nil: multiset status The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) sqr(0) -> 0 dbl(0) -> 0 dbl(X) -> n__dbl(X) s(X) -> n__s(X) terms(X) -> n__terms(X) terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) add(0, X) -> X add(X1, X2) -> n__add(X1, X2) add(s(X), Y) -> s(n__add(activate(X), Y)) dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) first(0, X) -> nil first(X1, X2) -> n__first(X1, X2) first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) ---------------------------------------- (18) Obligation: Q DP problem: P is empty. The TRS R consists of the following rules: terms(N) -> cons(recip(sqr(N)), n__terms(s(N))) sqr(0) -> 0 sqr(s(X)) -> s(n__add(sqr(activate(X)), dbl(activate(X)))) dbl(0) -> 0 dbl(s(X)) -> s(n__s(n__dbl(activate(X)))) add(0, X) -> X add(s(X), Y) -> s(n__add(activate(X), Y)) first(0, X) -> nil first(s(X), cons(Y, Z)) -> cons(Y, n__first(activate(X), activate(Z))) terms(X) -> n__terms(X) add(X1, X2) -> n__add(X1, X2) s(X) -> n__s(X) dbl(X) -> n__dbl(X) first(X1, X2) -> n__first(X1, X2) activate(n__terms(X)) -> terms(X) activate(n__add(X1, X2)) -> add(X1, X2) activate(n__s(X)) -> s(X) activate(n__dbl(X)) -> dbl(X) activate(n__first(X1, X2)) -> first(X1, X2) activate(X) -> X Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (19) PisEmptyProof (EQUIVALENT) The TRS P is empty. Hence, there is no (P,Q,R) chain. ---------------------------------------- (20) YES