Re: FindInstance puzzler

*To*: mathgroup at smc.vnet.net*Subject*: [mg83730] Re: [mg83633] FindInstance puzzler*From*: Adam Strzebonski <adams at wolfram.com>*Date*: Thu, 29 Nov 2007 06:25:23 -0500 (EST)*References*: <200711260849.DAA29897@smc.vnet.net> <55F7C11F-CAB8-47B4-AE40-DA470C74C8C1@mimuw.edu.pl> <474AF639.50705@wolfram.com> <52B4543A-8103-4C24-9786-8C554D247748@mimuw.edu.pl> <4B6A6861-0084-47E8-9A27-8669BE71D6CE@mimuw.edu.pl> <474C80D1.8010000@wolfram.com> <8859234C-9C3A-4389-8D8E-224BBBB76599@mimuw.edu.pl>*Reply-to*: adams at wolfram.com

Andrzej Kozlowski wrote: > > On 28 Nov 2007, at 05:40, Adam Strzebonski wrote: > >> Andrzej Kozlowski wrote: >>> *This message was transferred with a trial version of CommuniGate(tm) >>> Pro* >>> On 27 Nov 2007, at 17:05, Andrzej Kozlowski wrote: >>>> Reduce[2*y*I*Sqrt[x] + 2*(y - I*Sqrt[x]) == 0, {x, y}, Reals] >>> This should have been: >>> In[17]:= Reduce[2*y*I*Sqrt[x] + 2*(y - y*I*Sqrt[x]) == 0, >>> {x, y}, Reals] >>> During evaluation of In[17]:= Reduce::nddc:The system 2 \[ImaginaryI] >>> Sqrt[x] y+2 (y-\[ImaginaryI] Sqrt[x] y)\[LongEqual]0 contains a >>> nonreal constant 2 \[ImaginaryI]. With the domain >>> \[DoubleStruckCapitalR] specified, all constants should be real. >> >>> Out[17]= Reduce[2*I*Sqrt[x]*y + 2*(y - I*Sqrt[x]*y) == 0, >>> {x, y}, Reals] >>> but it other than that it does not change anything. Note that: >>> Reduce[Simplify[2*y*I*Sqrt[x] + 2*(y - y*I*Sqrt[x]) == 0], {x, y}, >>> Reals] >>> y==0 >>> What I really mean tto say is: wouldn't it be a litte better to first >>> automatically apply Simplify in such situation to see if the I's >>> could be got rid of? >>> Andrzej Kozlowski >> >> It think this behaviour is correct. Reduce should disallow any non-real >> subexpressions when the domain Reals is specified. The fact that it >> cannot detect potentially non-real functions that cancel during input >> processing is more problematic, but hard to avoid. >> >> Adam Strzebonski > > Well yes, but... There are plenty of real valued functions for which it > is hard to give an explicit expression not involving complex numbers. > For example, the function > > g[x_] := Sec[(1/2)*Arg[I*Sin[x]]]*(Sqrt[I*Sin[x]] - > I*Sqrt[Abs[Sin[x]]]*Sin[(1/2)*Arg[I*Sin[x]]]) > > is always real valued for real x. In fact, Mathematica is able to show > that this is so: > > ComplexExpand[Im[g[x]], TargetFunctions -> {Re, Im}] > 0 > > Moreover, Mathematica can even solve (well, almost) the following: > > Reduce[g[x] == 1 && Element[x, Reals], x] > > Reduce::ztest:Unable to decide whether numeric quantities {1/8 (-8 > tan-1(1-Power(<<2>>))-Ï?)} are equal to zero. Assuming they are. >> > > Element[C[1], Integers] && (x == (1/2)*(4*Pi*C[1] - Pi) || x == > (1/2)*(4*Pi*C[1] + 3*Pi) || > x == (1/2)*(4*Pi*C[1] + Pi)) > > But even so, it won't even touch: > > Reduce[g[x] == 1, x,Reals] > > I guess the reason why I am not happy about it is that I am used to > telling students that an expression is not "complex" valued just because > it has complex numbers in it. This behaviour would seem to confirm them > in this, in my opinion, quite wrong anti-complex prejudice. Still, I > admit, being able to dismiss certian inputs out of hand, clearly makes > the job of a CAS easier ;-) > > Andrzej Kozlowski With domain Reals specified, Reduce looks for solutions for which all constants and function values are real. So in Reduce[g[x]==1, x, Reals] g[x] does not need to be real valued for all x, but for x0 to be considered a solution, all subexpressions of g[x] need to be real valued at x0. Hence Sqrt[I*Sin[x0]], I*Sin[x0] and I all need to be real valued. Since a non-real constant is not real valued for any value of x, there are no solutions. Technically, Reduce could return False here, but I think it is better to give a warning message instead. As you noted, if you are looking for solutions for which x is real but subexpressions of g[x] are allowed to be non-real, Reduce[g[x] == 1 && Element[x, Reals], x] works just fine. Best Regards, Adam Strzebonski Wolfram Research

**References**:**FindInstance puzzler***From:*Mark Fisher <particlefilter@gmail.com>