No one is suggesting that the simplify function should be removed.
Rather it should be easier to control evaluation and simplification
for those who want to. The problem with SymPy right now is that
automatic "evaluation" (really automatic simplification) prevents
expressions from having certain forms e.g.:
>>> print(1/sqrt(2))
sqrt(2)/2
Here I might want the expression to stay as 1/sqrt(2) rather than
evaluate to sqrt(2)/2 but it's difficult to make that happen. You can
use evaluate=False but then you need to keep using evaluate=False all
the time and not all operations even accept evaluate=False.
All of automatic evaluation, doit and simplify suffer from the basic
premise that there is only one way that an expression should be. For
example doit presumes that there is only one thing that should be done
when there are many possible things that you might want to do in
transforming an expression from one form to another. Of course with
doit and simplify you have the option not to call those functions but
in the case of automatic evaluation you don't really have that option
in SymPy as it stands. The evaluate(False) context manager breaks most
things and the evaluate=False keyword argument is tedious and not
universally usable.
What is needed is a system that at least at the lowest level does not
have automatic evaluation. It is possible to build any kind of
evaluation on top of that at a higher level but the converse is not
true.
--
Oscar