Re: FindInstance puzzler

*To*: mathgroup at smc.vnet.net*Subject*: [mg83708] Re: [mg83633] FindInstance puzzler*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Wed, 28 Nov 2007 05:48:18 -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>

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>>))-=CF=80)} 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=

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