%!TEX root = manual.in.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% primitive.tex IRREDSOL documentation Burkhard Höfling
%%
%% Copyright © 2003–2016 Burkhard Höfling
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Chapter{Primitive soluble groups}
\index{primitive soluble groups}
\index{soluble primitive groups}
\index{group!primitive soluble}
\index{permutation group!primitive soluble}
An
abstract finite group <G> is called {
\it primitive} if it has a maximal
subgroup <M> with trivial core. Note that the permutation action of <G> on the
cosets of <M> is faithful and primitive. Conversely, if <G> is a primitive
permutation group, then a point stabilizer <M> of <G> is a maximal
subgroup with trivial core. However, a permutation group which is primitive
as an
abstract group need not be primitive as a permutation group.
Now assume that <G> is primitive and soluble. Then there exists a unique conjugacy class of
such maximal subgroups~<M>; the index of <M> in <G> is called the {
\it degree} of <G>.
Moreover, $<M>$
complements the socle <N> of $<G>$. THe socle <N> coincides with the Fitting
subgroup of <G>; it is the unique minimal normal subgroup <N> of~<G>. Therefore,
the index of <M> in <G> is a prime power, $p^n$, say.
Regarding <N> as a $
\F_p$-vector space, <M> acts as an irreducible subgroup of $GL(n,p)$ on <N>.
Conversely, if <M> is an irreducible soluble subgroup of $GL(n,p)$, and $V =
\F_p^n$, then the
split extension of $V$ by <M> is a primitive soluble group.
This establishes a well known
bijection between the isomorphism types (or, equivalently, the
$Sym(p^n)$-conjugacy classes) of primitive soluble permutation groups of degree
$<p>^<n>$ and the conjugacy classes of irreducible soluble subgroups of $GL(n, p)$.
The {
\IRREDSOL} package provides functions for translating between primitive soluble
groups and irreducible soluble matrix groups, which are
described in Section~
"Converting between irreducible soluble matrix groups
and primitive soluble groups
". Moreover, there are functions for finding
primitive soluble groups with given properties, see Sections~
"Finding primitive
pc groups
with given properties
" and "Finding primitive soluble permutation groups
with given properties
".
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Converting between irreducible soluble matrix groups and primitive
soluble groups}
\null
\>PrimitivePcGroup(<n>,<p>,<d>,<k>) F
\>PrimitiveSolublePermGroup(<n>,<p>,<d>,<k>) F
\>PrimitiveSolvablePermGroup(<n>,<p>,<d>,<k>) F
These functions return the primitive soluble pc group resp. primitive soluble
permutation group obtainewd as the natural split extension of $V =
\F_p^n$ by
`IrreducibleSolubleMatrixGroup
'(,,,). Here, is a positive
integer, <p> is a prime, <d> divides <n> and <k> occurs in the list
`IndicesIrreducibleSolubleMatrixGroups
'(,,)
(see
"IndicesIrreducibleSolubleMatrixGroups").
As long as the relevant group data is not unloaded manually
(see
"UnloadAbsolutelyIrreducibleSolubleGroupData"), the functions `PrimitivePcGroup
'
and `PrimitiveSolublePermGroup
' will return the same group when called multiple times
with the same arguments.
\>PrimitivePcGroupIrreducibleMatrixGroup(<G>) F
\>PrimitivePcGroupIrreducibleMatrixGroupNC(<G>) F
For a given irreducible soluble matrix group <G> over a prime field, this function
returns a primitive pc group <H> which is the split extension of <G> with its natural
underlying vector space~<V>. The `NC
' version does not check whether is over a prime field,
or whether <G> is irreducible. The group <H> has an attribute `Socle
' (see "ref:Socle"), corresponding to~. If the package {\CRISP} is loaded,
then the attribute `SocleComplement
' (see {\CRISP} reference manual "crisp:SocleComplement") is set to a subgroup of
<H> isomorphic with <G>.
\beginexample
gap> PrimitivePcGroupIrreducibleMatrixGroup(
> IrreducibleSolubleMatrixGroup(4,2,2,3));
<pc group of size 160 with 6 generators>
\endexample
\>`PrimitivePermGroupIrreducibleMatrixGroup(<G>)
'%
{PrimitivePermGroupIrreducibleMatrixGroup}
%
@{`PrimitivePermGroup
\\Irreducible
\\MatrixGroup
'} F
\>`PrimitivePermGroupIrreducibleMatrixGroupNC(<G>)
'%
{PrimitivePermGroupIrreducibleMatrixGroupNC}
%
@{`PrimitivePermGroup
\\Irreducible
\\MatrixGroupNC
'} F
For a given irreducible soluble matrix group <G> over a prime field, this function
returns a primitive permutation group~<H>, representing the affine action of <G> on its natural
vector space~<V>. The `NC
' version does not check whether is over a prime field,
or whether <G> is irreducible. The group <H> has an attribute `Socle
' (see "ref:Socle"), corresponding to~. If the package {\CRISP} is loaded,
then the attribute `SocleComplement
' (see "crisp:SocleComplement" in the {\CRISP} manual) is set to a subgroup of
<H> isomorphic with <G>.
\beginexample
gap> PrimitivePermGroupIrreducibleMatrixGroup(
> IrreducibleSolubleMatrixGroup(4,2,2,3));
<permutation group of size 160 with 6 generators>
\endexample
\>`IrreducibleMatrixGroupPrimitiveSolubleGroup(<G>)
'%
{IrreducibleMatrixGroupPrimitiveSolubleGroup}
%
@{`IrreducibleMatrixGroup
\\Primitive
\\SolubleGroup
'} F
\>`IrreducibleMatrixGroupPrimitiveSolvableGroupNC(<G>)
'%
{IrreducibleMatrixGroupPrimitiveSolvableGroupNC}
%
@{`IrreducibleMatrixGroup
\\Primitive
\\SolvableGroupNC
'} F
For a given primitive soluble group <G>, this function returns a matrix group
obtained from the conjugation
action of <G> on its unique minimal normal subgroup <N>, regarded as a vector
space over $
\F_p$, where $p$ is the exponent of <N>.
The $
\F_p$-basis of <N> is chosen arbitrarily, so that the matrix group returned
is unique only up to conjugacy in the relevant $GL(n, p)$. The NC version does
not check whether <G> is primitive and soluble.
\beginexample
gap> IrreducibleMatrixGroupPrimitiveSolubleGroup(SymmetricGroup(4));
Group([ <an immutable 2x2 matrix over GF2>,
<an immutable 2x2 matrix over GF2> ])
\endexample
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Finding primitive pc groups with given properties}
\null
\index{find!primitive pc group}
\index{primitive pc group!with given properties}
\>AllPrimitivePcGroups(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
This function returns a list of all primitive soluble pc
groups <G> in the {
\IRREDSOL} library for which the return value of $<func_i>(G)$ lies
in <arg_i>. The arguments <func_1>, <func_2>,
\dots,
must be {
\GAP} functions which take a pc group as their only argument and return a
value, and <arg_1>, <arg_2>,
\dots, must be lists. If <arg_i> is not a list, <arg_i> is replaced by the list
`
'[`]'. One of the functions must be `Degree
' or one of its
equivalents, see below.
The following functions <func_i> are handled particularly efficiently.
\beginlist%unordered
\item{--} `Degree
', `NrMovedPoints', `LargestMovedPoint
'
\item{--} `Order
', `Size'
\endlist
Note that there is also a function `IteratorPrimitivePcGroups
' (see
"IteratorPrimitivePcGroups") which allows one to run through the list produced by
`AllPrimitivePcGroups
' without having to store all the groups in the list
simultaneously.
\beginexample
gap> AllPrimitivePcGroups(Degree, [1..255], Order, [168]);
[ <pc group of size 168 with 5 generators> ]
\endexample
\>OnePrimitivePcGroup(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
This function returns one primitive soluble pc
group <G> in the {
\IRREDSOL} library for which the return value of $<func_i>(G)$ lies in
<arg_i>, or `fail
' if no such group exists. The arguments , , \dots,
must be {
\GAP} functions which take a pc group as their only argument and return a
value, and <arg_1>, <arg_2>,
\dots, must be lists. If <arg_i> is not a list, <arg_i> is replaced by the list
`[
'`]'. One of the functions must be `Degree
' or one of its, equivalents, `NrMovedPoints' or `LargestMovedPoint
'.
For a list of functions which are handled particularly efficiently, see
"AllPrimitivePcGroups".
\beginexample
gap> OnePrimitivePcGroup(Degree, [256], Order, [256*255]);
<pc group of size 65280 with 11 generators>
\endexample
\>IteratorPrimitivePcGroups(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
This function returns an iterator which runs through the list of all primitive soluble
pc groups <G> in the {
\IRREDSOL} library such that
$<func_i>(G)$ lies in <arg_i>. The arguments <func_1>, <func_2>,
\dots,
must be {
\GAP} functions taking a pc group as their only argument and returning
a value, and <arg_1>, <arg_2>,
\dots,
must be lists. If <arg_i> is not a list, <arg_i> is replaced by the list `[
'`]'.
One of the functions must be `Degree
' or one of its, equivalents, `NrMovedPoints'
or `LargestMovedPoint
'.
For a list of functions which are handled particularly efficiently, see
"AllPrimitivePcGroups".
Using
`IteratorPrimitivePcGroups
'(, , , , \dots))
is functionally equivalent to
`Iterator
'(`AllPrimitivePcGroups'(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots))
(see
"ref:Iterators" for details) but does not
compute all relevant pc groups at the same time.
This may save some memory.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Finding primitive soluble permutation groups with given
properties}
\null
\index{find!primitive permutation group}
\index{primitive permutation group!with given properties}
\>AllPrimitiveSolublePermGroups(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
\>AllPrimitiveSolvablePermGroups(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
This function returns a list of all primitive soluble permutation
groups <G> corresponding to irreducible matrix groups in the {
\IRREDSOL} library
for which the return value of $<func_i>(G)$ lies
in <arg_i>. The arguments <func_1>, <func_2>,
\dots,
must be {
\GAP} functions which take a permutation group as their only argument and return a
value, and <arg_1>, <arg_2>,
\dots, must be lists. If <arg_i> is not a list, <arg_i> is replaced by the list
`[
'`]'. One of the functions must be `Degree
' or one of its
equivalents, see below.
The following functions <func_i> are handled particularly efficiently.
\beginlist%unordered
\item{--} `Degree
', `NrMovedPoints', `LargestMovedPoint
'
\item{--} `Order
', `Size'
\endlist
Note that there is also a function `IteratorPrimitivePermGroups
' (see
"IteratorPrimitivePermGroups") which allows one to run through the list produced by
`AllPrimitivePcGroups
' without having to store all of the groups
simultaneously.
\beginexample
gap> AllPrimitiveSolublePermGroups(Degree, [1..100], Order, [72]);
[ Group([ (1,4,7)(2,5,8)(3,6,9), (1,2,3)(4,5,6)(7,8,9), (2,4)(3,7)(6,8),
(2,3)(5,6)(8,9), (4,7)(5,8)(6,9) ]),
Group([ (1,4,7)(2,5,8)(3,6,9), (1,2,3)(4,5,6)(7,8,9), (2,5,3,9)(4,8,7,6),
(2,7,3,4)(5,8,9,6), (2,3)(4,7)(5,9)(6,8) ]),
Group([ (1,4,7)(2,5,8)(3,6,9), (1,2,3)(4,5,6)(7,8,9), (2,5,6,7,3,9,8,4) ]) ]
gap> List(last, IdGroup);
[ [ 72, 40 ], [ 72, 41 ], [ 72, 39 ] ]
\endexample
\>OnePrimitiveSolublePermGroup(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
\>OnePrimitiveSolvablePermGroup(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
This function returns one primitive soluble permutation
group <G> corresponding to irreducible matrix groups in the {
\IRREDSOL} library
for which the return value of $<func_i>(G)$ lies in
<arg_i>, or `fail
' if no such group exists. The arguments , , \dots,
must be {
\GAP} functions which take a permutation group as their only argument and return a
value, and <arg_1>, <arg_2>,
\dots, must be lists. If <arg_i> is not a list, <arg_i> is replaced by the list
`[
'`]'. One of the functions must be `Degree
' or one of its, equivalents, `NrMovedPoints' or `LargestMovedPoint
'.
For a list of functions which are handled particularly efficiently, see
"AllPrimitiveSolublePermGroups".
\beginexample
gap> OnePrimitiveSolublePermGroup(Degree, [1..100], Size, [123321]);
fail
\endexample
\>IteratorPrimitivePermGroups(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
This function returns an iterator which runs through the list of all primitive soluble
groups <G> in the {
\IRREDSOL} library such that
$<func_i>(G)$ lies in <arg_i>. The arguments <func_1>, <func_2>,
\dots,
must be {
\GAP} functions taking a pc group as their only argument and returning
a value, and <arg_1>, <arg_2>,
\dots,
must be lists. If <arg_i> is not a list, <arg_i> is replaced by the list `[
'`]'.
One of the functions must be `Degree
' or one of its, equivalents, `NrMovedPoints'
or `LargestMovedPoint
'.
For a list of functions which are handled particularly efficiently, see
"AllPrimitiveSolublePermGroups".
Using
`IteratorPrimitiveSolublePermGroups
'(, , , , \dots))
is functionally equivalent to
`Iterator
'(`AllPrimitiveSolublePermGroups'(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots))
(see
"ref:Iterators" for details) but does not
compute all relevant permutation groups at the same time.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Recognising primitive soluble groups}
\null
\index{identification!of primitive pc group}
\index{identification!of primitive permutation group}
\index{recognition!of primitive pc group}
\index{recognition!of primitive permutation group}
\index{primitive pc group!identification}
\index{primitive permutation group!identification}
\index{primitive pc group!recognition}
\index{primitive permutation group!recognition}
\>IdPrimitiveSolubleGroup(<G>) F
\>IdPrimitiveSolubleGroupNC(<G>) F
\>IdPrimitiveSolvableGroup(<G>) F
\>IdPrimitiveSolvableGroupNC(<G>) F
returns the id of the primitive soluble group <G>. This is the same as
the id of `IrreducibleMatrixGroupPrimitiveSolubleGroup
'(), see "IrreducibleMatrixGroupPrimitiveSolubleGroup" and "IdIrreducibleSolubleMatrixGroup".
Note that two primitive soluble groups are isomorphic if, and only if, their
ids returned by `IdPrimitivePcGroup
' are the same. The NC version does not
check whether <G> is primitive and soluble.
\beginexample
gap> G := SmallGroup(432, 734);
<pc group of size 432 with 7 generators>
gap> IdPrimitiveSolubleGroup(G);
[ 2, 3, 1, 2 ]
gap> G := AlternatingGroup(4);
Alt( [ 1 .. 4 ] )
gap> IdPrimitiveSolubleGroup(G);
[ 2, 2, 2, 1 ]
\endexample
\>RecognitionPrimitiveSolubleGroup(<G>,<wantiso>) F
\>RecognitionPrimitiveSolvableGroup(<G>,<wantiso>) F
This function returns a record <r> which identifies the primitive soluble group <G>.
The component `id
' is always present and contains the id of . if is `true', then
the component `iso
' is bound to an isomorphism from into a primitive pc group.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Obsolete functions}
\null
\index{obsolete functions!for primitive soluble permutation groups}
\>PrimitiveSolublePermutationGroup(<n>,<q>,<d>,<k>) F
\>PrimitiveSolvablePermutationGroup(<n>,<q>,<d>,<k>) F
\>`PrimitivePermutationGroupIrreducibleMatrixGroup(<G>)
'%
{PrimitivePermutationGroupIrreducibleMatrixGroup}
%
@{`PrimitivePermutationGroup
\\Irreducible
\\MatrixGroup
'} F
\>`PrimitivePermutationGroupIrreducibleMatrixGroupNC(<G>)
'%
{PrimitivePermutationGroupIrreducibleMatrixGroupNC}
%
@{`PrimitivePermutationGroup
\\Irreducible
\\MatrixGroupNC
'} F
\>AllPrimitiveSolublePermutationGroups(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
\>AllPrimitiveSolvablePermutationGroups(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
\>IteratorPrimitivePermutationGroups(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
\>OnePrimitiveSolublePermutationGroup(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
\>OnePrimitiveSolvablePermutationGroup(<func_1>, <arg_1>, <func_2>, <arg_2>,
\dots) F
These functions have been renamed from
\dots `PermutationGroup
'\dots to \dots `PermGroup'\dots.
The above function names are deprecated.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%E
%%