/*----- Synthesis of an exponentiation routine -----*/ :-op(700,xfx,=/=). X after test(X,U) :- X after_test U. w:loop(U,V,W) after loop(U,V,W). R:X1*X2 after mult(R,R1,R2,X1,X2). R:X1-X2 after subtc(R,R1,X2,X1) :- const(X2). R:X1/X2 after divc(R,R1,X2,X1) :- const(X2). zero(X) after_test zero(R,X). even(X) after_test even(R,X). test(X,U) needs C :- U needs C. if(_,_,C,_) needs C. loop(U,V,W) needs V