Dear Katya,
the new Singular 3.0 library "absfact.lib" provides the means to compute absolute factors of polynomials, that is irreducible factors over algebraic closure of the coefficient field.
Your example x^2+y^2+z^2 is absolutely irreducible:
Code:
> ring r=0,(x,y,z),dp;
> LIB "absfact.lib";
> poly f=x^2+y^2+z^2;
> def S = absFactorize(f);
// 'absFactorize' created a ring, in which a list absolute_factors (the
// absolute factors) is stored.
// To access the list of absolute factors, type (if the name S was assigned
// to the return value):
setring(S); absolute_factors;
> setring(S); absolute_factors;
[1]:
_[1]=1
_[2]=x2+y2+z2
[2]:
1,1
[3]:
_[1]=(a)
_[2]=(a)
[4]:
1
The last output (here: 1) is the number of absolutely irreducible factors. Below is an example which splits:
Code:
> ring r=0,(x,y,z),dp;
> poly f=x^4+(y2+z2)^2;
> def S = absFactorize(f);
> setring(S); absolute_factors;
[1]:
_[1]=1/4
_[2]=(2a+1)*x2+2*y2+2*z2
[2]:
1,1
[3]:
_[1]=(a)
_[2]=(4a2+4a+5)
[4]:
2
From the output you read one absolutely irreducible factor defined over the coefficient field Q[a]/(4a2+4a+5). The second factor is conjugate to this one. Note however that the extension field returned by absFactorize is usually not yet the splitting field (this would require additional computations over extension fields):
Code:
> ring r=0,x,dp;
> poly f=x^3+2;
> def S = absFactorize(f);
> setring(S); absolute_factors;
[1]:
_[1]=1
_[2]=x+(-a)
[2]:
1,1
[3]:
_[1]=(a)
_[2]=(a3+2)
[4]:
3
> ring r1=(0,a),x,dp;
> minpoly = a^3+2;
> factorize(x^3+2);
[1]:
_[1]=1
_[2]=x2+(a)*x+(a2)
_[3]=x+(-a)
[2]:
1,1,1
Sincerely
The Singular Team