MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: The domain parameter of Reduce[]

  • To: mathgroup at smc.vnet.net
  • Subject: [mg124180] Re: The domain parameter of Reduce[]
  • From: Adam Strzebonski <adams at wolfram.com>
  • Date: Wed, 11 Jan 2012 17:23:23 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201201101059.FAA27797@smc.vnet.net> <E9C5C418-1769-4B02-9F9D-51DE21A131B8@mimuw.edu.pl>
  • Reply-to: adams at wolfram.com

Andrzej Kozlowski wrote:
> On 10 Jan 2012, at 11:59, Szabolcs wrote:
> 
>> My question if motivated by
>> http://stackoverflow.com/questions/8780068/mathematica-finding-the-conditions-for-the-real-part-of-a-complex-number-to-be
>> 
>> 
>> It seems that
>> 
>> Reduce[{ComplexExpand@Re[-1 - Sqrt[a - b] ] < 0, a > 0, b > 0}, {a,
>> b}, Complexes]
>> 
>> will return a different result from
>> 
>> Reduce[{ComplexExpand@Re[-1 - Sqrt[a - b] ] < 0, a > 0, b > 0}, {a,
>> b}]
>> 
>> Also the result of this latter calculation seems incorrect (I
>> didn't expect 'b' to be restricted to be less than 'a')
>> 
>> How does the domain parameter of Reduce work?  Isn't Complexes the
>> default domain?  What changes if we specify Complexes explicitly?
>> Also, if the result of the second example incorrect (a bug)?
>> 
> 
> 
> There is something pretty fishy here, I would say.
> 
> 
> Reduce uses the following principle: everything appearing on an
> algebraic level in an inequality will be assumed to be real,unless
> the domain Complexes is used.
> 
> 
> Consider first both expressions without ComplexExpand:
> 
> In[17]:= Reduce[{Re[-1 - Sqrt[a - b]] < 0, a > 0, b > 0}, {a, b}]
> 
> a > 0 && (b >= a || 0 < b < a)
> 
> Reduce[{Re[-1 - Sqrt[a - b]] < 0, a > 0, b > 0}, {a, b}, Complexes]
> 
> a > 0 && (b >= a || 0 < b < a)
> 
> The answers are identical and both are actually equivalent to the
> given assumption a>0&&b>0. Reduce did not assume that Sqrt[a-b] is
> real because of the presence of Re (this is what is mean by
> "algebraic level": Re[x] is not "algebraic"). Now consider:
> 
> ComplexExpand@Re[-1 - Sqrt[a - b]]
> 
> -1 - ((a - b)^2)^(1/4) Cos[1/2 Arg[a - b]]
> 
> Now there is no Re here and ((a - b)^2)^(1/4) is algebraic. So it
> will be assumed to be real. But this assumption, of course,  does not
> entail that a>=b. Yet Reduce seems to  think that it does:
> 
> Reduce[{-1 - ((a - b)^2)^(1/4) Cos[1/2 Arg[a - b]] < 0, a > 0, b >
> 0}, {a, b}]
> 
> a > 0 && 0 < b <= a
> 
> As one would expect, with the domain Complexes it no longer assumes
> that:
> 
> Reduce[{-1 - ((a - b)^2)^(1/4) Cos[1/2 Arg[a - b]] < 0, a > 0, b >
> 0}, {a, b}, Complexes]
> 
> a > 0 && b > 0
> 
> The first behaviour would not, perhaps, be surprising if the
> expression was
> 
> Reduce[{-1 - ((a - b)^(1/4))^2  Cos[1/2 Arg[a - b]] < 0, a > 0, b >
> 0}, {a, b}]
> 
> a > 0 && 0 < b <= a
> 
> for this time indeed the expression (a - b)^(1/4) is real only if
> a>=b. But the really curious thing is that if you remove the
> requirement that a and b be positive you get:
> 
> 
> Reduce[{-1 - ((a - b)^2)^(1/4) Cos[1/2 Arg[a - b]] < 0}, {a, b}]
> 
> (a | b) \[Element] Reals
> 
> Reduce[{-1 - ((a - b)^(1/4))^2 Cos[1/2 Arg[a - b]] < 0}, {a, b}]
> 
> (a | b) \[Element] Reals
> 
> Now that's really odd, since this case clearly includes the previous
> one as a sub-case. So if the inequality holds for all real a and b,
> it also holds for all positive a and b?
> 
> Andrzej Kozlowski
> 
> 
> 
> 

This is a bug. A transformation produces a disjunction term involving
Sec[Arg[a - b]/2], and the requirement that Sec[Arg[a - b]/2] be real
valued gets applied to a too wide context. It will be fixed in the next
release of Mathematica.

Best regards,

Adam Strzebonski
Wolfram Research



  • Prev by Date: Re: Is it possible to flatten hash table?
  • Next by Date: Re: Question about typesetting
  • Previous by thread: Re: The domain parameter of Reduce[]
  • Next by thread: Graphics bounding box in source coordinates?