%konk(Xs,Ys,Zs)  Konkatenation der Listen Xs und Ys ergibt die Liste Zs.
konk([],Ys,Ys).
konk([X|Xs],Ys,[X|Zs]):-
   konk(Xs,Ys,Zs).

%tes(I,Xs,X)  X ist das I-te Element der Liste Xs.
tes(f(0),[X|Xs],X).
tes(f(N),[Y|Xs],X):-
   tes(N,Xs,X).

%wert(Phi,Xs,W)  Phi(Xs)=W.
wert(o,[],0).
wert(n,[X],f(X)).
wert(p(I),Xs,X):-
   tes(I,Xs,X).
wert([Phi|Psis],Xs,Z):-
   werte(Psis,Xs,Ys),
   wert(Phi,Ys,Z).
wert(r(Phi,Psi),Vs,Z):-
   konk(Xs,[0],Vs),
   wert(Phi,Xs,Z).
wert(r(Phi,Psi),Vs,Z):-
   konk(Xs,[f(Y)],Vs),
   konk(Xs,[Y],Us),
   wert(r(Phi,Psi),Us,U),
   wert(Psi,[U|Us],Z).
wert(my(Phi),Xs,Y):-
   werte_positiv(Phi,Xs,Y),
   konk(Xs,[Y],Vs),
   wert(Phi,Vs,0).

%werte([Phi1,...,PhiN],Xs,[W1,...,WN])  WI=PhiI(Xs) fuer I=1,...,N.
werte([],Xs,[]).
werte([Phi|Phis],Xs,[W|Ws]):-
   wert(Phi,Xs,W),
   werte(Phis,Xs,Ws).

%werte_positiv(Phi,Xs,Y)  Phi(Xs,Z)>0 fuer alle Z<Y.
werte_positiv(Phi,Xs,0).
werte_positiv(Phi,Xs,f(Y)):-
   werte_positiv(Phi,Xs,Y),
   konk(Xs,[Y],Vs),
   wert(Phi,Vs,f(U)).
