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

 Submitted by : (unknown) at: 2007-11-17T21:55:37-08:00 (12 years ago) Name : Axiom Version : default friCAS-20090114 Axiom-20050901 OpenAxiom-20091012 OpenAxiom-20110220 OpenAxiom-Release-141 Category : Axiom Aldor Interface Axiom Compiler Axiom Library Axiom Interpreter Axiom Documentation Axiom User Interface building Axiom from source lisp system MathAction Doyen CD Reduce Axiom on Windows Axiom on Linux Severity : critical serious normal minor wishlist Status : open closed rejected not reproducible fix proposed fixed somewhere duplicate need more info Optional subject :   Optional comment :

From
William Sit
Subject
Re: [Axiom-developer]? [Q]? radicalSolve fails to find all roots ?
Date
Mon, 17 Jan 2005 16:31:52 -0500

These are NOT bugs! But the following may be! Consider the equation for axiom
radicalSolve(z^7=2) (1)
Type: List(Equation(Expression(Integer)))

Of course, these are correct solutions by Euler's Formula. A bit surprising that radicalSolve invokes these for and not for ; when is 7, these trignometric values are not embeddable in a tower of "solvable" extensions. That is, these are not solutions expressible in terms of radicals (of real numbers) and arithmetic alone. Put another way, the regular 7-gon is not constructible by compass and ruler alone. From:

A necessary and sufficient condition that a regular n-gon be constructible is that phi(n) be a power of 2, where phi(n) is the totient function (Krízek 2001, p. 34):

  n =  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17 18 19 20
phi= 1  1  2  2  4  2  6  4  6   4  10   4  12   6   8   8  16  6 18  8
bad=                   x     x       x       x   x              x  x
n =                    7            11      13  14  15      17    19


So if you compare the constructible regular n-gons, you can see why Axiom's results are reasonable: radicalSolve only finds solutions that are expressible in terms of radicals and arithmetic operations. It did not find those for and probably (I am guessing) because at the time of implementation, these constructions were not known (at least to the programmer). On the other hand, for , the solutions are expressible in radicals only if radicals of complex numbers are allowed and Axiom found those (perhaps it shouldn't?). The expansion for that Vladimir gave involves radicals of complex numbers, as theory predicts.

When Axiom cannot find solutions, it is (presumably) a PROOF that the other solutions are NOT solvable by radicals (using real numbers), or at least, there is no known proof that it is solvable at the time of implementation. (That is why I am surprised at the above result for ).

In other words, rather than viewing the answer for as a bug, we should view the answers for , (and may be even , ) as bugs!

Still, the package should be upgraded.

-------------------

axiom
radicalSolve(z^9=1,z) (2)
Type: List(Equation(Expression(Integer)))
axiom
radicalSolve(z^7=3) (3)
Type: List(Equation(Expression(Integer)))
axiom
radicalSolve(z^7=1.)
7
WARNING (genufact): No known algorithm to factor ?  - 1.0
, trying square-free. (4)
Type: List(Equation(Expression(Float)))
axiom
radicalSolve(z^6+z^5+z^4+z^3+z^2+z+1=0) (5)
Type: List(Equation(Expression(Integer)))

William

anonymous [mathaction@axiom-developer.org]? wrote:
When Axiom cannot find solutions, it is (presumably) a PROOF that the other solutions are NOT solvable by radicals (using real numbers), or at least, there is no known proof that it is solvable at the time of implementation. (That is why I am surprised at the above result for z^7=2).

Given Axiom's assumptions about input in this problem, why cannot I do this:

axiom
z:Complex(Float)
z:Integer
z:Variable(Complex(Float))
z:Symbol(Complex(Float))
z is declared as being in Integer but has not been given a value.

Also this behind-the-scenes behavior where the answer depends on the input type or assumptions is undesirable, and surprising to casual users. When algorithms must make assumptions about the type of a Variable or Symbol, at the very least a message should be printed indicating that the assumption was made.

An even better algorithm would print a message, then keep that assumption for the remainder of the calculation...

Original question
Mon, 17 Jan 2005 22:19:23 -0600 reply
....................................................................

Obviously, all the roots of the equation can be expressed in radicals, and Mathematica can easily produce the explicit expressions in terms of radicals:

  Solve[z^7 == 1, z]

{{z -> 1}, {z -> -(-1)^(1/7)}, {z -> (-1)^(2/7)}, {z -> -(-1)^(3/7)},
{{z -> {z -> (-1)^(4/7)}, {z -> -(-1)^(5/7)}, {z -> (-1)^(6/7)}}


To save the space, below the only example is given:

  FunctionExpand[ComplexExpand[-(-1)^(1/7)]]

(1/2)*((1/3)*((1/2)*(-1 + I*Sqrt) + ((-1 + I*Sqrt)*((1/2)*(-1 +
I*Sqrt) + (1/2)*(-1 - I*Sqrt)*((1/2)*(-1 + I*Sqrt) +
(1/4)*(-1 + I*Sqrt)^2)))/(2*(6 + (3/4)*(-1 + I*Sqrt)*(-1 +
I*Sqrt) + (1/2)*(-1 - I*Sqrt)*(1 + (3/4)*(-1 +
I*Sqrt)^2))^(1/3)) + (1/4)*(-1 + I*Sqrt)^2*(6 + (3/4)*(-1 +
I*Sqrt)*(-1 + I*Sqrt) + (1/2)*(-1 - I*Sqrt)*(1 + (3/4)*(-1 +
I*Sqrt)^2))^(1/3)) +(1/3)*((1/2)*(1 + I*Sqrt) - ((-1 +
I*Sqrt)^2*((1/2)*(-1 -I*Sqrt) + (1/2)*(-1 +
I*Sqrt)*((1/2)*(-1 + I*Sqrt) + (1/4)*(-1 + I*Sqrt)^2)))/(4*(6
+ (3/4)*(-1 + I*Sqrt)*(-1 - I*Sqrt) + (1/2)*(-1 + I*Sqrt)*(1
+ (3/4)*(-1 + I*Sqrt)^2))^(1/3)) -(1/2)*(-1 + I*Sqrt)*(6 +
(3/4)*(-1 + I*Sqrt)*(-1 - I*Sqrt) + (1/2)*(-1 + I*Sqrt)*(1 +
(3/4)*(-1 + I*Sqrt)^2))^(1/3))) + (1/2)*((1/3)*((1/2)*(-1 +
I*Sqrt) + ((-1 + I*Sqrt)*((1/2)*(-1 + I*Sqrt) + (1/2)*(-1 -
I*Sqrt)*((1/2)*(-1 + I*Sqrt) + (1/4)*(-1 + I*Sqrt)^2)))/(2*(6
+ (3/4)*(-1 + I*Sqrt)*(-1 + I*Sqrt) + (1/2)*(-1 - I*Sqrt)*(1
+ (3/4)*(-1 + I*Sqrt)^2))^(1/3)) +(1/4)*(-1 + I*Sqrt)^2*(6 +
(3/4)*(-1 + I*Sqrt)*(-1 + I*Sqrt) + (1/2)*(-1 - I*Sqrt)*(1 +
(3/4)*(-1 + I*Sqrt)^2))^(1/3)) + (1/3)*((1/2)*(-1 - I*Sqrt)
+((-1 + I*Sqrt)^2*((1/2)*(-1 - I*Sqrt) + (1/2)*(-1 +
I*Sqrt)*((1/2)*(-1 + I*Sqrt) + (1/4)*(-1 + I*Sqrt)^2)))/(4*(6
+ (3/4)*(-1 + I*Sqrt)*(-1 - I*Sqrt) + (1/2)*(-1 + I*Sqrt)*(1
+ (3/4)*(-1 + I*Sqrt)^2))^(1/3)) +(1/2)*(-1 + I*Sqrt)*(6 +
(3/4)*(-1 + I*Sqrt)*(-1 - I*Sqrt) + (1/2)*(-1 + I*Sqrt)*(1 +
(3/4)*(-1 + I*Sqrt)^2))^(1/3)))


## According to the AXIOM Book--

However, already for z^7 = 1 this is not so,

axiom
radicalSolve(z^7=1, z)
z is declared as being in Integer but has not been given a value.

and the problem exists for 11, 13, 14, 15, 17, 19 etc

axiom
for i in 1..20 repeat print([i,#radicalSolve(z^i=1,z)])
There are 4 exposed and 0 unexposed library operations named
radicalSolve having 2 argument(s) but none was determined to be
applicable. Use HyperDoc Browse, or issue
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
Equation(Integer)
Integer
Perhaps you should use "@" to indicate the required return type,
or "\$" to specify which version of the function you need.
FriCAS will attempt to step through and interpret the code.
z is declared as being in Integer but has not been given a value.

    [1,1]
[2,2]
[3,3]
[4,4]
[5,5]
[6,6]
[7,1]   <-- not good
[8,8]
[9,9]
[10,10]
[11,1]  <-- not good
[12,12]
[13,1]  <-- not good
[14,2]  <-- not good
[15,7]  <-- not good
[16,16]
[17,1]  <-- not good
[18,18]
[19,1]  <-- not good
[20,20]


Best,