[Top] [Up] [Previous] [Next] [Index]

5 Chains of subgroups

Sections

  1. Stabiliser chain subgroups
  2. Hom coset chain subgroups
  3. Direct product chain subgroups
  4. Trivial chain subgroups and sift function chain subgroups

The functions and operations described in this chapter have been added very recently and are still undergoing development. It is conceivable that names of variants of the functionality might change in future versions. If you plan to use these functions in your own code, please contact us.

Data structures for storing general group chains. Note that this does not replace StabChain. The group attribute ChainSubgroup(G) stores the next group down in the chain (i.e. the structure is recursive). ChainSubgroup(G) should have an attribute Transversal which describes a transversal of ChainSubgroup(G) in G, as in gptransv.[gd,gi].

The command ChainSubgroup will use the default method for computing chains -- currently this is random Schreier-Sims, unless the group is nilpotent. Warning: This algorithm is Monte-Carlo. ChainSubgroup is mutable, since it may start as the trivial subgroup, and then grow as elements are sifted in, and some stick. This allows us to do, if we want, things like:

SetChainSubgroup(G, ClosureGroup(ChainSubgroup(G), siftee) );

Whether this code is used instead of previous methods is determined by 4 variables which control the behaviour of the filter IsChainTypeGroup. See the file gap.../lib/grpchain.gd for details.

  • IsChainTypeGroup( G ) P

    returns true if the group G is ``chain type'', i.e. it is the kind of group where computations are best done with chains.

  • ChainSubgroup( G ) AM

    Computes the chain, if necessary, and returns the next subgroup in the chain. The current default is to use the random Schreier-Sims algorithm, unless the group is known to be nilpotent, in which case MakeHomChain is used.

  • Transversal( G ) A

    The transversal of the group G in the previous subgroup of the chain.

  • IsInChain( G ) O

    A group G is in a chain if it has either a ChainSubgroup or a Transversal.

  • GeneratingSetIsComplete( G ) P

    returns true if the generating set of the group G is complete. For example, for a stabiliser subgroup this is true if our strong generators have been verified.

  • SiftOneLevel( G, g ) O

    Sift g though one level of the chain.

  • Sift( G, g ) O

    Sift g through the entire chain.

  • SizeOfChainOfGroup( G ) F

    Uses the chain to compute the size of a group. Unlike Size(G), this does not set the Size attribute, which is useful if the chain is not known to be complete.

  • TransversalOfChainSubgroup( G ) F

    Returns the transversal of the next group in the chain, inside G.

  • ChainStatistics( G ) F

    Returns a record containing useful statistics about the chain of G.

  • HasChainHomomorphicImage( G ) F

    Does G have a chain subgroup derived from a homomorphic image? This will be false for stabiliser, trivial, and sift function chain subgroups. It will be true for homomorphism and direct product chain subgroups.

  • ChainHomomorphicImage( G ) F

    Returns the chain homomorphic image, or fail if no such image exists.

    5.1 Stabiliser chain subgroups

  • BaseOfGroup( G ) A

    If the group G has a chain consisting entirely of stabiliser subgroups, then this command returns the base as a list. This command does not compute a base, however.

  • ExtendedGroup( G, g ) O

    Add a new Schreier generator for G.

  • StrongGens( G ) F

    Returns a list of generating sets for each level of the chain.

  • ChainSubgroupByStabiliser( G, basePoint, Action ) F

    Form a chain subgroup by stabilising basePoint under the given action. The subgroup will start with no generators, and will have a transversal by Schreier tree.

  • OrbitGeneratorsOfGroup( G ) A

    Generators used to compute the orbit of G. Used by baseim.[gd,gi].

  • RandomSchreierSims( G ) F

    The random Schreier-Sims algorithm.

  • ChangedBaseGroup( G ) F

    We assume we have a chain for G, which gives a complete BSGS. We are given a new base newBase and wish to find strong generators for it. Options are the same as for random Schreier-Sims. Note that this function does not modify G, but returns a new group, isomorphic to G with the specified base.

    5.2 Hom coset chain subgroups

  • ChainSubgroupByHomomorphism( hom ) F

    Form a chain subgroup by the kernel of hom. The subgroup will start with no generators, and will have a hom transversal.

  • ChainSubgroupByProjectionFunction( G, kernelSubgp, imgSubgp, projFnc ) F

    When the homomorphism of a quotient group is a projection, then there is an internal semidirect product, for which TransversalElt() has a direct implementation as the projection. hom will be the projection, and elt -> ImageElm(hom, elt) is the map.

  • QuotientGroupByChainHomomorphicImage( quo[, quo2] ) F

    This function deals with quotient groups of quotient groups in a chain.

  • ChainSubgroupQuotient( G ) A

    The quotient by the chain subgroup.

  • MakeHomChain( G ) O

    Computes a chain of subgroups for the group G which are kernels of homomorphisms. Currently only implemented for nilpotent groups. We use the algorithm of E. Luks, Computing in Solvable Matrix Groups, FOCS/STOC.

    5.3 Direct product chain subgroups

  • ChainSubgroupByDirectProduct( proj, inj ) F

    Form a chain subgroup by internal direct product.

  • ChainSubgroupByPSubgroupOfAbelian( G, p ) F

    G is an abelian group, p a prime involved in G. Form a direct sum chain where the subgroup is the p-prime part of G.

    5.4 Trivial chain subgroups and sift function chain subgroups

  • ChainSubgroupByTrivialSubgroup( G ) F

    Form a chain subgroup by enumerating the group.

  • ChainSubgroupBySiftFunction( G, subgroup, siftFnc ) F

    Form a chain subgroup using a sift function.

    [Top] [Up] [Previous] [Next] [Index]

    GAP 4 manual
    May 2002