I have been intrigued and amazed by computer algebra systems since I first did simple algebra problems on an Apple II (I don’t remember the name of the program, though). The set of systems that we have available is quite amazing, yet, I think that we are missing some important tools.
The great thing about all software is that anything that is in software is sufficiently formalized that there must be solid rules governing it. What would be really nice is to have a computer algebra system that not only applied the rules, but also encoded them in a way that people could read the source code for the system and learn deeper mathematics themselves.
The only full-fledged computer algebra system I am aware of that is open-source is Maxima. However, there is nothing in maxima, its code, or its documentation which describes how it works. What is needed is a system written in Donald Knuth’s “literate” methodology – where the code itself can either build the software, or it can compile into a book describing how the system works.
It would be a great teaching tool – for math, for computer science, for anyone, to have the ability to peek inside a computer algebra system and actually see what it is doing.
The second thing that is needed in a computer algebra system is to be usable by a variety of different languages. That is, we need a common system that can be pulled into C#, Swift, Python, and JavaScript at minimum. By having a JavaScript implementation, it could run fully in a browser if needed. Because of this, I think an implementation in Haxe would be useful, as Haxe can export to all of those languages.
The third thing that is needed is the ability to take a set of formulas and build functions. Those functions are then permanently stored separately from the file that described them. I discovered this working on a physics project. We had a set of equations, and we needed to solve for a certain variable. What would have been great is to just input the equations as a system, and then have the software generate new equations depending on what variables we needed solving for. That’s step one. Step two would be to generate a static source file with those equations so that it wouldn’t have to re-solve the equations at startup. Step two isn’t absolutely needed, but I could imagine a scenario where the equations take a long time to build, so it would be better to have the ability to have the solved equations ready-to-go at load time.
With a system like this, I can build a library just by typing in equations. The computer algebra system can then automatically determine how to navigate through the equations to solve for what I’m looking for.
Finally, the computer algebra system needs to separate its core functionality from its frontend. It should not have its own language. It should just be a library that operated as it was told. Other people could invent a language for it to sit on, but it would just be a library in that language.
Anyway, that’s what I would like in a computer algebra system. Maybe someday I’ll write one. Probably not today.