% Berechnung der Peter'schen Funktion mit Term-Reduktion
% Beispiel: Berechne p(1,2):
% ?- p(1,2) ==>* T.        und dann wiederholt Strichpunkt eingeben.

% Deklaration der Relationen =>, ==> und ==>* als Infix-Operatoren
:- op(700,xfx,=>).
:- op(700,xfx,==>).
:- op(700,xfx,==>*).

p(0,Y) => Y1  :-  number(Y), Y1 is Y+1.
p(X1,0) => p(X,1)  :-  X1>0, X is X1-1.
p(X1,Y1) => p(X,p(X1,Y))  :-  number(Y1), X1>0, Y1>0, X is X1-1, Y is Y1-1.

S ==> T  :-  S => T.
p(R,S) ==> p(R,T)  :-  S ==> T.

T ==>* T.
R ==>* T  :-  R ==> S, S ==>* T.
