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.