       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:=
Assuming[a >= 0, Product[k^a, {k, Infinity}]]

Out=
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:=
Limit[x^a, x -> 0]
Assuming[a > 0, Limit[x^a, x -> 0]]

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

Out=
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:=
(*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=
SeriesData[x, 0, {I*ArcTanh, -I/3}, 0, 2, 1]

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

Out=
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, -I/3}, 0, 2, 1]

We can see that Out 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 still uses the assumptions from
In. If we evaluate In after restarting the kernel, we get a result
identical to Out.

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

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

Out=
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}, 0, 1, 1]))/ArcTanh])/(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}, 0, 1,
1]))/ArcTanh])/(4*Pi)]) + SeriesData[x, 2*I, {I*ArcTanh}, 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