code: public Expression rewriteExpressionAllowNonDeterministic(Expression expression, Predicate<Symbol> symbolScope)
      {
          return rewriteExpression(expression, symbolScope, true);
      }
docs: Attempts to rewrite an Expression in terms of the symbols allowed by the symbol scope
  given the known equalities. Returns null if unsuccessful.
  This method allows rewriting non-deterministic expressions.