a(a).
r(a,b).
r(a,c).
s(b,c).

r(X,f(X)):- a(X), not rec(X).
r(X,g(X)):- a(X), not rec(X).
s(f(X),g(X)):- a(X), not rec(X).
d(f(X)):- a(X), not rec(X).
d(g(X)):- a(X), not rec(X).

a(Z):- s(X,Y), not d(X), not d(Y), r(Z,X), r(Z,Y).
rec(Z):- s(X,Y), not d(X), not d(Y), r(Z,X), r(Z,Y).

role(Y,f1(Y)):-s(X,Y), not some(Y).
