rtoy / maxima

A Clone of Maxima's repo
Other
0 stars 0 forks source link

x^2<1 can't get x^2<2, but can get x^2<100 #2228

Open rtoy opened 3 months ago

rtoy commented 3 months ago

Imported from SourceForge on 2024-07-05 21:40:13 Created by *anonymous on 2011-10-27 06:40:47 Original: https://sourceforge.net/p/maxima/bugs/2288


Just like the summary, assume (x<1 and x>-1), then is (x^<1) is true, but is (x^2<2) is undefined( so does 3 4 5 and 50 ,etc ), but is (x^2<100) is true again. What's happening here?

Maxima version: 5.24.0 Maxima build date: 12:15 5/17/2011 Host type: x86_64-unknown-linux-gnu Lisp implementation type: GNU Common Lisp (GCL) Lisp implementation version: GCL 2.6.7

rtoy commented 3 months ago

Imported from SourceForge on 2024-07-05 21:40:14 Created by crategus on 2011-10-27 20:58:05 Original: https://sourceforge.net/p/maxima/bugs/2288/#80b8


Again some examples to show the reported problem:

(%i1) assume(abs(x)<1); (%o1) [abs(x) < 1]

(%i2) sign(4-x^2); (%o2) pos

(%i3) sign(16-x^2); (%o3) pos

(%i4) sign(64-x^2); (%o4) pos

(%i5) sign(100-x^2); (%o5) pos

If the number has an integer root, Maxima can determine the sign. But not for a number, which has not an integer root.

(%i6) sign(5-x^2); (%o6) pnz

The reason is within the algorithm of the Lisp function sign. Expressions are factored by the Lisp function signfactor to determine the sign. Maxima can evaluate the sign of the factored expression.

(%i7) factor(4-x^2); (%o7) -(x-2)*(x+2) (%i8) sign(%); (%o8) pos

But for a number, which does not have an integer root, the expression can not be factored. For this case Maxima does not have an algorithm to evaluate the sign.

(%i11) factor(5-x^2); (%o11) -(x^2-5)

This might be called a missing feature. The Maxima function sign has a lot of more limitations.

Dieter Kaiser