handler gcd { class java.lang.Integer; class IntUtil; constraint gcd(java.lang.Integer); rules { variable java.lang.Integer M, N, L; // gcd(0) <=> true. { gcd(0) } <=> { true } simp; // gcd(N) \ gcd(M) <=> N= { L = IntUtil.sub(M, N) && gcd(L) } newGCD; }//end of rules goal gcd_0 { gcd(0) }//end of gcd_0 goal gcd_0_3 { gcd(0) && gcd(3) }//end of gcd_0_3 goal gcd_6_9 { gcd(6) && gcd(9) }//end of gcd_6_9 goal gcd_120_9 { gcd(120) && gcd(9) }//end of gcd_120_9 }//end of handler gcd