<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %A  groups.msk                  GAP documentation            Alexander Hulpke -->
<!-- %% -->
<!-- %A  @(#)<M>Id: groups.msk,v 1.111 2006/08/17 14:09:37 gap Exp </M> -->
<!-- %% -->
<!-- %Y  (C) 1998 School Math and Comp. Sci., University of St  Andrews, Scotland -->
<!-- %Y  Copyright (C) 2002 The GAP Group -->
<!-- %% -->
<Chapter Label="Groups">
<Heading>Groups</Heading>

This chapter explains how to create groups and defines operations for
groups, that is operations whose definition does not depend on the
representation used.
However methods for these operations in most cases will make use of the
representation.
<P/>
If not otherwise specified, in all examples in this chapter the group <C>g</C>
will be the symmetric group <M>S_4</M> acting on the letters
<M>\{ 1, \ldots, 4 \}</M>.


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Group Elements">
<Heading>Group Elements</Heading>

Groups in &GAP; are written multiplicatively.
The elements from which a group can be generated must permit
multiplication and multiplicative inversion
(see&nbsp;<Ref Sect="Useful Categories of Elements"/>).
<P/>
<Example><![CDATA[
gap> a:=(1,2,3);;b:=(2,3,4);;
gap> One(a);
()
gap> Inverse(b);
(2,4,3)
gap> a*b;
(1,3)(2,4)
gap> Order(a*b);
2
gap> Order( [ [ 1, 1 ], [ 0, 1 ] ] );
infinity
]]></Example>
<P/>
The next example may run into an infinite loop
because the given matrix in fact has infinite order.
<P/>
<Log><![CDATA[
gap> Order( [ [ 1, 1 ], [ 0, 1 ] ] * Indeterminate( Rationals ) );
#I  Order: warning, order of <mat> might be infinite
]]></Log>
<P/>
<Index Subkey="of a group">order</Index>
Since groups are domains, the recommended command to compute the order
of a group is <Ref Func="Size"/>.
For convenience, group orders can also be computed with <Ref Func="Order"/>.
<P/>
The operation <Ref Func="Comm"/> can be used to compute the commutator of
two elements, the operation <Ref Func="LeftQuotient"/> computes the
product <M>x^{{-1}} y</M>.

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Creating Groups">
<Heading>Creating Groups</Heading>

When groups are created from generators,
this means that the generators must be elements that can be multiplied
and inverted (see also&nbsp;<Ref Sect="Constructing Domains"/>).
For creating a free group on a set of symbols,
see&nbsp;<Ref Func="FreeGroup" Label="for given rank"/>.

<#Include Label="Group">
<#Include Label="GroupByGenerators">
<#Include Label="GroupWithGenerators">
<#Include Label="GeneratorsOfGroup">
<#Include Label="AsGroup">
<#Include Label="ConjugateGroup">
<#Include Label="IsGroup">
<#Include Label="InfoGroup">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Subgroups">
<Heading>Subgroups</Heading>

For the general concept of parents and subdomains,
see&nbsp;<Ref Sect="Parents"/> and&nbsp;<Ref Sect="Constructing Subdomains"/>.
More functions that construct certain subgroups can be found
in the sections&nbsp;<Ref Sect="Normal Structure"/>, <Ref Sect="Specific and Parametrized Subgroups"/>,
<Ref Sect="Sylow Subgroups and Hall Subgroups"/>,
and&nbsp;<Ref Sect="Subgroups characterized by prime powers"/>.
<P/>
<#Include Label="[2]{grp}">
<#Include Label="Subgroup">
<#Include Label="Index">
<#Include Label="IndexInWholeGroup">
<Example><![CDATA[
gap> freegp:=FreeGroup(1);;
gap> freesub:=Subgroup(freegp,[freegp.1^5]);;
gap> IndexInWholeGroup(freesub);
5
]]></Example>

<#Include Label="AsSubgroup">
<#Include Label="IsSubgroup">
<#Include Label="IsNormal">
<#Include Label="IsCharacteristicSubgroup">
<#Include Label="ConjugateSubgroup">
<#Include Label="ConjugateSubgroups">
<#Include Label="IsSubnormal">
<#Include Label="SubgroupByProperty">
<#Include Label="SubgroupShell">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Closures of (Sub)groups">
<Heading>Closures of (Sub)groups</Heading>

<#Include Label="ClosureGroup">
<#Include Label="ClosureGroupAddElm">
<#Include Label="ClosureGroupDefault">
<#Include Label="ClosureSubgroup">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Expressing Group Elements as Words in Generators">
<Heading>Expressing Group Elements as Words in Generators</Heading>

<Index>factorization</Index>
<Index Subkey="in generators">words</Index>

Using homomorphisms (see chapter&nbsp;<Ref Chap="Group Homomorphisms"/>) is is possible to
express group elements as words in given generators: Create a free group
(see&nbsp;<Ref Func="FreeGroup" Label="for given rank"/>)
on the correct number of generators and create a
homomorphism from this free group onto the group <A>G</A> in whose generators you
want to factorize. Then the preimage of an element of <A>G</A> is a word in the
free generators, that will map on this element again.
<P/>
<#Include Label="EpimorphismFromFreeGroup">
<!-- % randomization effect is now gone. -->
<#Include Label="Factorization">
<#Include Label="GrowthFunctionOfGroup">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Structure Descriptions">
<Heading>Structure Descriptions</Heading>

<#Include Label="StructureDescription">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Cosets">
<Heading>Cosets</Heading>

<Index>right cosets</Index>
<Index>coset</Index>
<#Include Label="RightCoset">
<#Include Label="RightCosets">
<#Include Label="CanonicalRightCosetElement">
<#Include Label="IsRightCoset">
<#Include Label="CosetDecomposition">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Transversals">
<Heading>Transversals</Heading>

<#Include Label="RightTransversal">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Double Cosets">
<Heading>Double Cosets</Heading>

<#Include Label="DoubleCoset">
<#Include Label="RepresentativesContainedRightCosets">
<#Include Label="DoubleCosets">
<#Include Label="IsDoubleCoset">
<#Include Label="DoubleCosetRepsAndSizes">
<#Include Label="InfoCoset">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Conjugacy Classes">
<Heading>Conjugacy Classes</Heading>

<#Include Label="ConjugacyClass">
<#Include Label="ConjugacyClasses:grp">
<#Include Label="ConjugacyClassesByRandomSearch">
<#Include Label="ConjugacyClassesByOrbits">
<#Include Label="NrConjugacyClasses">
<#Include Label="RationalClass">
<#Include Label="RationalClasses">
<#Include Label="GaloisGroup:clas">
<#Include Label="IsConjugate">
<#Include Label="NthRootsInGroup">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Normal Structure">
<Heading>Normal Structure</Heading>

For the operations
<Ref Func="Centralizer" Label="for a magma and a submagma"/> and
<Ref Func="Centre"/>, see Chapter&nbsp;<Ref Chap="Magmas"/>.

<Index>normalizer</Index>
<#Include Label="Normalizer">
<#Include Label="Core">
<#Include Label="PCore">
<#Include Label="NormalClosure">
<#Include Label="NormalIntersection">
<#Include Label="ComplementClassesRepresentatives">
<#Include Label="InfoComplement">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Specific and Parametrized Subgroups">
<Heading>Specific and Parametrized Subgroups</Heading>

The centre of a group (the subgroup of those elements that commute with all
other elements of the group) can be computed by the operation
<Ref Func="Centre"/>.

<#Include Label="TrivialSubgroup">
<#Include Label="CommutatorSubgroup">
<#Include Label="DerivedSubgroup">
<#Include Label="CommutatorLength">
<#Include Label="FittingSubgroup">
<#Include Label="FrattiniSubgroup">
<#Include Label="PrefrattiniSubgroup">
<#Include Label="PerfectResiduum">
<#Include Label="RadicalGroup">
<#Include Label="Socle">
<#Include Label="SupersolvableResiduum">
<#Include Label="PRump">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Sylow Subgroups and Hall Subgroups">
<Heading>Sylow Subgroups and Hall Subgroups</Heading>

With respect to the following &GAP; functions,
please note that by theorems of P.&nbsp;Hall,
a group <M>G</M> is solvable if and only if one of the following conditions holds.
<Enum>
<Item>
    For each prime <M>p</M> dividing the order of <M>G</M>,
    there exists a <M>p</M>-complement (see&nbsp;<Ref Func="SylowComplement"/>).
</Item>
<Item>
    For each set <M>P</M> of primes dividing the order of <M>G</M>,
    there exists a <M>P</M>-Hall subgroup (see&nbsp;<Ref Func="HallSubgroup"/>).
</Item>
<Item>
    <M>G</M> has a Sylow system (see&nbsp;<Ref Func="SylowSystem"/>).
</Item>
<Item>
    <M>G</M> has a complement system (see&nbsp;<Ref Func="ComplementSystem"/>).
</Item>
</Enum>

<#Include Label="SylowSubgroup">
<#Include Label="SylowComplement">
<#Include Label="HallSubgroup">
<#Include Label="SylowSystem">
<#Include Label="ComplementSystem">
<#Include Label="HallSystem">

<!-- %%  The methods for Sylow subgroups in polycyclic groups and for Hall -->
<!-- %%  Systems are due to Bettina Eick. -->

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Subgroups characterized by prime powers">
<Heading>Subgroups characterized by prime powers</Heading>

<#Include Label="Omega">
<#Include Label="Agemo">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Group Properties">
<Heading>Group Properties</Heading>

Some properties of groups can be defined not only for groups but also for
other structures.
For example, nilpotency and solvability make sense also for algebras.
Note that these names refer to different definitions for groups and
algebras, contrary to the situation with finiteness or commutativity.
In such cases, the name of the function for groups got a suffix <C>Group</C>
to distinguish different meanings for different structures.
<P/>
Some functions, such as <Ref Func="IsPSolvable"/> and
<Ref Func="IsPNilpotent"/>, although they are mathematical
properties, are not properties in the sense of &GAP;
(see&nbsp;<Ref Sect="Attributes"/> and <Ref Sect="Properties"/>),
as they depend on a parameter.

<#Include Label="IsCyclic">
<#Include Label="IsElementaryAbelian">
<#Include Label="IsNilpotentGroup">
<#Include Label="NilpotencyClassOfGroup">
<#Include Label="IsPerfectGroup">
<#Include Label="IsSolvableGroup">
<#Include Label="IsPolycyclicGroup">
<#Include Label="IsSupersolvableGroup">
<#Include Label="IsMonomialGroup">
<#Include Label="IsSimpleGroup">
<#Include Label="IsAlmostSimpleGroup">
<#Include Label="IsomorphismTypeInfoFiniteSimpleGroup">
<#Include Label="SimpleGroup">
<#Include Label="SimpleGroupsIterator">
<#Include Label="SmallSimpleGroup">
<#Include Label="AllSmallNonabelianSimpleGroups">
<#Include Label="IsFinitelyGeneratedGroup">
<#Include Label="IsSubsetLocallyFiniteGroup">
<#Include Label="IsPGroup">
<#Include Label="PrimePGroup">
<#Include Label="PClassPGroup">
<#Include Label="RankPGroup">
<#Include Label="IsPSolvable">
<#Include Label="IsPNilpotent">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Numerical Group Attributes">
<Heading>Numerical Group Attributes</Heading>

This section gives only some examples of numerical group attributes, so
it should not serve as a collection of all numerical group attributes.
The manual contains more such attributes documented in this manual, for
example, <Ref Attr="NrConjugacyClasses"/>, 
<Ref Attr="NilpotencyClassOfGroup"/> and others.
<P/>
Note also that some functions, such as <Ref Func="EulerianFunction"/>,
are mathematical attributes, but not &GAP; attributes
(see <Ref Sect="Attributes"/>) as they are depending on a parameter.

<#Include Label="AbelianInvariants:grp">
<#Include Label="Exponent">
<#Include Label="EulerianFunction">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Subgroup Series">
<Heading>Subgroup Series</Heading>

In group theory many subgroup series are considered,
and &GAP; provides commands to compute them.
In the following sections, there is always a series
<M>G = U_1 > U_2 > \cdots > U_m = \langle 1 \rangle</M> of subgroups considered.
A series also may stop without reaching <M>G</M> or <M>\langle 1 \rangle</M>.
<P/>
A series is called <E>subnormal</E> if every <M>U_{{i+1}}</M> is normal in
<M>U_i</M>.
<P/>
A series is called <E>normal</E> if every <M>U_i</M> is normal in <M>G</M>.
<P/>
A series of normal subgroups is called <E>central</E> if <M>U_i/U_{{i+1}}</M>
is central in <M>G / U_{{i+1}}</M>.
<P/>
We call a series <E>refinable</E> if intermediate subgroups can be added to
the series without destroying the properties of the series.
<P/>
<#Include Label="[1]{grp}">
<#Include Label="ChiefSeries">
<#Include Label="ChiefSeriesThrough">
<#Include Label="ChiefSeriesUnderAction">
<#Include Label="SubnormalSeries">
<#Include Label="CompositionSeries">
<#Include Label="DisplayCompositionSeries">
<#Include Label="DerivedSeriesOfGroup">
<#Include Label="DerivedLength">
<#Include Label="ElementaryAbelianSeries">
<#Include Label="InvariantElementaryAbelianSeries">
<#Include Label="LowerCentralSeriesOfGroup">
<#Include Label="UpperCentralSeriesOfGroup">
<#Include Label="PCentralSeries">
<#Include Label="JenningsSeries">
<#Include Label="DimensionsLoewyFactors">
<#Include Label="AscendingChain">
<#Include Label="IntermediateGroup">
<#Include Label="IntermediateSubgroups">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Factor Groups">
<Heading>Factor Groups</Heading>

<#Include Label="NaturalHomomorphismByNormalSubgroup">
<#Include Label="FactorGroup">
<#Include Label="CommutatorFactorGroup">
<#Include Label="MaximalAbelianQuotient">
<#Include Label="HasAbelianFactorGroup">
<#Include Label="HasElementaryAbelianFactorGroup">
<#Include Label="CentralizerModulo">

<!-- %%  The code for factor groups is due to Alexander Hulpke and Heiko Theißen. -->

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Sets of Subgroups">
<Heading>Sets of Subgroups</Heading>

<#Include Label="ConjugacyClassSubgroups">
<#Include Label="IsConjugacyClassSubgroupsRep">
<#Include Label="ConjugacyClassesSubgroups">
<#Include Label="ConjugacyClassesMaximalSubgroups">
<#Include Label="AllSubgroups">
<#Include Label="MaximalSubgroupClassReps">
<#Include Label="MaximalSubgroups">
<#Include Label="NormalSubgroups">
<#Include Label="MaximalNormalSubgroups">
<#Include Label="MinimalNormalSubgroups">

<!-- %%  Bettina Eick designed and wrote the code for maximal subgroups of a solvable -->
<!-- %%  group. The code for normal subgroups <Cite Key="Hulpke98"/> and for subgroups of a -->
<!-- %%  solvable group is due to Alexander Hulpke. -->

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Subgroup Lattice">
<Heading>Subgroup Lattice</Heading>

<#Include Label="LatticeSubgroups">
<#Include Label="ClassElementLattice">
<#Include Label="DotFileLatticeSubgroups">
<#Include Label="MaximalSubgroupsLattice">
<#Include Label="MinimalSupergroupsLattice">
<#Include Label="RepresentativesPerfectSubgroups">
<#Include Label="ConjugacyClassesPerfectSubgroups">
<#Include Label="Zuppos">
<#Include Label="InfoLattice">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Specific Methods for Subgroup Lattice Computations">
<Heading>Specific Methods for Subgroup Lattice Computations</Heading>

<#Include Label="LatticeByCyclicExtension">
<#Include Label="InvariantSubgroupsElementaryAbelianGroup">
<#Include Label="SubgroupsSolvableGroup">
<#Include Label="SizeConsiderFunction">
<#Include Label="ExactSizeConsiderFunction">
<#Include Label="InfoPcSubgroup">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Special Generating Sets">
<Heading>Special Generating Sets</Heading>

<#Include Label="GeneratorsSmallest">
<#Include Label="LargestElementGroup">
<#Include Label="MinimalGeneratingSet">
<#Include Label="SmallGeneratingSet">
<#Include Label="IndependentGeneratorsOfAbelianGroup">
<#Include Label="IndependentGeneratorExponents">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="1-Cohomology">
<Heading>1-Cohomology</Heading>

<Index>one cohomology</Index>
<Index>cohomology</Index>
<Index>cocycles</Index>

Let <M>G</M> be a finite group and  <M>M</M> an elementary abelian normal <M>p</M>-subgroup
of <M>G</M>.  Then the group  of 1-cocycles <M>Z^1(  G/M, M  )</M> is
defined as
<Display Mode="M">
Z^1(G/M, M) = \{ \gamma: G/M \rightarrow M \mid \forall g_1, g_2 \in G :
                                 \gamma(g_1 M \cdot g_2 M ) 
                                   = \gamma(g_1 M)^{{g_2}} \cdot \gamma(g_2 M) \}
</Display>
and is a <M>GF(p)</M>-vector space.
<P/>
The group of 1-coboundaries <M>B^1( G/M, M )</M> is defined as
<Display Mode="M">
B^1(G/M, M) = \{ \gamma : G/M \rightarrow M \mid \exists m \in M
                                 \forall g \in G : 
                                  \gamma(gM) = (m^{{-1}})^g \cdot m \}
</Display>
It also is a <M>GF(p)</M>-vector space.
<P/>
Let <M>\alpha</M> be the isomorphism of <M>M</M> into a row vector space
<M>{\cal W}</M> and <M>(g_1, \ldots, g_l)</M> representatives for a
generating set of <M>G/M</M>.
Then there exists a monomorphism <M>\beta</M> of <M>Z^1( G/M, M )</M> in the
<M>l</M>-fold direct sum of <M>{\cal W}</M>,
such that
<M>\beta( \gamma ) = ( \alpha( \gamma(g_1 M) ),\ldots, \alpha( \gamma(g_l M) ) )</M>
for every <M>\gamma \in Z^1( G/M, M )</M>.

<#Include Label="OneCocycles">
<#Include Label="OneCoboundaries">
<#Include Label="OCOneCocycles">
<#Include Label="ComplementClassesRepresentativesEA">
<#Include Label="InfoCoh">

<!-- %%  The computation of the 1-Cohomology follows <Cite Key="CNW90"/> and was implemented -->
<!-- %%  by Frank Celler and Alexander Hulpke. -->
<!-- % </Section>
<Section Label="AutomorphisGroups and Testing Isomorphism">
<Heading>AutomorphisGroups and Testing Isomorphism</Heading> -->
<!-- %T Is dealt with in section on group homomorphisms! -->

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Schur Covers and Multipliers">
<Heading>Schur Covers and Multipliers</Heading>

Additional attributes and properties of a group can be derived
from computing its Schur cover.
For example, if <M>G</M> is a finitely presented group, the
derived subgroup of a Schur cover of <M>G</M> is invariant and isomorphic to
the <Ref Func="NonabelianExteriorSquare"/> value of <M>G</M>,
see <Cite Key="BJR87"/>. 

<Index Subkey="see EpimorphismSchurCover">Darstellungsgruppe</Index>
<#Include Label="EpimorphismSchurCover">
<#Include Label="SchurCover">
<#Include Label="AbelianInvariantsMultiplier">
<#Include Label="Epicentre">
<#Include Label="NonabelianExteriorSquare">
<#Include Label="EpimorphismNonabelianExteriorSquare">
<#Include Label="IsCentralFactor">
<#Include Label="{SchurCoversOfSymmetricGroup}">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Tests for the Availability of Methods">
<Heading>Tests for the Availability of Methods</Heading>

<#Include Label="[3]{grp}">
<#Include Label="CanEasilyTestMembership">
<#Include Label="CanEasilyComputeWithIndependentGensAbelianGroup">
<#Include Label="CanComputeSize">
<#Include Label="CanComputeSizeAnySubgroup">
<#Include Label="CanComputeIndex">
<#Include Label="CanComputeIsSubset">
<#Include Label="KnowsHowToDecompose">

</Section>
</Chapter>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %E -->

