Why doesn't this rule work?

*To*: mathgroup at smc.vnet.net*Subject*: [mg32447] Why doesn't this rule work?*From*: James Jennings <djeimz at no.spam.megaseattle.com>*Date*: Mon, 21 Jan 2002 02:54:59 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

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