Ralf Hemmecke <[EMAIL PROTECTED]> writes:

> On 08/21/2006 03:38 AM, Jay Belanger wrote:
>> Martin Rubey <[EMAIL PROTECTED]> writes:
>>
>>> "Igor Khavkine" <[EMAIL PROTECTED]> writes:
>>>
>>>> Can someone explain the following behavior of Taylor series in Axiom?
>>>>
>>>> (113) -> y := taylor x
>>>>    (113)  x
>>>>                          Type: UnivariateTaylorSeries(Expression 
>>>> Integer,x,0)
>>>> (114) -> x*y
>>>>    (114)  x x
>>>>                          Type: UnivariateTaylorSeries(Expression 
>>>> Integer,x,0)
>>>> (115) -> coefficient(%,1)
>>>>    (115)  x
>>>>                                                      Type: Expression 
>>>> Integer
>>> The reason is that Axiom cannot really know whether you meant x in (114) to 
>>> be
>>> an element of the coefficient Ring EXPR INT, or to be a univariate Taylor
>>> series. In case of doubt, it usually chooses the wrong possibility :-)
>>
>> When multiplying two elements, shouldn't Axiom try to coerce them to
>> be in the same structure?  (I realize it doesn't, particularly here,
>> but wouldn't that be reasonable behavior?)
>
> But Axiom coerced the two x to the same domain!!! 

Not in any meaningful way.  What I think should have happened is
something like


(1) -> y := taylor x

   (1)  x
                         Type: UnivariateTaylorSeries(Expression Integer,x,0)
(2) -> (x::UnivariateTaylorSeries(Expression Integer,x,0))*y

         2
   (2)  x
                         Type: UnivariateTaylorSeries(Expression Integer,x,0)

(without the cast having to be explicit).
The only real experience I have with domains is in MuPAD, and this is
roughly how MuPAD handles it.

> The first x is a coefficient, and the second x is the variable from
> the Taylor series. So you cannot complain.

Oh, I can always complain.  The only question is whether or not my
complaints are justified.

> The only problem is that it is terribly confusing. Unfortunately, I
> cannot even blame that the user did anything wrong since Axiom came up
> with this strange type UnivariateTaylorSeries(Expression Integer,x,0).
>
> But I could blame the user for trying to do "x * y". Here you instruct
> the compiler to guess since there is no function
>
> *: (Symbol, UTS(Expression Integer,x,0))->UTS(Expression Integer,x,0)
>
> so the interpreter has to do something with the x. It coerces it to
> Expression(Integer). That is perfectly legal. 

But not perfectly reasonable, I think.  And it isn't coercing x to be
in the same domain as the other x, which is what I think should happen.

Jay


_______________________________________________
Axiom-math mailing list
Axiom-math@nongnu.org
http://lists.nongnu.org/mailman/listinfo/axiom-math

Reply via email to