%% 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}
{\Huge 0.92 \mbox{}}\\[1cm]
{ 11 September 2025 \mbox{}}\\[1cm] \mbox{}\\[2cm]
{\Large\textbf{ Thomas Breuer\\ \mbox{}}}\\
{\Large\textbf{ Sebastian Gutsche\\ \mbox{}}}\\
{\Large\textbf{ Max Horn\\ \mbox{}}}\\
{\Large\textbf{ Alexander Hulpke\\ \mbox{}}}\\
{\Large\textbf{ Pedro Garc{\a'\i}a\texttt{\symbol{45}}S{\a'a}nchez\\ \mbox{}}}\\
{\Large\textbf{ Christopher Jefferson\\ \mbox{}}}\\
{\Large\textbf{ Stefan Kohl\\ \mbox{}}}\\
{\Large\textbf{ Frank L{\"u}beck\\ \mbox{}}}\\
{\Large\textbf{ Chris Wensley\\ \mbox{}}}\\ \hypersetup{pdfauthor= Thomas Breuer\\
; Sebastian Gutsche\\
; Max Horn\\
; Alexander Hulpke\\
; Pedro Garc{\a'\i}a\texttt{\symbol{45}}S{\a'a}nchez\\
; Christopher Jefferson\\
; Stefan Kohl\\
; Frank L{\"u}beck\\
; Chris Wensley\\
} \end{center}\vfill
\newpage\setcounter{page}{2}
{\small \section*{Abstract} \logpage{[ 0, 0, 1 ]}
The \textsf{Utils} package provides a space for utility functions in a variety of \textsf{GAP} packages to be collected together into a single package. In this way it is
hoped that they will become more visible to package authors.
Any package author who transfers a function to \textsf{Utils} will become an author of \textsf{Utils}.
If deemed appropriate, functions may also be transferred from the main
library.
Bug reports, suggestions and comments are, of course, welcome. Please contact
the last author at \href{mailto://cdwensley.maths@btinternet.com} {\texttt{cdwensley.maths@btinternet.com}} or submit an issue at the GitHub repository \href{https://github.com/gap-packages/utils/issues/} {\texttt{https://github.com/gap\texttt{\symbol{45}}packages/utils/issues/}}. \mbox{}}\\[1cm]
{\small \section*{Copyright} \logpage{[ 0, 0, 2 ]}
{\copyright} 2015\texttt{\symbol{45}}2025, The GAP Group.
The \textsf{Utils} package 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. \mbox{}}\\[1cm]
{\small \section*{Acknowledgements} \logpage{[ 0, 0, 3 ]}
This documentation was prepared using the \textsf{GAPDoc} \cite{GAPDoc} and \textsf{AutoDoc} \cite{AutoDoc} packages.
The procedure used to produce new releases uses the package \textsf{GitHubPagesForGAP} \cite{GitHubPagesForGAP} and the package \textsf{ReleaseTools}.
\mbox{}}\\[1cm] \newpage
\def\contentsname{Contents\logpage{[ 0, 0, 4 ]}}
\tableofcontents \newpage
\chapter{\textcolor{Chapter }{Introduction}}\label{chap-intro} \logpage{[ 1, 0, 0 ]} \hyperdef{L}{X7DFB63A97E67C0A1}{}
{
The \textsf{Utils} package provides a space for utility functions from a variety of \textsf{GAP} packages to be collected together into a single package. In this way it is
hoped that they will become more visible to other package authors. This
package was first distributed as part of the \textsf{GAP} 4.8.2 distribution.
The package is loaded with the command \begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
Functions have been transferred from the following packages: \begin{itemize} \item Conversion of a \textsf{GAP} group to a ${\sf Magma}$ output string, taken from various sources including \texttt{other.gi} in the main library. \end{itemize}
Transfer is complete (for now) for functions from the following packages: \begin{itemize} \item\textsf{AutoDoc} \cite{AutoDoc} (with function names changed); \item\textsf{ResClasses} \cite{ResClasses}; \item\textsf{RCWA} \cite{RCWA}; \item\textsf{XMod} \cite{XMod}. \end{itemize}
The package may be obtained either as a compressed \texttt{.tar} file or as a \texttt{.zip} file, \texttt{utils\texttt{\symbol{45}}version{\textunderscore}number.tar.gz}, by ftp from one of the following sites: \begin{itemize} \item the \textsf{Utils} GitHub release site: \href{https://gap-packages.github.io/utils/} {\texttt{https://gap\texttt{\symbol{45}}packages.github.io/utils/}}. \item any \textsf{GAP} archive, e.g. \href{https://www.gap-system.org/Packages/packages.html} {\texttt{https://www.gap\texttt{\symbol{45}}system.org/Packages/packages.html}}; \end{itemize} \index{GitHub repository} The package also has a GitHub repository at: \href{https://github.com/gap-packages/utils} {\texttt{https://github.com/gap\texttt{\symbol{45}}packages/utils}}.
Once the package is loaded, the manual \texttt{doc/manual.pdf} can be found in the documentation folder. The \texttt{html} versions, with or without ${\sf MathJax}$, may be rebuilt as follows:
Note that functions listed in this manual that are currently in the process of
being transferred are only read from the source package \textsf{Home} (say), and so can only be used if \textsf{Home} has already been loaded. There are no such functions in transition at present. \section{\textcolor{Chapter }{Information for package authors}}\label{sect-author-info} \logpage{[ 1, 1, 0 ]} \hyperdef{L}{X8508AD637B79CEE8}{}
{
A function (or collection of functions) is suitable for transfer from a
package \textsf{Home} to \textsf{Utils} if the following conditions are satisfied. \begin{itemize} \item The function is sufficiently non\texttt{\symbol{45}}specialised so that it
might be of use to other authors. \item The function does not depend on the remaining functions in \textsf{Home} \item The function does not do what can already be done with a \textsf{GAP} library function. \item Documentation of the function and test examples are available. \item When there is more than one active author of \textsf{Home}, they should all be aware (and content) that the transfer is taking place. \end{itemize}
Authors of packages may be reluctant to let go of their utility functions. The
following principles may help to reassure them. (Suggestions for more items
here are welcome.) \begin{itemize} \item A function that has been transferred to \textsf{Utils} will not be changed without the approval of the original author. \item The current package maintainer has every intention of continuing to maintain \textsf{Utils}. In the event that this proves impossible, the \textsf{GAP} development team will surely find someone to take over. \item Function names will not be changed unless specifically requested by \textsf{Home}'s author(s) or unless they have the form \texttt{HOME{\textunderscore}FunctionName}. \item In order to speed up the transfer process, only functions from one package
will be in transition at any given time. Hopefully a week or two will suffice
for most packages. \item Any package author who transfers a function to \textsf{Utils} will become an author of \textsf{Utils}. (In truth, \textsf{Utils} does not have \emph{authors}, just a large number of \emph{contributors}.) \end{itemize}
The process for transferring utility functions from \textsf{Home} to \textsf{Utils} is described in Chapter \ref{chap-transfer}. }
\section{\textcolor{Chapter }{Printing selected items}}\label{sec-print-select} \logpage{[ 2, 1, 0 ]} \hyperdef{L}{X7F6817927F86240F}{}
{
The functions described here print lists or objects with an iterator with one
item per line, either the whole list/iterator or certain subsets: \begin{itemize} \item by giving a list of positions of items to be printed, or \item by specifying a first item and then a regular step. \end{itemize}
\subsection{\textcolor{Chapter }{PrintSelection (for a list of positions)}} \logpage{[ 2, 1, 1 ]}\nobreak \hyperdef{L}{X784638AC84D49870}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PrintSelection({\mdseries\slshape obj, list})\index{PrintSelection@\texttt{PrintSelection}!for a list of positions} \label{PrintSelection:for a list of positions}
}\hfill{\scriptsize (function)}}\\ \noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PrintSelection({\mdseries\slshape obj, first, step[, last]})\index{PrintSelection@\texttt{PrintSelection}!for a first item and a step} \label{PrintSelection:for a first item and a step}
}\hfill{\scriptsize (function)}}\\
This function, given three (or four) parameters, calls operations \texttt{PrintSelectionFromList} or \texttt{PrintSelectionFromIterator} which prints the \emph{first} item specified, and then the item at every \emph{step}. The fourth parameter is essential when the object being printed is infinite.
Alternatively, given two parameters, with the second parameter a list \texttt{L} of positive integers, only the items at positions in \texttt{L} are printed.
This function has been transferred from package \textsf{RCWA}.
\texttt{SearchCycle} is a tool to find likely cycles in lists. What, precisely, a \emph{cycle} is, is deliberately fuzzy here, and may possibly even change. The idea is that
the beginning of the list may be anything, following that the same pattern
needs to be repeated several times in order to be recognized as a cycle.
!gapprompt@gap>| !gapinput@## "6 aus 49" is a common lottery in Germany|
!gapprompt@gap>| !gapinput@RandomCombination( [1..49], 6 ); |
[ 2, 16, 24, 26, 37, 47 ]
\end{Verbatim}
}
\section{\textcolor{Chapter }{Distinct and Common Representatives}}\logpage{[ 3, 2, 0 ]} \hyperdef{L}{X82F443FF84B8FCE3}{}
{ \index{distinct and common representatives}
These operations have been transferred from package \textsf{XMod}.
They deal with lists of subsets of $[1 \ldots n]$ and construct systems of distinct and common representatives using simple,
non\texttt{\symbol{45}}recursive, combinatorial algorithms.
When $L$ is a set of $n$ subsets of $[1 \ldots n]$ and the Hall condition is satisfied (the union of any $k$ subsets has at least $k$ elements), a set of \texttt{DistinctRepresentatives} exists.
When $J,K$ are both lists of $n$ sets, the operation \texttt{CommonRepresentatives} returns two lists: the set of representatives, and a permutation of the
subsets of the second list.
The operation \texttt{CommonTransversal} may be used to provide a common transversal for the sets of left and right
cosets of a subgroup $H$ of a group $G$, although a greedy algorithm is usually quicker. }
\subsection{\textcolor{Chapter }{AllSmoothIntegers (for two integers)}} \logpage{[ 4, 1, 1 ]}\nobreak \hyperdef{L}{X8191A031788AC7C0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AllSmoothIntegers({\mdseries\slshape maxp, maxn})\index{AllSmoothIntegers@\texttt{AllSmoothIntegers}!for two integers} \label{AllSmoothIntegers:for two integers}
}\hfill{\scriptsize (function)}}\\ \noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AllSmoothIntegers({\mdseries\slshape L, maxp})\index{AllSmoothIntegers@\texttt{AllSmoothIntegers}!for a list and an integer} \label{AllSmoothIntegers:for a list and an integer}
}\hfill{\scriptsize (function)}}\\
This function has been transferred from package \textsf{RCWA}.
\index{smooth integer} The function \texttt{AllSmoothIntegers(\mbox{\texttt{\mdseries\slshape maxp}},\mbox{\texttt{\mdseries\slshape maxn}})} returns the list of all positive integers less than or equal to \mbox{\texttt{\mdseries\slshape maxn}} whose prime factors are all in the list $L = \{p ~|~ p \leqslant maxp, p~\mbox{prime} \}$.
In the alternative form, when $L$ is a list of primes, the function returns the list of all positive integers
whose prime factors lie in $L$.
This function has been transferred from package \textsf{RCWA}.
The command \texttt{AllProducts(\mbox{\texttt{\mdseries\slshape L}},\mbox{\texttt{\mdseries\slshape k}})} returns the list of all products of \mbox{\texttt{\mdseries\slshapek}} entries of the list{\nobreakspace}\mbox{\texttt{\mdseries\slshape L}}. Note that every ordering of the entries is used so that, in the commuting
case, there are bound to be repetitions.
This function has been transferred from package \textsf{RCWA}.
For a positive integer \mbox{\texttt{\mdseries\slshape n}} and a set of positive integers \mbox{\texttt{\mdseries\slshape S}}, this function returns the list of partitions of \mbox{\texttt{\mdseries\slshape n}} into distinct elements of \mbox{\texttt{\mdseries\slshape S}}. Unlike \texttt{RestrictedPartitions}, no repetitions are allowed.
This function has been transferred from package \textsf{RCWA}.
The function \texttt{NextProbablyPrimeInt(\mbox{\texttt{\mdseries\slshape n}})} does the same as \texttt{NextPrimeInt(\mbox{\texttt{\mdseries\slshape n}})} except that for reasons of performance it tests numbers only for \texttt{IsProbablyPrimeInt(\mbox{\texttt{\mdseries\slshape n}})} instead of \texttt{IsPrimeInt(\mbox{\texttt{\mdseries\slshape n}})}. For large \mbox{\texttt{\mdseries\slshape n}}, this function is much faster than \texttt{NextPrimeInt(\mbox{\texttt{\mdseries\slshape n}})}
This function has been transferred from package \textsf{RCWA}.
This function returns an iterator which runs over the prime numbers n
ascending order; it takes an optional argument \texttt{chunksize} which specifies the length of the interval which is sieved in one go (the
default is $10^7$), and which can be used to balance runtime vs. memory consumption. It is
assumed that \texttt{chunksize} is larger than any gap between two consecutive primes within the range one
intends to run the iterator over.
!gapprompt@gap>| !gapinput@iter := PrimeNumbersIterator();;|
!gapprompt@gap>| !gapinput@for i in [1..100] do p := NextIterator(iter); od;|
!gapprompt@gap>| !gapinput@p;|
541
!gapprompt@gap>| !gapinput@sum := 0;;|
!gapprompt@gap>| !gapinput@## "prime number race" 1 vs. 3 mod 4|
!gapprompt@gap>| !gapinput@for p in PrimeNumbersIterator() do |
!gapprompt@>| !gapinput@ if p <> 2 then sum := sum + E(4)^(p-1); fi;|
!gapprompt@>| !gapinput@ if sum > 0 then break; fi;|
!gapprompt@>| !gapinput@ od;|
!gapprompt@gap>| !gapinput@p;|
26861
These three functions have been transferred from package \textsf{ResClasses}.
\index{Fitting series} The upper and lower Fitting series and the Fitting length of a solvable group
are described here: \href{https://en.wikipedia.org/wiki/Fitting_length} {\texttt{https://en.wikipedia.org/wiki/Fitting{\textunderscore}length}}.
Since \textsf{GAP} uses right actions by default, the library contains the operation \texttt{RightCoset(U,g)} for constructing the right coset $Ug$ of a subgroup $U \leq G$ and an element $g \in G$. It has been noted in the reference manual that, by inverting all the
elements in $Ug$, the left coset $g^{-1}U$ is obtained.
Just for the sake of completeness, from August 2022 this package provides the
operation \texttt{LeftCoset(g,U)} for constructing the left coset $gU$. Users are strongly recommended to continue to use \texttt{RightCoset} for all serious calculations, since left cosets have a much simpler
implementation and do not behave exactly like right cosets.
The methods for left cosets which are provided generally work by converting $gU$ to $Ug^{-1}$; applying the equivalent method for right cosets; and, if necessary,
converting back again to left cosets.
$G$ acts on left cosets by \texttt{OnLeftInverse}: $(gU)^{g_0} = g_0^{-1}*(gU) = (g_0^{-1}g)U$.
\subsection{\textcolor{Chapter }{Inverse}}\label{subsec-inverse} \logpage{[ 5, 2, 2 ]} \hyperdef{L}{X793E48267EF5FD77}{}
{
The inverse of the left coset $gU$ is the right coset $Ug^{-1}$, and conversely. This is an abuse of the attribute \texttt{Inverse}, since the standard requirement, that $x*x^{-1}$ is an identity, does not hold.
This function has been transferred from package \textsf{RCWA}.
It constructs a group homomorphism which maps the generators of $G$ to those of $H$. Its intended use is when $G$ is a free group, and a warning is printed when this is not the case. Note that
anything may happen if the resulting map is not a homomorphism!
If $\phi_1 : G_1 \to H$ and $\phi_2 : G_2 \to H$ are two group homomorphisms with the same range, then their \emph{pullback} is the subgroup of $G_1 \times G_2$ consisting of those elements $(g_1,g_2)$ such that $\phi_1 g_1 = \phi_2 g_2$.
The attribute \texttt{PullbackInfo} of a pullback group \texttt{P} is similar to \texttt{DirectProductInfo} for a direct product of groups. Its value is a record with the following
components:
\begin{description} \item[{\texttt{directProduct}}] the direct product $G_1 \times G_2$, and \item[{\texttt{projections}}] a list with the two projections onto $G_1$ and $G_2$. \end{description}
There are no embeddings in this record, but it is possible to use the
embeddings into the direct product, see \texttt{Embedding} (\textbf{Reference: Embedding}).
This function was added by Thomas Breuer, following discussions with Hongyi
Zhao (see \href{https://github.com/gap-packages/hap/issues/73} {\texttt{https://github.com/gap\texttt{\symbol{45}}packages/hap/issues/73}}).
Let \mbox{\texttt{\mdseries\slshape G1}} and \mbox{\texttt{\mdseries\slshape G2}} be two groups, \mbox{\texttt{\mdseries\slshape Z1}} be a central subgroup of \mbox{\texttt{\mdseries\slshape G1}}, and \mbox{\texttt{\mdseries\slshape Phi}} be an isomorphism from \mbox{\texttt{\mdseries\slshape Z1}} to a central subgroup of \mbox{\texttt{\mdseries\slshapeG2}}. The \emph{central product} defined by these arguments is the factor group of the direct product of \mbox{\texttt{\mdseries\slshape G1}} and \mbox{\texttt{\mdseries\slshape G2}} by the central subgroup $\{ (z, (\mbox{\texttt{\mdseries\slshape Phi}}(z))^{-1}) : z \in\mbox{\texttt{\mdseries\slshape Z1}} \}$.
The attribute \texttt{CentralProductInfo} of a group $G$ that has been created by \texttt{CentralProduct} is similar to \texttt{PullbackInfo} (\ref{PullbackInfo}) for pullback groups. Its value is a record with the following components.
\begin{description} \item[{\texttt{projection}}] the epimorphism from the direct product of \mbox{\texttt{\mdseries\slshape G1}} and \mbox{\texttt{\mdseries\slshape G2}} to $G$, and \item[{\texttt{phi}}] the map \mbox{\texttt{\mdseries\slshape Phi}}. \end{description}
Note that one can access the direct product as the \texttt{Source} (\textbf{Reference: Source}) value of the \texttt{projection} map, and one can access \mbox{\texttt{\mdseries\slshape G1}} and \mbox{\texttt{\mdseries\slshape G2}} as the two embeddings of this direct product, see \texttt{Embedding} (\textbf{Reference: Embedding}). \begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@g1 := DihedralGroup( 8 );|
<pc group of size 8 with 3 generators>
!gapprompt@gap>| !gapinput@c1 := Centre( g1 );|
Group([ f3 ])
!gapprompt@gap>| !gapinput@cp1 := CentralProduct( g1, g1, c1, IdentityMapping( c1 ) );|
Group([ f1, f2, f5, f3, f4, f5 ])
!gapprompt@gap>| !gapinput@IdGroup( cp1 ) = IdGroup( ExtraspecialGroup( 2^5, "+" ) );|
true
!gapprompt@gap>| !gapinput@g2 := QuaternionGroup( 8 );|
<pc group of size 8 with 3 generators>
!gapprompt@gap>| !gapinput@c2 := Centre( g2 );|
Group([ y2 ])
!gapprompt@gap>| !gapinput@cp2 := CentralProduct( g2, g2, c2, IdentityMapping( c2 ) );|
Group([ f1, f2, f5, f3, f4, f5 ])
!gapprompt@gap>| !gapinput@IdGroup( cp2 ) = IdGroup( ExtraspecialGroup( 2^5, "+" ) );|
true
!gapprompt@gap>| !gapinput@info2 := CentralProductInfo( cp2 );|
rec( phi := IdentityMapping( Group([ y2 ]) ),
projection := [ f1, f2, f3, f4, f5, f6 ] -> [ f1, f2, f5, f3, f4, f5 ] )
!gapprompt@gap>| !gapinput@Source( Embedding( Source( info2.projection ), 1 ) ) = g2;|
true \end{Verbatim}
}
An endomorphism $f : G \to G$ is idempotent if $f^2=f$. It has an image $R \leqslant G$; is the identity map when restricted to $R$; and has a kernel $N$ which has trivial intersection with $R$ and has size $|G|/|R|$.
The operation \texttt{IdempotentEndomorphismsWithImage(genG,R)} returns a list of the images of the generating set \texttt{genG} of a group $G$ under the idempotent endomorphisms with image $R$.
The attribute \texttt{IdempotentEndomorphismsData(G)} returns a record \texttt{data} with fields \texttt{data.gens}, a fixed generating set for $G$, and \texttt{data.images} a list of the non\texttt{\symbol{45}}empty outputs of \texttt{IdempotentEndomorphismsWithImage(genG,R)} obtained by iterating over all subgroups of $G$.
The operation \texttt{IdempotentEndomorphisms(G)} returns the list of these mappings obtained using \texttt{IdempotentEndomorphismsData(G)}. The first of these is the zero map, the second is the identity.
\end{Verbatim}
The quaternion group \texttt{q8} is an example of a group with a tail: there is only one subgroup in the
lattice which covers the identity subgroup. The only idempotent isomorphisms
of such groups are the identity mapping and the zero mapping because the only
pairs $N,R$ are the whole group and the identity subgroup. \begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@q8 := QuaternionGroup( 8 );;|
!gapprompt@gap>| !gapinput@IdempotentEndomorphisms( q8 );|
[ [ x, y ] -> [ <identity> of ..., <identity> of ... ], [ x, y ] -> [ x, y ] ]
Let $A_1,A_2$ be groups of automorphism of groups $G_1,G_2$ respectively. The output of this function is a group $A_1 \times A_2$ of automorphisms of $G_1 \times G_2$.
In June 2023 Hongyi Zhao asked in the Forum for a function to implement matrix
decomposition into blocks. Such a function was then provided by Pedro
Garc{\a'\i}a\texttt{\symbol{45}}S{\a'a}nchez. Hongyi Zhao then requested that
the function be added to \textsf{Utils}. What is provided here is a revised version of the original solution,
returning a list of decompositions.
This function is a partial inverse to the undocumented library operation \texttt{DirectSumMat}. So if $L$ is the list of diagonal decompositions of a matrix $M$ then each entry in $L$ is a list of matrices, and the direct sum of each of these lists is equal to
the original $M$.
In the following examples, $M_6$ is an obvious direct sum with $3$ blocks. $M_4$ is an example with three decompositions, while $M_8 = M_4 \oplus M_4$ has $16$ decompositions (not listed).
The current method does not, however, catch all possible decompositions. In
the following example the matrix $M_5$ has its third row and third column extirely zero, and the only decomposition
found has a $[0]$ factor. There are clearly two $2$\texttt{\symbol{45}}factor decompositions with a $2$\texttt{\symbol{45}}by\texttt{\symbol{45}}$3$ and a $3$\texttt{\symbol{45}}by\texttt{\symbol{45}}$2$ factor, but these are not found at present.
\section{\textcolor{Chapter }{Some iterators for groups and their isomorphisms}}\label{sec-group-iters} \logpage{[ 7, 1, 0 ]} \hyperdef{L}{X7BB5350081B27D17}{}
{ \index{Iterators} The motivation for adding these operations is partly to give a simple example
of an iterator for a list that does not yet exist, and need not be created.
The main \textsf{GAP} library contains functions producing complete lists of group homomorphisms
such as \texttt{AllHomomorphisms}; \texttt{AllEndomorphisms} and \texttt{AllAutomorphisms}. Here we add the missing \texttt{AllIsomorphisms(G,H)} for a list of isomorphisms from $G$ to $H$. The method is simple \texttt{\symbol{45}}\texttt{\symbol{45}} find one
isomorphism $G \to H$ and compose this with all the automorphisms of $G$. In all these cases it may not be desirable to construct a list of
homomorphisms, but just implement an iterator, and that is what is done here.
--> --------------------
--> maximum size reached
--> --------------------
¤ Dauer der Verarbeitung: 0.30 Sekunden
(vorverarbeitet)
¤
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 ist noch experimentell.