7 Utility Functions Provided by the CTblLib Package This chapter describes GAP functions that are provided by the CTblLib package but that might be of general interest. For the moment, there are just two features to describe, the generation of Atlas irrationalities from cyclotomic integers (see Section 7.1), and the generation of information about the group structure from identifiers of character tables (see Section 7.2). 7.1 Write Character Values in Terms of Atomic Atlas Irrationalities 7.1-1 CTblLib.StringOfAtlasIrrationality CTblLib.StringOfAtlasIrrationality( cyc )  function Returns: a string that describes the cyclotomic integer cyc. This function is intended for expressing the cyclotomic integer cyc as a linear combination of so-called atomic Atlas irrationalities (see [CCN+85, p. xxvii]), with integer coefficients. Often there is no optimal expression of that kind for cyc, and this function uses certain heuristics for finding a not too bad expression. Concerning the character tables in the Atlas of Finite Groups [CCN+85], an explicit mapping between the values which are computed by this function and the descriptions that are shown in the book is available, see CTblLib.IrrationalityMapping. Such a mapping is not yet available for the character tables from the Atlas of Brauer Characters [JLPW95], this function is only experimental for these tables, it is likely to be changed in the future. CTblLib.StringOfAtlasIrrationality is used by BrowseAtlasTable (3.5-9).  Example  gap> values:= List( [ "e31", "y'24+3", "r2+i", "r2+i2" ], >  AtlasIrrationality );; gap> List( values, CTblLib.StringOfAtlasIrrationality ); [ "e31", "y'24+3", "z8-&3+i", "2z8" ]  The implementation uses the following heuristics for computing a description of the cyclotomic integer cyc with conductor N, say.  If N is not squarefree the let N_0 be the squarefree part of N, split cyc into the sum of its odd squarefree part and its non-squarefree part, and consider the two values separately; note that the odd squarefree part is well-defined by the fact that the basis of the N-th cyclotomic field given by ZumbroichBase (Reference: ZumbroichBase) contains all primitive N_0-th roots of unity. Also note that except for quadratic irrationalities (where N is squarefree), all roots of unity that are involved in the representation of atomic irrationalities w. r. t. this basis have the same multiplicative order.  If cyc is a multiple of a root of unity then write it as such, i. e., as a string involving z_N.  Otherwise, if cyc lies in a quadratic number field then write it as a linear combination of an integer. Usually the string involves r_N, i_N, or b_N, but also multiples of b_M may occur, where M is a –not squarefree– multiple of N.  Otherwise, find a large cyclic subgroup of the stabilizer of cyc inside the Galois group over the Rationals –this subgroup defines an atomic irrationality– and express cyc as a linear combination of the orbit sums. In the worst case, there is no nontrivial stabilizer, and we find only a description as a sum of roots of unity. There is of course a lot of space for improvements. For example, one could use the Bosma basis representation (see BosmaBase (6.5-1)) of cyc for splitting the value into a sum of values from strictly smaller cyclotomic fields, which would be useful at least if their conductors are coprime. Note that the Bosma basis of the N-th cyclotomic field has the property that it is a union of bases for the cyclotomic fields with conductor dividing N. Thus one can easily find out that sqrt{5} + sqrt{7} can be written as a sum of two values in terms of 5-th and 7-th roots of unity. In non-coprime situations, this argument fails. For example, one can still detect that sqrt{15} + sqrt{21} involves only 15-th and 21-th roots of unity, but it is not obvious how to split the value into the two parts. 7.2 Create a String that Describes the Group Structure 7.2-1 StructureDescriptionCharacterTableName StructureDescriptionCharacterTableName( name )  function For a string name that is an admissible name of a character table, StructureDescriptionCharacterTableName returns a string that is intended as a description of the structure of the underlying group. Note that many identifiers of character tables (see Identifier (Reference: Identifier for character tables)) do not describe the group structure in an appropriate way. One reason for choosing such identifiers on purpose is that several character tables for isomorphic groups can be contained in the library, because the groups have different class fusions into another group. For example, the Mathieu group M_12 contains two classes of subgroups isomorphic with M_11, and the identifiers of the character tables corresponding to these subgroups are "M11" and "M12M2", respectively.  Example  gap> StructureDescriptionCharacterTableName( "M12M2" ); "M11"