> Yes, I actually ran into that gotcha myself: AppliedPredicate is not an instance of Predicate (assumedly because making Predicate a class instead of an object would limit it too much). 

I'm actually fine with this.  I think it's good design.  I think OO people call this encapuslation.  The idea, I think is that it's better to make one container class that contains different kinds of predicates/exprs than to make lots of different classes that inherit from each of the predicates.