Bug report ID: 643254 "orderlessp([rat(x)], [rat(x)])"



It would be a tremendous error to change the definition of great() to be 
slower. It would especially be
a bad idea for it to call totaldisrep, etc.

There is no reason to expect  ?great(a,b) to work, in general,  just as 
there is no reason for other lisp
functions to be callable from the top level of Maxima.  It is not a bug 
if ?truncate(xxx)
gives a lisp error, for some symbol xxx.

So what to do with orderlessp?

Here is my recommendation, which is sort of like (1)

orderlessp( [rat(x)], [rat(x)])  --->  error message.  Orderlessp can 
only be used for ordering "general form" expressions, not <taylor, 
poisson, cre>. Please use totaldisrep (etc.) on the arguments first.


RJF


If  Dieter Kaiser wrote:
> We have the open bug report ID: 643254 "orderlessp([rat(x)],
> [rat(x)])". 
>
> We have the three special representations: CRE, taylor, and Poisson
> representation. The main problem is that the function great can not
> handle any of these special representations:
>
> (%i6) a1:rat(x)$
> (%i7) a2:rat(y)$
> (%i8) b1:taylor(x,x,0,3)$
> (%i9) b2:taylor(y,y,0,3)$
> (%i10) c1:intopois(x)$
> (%i11) c2:intopois(y)$
>
> (%i12) ?great(a1,a2);
> Maxima encountered a Lisp error:
>
>  The value #:|t^(1/2)1884619| is not of type LIST.
>
> Automatically continuing.
> To enable the Lisp debugger set *debugger-hook* to nil.
>
> (%i13) ?great(b1,b2);
> Maxima encountered a Lisp error:
>
>  The value #:X1892991 is not of type LIST.
>
> Automatically continuing.
> To enable the Lisp debugger set *debugger-hook* to nil.
>
> (%i14) ?great(c1,c2);
> Maxima encountered a Lisp error:
>
>  The value 554189328 is not of type LIST.
>
> Automatically continuing.
> To enable the Lisp debugger set *debugger-hook* to nil.
>
>
> Therefore, a specrepcheck is needed to remove the special representation
> when we call great. But we know that specrepcheck does not remove the
> special representation if we have a list like [rat(x)] as an argument.
>
> I think we have four options:
>
> 1. Use $totaldisrep in the functions $orderlessp and $ordergreatp.
>
> This works for CRE and taylor representations, but not for Poisson
> representations. $totaldisrep has no code to remove a Poisson
> representation. Therefore, this is not a complete solution of the
> problem.
>
> 2. Use a modified $totaldisrep.
>
> This is a modification of $totaldisrep which handles Poisson
> representations in addition:
>
> (defmfun $totaldisrep (l)
>    (cond ((atom l) l)
> 	((not (amongl '(mrat mpois) l)) l)
> 	((eq (caar l) 'mrat) (ratdisrep l))
>         ((eq (caar l) 'mpois) ($outofpois l))
> 	(t (cons (delete 'ratsimp (car l) :test #'eq) 
> 	         (mapcar '$totaldisrep (cdr l))))))
>
> 3. Use a new function like $completedisrep.
>
> We do not modify $totaldisrep, but introduce a new function like
> $completedisrep for the use in $orderlessp and $ordergreatp with the
> code from above.
>
> 4. Modify great to handle special representations.
>
> The check for special representations can be added at the beginning of
> the routine:
>
> (defmfun great (x y)
>   (setq x (specrepcheck x)
>         y (specrepcheck y))
> ...
>
> With this change all cases of special representations are handled
> correctly. A function which calls great no longer has to do a
> specrepcheck itself. The disadvantage is that we have a lot of more
> calls to specrepcheck, because great is called a lot from the core
> simplifier.
>
> Dieter Kaiser
>
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>