% This is a classical Datalog program. path(From, To) :- edge(From, To). path(X,Z) :- edge(X,Y), path(Y,Z). edge(a,b). edge(b,c). edge(c,d). edge(b,a). % a --> b --> c --> d % ^ | % | | % +-----+ $v.