(VAR M N X X1 X2 X3 Y ) (RULES active(filter(cons(X, Y), 0, M)) -> mark(cons(0, filter(Y, M, M))) active(filter(cons(X, Y), s(N), M)) -> mark(cons(X, filter(Y, N, M))) active(sieve(cons(0, Y))) -> mark(cons(0, sieve(Y))) active(sieve(cons(s(N), Y))) -> mark(cons(s(N), sieve(filter(Y, N, N)))) active(nats(N)) -> mark(cons(N, nats(s(N)))) active(zprimes) -> mark(sieve(nats(s(s(0))))) mark(filter(X1, X2, X3)) -> active(filter(mark(X1), mark(X2), mark(X3))) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(s(X)) -> active(s(mark(X))) mark(sieve(X)) -> active(sieve(mark(X))) mark(nats(X)) -> active(nats(mark(X))) mark(zprimes) -> active(zprimes) filter(mark(X1), X2, X3) -> filter(X1, X2, X3) filter(X1, mark(X2), X3) -> filter(X1, X2, X3) filter(X1, X2, mark(X3)) -> filter(X1, X2, X3) filter(active(X1), X2, X3) -> filter(X1, X2, X3) filter(X1, active(X2), X3) -> filter(X1, X2, X3) filter(X1, X2, active(X3)) -> filter(X1, X2, X3) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) s(mark(X)) -> s(X) s(active(X)) -> s(X) sieve(mark(X)) -> sieve(X) sieve(active(X)) -> sieve(X) nats(mark(X)) -> nats(X) nats(active(X)) -> nats(X) )