Re: global assumptions?? How far can I go?

• To: mathgroup at smc.vnet.net
• Subject: [mg53461] Re: global assumptions?? How far can I go?
• From: Maxim <ab_def at prontomail.com>
• Date: Wed, 12 Jan 2005 03:41:44 -0500 (EST)
• References: <criro8\$s75\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Here are a few more observations related to using assumptions. Some older
functions like Sum and Product don't generate conditional output, except
in some rare cases:

In[1]:=
Assuming[a >= 0, Product[k^a, {k, Infinity}]]

Out[1]=
If[Re[a] >= 0, Infinity, 0]

Since Sum and Product cannot really use assumptions, Assuming has no
effect in this example. Besides, the result is incorrect for a == 0.

Limit currently seems to be at an intermediate stage -- it has the option
Assumptions but it cannot generate conditional output, which means that
unless 'useful' assumptions are supplied to Limit it will simply return
unevaluated:

In[2]:=
Limit[x^a, x -> 0]
Assuming[a > 0, Limit[x^a, x -> 0]]

Out[2]=
Limit[x^a, x -> 0]

Out[3]=
0

Series takes the option Assumptions as well, which can be useful in
conjunction with the new capability of Series to generate a kind of
generalized expansion for points on branch cuts:

In[1]:=
(*restart the kernel*)
Assuming[Arg[(2 + x)*I - 2*I] == Pi/2,
Series[ArcTan[(2 + x)*I], {x, 0, 1}]]
Series[ArcTan[(2 + x)*I], {x, 0, 1}]
Series[ArcTan[(2 + x)*I], {x, 0, 1}, Assumptions -> True]

Out[1]=
SeriesData[x, 0, {I*ArcTanh[2], -I/3}, 0, 2, 1]

Out[2]=
SeriesData[x, 0, {I*ArcTanh[2], -I/3}, 0, 2, 1]

Out[3]=
Pi*(Floor[(Pi - 2*Arg[-2*I + I*(2 + x)])/(4*Pi)] + Floor[(Pi + 2*Arg[-2*I
+ I*(2 + x)])/(4*Pi)]) + SeriesData[x, 0, {I*ArcTanh[2], -I/3}, 0, 2, 1]

We can see that Out[3] contains SeriesData plus extra terms used to
determine the position of the point with respect to the branch cut. There
is a glitch in Series though: the first call to Series resets the value of
the option Assumptions of Series, so In[2] still uses the assumptions from
In[1]. If we evaluate In[2] after restarting the kernel, we get a result
identical to Out[3].

However, adding extra terms or factors depending on Arg[x] still fails for
nested discontinuous functions:

In[4]:=
Series[ArcTan[2*I*ArcTan[x]/ArcTan[2*I]], {x, 2*I, 0}]

Out[4]=
Pi*(Floor[(Pi - 2*Arg[-2*I + (2*(Pi*(Floor[(Pi - 2*Arg[-2*I + x])/(4*Pi)]
+ Floor[(Pi + 2*Arg[-2*I + x])/(4*Pi)]) + SeriesData[x, 2*I,
{I*ArcTanh[2]}, 0, 1, 1]))/ArcTanh[2]])/(4*Pi)] + Floor[(Pi + 2*Arg[-2*I
+ (2*(Pi*(Floor[(Pi - 2*Arg[-2*I + x])/(4*Pi)] + Floor[(Pi + 2*Arg[-2*I
+ x])/(4*Pi)]) + SeriesData[x, 2*I, {I*ArcTanh[2]}, 0, 1,
1]))/ArcTanh[2]])/(4*Pi)]) + SeriesData[x, 2*I, {I*ArcTanh[2]}, 0, 1, 1]

For x close to 2*I, the result is indeterminate if Re[x] >= 0 and doesn't
agree with ArcTan[2*I*ArcTan[x]/ArcTan[2*I]] if Re[x] < 0. If we increase
the order of the expansion, the result will be correct for some (not all)
values of x such that Re[x] >= 0 and still wrong for Re[x] < 0. I don't
think that this is a bug, more likely it just shows that this method of
using Arg[x] in the series expansion still has limitations.

It is possible to pass conditions that contain patterns to Refine;
however, an assumption such as _ > 0 is contradictory -- it implies that x
> 0 and -x > 0 at the same time, and if we try to make the pattern more
specific, then Refine[t > 0, _Symbol > 0] just crashes the Mathematica
kernel. More importantly,

Integrate[1/x^2, {x, 1, t}] // Refine[#, t < 0]&

makes Mathematica 5.1 go into infinite loop: the computation takes several
minutes after which Mathematica generates \$IterationLimit::aitlim warning
and returns the If expression unevaluated.

Maxim Rytin
m.r at inbox.ru

```

• Prev by Date: Re: [Newbie] Ohm, Ampere, Volt units
• Next by Date: Re: Re:Re: FullSimplify with Assumptions
• Previous by thread: Re: global assumptions?? How far can I go?
• Next by thread: FullSimplify with Assumptions