Re: Re: Problem with Mathematica 6

*To*: mathgroup at smc.vnet.net*Subject*: [mg77305] Re: [mg77080] Re: [mg77065] Problem with Mathematica 6*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Wed, 6 Jun 2007 07:24:49 -0400 (EDT)*References*: <200706020819.EAA29947@smc.vnet.net> <30015102.1181071420143.JavaMail.root@m35> <op.ttg8bjh0qu6oor@monster.ma.dl.cox.net>

Does this happen when you copy the entire code and then edit it in Mathematica (removing the Ins and the Outs in Mathematica) or when you copy it line by line? In my case I always use the latter approach (and I do not select Ins and Outs before copying) and after pasting into Mathematica everything works fine. Andrzej Kozlowski On 6 Jun 2007, at 10:41, DrMajorBob wrote: > If I copy your code into a notebook and execute it (after painfully > removing all that In[]:= and Out[]:= nonsense) I get this error > message after each use of SmallCircle: > > Set::write: Tag Factorial in 0! is Protected. > > If I go back and excute the SmallCircle uses AGAIN, there's no > error message, because GetGradeds has stored a result and doesn't > repeat the broken test. > > Then, if I put my cursor after != and press space, Quit, and run > the code again, all is well. > > Apparently, the line break between ! and = caused this strange > behavior. The copied code includes what looks like != in the > notebook, but it's actually something else. > > Bobby > > On Sun, 03 Jun 2007 05:05:27 -0500, Andrzej Kozlowski > <akoz at mimuw.edu.pl> wrote: > >> >> On 2 Jun 2007, at 17:19, 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": >>> Grading[_] = 0; >>> 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[22]:= k ** l >>> Out[22]= k*l >>> >>> or >>> >>> In[23]:= a ** l >>> Out[23]= a*l >>> >>> BUT in Mathematica 6.0: >>> >>> In[24]:= a ** b >>> >>> $IterationLimit::"itlim" : "Iteration limit of 4096 exceeded. \ >>> \!\(\*ButtonBox["\[RightSkeleton]", >>> BaseStyle->"Link", >>> ButtonData:>"paclet:ref/message/$IterationLimit/itlim", >>> ButtonFrame->None, >>> ButtonNote->"$IterationLimit::itlim"]\)" >>> Out[24]= Hold[(Times[a]) ** b] >>> >>> However in Mathematica 5.2 one gets >>> >>> In[10]:= a ** b >>> Out[10]=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 >>> >> >> On of the most basic principles in Mathematica programming, stated, >> over the years, a number of times on this list by WRI employees, >> (particularly by David Withoff) is if you choose to Unprotect and >> modify any built-in functions you can only blame yourself for any >> unpleasantness that might occur. The workaround is: don't do it. >> >> One think you can do instead is to do essentially the same thing >> without modifying NonCompputativeMultiply. If you want to use a >> symbol that looks like multiplication you could choose SmallCircle. >> You could then do something like this: >> >> In[1]:= Grading[_] = 0; >> In[2]:= Fermion[a__] := ((Grading[#1] = 1) &) /@ {a}; >> In[3]:= Fermion[a, b] >> Out[3]= {1, 1} >> In[4]:= GetGradeds[a___] := GetGradeds[a] = Select[{a}, Grading[#1] ! >> = 0 &]; >> In[9]:= SmallCircle[z___] /; (Length[GetGradeds[z]] <= 1) := Times >> [z]; >> In[10]:= SmallCircle[z___] := NonCommutativeMultiply[z] >> >> In[13]:= SmallCircle[a, l] >> Out[13]= a l >> >> SmallCircle[a,b] >> >> In[14]:= SmallCircle[a, b] >> Out[14]= a ** b >> >> In[17]:= SmallCircle[a, l, m] >> Out[17]= a l m >> >> Of course instead of writing SmallCircle[a,l,m] you can use as >> input a escape sc escape l escape sc escape m . >> >> Andrzej Kozlowski >> >> > > > > -- > DrMajorBob at bigfoot.com

**References**:**Problem with Mathematica 6***From:*"Michael Weyrauch" <michael.weyrauch@gmx.de>