Re: Reduce and Indeterminate
- To: mathgroup at smc.vnet.net
- Subject: [mg87800] Re: Reduce and Indeterminate
- From: dh <dh at metrohm.ch>
- Date: Thu, 17 Apr 2008 06:57:48 -0400 (EDT)
- References: <fu6mb9$nl0$1@smc.vnet.net>
Hi Szabolcs,
it would certainly be nice and consistent if a message about a invalid
comparison is produced. But we must ask if real harm can be produced
from this result and I think this is possible. Although all arthmetic
operations on Indeterminate give Indeterminate, it is not hard to come
up with a simple example where things go wrong:
f[x_]:=If[Reduce[x>0],"pos","neg","ind"];
Therefore, I think a warning is a must.
Daniel
Szabolcs Horvát wrote:
> If a complex number appears in an inequality, Reduce issues a warning:
>
> Reduce[I > 0]
>
> This is useful (to avoid mistakes). But if Indeterminate appears in an
> inequality, Reduce will immediately say False:
>
> Reduce[Indeterminate > 0]
>
> While it is debatable what is the correct thing to do mathematically, I
> naively believe that it would be useful if Reduce at least gave a
> warning. It is true that it is not a good idea to manipulate
> expressions completely blindly (without paying attention to what they
> contain), but some functions may return very large expressions ... and
> the main advantage of using computers is that they can do large and
> tedious calculations quickly.
>
> What do MathGroup readers think about this?
>
> Here's a somewhat artificial example:
>
> In[1]:= Integrate[1/x, {x, a, b}]
>
> Out[1]= If[(-Im[b] Re[a] + Im[a] Re[b])/(Im[a] - Im[b]) >=
> 0 && ((Re[a/(-a + b)] >= 0 && a/(-a + b) != 0) ||
> Re[a/(a - b)] >= 1 || Im[a/(-a + b)] != 0), -Log[a] + Log[b],
> Integrate[1/x, {x, a, b},
> Assumptions -> ! ((-Im[b] Re[a] + Im[a] Re[b])/(Im[a] - Im[b]) >=
> 0 && ((Re[a/(-a + b)] >= 0 && a/(-a + b) != 0) ||
> Re[a/(a - b)] >= 1 || Im[a/(-a + b)] != 0))]]
>
> In[2]:= First[%]
>
> Out[2]= (-Im[b] Re[a] + Im[a] Re[b])/(Im[a] - Im[b]) >=
> 0 && ((Re[a/(-a + b)] >= 0 && a/(-a + b) != 0) ||
> Re[a/(a - b)] >= 1 || Im[a/(-a + b)] != 0)
>
> In[3]:= Reduce[% && (a | b) \[Element] Reals]
>
> Out[3]= False
>
> Note that unlike Reduce, FullSimplify gives a warning:
>
> In[4]:= FullSimplify[%%, (a | b) \[Element] Reals]
>
> During evaluation of In[4]:= FullSimplify::infd: Expression (-Im[b] \
> Re[a]+Im[a] Re[b])/(Im[a]-Im[b]) simplified to Indeterminate. >>
>
> Out[4]= Indeterminate >=
> 0 && (Im[a/(-a + b)] != 0 ||
> Re[a/(a - b)] >= 1 || (a/(a - b) != 0 && Re[a/(-a + b)] >= 0))
>
> In[5]:= Reduce[Rest[%] && (a | b) \[Element] Reals, {a, b}]
>
> Out[5]= (a < 0 && (b < a || a < b <= 0)) || (a >
> 0 && (0 <= b < a || b > a))
>
>