Term Rewriting System R:
[X, Y, X1, X2, X3, Z]
aprimes -> asieve(afrom(s(s(0))))
aprimes -> primes
afrom(X) -> cons(mark(X), from(s(X)))
afrom(X) -> from(X)
ahead(cons(X, Y)) -> mark(X)
ahead(X) -> head(X)
atail(cons(X, Y)) -> mark(Y)
atail(X) -> tail(X)
aif(true, X, Y) -> mark(X)
aif(false, X, Y) -> mark(Y)
aif(X1, X2, X3) -> if(X1, X2, X3)
afilter(s(s(X)), cons(Y, Z)) -> aif(divides(s(s(mark(X))), mark(Y)), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))
afilter(X1, X2) -> filter(X1, X2)
asieve(cons(X, Y)) -> cons(mark(X), filter(X, sieve(Y)))
asieve(X) -> sieve(X)
mark(primes) -> aprimes
mark(sieve(X)) -> asieve(mark(X))
mark(from(X)) -> afrom(mark(X))
mark(head(X)) -> ahead(mark(X))
mark(tail(X)) -> atail(mark(X))
mark(if(X1, X2, X3)) -> aif(mark(X1), X2, X3)
mark(filter(X1, X2)) -> afilter(mark(X1), mark(X2))
mark(s(X)) -> s(mark(X))
mark(0) -> 0
mark(cons(X1, X2)) -> cons(mark(X1), X2)
mark(true) -> true
mark(false) -> false
mark(divides(X1, X2)) -> divides(mark(X1), mark(X2))

Termination of R to be shown.



   R
Dependency Pair Analysis



R contains the following Dependency Pairs:

APRIMES -> ASIEVE(afrom(s(s(0))))
APRIMES -> AFROM(s(s(0)))
AFROM(X) -> MARK(X)
AHEAD(cons(X, Y)) -> MARK(X)
ATAIL(cons(X, Y)) -> MARK(Y)
AIF(true, X, Y) -> MARK(X)
AIF(false, X, Y) -> MARK(Y)
AFILTER(s(s(X)), cons(Y, Z)) -> AIF(divides(s(s(mark(X))), mark(Y)), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(X)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(Y)
ASIEVE(cons(X, Y)) -> MARK(X)
MARK(primes) -> APRIMES
MARK(sieve(X)) -> ASIEVE(mark(X))
MARK(sieve(X)) -> MARK(X)
MARK(from(X)) -> AFROM(mark(X))
MARK(from(X)) -> MARK(X)
MARK(head(X)) -> AHEAD(mark(X))
MARK(head(X)) -> MARK(X)
MARK(tail(X)) -> ATAIL(mark(X))
MARK(tail(X)) -> MARK(X)
MARK(if(X1, X2, X3)) -> AIF(mark(X1), X2, X3)
MARK(if(X1, X2, X3)) -> MARK(X1)
MARK(filter(X1, X2)) -> AFILTER(mark(X1), mark(X2))
MARK(filter(X1, X2)) -> MARK(X1)
MARK(filter(X1, X2)) -> MARK(X2)
MARK(s(X)) -> MARK(X)
MARK(cons(X1, X2)) -> MARK(X1)
MARK(divides(X1, X2)) -> MARK(X1)
MARK(divides(X1, X2)) -> MARK(X2)

Furthermore, R contains one SCC.


   R
DPs
       →DP Problem 1
Narrowing Transformation


Dependency Pairs:

AIF(false, X, Y) -> MARK(Y)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(Y)
MARK(divides(X1, X2)) -> MARK(X2)
MARK(divides(X1, X2)) -> MARK(X1)
MARK(cons(X1, X2)) -> MARK(X1)
MARK(s(X)) -> MARK(X)
MARK(filter(X1, X2)) -> MARK(X2)
MARK(filter(X1, X2)) -> MARK(X1)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(X)
MARK(filter(X1, X2)) -> AFILTER(mark(X1), mark(X2))
MARK(if(X1, X2, X3)) -> MARK(X1)
AIF(true, X, Y) -> MARK(X)
MARK(if(X1, X2, X3)) -> AIF(mark(X1), X2, X3)
MARK(tail(X)) -> MARK(X)
ATAIL(cons(X, Y)) -> MARK(Y)
MARK(tail(X)) -> ATAIL(mark(X))
MARK(head(X)) -> MARK(X)
AHEAD(cons(X, Y)) -> MARK(X)
MARK(head(X)) -> AHEAD(mark(X))
MARK(from(X)) -> MARK(X)
MARK(from(X)) -> AFROM(mark(X))
MARK(sieve(X)) -> MARK(X)
MARK(sieve(X)) -> ASIEVE(mark(X))
AFROM(X) -> MARK(X)
APRIMES -> AFROM(s(s(0)))
MARK(primes) -> APRIMES
ASIEVE(cons(X, Y)) -> MARK(X)
APRIMES -> ASIEVE(afrom(s(s(0))))


Rules:


aprimes -> asieve(afrom(s(s(0))))
aprimes -> primes
afrom(X) -> cons(mark(X), from(s(X)))
afrom(X) -> from(X)
ahead(cons(X, Y)) -> mark(X)
ahead(X) -> head(X)
atail(cons(X, Y)) -> mark(Y)
atail(X) -> tail(X)
aif(true, X, Y) -> mark(X)
aif(false, X, Y) -> mark(Y)
aif(X1, X2, X3) -> if(X1, X2, X3)
afilter(s(s(X)), cons(Y, Z)) -> aif(divides(s(s(mark(X))), mark(Y)), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))
afilter(X1, X2) -> filter(X1, X2)
asieve(cons(X, Y)) -> cons(mark(X), filter(X, sieve(Y)))
asieve(X) -> sieve(X)
mark(primes) -> aprimes
mark(sieve(X)) -> asieve(mark(X))
mark(from(X)) -> afrom(mark(X))
mark(head(X)) -> ahead(mark(X))
mark(tail(X)) -> atail(mark(X))
mark(if(X1, X2, X3)) -> aif(mark(X1), X2, X3)
mark(filter(X1, X2)) -> afilter(mark(X1), mark(X2))
mark(s(X)) -> s(mark(X))
mark(0) -> 0
mark(cons(X1, X2)) -> cons(mark(X1), X2)
mark(true) -> true
mark(false) -> false
mark(divides(X1, X2)) -> divides(mark(X1), mark(X2))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APRIMES -> ASIEVE(afrom(s(s(0))))
two new Dependency Pairs are created:

APRIMES -> ASIEVE(cons(mark(s(s(0))), from(s(s(s(0))))))
APRIMES -> ASIEVE(from(s(s(0))))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Narrowing Transformation


Dependency Pairs:

APRIMES -> ASIEVE(cons(mark(s(s(0))), from(s(s(s(0))))))
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(Y)
MARK(divides(X1, X2)) -> MARK(X2)
MARK(divides(X1, X2)) -> MARK(X1)
MARK(cons(X1, X2)) -> MARK(X1)
MARK(s(X)) -> MARK(X)
MARK(filter(X1, X2)) -> MARK(X2)
MARK(filter(X1, X2)) -> MARK(X1)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(X)
MARK(filter(X1, X2)) -> AFILTER(mark(X1), mark(X2))
MARK(if(X1, X2, X3)) -> MARK(X1)
AIF(true, X, Y) -> MARK(X)
MARK(if(X1, X2, X3)) -> AIF(mark(X1), X2, X3)
MARK(tail(X)) -> MARK(X)
ATAIL(cons(X, Y)) -> MARK(Y)
MARK(tail(X)) -> ATAIL(mark(X))
MARK(head(X)) -> MARK(X)
AHEAD(cons(X, Y)) -> MARK(X)
MARK(head(X)) -> AHEAD(mark(X))
MARK(from(X)) -> MARK(X)
MARK(from(X)) -> AFROM(mark(X))
MARK(sieve(X)) -> MARK(X)
ASIEVE(cons(X, Y)) -> MARK(X)
MARK(sieve(X)) -> ASIEVE(mark(X))
AFROM(X) -> MARK(X)
APRIMES -> AFROM(s(s(0)))
MARK(primes) -> APRIMES
AIF(false, X, Y) -> MARK(Y)


Rules:


aprimes -> asieve(afrom(s(s(0))))
aprimes -> primes
afrom(X) -> cons(mark(X), from(s(X)))
afrom(X) -> from(X)
ahead(cons(X, Y)) -> mark(X)
ahead(X) -> head(X)
atail(cons(X, Y)) -> mark(Y)
atail(X) -> tail(X)
aif(true, X, Y) -> mark(X)
aif(false, X, Y) -> mark(Y)
aif(X1, X2, X3) -> if(X1, X2, X3)
afilter(s(s(X)), cons(Y, Z)) -> aif(divides(s(s(mark(X))), mark(Y)), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))
afilter(X1, X2) -> filter(X1, X2)
asieve(cons(X, Y)) -> cons(mark(X), filter(X, sieve(Y)))
asieve(X) -> sieve(X)
mark(primes) -> aprimes
mark(sieve(X)) -> asieve(mark(X))
mark(from(X)) -> afrom(mark(X))
mark(head(X)) -> ahead(mark(X))
mark(tail(X)) -> atail(mark(X))
mark(if(X1, X2, X3)) -> aif(mark(X1), X2, X3)
mark(filter(X1, X2)) -> afilter(mark(X1), mark(X2))
mark(s(X)) -> s(mark(X))
mark(0) -> 0
mark(cons(X1, X2)) -> cons(mark(X1), X2)
mark(true) -> true
mark(false) -> false
mark(divides(X1, X2)) -> divides(mark(X1), mark(X2))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

MARK(sieve(X)) -> ASIEVE(mark(X))
13 new Dependency Pairs are created:

MARK(sieve(primes)) -> ASIEVE(aprimes)
MARK(sieve(sieve(X''))) -> ASIEVE(asieve(mark(X'')))
MARK(sieve(from(X''))) -> ASIEVE(afrom(mark(X'')))
MARK(sieve(head(X''))) -> ASIEVE(ahead(mark(X'')))
MARK(sieve(tail(X''))) -> ASIEVE(atail(mark(X'')))
MARK(sieve(if(X1', X2', X3'))) -> ASIEVE(aif(mark(X1'), X2', X3'))
MARK(sieve(filter(X1', X2'))) -> ASIEVE(afilter(mark(X1'), mark(X2')))
MARK(sieve(s(X''))) -> ASIEVE(s(mark(X'')))
MARK(sieve(0)) -> ASIEVE(0)
MARK(sieve(cons(X1', X2'))) -> ASIEVE(cons(mark(X1'), X2'))
MARK(sieve(true)) -> ASIEVE(true)
MARK(sieve(false)) -> ASIEVE(false)
MARK(sieve(divides(X1', X2'))) -> ASIEVE(divides(mark(X1'), mark(X2')))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 3
Narrowing Transformation


Dependency Pairs:

AIF(false, X, Y) -> MARK(Y)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(Y)
MARK(sieve(cons(X1', X2'))) -> ASIEVE(cons(mark(X1'), X2'))
MARK(sieve(filter(X1', X2'))) -> ASIEVE(afilter(mark(X1'), mark(X2')))
MARK(sieve(if(X1', X2', X3'))) -> ASIEVE(aif(mark(X1'), X2', X3'))
MARK(sieve(tail(X''))) -> ASIEVE(atail(mark(X'')))
MARK(sieve(head(X''))) -> ASIEVE(ahead(mark(X'')))
MARK(sieve(from(X''))) -> ASIEVE(afrom(mark(X'')))
MARK(sieve(sieve(X''))) -> ASIEVE(asieve(mark(X'')))
MARK(sieve(primes)) -> ASIEVE(aprimes)
MARK(divides(X1, X2)) -> MARK(X2)
MARK(divides(X1, X2)) -> MARK(X1)
MARK(cons(X1, X2)) -> MARK(X1)
MARK(s(X)) -> MARK(X)
MARK(filter(X1, X2)) -> MARK(X2)
MARK(filter(X1, X2)) -> MARK(X1)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(X)
MARK(filter(X1, X2)) -> AFILTER(mark(X1), mark(X2))
MARK(if(X1, X2, X3)) -> MARK(X1)
AIF(true, X, Y) -> MARK(X)
MARK(if(X1, X2, X3)) -> AIF(mark(X1), X2, X3)
MARK(tail(X)) -> MARK(X)
ATAIL(cons(X, Y)) -> MARK(Y)
MARK(tail(X)) -> ATAIL(mark(X))
MARK(head(X)) -> MARK(X)
AHEAD(cons(X, Y)) -> MARK(X)
MARK(head(X)) -> AHEAD(mark(X))
MARK(from(X)) -> MARK(X)
MARK(from(X)) -> AFROM(mark(X))
MARK(sieve(X)) -> MARK(X)
AFROM(X) -> MARK(X)
APRIMES -> AFROM(s(s(0)))
MARK(primes) -> APRIMES
ASIEVE(cons(X, Y)) -> MARK(X)
APRIMES -> ASIEVE(cons(mark(s(s(0))), from(s(s(s(0))))))


Rules:


aprimes -> asieve(afrom(s(s(0))))
aprimes -> primes
afrom(X) -> cons(mark(X), from(s(X)))
afrom(X) -> from(X)
ahead(cons(X, Y)) -> mark(X)
ahead(X) -> head(X)
atail(cons(X, Y)) -> mark(Y)
atail(X) -> tail(X)
aif(true, X, Y) -> mark(X)
aif(false, X, Y) -> mark(Y)
aif(X1, X2, X3) -> if(X1, X2, X3)
afilter(s(s(X)), cons(Y, Z)) -> aif(divides(s(s(mark(X))), mark(Y)), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))
afilter(X1, X2) -> filter(X1, X2)
asieve(cons(X, Y)) -> cons(mark(X), filter(X, sieve(Y)))
asieve(X) -> sieve(X)
mark(primes) -> aprimes
mark(sieve(X)) -> asieve(mark(X))
mark(from(X)) -> afrom(mark(X))
mark(head(X)) -> ahead(mark(X))
mark(tail(X)) -> atail(mark(X))
mark(if(X1, X2, X3)) -> aif(mark(X1), X2, X3)
mark(filter(X1, X2)) -> afilter(mark(X1), mark(X2))
mark(s(X)) -> s(mark(X))
mark(0) -> 0
mark(cons(X1, X2)) -> cons(mark(X1), X2)
mark(true) -> true
mark(false) -> false
mark(divides(X1, X2)) -> divides(mark(X1), mark(X2))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

MARK(head(X)) -> AHEAD(mark(X))
13 new Dependency Pairs are created:

MARK(head(primes)) -> AHEAD(aprimes)
MARK(head(sieve(X''))) -> AHEAD(asieve(mark(X'')))
MARK(head(from(X''))) -> AHEAD(afrom(mark(X'')))
MARK(head(head(X''))) -> AHEAD(ahead(mark(X'')))
MARK(head(tail(X''))) -> AHEAD(atail(mark(X'')))
MARK(head(if(X1', X2', X3'))) -> AHEAD(aif(mark(X1'), X2', X3'))
MARK(head(filter(X1', X2'))) -> AHEAD(afilter(mark(X1'), mark(X2')))
MARK(head(s(X''))) -> AHEAD(s(mark(X'')))
MARK(head(0)) -> AHEAD(0)
MARK(head(cons(X1', X2'))) -> AHEAD(cons(mark(X1'), X2'))
MARK(head(true)) -> AHEAD(true)
MARK(head(false)) -> AHEAD(false)
MARK(head(divides(X1', X2'))) -> AHEAD(divides(mark(X1'), mark(X2')))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 4
Narrowing Transformation


Dependency Pairs:

APRIMES -> ASIEVE(cons(mark(s(s(0))), from(s(s(s(0))))))
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(Y)
MARK(head(cons(X1', X2'))) -> AHEAD(cons(mark(X1'), X2'))
MARK(head(filter(X1', X2'))) -> AHEAD(afilter(mark(X1'), mark(X2')))
MARK(head(if(X1', X2', X3'))) -> AHEAD(aif(mark(X1'), X2', X3'))
MARK(head(tail(X''))) -> AHEAD(atail(mark(X'')))
MARK(head(head(X''))) -> AHEAD(ahead(mark(X'')))
MARK(head(from(X''))) -> AHEAD(afrom(mark(X'')))
MARK(head(sieve(X''))) -> AHEAD(asieve(mark(X'')))
AHEAD(cons(X, Y)) -> MARK(X)
MARK(head(primes)) -> AHEAD(aprimes)
MARK(sieve(cons(X1', X2'))) -> ASIEVE(cons(mark(X1'), X2'))
MARK(sieve(filter(X1', X2'))) -> ASIEVE(afilter(mark(X1'), mark(X2')))
MARK(sieve(if(X1', X2', X3'))) -> ASIEVE(aif(mark(X1'), X2', X3'))
MARK(sieve(tail(X''))) -> ASIEVE(atail(mark(X'')))
MARK(sieve(head(X''))) -> ASIEVE(ahead(mark(X'')))
MARK(sieve(from(X''))) -> ASIEVE(afrom(mark(X'')))
MARK(sieve(sieve(X''))) -> ASIEVE(asieve(mark(X'')))
ASIEVE(cons(X, Y)) -> MARK(X)
MARK(sieve(primes)) -> ASIEVE(aprimes)
MARK(divides(X1, X2)) -> MARK(X2)
MARK(divides(X1, X2)) -> MARK(X1)
MARK(cons(X1, X2)) -> MARK(X1)
MARK(s(X)) -> MARK(X)
MARK(filter(X1, X2)) -> MARK(X2)
MARK(filter(X1, X2)) -> MARK(X1)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(X)
MARK(filter(X1, X2)) -> AFILTER(mark(X1), mark(X2))
MARK(if(X1, X2, X3)) -> MARK(X1)
AIF(true, X, Y) -> MARK(X)
MARK(if(X1, X2, X3)) -> AIF(mark(X1), X2, X3)
MARK(tail(X)) -> MARK(X)
ATAIL(cons(X, Y)) -> MARK(Y)
MARK(tail(X)) -> ATAIL(mark(X))
MARK(head(X)) -> MARK(X)
MARK(from(X)) -> MARK(X)
MARK(from(X)) -> AFROM(mark(X))
MARK(sieve(X)) -> MARK(X)
AFROM(X) -> MARK(X)
APRIMES -> AFROM(s(s(0)))
MARK(primes) -> APRIMES
AIF(false, X, Y) -> MARK(Y)


Rules:


aprimes -> asieve(afrom(s(s(0))))
aprimes -> primes
afrom(X) -> cons(mark(X), from(s(X)))
afrom(X) -> from(X)
ahead(cons(X, Y)) -> mark(X)
ahead(X) -> head(X)
atail(cons(X, Y)) -> mark(Y)
atail(X) -> tail(X)
aif(true, X, Y) -> mark(X)
aif(false, X, Y) -> mark(Y)
aif(X1, X2, X3) -> if(X1, X2, X3)
afilter(s(s(X)), cons(Y, Z)) -> aif(divides(s(s(mark(X))), mark(Y)), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))
afilter(X1, X2) -> filter(X1, X2)
asieve(cons(X, Y)) -> cons(mark(X), filter(X, sieve(Y)))
asieve(X) -> sieve(X)
mark(primes) -> aprimes
mark(sieve(X)) -> asieve(mark(X))
mark(from(X)) -> afrom(mark(X))
mark(head(X)) -> ahead(mark(X))
mark(tail(X)) -> atail(mark(X))
mark(if(X1, X2, X3)) -> aif(mark(X1), X2, X3)
mark(filter(X1, X2)) -> afilter(mark(X1), mark(X2))
mark(s(X)) -> s(mark(X))
mark(0) -> 0
mark(cons(X1, X2)) -> cons(mark(X1), X2)
mark(true) -> true
mark(false) -> false
mark(divides(X1, X2)) -> divides(mark(X1), mark(X2))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

MARK(tail(X)) -> ATAIL(mark(X))
13 new Dependency Pairs are created:

MARK(tail(primes)) -> ATAIL(aprimes)
MARK(tail(sieve(X''))) -> ATAIL(asieve(mark(X'')))
MARK(tail(from(X''))) -> ATAIL(afrom(mark(X'')))
MARK(tail(head(X''))) -> ATAIL(ahead(mark(X'')))
MARK(tail(tail(X''))) -> ATAIL(atail(mark(X'')))
MARK(tail(if(X1', X2', X3'))) -> ATAIL(aif(mark(X1'), X2', X3'))
MARK(tail(filter(X1', X2'))) -> ATAIL(afilter(mark(X1'), mark(X2')))
MARK(tail(s(X''))) -> ATAIL(s(mark(X'')))
MARK(tail(0)) -> ATAIL(0)
MARK(tail(cons(X1', X2'))) -> ATAIL(cons(mark(X1'), X2'))
MARK(tail(true)) -> ATAIL(true)
MARK(tail(false)) -> ATAIL(false)
MARK(tail(divides(X1', X2'))) -> ATAIL(divides(mark(X1'), mark(X2')))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 5
Narrowing Transformation


Dependency Pairs:

AIF(false, X, Y) -> MARK(Y)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(Y)
MARK(tail(cons(X1', X2'))) -> ATAIL(cons(mark(X1'), X2'))
MARK(tail(filter(X1', X2'))) -> ATAIL(afilter(mark(X1'), mark(X2')))
MARK(tail(if(X1', X2', X3'))) -> ATAIL(aif(mark(X1'), X2', X3'))
MARK(tail(tail(X''))) -> ATAIL(atail(mark(X'')))
MARK(tail(head(X''))) -> ATAIL(ahead(mark(X'')))
MARK(tail(from(X''))) -> ATAIL(afrom(mark(X'')))
MARK(tail(sieve(X''))) -> ATAIL(asieve(mark(X'')))
ATAIL(cons(X, Y)) -> MARK(Y)
MARK(tail(primes)) -> ATAIL(aprimes)
MARK(head(cons(X1', X2'))) -> AHEAD(cons(mark(X1'), X2'))
MARK(head(filter(X1', X2'))) -> AHEAD(afilter(mark(X1'), mark(X2')))
MARK(head(if(X1', X2', X3'))) -> AHEAD(aif(mark(X1'), X2', X3'))
MARK(head(tail(X''))) -> AHEAD(atail(mark(X'')))
MARK(head(head(X''))) -> AHEAD(ahead(mark(X'')))
MARK(head(from(X''))) -> AHEAD(afrom(mark(X'')))
MARK(head(sieve(X''))) -> AHEAD(asieve(mark(X'')))
AHEAD(cons(X, Y)) -> MARK(X)
MARK(head(primes)) -> AHEAD(aprimes)
MARK(sieve(cons(X1', X2'))) -> ASIEVE(cons(mark(X1'), X2'))
MARK(sieve(filter(X1', X2'))) -> ASIEVE(afilter(mark(X1'), mark(X2')))
MARK(sieve(if(X1', X2', X3'))) -> ASIEVE(aif(mark(X1'), X2', X3'))
MARK(sieve(tail(X''))) -> ASIEVE(atail(mark(X'')))
MARK(sieve(head(X''))) -> ASIEVE(ahead(mark(X'')))
MARK(sieve(from(X''))) -> ASIEVE(afrom(mark(X'')))
MARK(sieve(sieve(X''))) -> ASIEVE(asieve(mark(X'')))
MARK(sieve(primes)) -> ASIEVE(aprimes)
MARK(divides(X1, X2)) -> MARK(X2)
MARK(divides(X1, X2)) -> MARK(X1)
MARK(cons(X1, X2)) -> MARK(X1)
MARK(s(X)) -> MARK(X)
MARK(filter(X1, X2)) -> MARK(X2)
MARK(filter(X1, X2)) -> MARK(X1)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(X)
MARK(filter(X1, X2)) -> AFILTER(mark(X1), mark(X2))
MARK(if(X1, X2, X3)) -> MARK(X1)
AIF(true, X, Y) -> MARK(X)
MARK(if(X1, X2, X3)) -> AIF(mark(X1), X2, X3)
MARK(tail(X)) -> MARK(X)
MARK(head(X)) -> MARK(X)
MARK(from(X)) -> MARK(X)
MARK(from(X)) -> AFROM(mark(X))
MARK(sieve(X)) -> MARK(X)
AFROM(X) -> MARK(X)
APRIMES -> AFROM(s(s(0)))
MARK(primes) -> APRIMES
ASIEVE(cons(X, Y)) -> MARK(X)
APRIMES -> ASIEVE(cons(mark(s(s(0))), from(s(s(s(0))))))


Rules:


aprimes -> asieve(afrom(s(s(0))))
aprimes -> primes
afrom(X) -> cons(mark(X), from(s(X)))
afrom(X) -> from(X)
ahead(cons(X, Y)) -> mark(X)
ahead(X) -> head(X)
atail(cons(X, Y)) -> mark(Y)
atail(X) -> tail(X)
aif(true, X, Y) -> mark(X)
aif(false, X, Y) -> mark(Y)
aif(X1, X2, X3) -> if(X1, X2, X3)
afilter(s(s(X)), cons(Y, Z)) -> aif(divides(s(s(mark(X))), mark(Y)), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))
afilter(X1, X2) -> filter(X1, X2)
asieve(cons(X, Y)) -> cons(mark(X), filter(X, sieve(Y)))
asieve(X) -> sieve(X)
mark(primes) -> aprimes
mark(sieve(X)) -> asieve(mark(X))
mark(from(X)) -> afrom(mark(X))
mark(head(X)) -> ahead(mark(X))
mark(tail(X)) -> atail(mark(X))
mark(if(X1, X2, X3)) -> aif(mark(X1), X2, X3)
mark(filter(X1, X2)) -> afilter(mark(X1), mark(X2))
mark(s(X)) -> s(mark(X))
mark(0) -> 0
mark(cons(X1, X2)) -> cons(mark(X1), X2)
mark(true) -> true
mark(false) -> false
mark(divides(X1, X2)) -> divides(mark(X1), mark(X2))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

MARK(if(X1, X2, X3)) -> AIF(mark(X1), X2, X3)
13 new Dependency Pairs are created:

MARK(if(primes, X2, X3)) -> AIF(aprimes, X2, X3)
MARK(if(sieve(X'), X2, X3)) -> AIF(asieve(mark(X')), X2, X3)
MARK(if(from(X'), X2, X3)) -> AIF(afrom(mark(X')), X2, X3)
MARK(if(head(X'), X2, X3)) -> AIF(ahead(mark(X')), X2, X3)
MARK(if(tail(X'), X2, X3)) -> AIF(atail(mark(X')), X2, X3)
MARK(if(if(X1'', X2'', X3''), X2, X3)) -> AIF(aif(mark(X1''), X2'', X3''), X2, X3)
MARK(if(filter(X1'', X2''), X2, X3)) -> AIF(afilter(mark(X1''), mark(X2'')), X2, X3)
MARK(if(s(X'), X2, X3)) -> AIF(s(mark(X')), X2, X3)
MARK(if(0, X2, X3)) -> AIF(0, X2, X3)
MARK(if(cons(X1'', X2''), X2, X3)) -> AIF(cons(mark(X1''), X2''), X2, X3)
MARK(if(true, X2, X3)) -> AIF(true, X2, X3)
MARK(if(false, X2, X3)) -> AIF(false, X2, X3)
MARK(if(divides(X1'', X2''), X2, X3)) -> AIF(divides(mark(X1''), mark(X2'')), X2, X3)

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 6
Narrowing Transformation


Dependency Pairs:

APRIMES -> ASIEVE(cons(mark(s(s(0))), from(s(s(s(0))))))
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(Y)
MARK(if(false, X2, X3)) -> AIF(false, X2, X3)
MARK(if(true, X2, X3)) -> AIF(true, X2, X3)
MARK(if(filter(X1'', X2''), X2, X3)) -> AIF(afilter(mark(X1''), mark(X2'')), X2, X3)
MARK(if(if(X1'', X2'', X3''), X2, X3)) -> AIF(aif(mark(X1''), X2'', X3''), X2, X3)
MARK(if(tail(X'), X2, X3)) -> AIF(atail(mark(X')), X2, X3)
MARK(if(head(X'), X2, X3)) -> AIF(ahead(mark(X')), X2, X3)
MARK(if(from(X'), X2, X3)) -> AIF(afrom(mark(X')), X2, X3)
MARK(if(sieve(X'), X2, X3)) -> AIF(asieve(mark(X')), X2, X3)
AIF(true, X, Y) -> MARK(X)
MARK(if(primes, X2, X3)) -> AIF(aprimes, X2, X3)
MARK(tail(cons(X1', X2'))) -> ATAIL(cons(mark(X1'), X2'))
MARK(tail(filter(X1', X2'))) -> ATAIL(afilter(mark(X1'), mark(X2')))
MARK(tail(if(X1', X2', X3'))) -> ATAIL(aif(mark(X1'), X2', X3'))
MARK(tail(tail(X''))) -> ATAIL(atail(mark(X'')))
MARK(tail(head(X''))) -> ATAIL(ahead(mark(X'')))
MARK(tail(from(X''))) -> ATAIL(afrom(mark(X'')))
MARK(tail(sieve(X''))) -> ATAIL(asieve(mark(X'')))
ATAIL(cons(X, Y)) -> MARK(Y)
MARK(tail(primes)) -> ATAIL(aprimes)
MARK(head(cons(X1', X2'))) -> AHEAD(cons(mark(X1'), X2'))
MARK(head(filter(X1', X2'))) -> AHEAD(afilter(mark(X1'), mark(X2')))
MARK(head(if(X1', X2', X3'))) -> AHEAD(aif(mark(X1'), X2', X3'))
MARK(head(tail(X''))) -> AHEAD(atail(mark(X'')))
MARK(head(head(X''))) -> AHEAD(ahead(mark(X'')))
MARK(head(from(X''))) -> AHEAD(afrom(mark(X'')))
MARK(head(sieve(X''))) -> AHEAD(asieve(mark(X'')))
AHEAD(cons(X, Y)) -> MARK(X)
MARK(head(primes)) -> AHEAD(aprimes)
MARK(sieve(cons(X1', X2'))) -> ASIEVE(cons(mark(X1'), X2'))
MARK(sieve(filter(X1', X2'))) -> ASIEVE(afilter(mark(X1'), mark(X2')))
MARK(sieve(if(X1', X2', X3'))) -> ASIEVE(aif(mark(X1'), X2', X3'))
MARK(sieve(tail(X''))) -> ASIEVE(atail(mark(X'')))
MARK(sieve(head(X''))) -> ASIEVE(ahead(mark(X'')))
MARK(sieve(from(X''))) -> ASIEVE(afrom(mark(X'')))
MARK(sieve(sieve(X''))) -> ASIEVE(asieve(mark(X'')))
ASIEVE(cons(X, Y)) -> MARK(X)
MARK(sieve(primes)) -> ASIEVE(aprimes)
MARK(divides(X1, X2)) -> MARK(X2)
MARK(divides(X1, X2)) -> MARK(X1)
MARK(cons(X1, X2)) -> MARK(X1)
MARK(s(X)) -> MARK(X)
MARK(filter(X1, X2)) -> MARK(X2)
MARK(filter(X1, X2)) -> MARK(X1)
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(X)
MARK(filter(X1, X2)) -> AFILTER(mark(X1), mark(X2))
MARK(if(X1, X2, X3)) -> MARK(X1)
MARK(tail(X)) -> MARK(X)
MARK(head(X)) -> MARK(X)
MARK(from(X)) -> MARK(X)
MARK(from(X)) -> AFROM(mark(X))
MARK(sieve(X)) -> MARK(X)
AFROM(X) -> MARK(X)
APRIMES -> AFROM(s(s(0)))
MARK(primes) -> APRIMES
AIF(false, X, Y) -> MARK(Y)


Rules:


aprimes -> asieve(afrom(s(s(0))))
aprimes -> primes
afrom(X) -> cons(mark(X), from(s(X)))
afrom(X) -> from(X)
ahead(cons(X, Y)) -> mark(X)
ahead(X) -> head(X)
atail(cons(X, Y)) -> mark(Y)
atail(X) -> tail(X)
aif(true, X, Y) -> mark(X)
aif(false, X, Y) -> mark(Y)
aif(X1, X2, X3) -> if(X1, X2, X3)
afilter(s(s(X)), cons(Y, Z)) -> aif(divides(s(s(mark(X))), mark(Y)), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))
afilter(X1, X2) -> filter(X1, X2)
asieve(cons(X, Y)) -> cons(mark(X), filter(X, sieve(Y)))
asieve(X) -> sieve(X)
mark(primes) -> aprimes
mark(sieve(X)) -> asieve(mark(X))
mark(from(X)) -> afrom(mark(X))
mark(head(X)) -> ahead(mark(X))
mark(tail(X)) -> atail(mark(X))
mark(if(X1, X2, X3)) -> aif(mark(X1), X2, X3)
mark(filter(X1, X2)) -> afilter(mark(X1), mark(X2))
mark(s(X)) -> s(mark(X))
mark(0) -> 0
mark(cons(X1, X2)) -> cons(mark(X1), X2)
mark(true) -> true
mark(false) -> false
mark(divides(X1, X2)) -> divides(mark(X1), mark(X2))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

MARK(filter(X1, X2)) -> AFILTER(mark(X1), mark(X2))
26 new Dependency Pairs are created:

MARK(filter(primes, X2)) -> AFILTER(aprimes, mark(X2))
MARK(filter(sieve(X'), X2)) -> AFILTER(asieve(mark(X')), mark(X2))
MARK(filter(from(X'), X2)) -> AFILTER(afrom(mark(X')), mark(X2))
MARK(filter(head(X'), X2)) -> AFILTER(ahead(mark(X')), mark(X2))
MARK(filter(tail(X'), X2)) -> AFILTER(atail(mark(X')), mark(X2))
MARK(filter(if(X1'', X2'', X3'), X2)) -> AFILTER(aif(mark(X1''), X2'', X3'), mark(X2))
MARK(filter(filter(X1'', X2''), X2)) -> AFILTER(afilter(mark(X1''), mark(X2'')), mark(X2))
MARK(filter(s(X'), X2)) -> AFILTER(s(mark(X')), mark(X2))
MARK(filter(0, X2)) -> AFILTER(0, mark(X2))
MARK(filter(cons(X1'', X2''), X2)) -> AFILTER(cons(mark(X1''), X2''), mark(X2))
MARK(filter(true, X2)) -> AFILTER(true, mark(X2))
MARK(filter(false, X2)) -> AFILTER(false, mark(X2))
MARK(filter(divides(X1'', X2''), X2)) -> AFILTER(divides(mark(X1''), mark(X2'')), mark(X2))
MARK(filter(X1, primes)) -> AFILTER(mark(X1), aprimes)
MARK(filter(X1, sieve(X'))) -> AFILTER(mark(X1), asieve(mark(X')))
MARK(filter(X1, from(X'))) -> AFILTER(mark(X1), afrom(mark(X')))
MARK(filter(X1, head(X'))) -> AFILTER(mark(X1), ahead(mark(X')))
MARK(filter(X1, tail(X'))) -> AFILTER(mark(X1), atail(mark(X')))
MARK(filter(X1, if(X1'', X2'', X3'))) -> AFILTER(mark(X1), aif(mark(X1''), X2'', X3'))
MARK(filter(X1, filter(X1'', X2''))) -> AFILTER(mark(X1), afilter(mark(X1''), mark(X2'')))
MARK(filter(X1, s(X'))) -> AFILTER(mark(X1), s(mark(X')))
MARK(filter(X1, 0)) -> AFILTER(mark(X1), 0)
MARK(filter(X1, cons(X1'', X2''))) -> AFILTER(mark(X1), cons(mark(X1''), X2''))
MARK(filter(X1, true)) -> AFILTER(mark(X1), true)
MARK(filter(X1, false)) -> AFILTER(mark(X1), false)
MARK(filter(X1, divides(X1'', X2''))) -> AFILTER(mark(X1), divides(mark(X1''), mark(X2'')))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 7
Remaining Obligation(s)




The following remains to be proven:
Dependency Pairs:

MARK(filter(X1, cons(X1'', X2''))) -> AFILTER(mark(X1), cons(mark(X1''), X2''))
MARK(filter(X1, filter(X1'', X2''))) -> AFILTER(mark(X1), afilter(mark(X1''), mark(X2'')))
MARK(filter(X1, if(X1'', X2'', X3'))) -> AFILTER(mark(X1), aif(mark(X1''), X2'', X3'))
MARK(filter(X1, tail(X'))) -> AFILTER(mark(X1), atail(mark(X')))
MARK(filter(X1, head(X'))) -> AFILTER(mark(X1), ahead(mark(X')))
MARK(filter(X1, from(X'))) -> AFILTER(mark(X1), afrom(mark(X')))
MARK(filter(X1, sieve(X'))) -> AFILTER(mark(X1), asieve(mark(X')))
MARK(filter(X1, primes)) -> AFILTER(mark(X1), aprimes)
MARK(filter(s(X'), X2)) -> AFILTER(s(mark(X')), mark(X2))
MARK(filter(filter(X1'', X2''), X2)) -> AFILTER(afilter(mark(X1''), mark(X2'')), mark(X2))
MARK(filter(if(X1'', X2'', X3'), X2)) -> AFILTER(aif(mark(X1''), X2'', X3'), mark(X2))
MARK(filter(tail(X'), X2)) -> AFILTER(atail(mark(X')), mark(X2))
MARK(filter(head(X'), X2)) -> AFILTER(ahead(mark(X')), mark(X2))
MARK(filter(from(X'), X2)) -> AFILTER(afrom(mark(X')), mark(X2))
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(Y)
MARK(filter(sieve(X'), X2)) -> AFILTER(asieve(mark(X')), mark(X2))
AFILTER(s(s(X)), cons(Y, Z)) -> MARK(X)
MARK(filter(primes, X2)) -> AFILTER(aprimes, mark(X2))
MARK(if(false, X2, X3)) -> AIF(false, X2, X3)
MARK(if(true, X2, X3)) -> AIF(true, X2, X3)
MARK(if(filter(X1'', X2''), X2, X3)) -> AIF(afilter(mark(X1''), mark(X2'')), X2, X3)
MARK(if(if(X1'', X2'', X3''), X2, X3)) -> AIF(aif(mark(X1''), X2'', X3''), X2, X3)
MARK(if(tail(X'), X2, X3)) -> AIF(atail(mark(X')), X2, X3)
MARK(if(head(X'), X2, X3)) -> AIF(ahead(mark(X')), X2, X3)
MARK(if(from(X'), X2, X3)) -> AIF(afrom(mark(X')), X2, X3)
AIF(false, X, Y) -> MARK(Y)
MARK(if(sieve(X'), X2, X3)) -> AIF(asieve(mark(X')), X2, X3)
AIF(true, X, Y) -> MARK(X)
MARK(if(primes, X2, X3)) -> AIF(aprimes, X2, X3)
MARK(tail(cons(X1', X2'))) -> ATAIL(cons(mark(X1'), X2'))
MARK(tail(filter(X1', X2'))) -> ATAIL(afilter(mark(X1'), mark(X2')))
MARK(tail(if(X1', X2', X3'))) -> ATAIL(aif(mark(X1'), X2', X3'))
MARK(tail(tail(X''))) -> ATAIL(atail(mark(X'')))
MARK(tail(head(X''))) -> ATAIL(ahead(mark(X'')))
MARK(tail(from(X''))) -> ATAIL(afrom(mark(X'')))
MARK(tail(sieve(X''))) -> ATAIL(asieve(mark(X'')))
ATAIL(cons(X, Y)) -> MARK(Y)
MARK(tail(primes)) -> ATAIL(aprimes)
MARK(head(cons(X1', X2'))) -> AHEAD(cons(mark(X1'), X2'))
MARK(head(filter(X1', X2'))) -> AHEAD(afilter(mark(X1'), mark(X2')))
MARK(head(if(X1', X2', X3'))) -> AHEAD(aif(mark(X1'), X2', X3'))
MARK(head(tail(X''))) -> AHEAD(atail(mark(X'')))
MARK(head(head(X''))) -> AHEAD(ahead(mark(X'')))
MARK(head(from(X''))) -> AHEAD(afrom(mark(X'')))
MARK(head(sieve(X''))) -> AHEAD(asieve(mark(X'')))
AHEAD(cons(X, Y)) -> MARK(X)
MARK(head(primes)) -> AHEAD(aprimes)
MARK(sieve(cons(X1', X2'))) -> ASIEVE(cons(mark(X1'), X2'))
MARK(sieve(filter(X1', X2'))) -> ASIEVE(afilter(mark(X1'), mark(X2')))
MARK(sieve(if(X1', X2', X3'))) -> ASIEVE(aif(mark(X1'), X2', X3'))
MARK(sieve(tail(X''))) -> ASIEVE(atail(mark(X'')))
MARK(sieve(head(X''))) -> ASIEVE(ahead(mark(X'')))
MARK(sieve(from(X''))) -> ASIEVE(afrom(mark(X'')))
MARK(sieve(sieve(X''))) -> ASIEVE(asieve(mark(X'')))
MARK(sieve(primes)) -> ASIEVE(aprimes)
MARK(divides(X1, X2)) -> MARK(X2)
MARK(divides(X1, X2)) -> MARK(X1)
MARK(cons(X1, X2)) -> MARK(X1)
MARK(s(X)) -> MARK(X)
MARK(filter(X1, X2)) -> MARK(X2)
MARK(filter(X1, X2)) -> MARK(X1)
MARK(if(X1, X2, X3)) -> MARK(X1)
MARK(tail(X)) -> MARK(X)
MARK(head(X)) -> MARK(X)
MARK(from(X)) -> MARK(X)
MARK(from(X)) -> AFROM(mark(X))
MARK(sieve(X)) -> MARK(X)
AFROM(X) -> MARK(X)
APRIMES -> AFROM(s(s(0)))
MARK(primes) -> APRIMES
ASIEVE(cons(X, Y)) -> MARK(X)
APRIMES -> ASIEVE(cons(mark(s(s(0))), from(s(s(s(0))))))


Rules:


aprimes -> asieve(afrom(s(s(0))))
aprimes -> primes
afrom(X) -> cons(mark(X), from(s(X)))
afrom(X) -> from(X)
ahead(cons(X, Y)) -> mark(X)
ahead(X) -> head(X)
atail(cons(X, Y)) -> mark(Y)
atail(X) -> tail(X)
aif(true, X, Y) -> mark(X)
aif(false, X, Y) -> mark(Y)
aif(X1, X2, X3) -> if(X1, X2, X3)
afilter(s(s(X)), cons(Y, Z)) -> aif(divides(s(s(mark(X))), mark(Y)), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))
afilter(X1, X2) -> filter(X1, X2)
asieve(cons(X, Y)) -> cons(mark(X), filter(X, sieve(Y)))
asieve(X) -> sieve(X)
mark(primes) -> aprimes
mark(sieve(X)) -> asieve(mark(X))
mark(from(X)) -> afrom(mark(X))
mark(head(X)) -> ahead(mark(X))
mark(tail(X)) -> atail(mark(X))
mark(if(X1, X2, X3)) -> aif(mark(X1), X2, X3)
mark(filter(X1, X2)) -> afilter(mark(X1), mark(X2))
mark(s(X)) -> s(mark(X))
mark(0) -> 0
mark(cons(X1, X2)) -> cons(mark(X1), X2)
mark(true) -> true
mark(false) -> false
mark(divides(X1, X2)) -> divides(mark(X1), mark(X2))




Termination of R could not be shown.
Duration:
0:58 minutes