handler primes { class java.lang.Integer; class IntUtil; constraint prime(java.lang.Integer); constraint primes(java.lang.Integer); rules { variable java.lang.Integer N, M, I, J; //primes(1) <=> true. { primes(1) } <=> { true } simp; // primes(N) <=> N>1 (guard) M is N-1, prime(N), primes(M). if(IntUtil.gt(N, 1)) { primes(N) } <=> { M = IntUtil.dec(N) && prime(N) && primes(M) } recursive; // absorb(J) @ prime(I) \ prime(J) <=> J mod I (equals) 0 (guard) true. if(IntUtil.modNull(J, I)) { prime(I) &\& prime(J) } <=> { true } absorbJ; }//end of rules goal primes_0 { primes(0) }//end of primes_0 goal primes_1 { primes(1) }//end of primes_1 goal primes_2 { primes(2) }//end of primes_2 goal primes_3 { primes(3) }//end of primes_3 goal primes_4 { primes(4) }//end of primes_4 goal primes_5 { primes(5) }//end of primes_5 goal primes_10 { primes(10) }//end of primes_10 goal primes_30 { primes(30) }//end of primes_30 }//end of handler primes