


% nat(N) gdy N jest liczbą naturalną
% z, s(z), s(s(z)), ...

nat(z).

nat(s(X)) :- nat(X).

% plus(X, Y, Z) gdy X+Y=Z

plus(z, Y, Y). % :- nat(Y).

plus(s(X), Y, s(Z)) :- plus(X, Y, Z). %, nat(X), nat(Y), nat(Z).

% minus(X, Y, Z) gdy X-Y=Z

minus(X, z, X). % :- nat(X).

minus(s(X), s(Y), Z) :- minus(X, Y, Z). %, nat(X), nat(Y), nat(Z).


minus2(X, Y, Z) :- plus(Y, Z, X).

% fib(K, N) gdy N to K-ta liczba Fibonacciego

fib(K, N) :- fib(K, _, N).

% fib(K, N1, N2) gdy N1 to (K-1)-sza i N2 to K-ta liczba Fibonacciego

fib(z, z, z).
fib(s(z), z, s(z)).

fib(s(K), N2, N3) :- fib(K, N1, N2), plus(N1, N2, N3).


