In this section we describe how a CrystGroup G is represented
internally. The casual user can skip this section in a first reading.
Although the generators of a CrystGroup can be specified with respect to
any basis, most computations are done internally in a special, standard
basis, which is stored in G.internalBasis. The results are translated
into the user-specified basis only afterwards. G.internalBasis consists
of a (standard) basis of the translation lattice of G, complemented, if
necessary, with suitable standard basis vectors. The standard basis of
the translation lattice is stored in G.translations.
As soon as G.internalBasis has been determined, both the CrystGroup G
and its point group P obtain a component internalGenerators. For the
point group P, the component P.internalGenerators contains a set of
generators of P, expressed with respect to the internalBasis of G,
whereas for the CrystGroup G the component G.internalGenerators
contains a set of homomorphic preimages of P.internalGenerators in G,
also expressed in the internalBasis of G. Thus G.internalGenerators
does not contain any translation generators. These are easy to add,
however: With respect to the internal basis, the translations are
generated by the first k standard basis vectors, where k is the rank
of the translation lattice.
Note that the internalGenerators of both a point group P and a
CrystGroup G may be changed by some functions, notably by FpGroup.
Thus they need not have any obvious connection to P.generators and
G.generators, respectively. Internal record entries of a CrystGroup
should never be changed by the user.
GAP 3.4.4