93 Cyclotomic polynomials

Cyclotomic numbers, and cyclotomic polynomials over the rationals or some cyclotomic field, play an important role in the study of reductive groups so in CHEVIE. Additional functions are provided to deal with them. The most prominent is the type CycPol which can represent the product of a polynomial with a rational fraction with all poles or zeroes equal to 0 or roots of unity. The advantage of representing objects which can be as CycPol is: nice display (factorized), less storage, faster multiplication, division and evaluation, possibility to handle some rational fractions. The big disadvantage is that addition and subtraction are not implemented!

    gap> q:=X(Cyclotomics);;q.name:="q";;
    gap> p:=CycPol(q^18 + q^16 + 2*q^12 + q^8 + q^6);
    (q^8+q^6-q^4+q^2+1)q^6P8
    gap> p/CycPol(q^2+q+1);
    (q^8+q^6-q^4+q^2+1)q^6P3^-1P8

CycPols can represent the product of a polynomial with a rational fraction with all poles or zeroes equal to 0 or roots of unity. They are actually represented internally by:

A coefficient, which is usually a cyclotomic number, but can also be a polynomial and actually can be any GAP object which can be multiplied by cyclotomic polynomials.

A valuation, positive or negative, representing the power of the variable which divides the CycPol.

A vector of cyclotomic polynomials or their inverses over the Rationals or some extension field. A power of a cyclotomic polynomial Φdn over the rationals is represented by the pair [d,n] (where n may be positive or negative). A cyclotomic polynomial or rational fraction over an extension field is decomposed as product of factors (q-E(d)^i)^n each of which is represented by the pair [i/d,n].

Subsections

  1. AsRootOfUnity
  2. CycPol
  3. Functions for CycPol(s)

93.1 AsRootOfUnity

AsRootOfUnity( c )

c should be a cyclotomic number. AsRootOfUnity returns the rational e/n between 0 and 1 (1 excluded, that is an element of Q/Z) if c=E(n)^e, and false if c is not a root of unity. The code for this function has been provided by Thomas Breuer; the CHEVIE team thank him for his help.

    gap> AsRootOfUnity(-E(9)^2-E(9)^5);
    8/9
    gap> AsRootOfUnity(-E(9)^4-E(9)^5);
    false
    gap> AsRootOfUnity(1);
    0

This function requires the package "chevie" (see RequirePackage).

93.2 CycPol

CycPol( p )

In the first form CycPol( p ) the argument is a polynomial:

    gap> CycPol(3*q^3-3);
    3P1P3

Special code makes the conversion fast if p has not more than two nonzero coefficients.

The second form is a way of building the internal form of a CycPol which is a Laurent polynomial with little processing: p should be a vector. The first element is taken as a coefficient of the CycPol, the second as a valuation. Successive elements are rationals i/d (with i< d) taken to represent (q-E(d)^i) or integers d representing Φd(q).

    gap> CycPol([3,-5,6,3/7]);
    3q^-5P6(q-E7^3) 

This function requires the package "chevie" (see RequirePackage).

93.3 Functions for CycPol(s)

The functions defined are multiplication * and division \/ which work as usual, and the functions Degree and Value which work as for polynomials:

    gap> p:=CycPol(q^18 + q^16 + 2*q^12 + q^8 + q^6);
    (q^8+q^6-q^4+q^2+1)q^6P8
    gap> Value(p,q);
    q^18 + q^16 + 2*q^12 + q^8 + q^6
    gap> p:=p/CycPol(q^2+q+1);
    (q^8+q^6-q^4+q^2+1)q^6P3^-1P8
    gap> Value(p,q);
    Error, Cannot evaluate the non-Laurent polynomial CycPol (q^8+q^6-q^\
    4+q^2+1)q^6P3^-1P8 in
    f.operations.Value( f, x ) called from
    Value( p, q ) called from
    main loop
    brk>
    gap> Degree(p);
    16
    gap> Value(p,3);
    431537382/13

Functions String and Print are also defined. They display the d-th cyclotomic polynomial Φd over the rationals as Pd. They also display as P'd, P"d, P"'d, P""d some common factors of some small cyclotomic polynomials:

    gap> List(SchurElements(Hecke(ComplexReflectionGroup(4),q)),CycPol);
    [ P2^2P3P4P6, 2ER(-3)q^-4P2^2P'3P'6, -2ER(-3)q^-4P2^2P"3P"6,
      2q^-4P3P4, ((3-ER(-3))/2)q^-1P2^2P'3P"6,
      ((3+ER(-3))/2)q^-1P2^2P"3P'6, q^-2P2^2P4 ]

the complete list of such factors is as follows:

    P'3=q-E(3)
    P"3=q-E(3)^2
    P'4=q-E(4)
    P"4=q+E(4)
    P'5=q^2+(1-ER(5))/2*q+1
    P"5=q^2+(1+ER(5))/2*q+1
    P'6=q+E(3)^2
    P"6=q+E(3)
    P'7=q^3+(1-ER(-7))/2*q^2+(-1-ER(-7))/2*q-1
    P"7=q^3+(1+ER(-7))/2*q^2+(-1+ER(-7))/2*q-1
    P'8=q^2-E(4)
    P"8=q^2+E(4)
    P"'8=q^2-ER(2)*q+1
    P""8=q^2+ER(2)*q+1
    P'9=q^3-E(3)
    P"9=q^3-E(3)^2
    P'10=q^2+(-1-ER(5))/2*q+1
    P"10=q^2+(-1+ER(5))/2*q+1
    P'11=q^5+(1-ER(-11))/2*q^4-q^3+q^2+(-1-ER(-11))/2*q-1
    P"11=q^5+(1+ER(-11))/2*q^4-q^3+q^2+(-1+ER(-11))/2*q-1
    P'12=q^2-E(4)*q-1
    P"12=q^2+E(4)*q-1
    P"'12=q^2+E(3)^2
    P""12=q^2+E(3)
    P'13=q^6+(1-ER(13))/2*q^5+2*q^4+(-1-ER(13))/2*q^3+2*q^2+(1-ER(13))/2*q+1
    P"13=q^6+(1+ER(13))/2*q^5+2*q^4+(-1+ER(13))/2*q^3+2*q^2+(1+ER(13))/2*q+1
    P'14=q^3+(-1+ER(-7))/2*q^2+(-1-ER(-7))/2*q+1
    P"14=q^3+(-1-ER(-7))/2*q^2+(-1+ER(-7))/2*q+1
    P'15=q^4+(-1-ER(5))/2*q^3+(1+ER(5))/2*q^2+(-1-ER(5))/2*q+1
    P"15=q^4+(-1+ER(5))/2*q^3+(1-ER(5))/2*q^2+(-1+ER(5))/2*q+1
    P"'15=q^4+E(3)^2*q^3+E(3)*q^2+q+E(3)^2
    P""15=q^4+E(3)*q^3+E(3)^2*q^2+q+E(3)
    P'16=q^4-ER(2)*q^2+1
    P"16=q^4+ER(2)*q^2+1
    P'18=q^3+E(3)^2
    P"18=q^3+E(3)
    P'20=q^4+(-1-ER(5))/2*q^2+1
    P"20=q^4+(-1+ER(5))/2*q^2+1
    P"'20=q^4+E(4)*q^3-q^2-E(4)*q+1
    P""20=q^4-E(4)*q^3-q^2+E(4)*q+1
    P'21=q^6+E(3)*q^5+E(3)^2*q^4+q^3+E(3)*q^2+E(3)^2*q+1
    P"21=q^6+E(3)^2*q^5+E(3)*q^4+q^3+E(3)^2*q^2+E(3)*q+1
    P'22=q^5+(-1-ER(-11))/2*q^4-q^3-q^2+(-1+ER(-11))/2*q+1
    P"22=q^5+(-1+ER(-11))/2*q^4-q^3-q^2+(-1-ER(-11))/2*q+1
    P'24=q^4+E(3)^2
    P"24=q^4+E(3)
    P"'24=q^4-ER(2)*q^3+q^2-ER(2)*q+1
    P""24=q^4+ER(2)*q^3+q^2+ER(2)*q+1
    P'25=q^10+(1-ER(5))/2*q^5+1
    P"25=q^10+(1+ER(5))/2*q^5+1
    P'26=q^6+(-1-ER(13))/2*q^5+2*q^4+(1-ER(13))/2*q^3+2*q^2+(-1-ER(13))/2*q+1
    P"26=q^6+(-1+ER(13))/2*q^5+2*q^4+(1+ER(13))/2*q^3+2*q^2+(-1+ER(13))/2*q+1
    P'27=q^9-E(3)
    P"27=q^9-E(3)^2
    P'30=q^4+(1-ER(5))/2*q^3+(1-ER(5))/2*q^2+(1-ER(5))/2*q+1
    P"30=q^4+(1+ER(5))/2*q^3+(1+ER(5))/2*q^2+(1+ER(5))/2*q+1
    P"'30=q^4-E(3)*q^3+E(3)^2*q^2-q+E(3)
    P""30=q^4-E(3)^2*q^3+E(3)*q^2-q+E(3)^2
    P'42=q^6-E(3)^2*q^5+E(3)*q^4-q^3+E(3)^2*q^2-E(3)*q+1
    P"42=q^6-E(3)*q^5+E(3)^2*q^4-q^3+E(3)*q^2-E(3)^2*q+1

These functions require the package "chevie" (see RequirePackage). Previous Up Next
Index

GAP 3.4.4
April 1997