MathGroup Archive 2000

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

Search the Archive

Re: Re: Conversion of Orderless functions to non Orderless one

Just a small correction to my earlier code. It should have been:

times[l___] := 
  Times @@ DeleteCases[{l}, a | b | c] *
    NonCommutativeMultiply @@ Cases[{l}, a | b | c]

(* instead of **). Of course this code only makes sense under the assumption
that a,b,c commute with all the other elements  not belonging to the set

As I wrote in my original message, if you want to do any serious
computations you need something much more sophisticated, like the NCAlgebra

on 00.6.22 2:02 PM, Andrzej Kozlowski at andrzej at wrote:

> It seems you want to be able to do some non-commutative algebra. The
> question is "how much?" If you want to do only what you wrote in your
> posting and no more than the following might be enough.
> In[1]:=
> SetAttributes[times, {Flat, OneIdentity}]
> In[2]:=
> times[l___] := 
> Times @@ DeleteCases[{l}, a | b | c] **
> NonCommutativeMultiply @@ Cases[{l}, a | b | c]
> Now you can get something like what you asked for:
> In[4]:=
> times[c, x, y, b, v, a, z]
> Out[4]=
> (v x y z) ** c ** b ** a
> However,if  you want be able to do any algebra, e.g. expand expressions etc.
> then the the only choice (not involving a lot of
> programming) seems to be to download the NonCommutative algebra package
> available on MathSource. It is a powerful package which I used quite lot
> about a year ago. You should be warned however of several problems. First of
> all, the documentation is very inconvenient, being in the form of a dvi file
> without hyperlinks. Secondly, it is not really a proper Mathematica  package
> (it does not use contexts). The easiest way to load it is  to use
> SetDirectory to enter the NCAlgebra directory and load the NCAlgebra.m file
> (which loads in  a number of individual  files of which this "package"
> consists of) with:
> << NCAlgebra`
> The functions defined in this "package" allow you to do a lot of
> non-commutative algebra, of the kind
> you seem to be interested in, but you have to carefully  avoid using many
> built in functions (e.g. you should use NonCommutativeExpand, not Expand,
> you can't use the built in  Power, and so on. Of course I do not mean that
> your computer will explode if ytou do so, just that you will get answers
> which are likely to be wrong). It would certainly seem a good idea for
> Mathematica to include more non-commutative functions than the very
> rudimentary NonCommutativeMultiply. There has been some talk about this for
> a long time but so far other things seem to have been given higher priority.
> Andrzej
> -- 
> Andrzej Kozlowski
> Toyama International University, JAPAN
> For Mathematica related links and resources try:
> <>
> on 6/21/00 3:20 PM, zhl67 at at zhl67 at wrote:
>> Hi, there
>> My question might be silly to somebody out there but it really bothers
>> me: Is there any way to convert an orderless function into non
>> orderless ones for a certain range of arguments?
>> For instance, let's say have a set Operators:
>> Operators={a,b,c}
>> What I wanted to do is that whenever expressions like Times[b,a,c] is
>> entered, the outcome should look like b**a**c (i.e. Times turned into
>> NonCommutativeMultiply). The special requirement is that this change
>> happens only for members of the set Operators (otherwise I can just
>> ClearAttributes[Times,Orderless] ), and that the output keeps the order
>> of the input argument, i.e. it should be b**a**c, NOT a**b**c. Could
>> anyone help the case?
>> Liu Zhao
>> Univ. York, UK
>> Sent via
>> Before you buy.

Andrzej Kozlowski
Toyama International University

  • Prev by Date: Re: RE: Re: User problem
  • Next by Date: Re: imposing side conditions on Solve
  • Previous by thread: Re: Conversion of Orderless functions to non Orderless one
  • Next by thread: Re: Conversion of Orderless functions to non Orderless one