kredel / java-algebra-system

Java Algebra System (JAS) Project
GNU General Public License v2.0
44 stars 9 forks source link

Factor[2*y^6- x*y^3 -3*x^2] doesn't always return a factorization #36

Open axkr opened 1 year ago

axkr commented 1 year ago

Can the case Factor[2*y^6- x*y^3 -3*x^2] be made more reliable in returning the solution (x+y^3)*(-3*x+2*y^3) ?

In most of the cases it returns -3*x^2-x*y^3+2*y^6

See some random execution with JAS logs:

>> Factor[2*y^6- x*y^3 -3*x^2]
In[1]:= Factor[2*y^6- x*y^3 -3*x^2]
4761 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [371], dei = []
4765 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = 2 y^6 - x * y^3 - 3 x^2, prr = ( ( -3 )  ) x^2 - y^3 x + 2 y^6 , lprr = ( -3 ) , lfacs = []
4953 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [371], dei = []
4953 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = 2 y^6 - x * y^3 - 3 x^2, prr = ( ( -3 )  ) x^2 - y^3 x + 2 y^6 , lprr = ( -3 ) , lfacs = []
4957 WARN  [main] edu.jas.ufd.FactorInteger - optimized ring: BigInteger( y,x ) INVLEX , original ring: BigInteger( x,y ) INVLEX 
5577 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [371], dei = []
5577 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = ( -3 ) x^2 - y^3 * x + 2 y^6, prr = 2  y^6 - x y^3 - 3 x^2 , lprr = 2 , lfacs = []
5577 WARN  [main] edu.jas.ufd.FactorInteger - optimized ring: BigInteger( y,x ) INVLEX , original ring: BigInteger( x,y ) INVLEX 
5990 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [371], dei = []
5990 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = ( -3 ) x^2 - y^3 * x + 2 y^6, prr = 2  y^6 - x y^3 - 3 x^2 , lprr = 2 , lfacs = []
5991 WARN  [main] edu.jas.ufd.FactorInteger - factorsSquarefreeHensel not applicable or failed, reverting to Kronecker for: 2 y^6 - x * y^3 - 3 x^2
5992 WARN  [main] edu.jas.ufd.FactorAbstract - no multivariate factorization for 2 y^6 - x * y^3 - 3 x^2: falling back to Kronecker algorithm in PolyRing(ZZ(),"x,y",Order.INVLEX)
Out[1]= -3*x^2-x*y^3+2*y^6
>> Factor[2*y^6- x*y^3 -3*x^2]
In[2]:= Factor[2*y^6- x*y^3 -3*x^2]
10393 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [-371], dei = []
10393 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = 2 y^6 - x * y^3 - 3 x^2, prr = ( ( -3 )  ) x^2 - y^3 x + 2 y^6 , lprr = ( -3 ) , lfacs = []
10507 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [-371], dei = []
10507 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = 2 y^6 - x * y^3 - 3 x^2, prr = ( ( -3 )  ) x^2 - y^3 x + 2 y^6 , lprr = ( -3 ) , lfacs = []
10508 WARN  [main] edu.jas.ufd.FactorInteger - optimized ring: BigInteger( y,x ) INVLEX , original ring: BigInteger( x,y ) INVLEX 
10891 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [-370], dei = []
10891 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = ( -3 ) x^2 - y^3 * x + 2 y^6, prr = 2  y^6 - x y^3 - 3 x^2 , lprr = 2 , lfacs = []
10891 WARN  [main] edu.jas.ufd.FactorInteger - optimized ring: BigInteger( y,x ) INVLEX , original ring: BigInteger( x,y ) INVLEX 
10901 WARN  [main] edu.jas.ufd.FactorInteger - end notLucky loop, trial parts = 4
10908 WARN  [main] edu.jas.ufd.FactorInteger - de-optimized polynomials: [2 y^3 - 3 x, y^3 + x]
Out[2]= (x+y^3)*(-3*x+2*y^3)
>> Factor[2*y^6- x*y^3 -3*x^2]
In[3]:= Factor[2*y^6- x*y^3 -3*x^2]
15669 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [-371], dei = []
15669 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = 2 y^6 - x * y^3 - 3 x^2, prr = ( ( -3 )  ) x^2 - y^3 x + 2 y^6 , lprr = ( -3 ) , lfacs = []
15777 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [-371], dei = []
15778 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = 2 y^6 - x * y^3 - 3 x^2, prr = ( ( -3 )  ) x^2 - y^3 x + 2 y^6 , lprr = ( -3 ) , lfacs = []
15778 WARN  [main] edu.jas.ufd.FactorInteger - optimized ring: BigInteger( y,x ) INVLEX , original ring: BigInteger( x,y ) INVLEX 
16119 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [371], dei = []
16119 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = ( -3 ) x^2 - y^3 * x + 2 y^6, prr = 2  y^6 - x y^3 - 3 x^2 , lprr = 2 , lfacs = []
16119 WARN  [main] edu.jas.ufd.FactorInteger - optimized ring: BigInteger( y,x ) INVLEX , original ring: BigInteger( x,y ) INVLEX 
16478 WARN  [main] edu.jas.ufd.FactorInteger - found         points   : V = [-370], dei = []
16479 WARN  [main] edu.jas.ufd.FactorInteger - no evaluation point for: P = ( -3 ) x^2 - y^3 * x + 2 y^6, prr = 2  y^6 - x y^3 - 3 x^2 , lprr = 2 , lfacs = []
16479 WARN  [main] edu.jas.ufd.FactorInteger - factorsSquarefreeHensel not applicable or failed, reverting to Kronecker for: 2 y^6 - x * y^3 - 3 x^2
16479 WARN  [main] edu.jas.ufd.FactorAbstract - no multivariate factorization for 2 y^6 - x * y^3 - 3 x^2: falling back to Kronecker algorithm in PolyRing(ZZ(),"x,y",Order.INVLEX)
Out[3]= -3*x^2-x*y^3+2*y^6

BTW: I switched off the internal cache for results from Factor to get always a new execution.