(VAR X Y Z) (RULES primes -> sieve(from(s(s(0)))) from(X) -> cons(X,from(s(X))) head(cons(X,Y)) -> X tail(cons(X,Y)) -> Y if(true,X,Y) -> X if(false,X,Y) -> Y filter(s(s(X)),cons(Y,Z)) -> if(divides(s(s(X)),Y),filter(s(s(X)),Z),cons(Y,filter(X,sieve(Y)))) sieve(cons(X,Y)) -> cons(X,filter(X,sieve(Y))) )