[GAP Forum] Finding subgroups

Alexander Hulpke hulpke at math.colostate.edu
Wed Mar 10 22:44:32 GMT 2010

Dear forum,

On Mar 9, 2010, at 3/9/10 11:13, krishna mohan wrote:

>       I needed to find the list of all subgroups for some commonly encountered groups like SU(3), S4 etc. It seems to me that GAP can only give the subgroups by listing the generators. 
> Does anyone know if there is anyway that I can make it give me names of subgroups, like say A4? 

 in general, it doesn't really make sense to try to assign a name to a group of order more than 15 or so. Unless you're lucky, and have very particular groups with nice names, you'll end up with a large number of groups whose names are somehow very nondescriptive.
Having said this, I append a description from a manual, currently in beta,
 that tries to describe what one can hope to do as far as a group naming goes.

Best wishes,

Alexander Hulpke

\section{Identifying groups}

One of the most frequent requests that comes up is for {\GAP} to
``identify'' a given group. While some functionality for this exists, the
problem is basically what ``identify'' means, or what a user expects from
For tiny orders (say up to 15), there are few groups up to isomorphism, and
each of the groups has a ``natural'' name. Furthermore many these names belong
into series (symmetric groups, dihedral groups, cyclic groups) and the
remaining groups are in obvious ways (direct product or possibly semidirect
product) composed from groups named this way.
This clean situation breaks down quickly once the order increases: for
example there are
-- up to isomorphism -- 14 groups of order 16, 231 of order 96 and over 10
million of order 512. This rapid growth goes beyond any general ``naming''
or ``composition'' scheme.
A decomposition as semidirect, subdirect or central product is not uniquely
defined without some further information, which can be rather extensive to
write down.
Even if one might hope that a particular group would be composable in a nice
way, this does not lead to an ``obvious'' description, for example the same
group of order 16 could be described for example as $C_2\times D_8$, or as
$C_2\ltimes Q_8$, or as $(C_2\times C_4)\rtimes C_2$ (and -- vice versa --
the last name could be given to $4$ nonisomorphic groups). In the context of
matrix groups in characteristic $2$, $S_3$ is better called $SL_2(2)$, and
so on.
There are libraries of different classes of groups (e.g. small order up to
isomorphism, or transitive subgroup of $S_n$ (for small $n$) up to
conjugacy); these libraries typically allow to identify a given group, but
the identification is just like the library call number of a book and gives
little information about the group, it is mainly of use to allow recreation
of the group with the identification number given as only information.

With these caveats, the following functions exist to identify groups and
give them a name:

\paragraph{\texttt{StructureDescription}} returns a string describing the
isomorphism type of a group \gvar{G}. This string is produced recursively,
trying to decompose groups as direct or semidirect products. The resulting
string does \textbf{not} identify isomorphism types, nor is it neccessarily
the most ``natural'' description of a group.
gap> g:=Group((1,2,3),(2,3,4));;
gap> StructureDescription(g);

\paragraph{Group Libraries}
{\GAP} contains extensive libraries of ``small'' groups and many of these
libraries allow identificatuion of a group therein. The associated library
group then often comes with a name that might be appropriate.
\item[Small Groups]
The small groups library contains -- amongst others -- all groups of order
$\le 1000$, except $512$. For such a group \texttt{IdGroup} returns a list
\gvar{[sz,num]} such that the group is isomorphic to
gap> g:=Group((1,2,3),(2,3,4));;
gap> IdGroup(g);
[ 12, 3 ]
gap> SmallGroup(12,3);
<pc group of size 12 with 3 generators>
\item[Transitive Groups]
The transitive groups library contains transitive subgroups of $S_n$ of
degree $\le 31$ up to $S_n$ conjugacy. For such a group of degree $n$,
\texttt{TransitiveIdentification} returns a number \gvar{num}, such that the
group is conjugate in $S_n$ to \texttt{TransitiveGroup(\gvar{n,num})}.
gap> g:=Group((1,2,3),(2,3,4));;
gap> TransitiveIdentification(g);
gap> TransitiveGroup(NrMovedPoints(g),4);

\item[Primitive Groups]
The primitive groups library contains primitive subgroups of $S_n$ (i.e. the
group is transitive and affords no nontrivial $G$-invariant partition of
the points) of
degree $\le 1000$ up to $S_n$ conjugacy. For such a group of degree $n$,
\texttt{PrimitiveIdentification} returns a number \gvar{num}, such that the
group is conjugate in $S_n$ to \texttt{PrimitiveGroup(\gvar{n,num})}.
gap> g:=Group((1,2,3),(2,3,4));;
gap> IsPrimitive(g,[1..4]);
gap> PrimitiveIdentification(g);
gap> PrimitiveGroup(NrMovedPoints(g),1);

-- Colorado State University, Department of Mathematics,
Weber Building, 1874 Campus Delivery, Fort Collins, CO 80523-1874, USA
email: hulpke at math.colostate.edu, Phone: ++1-970-4914288

More information about the Forum mailing list