
% Regression to infinity and fairness

successor(a, b).
successor(b, c).
successor(X, Z) :- successor(X, Y), successor(Y, Z).


% Query:
% ?- successor(a, X).
% WARNING: a second 'next' produces a regression to infinity:
% 
% By rearranging the clauses in a different order:
%
% successor(X, Z) :- successor(X, Y), successor(Y, Z).
% successor(a, b).
% successor(b, c).
%
% the clause produces an infinite regression upfront.
% Could you explain why?
