Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
NCTM or The Math Forum.



Mathematica and trivial math problems that school children can solve.
Posted:
Feb 16, 2013 1:08 AM


Recently I came across an article in a mathematics and physics journal aimed at high school students. The main reason why it attracted my attention was that its theme was computer algebra and, in particular, Mathematica. The moral of the story was quite sensible: these programs can do wonderful things but don't expect them to be smart, in the human sense, anyway. The example that was given was apparently taken from the Internet as a notorious "breaker" of computer CAS programs. This was the illustration in Mathematica:
Reduce[(10 x + 2)^2009 == (2 x + 4)^2009, x, Reals]
Apparently all CAS programs used to get stuck on this, back in 2009, that is. Well, it is now 2013 and computers are much faster so actually we get:
Timing[Reduce[(10*x + 2)^2009 == (2*x + 4)^2009, x, Reals]] {6.51, x == 1/4}
So, to produce an illustration suitable for the present day we add an extra 0 inside the exponent:
Reduce[(10 x + 2)^20009 == (2 x + 4)^20009, x, Reals]
Mathematica spends far too long to do this than anyone would care to wait, while a reasonably smart school highschooler can do it in no time at all. So should we be disappointed with Mathematica's performance here? Well, the first thing I always want to say when someone comes up with examples of this kind is: don't try to judge CAS programs by the sort of things you can do very well yourself. Chances are they will come up short (one reason I will explain below). The right way to judge CAS program (and perhaps all computer programs) is by testing them on things that we either can't do well or can't do at all, like solving general a polynomial equations of some large degree.
Of course we can easily see the reason for the problem above. When Mathematica is given a polynomial equation to solve, the first thing it does is to expand the polynomials. In the overwhelming majority of cases this will be the right thing to do and only in some very rare ones, like the above, there is a better approach. Does it mean that Mathematica does not "know" the other approach and that it could not be programmed to use it? Of course not. In fact, by slightly changing the problem above you can make Mathematica return the answer almost immediately:
Reduce[(10 x + 2)^(20009 Pi) == (2 x + 4)^(20009 Pi), x,Reals] // Timing
{0.301534, x == 1/4}
All we did above was make the power nonrational, which prevented Mathematica from using the expansion method. Obviously, it would be quite easy to change Reduce, so that it would first look for such special cases before turning to the standard expansionbased algorithm. But would this sort of thing be worth the time spent by the programmer, even if in this case it is very short? Obviously there are lots of other special cases, corresponding to various situations where for some reason standard computer algebra algorithms do not work well or work slowly, but which human beings have no difficulty with. Should they all be implemented by "heuristic" techniques?
Of course this sort of thing (using heuristics when there are not good algorithms) is done quite often. But it is reasonable to do so only if there is a fairly high chance of this sort of situation arising in the course of some naturally occurring computation that was not designed to show that there a human being can beat Mathematica at certain things (actually it is still very easy to show that and it will surely remain so for many years to come). It is not worth spending time and effort only to deprive people certain people of the satisfaction of posting trivial examples of what they call "bugs" in Mathematica. Computers are not intended to replace us (not yet, anyway) but to help us.
Andrzej Kozlowski



