Re: Why doesn't this rule work?

*To*: mathgroup at smc.vnet.net*Subject*: [mg32451] Re: Why doesn't this rule work?*From*: "Allan Hayes" <hay at haystack.demon.co.uk>*Date*: Tue, 22 Jan 2002 03:19:11 -0500 (EST)*References*: <a2ghu1$ki$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

James, I haven't sorted out what is happening but it seems to be due to the initial matching, before the condition is tested. If we move the condition to the right side of the rule (and make the necessary change ot RuleDelayed) everything works: c - a - b /. (n1_.)c + (n2_.)a :> n1b /; n1 == -n2 0 Also we have, Simplify[c - a - b, c - a == b] 0 -- Allan --------------------- Allan Hayes Mathematica Training and Consulting Leicester UK www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565 "James Jennings" <djeimz at no.spam.megaseattle.com> wrote in message news:a2ghu1$ki$1 at smc.vnet.net... > Suppose I want to simplify expressions linear in a, b, and c where a+b=c > -- something of this sort. > > In[]:= a+b /. a+b -> c > > Out[]= c > > In[]:= a+b+c /. a+b -> c > > Out[]= 2 c > > With more complicated coefficients I can use: > > In[]:= -2 a - 2 b /. n_. a+n_. b -> n c > > Out[]= -2 c > > In[]:= -a-b+c /. n_. a+n_. b -> n c > > Out[]= 0 > > I also want to apply rules based on c-a=b > > In[]:= c-a /. n1_. c+n2_. a /; n1==-n2 -> n1 b > > Out[]= b > > The problem comes with I apply the above rule to longer expressions. > > In[]:= c-a-b /. n1_. c+n2_. a /; n1==-n2 -> n1 b > > Out[]= -a-b+c > > Why didn't that work? I had thought that since Plus[] is Orderless, my > rule ought to be applied to all pieces of my expression, but it doesn't > appear to be. > > --- > > Before someone suggests that I should just set c = a+b and be done with > it, my actual problem involved 12 objects like a, b, and c, where 16 > distinct triplets add up like a+b=c. I'm looking for rules that will > keep my expressions as short as possible, even if they aren't unique. > > Thanks. > James >