# 47 Tables of Marks

The concept of a table of marks was introduced by W.~Burnside in his book Theory of Groups of Finite Order Bur55. Therefore a table of marks is sometimes called a Burnside matrix.

The table of marks of a finite group G is a matrix whose rows and columns are labelled by the conjugacy classes of subgroups of G and where for two subgroups A and B the (A, B)--entry is the number of fixed points of B in the transitive action of G on the cosets of A in G. So the table of marks characterizes all permutation representations of G.

Moreover, the table of marks gives a compact description of the subgroup lattice of G, since from the numbers of fixed points the numbers of conjugates of a subgroup B contained in a subgroup A can be derived.

This chapter describes a function (see TableOfMarks) which restores a The Library of Tables of Marks) or which computes the table of marks for a given group from the subgroup lattice of that group. Moreover this package contains a function to display a table of marks (see DisplayTom), a function to check the consistency of a table of marks (see TestTom), functions which switch between several forms of representation (see Marks, NrSubs, MatTom, and TomMat), functions which derive information about the group from the table of marks (see DecomposedFixedPointVector, NormalizerTom, IntersectionsTom, IsCyclicTom, FusionCharTableTom, PermCharsTom, MoebiusTom, CyclicExtensionsTom, IdempotentsTom, ClassTypesTom, and ClassNamesTom), and some functions for the generic construction of a table of marks (see TomCyclic, TomDihedral, and TomFrobenius).

The functions described in this chapter are implemented in the file `LIBNAME/"tom.g"`.

## 47.1 More about Tables of Marks

Let G be a finite group with n conjugacy classes of subgroups C_1, ldots, C_n and representatives H_i in C_i, i = 1, ldots, n. The table of marks of G is defined to be the n times n matrix M = (m_{ij}) where m_{ij} is the number of fixed points of the subgroup H_j in the action of G on the cosets of H_i in G.

Since H_j can only have fixed points if it is contained in a one point stablizer the matrix M is lower triangular if the classes C_i are sorted according to the following condition; if H_i is contained in a conjugate of H_j then i leq j.

Moreover, the diagonal entries m_{ii} are nonzero since m_{ii} equals the index of H_i in its normalizer in G. Hence M is invertible. Since any transitive action of G is equivalent to an action on the cosets of a subgroup of G, one sees that the table of marks completely characterizes permutation representations of G.

The entries m_{ij} have further meanings. If H_1 is the trivial subgroup of G then each mark m_{i1} in the first column of M is equal to the index of H_i in G since the trivial subgroup fixes all cosets of H_i. If H_n = G then each m_{nj} in the last row of M is equal to 1 since there is only one coset of G in G. In general, m_{ij} equals the number of conjugates of H_i which contain H_j, multiplied by the index of H_i in its normalizer in G. Moreover, the number c_{ij} of conjugates of H_j which are contained in H_i can be derived from the marks m_{ij} via the formula

[ c_ij = fracm_ij m_j1m_i1 m_jj. ]

Both the marks m_{ij} and the numbers of subgroups c_{ij} are needed for the functions described in this chapter.

## 47.2 Table of Marks Records

A table of marks is represented by a record. This record has at least a component `subs` which is a list where for each conjugacy class of subgroups the class numbers of its subgroups are stored. These are exactly the positions in the corresponding row of the table of marks which have nonzero entries.

The marks themselves can be stored in the component `marks` which is a list that contains for each entry in the component `subs` the corresponding nonzero value of the table of marks.

The same information is, however, given by the three components `nrSubs`, `length`, and `order`, where `nrSubs` is a list which contains for each entry in the component `subs` the corresponding number of conjugates which are contained in a subgroup, `length` is a list which contains for each class of subgroups its length, and `order` is a list which contains for each class of subgroups their order.

So a table of marks consists either of the components `subs` and `marks` or of the components `subs`, `nrSubs`, `length`, and `order`. The functions `Marks` (see Marks) and `NrSubs` (see NrSubs) will derive one representation from the other when needed.

Additional information about a table of marks is needed by some functions. The class numbers of normalizers are stored in the component `normalizer`. The number of the derived subgroup of the whole group is stored in the component `derivedSubgroup`.

## 47.3 The Library of Tables of Marks

This package of functions comes together with a library of tables of marks. The library files are stored in a directory `TOMNAME`. The file `TOMNAME/"tmprimar.tom"` is the primary file of the library of tables of marks. It contains the information where to find a table and the function `TomLibrary` which restores a table from the library.

The secondary files are

```    tmaltern.tom  tmmath24.tom  tmsuzuki.tom  tmunitar.tom

The list `TOMLIST` contains for each table an entry with its name and the name of the file where it is stored.

A table of marks which is restored from the library will be stored as a component of the record `TOM`.

## 47.4 TableOfMarks

`TableOfMarks( str )`

If the argument str given to `TableOfMarks` is a string then The Library of Tables of Marks) for a table with name str. If such a table is found then `TableOfMarks` will return a copy of that table. Otherwise `TableOfMarks` will return `false`.

```    gap> a5 := TableOfMarks( "A5" );
rec(
derivedSubgroup := 9,
normalizer := [ 9, 4, 6, 8, 7, 6, 7, 8, 9 ],
nrSubs := [ [ 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 3, 1 ], [ 1, 1 ],
[ 1, 3, 1, 1 ], [ 1, 5, 1, 1 ], [ 1, 3, 4, 1, 1 ],
[ 1, 15, 10, 5, 6, 10, 6, 5, 1 ] ],
order := [ 1, 2, 3, 4, 5, 6, 10, 12, 60 ],
subs := [ [ 1 ], [ 1, 2 ], [ 1, 3 ], [ 1, 2, 4 ], [ 1, 5 ],
[ 1, 2, 3, 6 ], [ 1, 2, 5, 7 ], [ 1, 2, 3, 4, 8 ],
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] ],
length := [ 1, 15, 10, 5, 6, 10, 6, 5, 1 ] )
gap> TableOfMarks( "A10" );
#W  TableOfMarks: no table of marks A10 found.
false ```

`TableOfMarks( grp )`

If `TableOfMarks` is called with a group grp as its argument then the table of marks of that group will be computed and returned in the compressed format. The computation of the table of marks requires the knowledge of the complete subgroup lattice of the group grp. If the lattice is not yet known then it will be constructed (see Lattice). This may take a while if the group grp is large.

Moreover, as the `Lattice` command is involved the applicability of `TableOfMarks` underlies the same restrictions with respect to the soluble residuum of grp as described in section Lattice. The result of `TableOfMarks` is assigned to the component `tableOfMarks` of the group record grp, so that the next call to `TableOfMarks` with the same argument can just return this component `tableOfMarks`.

Warning: Note that `TableOfMarks` has changed with the release GAP 3.2. It now returns the table of marks in compressed form. However, you can apply the `MatTom` command (see MatTom) to convert it into the square matrix which was returned by `TableOfMarks` in GAP version 3.1.

```    gap> alt5 := AlternatingPermGroup( 5 );;
gap> TableOfMarks( alt5 );
rec(
subs := [ [ 1 ], [ 1, 2 ], [ 1, 3 ], [ 1, 2, 4 ], [ 1, 5 ],
[ 1, 2, 3, 6 ], [ 1, 2, 5, 7 ], [ 1, 2, 3, 4, 8 ],
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] ],
marks := [ [ 60 ], [ 30, 2 ], [ 20, 2 ], [ 15, 3, 3 ], [ 12, 2 ],
[ 10, 2, 1, 1 ], [ 6, 2, 1, 1 ], [ 5, 1, 2, 1, 1 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ] )
gap> last = alt5.tableOfMarks;
true ```

For a pretty print display of a table of marks see DisplayTom.

## 47.5 Marks

`Marks( tom )`

`Marks` returns the list of lists of marks of the table of marks tom. If these are not yet stored in the component `marks` of tom then they will be computed and assigned to the component `marks`.

```    gap> Marks( a5 );
[ [ 60 ], [ 30, 2 ], [ 20, 2 ], [ 15, 3, 3 ], [ 12, 2 ],
[ 10, 2, 1, 1 ], [ 6, 2, 1, 1 ], [ 5, 1, 2, 1, 1 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ] ```

## 47.6 NrSubs

`NrSubs( tom )`

`NrSubs` returns the list of lists of numbers of subgroups of the table of marks tom. If these are not yet stored in the component `nrSubs` of tom then they will be computed and assigned to the component `nrSubs`.

`NrSubs` also has to compute the orders and lengths from the marks.

```    gap> NrSubs( a5 );
[ [ 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 3, 1 ], [ 1, 1 ], [ 1, 3, 1, 1 ],
[ 1, 5, 1, 1 ], [ 1, 3, 4, 1, 1 ], [ 1, 15, 10, 5, 6, 10, 6, 5, 1 ]
]```

## 47.7 WeightsTom

`WeightsTom( tom )`

`WeightsTom` extracts the weights from a table of marks tom, i.e., the diagonal entries, indicating the index of a subgroup in its normalizer.

```    gap> wt := WeightsTom( a5 );
[ 60, 2, 2, 3, 2, 1, 1, 1, 1 ] ```

This information may be used to obtain the numbers of conjugate supergroups from the marks.

```    gap> marks := Marks( a5 );;
gap> List( [ 1 .. 9 ], x -> marks[x] / wt[x] );
[ [ 1 ], [ 15, 1 ], [ 10, 1 ], [ 5, 1, 1 ], [ 6, 1 ], [ 10, 2, 1, 1 ],
[ 6, 2, 1, 1 ], [ 5, 1, 2, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ]```

## 47.8 MatTom

`MatTom( tom )`

`MatTom` produces a square matrix corresponding to the table of marks tom in compressed form. For large tables this may need a lot of space.

```    gap> MatTom( a5 );
[ [ 60, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 30, 2, 0, 0, 0, 0, 0, 0, 0 ],
[ 20, 0, 2, 0, 0, 0, 0, 0, 0 ], [ 15, 3, 0, 3, 0, 0, 0, 0, 0 ],
[ 12, 0, 0, 0, 2, 0, 0, 0, 0 ], [ 10, 2, 1, 0, 0, 1, 0, 0, 0 ],
[ 6, 2, 0, 0, 1, 0, 1, 0, 0 ], [ 5, 1, 2, 1, 0, 0, 0, 1, 0 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ] ```

## 47.9 TomMat

`TomMat( mat )`

Given a matrix mat which contains the marks of a group as its entries, `TomMat` will produce the corresponding table of marks record.

```    gap> mat:=
> [ [ 60, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 30, 2, 0, 0, 0, 0, 0, 0, 0 ],
>   [ 20, 0, 2, 0, 0, 0, 0, 0, 0 ], [ 15, 3, 0, 3, 0, 0, 0, 0, 0 ],
>   [ 12, 0, 0, 0, 2, 0, 0, 0, 0 ], [ 10, 2, 1, 0, 0, 1, 0, 0, 0 ],
>   [ 6, 2, 0, 0, 1, 0, 1, 0, 0 ], [ 5, 1, 2, 1, 0, 0, 0, 1, 0 ],
>   [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ];;
gap> TomMat( mat );
rec(
subs := [ [ 1 ], [ 1, 2 ], [ 1, 3 ], [ 1, 2, 4 ], [ 1, 5 ],
[ 1, 2, 3, 6 ], [ 1, 2, 5, 7 ], [ 1, 2, 3, 4, 8 ],
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] ],
marks := [ [ 60 ], [ 30, 2 ], [ 20, 2 ], [ 15, 3, 3 ], [ 12, 2 ],
[ 10, 2, 1, 1 ], [ 6, 2, 1, 1 ], [ 5, 1, 2, 1, 1 ],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ] )
gap> TomMat( IdentityMat( 7 ) );
rec(
subs := [ [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ], [ 6 ], [ 7 ] ],
marks := [ [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ] ] ) ```

## 47.10 DecomposedFixedPointVector

`DecomposedFixedPointVector( tom, fix )`

Let the group with table of marks tom act as a permutation group on its conjugacy classes of subgroups, then fix is assumed to be a vector of fixed point numbers, i.e., a vector which contains for each class of subgroups the number of fixed points under that action. `DecomposedFixedPointVector` returns the decomposition of fix into rows of the table of marks. This decomposition corresponds to a decomposition of the action into transitive constituents. Trailing zeros in fix may be omitted.

```    gap> DecomposedFixedPointVector( a5, [ 16, 4, 1, 0, 1, 1, 1 ] );
[ ,,,,, 1, 1 ] ```

The vector fix may be any vector of integers. The resulting decomposition, however, will not be integral, in general.

```    gap> DecomposedFixedPointVector( a5, [ 0, 0, 0, 0, 1, 1 ] );
[ 2/5, -1, -1/2,, 1/2, 1 ] ```

## 47.11 TestTom

`TestTom( tom )`

`TestTom` decomposes all tensor products of rows of the table of marks tom. It returns `true` if all decomposition numbers are nonnegative integers and `false` otherwise. This provides a strong consistency check for a table of marks.

```    gap> TestTom( a5 );
true ```

## 47.12 DisplayTom

`DisplayTom( tom )`

`DisplayTom` produces a formatted output for the table of marks tom. Each line of output begins with the number of the corresponding class of subgroups. This number is repeated if the output spreads over several pages.

```    gap> DisplayTom( a5 );
1:  60
2:  30 2
3:  20 . 2
4:  15 3 . 3
5:  12 . . . 2
6:  10 2 1 . . 1
7:   6 2 . . 1 . 1
8:   5 1 2 1 . . . 1
9:   1 1 1 1 1 1 1 1 1 ```

`DisplayTom( tom, arec )`

In this form `DisplayTom` takes a record arec as an additional parameter. If this record has a component `classes` which contains a list of class numbers then only the rows and columns of the matrix corresponding to this list are printed.

```    gap> DisplayTom( a5, rec( classes := [ 1, 2, 3, 4, 8 ] ) );
1:  60
2:  30 2
3:  20 . 2
4:  15 3 . 3
8:   5 1 2 1 1 ```

The record arec may also have a component `form` which enables the printing of tables of numbers of subgroups. If arec.`form` has the value `"subgroups"` then at position (i,j) the number of conjugates of H_j contained in H_i will be printed. If it has the value `"supergroups"` then at position (i,j) the number of conjugates of H_i which contain H_j will be printed.

```    gap> DisplayTom( a5, rec( form := "subgroups" ) );
1:  1
2:  1  1
3:  1  .  1
4:  1  3  . 1
5:  1  .  . . 1
6:  1  3  1 . .  1
7:  1  5  . . 1  . 1
8:  1  3  4 1 .  . . 1
9:  1 15 10 5 6 10 6 5 1

gap> DisplayTom( a5, rec( form := "supergroups" ) );
1:   1
2:  15 1
3:  10 . 1
4:   5 1 . 1
5:   6 . . . 1
6:  10 2 1 . . 1
7:   6 2 . . 1 . 1
8:   5 1 2 1 . . . 1
9:   1 1 1 1 1 1 1 1 1 ```

## 47.13 NormalizerTom

`NormalizerTom( tom, u )`

`NormalizerTom` tries to find conjugacy class of the normalizer of a subgroup with class number u. It will return the list of class numbers of those subgroups which have the right size and contain the subgroup and all subgroups which clearly contain it as a normal subgroup. If the normalizer is uniquely determined by these conditions then only its class number will be returned. `NormalizerTom` should never return an empty list.

```    gap> NormalizerTom( a5, 4 );
8 ```

The example shows that a subgroup with class number 4 in A_5 (which is a Kleinan four group) is normalized by a subgroup in class 8. This class contains the subgroups of A_5 which are isomorphic to A_4.

## 47.14 IntersectionsTom

`IntersectionsTom( tom, a, b )`

The intersections of the two conjugacy classes of subgroups with class numbers a and b, respectively, are determined by the decomposition of the tensor product of their rows of marks. `IntersectionsTom` returns this decomposition.

```    gap> IntersectionsTom( a5, 8, 8 );
[ ,, 1,,,,, 1 ] ```

Any two subgroups of class number 8 (A_4) of A_5 are either equal and their intersection has again class number 8, or their intersection has class number 3, and is a cyclic subgroup of order 3.

## 47.15 IsCyclicTom

`IsCyclicTom( tom, n )`

A subgroup is cyclic if and only if the sum over the corresponding row of the inverse table of marks is nonzero (see Ker91, page 125). Thus we only have to decompose the corresponding idempotent.

```    gap> for i in [ 1 .. 6 ] do
> Print( i, ": ", IsCyclicTom(a5, i), "  " );
> od;  Print( "\n" );
1: true  2: true  3: true  4: false  5: true  6: false   ```

## 47.16 FusionCharTableTom

`FusionCharTableTom( tbl, tom )`

`FusionCharTableTom` determines the fusion of the classes of elements from the character table tbl into classes of cyclic subgroups on the table of marks tom.

```    gap> a5c := CharTable( "A5" );;
gap> fus := FusionCharTableTom( a5c, a5 );
[ 1, 2, 3, 5, 5 ] ```

## 47.17 PermCharsTom

`PermCharsTom( tom, fus )`

`PermCharsTom` reads the list of permutation characters from the table of marks tom. It therefore has to know the fusion map fus which sends each conjugacy class of elements of the group to the conjugacy class of subgroups they generate.

```    gap> PermCharsTom( a5, fus );
[ [ 60, 0, 0, 0, 0 ], [ 30, 2, 0, 0, 0 ], [ 20, 0, 2, 0, 0 ],
[ 15, 3, 0, 0, 0 ], [ 12, 0, 0, 2, 2 ], [ 10, 2, 1, 0, 0 ],
[ 6, 2, 0, 1, 1 ], [ 5, 1, 2, 0, 0 ], [ 1, 1, 1, 1, 1 ] ] ```

## 47.18 MoebiusTom

`MoebiusTom( tom )`

`MoebiusTom` computes the Maccent127 obius values both of the subgroup lattice of the group with table of marks tom and of the poset of conjugacy classes of subgroups. It returns a record where the component `mu` contains the Maccent127 obius values of the subgroup lattice, and the component `nu` contains the Maccent127 obius values of the poset. Moreover, according to a conjecture of Isaacs et al. (see HIO89, Pah93), the values on the poset of conjugacy classes are derived from those of the subgroup lattice. These theoretical values are returned in the component `ex`. For that computation, the derived subgroup must be known in the component `derivedSubgroup` of tom. The numbers of those subgroups where the theoretical value does not coincide with the actual value are returned in the component `hyp`.

```    gap> MoebiusTom( a5 );
rec(
mu := [ -60, 4, 2,,, -1, -1, -1, 1 ],
nu := [ -1, 2, 1,,, -1, -1, -1, 1 ],
ex := [ -60, 4, 2,,, -1, -1, -1, 1 ],
hyp := [  ] ) ```

## 47.19 CyclicExtensionsTom

`CyclicExtensionsTom( tom, p )`

According to A.~Dress Dre69, two columns of the table of marks tom are equal modulo the prime p if and only if the corresponding subgroups are connected by a chain of normal extensions of order p. `CyclicExtensionsTom` returns the classes of this equivalence relation.

This information is not used by `NormalizerTom` although it might give additional restrictions in the search of normalizers.

```    gap> CyclicExtensionsTom( a5, 2 );
[ [ 1, 2, 4 ], [ 3, 6 ], [ 5, 7 ], [ 8 ], [ 9 ] ] ```

## 47.20 IdempotentsTom

`IdempotentsTom( tom )`

`IdempotentsTom` returns the list of idempotents of the integral Burnside ring described by the table of marks tom. According to A.~Dress Dre69, these idempotents correspond to the classes of perfect subgroups, and each such idempotent is the characteristic function of all those subgroups which arise by cyclic extension from the corresponding perfect subgroup.

```    gap> IdempotentsTom( a5 );
[ 1, 1, 1, 1, 1, 1, 1, 1, 9 ] ```

## 47.21 ClassTypesTom

`ClassTypesTom( tom )`

`ClassTypesTom` distinguishes isomorphism types of the classes of subgroups of the table of marks tom as far as this is possible. Two subgroups are clearly not isomorphic if they have different orders. Moreover, isomorphic subgroups must contain the same number of subgroups of each type.

The types are represented by numbers. `ClassTypesTom` returns a list which contains for each class of subgroups its corresponding number.

```    gap> a6 := TableOfMarks( "A6" );;
gap> ClassTypesTom( a6 );
[ 1, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 9, 10, 11, 11, 12, 13, 13, 14, 15,
15, 16 ] ```

## 47.22 ClassNamesTom

`ClassNamesTom( tom )`

`ClassNamesTom` constructs generic names for the conjugacy classes of subgroups of the table of marks tom.

In general, the generic name of a class of non--cyclic subgroups consists of three parts, `"(order)"`, `"_{type}"`, and `"letter"`, and hence has the form `"(order)_{type}letter"`, where order indicates the order of the subgroups, type is a number that distinguishes different types of subgroups of the same order, and letter is a letter which distinguishes classes of subgroups of the same type and order. The type of a subgroup is determined by the numbers of its subgroups of other types (see ClassTypesTom). This is slightly weaker than isomorphism.

The letter is omitted if there is only one class of subgroups of that order and type, and the type is omitted if there is only one class of that order. Moreover, the braces round the type are omitted if the type number has only one digit.

For classes of cyclic subgoups, the parentheses round the order and the type are omitted. Hence the most general form of their generic names is `"order,letter"`. Again, the letter is omitted if there is only one class of cyclic subgroups of that order.

```    gap> ClassNamesTom( a6 );
[ "1", "2", "3a", "3b", "5", "4", "(4)_2a", "(4)_2b", "(6)a", "(6)b",
"(9)", "(10)", "(8)", "(12)a", "(12)b", "(18)", "(24)a", "(24)b",
"(36)", "(60)a", "(60)b", "(360)" ] ```

## 47.23 TomCyclic

`TomCyclic( n )`

`TomCyclic` constructs the table of marks of the cyclic group of order n. A cyclic group of order n has as its subgroups for each divisor d of n a cyclic subgroup of order d. The record which is returned has an additional component `name` where for each subgroup its order is given as a string.

```    gap> c6 := TomCyclic( 6 );
rec(
name := [ "1", "2", "3", "6" ],
subs := [ [ 1 ], [ 1, 2 ], [ 1, 3 ], [ 1, 2, 3, 4 ] ],
marks := [ [ 6 ], [ 3, 3 ], [ 2, 2 ], [ 1, 1, 1, 1 ] ] )
gap> DisplayTom( c6 );
1:  6
2:  3 3
3:  2 . 2
4:  1 1 1 1 ```

## 47.24 TomDihedral

`TomDihedral( m )`

`TomDihedral` constructs the table of marks of the dihedral group of order m. For each divisor d of m, a dihedral group of order m = 2n contains subgroups of order d according to the following rule. If d is odd and divides n then there is only one cyclic subgroup of order d. If d is even and divides n then there are a cyclic subgroup of order d and two classes of dihedral subgroups of order d which are cyclic, too, in the case d = 2, see example below). Otherwise, (i.e. if d does not divide n, there is just one class of dihedral subgroups of order d.

```    gap> d12 := TomDihedral( 12 );
rec(
name := [ "1", "2", "D_{2}a", "D_{2}b", "3", "D_{4}", "6",
"D_{6}a", "D_{6}b", "D_{12}" ],
subs := [ [ 1 ], [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 1, 5 ],
[ 1, 2, 3, 4, 6 ], [ 1, 2, 5, 7 ], [ 1, 3, 5, 8 ],
[ 1, 4, 5, 9 ], [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] ],
marks := [ [ 12 ], [ 6, 6 ], [ 6, 2 ], [ 6, 2 ], [ 4, 4 ],
[ 3, 3, 1, 1, 1 ], [ 2, 2, 2, 2 ], [ 2, 2, 2, 2 ],
[ 2, 2, 2, 2 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ] )
gap> DisplayTom( d12 );
1:  12
2:   6 6
3:   6 . 2
4:   6 . . 2
5:   4 . . . 4
6:   3 3 1 1 . 1
7:   2 2 . . 2 . 2
8:   2 . 2 . 2 . . 2
9:   2 . . 2 2 . . . 2
10:   1 1 1 1 1 1 1 1 1 1 ```

## 47.25 TomFrobenius

`TomFrobenius( p, q )`

`TomFrobenius` computes the table of marks of a Frobenius group of order p q, where p is a prime and q divides p-1.

```    gap> f20 := TomFrobenius( 5, 4 );
rec(
name := [ "1", "2", "4", "5:1", "5:2", "5:4" ],
subs := [ [ 1 ], [ 1, 2 ], [ 1, 2, 3 ], [ 1, 4 ], [ 1, 2, 4, 5 ],
[ 1, 2, 3, 4, 5, 6 ] ],
marks :=
[ [ 20 ], [ 10, 2 ], [ 5, 1, 1 ], [ 4, 4 ], [ 2, 2, 2, 2 ],
[ 1, 1, 1, 1, 1, 1 ] ] )
gap> DisplayTom( f20 );
1:  20
2:  10 2
3:   5 1 1
4:   4 . . 4
5:   2 2 . 2 2
6:   1 1 1 1 1 1 ```

GAP 3.4.4
April 1997