login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Edit detail for #193 Symbolic values (without variables) are not ordered properly in 'EXPR INT' revision 2 of 2

1 2
Editor: test1
Time: 2014/04/15 16:55:05 GMT+0
Note:

added:

From test1 Tue Apr 15 16:55:05 +0000 2014
From: test1
Date: Tue, 15 Apr 2014 16:55:05 +0000
Subject: 
Message-ID: <20140415165505+0000@axiom-wiki.newsynthesis.org>

Status: open => closed 


Submitted by : (unknown) at: 2007-11-17T22:06:06-08:00 (17 years ago)
Name :
Axiom Version :
Category : Severity : Status :
Optional subject :  
Optional comment :

Axiom thinks

fricas
(1) -> 4-%e < 0
There are 3 exposed and 1 unexposed library operations named < having 2 argument(s) but none was determined to be applicable. Use HyperDoc Browse, or issue )display op < to learn more about the available operations. Perhaps package-calling the operation or using coercions on the arguments will allow you to apply the operation.
Cannot find a definition or applicable library operation named < with argument type(s) Expression(Integer) NonNegativeInteger
Perhaps you should use "@" to indicate the required return type, or "$" to specify which version of the function you need.

and

fricas
4-%pi::EXPR INT < 0
There are 3 exposed and 1 unexposed library operations named < having 2 argument(s) but none was determined to be applicable. Use HyperDoc Browse, or issue )display op < to learn more about the available operations. Perhaps package-calling the operation or using coercions on the arguments will allow you to apply the operation.
Cannot find a definition or applicable library operation named < with argument type(s) Expression(Integer) NonNegativeInteger
Perhaps you should use "@" to indicate the required return type, or "$" to specify which version of the function you need.

which poses another problem for fixing bug #47 and bug #141

Two different orderings mixed up --wyscc, Wed, 20 Jul 2005 17:48:29 -0500 reply
Hi Martin:

You already know the reasons and I think the title of this page is unfair. It is clear that the meaning of the operator < in EXPR INT (or any domain that includes symbolic expressions like POLY INT) is not meant to be an ordering of the ground domain (here INT). In polynomial rings, < is a term-ordering to facilitate polynomial arithmetic and variable elimination methods. If I read expr.spad correctly, when R is an integral domain, EXPR R has FRAC SMP(R, Kernel EXPR R) as its representation (Rep). You can explain better what that means than I (I would much appreciate your writing a page explaining kernels and operators in Axiom). In any case, the ordering is inherited from the Rep and so I believe %e or exp(1) is treated as a symbol. Indeed that may be the reason we have:

fricas
exp(1)^2 - exp(2)

\label{eq1}-{{e}^{2}}+{{e}^{2}}(1)
Type: Expression(Integer)
fricas
(exp(1)^2 - exp(2) = 0)::Boolean

\label{eq2} \mbox{\rm false} (2)
Type: Boolean

The sign of a polynomial expression is the sign of the coefficient of the highest monomial term.

The way that 4-%e < 0 can be evaluated they way you intend is to substitute a numerical value for %e. So users should be aware that in Axiom, symbolic entries are not the same as their numerical counterpart. What they should do is:

fricas
4.0 - %e < 0

\label{eq3} \mbox{\rm false} (3)
Type: Boolean

or

fricas
(4-%e)::(EXPR Float) < 0

\label{eq4} \mbox{\rm false} (4)
Type: Boolean

(This is reminescent of FORTRAN: type promotion from INTEGER to REAL). In other words, if one wants to test numerical inequalities involving symbolic constants, one should work in EXPR Float, not EXPR Integer since most symbolic constants are not integers. To provide an automatic type promotion from EXPR INT to EXPR Float would interfere with the ordering in polynomial expressions, unless a symbolic constant can be distinguished from a polynomial variable. We cannot overload the operator < for two distinct orderings in the same domain. I think the suggestion I posted in #47 of a SymbolicFloat domain may be worth exploring. In SymbolicFloat, we can retain symbolic manipulation of expressions with symbolic constants by using the term-ordering of the underlying representation, and still use the numerical ordering of the domain SymbolicFloat.

William

same for AlgebraicNumber --kratt6, Sun, 21 Aug 2005 04:32:17 -0500 reply
The same problem exists in AN. Although the test for zero in this domain is mathematical, we have

fricas
sqrt(2)<sqrt(3/2)
There are 3 exposed and 1 unexposed library operations named < having 2 argument(s) but none was determined to be applicable. Use HyperDoc Browse, or issue )display op < to learn more about the available operations. Perhaps package-calling the operation or using coercions on the arguments will allow you to apply the operation.
Cannot find a definition or applicable library operation named < with argument type(s) AlgebraicNumber AlgebraicNumber
Perhaps you should use "@" to indicate the required return type, or "$" to specify which version of the function you need.

Note that the domain RealClosure is designed to handle such things. Also, the test for zero in RECLOS is faster than in AN. So, wouldn't it be appropriate to make AN a wrapper for RECLOS FRAC INT? Of course, the appropriate conversion routines would have to be written, but this would be quite easy.

Martin

Status: open => closed