Right, I see this as the third way: stating transitivity which must not be asserted explicitly. The question arises what one would want to reach with a call to
transitive(descendant).
(aside: the X =.. [F,A,B] is the prolog way of saying eval("F(A,B)"). and make it callable)