Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/GAP/pkg/crisp/htm/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 14.7.2025 mit Größe 27 kB image not shown  

SSL CHAP004.htm   Sprache: HTML

 
 products/sources/formale Sprachen/GAP/pkg/crisp/htm/CHAP004.htm


<html><head><title>[CRISP] 4 Schunck classes and formations</title></head>
<body text="#000000" bgcolor="#ffffff">
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP003.htm">Previous</a>] [<a href ="CHAP005.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
<h1>4 Schunck classes and formations</h1><p>
<P>
<H3>Sections</H3>
<oL>
<li> <A HREF="CHAP004.htm#SECT001">Creating Schunck classes</a>
<li> <A HREF="CHAP004.htm#SECT002">Attributes and operations for Schunck classes</a>
<li> <A HREF="CHAP004.htm#SECT003">Additional attributes for primitive soluble groups</a>
<li> <A HREF="CHAP004.htm#SECT004">Creating formations</a>
<li> <A HREF="CHAP004.htm#SECT005">Attributes and operations for formations</a>
<li> <A HREF="CHAP004.htm#SECT006">Low level functions for normal subgroups related to residuals</a>
</ol><p>
<p>
In principle, any group class can be created as generic (group) class,
followed by setting the required properties and attributes described in the
preceding chapters. For certain standard kinds of group classes, there are additional
functions available to accomplish this task, which are described in this and the
following chapter.
<p>
<p>
<h2><a name="SECT001">4.1 Creating Schunck classes</a></h2>
<p><p>
<a name = "I0"></a>

A class <var>calC</var> of finite groups is a <strong>Schunck class</strong> if a finite group
<var>G</var> belongs to <var>calC</var> if and only if all its primitive factor groups
belong to <var>calC</var>. In particular, a Schunck class is nonempty and closed
with respect to factor groups. By definition, a Schunck class <var>calC</var> is
determined by the primitive groups which it contains (the basis of <var>calC</var>),
or by the primitive groups not in <var>calC</var> but all of whose proper factor
groups belong to <var>calC</var> (the boundary of <var>calC</var>).
<p>
<a name = "SSEC001.1"></a>
<li><code>SchunckClass(</code><var>rec</var><code>) O</code>
<p>
returns a Schunck class defined by the information stored in the record
<var>rec</var>. Note that it is the user's responsibility to ensure that rec really
defines a Schunck class. <var>rec</var> may have the following components: <code>\in</code>,
<code>proj</code>, <code>bound</code>, <code>char</code>, and <code>name</code>. The values bound to these entries, if
present, are stored, respectively, in the attributes <code>MemberFunction</code>, 
<code>ProjectorFunction</code>, <code>BoundaryFunction</code>, <code>Characteristic</code>, and <code>Name</code>, see
<a href="CHAP002.htm#SSEC002.2">MemberFunction</a>, 
<a href="CHAP004.htm#SSEC002.6">ProjectorFunction</a>, <a href="CHAP004.htm#SSEC002.5">BoundaryFunction</a>m, <a href="CHAP003.htm#SSEC004.1">Characteristic</a>, and <a href="../../../doc/ref/chap12.html#X7F14EF9D81432113">Name</a>
for the meaning of these attributes.
<p>
At least one of the attributes <code>MemberFunction</code>, <code>ProjectorFunction</code>, or
<code>BoundaryFunction</code> must be present in order to be able to compute
with a Schunck class. 
<p>
<pre>
gap> nilp := SchunckClass(rec(bound := G -> not IsCyclic(G),
>        name := "class of all nilpotent groups"));
class of all nilpotent groups
gap> DihedralGroup(8) in nilp;
true
gap> SymmetricGroup(3) in nilp;
false
</pre>
<p>
<p>
<h2><a name="SECT002">4.2 Attributes and operations for Schunck classes</a></h2>
<p><p>
<a name = "I1"></a>

<a name = "I2"></a>

<a name = "I3"></a>

<a name = "I4"></a>

In addition to the attributes and operations for generic group classes,
for Schunck classes also the following are available:
<p>
<a name = "SSEC002.1"></a>
<li><code>Boundary(</code><var>class</var><code>) A</code>
<p>
computes the boundary of <var>class</var>, i. e., the class of all
primitive groups which do not belong to <var>class</var> but whose proper
factor groups do. The result is a group class. 
<p>
<a name = "SSEC002.2"></a>
<li><code>Basis(</code><var>class</var><code>) A</code>
<p>
The basis of <var>class</var> consists of the primitive soluble
groups in <var>class</var>. The result is a group class. 
<p>
<a name = "SSEC002.3"></a>
<li><code>Projector(</code><var>grp</var><code>, </code><var>class</var><code>) O</code>
<p>
This function returns a <var>class</var>-projector of <var>grp</var>.
Note that, at present, methods are only available for finite
soluble groups <var>grp</var>, or when <var>class</var> has an attribute <code>ProjectorFunction</code>.
<p>
A subgroup 
<var>H</var> of the group <var>G</var> is a <var>class</var>-projector of <var>G</var> if <var>H N/N</var> is
<var>class</var>-maximal in <var>G/N</var> for all normal subgroups <var>N</var> of <var>G</var>. A subgroup <var>H</var>
of <var>G</var> is <var>class</var>-maximal in <var>G</var> if <var>H</var> belongs to <var>class</var>, and there is no
subgroup <var>L</var> of <var>G</var> which contains <var>H</var> and lies in <var>class</var>. Note that if
<var>class</var> consists of finite soluble groups, then <var>class</var>-projectors exist in
every finite soluble group if and only if <var>class</var> is a Schunck class, and in
this case all <var>class</var>-projectors of
<var>G</var> are conjugate. See <a href="biblio.htm#DH92"><cite>DH92</cite></a>, III, 3.21.
<p>
<pre>
gap> H := SchunckClass(rec(bound := G -> Size(G) = 6));
SchunckClass(bound:=function( G ) ... end)
gap> Size(Projector(GL(2,3), H)); 
16 
gap> # H-projectors coincide with Sylow subgroups
gap> U := SchunckClass(rec( # class of all supersoluble groups
>    bound := G -> not IsPrimeInt( Size(Socle(G)))
> )); 
SchunckClass(bound:=function( G ) ... end)
gap> Size(Projector(SymmetricGroup(4), U));

gap> # the projectors are the point stabilizers
</pre>
<p>
<a name = "SSEC002.4"></a>
<li><code>CoveringSubgroup(</code><var>grp</var><code>, </code><var>class</var><code>) O</code>
<p>
A subgroup <var>H</var> of <var>G</var> is a <var>class</var>-covering subgroup of <var>G</var> if <var>H</var> is a
<var>class</var>-projector of <var>L</var> for every subgroup <var>L</var> with <var>H leqL leqG</var>.
Note that projectors and covering subgroups coincide for Schunck classes of
finite soluble groups. At present, methods are only available for finite
soluble groups <var>grp</var>.
<p>
<a name = "SSEC002.5"></a>
<li><code>BoundaryFunction(</code><var>grpclass</var><code>) A</code>
<p>
If bound, this attribute stores a function <var>func</var> which has been set by the 
user to define <var>grpclass</var>. <var>func</var> must be a function taking one argument.
If the argument is a finite primitive soluble group <var>G</var>, <var>func</var> must  return
<code>true</code> if <var>G</var> is in the boundary of <var>grpclass</var>, and <code>false</code> if <var>G</var> belongs to 
<var>grpclass</var>. The behaviour for arguments which are not primitive 
soluble groups, or which  belong neither to <var>grpclass</var> nor to the
boundary of <var>grpclass</var> need not be defined. Note that 
<code>BoundaryFunction</code> should <strong>not</strong> be used to test whether a given group 
belongs to the boundary of <var>grpclass</var>. <code>Boundary</code> and/or <code>Basis</code> (see 
<a href="CHAP004.htm#SSEC002.1">Boundary</a> and <a href="CHAP004.htm#SSEC002.2">Basis</a>), which are defined independently of the way 
<var>grpclass</var> is defined and will work for all finite soluble groups.
<p>
<a name = "SSEC002.6"></a>
<li><code>ProjectorFunction(</code><var>grpclass</var><code>) A</code>
<p>
If bound, <code>ProjectorFunction</code> stores a function <var>func</var> supplied by the
user as part of the definition of <var>grpclass</var>. <var>func</var> must be a function
taking a group
<var>G</var> as the only argument, and returns a <var>grpclass</var>-projector of <var>G</var>.  Note that
<code>Projector</code> (see <a href="CHAP004.htm#SSEC002.3">Projector</a>),
rather than <code>ProjectorFunction</code>, should be used by the user to compute
<var>grpclass</var>-projectors.
<p>
<p>
<h2><a name="SECT003">4.3 Additional attributes for primitive soluble groups</a></h2>
<p><p>
<a name = "I5"></a>

<a name = "I6"></a>

<a name = "SSEC003.1"></a>
<li><code>IsPrimitiveSolubleGroup(</code><var>grp</var><code>) P</code>
<a name = "SSEC003.1"></a>
<li><code>IsPrimitiveSoluble(</code><var>grp</var><code>) P</code>
<a name = "SSEC003.1"></a>
<li><code>IsPrimitiveSolvableGroup(</code><var>grp</var><code>) P</code>
<a name = "SSEC003.1"></a>
<li><code>IsPrimitiveSolvable(</code><var>grp</var><code>) P</code>
<p>
returns true if <var>grp</var> is primitive and soluble, and false otherwise.
An abstract finite group <var>G</var> is <strong>primitive</strong> if it has a faithful primitive permutation 
representation, or equivalently, if it has a maximal subgroup <var>M</var> with trivial 
core. If <var>G</var> is soluble, <var>M</var> complements the unique minimal normal subgroup
<var>N</var> of <var>G</var>. Therefore <var>N</var> is the socle as well as the Fitting subgroup of
<var>G</var>. A permutation group may be primitive as an abstract group while it is 
not primitive as a permutation group (cf. <a href="../../../doc/ref/chap41.html#X84C19AD68247B760">IsPrimitive</a>).
<p>
<a name = "SSEC003.2"></a>
<li><code>SocleComplement(</code><var>grp</var><code>) A</code>
<p>
If present, this attribute stores a complement of the socle of <var>grp</var>.
Currently, there is only a method available for <code>SocleComplement</code>
if <var>grp</var> has the property <code>IsPrimitiveSoluble</code>.
<p>
<p>
<h2><a name="SECT004">4.4 Creating formations</a></h2>
<p><p>
<a name = "I7"></a>

A nonempty group class is a  formation if it is closed with respect to factor
groups and residually closed. A saturated formation is, of course, a
formation which is saturated. Note that by the
Gaschütz-Lubeseder-Schmid theorem (see e. g. <a href="biblio.htm#DH92"><cite>DH92</cite></a>, IV,
4.6), every saturated formation is a local formation. Moreover, every
saturated formation is a Schunck class. Therefore a saturated formation
admits the operations <code>Boundary</code>, <code>Basis</code>, and <code>Projector</code>.
<p>
<a name = "SSEC004.1"></a>
<li><code>OrdinaryFormation(</code><var>rec</var><code>) O</code>
<p>
creates a formation from the record <var>rec</var>. Note that it is the user's responsibility to ensure that rec really
defines a formation. <var>rec</var> may have components <code>\in</code>,
<code>res</code>, <code>char</code>, and <code>name</code>, whose values are stored in the attributes
<code>MemberFunction</code>, <code>ResidualFunction</code>, <code>Characteristic</code>, and
<code>Name</code>, respectively, of the new formation. See <a href="CHAP002.htm#SSEC002.2">MemberFunction</a>, <a href="CHAP004.htm#SSEC005.2">ResidualFunction</a>,
<a href="CHAP003.htm#SSEC004.1">Characteristic</a>, and <a href="../../../doc/ref/chap12.html#X7F14EF9D81432113">Name</a>, respectively, for the meaning of these attributes.
<p>
The following example shows how to construct the formations of all groups of 
derived length at most <var>3</var> and of all groups of exponent dividing <var>6</var>.
<p>
<pre>
gap> der3 := OrdinaryFormation(rec(
>    res := G -> DerivedSubgroup(DerivedSubgroup(DerivedSubgroup(G)))
> ));
OrdinaryFormation(res:=function( G ) ... end)
gap> SymmetricGroup(4) in der3;
true
gap> GL(2,3) in der3;
false
gap> exp6 := OrdinaryFormation(rec(
>    \in := G -> 6 mod Exponent(G) = 0,
>    char := [2,3]));
OrdinaryFormation(in:=function( G ) ... end)
</pre>
<p>
<a name = "SSEC004.2"></a>
<li><code>SaturatedFormation(</code><var>rec</var><code>) O</code>
<p>
creates a saturated formation from the record <var>rec</var>. Note that it is the user's
responsibility to ensure that <var>rec</var> really defines a saturated formation. <var>rec</var> may have
any components admissible for formations (see <a href="CHAP004.htm#SSEC004.1">OrdinaryFormation</a>) or Schunck classes
(see <a href="CHAP004.htm#SSEC001.1">SchunckClass</a>), that is, <code>\in</code>, <code>res</code>, <code>char</code>, <code>proj</code>, <code>bound</code>, <code>locdef</code>, and
<code>name</code>,  whose values, if bound, are stored in the attributes <code>MemberFunction</code>,
<code>ResidualFunction</code>, <code>Characteristic</code>,  <code>ProjectorFunction</code>, <code>BoundaryFunction</code>,
<code>LocalDefinitionFunction</code>, and <code>Name</code>, respectively.  Please refer to <a href="CHAP002.htm#SSEC002.2">MemberFunction</a>, 
<a href="CHAP004.htm#SSEC005.2">ResidualFunction</a>, <a href="CHAP003.htm#SSEC004.1">Characteristic</a>,  <a href="CHAP004.htm#SSEC002.6">ProjectorFunction</a>, <a href="CHAP004.htm#SSEC002.5">BoundaryFunction</a>,
<a href="CHAP004.htm#SSEC005.3">LocalDefinitionFunction</a>,  and <a href="../../../doc/ref/chap12.html#X7F14EF9D81432113">Name</a> for the meaning of these attributes.
<p>
There are also functions <code>FittingFormation</code> and <code>SaturatedFittingFormation</code> to create
Fitting formations and saturated Fitting formations; see
 <a href="CHAP005.htm#SSEC002.1">FittingFormation</a> and <a href="CHAP005.htm#SSEC002.2">SaturatedFittingFormation</a> below for details
<p>
The following example shows how to construct the saturated formations of all finite
nilpotent groups and of all nilpotent-by-abelian groups whose order is not divisible by a
prime congruent 3 mod 4, and whose <var>2</var>-chief factors are central. In the first case, we
choose <var>f(p) = (1)</var> for all primes <var>p</var>, so that the <var>f(p)</var>-residual of <var>G</var> is generated
by a generating set of <var>G</var> (see <a href="CHAP004.htm#SSEC005.3">LocalDefinitionFunction</a> below). In the second example,
we let <var>f(2) = 1</var>, if <var>p equiv3 pmod4</var>, we define <var>f(p) = calA</var>, the class of
all finite abelian groups, and set
<var>f(p) =
emptyset</var> otherwise.
<p>
<pre>
gap> nilp := SaturatedFormation(rec(
>      locdef := function(G, p)
>          return GeneratorsOfGroup(G);
>      end));
SaturatedFormation(locdef:=function( G, p ) ... end)
gap> form := SaturatedFormation(rec(
>    locdef := function(G, p)
>        if p = 2 then
>           return GeneratorsOfGroup(G);
>        elif p mod 4 = 3 then
>           return GeneratorsOfGroup(DerivedSubgroup(G));
>        else
>           return fail;
>        fi;
>     end));
SaturatedFormation(locdef:=function( G, p ) ... end)
gap> Projector(GL(2,3), form);
Group([ [ [ Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0 ] ], 
  [ [ Z(3)^0, Z(3) ], [ 0*Z(3), Z(3)^0 ] ], 
  [ [ Z(3), 0*Z(3) ], [ 0*Z(3), Z(3) ] ] ])
</pre>
<p>
<a name = "SSEC004.3"></a>
<li><code>FormationProduct(</code><var>form1</var><code>, </code><var>form2</var><code>) O</code>
<p>
The formation product <var>prod</var> of two formations <var>form1</var> and <var>form2</var
consists  of the groups <var>G</var> such that the <var>form2</var>-residual of <var>G</var> belongs to
<var>form1</var>. The product <var>prod</var> is again a formation. If <var>form1</var>
and <var>form2</var> are saturated formations, the result is a saturated
formation. The same is true if the characteristic of <var>form2</var> is contained in
that of <var>form1</var>. This is automatically recognised if the characteristic of
<var>form1</var> is <code>AllPrimes</code> (see <a href="CHAP006.htm#SSEC003.1">AllPrimes</a>). In all other cases, you
will have to set the attribute <code>IsSaturated</code> manually, if applicable. Note
that in general it is not possible for <font face="Gill Sans,Helvetica,Arial">CRISP</font> to determine if two classes
are contained in each other.
<p>
<pre>
gap> nilp := SaturatedFormation(rec(\in := IsNilpotent, name := "nilp"));
nilp
gap> FormationProduct(nilp, der3); # no characteristic known
FormationProduct(nilp, OrdinaryFormation(res:=function( G ) ... end))
gap> HasIsSaturated(last);HasCharacteristic(nilp);
false
false
gap> SetCharacteristic(nilp, AllPrimes);
gap> FormationProduct(nilp, der3); # try with characteristic
FormationProduct(nilp, OrdinaryFormation(res:=function( G ) ... end))
gap> IsSaturated(last);
true
</pre>
<p>
<a name = "SSEC004.4"></a>
<li><code>FittingFormationProduct(</code><var>fitform1</var><code>, </code><var>fitform2</var><code>) O</code>
<p>
If <var>fitform1</var> and <var>fitform2</var>  are Fitting formations, the formation product
equals the Fitting product (see <a href="CHAP005.htm#SSEC001.2">FittingProduct</a>) of <var>fitform1</var> and
<var>fitform2</var>, which, in turn, equals the class product of <var>fitform1</var> and
<var>fitform2</var>. The latter consists of all groups <var>G</var> having a  normal subgroup
<var>N</var> in <var>fitform1</var> such that <var><var>G</var>/<var>N</var></var> belongs to <var>fitform2</var>.
<p>
Note that if <var>fitform1</var> and <var>fitform2</var> are Fitting formations, then 
<code>FormationProduct(</code><var>fitform1</var><code>, </code><var>fitform2</var><code>)</code>, <code>FittingProduct(</code><var>fitform1</var><code>,
</code><var>fitform2</var><code>)</code> and <code>FittingFormationProduct(</code><var>fitform1</var><code>, </code><var>fitform2</var><code>)</code> all
return the same mathematical object (but distinct GAP objects), which is,
again, a Fitting formation.
<p>
<pre>
gap> nilp := FittingFormation(rec(\in := IsNilpotent, name := "nilp"));;
gap> FormationProduct(nilp, nilp);
FittingFormationProduct(nilp, nilp)
gap> FittingProduct(nilp, nilp);
FittingFormationProduct(nilp, nilp)
gap> FittingFormationProduct(nilp, nilp);
FittingFormationProduct(nilp, nilp)
</pre>
<p>
<p>
<h2><a name="SECT005">4.5 Attributes and operations for formations</a></h2>
<p><p>
<a name = "I8"></a>

<a name = "I9"></a>

<a name = "I10"></a>

<a name = "I11"></a>

In addition to those available for generic group classes, formations also
admit the following attributes and operations. See also <a href="CHAP004.htm#SECT002">Attributes and operations for Schunck classes</a> for additional operations for saturated
formations. 
<p>
<a name = "SSEC005.1"></a>
<li><code>Residual(</code><var>grp</var><code>, </code><var>form</var><code>) O</code>
<a name = "SSEC005.1"></a>
<li><code>Residuum(</code><var>grp</var><code>. </code><var>form</var><code>) O</code>
<p>
return the <var>form</var>-residual (also called <var>form</var>-residuum) of the group <var>grp</var>.
This is the smallest normal subgroup <var>res</var> of <var>grp</var> such that <var><var>grp</var>/<var>res</var></var> belongs to <var>form</var>.
Note that, unless <var>form</var> has an attribute <code>ResidualFunction</code>, there are presently only methods
available for finite soluble groups.
<p>
<a name = "SSEC005.2"></a>
<li><code>ResidualFunction(</code><var>form</var><code>) A</code>
<p>
This attribute is part of the definition of <var>form</var> supplied by the user. If
present, it must contain a function which computes the <var>form</var>-residual of a given group.
In general, such a residual only exists if <var>form</var> is residually closed; cf.
<a href="CHAP003.htm#SSEC002.6">IsResiduallyClosed</a>. Note that <code>ResidualFunction</code>, if present, is called by <code>Residual</code>
(see <a href="CHAP004.htm#SSEC005.1">Residual</a>). Therefore <code>Residual</code>, which also works for formations without
<code>ResidualFunction</code>, should be used by the user to compute <var>form</var>-residuals.
<p>
<a name = "SSEC005.3"></a>
<li><code>LocalDefinitionFunction(</code><var>form</var><code>) A</code>
<p>
Let <var>form</var> be a saturated formation with local function <var>f</var>. This attribute,
if present, stores a function <var>func</var> supplied by the user as part of the
definition of <var>form</var>. <var>func</var> must be a function taking two parameters, a group
<var>G</var> and a prime <var>p</var>. If <var>p</var> is in the characteristic of <var>form</var>, this
function must return a list <var>list</var> of elements of
<var>G</var>, such that the smallest normal subgroup of <var>G</var> containing <var>list</var> is the
<var>f(p)</var>-residual of <var>G</var>. If <var>p</var> is not in the characteristic of <var>form</var>, 
then <code></code><var>func</var><code>(</code><var>G</var><code>, </code><var>p</var><code>)</code> must return <code>fail</code> for any group <var>G</var>.
<code>LocalDefinitionFunction</code> is part of the definition of <var>form</var> and should not
be called by the user. 
<p>
<p>
<h2><a name="SECT006">4.6 Low level functions for normal subgroups related to residuals</a></h2>
<p><p>
<a name = "I12"></a>

<a name = "I13"></a>

<a name = "I14"></a>

<a name = "I15"></a>

<a name = "SSEC006.1"></a>
<li><code>OneInvariantSubgroupMinWrtQProperty(</code><var>act</var><code>, </code><var>grp</var><code>, </code><var>pretest</var><code>, </code><var>test</var><code>, </code><var>data</var><code>) O</code>
<p>
Let <var>act</var> be a list or group whose elements act on <var>grp</var> via the caret operator,
such that every subgroup of <var>grp</var> invariant under <var>act</var> is normal in <var>grp</var>. 
Assume that <var>calX</var> is a set of <var>act</var>-invariant subgroups of <var>grp</var> containing <var>grp</var>, and
such that whenever
<var>M</var> and <var>N</var> are <var>act</var>-invariant subgroups with <var>M incalX</var> and <var>M</var>
contained in <var>N</var>, then also <var>N incalX</var>. Then
<code>OneInvariantSubgroupMinWrtQProperty</code> computes an <var>act</var>-invariant subgroup <var>M incalX</var>
such that no <var>act</var>-invariant subgroup of <var>grp</var> contained in <var>M</var> belongs to <var>calX</var>. 
At present, there exist only methods for finite soluble groups <var>grp</var>.
<p>
The class <var>calX</var> is described by two functions, <var>pretest</var> and <var>test</var>. 
<p>
<var>pretest</var> is a function taking four arguments, <var>U</var>, <var>V</var>, <var>R</var>, and <var>data</var>,
where <var>data</var> is just the argument passed to
<code>OneInvariantSubgroupMinWrtQProperty</code> (see below for examples). <var><var>U</var>/<var>V</var></var> is a
chief factor of <var>grp</var>, and  <var>R</var> is an <var>act</var>-invariant subgroup of <var>grp</var> containing <var>U</var>
which is known to belong to
<var>calX</var>.
<p>
<var>pretest</var> may return the values <code>true</code>, <code>false</code>, or <code>fail</code>. If it returns 
<code>true</code>, every <var>act</var>-invariant subgroup <var>N</var> of <var>grp</var> such that <var>V</var> is
contained in <var>N</var> and <var><var>R</var>/<var>N</var></var> is
<var>G</var>-isomorphic with <var><var>U</var>/<var>V</var></var> must belong to <var>calX</var>. If it returns
<code>false</code>, no such <var>act</var>-invariant subgroup <var>N</var> may belong to <var>calX</var>. 
<p>
<var>test</var> is a function taking three arguments, <var>S</var>, <var>R</var>, and <var>data</var>, where
data has been described above. <var>R</var> is a <var>act</var>-invariant subgroup of <var>grp</var> belonging to
<var>calX</var>, and <var><var>R</var>/<var>S</var></var> is a chief factor of <var>grp</var>. The function must return
true if <var>S</var> belongs to <var>calX</var>, and false otherwise. 
<p>
Note that whenever <code></code><var>test</var><code>(</code><var>S</var><code>, </code><var>R</var><code>, </code><var>data</var><code>)</code> is called, 
<code></code><var>pretest</var><code>(</code><var>U</var><code>, </code><var>V</var><code>, </code><var>R</var><code>, </code><var>data</var><code>)</code> has been called before, and has returned
<code>fail</code>, where  <var><var>U</var>/<var>V</var></var> is a  chief factor which is <var>G</var>-isomorphic with
<var><var>R</var>/<var>S</var></var>. Thus <var>test</var> need not repeat tests which have been performed by
<var>pretest</var>. In particular, if <var>pretest</var> always returns <code>true</code> or <code>false</code>,
<var>test</var> will never be called.
<p>
<var>data</var> is never used or changed by <code>OneInvariantSubgroupMinWrtQProperty</code>, but
exists only as a means for passing additional information to or between
the functions <var>pretest</var> and <var>test</var>.
<p>
For example, if <var>calC</var> is a group class which is closed with respect to
factor groups and <var>calX</var> is the set of all <var>act</var>-invariant subgroups <var>N</var> of <var>grp</var>
with <var><var>grp</var>/N incalC</var>, then <var>calX</var> satisfies the above properties. In
particular, if <var>calC</var> is a formation, then
<code>OneInvariantSubgroupMinWrtQProperty</code> will return the <var>calC</var>-residual of
<var>grp</var>.
<p>
The following example shows how to use <code>OneInvariantSubgroupMinWrtQProperty</code> to
compute the derived subgroup of a group <var>G</var>. (Note that in practice, this 
is not a particularly efficient way of computing the derived subgroup.)
<p>
<pre>
gap> G := DirectProduct(SL(2,3), CyclicGroup(2));;
gap> data := rec(gens := GeneratorsOfGroup(G),
>    comms := List(Combinations(GeneratorsOfGroup(G), 2), 
>       x -> Comm(x[1],x[2])));;
gap> OneInvariantSubgroupMinWrtQProperty(
>    G, G,
>    function(U, V, R, data) # test if U/V is central in G
>        if ForAny(ModuloPcgs(U, V), y ->
>           ForAny(data.gens, x -> not Comm(x, y) in V)) then 
>           return false;
>        else
>           return fail;
>        fi;
>     end,
>     function(S, R, data)
>        return ForAll(data.comms, x -> x in S);
>     end,
>     data) = DerivedSubgroup(G); # compare results
true
</pre>
<p>
<a name = "SSEC006.2"></a>
<li><code>AllInvariantSubgroupsWithQProperty(</code><var>act</var><code>, </code><var>grp</var><code>, </code><var>pretest</var><code>, </code><var>test</var><code>, </code><var>data</var><code>) O</code>
<p>
<code>AllInvariantSubgroupsWithQProperty</code> returns a list consisting of all 
<var>act</var>-invariant subgroups in <var>calX</var>, where <var>calX</var> is the class defined by <var>pretest</var>,
<var>test</var>, and <var>data</var>, as described for <code>OneInvariantSubgroupMinWrtQProperty</code> (see
<a href="CHAP004.htm#SSEC006.1">OneInvariantSubgroupMinWrtQProperty</a>). 
At present, there exist only methods for finite soluble groups <var>grp</var>.
<p>
<pre>
gap> G := GL(2,3);
GL(2,3)
gap> normsWithSupersolubleFactorGroups :=
> AllInvariantSubgroupsWithQProperty(G, G, 
>    function(U, V, R, data)
>       return IsPrimeInt(Index(U, V));
>    end,
>    ReturnFail, # pretest is sufficient
>    fail); # no data required
[ GL(2,3), 
  Group([ [ [ Z(3)^0, Z(3) ], [ 0*Z(3), Z(3)^0 ] ],
      [ [ Z(3), Z(3)^0 ], [ Z(3)^0, Z(3)^0 ] ], 
      [ [ 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3) ] ], 
      [ [ Z(3), 0*Z(3) ], [ 0*Z(3), Z(3) ] ] ]), 
  Group([ [ [ Z(3), Z(3)^0 ], [ Z(3)^0, Z(3)^0 ] ], 
      [ [ 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3) ] ], 
      [ [ Z(3), 0*Z(3) ], [ 0*Z(3), Z(3) ] ] ]) ]
</pre>
<p>
<a name = "SSEC006.3"></a>
<li><code>OneNormalSubgroupMinWrtQProperty(</code><var>grp</var><code>, </code><var>pretest</var><code>, </code><var>test</var><code>, </code><var>data</var><code>) O</code>
<p>
<code>OneNormalSubgroupMinWrtQProperty</code> is a special case of 
<code>OneInvariantSubgroupMinWrtQProperty</code> (see
<a href="CHAP004.htm#SSEC006.1">OneInvariantSubgroupMinWrtQProperty</a>) where <var><var>act</var> = <var>grp</var></var>. 
<p>
<a name = "SSEC006.4"></a>
<li><code>AllNormalSubgroupsWithQProperty(</code><var>grp</var><code>, </code><var>pretest</var><code>, </code><var>test</var><code>, </code><var>data</var><code>) O</code>
<p>
<code>AllNormalSubgroupsWithQProperty</code> is a special case of 
<code>AllInvariantSubgroupsWithQProperty</code> (see
<a href="CHAP004.htm#SSEC006.2">AllInvariantSubgroupsWithQProperty</a>) where <var><var>act</var> = <var>grp</var></var>. 
<p>
<p>
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP003.htm">Previous</a>] [<a href ="CHAP005.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
<P>
<address>CRISP manual<br>August 2025
</address></body></html>

99%


¤ Dauer der Verarbeitung: 0.37 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.