Re: Re: Re: Problem with Mathematica 6
- To: mathgroup at smc.vnet.net
- Subject: [mg77382] Re: [mg77305] Re: [mg77080] Re: [mg77065] Problem with Mathematica 6
- From: DrMajorBob <drmajorbob at bigfoot.com>
- Date: Thu, 7 Jun 2007 04:04:36 -0400 (EDT)
- Organization: Deep Space Corps of Engineers
- References: <200706020819.EAA29947@smc.vnet.net> <30015102.1181071420143.JavaMail.root@m35> <op.ttg8bjh0qu6oor@monster.ma.dl.cox.net> <17489534.1181136418488.JavaMail.root@m35>
- Reply-to: drmajorbob at bigfoot.com
I'd have to retrieve your initial message to test the second method. I = used the first. Both methods are tedious, obviously. Bobby On Wed, 06 Jun 2007 06:24:49 -0500, Andrzej Kozlowski <akoz at mimuw.edu.pl= > = wrote: > 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}, Gradin= g[#1] ! >>> = 0 &]; >>> In[9]:= SmallCircle[z___] /; (Length[GetGradeds[z]] <= 1) := T= imes >>> [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 > > > -- = DrMajorBob at bigfoot.com
- References:
- Problem with Mathematica 6
- From: "Michael Weyrauch" <michael.weyrauch@gmx.de>
- Problem with Mathematica 6