[Haskell-cafe] Implementing Mathematica
Andrew Coppin
andrewcoppin at btinternet.com
Fri Jun 1 14:27:21 EDT 2007
jerzy.karczmarczuk at info.unicaen.fr wrote:
> Andrew Coppin cites me and asks:
>> I find that statement interesting. I have never come across *any*
>> other package that can perform _symbolic_ mathematics.
>
>> (Sure, there are packages that can perform specific operations -
>> solving certain kinds of equations, transforming matricies,
>> rearranging formulas. But I have never seen any other package where
>> you can just do *anything*.)
>
> You must be joking, but OK, I am naive, and I will answer as it were
> serious. Really, haven't heard about Maple???
> http://www.maplesoft.com/
Last I heard, Maple is simply another fast number-chrunking engine.
> Its limited library is integrated within Matlab Symbolic Toolbox, and if
> you *have* Maple and Matlab, the latter can use the full force of the
> former.
Now Matlab I have heard of. (And I hate it with a passion.)
> Maple is commercial as Mathematica, but there are perfectly
> usable free packages as well, for example Axiom and Maxima (Macsyma
> rekindled).
> http://wiki.axiom-developer.org/FrontPage
> http://maxima.sourceforge.net/
Now this actually looks vaguely promising. (Rather confused at this
point as to what the relationship between Axiom, Maxima, Reduce and Sage
is...)
> The are more free stuff, GAP, MaCaulay,... In general, check
> http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems
I did indeed check that list a while back. I looked at a whole heap of
systems listed, but... half of them didn't seem to exist any more, and
the other half looked very clunky, had strange syntax, and only handled
a few specific constructs.
>> But yes - I have tried to implement that pattern matching engine a
>> couple of times in Pascal. (Remember Pascal?) Getting it to work for
>> a few test cases is easy. Getting it to *properly* handle
>> associativity and commutivity is really nontrivial. (I mean *really*
>> nontrivial! Or perhaps I am an inferior programmer - one of the two!)
>
> The mathematically sensitive matching/substitution is a hard task even if
> you have at your disposal a reasonably full unifier. Forget Pascal, take
> Prolog, which will save several days/weeks of the implementation of basic
> stuff. Even then, it will be quite tedious to write a package able
> say, to
> reduce rational formulae, to reduce a polynomial modulo an ideal, to
> implement the basic trig identities, find a reasonable common form for
> expressions containing complex exponentials AND trigonometrics, etc.
LOL! I did try to learn Prolog once... I never did understand how it was
able to make impossible leaps of deduction like that. And yet, in other,
similar cases, it couldn't figure out the result.
Of course, now I know that the answer is a magic trick known as
unification (although I still don't know much about that topic). Not
really sure how a unifyer would help you manipulate symbolic expressions...
If I get time, I might have another go at implementing the pattern
matching algorithm in Haskell. Of course, even if it works, that's still
a pretty small problem compared to finding a set of transformation rules
that cover all the cases you care about, is reasonably efficient,
produces the right answers...etc...etc...
More information about the Haskell-Cafe
mailing list