Is there a name for the way Maxima does algebra?



To continue on a September thread, which actually continues a February
and last-October thread....

On 9/28/06, Chris Sangwin <sangwinc at for.mat.bham.ac.uk> wrote:
> This has prompted a question in my mind:  can we draw a clear distinction
> between "assumptions" and "theorems"?  For example, we do need to make
> basic assumptions to provide a background against which to work.

Maxima has many assumptions "wired in" to the system, and their
connection to basic axioms is not documented, let alone controllable.

Some assumptions are controllable by global flags, but of course that
is a very blunt instrument.

> This reminds me of the problems I was having with very basic algebraic
> manipulations in Maxima, which simp:false helped to cure.

With simp:false, very little of Maxima will work as expected.
integrate(x^2,x) gives (3^-1*x^3)*1^(-1), and integrate(-x) gives a
nounform (because the integration routines expects -x in the
simplified internal form of (-1)*x).

> It would be very helpful if all assumptions could be explicit and
> controlled.  For me, I wanted to establish if two expressions were "the
> same".  Here I mean up to associativity and commutativity of + and *, but
> no distribution, and no functional operations,

The operators "+" and "*" in Maxima have the usual properties of these
operators over the complex numbers.  As we discussed in February, it
is easy enough to define new operators which have only the properties
of associativity and commutativity:

      declare([plus,times],[commutative,nary]);

This means, however, that plus(1,1), plus(-x,x), and times(0,1)
simplify to themselves unless you explicitly add pattern-matching
simplifications, and it would be very difficult to get to anywhere
near the simplification machinery of the built-in operations.

There is one built-in operator which is rather protean, ".".  A wide
variety of global flags define the exact meaning and behavior of this
operator.  Unfortunately, there is no way currently to have more than
one such operator.

           -s