# Pastebin SZklR7W2 parent(bob, nancy). parent(nancy, dave). ancestor(X,Y) :- parent(X,Y). ancestor(X,Z) :- parent(X,Y), ancestor(Y,Z) becomes name : type bob, nancy : name parent : name -> name -> type fact1 : parent bob nancy fact2 : parent nancy dave rule1: ancestor X Y <- parent X Y rule2: ancestor X Z <- parent X Y <- ancestor Y Z then you can ask for results and instead of getting ? ancestor(bob,X) X = nancy X = dave you get the derivation ? X : ancestor bob Y rule1 fact1 : ancestor bob nancy rule2 fact2 (rule1 fact1) : ancestor bob dave