Re: Assertion propagation
- To: mathgroup at smc.vnet.net
- Subject: [mg16460] Re: [mg16366] Assertion propagation
- From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
- Date: Sat, 13 Mar 1999 02:21:59 -0500
- Sender: owner-wri-mathgroup at wolfram.com
On Thu, Mar 11, 1999, Kevin Jaffe <kj0 at mailcity.com> wrote: >In Section 2.3.5 of the manual, it says: > > However, Mathematica does not automatically > propagate assertions, so it cannot determine for > example that IntegerQ[x^2] is True. You must load > an appropriate Mathematica package to make this > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > possible. > >Which package is this? > >Thanks, > >KJ I do not think there is any such package (???). However it is easy to amke one. Here is an example: In[1]:= In[1]:= Unprotect[IntegerQ]; IntegerQ[HoldPattern[Plus[x___]]]:=Apply[And,Map[IntegerQ,{x}]]; IntegerQ[HoldPattern[Times[x___]]]:=Apply[And,Map[IntegerQ,{x}]]; IntegerQ[x_^y_/;IntegerQ[x]&&IntegerQ[y]&&Positive[y]]=True; Protect[IntegerQ]; Now you define some variables to be integers: In[2]:= x/:IntegerQ[x]=True;y/:IntegerQ[y]=True; Now Mathematica will "propagate assertions", to a limted extend of course: In[3]:= IntegerQ[x+y] Out[3]= True In[4]:= IntegerQ[x^2] Out[4]= True In[5]:= IntegerQ[x^x] Out[5]= False However, if we add the rule: In[6]:= x/:Positive[x]=True Out[6]= True You have to be careful not to exect too much, e.g. In[7]:= IntegerQ[x(x+1)/2] Out[7]= False while of course x(x+1)/2 is an integer. Andrzej Kozlowski Toyama International University JAPAN http://sigma.tuins.ac.jp/ http://eri2.tuins.ac.jp/