I've always been amazed with the TI-$89$'s ability to deal with symbolic expressions so effortlessly. I've attempted to build several CASs in the past (mostly for fun, they are one of the most difficult and interesting programming challenge I'm aware of) and I've never been able to come close to achieving the level of the TI-$89$'s abilities.
Today, I'm working on a domain specific CAS to solve a particular problem. Given a system of equations describing a dynamic system, containing linear and non-linear algebraic equations, and linear differential and integral equations, find an expression for each unknown function $f(t)$ that describes $f(t + h)$ given $f(t)$. I need implicit integration methods, hence the CAS difficulties :). I'm approaching this with a CAS because I need to be able to run the system simulation really, really fast, and I don't know what the system equations are ahead of time to analyze and optimize them, such as finding closed form solutions for parts of the system, only using numerical solutions when absolutely necessary. Once the timestep expressions are found and simplified, I JIT compile them to native machine code to be executed on my input samples.
To solve this problem I really need some capabilities I've never been able to squeeze out of my previous CAS attempts. I've just been sitting here playing with my TI-$89$ and comparing it to Mathematica. The guys that did the TI-$89$ really did some amazing things.
Consider this almost trivial expression:
(x^2-1)/(x-1)
Of course, this simplifies to
x+1
Now, the TI-89 will do this 'natively', just plug in the first expression and it will come back with the second pretty much instantly. However, every CAS I've ever tried this with (Mathematica being the most reliable and reputable) will not simplify this expression without some convincing. For example, in Mathematica, you need to use Cancel[].
I don't think this is just a matter of Mathematica attempting to be more correct by avoiding changing the domain of the function. Entering:
((x + 1)*(x - 1))/(x - 1)
will happily simplify to the expected result without any extra nudges.
This is only a simple example. This trend continues to many other types of expressions and simplifications, especially trig simplifications.
In my own CAS development experience, I've found it nearly impossible to do what the TI-$89$ does, that is, automatically perform these simplifications without wrapping them in a 'hint' function. I've found that both in terms of computational cost, and in pure software engineering difficulty, this is basically impossible to do. Every CAS I've ever built has involved horrendous debugging of infinite recursion and similar bugs due to attempting to match the TI-$89$'s level of automation.
The fact that Mathematica, Sage, etc. also will not perform these simplifications without a 'hint' makes me feel a little better, but the question remains: How on earth did the TI engineers manage to do this with literally a tiny, tiny fraction of the computing power a desktop has? Are there shortcuts the TI-$89$ is taking that couldn't be scaled to the types of expressions Mathematica et al support or something?
For what its worth, this question is mainly asked out of curiosity that's been burning me ever since I tried to build my first CAS a long time ago.
