natural(zero).
natural(X):- X=s(X1), natural(X1).

xPlusYisZ(X, Y, Z):- natural(X), Y=zero, Z=X.
xPlusYisZ(X, Y, Z):- X=zero, natural(Y), Z=Y.
xPlusYisZ(X, Y, Z):- 
natural(X), natural(Y), s(X1)=X, s(Y1)=Y, xPlusYisZ(X1, Y1, Z1), Z=s(s(Z1)).

xTimesYisZ(X, Y, Z):- natural(X), Y=zero, Z=zero.
xTimesYisZ(X, Y, Z):- X=zero, natural(Y), Z=zero.
xTimesYisZ(X, Y, Z):- natural(X), Y=s(zero), Z=X.
xTimesYisZ(X, Y, Z):- X=s(zero), natural(Y), Z=Y.

xTimesYisZ(X, Y, Z):- 
natural(X), natural(Y), s(X1)=X, 
xTimesYisZ(X1, Y, Z1), xPlusYisZ(Z1, Y, Z).

xMinusYisZ(X, Y, Z):- xPlusYisZ(Y, Z, X).

xDivdedByYisZ(X, Y, Z):- xTimesYisZ(Y, Z, X).

