Genau, im Grunde genommen arbeiten
simplifier auf Baumstrukturen. Aber in der Mathematik ist es nichttrivial zu entscheiden, was genau der Simplifier machen soll.
Am Anfang mag es noch einfach sein. Wenn wir als Eingabeterme z. B. nur rationale Zahlen, Brüche derer und Wurzeln betrachten, könnten wir einfache Heuristiken haben wie: wenn Bruch im Nenner eines Bruches, multipliziere mit dessen Kehrbruch stattdessen. Wenn Wurzel im Nenner eines Bruchs, dann erweitere den Bruch damit usw.
Solche Heuristiken i.Allg. auszuarbeiten, sodass Menschen die maschinell vereinfachten Ausdrücke tatsächlich als vereinfacht bezeichnen würden, ist schwer.
Unter anderem werden sehr viele Vereinfachungen nur noch bedingt anwendbar sein. Zum Beispiel kannst du `sqrt(a^2)` nur dann zu `a` vereinfachen, wenn `a >= 0` angenommen wird. Und wenn `a` keine Variable ist, sondern ein komplexer Ausdruck, dann musst du dafür erst einmal entscheiden, um dieser komplexe Ausdruck `>= 0` ist. (Das sollte i. Allg.
unentscheidbar im Sinne der Berechnungstheorie sein
)