user(michael).
user(ana).
user(bob).
user(george).
user(john).

follows(michael, ana).
follows(ana, bob).
follows(bob, michael).

not_member(_, []).
not_member(X, [H|T]) :- dif(X, H), not_member(X, T).

follows(A, B, Seen) :- not_member(B, Seen), follows(A, B).
follows(A, B, Seen) :- follows(A, X), not_member(X, Seen), follows(X, B, [A|Seen]).

follows_tx(A, B) :- follows(A, B, []).

:- follows_tx(michael, bob), writeln('m-b').
:- follows_tx(michael, john), writeln('m-j').
:- follows_tx(A, A), writeln(A), fail.
:- follows_tx(A, B), write(A), write(' -> '), writeln(B), fail.
