Re: gives wrong result
- To: mathgroup at smc.vnet.net
- Subject: [mg125890] Re: gives wrong result
- From: Yi Wang <tririverwangyi at gmail.com>
- Date: Fri, 6 Apr 2012 05:53:54 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
Dear Bob, Thanks a lot for your reply! Your suggestion indeed works but I am still curious about it: Because I used Replace instead of ReplaceAll by purpose. This is to mean, in the rule I want Mathematica to match the entire expression instead of part of it. For example, if I am not using Simplify, but instead use the rule directly: Replace[aa PDD[z, d], aa_. PDD[bb_, cc_] :> -bb PDD[aa, cc]] I get the (correct) non-zero result. Thus there is still something I don't understand in Simplify[]. Thanks again, Yi PS: I am new to this discussion group. Thus I am not sure if directly reply to your personal email and cc to the group is appropriate. If not, sorry, and let me know so that I will stop doing it to you and others. On Thu, Apr 5, 2012 at 7:38 AM, Bob Hanlon <hanlonr357 at gmail.com> wrote: > ClearAll[PDD, try, t, z, aa]; > > PDD[a_?NumericQ, idx_] := 0; > > t = aa PDD[z, d]; > > try[expr_] := Replace[expr, aa_. PDD[bb_, cc_] :> -bb PDD[aa, cc]]; > > Simplify[t, TransformationFunctions :> {try}] > > 0 > > The default value for aa in aa_. PDD[bb_, cc_] is one. Consequently, > PDD[z, d] by itself matches the LHS of the rule and becomes -z PDD[1, > d] which evaluates to zero. Note the behavior if the default is > removed: > > try[expr_] := Replace[expr, aa_ PDD[bb_, cc_] :> -bb PDD[aa, cc]]; > > Simplify[t, TransformationFunctions :> {try}] > > aa PDD[z, d] > > > Bob Hanlon > > > On Thu, Apr 5, 2012 at 5:52 AM, Yi Wang <tririverwangyi at gmail.com> wrote: >> Hi, all, >> >> I met a problem when using the TransformationFunctions option in Simplify: >> >> ClearAll[PDD,try,t,z,aa]; >> PDD[a_?NumericQ, idx_] := 0; >> t = aa PDD[z, d]; >> try[expr_] := Replace[expr, aa_. PDD[bb_, cc_] :> -bb PDD[aa, cc]]; >> Simplify[t, TransformationFunctions :> {try}] >> >> I expect Simplify to do nothing, because the replace rule in try[] does not make the function simpler in this special case. However, Simplify[...] returns 0. >> >> If I delete the line " PDD[a_?NumericQ, idx_] := 0; ", Simplify will give the correct result. However, z (or N[z]) is not a number thus it seems the above line shouldn't matter. >> >> I also tried several other tests. I found a_?NumberQ, a_?IntegerQ both have the above problem, while a_ListQ has the desired behaviour. >>