Many computations for a group character chi of a group G, such as that of kernel or centre of chi, involve computations in (normal) subgroups or factor groups of G.
There are two aspects that make it reasonable to store relevant information used in these computations.
First it is possible to use the character table of a group for computations with the group. For example, suppose we know for every normal subgroup N the list of positions of conjugacy classes that form N. Then we can compute the intersection of normal subgroups efficiently by intersecting the corresponding lists.
Second one should try to reuse (expensive) information one has computed. Suppose you need the character table of a certain subgroup U that was constructed for example as inertia subgroup of a character. Then it may be probable that this group has been constructed already. So one should look whether U occurs in a list of interesting subgroups for that the tables are already known.
This section lists several data structures that support storing and using information about subgroups.
Storing Normal Subgroup Information
In some cases a question about a normal subgroup N can be answered efficiently if one knows the character table of G and the G-conjugacy classes that form N, e.g., the question whether a character of G restricts irreducibly to N. But other questions require the computation of the group N or even more information, e.g., if we want to know whether a character restricts homogeneously to N this will in general require the computation of the character table of N.
In order to do such computations only once, we introduce three components in the group record of G to store normal subgroups, the corresponding lists of conjugacy classes, and (if known) the factor groups, namely
nsg
:
nsgclasses
:nsg
component,
nsgfactors
:nsg
component.
The functions
NormalSubgroupClasses
,
FactorGroupNormalSubgroupClasses
,
ClassesNormalSubgroup
initialize these components and update them. They are the only functions that do this.
So if you need information about a normal subgroup of G for that you know
the G-conjugacy classes, you should get it using NormalSubgroupClasses
.
If the normal subgroup was already stored it is just returned, with all the
knowledge it contains. Otherwise the normal subgroup is computed and
added to the lists, and will be available for the next call.
Storing information for computing conjugate class functions
The computation of conjugate class functions requires the computation of
permutatins of the list of conjugacy classes. In order to minimize the
number of membership tests in conjugacy classes it is useful to store
a partition of classes that is respected by every admissible permutation.
This is stored in the component globalPartitionClasses
.
If the normalizer N of H in its parent is stored in H, or if H is
normal in its parent then the component permClassesHomomorphism
is used.
It holds the group homomorphism mapping every element of N to the
induced permutation of classes.
Both components are generated automatically when they are needed.
Storing inertia subgroup information
Let N be the normalizer of H in its parent, and chi a character
of H. The inertia subgroup I_N(chi) is the stabilizer
in N of chi under conjugation of class functions. Characters with
same value distribution, like Galois conjugate characters, have the
same inertia subgroup. It seems to be useful to store this information.
For that, the inertiaInfo
component of H is initialized when needed,
a record with components partitions
and stabilizers
, both lists.
The stabilizers
component contains the stabilizer in N of the
corresponding partition.
GAP 3.4.4