%% for a long time these were red and blue by default, %% now black, but keep variables to overwrite \definecolor{FuncColor}{rgb}{0.0,0.0,0.0} %% strange name because of pdflatex bug: \definecolor{Chapter }{rgb}{0.0,0.0,0.0} \definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064}
% write page numbers to a .pnr log file for online help \newwrite\pagenrlog \immediate\openout\pagenrlog =\jobname.pnr \immediate\write\pagenrlog{PAGENRS := [} \newcommand{\logpage}[1]{\protect\write\pagenrlog{#1, \thepage,}} %% were never documented, give conflicts with some additional packages
\newcommand{\GAP}{\textsf{GAP}}
%% nicer description environments, allows long labels \usepackage{enumitem} \setdescription{style=nextline}
\hypersetup{pdftitle=\textsf{PrimGrp}} \markright{\scriptsize\mbox{}\hfill\textsf{PrimGrp} \hfill\mbox{}}
{\Huge\textbf{\textsf{GAP} Primitive Permutation Groups Library\mbox{}}}\\ \vfill
{\Huge Version 4.0.1\mbox{}}\\[1cm]
{24 September 2025\mbox{}}\\[1cm] \mbox{}\\[2cm]
{\Large\textbf{Alexander Hulpke \mbox{}}}\\
{\Large\textbf{Colva Roney\texttt{\symbol{45}}Dougal \mbox{}}}\\
{\Large\textbf{Christopher Russell \mbox{}}}\\ \hypersetup{pdfauthor=Alexander Hulpke ; Colva Roney\texttt{\symbol{45}}Dougal ; Christopher Russell } \end{center}\vfill
\mbox{}\\
{\mbox{}\\ \small\noindent\textbf{Alexander Hulpke } Email: \href{mailto://hulpke@math.colostate.edu} {\texttt{hulpke@math.colostate.edu}}\\
Homepage: \href{https://www.math.colostate.edu/~hulpke/} {\texttt{https://www.math.colostate.edu/\texttt{\symbol{126}}hulpke/}}\\ Address: \begin{minipage}[t]{8cm}\noindent
Department of Mathematics\\
Colorado State University\\
Fort Collins, CO, 80523\texttt{\symbol{45}}1874, USA \end{minipage}
}\\
{\mbox{}\\ \small\noindent\textbf{Colva Roney\texttt{\symbol{45}}Dougal } Email: \href{mailto://colva.roney-dougal@st-andrews.ac.uk} {\texttt{colva.roney\texttt{\symbol{45}}dougal@st\texttt{\symbol{45}}andrews.ac.uk}}\\
Homepage: \href{http://www-groups.mcs.st-and.ac.uk/~colva/} {\texttt{http://www\texttt{\symbol{45}}groups.mcs.st\texttt{\symbol{45}}and.ac.uk/\texttt{\symbol{126}}colva/}}\\ Address: \begin{minipage}[t]{8cm}\noindent School of Mathematics and Statistics\\
University of St Andrews\\
North Haugh, St Andrews\\
Fife, KY16 9SXS Scotland \end{minipage}
}\\
{\mbox{}\\ \small\noindent\textbf{Christopher Russell } Email: \href{mailto://cr66@st-andrews.ac.uk} {\texttt{cr66@st\texttt{\symbol{45}}andrews.ac.uk}}\\ Address: \begin{minipage}[t]{8cm}\noindent School of Mathematics and Statistics\\
University of St Andrews\\
North Haugh, St Andrews\\
Fife, KY16 9SXS Scotland \end{minipage}
}\\ \end{titlepage}
\newpage\setcounter{page}{2}
{\small \section*{Abstract} \logpage{[ 0, 0, 1 ]} \index{SCSCP package@\textsf{PrimGrp} package} The \textsf{GAP} package \textsf{PrimGrp} provides the library of primitive permutation groups which includes, up to
permutation isomorphism (i.e., up to conjugacy in the corresponding symmetric
group), all primitive permutation groups of degree {\textless} 4096. \mbox{}}\\[1cm]
{\small \section*{Copyright} \logpage{[ 0, 0, 2 ]}
{\copyright} 2007\texttt{\symbol{45}}2025 by Alexander Hulpke and Colva
Roney\texttt{\symbol{45}}Dougal
\textsf{PrimGrp} is free software; you can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version. For
details, see the FSF's own site \href{https://www.gnu.org/licenses/gpl.html} {\texttt{https://www.gnu.org/licenses/gpl.html}}.
If you obtained \textsf{PrimGrp}, we would be grateful for a short notification sent to one of the authors.
If you publish a result which was partially obtained with the usage of \textsf{PrimGrp}, please cite it in the following form:
A. Hulpke, C. Roney\texttt{\symbol{45}}Dougal, C. Russell. \emph{PrimGrp \texttt{\symbol{45}}\texttt{\symbol{45}}\texttt{\symbol{45}} GAP
Primitive Permutation Groups Library, Version 4.0.1;} 2025 (\href{https://gap-packages.github.io/primgrp/} {\texttt{https://gap\texttt{\symbol{45}}packages.github.io/primgrp/}}). \mbox{}}\\[1cm]
{\small \section*{Acknowledgements} \logpage{[ 0, 0, 3 ]}
The conversion of the \textsf{GAP} database of primitive permutation groups to a separate \textsf{GAP} package has been supported by the EPSRC Collaborative Computational Project
EP/M022641/1 CoDiMa (CCP in the area of Computational Discrete Mathematics), \href{https://www.codima.ac.uk/} {\texttt{https://www.codima.ac.uk/}}. \mbox{}}\\[1cm] \newpage
\section{\textcolor{Chapter }{Primitive Permutation Groups}}\label{Primitive Permutation Groups} \logpage{[ 1, 1, 0 ]} \hyperdef{L}{X7AE00EA7791F2574}{}
{ \textsf{GAP} contains a library of primitive permutation groups which includes, up to
permutation isomorphism (i.e., up to conjugacy in the corresponding symmetric
group), all primitive permutation groups of degree $<{\nobreakspace}4096$, calculated in \cite{RoneyDougal05} and \cite{CRDQ11}, in particular, \begin{itemize} \item the primitive permutation groups up to degree{\nobreakspace}50, calculated by
C.{\nobreakspace}Sims, \item the primitive groups with insoluble socles of degree $<{\nobreakspace}1000$ as calculated in \cite{DixonMortimer88}, \item the solvable (hence affine) primitive permutation groups of degree $<{\nobreakspace}256$ as calculated by M.{\nobreakspace}Short \cite{Sho92}, \item some insolvable affine primitive permutation groups of degree $<{\nobreakspace}256$ as calculated in \cite{Theissen97}. \item The solvable primitive groups of degree up to $999$ as calculated in \cite{EickHoefling02}. \item The primitive groups of affine type of degree up to $999$ as calculated in \cite{RoneyDougal02}. \end{itemize}
Not all groups are named, those which do have names use ATLAS notation. Not
all names are necessarily unique!
The list given in \cite{RoneyDougal05} is believed to be complete, correcting various omissions in \cite{DixonMortimer88}, \cite{Sho92} and \cite{Theissen97}.
In detail, we guarantee the following properties for this and further versions
(but \emph{not} versions which came before \textsf{GAP}{\nobreakspace}4.2) of the library:
\begin{itemize} \item All groups in the library are primitive permutation groups of the indicated
degree. \item The positions of the groups in the library are stable. That is \texttt{PrimitiveGroup(\mbox{\texttt{\mdseries\slshape n}},\mbox{\texttt{\mdseries\slshape nr}})} will always give you a permutation isomorphic group. Note however that we do
not guarantee to keep the chosen $S_n$\texttt{\symbol{45}}representative, the generating set or the name for
eternity. \item Different groups in the library are not conjugate in $S_n$. \item If a group in the library has a primitive subgroup with the same socle, this
group is in the library as well. \end{itemize}
(Note that the arrangement of groups is not guaranteed to be in increasing
size, though it holds for many degrees.)
The selection functions (see{\nobreakspace} (\textbf{Reference: Selection Functions})) for the primitive groups library are \texttt{AllPrimitiveGroups} and \texttt{OnePrimitiveGroup}. They obtain the following properties from the database without having to
compute them anew:
\texttt{NrMovedPoints} (\textbf{Reference: NrMovedPoints for a list or collection of permutations}), \texttt{Size} (\textbf{Reference: Size}), \texttt{Transitivity} (\textbf{Reference: Transitivity for a group and an action domain}), \texttt{ONanScottType} (\textbf{Reference: ONanScottType}), \texttt{IsSimpleGroup} (\textbf{Reference: IsSimpleGroup}), \texttt{IsSolvableGroup} (\textbf{Reference: IsSolvableGroup}), and \texttt{SocleTypePrimitiveGroup} (\textbf{Reference: SocleTypePrimitiveGroup}).
(Note, that for groups of degree up to 2499, O'Nan\texttt{\symbol{45}}Scott
types 4a, 4b and 5 cannot occur.)
To offer a clearer interface to the primitive groups library, this function
checks whether the primitive groups of degree \mbox{\texttt{\mdseries\slshape deg}} are available. }
returns the primitive permutation group of degree \mbox{\texttt{\mdseries\slshape deg}} with number\mbox{\texttt{\mdseries\slshape nr}} from the list.
The arrangement of the groups of degrees not greater than 50 differs from the
arrangement of primitive groups in the list of C.{\nobreakspace}Sims, which
was used in \textsf{GAP}{\nobreakspace}3. See \texttt{SimsNo} (\ref{SimsNo}). }
returns the number of primitive permutation groups of degree \mbox{\texttt{\mdseries\slshape deg}} in the library. \begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@NrPrimitiveGroups(25);|
28
!gapprompt@gap>| !gapinput@PrimitiveGroup(25,19);|
5^2:((Q(8):3)'4)
!gapprompt@gap>| !gapinput@PrimitiveGroup(25,20);|
ASL(2, 5)
!gapprompt@gap>| !gapinput@PrimitiveGroup(25,22);|
AGL(2, 5)
!gapprompt@gap>| !gapinput@PrimitiveGroup(25,23);|
(A(5) x A(5)):2 \end{Verbatim}
}
This is a selection function which permits to select all groups from the
Primitive Group Library that have a given set of properties. It accepts
arguments as specified in Section (\textbf{Reference: Selection Functions}) of the \textsf{GAP} reference manual. }
This is a selection function which permits to select at most one group from
the Primitive Group Library that have a given set of properties. It accepts
arguments as specified in Section (\textbf{Reference: Selection Functions}) of the \textsf{GAP} reference manual. }
returns an iterator through \texttt{AllPrimitiveGroups(\mbox{\texttt{\mdseries\slshape attr1}},\mbox{\texttt{\mdseries\slshape val1}},\mbox{\texttt{\mdseries\slshape attr2}},\mbox{\texttt{\mdseries\slshape val2}},...)} without creating all these groups at the same time. }
In \cite{DixonMortimer88} the primitive groups are sorted in ``cohorts'' according to their socle. For each degree less than 2500, the variable \texttt{COHORTS{\textunderscore}PRIMITIVE{\textunderscore}GROUPS} (\ref{COHORTSuScorePRIMITIVEuScoreGROUPS}) contains a list of the cohorts for the primitive groups of this degree. Each
cohort is represented by a list of length 2, the first entry specifies the
socle type (see \texttt{SocleTypePrimitiveGroup} (\textbf{Reference: SocleTypePrimitiveGroup})), the second entry listing the index numbers of the groups in this degree.
For example in degree 49, we have four cohorts with socles $({\ensuremath{\mathbb Z}} / 7 {\ensuremath{\mathbb Z}})^2$, $L_2(7)^2$, $A_7^2$ and $A_{49}$ respectively. the group \texttt{PrimitiveGroup(49,36)}, which is isomorphic to $(A_7 \times A_7):2^2$, lies in the third cohort with socle $(A_7 \times A_7)$.
For a primitive permutation group for which an $S_n$\texttt{\symbol{45}}conjugate exists in the library of primitive permutation
groups (see{\nobreakspace}\ref{Primitive Permutation Groups}), this attribute returns the index position. That is \mbox{\texttt{\mdseries\slshape G}} is conjugate to \texttt{PrimitiveGroup(NrMovedPoints(\mbox{\texttt{\mdseries\slshape G}}),PrimitiveIdentification(\mbox{\texttt{\mdseries\slshape G}}))}.
Methods only exist if the primitive groups library is installed.
Note: As this function uses the primitive groups library, the result is only
guaranteed to the same extent as this library. If it is incomplete, \texttt{PrimitiveIdentification} might return an existing index number for a group not in the library. \begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@PrimitiveIdentification(Group((1,2),(1,2,3)));|
2 \end{Verbatim}
}
If \mbox{\texttt{\mdseries\slshape G}} is a primitive group of degree not greater than 50, obtained by \texttt{PrimitiveGroup} (\ref{PrimitiveGroup}) (respectively one of the selection functions), then this attribute contains
the number of the isomorphic group in the original list of
C.{\nobreakspace}Sims. (This is the arrangement as it was used in \textsf{GAP}{\nobreakspace}3.)
As mentioned in the previous section, the index numbers of primitive groups in \textsf{GAP} are guaranteed to remain stable. (Thus, missing groups will be added to the
library at the end of each degree.) In particular, it is safe to refer to a
primitive group of type \mbox{\texttt{\mdseries\slshape deg}}, \mbox{\texttt{\mdseries\slshape nr}} in the \textsf{GAP} library. }
The system \textsf{Magma} also provides a list of primitive groups (see \cite{RoneyDougal02}). For historical reasons, its indexing up to degree 999 differs from the one
used by \textsf{GAP}. The variable \texttt{PRIMITIVE{\textunderscore}INDICES{\textunderscore}MAGMA} (\ref{PRIMITIVEuScoreINDICESuScoreMAGMA}) can be used to obtain this correspondence. The magma index number of the \textsf{GAP} group \texttt{PrimitiveGroup(\mbox{\texttt{\mdseries\slshape deg}},\mbox{\texttt{\mdseries\slshape nr}})} is stored in the entry \texttt{PRIMITIVE{\textunderscore}INDICES{\textunderscore}MAGMA[\mbox{\texttt{\mdseries\slshape deg}}][\mbox{\texttt{\mdseries\slshape nr}}]}, for degree at most 999.
Vice versa, the group of degree \mbox{\texttt{\mdseries\slshape deg}} with \textsf{Magma} index number\mbox{\texttt{\mdseries\slshape nr}} has the \textsf{GAP} index
\texttt{Position(PRIMITIVE{\textunderscore}INDICES{\textunderscore}MAGMA[\mbox{\texttt{\mdseries\slshape deg}}],\mbox{\texttt{\mdseries\slshape nr}})}, in particular it can be obtained by the \textsf{GAP} command
This function returns a representative of the \mbox{\texttt{\mdseries\slshape i}}\texttt{\symbol{45}}th conjugacy class of irreducible solvable subgroup of GL(\mbox{\texttt{\mdseries\slshape n}}, \mbox{\texttt{\mdseries\slshape p}}), where \mbox{\texttt{\mdseries\slshape n}} is an integer $> 1$, \mbox{\texttt{\mdseries\slshape p}} is a prime, and $\mbox{\texttt{\mdseries\slshape p}}^{\mbox{\texttt{\mdseries\slshape n}}} < 256$.
The numbering of the representatives should be considered arbitrary. However,
it is guaranteed that the \mbox{\texttt{\mdseries\slshape i}}\texttt{\symbol{45}}th group on this list will lie in the same conjugacy class
in all future versions of \textsf{GAP}, unless two (or more) groups on the list are discovered to be duplicates, in
which case \texttt{IrreducibleSolvableGroupMS} will return \texttt{fail} for all but one of the duplicates.
For values of \mbox{\texttt{\mdseries\slshape n}}, \mbox{\texttt{\mdseries\slshape p}}, and \mbox{\texttt{\mdseries\slshape i}} admissible to \texttt{IrreducibleSolvableGroup} (\ref{IrreducibleSolvableGroup}), \texttt{IrreducibleSolvableGroupMS} returns a representative of the same conjugacy class of subgroups of GL(\mbox{\texttt{\mdseries\slshapen}}, \mbox{\texttt{\mdseries\slshape p}}) as \texttt{IrreducibleSolvableGroup} (\ref{IrreducibleSolvableGroup}). Note that it currently adds two more groups (missing from the original list
by Mark Short) for \mbox{\texttt{\mdseries\slshape n}} $= 2$, \mbox{\texttt{\mdseries\slshape p}} $= 13$. }
This function returns the number of conjugacy classes of irreducible solvable
subgroup of GL(\mbox{\texttt{\mdseries\slshape n}}, \mbox{\texttt{\mdseries\slshape p}}). }
This function returns a list of conjugacy class representatives $G$ of matrix groups over a prime field such that $f(G) = v$ or $f(G) \in v$, for all pairs $(f,v)$ in (\mbox{\texttt{\mdseries\slshape func1}}, \mbox{\texttt{\mdseries\slshape val1}}), (\mbox{\texttt{\mdseries\slshape func2}}, \mbox{\texttt{\mdseries\slshape val2}}), $\ldots$. The following possibilities for the functions $f$ are particularly efficient, because the values can be read off the information
in the data base: \texttt{DegreeOfMatrixGroup} (or \texttt{Dimension} (\textbf{Reference: Dimension}) or \texttt{DimensionOfMatrixGroup} (\textbf{Reference: DimensionOfMatrixGroup})) for the linear degree, \texttt{Characteristic} (\textbf{Reference: Characteristic}) for the field characteristic, \texttt{Size} (\textbf{Reference: Size}), \texttt{IsPrimitiveMatrixGroup} (or \texttt{IsLinearlyPrimitive}), and \texttt{MinimalBlockDimension}{\textgreater}. }
This function returns one solvable subgroup $G$ of a matrix group over a prime field such that $f(G) = v$ or $f(G) \in v$, for all pairs $(f,v)$ in (\mbox{\texttt{\mdseries\slshape func1}}, \mbox{\texttt{\mdseries\slshape val1}}), (\mbox{\texttt{\mdseries\slshape func2}}, \mbox{\texttt{\mdseries\slshape val2}}), $\ldots$. The following possibilities for the functions $f$ are particularly efficient, because the values can be read off the information
in the data base: \texttt{DegreeOfMatrixGroup} (or \texttt{Dimension} (\textbf{Reference: Dimension}) or \texttt{DimensionOfMatrixGroup} (\textbf{Reference: DimensionOfMatrixGroup})) for the linear degree, \texttt{Characteristic} (\textbf{Reference: Characteristic}) for the field characteristic, \texttt{Size} (\textbf{Reference: Size}), \texttt{IsPrimitiveMatrixGroup} (or \texttt{IsLinearlyPrimitive}), and \texttt{MinimalBlockDimension}{\textgreater}. }
This variable provides a way to get from irreducible solvable groups to
primitive groups and vice versa. For the group $G$ = \texttt{IrreducibleSolvableGroup( \mbox{\texttt{\mdseries\slshape n}}, \mbox{\texttt{\mdseries\slshape p}}, \mbox{\texttt{\mdseries\slshape k}} )} and $d = p^n$, the entry \texttt{PrimitiveIndexIrreducibleSolvableGroup[d][i]} gives the index number of the semidirect product $p^n:G$ in the library of primitive groups.
Searching for an index in this list with \texttt{Position} (\textbf{Reference: Position}) gives the translation in the other direction. }
This function is obsolete, because for \mbox{\texttt{\mdseries\slshape n}} $= 2$, \mbox{\texttt{\mdseries\slshape p}} $= 13$, two groups were missing from the underlying database. It has been replaced
by the function \texttt{IrreducibleSolvableGroupMS} (\ref{IrreducibleSolvableGroupMS}). Please note that the latter function does not guarantee any ordering of the
groups in the database. However, for values of \mbox{\texttt{\mdseries\slshape n}}, \mbox{\texttt{\mdseries\slshape p}}, and \mbox{\texttt{\mdseries\slshape i}} admissible to \texttt{IrreducibleSolvableGroup}, \texttt{IrreducibleSolvableGroupMS} (\ref{IrreducibleSolvableGroupMS}) returns a representative of the same conjugacy class of subgroups of GL(\mbox{\texttt{\mdseries\slshape n}}, \mbox{\texttt{\mdseries\slshape p}}) as \texttt{IrreducibleSolvableGroup} did before. }
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.