MathGroup Archive 2008

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

Search the Archive

Re: "Assuming"

  • To: mathgroup at smc.vnet.net
  • Subject: [mg85620] Re: "Assuming"
  • From: dh <dh at metrohm.ch>
  • Date: Fri, 15 Feb 2008 06:51:56 -0500 (EST)
  • References: <fp0m11$5u7$1@smc.vnet.net> <fp192b$gju$1@smc.vnet.net> <fp2khg$pka$1@smc.vnet.net>


Hi David,

we all learned not to divide by zero, but things are a bit more subtle 

than this.

You claim that (a^2 - 1)/(a - 1) should simplify to If[a == 1, 

Indeterminate, a + 1] and not to (a+1), but you do not give a good 

reason for this.

Obviously (a^2 - 1)/(a - 1) is not defined for a==1, but note that the 

left and right limit exist and are identical. Now what harm is done if 

we replace the first function by a second one (a+1) that agrees with the 

first one where it is defined, but that is also defined for a==1?

This seems to me a better aproach than your proposal, especially if we 

consider the implications on practical calculations.

Daniel





David W.Cantrell wrote:

> 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: Problem with Integration/HoldPattern (?)
  • Next by Date: Default font
  • Previous by thread: Re: "Assuming"
  • Next by thread: Re: "Assuming"