Re: Question on Positive[x]=True

*To*: mathgroup at smc.vnet.net*Subject*: [mg7946] Re: Question on Positive[x]=True*From*: Dick Zacher <dick at loc3.tandem.com>*Date*: Fri, 25 Jul 1997 02:40:22 -0400*Organization*: Tandem Computers*Sender*: owner-wri-mathgroup at wolfram.com

Raya Firsov-Khanin <raya at mech.ed.ac.uk> wrote: > I have the following question. I want to state that a variable > x is positive. On page 1170 of the Third edition of The Mathematica book > it is said that I can do it by making a definition > > Positive[x] = True > > However, while trying to do it I get a message : > > Set::write: Tag Positive in Positive[x] is Protected > > Any suggestions on how one can make variables positive, negative etc? I have seen several postings in response to Raya's query, but none of them mentions this crucial point: To specify that a variable is positive, it is far more useful to specify an upvalue for Sign than for Positive. The reason is that Positive tests the value of Sign for the variable, but the reverse is not true. If you set upvalues for Sign, then you will automatically get correct results for both Positive and Negative -- not only when you test the variables themselves, but also when you test products, quotients, and integral powers of the variables. You don't have to write special rules to handle these cases. Some examples: In[1]:= $Version Out[1]= "Solaris 3.0 (November 22, 1996)" In[2]:= Sign[a] ^= 1; Sign[b] ^= 1; Sign[q] ^= -1; Sign[r] ^= -1; In[3]:= {Positive[a],Negative[a],Positive[q],Negative[q]} Out[3]= {True,False,False,True} In[4]:= {Positive[a*b],Positive[q*r],Negative[a/q],Negative[q^-3]} Out[4]= {True,True,True,True} In[5]:= {Negative[a*x],Positive[q*x]} Out[5]= {Negative[x],Positive[-x]} -- ----------------------------- Dick Zacher Performance Engineering Dept., Tandem Computers zacher_dick at tandem.com phone: 408-285-5746 fax: 408-285-7079