############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. ## This file's authors include Alexander Hulpke. ## ## Copyright of GAP belongs to its developers, whose names are too numerous ## to list here. Please refer to the COPYRIGHT file for details. ## ## SPDX-License-Identifier: GPL-2.0-or-later ## ## This file contains the declarations of operations for factor group maps ##
## ## To implement new factor group methods, one does not need to deal with ## most of the following operations (which are only used to cache known ## homomorphisms and extend them to subdirect factors). Instead only methods ## for the following three operations might need to be supplied: ## If a suitable homomorphism cannot be found from the cached homomorphisms ## pool, `NaturalHomomorphismByNormalSubgroupOp(<G>,<N>)' is called to ## construct one. ## The default method for `NaturalHomomorphismByNormalSubgroupOp' then uses ## two other operations: `DoCheapActionImages' computes actions that come ## naturally from a groups representation (for example permutation action ## on orbits and blocks) and can be computed quickly. This is intended ## as a first test to avoid hard work for homomorphisms that are easy to ## get. ## If this fails, `FindActionKernel' is called which will try to find some ## action which will give a suitable homomorphism. (This can be very time ## consuming.) ## The existing methods seem to work reasonably well for permutation groups ## and pc groups, for other kinds of groups it might be necessary to ## implement completely new methods. ##
############################################################################# ## #O DoCheapActionImages(<G>) ## ## <ManSection> ## <Oper Name="DoCheapActionImages" Arg='G'/> ## ## <Description> ## computes natural actions for <A>G</A> and stores the resulting ## <C>NaturalHomomorphismByNormalSubgroup</C>. The type of the natural actions ## varies with the representation of <A>G</A>, for permutation groups it are for ## example constituent and block homomorphisms. ## A method for <C>DoCheapActionImages</C> must register all found actions with ## <C>AddNaturalHomomorphismsPool</C> so they become available. ## </Description> ## </ManSection> ##
DeclareOperation("DoCheapActionImages",[IsGroup]);
DeclareSynonym("DoCheapOperationImages",DoCheapActionImages);
############################################################################# ## #O FindActionKernel( <G>, <N> ) . . . . . . . . . . . . . . . . local ## ## <ManSection> ## <Oper Name="FindActionKernel" Arg='G, N'/> ## ## <Description> ## This operation tries to find a suitable action for the group <A>G</A> such ## that its kernel is <A>N</A>. This is used to construct faithful permutation ## representations for the factor group. ## </Description> ## </ManSection> ##
DeclareOperation( "FindActionKernel",[IsGroup,IsGroup]);
DeclareSynonym( "FindOperationKernel",FindActionKernel);
############################################################################# ## #A NaturalHomomorphismsPool(<G>) ## ## <ManSection> ## <Attr Name="NaturalHomomorphismsPool" Arg='G'/> ## ## <Description> ## The <C>NaturalHomomorphismsPool</C> is a record which contains the following ## components: ## <C>group</C> is the corresponding group. ## <C>ker</C> is a list of normal subgroups, which defines the arrangements. ## It is sorted. ## <C>ops</C> is a list which gives the best know actions for each normal ## subgroup. Its entries are either Homomorphisms from G or ## generator lists (G.generators images) or lists of integers. In the ## latter case the factor is subdirect product of the factors with ## the given numbers. ## <C>cost</C> gives the difficulty for each actions (degree of permgroup). It ## is used to check whether a new actions is better. ## <C>lock</C> is a bitlist, which indicates whether certain actions are ## locked. If this happens, a better new actions is not entered. ## This allows a computation to access the pool several times and to ## be guaranteed to be returned the same object. Usually a routine ## initially locks and finally unlocks. ## <!-- #AH probably one even would like to have a lock counter ? --> ## <C>GopDone</C> indicates whether all <C>obvious</C> actions have been tried ## already ## <C>intersects</C> is a list of all intersections that have already been ## formed. ## <C>blocksdone</C> indicates if the actions already has been improved ## using blocks ## <C>in_code</C> can be set by the code to avoid addition of new actions ## (and thus resorting) ## </Description> ## </ManSection> ##
DeclareAttribute("NaturalHomomorphismsPool",IsGroup, "mutable");
############################################################################# ## #O FactorCosetAction( <G>, <U>[, <N>] ) action on the right cosets Ug ## ## <#GAPDoc Label="FactorCosetAction"> ## <ManSection> ## <Oper Name="FactorCosetAction" Arg='G, U[, N]' ## Label="for a group and subgroup"/> ## <Oper Name="FactorCosetAction" Arg='G, L' ## Label="for a group and list of subgroups"/> ## ## <Description> ## This command computes the action of the group <A>G</A> on the ## right cosets of the subgroup <A>U</A>. ## If a normal subgroup <A>N</A> of <A>G</A> is given, ## it is stored as kernel of this action. ## When calling <C>FactorCosetAction</C> with a list of subgroups as the ## second argument, an action with image isomorphic to the subdirect ## product of the coset actions of all subgroups is computed. (However a ## degree reduction may take place if some of the actions are redundant, i.e. ## there is no guarantee that every subgroup in the list is represented by an ## orbit.) ## <Example><![CDATA[ ## gap> g:=Group((1,2,3,4,5),(1,2));;u:=SylowSubgroup(g,2);;Index(g,u); ## 15 ## gap> FactorCosetAction(g,u); ## [ (1,2,3,4,5), (1,2) ] -> [ (1,4,7,10,13)(2,5,8,11,14)(3,6,9,12,15),\ ## (1,4)(2,6)(3,5)(7,8)(10,12)(13,14) ] ## gap> StructureDescription(Range(last)); ## "S5" ## gap> FactorCosetAction(g,[u,SylowSubgroup(g,3)]);; ## gap> Size(Image(last)); ## 120 ## ]]></Example> ## The correspondence of points with cosets will, for performance reasons, ## depend on the method used. It is not guaranteed that it will be the same ## as used by <C>RightTransversal</C> or <C>RightCosets</C>. ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareOperation( "FactorCosetAction", [IsGroup,IsGroup] );
DeclareGlobalFunction( "DoFactorCosetAction" );
############################################################################# ## #F ImproveActionDegreeByBlocks( <G>, <N> , <hom> [,forceblocks] ) #F ImproveActionDegreeByBlocks( <G>, <N> , <U> [,forceblocks] ) ## ## <ManSection> ## <Func Name="ImproveActionDegreeByBlocks" Arg='G, N , hom [,forceblocks]'/> ## <Func Name="ImproveActionDegreeByBlocks" Arg='G, N , U [,forceblocks]'/> ## ## <Description> ## In the first usage, <A>N</A> is a normal subgroup of <A>G</A> and <A>hom</A> a ## homomorphism from <A>G</A> to a permutation group with kernel <A>N</A>. In the second ## usage, <A>hom</A> is taken to be the action of <A>G</A> on the cosets of <A>U</A> by right ## multiplication. ## The function tries to find another homomorphism with the same kernel but ## image group of smaller degree by looking for block systems of the image ## group. An improved result is stored in the <C>NaturalHomomorphismsPool</C>, the ## function returns the degree of this image (or the degree of the original ## image). ## If the image degree is larger than 500, only one block system is tested by ## standard. A test of all block systems is enforced by the optional boolean ## parameter <A>forceblocks</A> ## </Description> ## </ManSection> ##
DeclareGlobalFunction( "ImproveActionDegreeByBlocks" );
DeclareSynonym( "ImproveOperationDegreeByBlocks",
ImproveActionDegreeByBlocks );
############################################################################# ## #F SmallerDegreePermutationRepresentation( <G> ) ## ## <#GAPDoc Label="SmallerDegreePermutationRepresentation"> ## <ManSection> ## <Func Name="SmallerDegreePermutationRepresentation" Arg='G'/> ## ## <Description> ## Let <A>G</A> be a permutation group. ## <Ref Func="SmallerDegreePermutationRepresentation"/> tries to find a ## faithful permutation representation of smaller degree. ## The result is a group homomorphism onto a permutation group, ## in the worst case this is the identity mapping on <A>G</A>. ## <P/> ## If the <C>cheap</C> option is given, the function only tries to reduce ## to orbits or actions on blocks, otherwise also actions on cosets of ## random subgroups are tried. ## <P/> ## Note that the result is not guaranteed to be a faithful permutation ## representation of smallest degree, ## or of smallest degree among the transitive permutation representations ## of <A>G</A>. ## Using &GAP; interactively, one might be able to choose subgroups ## of small index for which the cores intersect trivially; ## in this case, the actions on the cosets of these subgroups give rise to ## an intransitive permutation representation ## the degree of which may be smaller than the original degree. ## <P/> ## The methods used might involve the use of random elements and the ## permutation representation (or even the degree of the representation) is ## not guaranteed to be the same for different calls of ## <Ref Func="SmallerDegreePermutationRepresentation"/>. ## <P/> ## If the option cheap is given less work is spent on trying to get a small ## degree representation, if the value of this option is set to the string ## "skip" the identity mapping is returned. (This is useful if a function ## called internally might try a degree reduction.) ## <P/> ## <Example><![CDATA[ ## gap> iso:=RegularActionHomomorphism(SymmetricGroup(4));; ## gap> image:= Image( iso );; NrMovedPoints( image ); ## 24 ## gap> small:= SmallerDegreePermutationRepresentation( image );; ## gap> Image( small ); ## Group([ (2,5,4,3), (1,4)(2,6)(3,5) ]) ## gap> g:=Image(IsomorphismPermGroup(GL(4,5)));; ## gap> sm:=SmallerDegreePermutationRepresentation(g:cheap);; ## gap> NrMovedPoints(Range(sm)); ## 624 ## ]]></Example> ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareGlobalFunction( "SmallerDegreePermutationRepresentation" );
############################################################################# ## #F AddNaturalHomomorphismsPool(G,N,op[,cost[,blocksdone]]) ## ## <ManSection> ## <Func Name="AddNaturalHomomorphismsPool" Arg='G,N,op[,cost[,blocksdone]]'/> ## ## <Description> ## This function stores a computed action of <A>G</A> with kernel <A>N</A> in the ## <C>NaturalHomomorphismsPool</C> of <A>G</A>, unless a <Q>better</Q> action is already ## known. <A>op</A> usually is a homomorphism of <A>G</A> with kernel <A>N</A>. It may also ## be a subgroup of <A>G</A>, in which case the action of <A>G</A> on its cosets is ## taken. ## If the optional parameter <A>cost</A> is not given, <A>cost</A> is taken to be the ## degree of the image representation (or 1 if the image is a pc group). This ## <A>cost</A> is stored with the action to determine later whether another ## action is <Q>better</Q>. ## The optional boolean parameter <A>blocksdone</A> indicates if set to true, that ## all block systems of the image of <A>op</A> have already been computed and the ## resulting (lower degree, but not necessarily faithful for <M>G/N</M>) actions ## have been already considered. (Otherwise such a test may be done later by ## <C>DoCheapActionImages</C>.) ## The function internally re-sorts the list of normal subgroups to permit ## binary search among them. If a new action is returns the re-sorting ## permutation applied there. If returns <K>false</K> if a <Q>better</Q> action was ## already known, it returns <Q>fail</Q> if this factor is locked. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("AddNaturalHomomorphismsPool");
############################################################################# ## #F LockNaturalHomomorphismsPool(<G>,<N>) . . store flag to prohibit changes ## ## <ManSection> ## <Func Name="LockNaturalHomomorphismsPool" Arg='G,N'/> ## ## <Description> ## Calling this function stores a flag in the <C>NaturalHomomorphismsPool</C> of ## <A>G</A> to prohibit it to store new (even better) faithful actions for <M>G/N</M>. ## This can be used in algorithms to ensure that ## <C>NaturalHomomorphismByNormalSubgroup(<A>G</A>,<A>N</A>)</C> will always return the same ## mapping, even if in the meantime other homomorphisms are computed anew, ## which –as a side effect– obtained a better action for <M>G/N</M> which &GAP; ## normally would store. ## The locking can be reverted by <C>UnlockNaturalHomomorphismsPool(<A>G</A>,<A>N</A>)</C>. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("LockNaturalHomomorphismsPool");
############################################################################# ## #F UnlockNaturalHomomorphismsPool(<G>,<N>) . clear flag to allow changes of ## ## <ManSection> ## <Func Name="UnlockNaturalHomomorphismsPool" Arg='G,N'/> ## ## <Description> ## clears the flag set by <C>LockNaturalHomomorphismsPool(<A>G</A>,<A>N</A>)</C>. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("UnlockNaturalHomomorphismsPool");
############################################################################# ## #F KnownNaturalHomomorphismsPool(<G>,<N>) . . . check whether Hom is stored ## ## <ManSection> ## <Func Name="KnownNaturalHomomorphismsPool" Arg='G,N'/> ## ## <Description> ## This function tests whether an homomorphism for ## <C>NaturalHomomorphismByNormalSubgroup(<A>G</A>,<A>N</A>)</C> is already known (or ## computed trivially for <M>G=N</M> or <M>N=\langle1\rangle</M>). ## </Description> ## </ManSection> ##
DeclareGlobalFunction("KnownNaturalHomomorphismsPool");
############################################################################# ## #F GetNaturalHomomorphismsPool(<G>,<N>) . . . get action for G/N if known ## ## <ManSection> ## <Func Name="GetNaturalHomomorphismsPool" Arg='G,N'/> ## ## <Description> ## returns a <C>NaturalHomomorphismByNormalSubgroup(<A>G</A>,<A>N</A>)</C> if one is ## stored already in the <C>NaturalHomomorphismsPool</C> of <A>G</A>. ## (As the homomorphism may be stored by a <Q>recipe</Q> this command can ## still take some time when called the first time.) ## </Description> ## </ManSection> ##
DeclareGlobalFunction("GetNaturalHomomorphismsPool");
############################################################################# ## #F DegreeNaturalHomomorphismsPool(<G>,<N>) degree for action for G/N ## ## <ManSection> ## <Func Name="DegreeNaturalHomomorphismsPool" Arg='G,N'/> ## ## <Description> ## returns the cost (see <Ref Func="AddNaturalHomomorphismsPool"/>) of a stored action ## for <M>G/N</M> and fail if no such action is stored. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("DegreeNaturalHomomorphismsPool");
############################################################################# ## #F CloseNaturalHomomorphismsPool(<G>[,<N>]) . . calc intersections of known ## ## <ManSection> ## <Func Name="CloseNaturalHomomorphismsPool" Arg='G[,N]'/> ## ## <Description> ## This command tries to build actions for (new) factor groups from the ## already known actions in the <C>NaturalHomomorphismsPool(<A>G</A>)</C> by considering ## intransitive representations for subdirect products. Any new or better ## homomorphism obtained this way is stored (see ## <Ref Func="AddNaturalHomomorphismsPool"/>). ## If the optional parameter <A>N</A> is given, only actions which have <A>N</A> in their ## kernel are considered. ## The function keeps track of already considered subdirect products, thus ## there is no overhead in calling it several times. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("CloseNaturalHomomorphismsPool");
############################################################################# ## #F PullBackNaturalHomomorphismsPool(<hom>) . . transfer nathoms of image ## ## <ManSection> ## <Func Name="PullBackNaturalHomomorphismsPool" Arg='hom'/> ## ## <Description> ## If <A>hom</a> is a homomorphism, this command transfers the natural ## homomorphisms of the image of <A>hom</A> to the source of <A>hom</A>. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("PullBackNaturalHomomorphismsPool");
############################################################################# ## #F TryQuotientsFromFactorSubgroups(<hom>,<ker>,<bound>) ## ## <ManSection> ## <Func Name="TryQuotientsFromFactorSubgroups" Arg='hom,ker,bound'/> ## ## <Description> ## For a homomorphism <A>hom</A>, this command iterates through subgroups ## of the image, up to index <A>bound</A>, ## trying to find derived subgroups that expose more of the ## factor modulo <A>ker</A>. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("TryQuotientsFromFactorSubgroups");
############################################################################# ## #F EraseNaturalHomomorphismsPool(<G>) ## ## <ManSection> ## <Func Name="EraseNaturalHomomorphismsPool" Arg='G'/> ## ## <Description> ## This command erases all stored natural homomorphisms associated to the ## group <A>G</A>. It is used to recover memory. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("EraseNaturalHomomorphismsPool");
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 und die Messung sind noch experimentell.