While reading the code I found following in ExpressionOperators like
GreaterThanExpr, LessThanExpr etc.,

assert(left instanceof Comparable);
assert(right instanceof Comparable);

if (((Comparable)left.result).compareTo((Comparable)right.result) > 0)

There is no use of assert statements here. Since if assertions are false,
ClassCast Exception will be thrown in any case on the very next line and
execution will correctly halt.

Since we recommend to push-up filter, the cost of doing  instanceof may
potentially be paid for every  tuple in the dataset. Getting rid of these
assert statements will save us few cycles.