############################################################################# ## ## 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 declarations for Morpheus ##
DeclareInfoClass("InfoMorph");
############################################################################# ## #A AutomorphismGroup(<obj>) ## ## <#GAPDoc Label="AutomorphismGroup"> ## <ManSection> ## <Attr Name="AutomorphismGroup" Arg='G'/> ## ## <Description> ## returns the full automorphism group of the group <A>G</A>. ## The automorphisms act on <A>G</A> by the caret operator <C>^</C>. ## The automorphism group often stores a <Ref Attr="NiceMonomorphism"/> ## value whose image is a permutation group, ## obtained by the action on a subset of <A>G</A>. ## <P/> ## Note that current methods for the calculation of the automorphism group ## of a group <M>G</M> require <M>G</M> to be a permutation group or ## a pc group to be efficient. For groups in other representations the ## calculation is likely very slow. ## <P/> ## Also, the <Package>AutPGrp</Package> package installs enhanced methods ## for <Ref Attr="AutomorphismGroup"/> for finite <M>p</M>-groups, and ## the <Package>FGA</Package> package - for finitely generated subgroups ## of free groups. ## <P/> ## Methods may be installed for <Ref Attr="AutomorphismGroup"/> ## for other domains, such as e.g. for linear codes in the ## <Package>GUAVA</Package> package, loops in the <Package>loops</Package> ## package and nilpotent Lie algebras in the <Package>Sophus</Package> ## package (see package manuals for their descriptions). ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareAttribute("AutomorphismGroup",IsDomain);
############################################################################# ## #P IsGroupOfAutomorphisms(<G>) ## ## <#GAPDoc Label="IsGroupOfAutomorphisms"> ## <ManSection> ## <Prop Name="IsGroupOfAutomorphisms" Arg='G'/> ## ## <Description> ## indicates whether <A>G</A> consists of automorphisms of another group ## <M>H</M>. ## The group <M>H</M> can be obtained from <A>G</A> via the attribute ## <Ref Attr="AutomorphismDomain"/>. ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareProperty( "IsGroupOfAutomorphisms", IsGroup );
InstallTrueMethod( IsGroup, IsGroupOfAutomorphisms );
############################################################################# ## #P IsGroupOfAutomorphismsFiniteGroup(<G>) ## ## <ManSection> ## <Prop Name="IsGroupOfAutomorphismsFiniteGroup" Arg='G'/> ## ## <Description> ## indicates whether <A>G</A> consists of automorphisms of another finite group <A>H</A>. ## The group <A>H</A> can be obtained from <A>G</A> via the attribute ## <C>AutomorphismDomain</C>. ## </Description> ## </ManSection> ##
DeclareProperty( "IsGroupOfAutomorphismsFiniteGroup", IsGroup );
InstallTrueMethod( IsGroup, IsGroupOfAutomorphismsFiniteGroup );
############################################################################# ## #P IsAutomorphismGroup(<G>) ## ## <#GAPDoc Label="IsAutomorphismGroup"> ## <ManSection> ## <Prop Name="IsAutomorphismGroup" Arg='G'/> ## ## <Description> ## indicates whether <A>G</A>, which must be ## <Ref Prop="IsGroupOfAutomorphisms"/>, ## is the full automorphism group of another ## group <M>H</M>, this group is given as <Ref Attr="AutomorphismDomain"/> ## value of <A>G</A>. ## <Example><![CDATA[ ## gap> g:=Group((1,2,3,4),(1,3)); ## Group([ (1,2,3,4), (1,3) ]) ## gap> au:=AutomorphismGroup(g); ## <group of size 8 with 3 generators> ## gap> GeneratorsOfGroup(au); ## [ Pcgs([ (2,4), (1,2,3,4), (1,3)(2,4) ]) -> ## [ (1,2)(3,4), (1,2,3,4), (1,3)(2,4) ], ## Pcgs([ (2,4), (1,2,3,4), (1,3)(2,4) ]) -> ## [ (1,3), (1,2,3,4), (1,3)(2,4) ], ## Pcgs([ (2,4), (1,2,3,4), (1,3)(2,4) ]) -> ## [ (2,4), (1,4,3,2), (1,3)(2,4) ] ] ## gap> NiceObject(au); ## Group([ (1,2,4,6), (1,4)(2,6), (2,6)(3,5) ]) ## ]]></Example> ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareProperty( "IsAutomorphismGroup", IsGroupOfAutomorphisms );
InstallTrueMethod( IsGroupOfAutomorphisms,IsAutomorphismGroup );
############################################################################# ## #A InnerAutomorphismsAutomorphismGroup(<autgroup>) ## ## <#GAPDoc Label="InnerAutomorphismsAutomorphismGroup"> ## <ManSection> ## <Attr Name="InnerAutomorphismsAutomorphismGroup" Arg='autgroup'/> ## ## <Description> ## For an automorphism group <A>autgroup</A> of a group ## this attribute stores the subgroup of inner automorphisms ## (automorphisms induced by conjugation) of the original group. ## <Example><![CDATA[ ## gap> InnerAutomorphismsAutomorphismGroup(au); ## <group with 2 generators> ## ]]></Example> ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareAttribute("InnerAutomorphismsAutomorphismGroup",IsGroup);
############################################################################# ## #A InnerAutomorphismGroup(<G>) ## ## <#GAPDoc Label="InnerAutomorphismGroup"> ## <ManSection> ## <Attr Name="InnerAutomorphismGroup" Arg='G'/> ## ## <Description> ## For a group <A>G</A> this attribute stores the group of inner ## automorphisms (automorphisms induced by conjugation) of the original group. ## <Example><![CDATA[ ## gap> InnerAutomorphismGroup(SymmetricGroup(5)); ## <group with 2 generators> ## ]]></Example> ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareAttribute("InnerAutomorphismGroup", IsGroup);
############################################################################# ## #F AssignNiceMonomorphismAutomorphismGroup(<autgrp>,<group>) local ## ## <#GAPDoc Label="AssignNiceMonomorphismAutomorphismGroup"> ## <ManSection> ## <Func Name="AssignNiceMonomorphismAutomorphismGroup" Arg='autgrp, group'/> ## ## <Description> ## computes a nice monomorphism for <A>autgroup</A> acting on <A>group</A> ## and stores it as <Ref Attr="NiceMonomorphism"/> value of <A>autgrp</A>. ## <P/> ## If the centre of <Ref Attr="AutomorphismDomain"/> of <A>autgrp</A> is ## trivial, the operation will first try to represent all automorphisms by ## conjugation (in <A>group</A> or in a natural parent of <A>group</A>). ## <P/> ## If this fails the operation tries to find a small subset of <A>group</A> ## on which the action will be faithful. ## <P/> ## The operation sets the attribute <Ref Attr="NiceMonomorphism"/> ## and does not return a value. ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareGlobalFunction("AssignNiceMonomorphismAutomorphismGroup");
############################################################################# ## #F NiceMonomorphismAutomGroup(<autgrp>,<elms>,<elmsgens>) ## ## <#GAPDoc Label="NiceMonomorphismAutomGroup"> ## <ManSection> ## <Func Name="NiceMonomorphismAutomGroup" Arg='autgrp, elms, elmsgens'/> ## ## <Description> ## This function creates a monomorphism for an automorphism group ## <A>autgrp</A> of a group by permuting the group elements in the list ## <A>elms</A>. ## This list must be chosen to yield a faithful representation. ## <A>elmsgens</A> is a list of generators which are a subset of ## <A>elms</A>. ## (They can differ from the group's original generators.) ## It does not yet assign it as <Ref Attr="NiceMonomorphism"/> value. ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareGlobalFunction("NiceMonomorphismAutomGroup");
############################################################################# ## #F MorFroWords(<gens>) . . . . . . create some pseudo-random words in <gens> ## ## <ManSection> ## <Func Name="MorFroWords" Arg='gens'/> ## ## <Description> ## This function takes a generator list <A>gens</A> and creates a list of ## pseudo-random words in them. These words can be used for example to test ## quickly whether generator mappings extend to a homomorphism. The words ## are taken from the MeatAxe FRO routine. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("MorFroWords");
############################################################################# ## #F MorRatClasses(<G>) . . . . . . . . . . . local ## ## <ManSection> ## <Func Name="MorRatClasses" Arg='G'/> ## ## <Description> ## yields a list of rational classes as a collection of ordinary classes. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("MorRatClasses");
############################################################################# ## #F MorMaxFusClasses(<l>) . . maximal possible morphism fusion of classlists ## ## <ManSection> ## <Func Name="MorMaxFusClasses" Arg='l'/> ## ## <Description> ## computes a list of classes (as unions of rational classes) which will be ## respected by any automorphism. This is used to determine potential ## automorphism images of elements. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("MorMaxFusClasses");
############################################################################# ## #F MorClassLoop(<range>,<classes>,<params>,<action>) class loop ## ## <#GAPDoc Label="MorClassLoop"> ## <ManSection> ## <Func Name="MorClassLoop" Arg='range, classes, params, action'/> ## ## <Description> ## This function loops over element tuples taken from <A>classes</A> and ## checks these for properties such as generating a given group, ## or fulfilling relations. ## This can be used to find small generating sets or all types of Morphisms. ## The element tuples are used only up to inner automorphisms as ## all images can be obtained easily from them by conjugation while ## running through all of them usually would take too long. ## <P/> ## <A>range</A> is a group from which these elements are taken. ## The classes are given in a list <A>classes</A> which is a list of records ## with the following components. ## <List> ## <Mark><C>classes</C></Mark> ## <Item> ## list of conjugacy classes ## </Item> ## <Mark><C>representative</C></Mark> ## <Item> ## One element in the union of these classes ## </Item> ## <Mark><C>size</C></Mark> ## <Item> ## The sum of the sizes of these classes ## </Item> ## </List> ## <P/> ## <A>params</A> is a record containing the following optional components. ## <List> ## <Mark><C>gens</C></Mark> ## <Item> ## generators that are to be mapped (for testing morphisms). The length ## of this list determines the length of element tuples considered. ## </Item> ## <Mark><C>from</C></Mark> ## <Item> ## a preimage group (that contains <C>gens</C>) ## </Item> ## <Mark><C>to</C></Mark> ## <Item> ## image group (which might be smaller than <C>range</C>) ## </Item> ## <Mark><C>free</C></Mark> ## <Item> ## free generators, a list of the same length than the ## generators <C>gens</C>. ## </Item> ## <Mark><C>rels</C></Mark> ## <Item> ## some relations that hold among the generators <C>gens</C>. ## They are given as a list <C>[ word, order ]</C> ## where <C>word</C> is a word in the free generators <C>free</C>. ## </Item> ## <Mark><C>dom</C></Mark> ## <Item> ## a set of elements on which automorphisms act faithfully (used to do ## element tests in partial automorphism groups). ## </Item> ## <Mark><C>aut</C></Mark> ## <Item> ## Subgroup of already known automorphisms. ## </Item> ## <Mark><C>condition</C></Mark> ## <Item> ## A function that will be applied to the homomorphism and must return ## <K>true</K> for the homomorphism to be accepted. ## </Item> ## </List> ## <P/> ## <A>action</A> is a number whose bit-representation indicates ## the requirements which are enforced on the element tuples found, ## as follows. ## <List> ## <Mark>1</Mark> ## <Item> ## homomorphism ## </Item> ## <Mark>2</Mark> ## <Item> ## injective ## </Item> ## <Mark>4</Mark> ## <Item> ## surjective ## </Item> ## <Mark>8</Mark> ## <Item> ## find all (otherwise stops after the first find) ## </Item> ## </List> ## If the search is for homomorphisms, the function returns homomorphisms ## obtained by mapping the given generators <C>gens</C> ## instead of element tuples. ## <P/> ## The <Q>Morpheus</Q> algorithm used to find homomorphisms is described in ## <Cite Key="Hulpke96" Where="Section V.5"/>. ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareGlobalFunction("MorClassLoop");
############################################################################# ## #F MorFindGeneratingSystem(<G>,<cl>) . . local ## ## <ManSection> ## <Func Name="MorFindGeneratingSystem" Arg='G,cl'/> ## ## <Description> ## tries to find generating system with as few as possible generators ## which will be taken preferraby from the first classes in <A>cl</A> ## </Description> ## </ManSection> ##
DeclareGlobalFunction("MorFindGeneratingSystem");
############################################################################# ## #F Morphium(<G>,<H>,<DoAuto>) . . . . . . . . local ## ## <ManSection> ## <Func Name="Morphium" Arg='G,H,DoAuto'/> ## ## <Description> ## This function is a frontend to <C>MorClassLoop</C> and is used to find ## isomorphisms between <A>G</A> and <A>H</A> or the automorphism group of <A>G</A> (in which ## case <A>G</A> must equal <A>H</A>). The boolean flag <A>DoAuto</A> indicates if all ## automorphisms should be found. ## The function requires, that both groups are not cyclic! ## </Description> ## </ManSection> ##
DeclareGlobalFunction("Morphium");
############################################################################# ## #F AutomorphismGroupAbelianGroup(<G>) ## ## <ManSection> ## <Func Name="AutomorphismGroupAbelianGroup" Arg='G'/> ## ## <Description> ## computes the automorphism group of an abelian group <A>G</A>, using the theorem ## of Shoda. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("AutomorphismGroupAbelianGroup");
############################################################################# ## #F IsomorphismAbelianGroups(<G>,<H>) ## ## <ManSection> ## <Func Name="IsomorphismAbelianGroups" Arg='G,H'/> ## ## <Description> ## computes an isomorphism between the abelian groups <A>G</A> and <A>H</A> ## if they are isomorphic and returns <K>fail</K> otherwise. ## </Description> ## </ManSection> ##
DeclareGlobalFunction("IsomorphismAbelianGroups");
############################################################################# ## #F IsomorphismGroups(<G>,<H>) ## ## <#GAPDoc Label="IsomorphismGroups"> ## <ManSection> ## <Func Name="IsomorphismGroups" Arg='G,H'/> ## ## <Description> ## computes an isomorphism between the groups <A>G</A> and <A>H</A> ## if they are isomorphic and returns <K>fail</K> otherwise. ## <P/> ## With the existing methods the amount of time needed grows with ## the size of a generating system of <A>G</A>. (Thus in particular for ## <M>p</M>-groups calculations can be slow.) If you do only need to know ## whether groups are isomorphic, you might want to consider ## <Ref BookName="smallgrp" Func="IdGroup"/> or the random isomorphism test ## (see <Ref Func="RandomIsomorphismTest"/>). ## <P/> ## <Index Subkey="find all">isomorphisms</Index> ## <Example><![CDATA[ ## gap> g:=Group((1,2,3,4),(1,3));; ## gap> h:=Group((1,4,6,7)(2,3,5,8), (1,5)(2,6)(3,4)(7,8));; ## gap> IsomorphismGroups(g,h); ## [ (1,2,3,4), (1,3) ] -> [ (1,4,6,7)(2,3,5,8), (1,2)(3,7)(4,8)(5,6) ] ## gap> IsomorphismGroups(g,Group((1,2,3,4),(1,2))); ## fail ## ]]></Example> ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareGlobalFunction("IsomorphismGroups");
DeclareGlobalFunction("IsomorphismSimpleGroups");
############################################################################# ## #O GQuotients(<F>,<G>) . . . . . epimorphisms from F onto G up to conjugacy ## ## <#GAPDoc Label="GQuotients"> ## <ManSection> ## <Oper Name="GQuotients" Arg='F, G'/> ## ## <Description> ## computes all epimorphisms from <A>F</A> onto <A>G</A> up to automorphisms ## of <A>G</A>. ## This classifies all factor groups of <A>F</A> which are isomorphic to ## <A>G</A>. ## <P/> ## With the existing methods the amount of time needed grows with ## the size of a generating system of <A>G</A>. (Thus in particular for ## <M>p</M>-groups calculations can be slow.) ## <P/> ## If the <C>findall</C> option is set to <K>false</K>, ## the algorithm will stop once one homomorphism has been found ## (this can be faster and might be sufficient if not all homomorphisms ## are needed). ## <P/> ## <Index Subkey="find all">epimorphisms</Index> ## <Index Subkey="find all">projections</Index> ## <Example><![CDATA[ ## gap> g:=Group((1,2,3,4),(1,2)); ## Group([ (1,2,3,4), (1,2) ]) ## gap> h:=Group((1,2,3),(1,2)); ## Group([ (1,2,3), (1,2) ]) ## gap> quo:=GQuotients(g,h); ## [ [ (2,4), (1,4,3) ] -> [ (2,3), (1,2,3) ] ] ## ]]></Example> ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareOperation("GQuotients",[IsGroup,IsGroup]);
############################################################################# ## #O IsomorphicSubgroups(<G>,<H>) monomorphisms from H onto G up to conjugacy ## ## <#GAPDoc Label="IsomorphicSubgroups"> ## <ManSection> ## <Oper Name="IsomorphicSubgroups" Arg='G,H'/> ## ## <Description> ## computes all monomorphisms from <A>H</A> into <A>G</A> up to ## <A>G</A>-conjugacy of the image groups. ## This classifies all <A>G</A>-classes of subgroups of <A>G</A> which ## are isomorphic to <A>H</A>. ## <P/> ## With the existing methods, the amount of time needed grows with ## the size of a generating system of <A>G</A>. (Thus in particular for ## <M>p</M>-groups calculations can be slow.) A main use of ## <Ref Oper="IsomorphicSubgroups"/> therefore is to find nonsolvable ## subgroups (which often can be generated by 2 elements). ## <P/> ## (To find <M>p</M>-subgroups it is often faster to compute the subgroup ## lattice of the Sylow subgroup and to use <Ref BookName="smallgrp" Func="IdGroup"/> ## to identify the type of the subgroups.) ## <P/> ## If the <C>findall</C> option is set to <K>false</K>, ## the algorithm will stop once one homomorphism has been found ## (this can be faster and might be sufficient if not all homomorphisms are ## needed). ## <P/> ## <Index Subkey="find all">embeddings</Index> ## <Index Subkey="find all">monomorphisms</Index> ## <Example><![CDATA[ ## gap> g:=Group((1,2,3,4),(1,2)); ## Group([ (1,2,3,4), (1,2) ]) ## gap> h:=Group((3,4),(1,2));; ## gap> emb:=IsomorphicSubgroups(g,h); ## [ [ (3,4), (1,2) ] -> [ (1,2), (3,4) ], ## [ (3,4), (1,2) ] -> [ (1,3)(2,4), (1,2)(3,4) ] ] ## gap> g1:=PSO(-1,8,2);; ## gap> Length(IsomorphicSubgroups(g1,PSL(2,7))); ## 3 ## gap> Length(IsomorphicSubgroups(g1,PSL(2,7):findall:=false)); ## 1 ## ]]></Example> ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareOperation("IsomorphicSubgroups",[IsGroup,IsGroup]);
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.