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
CycPol
s 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]
.
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).
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).
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