predecessor(bob, P). / \ / \ X = bob, Z = P parent(bob, P) parent(bob, Y), predecessor(Y, P) / \ / \ / P=ann \ P=pat / Y=ann \ Y=pat parent(bob,ann) parent(bob,pat) parent(bob,ann) parent(bob,pat) | | predecessor(ann,P) predecessor(pat,P) yes yes | | P=jim \ Y'=jim parent(bob,ann) parent(bob,pat) parent(bob,ann) parent(ann,P) parent(pat,jim) parent(pat,jim) | | predecessor(jim,P) no yes | \ parent(bob,ann) parent(bob,ann) parent(pat,jim) parent(pat,jim) parent(jim,P) parent(jim,P) | predecessor(P,Z) no | no