%query: f(b).

/* non-terminating example */

pred(0,0).
pred(s(0),0).
pred(s(s(X)),s(Y)) :- pred(s(X), Y).
double(0,0).
double(s(X),s(s(Y))) :- pred(s(X),Z), double(Z, Y). 
half(0,0).
half(s(s(X)),s(U)) :- pred(s(s(X)),Y), pred(Y,Z), half(Z,U).
f(s(X)) :- half(s(X),Y), double(Y,Z),  f(Z).
