YES proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty Termination w.r.t. Q of the given QTRS could be proven: (0) QTRS (1) DependencyPairsProof [EQUIVALENT, 0 ms] (2) QDP (3) DependencyGraphProof [EQUIVALENT, 1 ms] (4) QDP (5) QDPOrderProof [EQUIVALENT, 56 ms] (6) QDP (7) DependencyGraphProof [EQUIVALENT, 0 ms] (8) QDP (9) UsableRulesProof [EQUIVALENT, 0 ms] (10) QDP (11) QDPSizeChangeProof [EQUIVALENT, 0 ms] (12) YES ---------------------------------------- (0) Obligation: Q restricted rewrite system: The TRS R consists of the following rules: filter(cons(X, Y), 0, M) -> cons(0, n__filter(activate(Y), M, M)) filter(cons(X, Y), s(N), M) -> cons(X, n__filter(activate(Y), N, M)) sieve(cons(0, Y)) -> cons(0, n__sieve(activate(Y))) sieve(cons(s(N), Y)) -> cons(s(N), n__sieve(filter(activate(Y), N, N))) nats(N) -> cons(N, n__nats(s(N))) zprimes -> sieve(nats(s(s(0)))) filter(X1, X2, X3) -> n__filter(X1, X2, X3) sieve(X) -> n__sieve(X) nats(X) -> n__nats(X) activate(n__filter(X1, X2, X3)) -> filter(X1, X2, X3) activate(n__sieve(X)) -> sieve(X) activate(n__nats(X)) -> nats(X) 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: FILTER(cons(X, Y), 0, M) -> ACTIVATE(Y) FILTER(cons(X, Y), s(N), M) -> ACTIVATE(Y) SIEVE(cons(0, Y)) -> ACTIVATE(Y) SIEVE(cons(s(N), Y)) -> FILTER(activate(Y), N, N) SIEVE(cons(s(N), Y)) -> ACTIVATE(Y) ZPRIMES -> SIEVE(nats(s(s(0)))) ZPRIMES -> NATS(s(s(0))) ACTIVATE(n__filter(X1, X2, X3)) -> FILTER(X1, X2, X3) ACTIVATE(n__sieve(X)) -> SIEVE(X) ACTIVATE(n__nats(X)) -> NATS(X) The TRS R consists of the following rules: filter(cons(X, Y), 0, M) -> cons(0, n__filter(activate(Y), M, M)) filter(cons(X, Y), s(N), M) -> cons(X, n__filter(activate(Y), N, M)) sieve(cons(0, Y)) -> cons(0, n__sieve(activate(Y))) sieve(cons(s(N), Y)) -> cons(s(N), n__sieve(filter(activate(Y), N, N))) nats(N) -> cons(N, n__nats(s(N))) zprimes -> sieve(nats(s(s(0)))) filter(X1, X2, X3) -> n__filter(X1, X2, X3) sieve(X) -> n__sieve(X) nats(X) -> n__nats(X) activate(n__filter(X1, X2, X3)) -> filter(X1, X2, X3) activate(n__sieve(X)) -> sieve(X) activate(n__nats(X)) -> nats(X) 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 3 less nodes. ---------------------------------------- (4) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVATE(n__filter(X1, X2, X3)) -> FILTER(X1, X2, X3) FILTER(cons(X, Y), 0, M) -> ACTIVATE(Y) ACTIVATE(n__sieve(X)) -> SIEVE(X) SIEVE(cons(0, Y)) -> ACTIVATE(Y) SIEVE(cons(s(N), Y)) -> FILTER(activate(Y), N, N) FILTER(cons(X, Y), s(N), M) -> ACTIVATE(Y) SIEVE(cons(s(N), Y)) -> ACTIVATE(Y) The TRS R consists of the following rules: filter(cons(X, Y), 0, M) -> cons(0, n__filter(activate(Y), M, M)) filter(cons(X, Y), s(N), M) -> cons(X, n__filter(activate(Y), N, M)) sieve(cons(0, Y)) -> cons(0, n__sieve(activate(Y))) sieve(cons(s(N), Y)) -> cons(s(N), n__sieve(filter(activate(Y), N, N))) nats(N) -> cons(N, n__nats(s(N))) zprimes -> sieve(nats(s(s(0)))) filter(X1, X2, X3) -> n__filter(X1, X2, X3) sieve(X) -> n__sieve(X) nats(X) -> n__nats(X) activate(n__filter(X1, X2, X3)) -> filter(X1, X2, X3) activate(n__sieve(X)) -> sieve(X) activate(n__nats(X)) -> nats(X) 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. SIEVE(cons(0, Y)) -> ACTIVATE(Y) SIEVE(cons(s(N), Y)) -> FILTER(activate(Y), N, N) SIEVE(cons(s(N), Y)) -> ACTIVATE(Y) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( FILTER_3(x_1, ..., x_3) ) = x_1 POL( activate_1(x_1) ) = x_1 + 2 POL( n__filter_3(x_1, ..., x_3) ) = max{0, x_1 - 2} POL( filter_3(x_1, ..., x_3) ) = x_1 POL( n__sieve_1(x_1) ) = max{0, 2x_1 - 2} POL( sieve_1(x_1) ) = 2x_1 POL( n__nats_1(x_1) ) = max{0, -2} POL( nats_1(x_1) ) = 2 POL( cons_2(x_1, x_2) ) = x_2 + 2 POL( 0 ) = 0 POL( s_1(x_1) ) = 0 POL( ACTIVATE_1(x_1) ) = x_1 + 2 POL( SIEVE_1(x_1) ) = 2x_1 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: activate(n__filter(X1, X2, X3)) -> filter(X1, X2, X3) activate(n__sieve(X)) -> sieve(X) activate(n__nats(X)) -> nats(X) activate(X) -> X filter(X1, X2, X3) -> n__filter(X1, X2, X3) filter(cons(X, Y), 0, M) -> cons(0, n__filter(activate(Y), M, M)) sieve(X) -> n__sieve(X) sieve(cons(0, Y)) -> cons(0, n__sieve(activate(Y))) sieve(cons(s(N), Y)) -> cons(s(N), n__sieve(filter(activate(Y), N, N))) filter(cons(X, Y), s(N), M) -> cons(X, n__filter(activate(Y), N, M)) nats(N) -> cons(N, n__nats(s(N))) nats(X) -> n__nats(X) ---------------------------------------- (6) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVATE(n__filter(X1, X2, X3)) -> FILTER(X1, X2, X3) FILTER(cons(X, Y), 0, M) -> ACTIVATE(Y) ACTIVATE(n__sieve(X)) -> SIEVE(X) FILTER(cons(X, Y), s(N), M) -> ACTIVATE(Y) The TRS R consists of the following rules: filter(cons(X, Y), 0, M) -> cons(0, n__filter(activate(Y), M, M)) filter(cons(X, Y), s(N), M) -> cons(X, n__filter(activate(Y), N, M)) sieve(cons(0, Y)) -> cons(0, n__sieve(activate(Y))) sieve(cons(s(N), Y)) -> cons(s(N), n__sieve(filter(activate(Y), N, N))) nats(N) -> cons(N, n__nats(s(N))) zprimes -> sieve(nats(s(s(0)))) filter(X1, X2, X3) -> n__filter(X1, X2, X3) sieve(X) -> n__sieve(X) nats(X) -> n__nats(X) activate(n__filter(X1, X2, X3)) -> filter(X1, X2, X3) activate(n__sieve(X)) -> sieve(X) activate(n__nats(X)) -> nats(X) activate(X) -> X Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (7) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. ---------------------------------------- (8) Obligation: Q DP problem: The TRS P consists of the following rules: FILTER(cons(X, Y), 0, M) -> ACTIVATE(Y) ACTIVATE(n__filter(X1, X2, X3)) -> FILTER(X1, X2, X3) FILTER(cons(X, Y), s(N), M) -> ACTIVATE(Y) The TRS R consists of the following rules: filter(cons(X, Y), 0, M) -> cons(0, n__filter(activate(Y), M, M)) filter(cons(X, Y), s(N), M) -> cons(X, n__filter(activate(Y), N, M)) sieve(cons(0, Y)) -> cons(0, n__sieve(activate(Y))) sieve(cons(s(N), Y)) -> cons(s(N), n__sieve(filter(activate(Y), N, N))) nats(N) -> cons(N, n__nats(s(N))) zprimes -> sieve(nats(s(s(0)))) filter(X1, X2, X3) -> n__filter(X1, X2, X3) sieve(X) -> n__sieve(X) nats(X) -> n__nats(X) activate(n__filter(X1, X2, X3)) -> filter(X1, X2, X3) activate(n__sieve(X)) -> sieve(X) activate(n__nats(X)) -> nats(X) activate(X) -> X Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (9) 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. ---------------------------------------- (10) Obligation: Q DP problem: The TRS P consists of the following rules: FILTER(cons(X, Y), 0, M) -> ACTIVATE(Y) ACTIVATE(n__filter(X1, X2, X3)) -> FILTER(X1, X2, X3) FILTER(cons(X, Y), s(N), M) -> ACTIVATE(Y) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (11) 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__filter(X1, X2, X3)) -> FILTER(X1, X2, X3) The graph contains the following edges 1 > 1, 1 > 2, 1 > 3 *FILTER(cons(X, Y), 0, M) -> ACTIVATE(Y) The graph contains the following edges 1 > 1 *FILTER(cons(X, Y), s(N), M) -> ACTIVATE(Y) The graph contains the following edges 1 > 1 ---------------------------------------- (12) YES