YES TRS: { a__filter(X1, X2, X3) -> filter(X1, X2, X3), a__filter(cons(X, Y), 0(), M) -> cons(0(), filter(Y, M, M)), a__filter(cons(X, Y), s(N), M) -> cons(mark(X), filter(Y, N, M)), mark(cons(X1, X2)) -> cons(mark(X1), X2), mark(0()) -> 0(), mark(filter(X1, X2, X3)) -> a__filter(mark(X1), mark(X2), mark(X3)), mark(s(X)) -> s(mark(X)), mark(sieve(X)) -> a__sieve(mark(X)), mark(nats(X)) -> a__nats(mark(X)), mark(zprimes()) -> a__zprimes(), a__sieve(X) -> sieve(X), a__sieve(cons(0(), Y)) -> cons(0(), sieve(Y)), a__sieve(cons(s(N), Y)) -> cons(s(mark(N)), sieve(filter(Y, N, N))), a__nats(X) -> nats(X), a__nats(N) -> cons(mark(N), nats(s(N))), a__zprimes() -> a__sieve(a__nats(s(s(0())))), a__zprimes() -> zprimes()} DP: Strict: {a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(cons(X1, X2)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3)), mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(s(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X), mark#(sieve(X)) -> a__sieve#(mark(X)), mark#(nats(X)) -> mark#(X), mark#(nats(X)) -> a__nats#(mark(X)), mark#(zprimes()) -> a__zprimes#(), a__sieve#(cons(s(N), Y)) -> mark#(N), a__nats#(N) -> mark#(N), a__zprimes#() -> a__sieve#(a__nats(s(s(0())))), a__zprimes#() -> a__nats#(s(s(0())))} Weak: { a__filter(X1, X2, X3) -> filter(X1, X2, X3), a__filter(cons(X, Y), 0(), M) -> cons(0(), filter(Y, M, M)), a__filter(cons(X, Y), s(N), M) -> cons(mark(X), filter(Y, N, M)), mark(cons(X1, X2)) -> cons(mark(X1), X2), mark(0()) -> 0(), mark(filter(X1, X2, X3)) -> a__filter(mark(X1), mark(X2), mark(X3)), mark(s(X)) -> s(mark(X)), mark(sieve(X)) -> a__sieve(mark(X)), mark(nats(X)) -> a__nats(mark(X)), mark(zprimes()) -> a__zprimes(), a__sieve(X) -> sieve(X), a__sieve(cons(0(), Y)) -> cons(0(), sieve(Y)), a__sieve(cons(s(N), Y)) -> cons(s(mark(N)), sieve(filter(Y, N, N))), a__nats(X) -> nats(X), a__nats(N) -> cons(mark(N), nats(s(N))), a__zprimes() -> a__sieve(a__nats(s(s(0())))), a__zprimes() -> zprimes()} EDG: {(mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(zprimes()) -> a__zprimes#()) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(nats(X)) -> a__nats#(mark(X))) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(nats(X)) -> mark#(X)) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(sieve(X)) -> a__sieve#(mark(X))) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(sieve(X)) -> mark#(X)) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(s(X)) -> mark#(X)) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> mark#(X3)) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> mark#(X2)) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> mark#(X1)) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(cons(X1, X2)) -> mark#(X1)) (mark#(nats(X)) -> a__nats#(mark(X)), a__nats#(N) -> mark#(N)) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(zprimes()) -> a__zprimes#()) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(nats(X)) -> a__nats#(mark(X))) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(nats(X)) -> mark#(X)) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(sieve(X)) -> a__sieve#(mark(X))) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(sieve(X)) -> mark#(X)) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(s(X)) -> mark#(X)) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(filter(X1, X2, X3)) -> mark#(X3)) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(filter(X1, X2, X3)) -> mark#(X2)) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(filter(X1, X2, X3)) -> mark#(X1)) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(cons(X1, X2)) -> mark#(X1)) (mark#(s(X)) -> mark#(X), mark#(zprimes()) -> a__zprimes#()) (mark#(s(X)) -> mark#(X), mark#(nats(X)) -> a__nats#(mark(X))) (mark#(s(X)) -> mark#(X), mark#(nats(X)) -> mark#(X)) (mark#(s(X)) -> mark#(X), mark#(sieve(X)) -> a__sieve#(mark(X))) (mark#(s(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X)) (mark#(s(X)) -> mark#(X), mark#(s(X)) -> mark#(X)) (mark#(s(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X3)) (mark#(s(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X2)) (mark#(s(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X1)) (mark#(s(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (mark#(s(X)) -> mark#(X), mark#(cons(X1, X2)) -> mark#(X1)) (mark#(nats(X)) -> mark#(X), mark#(zprimes()) -> a__zprimes#()) (mark#(nats(X)) -> mark#(X), mark#(nats(X)) -> a__nats#(mark(X))) (mark#(nats(X)) -> mark#(X), mark#(nats(X)) -> mark#(X)) (mark#(nats(X)) -> mark#(X), mark#(sieve(X)) -> a__sieve#(mark(X))) (mark#(nats(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X)) (mark#(nats(X)) -> mark#(X), mark#(s(X)) -> mark#(X)) (mark#(nats(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X3)) (mark#(nats(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X2)) (mark#(nats(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X1)) (mark#(nats(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (mark#(nats(X)) -> mark#(X), mark#(cons(X1, X2)) -> mark#(X1)) (a__zprimes#() -> a__sieve#(a__nats(s(s(0())))), a__sieve#(cons(s(N), Y)) -> mark#(N)) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(zprimes()) -> a__zprimes#()) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(nats(X)) -> a__nats#(mark(X))) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(nats(X)) -> mark#(X)) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(sieve(X)) -> a__sieve#(mark(X))) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(sieve(X)) -> mark#(X)) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(s(X)) -> mark#(X)) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(filter(X1, X2, X3)) -> mark#(X3)) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(filter(X1, X2, X3)) -> mark#(X2)) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(filter(X1, X2, X3)) -> mark#(X1)) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(cons(X1, X2)) -> mark#(X1)) (a__nats#(N) -> mark#(N), mark#(zprimes()) -> a__zprimes#()) (a__nats#(N) -> mark#(N), mark#(nats(X)) -> a__nats#(mark(X))) (a__nats#(N) -> mark#(N), mark#(nats(X)) -> mark#(X)) (a__nats#(N) -> mark#(N), mark#(sieve(X)) -> a__sieve#(mark(X))) (a__nats#(N) -> mark#(N), mark#(sieve(X)) -> mark#(X)) (a__nats#(N) -> mark#(N), mark#(s(X)) -> mark#(X)) (a__nats#(N) -> mark#(N), mark#(filter(X1, X2, X3)) -> mark#(X3)) (a__nats#(N) -> mark#(N), mark#(filter(X1, X2, X3)) -> mark#(X2)) (a__nats#(N) -> mark#(N), mark#(filter(X1, X2, X3)) -> mark#(X1)) (a__nats#(N) -> mark#(N), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (a__nats#(N) -> mark#(N), mark#(cons(X1, X2)) -> mark#(X1)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(cons(X1, X2)) -> mark#(X1)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(filter(X1, X2, X3)) -> mark#(X1)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(filter(X1, X2, X3)) -> mark#(X2)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(filter(X1, X2, X3)) -> mark#(X3)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(s(X)) -> mark#(X)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(sieve(X)) -> mark#(X)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(sieve(X)) -> a__sieve#(mark(X))) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(nats(X)) -> mark#(X)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(nats(X)) -> a__nats#(mark(X))) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(zprimes()) -> a__zprimes#()) (a__zprimes#() -> a__nats#(s(s(0()))), a__nats#(N) -> mark#(N)) (mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3)), a__filter#(cons(X, Y), s(N), M) -> mark#(X)) (mark#(sieve(X)) -> mark#(X), mark#(cons(X1, X2)) -> mark#(X1)) (mark#(sieve(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (mark#(sieve(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X1)) (mark#(sieve(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X2)) (mark#(sieve(X)) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X3)) (mark#(sieve(X)) -> mark#(X), mark#(s(X)) -> mark#(X)) (mark#(sieve(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X)) (mark#(sieve(X)) -> mark#(X), mark#(sieve(X)) -> a__sieve#(mark(X))) (mark#(sieve(X)) -> mark#(X), mark#(nats(X)) -> mark#(X)) (mark#(sieve(X)) -> mark#(X), mark#(nats(X)) -> a__nats#(mark(X))) (mark#(sieve(X)) -> mark#(X), mark#(zprimes()) -> a__zprimes#()) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(cons(X1, X2)) -> mark#(X1)) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X1)) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X2)) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(filter(X1, X2, X3)) -> mark#(X3)) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(s(X)) -> mark#(X)) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(sieve(X)) -> mark#(X)) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(sieve(X)) -> a__sieve#(mark(X))) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(nats(X)) -> mark#(X)) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(nats(X)) -> a__nats#(mark(X))) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(zprimes()) -> a__zprimes#()) (mark#(zprimes()) -> a__zprimes#(), a__zprimes#() -> a__sieve#(a__nats(s(s(0()))))) (mark#(zprimes()) -> a__zprimes#(), a__zprimes#() -> a__nats#(s(s(0())))) (mark#(sieve(X)) -> a__sieve#(mark(X)), a__sieve#(cons(s(N), Y)) -> mark#(N)) (mark#(cons(X1, X2)) -> mark#(X1), mark#(cons(X1, X2)) -> mark#(X1)) (mark#(cons(X1, X2)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3))) (mark#(cons(X1, X2)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> mark#(X1)) (mark#(cons(X1, X2)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> mark#(X2)) (mark#(cons(X1, X2)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> mark#(X3)) (mark#(cons(X1, X2)) -> mark#(X1), mark#(s(X)) -> mark#(X)) (mark#(cons(X1, X2)) -> mark#(X1), mark#(sieve(X)) -> mark#(X)) (mark#(cons(X1, X2)) -> mark#(X1), mark#(sieve(X)) -> a__sieve#(mark(X))) (mark#(cons(X1, X2)) -> mark#(X1), mark#(nats(X)) -> mark#(X)) (mark#(cons(X1, X2)) -> mark#(X1), mark#(nats(X)) -> a__nats#(mark(X))) (mark#(cons(X1, X2)) -> mark#(X1), mark#(zprimes()) -> a__zprimes#())} SCCS: Scc: {a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(cons(X1, X2)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3)), mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(s(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X), mark#(sieve(X)) -> a__sieve#(mark(X)), mark#(nats(X)) -> mark#(X), mark#(nats(X)) -> a__nats#(mark(X)), mark#(zprimes()) -> a__zprimes#(), a__sieve#(cons(s(N), Y)) -> mark#(N), a__nats#(N) -> mark#(N), a__zprimes#() -> a__sieve#(a__nats(s(s(0())))), a__zprimes#() -> a__nats#(s(s(0())))} SCC: Strict: {a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(cons(X1, X2)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> a__filter#(mark(X1), mark(X2), mark(X3)), mark#(filter(X1, X2, X3)) -> mark#(X1), mark#(filter(X1, X2, X3)) -> mark#(X2), mark#(filter(X1, X2, X3)) -> mark#(X3), mark#(s(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X), mark#(sieve(X)) -> a__sieve#(mark(X)), mark#(nats(X)) -> mark#(X), mark#(nats(X)) -> a__nats#(mark(X)), mark#(zprimes()) -> a__zprimes#(), a__sieve#(cons(s(N), Y)) -> mark#(N), a__nats#(N) -> mark#(N), a__zprimes#() -> a__sieve#(a__nats(s(s(0())))), a__zprimes#() -> a__nats#(s(s(0())))} Weak: { a__filter(X1, X2, X3) -> filter(X1, X2, X3), a__filter(cons(X, Y), 0(), M) -> cons(0(), filter(Y, M, M)), a__filter(cons(X, Y), s(N), M) -> cons(mark(X), filter(Y, N, M)), mark(cons(X1, X2)) -> cons(mark(X1), X2), mark(0()) -> 0(), mark(filter(X1, X2, X3)) -> a__filter(mark(X1), mark(X2), mark(X3)), mark(s(X)) -> s(mark(X)), mark(sieve(X)) -> a__sieve(mark(X)), mark(nats(X)) -> a__nats(mark(X)), mark(zprimes()) -> a__zprimes(), a__sieve(X) -> sieve(X), a__sieve(cons(0(), Y)) -> cons(0(), sieve(Y)), a__sieve(cons(s(N), Y)) -> cons(s(mark(N)), sieve(filter(Y, N, N))), a__nats(X) -> nats(X), a__nats(N) -> cons(mark(N), nats(s(N))), a__zprimes() -> a__sieve(a__nats(s(s(0())))), a__zprimes() -> zprimes()} POLY: Argument Filtering: pi(zprimes) = [], pi(a__zprimes#) = [], pi(a__zprimes) = [], pi(a__nats#) = [0], pi(a__nats) = [0], pi(nats) = [0], pi(a__sieve#) = 0, pi(a__sieve) = 0, pi(sieve) = 0, pi(s) = 0, pi(mark#) = [0], pi(mark) = 0, pi(a__filter#) = 0, pi(a__filter) = [0,1,2], pi(filter) = [0,1,2], pi(0) = [], pi(cons) = [0] Usable Rules: {} Interpretation: [a__nats#](x0) = x0 + 1, [mark#](x0) = x0 + 1, [a__zprimes#] = 1, [filter](x0, x1, x2) = x0 + x1 + x2 + 1, [cons](x0) = x0 + 1, [a__nats](x0) = x0 + 1, [nats](x0) = x0 + 1, [zprimes] = 1, [0] = 0 Strict: {a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(s(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X), a__sieve#(cons(s(N), Y)) -> mark#(N), a__nats#(N) -> mark#(N), a__zprimes#() -> a__sieve#(a__nats(s(s(0())))), a__zprimes#() -> a__nats#(s(s(0())))} Weak: { a__filter(X1, X2, X3) -> filter(X1, X2, X3), a__filter(cons(X, Y), 0(), M) -> cons(0(), filter(Y, M, M)), a__filter(cons(X, Y), s(N), M) -> cons(mark(X), filter(Y, N, M)), mark(cons(X1, X2)) -> cons(mark(X1), X2), mark(0()) -> 0(), mark(filter(X1, X2, X3)) -> a__filter(mark(X1), mark(X2), mark(X3)), mark(s(X)) -> s(mark(X)), mark(sieve(X)) -> a__sieve(mark(X)), mark(nats(X)) -> a__nats(mark(X)), mark(zprimes()) -> a__zprimes(), a__sieve(X) -> sieve(X), a__sieve(cons(0(), Y)) -> cons(0(), sieve(Y)), a__sieve(cons(s(N), Y)) -> cons(s(mark(N)), sieve(filter(Y, N, N))), a__nats(X) -> nats(X), a__nats(N) -> cons(mark(N), nats(s(N))), a__zprimes() -> a__sieve(a__nats(s(s(0())))), a__zprimes() -> zprimes()} EDG: {(a__nats#(N) -> mark#(N), mark#(sieve(X)) -> mark#(X)) (a__nats#(N) -> mark#(N), mark#(s(X)) -> mark#(X)) (mark#(s(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X)) (mark#(s(X)) -> mark#(X), mark#(s(X)) -> mark#(X)) (a__zprimes#() -> a__sieve#(a__nats(s(s(0())))), a__sieve#(cons(s(N), Y)) -> mark#(N)) (a__zprimes#() -> a__nats#(s(s(0()))), a__nats#(N) -> mark#(N)) (mark#(sieve(X)) -> mark#(X), mark#(s(X)) -> mark#(X)) (mark#(sieve(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X)) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(s(X)) -> mark#(X)) (a__filter#(cons(X, Y), s(N), M) -> mark#(X), mark#(sieve(X)) -> mark#(X)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(s(X)) -> mark#(X)) (a__sieve#(cons(s(N), Y)) -> mark#(N), mark#(sieve(X)) -> mark#(X))} SCCS: Scc: { mark#(s(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X)} SCC: Strict: { mark#(s(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X)} Weak: { a__filter(X1, X2, X3) -> filter(X1, X2, X3), a__filter(cons(X, Y), 0(), M) -> cons(0(), filter(Y, M, M)), a__filter(cons(X, Y), s(N), M) -> cons(mark(X), filter(Y, N, M)), mark(cons(X1, X2)) -> cons(mark(X1), X2), mark(0()) -> 0(), mark(filter(X1, X2, X3)) -> a__filter(mark(X1), mark(X2), mark(X3)), mark(s(X)) -> s(mark(X)), mark(sieve(X)) -> a__sieve(mark(X)), mark(nats(X)) -> a__nats(mark(X)), mark(zprimes()) -> a__zprimes(), a__sieve(X) -> sieve(X), a__sieve(cons(0(), Y)) -> cons(0(), sieve(Y)), a__sieve(cons(s(N), Y)) -> cons(s(mark(N)), sieve(filter(Y, N, N))), a__nats(X) -> nats(X), a__nats(N) -> cons(mark(N), nats(s(N))), a__zprimes() -> a__sieve(a__nats(s(s(0())))), a__zprimes() -> zprimes()} SPSC: Simple Projection: pi(mark#) = 0 Strict: {mark#(sieve(X)) -> mark#(X)} EDG: {(mark#(sieve(X)) -> mark#(X), mark#(sieve(X)) -> mark#(X))} SCCS: Scc: {mark#(sieve(X)) -> mark#(X)} SCC: Strict: {mark#(sieve(X)) -> mark#(X)} Weak: { a__filter(X1, X2, X3) -> filter(X1, X2, X3), a__filter(cons(X, Y), 0(), M) -> cons(0(), filter(Y, M, M)), a__filter(cons(X, Y), s(N), M) -> cons(mark(X), filter(Y, N, M)), mark(cons(X1, X2)) -> cons(mark(X1), X2), mark(0()) -> 0(), mark(filter(X1, X2, X3)) -> a__filter(mark(X1), mark(X2), mark(X3)), mark(s(X)) -> s(mark(X)), mark(sieve(X)) -> a__sieve(mark(X)), mark(nats(X)) -> a__nats(mark(X)), mark(zprimes()) -> a__zprimes(), a__sieve(X) -> sieve(X), a__sieve(cons(0(), Y)) -> cons(0(), sieve(Y)), a__sieve(cons(s(N), Y)) -> cons(s(mark(N)), sieve(filter(Y, N, N))), a__nats(X) -> nats(X), a__nats(N) -> cons(mark(N), nats(s(N))), a__zprimes() -> a__sieve(a__nats(s(s(0())))), a__zprimes() -> zprimes()} SPSC: Simple Projection: pi(mark#) = 0 Strict: {} Qed