[GAP Forum] cyclotomic detection

Thomas Breuer thomas.breuer at math.rwth-aachen.de
Tue May 30 10:25:59 BST 2006


Dear GAP Forum,

Marta Asaeda wrote:

> I am wondering about the following: the roots of the polynomial
> p:=x^3-8*x^2+17*x-5
> are known to be cyclotomic integers because the galois group of p is
> Z_3, by Kronecker's thm abelian extension of Q sit in a cyclotomic
> field. However I do the following:
> 
> gap>  x:=Indeterminate(Rationals, "x");;
> gap> p:=x^3-8*x^2+17*x-5;;
> gap> e:=AlgebraicExtension(Rationals, p);
> <field in characteristic 0>
> gap> IsField(e);
> true
> gap> d:=RootOfDefiningPolynomial(e);
> (a)
> gap> IsCyclotomic(d);
> false
> gap> d in Cyclotomics;
> false
> gap> IsCyc(d);
> false
> gap> IsIntegralCyclotomic(d);
> Error, no method found! For debugging hints type ?Recovery from 
> NoMethodFound
> Error, no 1st choice method found for `IsIntegralCyclotomic' on 1 arguments 
> ca\
> lled from
> 
> It looks like gap is saying that d is not a cyclotomic, and it doesn't
> know if it is a cyclotomic integer.  I wonder what's wrong here.... I
> appreciate if you could let me know what's going on...

The functions `IsCyclotomic' and `IsIntegralCyclotomic' regard only
field elements that are represented as linear combinations of roots of unity
as cyclotomics,
where the n-th complex roots of unity are given as powers of `E(n)'.
Elements in fields obtained by `AlgebraicExtension' are not of this kind,
also if the field can be embedded into a cyclotomic field.
(The documentation should of course state this.)

In the example above, one can proceed as follows.
The polynomial splits into linear factors in the 13-th cyclotomic field,
which can be entered as `CF(13)'.
So we compute the factorization over this field.

    gap> x:= Indeterminate( Rationals );
    x_1
    gap> p:=x^3-8*x^2+17*x-5;
    x_1^3-8*x_1^2+17*x_1-5
    gap> factors:= Factors( PolynomialRing( CF(13) ), p );;
    gap> Length( factors );
    3

Next we extract the roots.
GAP represents them as sums of 13-th roots of unity.

    gap> coeffs:= List( factors, CoefficientsOfUnivariatePolynomial );
    [ [ 2*E(13)+3*E(13)^2+3*E(13)^3+3*E(13)^4+2*E(13)^5+3*E(13)^6+3*E(13)^7
             +2*E(13)^8+3*E(13)^9+3*E(13)^10+3*E(13)^11+2*E(13)^12, 1 ], 
      [ 3*E(13)+2*E(13)^2+2*E(13)^3+3*E(13)^4+3*E(13)^5+3*E(13)^6+3*E(13)^7
             +3*E(13)^8+3*E(13)^9+2*E(13)^10+2*E(13)^11+3*E(13)^12, 1 ], 
      [ 3*E(13)+3*E(13)^2+3*E(13)^3+2*E(13)^4+3*E(13)^5+2*E(13)^6+2*E(13)^7
             +3*E(13)^8+2*E(13)^9+3*E(13)^10+3*E(13)^11+3*E(13)^12, 1 ] ]
    gap> roots:= List( coeffs, x -> x[1] );;

The roots lie in a degree 3 extension of the rationals,
and the field of 13-th roots of unity has a unique such subfield,
which is generated by an element that is called `c13'
in the ATLAS of Finite Groups.
We get that the roots are the conjugates of `-3-c13'.

    gap> AtlasIrrationality( "c13" );
    E(13)+E(13)^5+E(13)^8+E(13)^12
    gap> roots[1] = AtlasIrrationality( "-3-c13" );
    true
    gap> roots[2] = AtlasIrrationality( "-3-c13*2" );
    true
    gap> roots[3] = AtlasIrrationality( "-3-c13*4" );
    true

All the best,
Thomas




More information about the Forum mailing list