Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

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

Search the Archive

Re: "Assuming"

  • To: mathgroup at smc.vnet.net
  • Subject: [mg85611] Re: "Assuming"
  • From: "David W.Cantrell" <DWCantrell at sigmaxi.net>
  • Date: Thu, 14 Feb 2008 18:53:34 -0500 (EST)
  • References: <fp0m11$5u7$1@smc.vnet.net> <fp192b$gju$1@smc.vnet.net>

dh <dh at metrohm.ch> wrote:
> HI Markus,
>
> I think you are fooling yourself.

Rather, I think you, Daniel, are fooling yourself.

> Consider Simplify[(a^2 - 1)/(a - 1)]
>
> As a^2 - 1)== (a+1)(a-1) this will give (a+1).

Naively interpreted (as, say, a beginning calculus student should do)

(a^2 - 1)/(a - 1)  should simplify to something equivalent to

If[a == 1, Indeterminate, a + 1]

Whether a CAS should interpret something like (a^2 - 1)/(a - 1) in a more
sophisticated fashion is debatable, IMO.

> This is true in general, for a==1 understood as limit.

But of course Simplify should not -- and in fact does not -- "understand as
limit" automatically.

Here's a simple example:

In[2]:= Simplify[Sin[a]/a, a == 0]
Out[2]= Indeterminate

That behavior is correct. OTOH, if Mathematica had been designed to
"understand as limit" automatically under Simplify, then Out[2] should have
been 1 instead.

> Therefore, this has nothing to do with assumptions.

But it arguably _should_ have had something to do with assumptions; that
was part of the point Markus was making.

> On the other hand, (a^2 - 1)/(a - 1) /. a -> 1 can not be calculated as
>
> it gives 0/0.  Note that "/. and  ->" mean replacement, not limit. If
>
> you want a limit, you have to say so: Limit[(a^2 - 1)/(a - 1), a -> 1]
>
> hope this helps, Daniel

Compare the following:

In[8]:= Assuming[x == 0, {x/x^2, x/x, x^2/x}]
Out[8]= {1/x, 1, x}

In[9]:= x = 0; {x/x^2, x/x, x^2/x}
Out[9]= {Indeterminate, Indeterminate, Indeterminate}

Of course, in Mathematica, Out[9] is correct. And arguably, Out[8] should
have been the same as Out[9].

Here's a portion of a response of mine which appeared some years ago in
this newsgroup. It's relevant to what Markus was asking about.

-------------------------------------------------------

In a sense, there is something wrong. These simplifications are what David
Stoutemyer called "misdemeanors" in his article "Crimes and Misdemeanors in
the Computer Algebra Trade", _Notices of the American Mathematical Society_
38:7 (1991) 778-785.

In case anyone doesn't see why simplifying, say, x^0 to 1 is a misdemeanor:
In Mathematica, 0^0 is regarded as being Indeterminate. Thus, without
knowing that x is nonzero, Mathematica should not bluntly simplify x^0 to
1. Rather, it would seem that, in Mathematica, x^0 should simplify to, say,
If[x == 0, Indeterminate, 1]. But such a result is normally considered to
be too cumbersome to be practical; the "misdemeanor" simplification is
considered preferable. All CASs known to me make such simplifications.

-------------------------------------------------------

David W. Cantrell


> markusbinder wrote:
>
> > Hi,
>
> >
>
> > I would appreciate some comments about the Assuming-function. Several
> > examples using Mathematica 6 as follows:
>
> >
>
> > In[1]:= Assuming[a > 0, Simplify[a == -1]]
>
> > Out[1]= False
>
> > In[2]:= Assuming[a \[Element] Integers, Simplify[a == -1]]
>
> > Out[2]= a == -1
>
> > In[3]:= Assuming[a \[Element] Integers && a > 0 && a < 2, Simplify[a^2<
> > 1.1]]
>
> > Out[3]= True
>
> > In[4]:= Assuming[a \[Element] Reals && a > 0 && a < 2, Simplify[a^2 <
> > 1.1]]
>
> > Out[4]= a < 1.04881
>
> >
>
> > So far, everything seems pretty reasonable, but
>
> >
>
> > In[5]:= Assuming[a \[Element] Integers && a > 0 && a < 2, Simplify[(a^2
> > - 1)/(a - 1)]]
>
> > Out[5]= 1 + a
>
> >
>
> > whereas
>
> >
>
> > In[6]:= (a^2 - 1)/(a - 1) /. a -> 1
>
> > Out[6]= Indeterminate
>
> >
>
> > I consider this as blunder (or bug?); I comprehend working with domains
> > can be pretty tricky and of course I don't expect
>
> >
>
> > In[7]:= Simplify[(a^2 - 1)/(a - 1)]
>
> >
>
> > to yield
>
> >
>
> > Out[7]= "Beware, a != 1 neccessary!"
> >
> > instead of
> >
> > Out[7]= 1 + a.
> >
> > Am I tricked by some personal misconception of how Mathematica deals
> > with Assuming plus fractions as shown above, or is this a mere flaw?
>
> > Thanks in advance for your corrections & suggestions.
> >
> > Best regards
> > Markus Binder


  • Prev by Date: Re: eliminate all the occurrences of "theta ->" and "lambda ->"
  • Next by Date: Re: open URL programmatically?
  • Previous by thread: Re: "Assuming"
  • Next by thread: Re: "Assuming"