/*
	exp(N,X,Y) :-
			N, X and Y are natural numbers
			such that Y equals X raised to the power N.
*/

	exp(s(N),0,0).
	exp(0,s(X),s(0)).
	exp(s(N),X,Y) :- exp(N,X,Z), times(Z,X,Y).

	times(0,Y,0).
	times(s(X),Y,Z) :- times(X,Y,XY), plus(XY,Y,Z).

	plus(0,X,X) :- natural_number(X).
	plus(s(X),Y,s(Z)):- plus(X,Y,Z).

	natural_number(0).
	natural_number(s(X)) :- natural_number(X).

%	Program 3.5: Exponentiation as repeated multiplication
