/*
X lesseq Y :- X and Y are natural numbers,
such that X is less than or equal to Y.
We use lesseq to represent the operator rather than cause problems
with an error message from Prolog about redefining an operator!
*/
:- op(40,xfx, 'lesseq').
0 lesseq X :- natural_number(X).
s(X) lesseq s(Y) :- X lesseq Y.
natural_number(0).
natural_number(s(X)) :- natural_number(X).
% Program 3.2: The less than or equal relation