The transitivity property of relations creates rules like:

?X[prop->?Y] :- ?X:domain, ?Z:domain, ?X[prop->?Z], ?Z[prop->?Y].

It is much more efficient to have tail- or head-recursion instead of double recursion.

The rewriter creates rules like:

?X[prop->?Y] :- ?X:domain, ?Z:domain, ?X[directprop->?Z], ?Z[prop->?Y].

In addition if ?X is bound the following rule is more efficient:

?X[prop->?Y] :- ?X:domain, ?Z:domain, ?X[prop->?Z], ?Z[directprop->?Y].

otherwise (if ?Y is bound) the first rule is better.