MathGroup Archive 1998

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Non-commutative algebra

> Recently I was showing some computations in non-commutative algebra to
> my students. This is very easy to do in Mathematica 3.0. Basically all
> you need to do is to Clear the attribute Orderless in Times and use
> Mathematica as usual. However, my university (for various reasons)
> still has Mmma 2.2 installed on all the computers in the class where I
> teach, so after making my notebook using 3.0 I tried the same
> computations in 2.2. To my surprise the answers came out wrong! I soon
> realized that Expand in Mathematica 2.2 has commutativity "built in"
> quite independently from the Orderless attribute of Times. To see this
> all you need to do is to evaluate:

I always cringe when I hear of modifying important characteristics of
basic functions.  This rarely has the desired effect.  Most functions
like Expand make basic assumptions about operations such as
multiplication and addition, in all versions of Mathematica.  This is a
reflection of the fact that most of the underlying algorithms rely on
those assumptions.  If you consider algorithms that are designed for
use with conventional multiplication and addition, it is rarely the
case that the same algorithms will continue to work even if the meaning
of multiplication is changed, and sometimes the algorithms won't even
be mathematically meaningful.  Also, in the cases where an algorithm
can be constructed that will work for arbitrary properties of
multiplication and addition, it is rare that such an algorithm will be
as efficient as an algorithm that has been optimized for use with a
particular algebra.

A separate question is whether or not functions such as Expand could or
should somehow be modified, probably by invoking separate algorithms,
to handle operations in other algebras.  That is an interesting
question, and one that many people have considered.

In current versions of Mathematica, however, the best way to do this
sort of thing is to program it yourself using other functions.  The
approach you mentioned in 

> (Fortunately by using Distribute I was able to define my own Expand in
> 2.2 which does not assume commutativity, so this problem no longer has
> a practical significance for me, it's just a matter of wanting to
> understand what happened).

is one way to do that.  There are quite a few other ways, and there are
also several packages on MathSource that provide for operations over
non-commuting algebras.

Dave Withoff
Wolfram Research

  • Prev by Date: Re: processing {x,y,z} data
  • Next by Date: Integrate Bug?
  • Previous by thread: Re: Non-commutative algebra
  • Next by thread: Re: Non-commutative algebra