% unmittelbarer_Teilterm(U,T) U ist unmittelbarer Teilterm von T.
unmittelbarer_Teilterm(U,T):-
    compound(T),
    functor(T,_F,N),
    between(1,N,I),
    arg(I,T,U).

% teilterm(U,T)  U ist Teilterm von T.
teilterm(T,T).
teilterm(U,T):-
    unmittelbarer_Teilterm(V,T),
    teilterm(U,V).

% ?- unmittelbarer_Teilterm(U, f(g(a),X)).
% ?- teilterm(U, f(g(a),X)).
% ?- unmittelbarer_Teilterm(U, f(g(h(X,a),Y,h(Z,X)),c,3)).
% ?- teilterm(U, f(g(h(X,a),Y,h(Z,X)),c,3)).
