I guess there are two ways to do this. One would be to make `Predicate` subclass from Expr. Then you could just do `Q.positive**Q.positive` directly. Note that it already subclasses from Boolean, which subclasses from Basic. 

Another way would be to automatically associate with each `Predicate` a `PredicateSymbol`, which would be used in the formulations. The syntax might be something like `Q.positive.s**Q.positive.s` or `QS.positive**QS.positive` (the former stores the symbol on the predicate and the latter creates a new object that keeps track of all the PredicateSymbols).

The first way is obviously syntactically cleaner, but I'm not sure if there are any objections to making predicate subclass from Expr.