Re: how implement a rule
- To: mathgroup at smc.vnet.net
- Subject: [mg112585] Re: how implement a rule
- From: "Carl K. Woll" <carlw at wolfram.com>
- Date: Tue, 21 Sep 2010 02:04:52 -0400 (EDT)
On 9/20/2010 4:43 AM, Murray Eisenberg wrote: > I want to define a function abs (mimicking Abs) with various properties. > One part of the definition is: > > abs[c_ z_ /; c \[Element] Reals] = Abs[c] abs[z] > > Given that, how might I express that abs[z] is always real in such a way > that the result of > > abs[1/abs[z]^2] > > will be 1/abs[z]^2 -- WITHOUT explicitly introducing, say: > > abs/: abs[1/abs[z_]^2] = 1/abs[z]^2 > > ? > > One can use Refine to help here: nonnegQ[expr_] := Module[{foo = Cases[expr, _abs, Infinity]}, Refine[expr >= 0, Thread[foo > 0]] ] abs[c_?nonnegQ ] := c abs[c_?nonnegQ z_] := c abs[z] In[83]:= abs[1/abs[z]^2] Out[83]= 1/abs[z]^2 Carl Woll Wolfram Research