
% Aufgabe 2:

% Primärschlüsselbedingung verletzt

% ?- p(X,Y1,Y2),p(X,Z1,Z2),(Y1\=Z1;Y2\=Z2).

% schlägt nicht bei doppelten Tupeln an
% das müsste über Klauselreferenzen gelöst werden:

% ?- clause(p(X,Y1,Y2),true,R1),
     clause(p(X,Z1,Z2),true,R2),
     ((R1\=R2,Y1=Z1,Y2=Z2);
      (Y1\=Z1;Y2\=Z2)).

p(1,hans,13).
p(2,hans,13).
p(1,hans,14).
p(1,hans,13).
p(3,susi,15).


% Aufgabe 3:

% == überprüft die Identität zweier Ausdrücke; Variable müssen den gleichen Namen haben
% =@= gelingt auch, wenn Variable unterschiedliche Namen haben, aber koreferieren

% Aufgabe 4:

sub(A,B) :- copy_term(A,A1),copy_term(B,B1),A1=B1,B=@=B1.

% ?- sub(a(X),a(a)).
% Yes
% ?- sub(a(X,Y),a(a,b)).
% Yes
% ?- sub(a(X,b),a(a,b)).
% Yes
% ?- sub(a(X,X),a(a,b)).
% No
% ?- sub(a(X,Y),a(a,Z)).
% Yes
% ?- sub(a(X,b),a(a,Y)).
% No

