Re: FullSimplify regress?
- To: mathgroup at smc.vnet.net
- Subject: [mg81421] Re: FullSimplify regress?
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sun, 23 Sep 2007 04:26:55 -0400 (EDT)
- References: <52E282C5-DA4D-4206-95DB-DEB5AEBA0958@mimuw.edu.pl> <46F453E9.4060903@wolfram.com>
On 22 Sep 2007, at 08:29, Adam Strzebonski wrote:
> Andrzej Kozlowski wrote:
>> *This message was transferred with a trial version of CommuniGate
>> (tm) Pro*
>> In Mathematica 5.2:
>> FullSimplify[ComplexExpand[ArcTan[Cos[Arg[z w]-Arg[z]-
>> Arg[w]],Sin[Arg[z w]-Arg[z]-Arg[w]]],{z,w},TargetFunctions->
>> {Re,Im}]]
>> 0
>> In Mathematica 6.01:
>> FullSimplify[ComplexExpand[
>> ArcTan[Cos[Arg[z*w] - Arg[z] - Arg[w]],
>> Sin[Arg[z*w] - Arg[z] - Arg[w]]], {z, w},
>> TargetFunctions -> {Re, Im}]]
>> ArcTan[Cos[ArcTan[Re[w], Im[w]] + ArcTan[Re[z],
>> Im[z]] - ArcTan[Re[w]*Re[z] - Im[w]*Im[z],
>> Re[z*Im[w] + w*Im[z]]]],
>> -Sin[ArcTan[Re[w], Im[w]] + ArcTan[Re[z], Im[z]] -
>> ArcTan[Re[w]*Re[z] - Im[w]*Im[z],
>> Re[z*Im[w] + w*Im[z]]]]]
>> This looks like a bit of a regress to me.
>> Andrzej Kozlowski
>
> Since FullSimplify always works with the simplest form found so far,
> adding simplification rules may result in preventing other rules from
> working for some expressions.
>
> In V5.2 FullSimplify did not simplify the following expressions:
>
> In[1]:= Re[x]+Re[y]//FullSimplify
> Out[1]= Re[x] + Re[y]
>
> In[2]:= Im[z]*Re[w] + Im[w]*Re[z]//FullSimplify
> Out[2]= Im[z] Re[w] + Im[w] Re[z]
>
> in V6.0 it does
>
> In[1]:= Re[x]+Re[y]//FullSimplify
> Out[1]= Re[x + y]
>
> In[2]:= Im[z]*Re[w] + Im[w]*Re[z]//FullSimplify
> Out[2]= Re[z Im[w] + w Im[z]]
>
> However, for the particular expression from your example,
> simplifying a sum of real parts prevents another, more useful
> in this case, simplification.
>
> If you explicitly apply TrigToExp before FullSimplify,
> V6.0 can simplify the expression to zero.
>
> In[3]:= FullSimplify[TrigToExp[ComplexExpand[
> ArcTan[Cos[Arg[z*w] - Arg[z] - Arg[w]],
> Sin[Arg[z*w] - Arg[z] - Arg[w]]], {z, w},
> TargetFunctions -> {Re, Im}]]]
>
> Out[3]= 0
>
> Best Regards,
>
> Adam Strzebonski
> Wolfram Research
Thanks. This is very reasonable and, in fact, as I had exected.
However, this example strengthens a thought I have been having for
some time, which is that perhaps Mathematica needs a new function,
distinct form FullSimplify, for proving algebraic identities
(including exact numerical ones). I am referring to something that a
culd hbe used to verify an identity like
ArcTan[Cos[Arg[z w]-Arg[z]-Arg[w]],Sin[Arg[z w]-Arg[z]-Arg[w]]]==0
A user who wants to evaluate this sort of expression is not really
asking for the "simplest form" of the left hand side but only wants
to know if it can be shown that it is 0 or not. This seems to me to
be really quite a different question and the whole approach with
reducing complexity does not appear the most natural one. In fact, in
such a situation it would be natural to apply sequences of
transformations such as CompexExpand, TrigToExp and many others to
the left hand side whether they individually increase or decrease
complexity. Of course one would need some strategy of limiting the
number of different combinations of different transformations but the
guiding principle should be trying to reduce the given expression to
standard forms and well known identities rather than reducing some
particular transformation by means of certain transformation
functions. (In addition numerical methods based on substitution of
random values should be used to try to disprove the identity). Such a
function would be, of course, in many ways similar to FullSimplify
(it might even use FullSimplify) but it could be optimized for a
different purpose. (Although Reduce can sometimes be used in this way
it is clearly far from "optimized" for this purpose. For example, the
answer returned by
Reduce[Cos[x]^2 + Sin[x]^2 == 1, x]
(Element[C[1], Integers] && x == 2*Pi*C[1] + Pi) ||
NotElement[(x - Pi)/(2*Pi), Integers]
is a rather convoluted way of saying "all complex numbers x".)
Andrzej Kozlowski