   Implementation in SYMMETRICA 
Implementation in SYMMETRICA
All the cycle indices for the action of the symmetry group of the
fullerene C_{60} are implemented in SYMMETRICA.
The 6dimensional
cycle indices for R and S are
INT zykelind_full60(a) OP a; 
INT zykelind_full60_extended(a) OP a;

The cycle indices for the actions on the sets of vertices, faces,
edges and diagonals are
INT zykelind_full60_vertices(a) OP a; 
INT zykelind_full60_vertices_extended(a) OP a; 
INT zykelind_full60_edges(a) OP a; 
INT zykelind_full60_edges_extended(a) OP a; 
INT zykelind_full60_faces(a) OP a; 
INT zykelind_full60_faces_extended(a) OP a; 
INT zykelind_full60_diagonals(a) OP a;

In all these cases the _extended
versions are the cycle indices
of the full symmetry group S.
Let me give a short description how to handle polynomials with variables
in several alphabets.
In SYMMETRICA there is a routine which allows to multiply two
polynomials in disjoint sets of indeterminates.
The corresponding
routine is called
INT mult_disjunkt_polynom_polynom(a,b,c) OP a,b,c;

where a
and b
are the two polynomials that should be multiplied.
c
is the result.
A POLYNOM
object in SYMMETRICA
consists of three parts:
 A coefficient,
 the so called selfpart, which is a
VECTOR
of
INTEGER
objects that represent the exponents of the monomial
summands,
 and a nextpart, which
is the lexicographically next monomial,
or zero, if there is no further monomial summand of the polynomial in
question.
The routine for multiplication of two polynomials in disjoint sets of
indeterminates works in the following way:
At first the number of variables of the first polynomial a
is
evaluated. (Let this number be n.)
Then for each monomial summand of a
it is tested, if
its selfpart is of length less than n, and if this is so,
then this selfpart
is changed into a VECTOR
object
of length n and all the new entries are set to zero.
Then the self part of each monomial summand
of b
is appended to the selfpart
of a
(of length n), forming a new selfpart of a monomial
summand of c
.
The corresponding coefficients of the monomials of a
and b
are multiplied to get the new coefficient of this monomial.
In order to work with these polynomials in
two or more alphabets it is therefore
important to know how many variables are in the first alphabet, in the
second alphabet and so on.
Or in other words, we must keep in mind
at which index of the selfpart of the monomial summands the
different alphabets start.
(The index where the ith family starts, is the
number of variables which
have already occurred in the previous i1 families.)
Using a vector of INTEGER
objects, where for each
polynomial the position in the selfparts of the monomial summands is
indicated, where the new alphabet starts, gives the whole information.
For example consider two polynomials a
and b
in two different alphabets
(a
is a polynomial in x_{i} and b
is a polynomial
in y_{i}) where a
has n variables.
Then applying
mult_disjunkt_polynom_polynom(a,b,c)

makes c
to be a polynomial in two families of variables and
the corresponding vector of starting points would be [0,n].
A monomial summand of c
can be interpreted as
s_po_k(c) Õ_{i=0}^{n1}x_{i+1}^{s_po_ii(c,i)}
Õ_{i=n}^{s_po_li(c)1}y_{in+1}^{s_po_ii(c,i)}.
For that reason a multi dimensional cycle index in SYMMETRICA consists
of a VECTOR
part and a POLYNOM
part, which can be selected
by
OP s_mz_v(a) OP a ;   OP s_mz_po(a) OP a;

The cycle indices for the actions on the sets of vertices, edges, etc.
were computed from the 6dimensional cycle indices
by extracting and identifying some families of
indeterminates.
This extraction of some families of indeterminates of
a multi dimensional cycle index can be done by
INT mz_extrahieren(a,b,c) OP a,b,c;

where a
is a multi dimensional cycle index and
b
is a VECTOR
object.
Its length tells how many families shall be combined
into the new cycle index c
.
The entries of b
are INTEGER
objects.
If for instance a
is a 6dimensional
cycle index and you want to extract the first and fifth family of
indeterminates then b
would be the VECTOR
[1,5] of
length 2.
In the case you choose only one family to be extracted the
result will be a POLYNOM
object, otherwise it is a multi
dimensional cycle index as described above.
For identifying different alphabets there is the routine
INT mz_vereinfachen(a,b) OP a,b;

which computes from a multi dimensional cycle index a
a cycle
index b
in only one alphabet.
For instance for computing the cycle index of the action on the set of
faces of the fullerene, we first extract the two families corresponding
to f_{i} and F_{i} and then identify f_{i} and F_{i}.
zykelind_full60(a); /* 6dimensional cycle index */
M_IL_V(2L,b);
M_I_I(4L,S_V_I(b,0L));
M_I_I(5L,S_V_I(b,1L));
mz_extrahieren(a,b,c); /* extracting the families 4 and 5 from a */
mz_vereinfachen(c,d); /* identifying the two alphabets */
In addition to this it should be mentioned that
the cycle indices of the symmetry groups of the tetrahedron, the
cube and the dodecahedron are implemented in the same way in SYMMETRICA.
harald.fripertinger@kfunigraz.ac.at,
last changed: January 23, 2001
   Implementation in SYMMETRICA 