Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 4183461<!-- %W extend.xml GAP 4 package AtlasRep Thomas Breuer -->2<!-- %Y Copyright 2002, Lehrstuhl D f�r Mathematik, RWTH Aachen, Germany -->345<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->6<Chapter Label="chap:Private Extensions">7<Heading>Private Extensions of the <Package>AtlasRep</Package> Package8</Heading>910It may be interesting to use the functions of the &GAP; interface also11for representations or programs that are <E>not</E> part of the12&ATLAS; of Group Representations.13This chapter describes how to achieve this.1415<P/>1617The main idea is that users can notify directories containing the18<Q>private</Q> data files, which may consist of1920<Enum>21<Item>22new faithful representations and programs for groups23that are declared already in the <Q>official</Q>24&ATLAS; of Group Representations,25</Item>26<Item>27the declaration of groups that are not declared in the <Q>official</Q>28&ATLAS; of Group Representations,29and representations and programs for them, and30</Item>31<Item>32the definition of new kinds of representations and programs.33</Item>34</Enum>3536<P/>3738The first two issues are dealt with in39Section <Ref Sect="sect:Adding a Private Data Directory"/>40and Section <Ref Sect="sect:Effect of Private Extensions"/>.41The last is described in42Section <Ref Sect="sect:Data Types Used in the AGR"/>.4344<P/>4546Finally, an example of using private extensions is given in47Section <Ref Sect="sect:An Example of Extending AtlasRep"/>.4849<P/>5051Several of the sanity checks for the official part of the52<Package>AtlasRep</Package> package make sense also for private extensions,53see Section <Ref Sect="sect:AGR Sanity Checks"/>54for more information.555657<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->58<Section Label="sect:Adding a Private Data Directory">59<Heading>Adding a Private Data Directory</Heading>6061<#Include Label="[3]{access}">62<#Include Label="AtlasOfGroupRepresentationsNotifyPrivateDirectory">63<#Include Label="AtlasOfGroupRepresentationsForgetPrivateDirectory">6465</Section>666768<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->69<Section Label="sect:Effect of Private Extensions">70<Heading>The Effect of Private Extensions on the User Interface</Heading>7172First suppose that only new groups or new data for known groups are added.7374<P/>7576In this case, <Ref Func="DisplayAtlasInfo"/> lists the private77representations and programs in the same way as the78<Q>official</Q> data, except that private parts are marked with the string79stored in the component <C>markprivate</C> of80<Ref Var="AtlasOfGroupRepresentationsInfo"/>;81by default, this is a star <C>*</C>.82The ordering of representations listed by <Ref Func="DisplayAtlasInfo"/>83(and referred to by <Ref Func="AtlasGenerators"/>) will in general change84when private directories are notified.85If several private directories are used then the ordering of data may depend86on the ordering of notifications.87For the other interface functions described in88Chapter <Ref Chap="chap:The User Interface of the AtlasRep Package"/>,89the only difference is that also the private data can be accessed.90In particular the <Q>free format</Q>91<C><A>groupname</A>G<A>i</A>-X<A>descr</A>W<A>n</A></C>92for straight line programs93(see Section <Ref Sect="sect:Filenames Used in the AGR"/>)94may be used in private directories;95the data can be accessed with <Ref Func="AtlasProgram"/>,96where the last two arguments are the strings <C>"other"</C> and <A>descr</A>.9798<P/>99100If also private data types are introduced101(see Section <Ref Sect="sect:Data Types Used in the AGR"/>)102then additional columns or rows can appear in the output of103<Ref Func="DisplayAtlasInfo"/>,104and new inputs can become meaningful for all interface functions.105Examples for these changes can be found in106Section <Ref Sect="sect:An Example of Extending AtlasRep"/>.107108</Section>109110111<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->112<Section Label="sect:An Example of Extending AtlasRep">113<Heading>An Example of Extending the <Package>AtlasRep</Package> Package114</Heading>115116In the beginning we set the info level of <Ref InfoClass="InfoAtlasRep"/>117to <M>1</M>.118119<Example><![CDATA[120gap> level:= InfoLevel( InfoAtlasRep );;121gap> SetInfoLevel( InfoAtlasRep, 1 );122]]></Example>123124Let us assume that the directory <F>privdir</F> contains125data for the cyclic group <M>C_4</M> of order <M>4</M>126and for the alternating group <M>A_5</M> on <M>5</M> points, respectively.127Note that it is obvious what the term <Q>standard generators</Q> means for128the group <M>C_4</M>.129130<P/>131132Further let us assume that <F>privdir</F> contains the following files.133134<List>135<Mark><F>C4G1-p4B0.m1</F></Mark>136<Item>137a faithful permutation representation of <M>C_4</M> on <M>4</M> points,138</Item>139<Mark><F>C4G1-max1W1</F></Mark>140<Item>141the straight line program that returns the square of its unique input,142</Item>143<Mark><F>C4G1-a2W1</F></Mark>144<Item>145the straight line program that raises its unique input to the third146power,147</Item>148<Mark><F>C4G1-XtestW1</F></Mark>149<Item>150the straight line program that returns the square of its unique input,151</Item>152<Mark><F>A5G1-p60B0.m1</F> and <F>A5G1-p60B0.m2</F></Mark>153<Item>154the regular permutation representation of <M>A_5</M>.155</Item>156</List>157158<P/>159160The directory and the files can be created as follows.161162<P/>163164<Example><![CDATA[165gap> prv:= DirectoryTemporary( "privdir" );;166gap> FileString( Filename( prv, "C4G1-p4B0.m1" ),167> MeatAxeString( [ (1,2,3,4) ], 4 ) );;168gap> FileString( Filename( prv, "C4G1-max1W1" ),169> "inp 1\npwr 2 1 2\noup 1 2\n" );;170gap> FileString( Filename( prv, "C4G1-XtestW1" ),171> "inp 1\npwr 2 1 2\noup 1 2\n" );;172gap> FileString( Filename( prv, "C4G1-a2W1" ),173> "inp 1\npwr 3 1 2\noup 1 2\n" );;174gap> FileString( Filename( prv, "C4G1-Ar1aB0.g" ),175> "return rec( generators:= [ [[E(4)]] ] );\n" );;176gap> points:= Elements( AlternatingGroup( 5 ) );;177gap> FileString( Filename( prv, "A5G1-p60B0.m1" ),178> MeatAxeString( [ Permutation( (1,2)(3,4), points, OnRight ) ], 60 ) );;179gap> FileString( Filename( prv, "A5G1-p60B0.m2" ),180> MeatAxeString( [ Permutation( (1,3,5), points, OnRight ) ], 60 ) );;181]]></Example>182183<P/>184185(We could also introduce intermediate directories <F>C4</F> and <F>A5</F>,186say, each with the data for one group only.187Here we do not show this because creating directories programmatically188seems to be possible only with the &GAP; package <Package>IO</Package>.)189190<P/>191192The official part of the <Package>AtlasRep</Package> package does not contain193information about <M>C_4</M>,194so we first notify this group, in the file <F>privdir/toc.g</F>.195Besides the name of the group, we store the following information:196the group order, the number of (classes of) maximal subgroups,197their orders, their structures, and describing data about the two198permutation representations.199(The group <M>A_5</M> is known with name <C>A5</C> in the official part200of the <Package>AtlasRep</Package> package,201so it cannot be notified again.)202203<P/>204205<Example><![CDATA[206gap> FileString( Filename( prv, "toc.g" ), Concatenation( [207> "AGR.GNAN(\"C4\",\"C4\");\n",208> "AGR.GRS(\"C4\",4);\n",209> "AGR.MXN(\"C4\",1);\n",210> "AGR.MXO(\"C4\",[2]);\n",211> "AGR.MXS(\"C4\",[\"C2\"]);\n",212> "AGR.API(\"C4G1-p4B0\",[1,4,\"imprim\",\"1 < C2\"]);\n",213> "AGR.API(\"A5G1-p60B0\",[1,60,\"imprim\",\"1 < A4\"]);\n",214> ] ) );;215]]></Example>216217<P/>218219Then we notify the private directory.220221<P/>222223<Example><![CDATA[224gap> AtlasOfGroupRepresentationsNotifyPrivateDirectory( prv, "priv", true );225true226]]></Example>227228<P/>229230Now we can use the interface functions for accessing the data in the231private directory.232233<P/>234235<Example><![CDATA[236gap> DisplayAtlasInfo( [ "C4" ] );237group | # | maxes | cl | cyc | out | fnd | chk | prs238------+---+-------+----+-----+-----+-----+-----+----239C4* | 2 | 1 | | | 2 | | |240gap> DisplayAtlasInfo( "C4" );241Representations for G = C4: (all refer to std. generators 1)242---------------------------2431: G <= Sym(4)* rank 4, on cosets of 1 < C22442: G <= GL(1a,C)*245246Programs for G = C4: (all refer to std. generators 1)247--------------------248automorphisms:2492*250maxes (all 1):2511*: C2252other scripts:253"test"*254gap> DisplayAtlasInfo( "C4", IsPermGroup, true );255Representations for G = C4: (all refer to std. generators 1)256---------------------------2571: G <= Sym(4)* rank 4, on cosets of 1 < C2258gap> DisplayAtlasInfo( "C4", IsMatrixGroup );259Representations for G = C4: (all refer to std. generators 1)260---------------------------2612: G <= GL(1a,C)*262gap> DisplayAtlasInfo( "C4", Dimension, 2 );263gap> DisplayAtlasInfo( "A5", NrMovedPoints, 60 );264Representations for G = A5: (all refer to std. generators 1)265---------------------------2664: G <= Sym(60)* rank 60, on cosets of 1 < A4267gap> info:= OneAtlasGeneratingSetInfo( "C4" );268rec( groupname := "C4", id := "",269identifier := [ [ "priv", "C4" ], [ "C4G1-p4B0.m1" ], 1, 4 ],270isPrimitive := false, p := 4, rankAction := 4,271repname := "C4G1-p4B0", repnr := 1, size := 4,272stabilizer := "1 < C2", standardization := 1, transitivity := 1,273type := "perm" )274gap> AtlasGenerators( info.identifier );275rec( generators := [ (1,2,3,4) ], groupname := "C4", id := "",276identifier := [ [ "priv", "C4" ], [ "C4G1-p4B0.m1" ], 1, 4 ],277isPrimitive := false, p := 4, rankAction := 4,278repname := "C4G1-p4B0", repnr := 1, size := 4,279stabilizer := "1 < C2", standardization := 1, transitivity := 1,280type := "perm" )281gap> AtlasProgram( "C4", 1 );282rec( groupname := "C4",283identifier := [ [ "priv", "C4" ], "C4G1-max1W1", 1 ],284program := <straight line program>, size := 2, standardization := 1,285subgroupname := "C2" )286gap> AtlasProgram( "C4", "maxes", 1 );287rec( groupname := "C4",288identifier := [ [ "priv", "C4" ], "C4G1-max1W1", 1 ],289program := <straight line program>, size := 2, standardization := 1,290subgroupname := "C2" )291gap> AtlasProgram( "C4", "maxes", 2 );292fail293gap> AtlasGenerators( "C4", 1 );294rec( generators := [ (1,2,3,4) ], groupname := "C4", id := "",295identifier := [ [ "priv", "C4" ], [ "C4G1-p4B0.m1" ], 1, 4 ],296isPrimitive := false, p := 4, rankAction := 4,297repname := "C4G1-p4B0", repnr := 1, size := 4,298stabilizer := "1 < C2", standardization := 1, transitivity := 1,299type := "perm" )300gap> AtlasGenerators( "C4", 2 );301rec( dim := 1, generators := [ [ [ E(4) ] ] ], groupname := "C4",302id := "a", identifier := [ [ "priv", "C4" ], "C4G1-Ar1aB0.g", 1, 1 ]303, repname := "C4G1-Ar1aB0", repnr := 2, size := 4,304standardization := 1, type := "matalg" )305gap> AtlasGenerators( "C4", 3 );306fail307gap> AtlasProgram( "C4", "other", "test" );308rec( groupname := "C4",309identifier := [ [ "priv", "C4" ], "C4G1-XtestW1", 1 ],310program := <straight line program>, standardization := 1 )311]]></Example>312313<P/>314315We can restrict the data shown by <Ref Func="DisplayAtlasInfo"/> to the316private directory, as follows.317318<P/>319320<Example><![CDATA[321gap> DisplayAtlasInfo( "contents", "priv" );322group | # | maxes | cl | cyc | out | fnd | chk | p*323-------------------------+---+-------+----+-----+-----+-----+-----+--*324A5* | 1 | | | | | | | *325C4* | 2 | 1 | | | 2 | | | *326]]></Example>327328<P/>329330For checking the data in the private directory,331we apply the relevant sanity checks332(see Section <Ref Sect="sect:AGR Sanity Checks"/>).333334<P/>335336<Example><![CDATA[337gap> if not IsBound( AGR.Test ) then338> ReadPackage( "atlasrep", "gap/test.g" );339> fi;340gap> AGR.Test.Words( "priv" );341true342gap> AGR.Test.FileHeaders( "priv" );343true344gap> AGR.Test.Files( "priv" );345true346gap> AGR.Test.BinaryFormat( "priv" );347true348gap> AGR.Test.Primitivity( "priv" );349true350gap> AGR.Test.Characters( "priv" );351true352]]></Example>353354<P/>355356Finally, we <Q>uninstall</Q> the private directory,357and reset the info level that had been set to <M>1</M> in the beginning.358(Also the group name <C>C4</C> is removed this way, which is an advantage of359using a <F>toc.g</F> file over calling <C>AGRGNAN</C> directly.),360Note that we need not remove the data in the temporary directory,361&GAP; will do this automatically.362363<P/>364365<Example><![CDATA[366gap> AtlasOfGroupRepresentationsForgetPrivateDirectory( "priv" );367gap> SetInfoLevel( InfoAtlasRep, level );368]]></Example>369370</Section>371372373<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->374375</Chapter>376377378379