       Re: Problem with Mathematica 6

• To: mathgroup at smc.vnet.net
• Subject: [mg77087] Re: [mg77065] Problem with Mathematica 6
• From: Carl Woll <carlw at wolfram.com>
• Date: Sun, 3 Jun 2007 06:09:04 -0400 (EDT)
• References: <200706020819.EAA29947@smc.vnet.net>

```Michael Weyrauch wrote:

>Hello,
>
>  the following code fragment runs under Mathematica 5.2 but
>produces an infinite recursion error in Mathematica 6.0 in certain cases:
>
>First I define a number of commands and slightly change the
>built-in command "NonCommutativeMultiply":
>Fermion[a__] := ((Grading[#1] = 1) & ) /@ {a};
>Fermion[a, b];
>GetGradeds[a___] := GetGradeds[a] = Select[{a}, Grading[#1] != 0 & ];
>
>Unprotect[NonCommutativeMultiply];
>NonCommutativeMultiply[a___] /; (Length[GetGradeds[a]] <= 1) := Times[a];
>Protect[NonCommutativeMultiply];
>
>If you now e.g. evaluate
>
>In:= k ** l
>Out= k*l
>
>or
>
>In:= a ** l
>Out= a*l
>
>BUT in Mathematica 6.0:
>
>In:= a ** b
>
>\$IterationLimit::"itlim" : "Iteration limit of 4096 exceeded. \
>\!\(\*ButtonBox["\[RightSkeleton]",
>ButtonData:>"paclet:ref/message/\$IterationLimit/itlim",
>ButtonFrame->None,
>ButtonNote->"\$IterationLimit::itlim"]\)"
>Out= Hold[(Times[a]) ** b]
>
>However in Mathematica 5.2 one gets
>
>In:= a ** b
>Out=a**b
>
>which is what I expect and I want to have.
>
>I.e., whenever I NonCommutativeMultiply two variables which are explicitly declared as fermions by the command Fermion[], I get an
>infinite recursion error in Mathematica 6.
>
>This behaviour of Mathematica 6.0 is rather confusing to me, since I believe that I just use very basic and elementary assignments
>in my code. Why shouldn't it work  under Mathematica 6.0 if it works under 5.2? It appears that the 6.0 kernel behaves differently than the
>5.2 kernel in such basic situations. Very unpleasant!
>
>(For anyone who wonders about the purpose of  this (strange) code: It is a small fragment of a package  that implements the handling
>of Grassmann variables. I just extracted that bit in order to show the Mathematica 6.0 problem.)
>
>Furthermore, beyond an explanation of this unexpected behaviour of Mathematica 6, I would like to find a workaround in Mathematica 6 such that I get
>the same result as in Mathematica 5.2.
>
>Thanks for any suggestions.
>
>Michael Weyrauch
>
>
>
>
The problem is that NonCommutativeMultiply is Flat and OneIdentity, so I
think

NonCommutativeMultiply[a,b]

is being interpreted as
NonCommutativeMultiply[NonCommutativeMultiply[a],b] which gets converted
to NonCommutativeMultiply[Times[a],b] and then
NonCommutativeMultiply[a,b] and so you get an iteration error. To avoid
this Flat issue, use HoldPattern:

Unprotect[NonCommutativeMultiply];
HoldPattern[NonCommutativeMultiply][a___] /; (Length[GetGradeds[a]] <=
1) := Times[a];
Protect[NonCommutativeMultiply];

Now, it works:

In:= a ** b
Out= a**b

Carl Woll
Wolfram Research

```

• Prev by Date: Re: Using Part
• Next by Date: Re: Using Part
• Previous by thread: Problem with Mathematica 6
• Next by thread: Re: Re: Problem with Mathematica 6