GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
1<!-- %W tutorial.xml GAP 4 package AtlasRep Thomas Breuer -->2<!-- %Y Copyright 2008, Lehrstuhl D f�r Mathematik, RWTH Aachen, Germany -->345<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->6<Chapter Label="chap:tutorial">7<Heading>Tutorial for the <Package>AtlasRep</Package> Package</Heading>89This chapter gives an overview of the basic functionality10provided by the <Package>AtlasRep</Package> package.11The main concepts and interface functions are presented in the first sections,12and Section <Ref Sect="sect:Examples of Using the AtlasRep Package"/>13shows a few small examples.141516<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->17<Section Label="sect:tutaccessgroup">18<Heading>Accessing a Specific Group in19<Package>AtlasRep</Package></Heading>2021The <Package>AtlasRep</Package> package gives access to a database,22the &ATLAS; of Group Representations <Cite Key="AGRv3"/>,23that contains generators and related data for several groups,24mainly for extensions of simple groups25(see Section <Ref Subsect="sect:tutnearlysimple"/>)26and for their maximal subgroups27(see Section <Ref Subsect="sect:tutmaxes"/>).2829<P/>3031Note that the data are not part of the package.32They are fetched from a web server as soon as they are needed for the33first time, see Section <Ref Subsect="subsect:Local or remote access"/>.3435<P/>3637First of all, we load the <Package>AtlasRep</Package> package.38Some of the examples require also the &GAP; packages39<Package>CTblLib</Package> and <Package>TomLib</Package>,40so we load also these packages.4142<Example><![CDATA[43gap> LoadPackage( "AtlasRep" );44true45gap> LoadPackage( "CTblLib" );46true47gap> LoadPackage( "TomLib" );48true49]]></Example>505152<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->53<Subsection Label="sect:tutnearlysimple">54<Heading>Accessing a Group in55<Package>AtlasRep</Package> via its Name</Heading>5657Each group that occurs in this database is specified by a <E>name</E>,58which is a string similar to the name used in the &ATLAS; of Finite Groups59<Cite Key="CCN85"/>.60For those groups whose character tables are contained in the61&GAP; Character Table Library <Cite Key="CTblLib"/>,62the names are equal to the63<Ref Func="Identifier" Label="for character tables" BookName="ref"/>64values of these character tables.65Examples of such names are66<C>"M24"</C> for the Mathieu group <M>M_{24}</M>,67<C>"2.A6"</C> for the double cover of the alternating group <M>A_6</M>, and68<C>"2.A6.2_1"</C> for the double cover of the symmetric group <M>S_6</M>.69The names that actually occur are listed in the first column of the70overview table that is printed by the function71<Ref Func="DisplayAtlasInfo"/>, called without arguments, see below.72The other columns of the table describe the data that are available in the73database.7475<P/>7677For example, <Ref Func="DisplayAtlasInfo"/> may print the following lines.78Omissions are indicated with <Q><C>...</C></Q>.7980<Log><![CDATA[81gap> DisplayAtlasInfo();82group | # | maxes | cl | cyc | out | fnd | chk | prs83-------------------------+----+-------+----+-----+-----+-----+-----+----84...852.A5 | 26 | 3 | | | | | + | +862.A5.2 | 11 | 4 | | | | | + | +872.A6 | 18 | 5 | | | | | |882.A6.2_1 | 3 | 6 | | | | | |892.A7 | 24 | | | | | | |902.A7.2 | 7 | | | | | | |91...92M22 | 58 | 8 | + | + | | + | + | +93M22.2 | 46 | 7 | + | + | | + | + | +94M23 | 66 | 7 | + | + | | + | + | +95M24 | 62 | 9 | + | + | | + | + | +96McL | 46 | 12 | + | + | | + | + | +97McL.2 | 27 | 10 | | + | | + | + | +98O7(3) | 28 | | | | | | |99O7(3).2 | 3 | | | | | | |100...101]]></Log>102103<P/>104105Called with a group name as the only argument,106the function <Ref Func="AtlasGroup" Label="for various arguments"/> returns107a group isomorphic to the group with the given name.108If permutation generators are available in the database109then a permutation group (of smallest available degree) is returned,110otherwise a matrix group.111112<Example><![CDATA[113gap> g:= AtlasGroup( "M24" );114Group([ (1,4)(2,7)(3,17)(5,13)(6,9)(8,15)(10,19)(11,18)(12,21)(14,16)115(20,24)(22,23), (1,4,6)(2,21,14)(3,9,15)(5,18,10)(13,17,16)116(19,24,23) ])117gap> IsPermGroup( g ); NrMovedPoints( g ); Size( g );118true11924120244823040121]]></Example>122123</Subsection>124125126<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->127<Subsection Label="sect:tutmaxes">128<Heading>Accessing a Maximal Subgroup of a Group in129<Package>AtlasRep</Package></Heading>130131Many maximal subgroups of extensions of simple groups can be constructed132using the function133<Ref Func="AtlasSubgroup"134Label="for a group name (and various arguments) and a number"/>.135Given the name of the extension of the simple group136and the number of the conjugacy class of maximal subgroups,137this function returns a representative from this class.138139<Example><![CDATA[140gap> g:= AtlasSubgroup( "M24", 1 );141Group([ (2,10)(3,12)(4,14)(6,9)(8,16)(15,18)(20,22)(21,24), (1,7,2,9)142(3,22,10,23)(4,19,8,12)(5,14)(6,18)(13,16,17,24) ])143gap> IsPermGroup( g ); NrMovedPoints( g ); Size( g );144true1452314610200960147]]></Example>148149The classes of maximal subgroups are ordered150w. r. t. decreasing subgroup order.151So the first class contains the largest maximal subgroups.152153<P/>154155Note that groups obtained by <Ref Func="AtlasSubgroup"156Label="for a group name (and various arguments) and a number"/> may be157not very suitable for computations in the sense that much nicer158representations exist.159For example, the sporadic simple O'Nan group <M>O'N</M> contains a160maximal subgroup <M>S</M> isomorphic with the Janko group <M>J_1</M>;161the smallest permutation representation of <M>O'N</M> has degree <M>122760</M>,162so restricting this representation to <M>S</M> yields a representation of163<M>J_1</M> of that degree.164However,165<M>J_1</M> has a faithful permutation representation of degree <M>266</M>,166which admits much more efficient computations.167If you are just interested in <M>J_1</M> and not in168its embedding into <M>O'N</M>169then one possibility to get a <Q>nicer</Q> faithful representation is to call170<Ref Func="SmallerDegreePermutationRepresentation" BookName="ref"/>.171In the abovementioned example, this works quite well;172note that in general,173we cannot expect that we get a representation of smallest degree in this way.174175<Example><![CDATA[176gap> s:= AtlasSubgroup( "ON", 3 );177<permutation group of size 175560 with 2 generators>178gap> NrMovedPoints( s ); Size( s );179122760180175560181gap> hom:= SmallerDegreePermutationRepresentation( s );;182gap> NrMovedPoints( Image( hom ) );1831540184]]></Example>185186<!-- in earlier times, one got the degree 266 representation -->187188<P/>189190In this particular case, one could of course also ask directly for the group191<M>J_1</M>.192193<Example><![CDATA[194gap> j1:= AtlasGroup( "J1" );195<permutation group of size 175560 with 2 generators>196gap> NrMovedPoints( j1 );197266198]]></Example>199200If you have a group <M>G</M>, say,201and you are really interested in the embedding of a maximal subgroup of202<M>G</M> into <M>G</M> then an easy way to get compatible generators is to203create <M>G</M> with <Ref Func="AtlasGroup" Label="for various arguments"/>204and then to call <Ref Func="AtlasSubgroup" Label="for a group and a number"/>205with first argument the group <M>G</M>.206207<Example><![CDATA[208gap> g:= AtlasGroup( "ON" );209<permutation group of size 460815505920 with 2 generators>210gap> s:= AtlasSubgroup( g, 3 );211<permutation group of size 175560 with 2 generators>212gap> IsSubset( g, s );213true214gap> IsSubset( g, j1 );215false216]]></Example>217218219</Subsection>220221</Section>222223224<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->225<Section Label="sect:tutaccessrepres">226<Heading>Accessing Specific Generators in227<Package>AtlasRep</Package></Heading>228229The function <Ref Func="DisplayAtlasInfo"/>, called with an admissible230name of a group as the only argument,231lists the &ATLAS; data available for this group.232233<Example><![CDATA[234gap> DisplayAtlasInfo( "A5" );235Representations for G = A5: (all refer to std. generators 1)236---------------------------2371: G <= Sym(5) 3-trans., on cosets of A4 (1st max.)2382: G <= Sym(6) 2-trans., on cosets of D10 (2nd max.)2393: G <= Sym(10) rank 3, on cosets of S3 (3rd max.)2404: G <= GL(4a,2)2415: G <= GL(4b,2)2426: G <= GL(4,3)2437: G <= GL(6,3)2448: G <= GL(2a,4)2459: G <= GL(2b,4)24610: G <= GL(3,5)24711: G <= GL(5,5)24812: G <= GL(3a,9)24913: G <= GL(3b,9)25014: G <= GL(4,Z)25115: G <= GL(5,Z)25216: G <= GL(6,Z)25317: G <= GL(3a,Field([Sqrt(5)]))25418: G <= GL(3b,Field([Sqrt(5)]))255256Programs for G = A5: (all refer to std. generators 1)257--------------------258presentation259std. gen. checker260maxes (all 3):2611: A42622: D102633: S3264]]></Example>265266In order to fetch one of the listed permutation groups or matrix groups,267you can call <Ref Func="AtlasGroup" Label="for various arguments"/>268with second argument the function269<Ref Func="Position" BookName="ref"/> and third argument the position in270the list.271272<Example><![CDATA[273gap> AtlasGroup( "A5", Position, 1 );274Group([ (1,2)(3,4), (1,3,5) ])275]]></Example>276277Note that this approach may yield a different group after an update278of the database, if new data for the group become available.279280<P/>281282Alternatively, you can describe the desired group by conditions,283such as the degree in the case of a permutation group,284and the dimension and the base ring in the case of a matrix group.285286<Example><![CDATA[287gap> AtlasGroup( "A5", NrMovedPoints, 10 );288Group([ (2,4)(3,5)(6,8)(7,10), (1,2,3)(4,6,7)(5,8,9) ])289gap> AtlasGroup( "A5", Dimension, 4, Ring, GF(2) );290<matrix group of size 60 with 2 generators>291]]></Example>292293<P/>294295The same holds for the restriction to maximal subgroups:296Use297<Ref Func="AtlasSubgroup"298Label="for a group name (and various arguments) and a number"/>299with the same arguments as300<Ref Func="AtlasGroup" Label="for various arguments"/>,301except that additionally the number of the class of maximal subgroups302is entered as the last argument.303Note that the conditions refer to the group, not to the subgroup;304it may happen that the subgroup moves fewer points than the big group.305306<Example><![CDATA[307gap> AtlasSubgroup( "A5", Dimension, 4, Ring, GF(2), 1 );308<matrix group of size 12 with 2 generators>309gap> g:= AtlasSubgroup( "A5", NrMovedPoints, 10, 3 );310Group([ (2,4)(3,5)(6,8)(7,10), (1,4)(3,8)(5,7)(6,10) ])311gap> Size( g ); NrMovedPoints( g );31263139314]]></Example>315316317</Section>318319320<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->321<Section Label="sect:tutconcepts">322<Heading>Basic Concepts used in <Package>AtlasRep</Package></Heading>323324325<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->326<Subsection Label="sect:tutstdgens">327<Heading>Groups, Generators, and Representations</Heading>328329Up to now, we have talked only about groups and subgroups.330The <Package>AtlasRep</Package> package provides access to331<E>group generators</E>,332and in fact these generators have the property that mapping one set of333generators to another set of generators for the same group defines an334isomorphism.335These generators are called <E>standard generators</E>,336see Section <Ref Sect="sect:Standard Generators Used in AtlasRep"/>.337338<P/>339340So instead of thinking about several generating sets of a group <M>G</M>,341say, we can think about one abstract group <M>G</M>, with one fixed set342of generators,343and mapping these generators to any set of generators provided by344<Package>AtlasRep</Package> defines a representation of <M>G</M>.345This viewpoint motivates the name <Q>&ATLAS; of Group Representations</Q>346for the database.347348<P/>349350If you are interested in the generators provided by the database351rather than in the groups they generate,352you can use the function <Ref Func="OneAtlasGeneratingSetInfo"/>353instead of <Ref Func="AtlasGroup" Label="for various arguments"/>,354with the same arguments.355This will yield a record that describes the representation in question.356Calling the function <Ref Func="AtlasGenerators"/> with this record357will then yield a record with the additional component <C>generators</C>,358which holds the list of generators.359360<P/>361362<Example><![CDATA[363gap> info:= OneAtlasGeneratingSetInfo( "A5", NrMovedPoints, 10 );364rec( groupname := "A5", id := "",365identifier := [ "A5", [ "A5G1-p10B0.m1", "A5G1-p10B0.m2" ], 1, 10 ],366isPrimitive := true, maxnr := 3, p := 10, rankAction := 3,367repname := "A5G1-p10B0", repnr := 3, size := 60, stabilizer := "S3",368standardization := 1, transitivity := 1, type := "perm" )369gap> info2:= AtlasGenerators( info );370rec( generators := [ (2,4)(3,5)(6,8)(7,10), (1,2,3)(4,6,7)(5,8,9) ],371groupname := "A5", id := "",372identifier := [ "A5", [ "A5G1-p10B0.m1", "A5G1-p10B0.m2" ], 1, 10 ],373isPrimitive := true, maxnr := 3, p := 10, rankAction := 3,374repname := "A5G1-p10B0", repnr := 3, size := 60, stabilizer := "S3",375standardization := 1, transitivity := 1, type := "perm" )376gap> info2.generators;377[ (2,4)(3,5)(6,8)(7,10), (1,2,3)(4,6,7)(5,8,9) ]378]]></Example>379380</Subsection>381382383<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->384<Subsection Label="sect:tutslp">385<Heading>Straight Line Programs</Heading>386387For computing certain group elements from standard generators, such as388generators of a subgroup or class representatives,389<Package>AtlasRep</Package> uses <E>straight line programs</E>,390see <Ref Sect="Straight Line Programs" BookName="ref"/>.391Essentially this means to evaluate words in the generators, similar to392<Ref Func="MappedWord" BookName="ref"/> but more efficiently.393394<P/>395396It can be useful to deal with these straight line programs,397see <Ref Func="AtlasProgram"/>.398For example, an automorphism <M>\alpha</M>, say, of the group <M>G</M>,399if available in <Package>AtlasRep</Package>,400is given by a straight line program that defines the images of standard401generators of <M>G</M>.402This way, one can for example compute the image of a subgroup <M>U</M> of403<M>G</M> under <M>\alpha</M> by first applying the straight line program404for <M>\alpha</M> to standard generators of <M>G</M>,405and then applying the straight line program for the restriction from406<M>G</M> to <M>U</M>.407408<P/>409410<Example><![CDATA[411gap> prginfo:= AtlasProgramInfo( "A5", "maxes", 1 );412rec( groupname := "A5", identifier := [ "A5", "A5G1-max1W1", 1 ],413size := 12, standardization := 1, subgroupname := "A4" )414gap> prg:= AtlasProgram( prginfo.identifier );415rec( groupname := "A5", identifier := [ "A5", "A5G1-max1W1", 1 ],416program := <straight line program>, size := 12,417standardization := 1, subgroupname := "A4" )418gap> Display( prg.program );419# input:420r:= [ g1, g2 ];421# program:422r[3]:= r[1]*r[2];423r[4]:= r[2]*r[1];424r[5]:= r[3]*r[3];425r[1]:= r[5]*r[4];426# return values:427[ r[1], r[2] ]428gap> ResultOfStraightLineProgram( prg.program, info2.generators );429[ (1,10)(2,3)(4,9)(7,8), (1,2,3)(4,6,7)(5,8,9) ]430]]></Example>431432</Subsection>433434</Section>435436437<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->438<Section Label="sect:Examples of Using the AtlasRep Package">439<Heading>Examples of Using the <Package>AtlasRep</Package> Package</Heading>440441442<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->443<Subsection Label="subsect:Example: Class Representatives">444<Heading>Example: Class Representatives</Heading>445446First we show the computation of class representatives of the Mathieu group447<M>M_{11}</M>, in a <M>2</M>-modular matrix representation.448We start with the ordinary and Brauer character tables of this group.449450<P/>451452<Example><![CDATA[453gap> tbl:= CharacterTable( "M11" );;454gap> modtbl:= tbl mod 2;;455gap> CharacterDegrees( modtbl );456[ [ 1, 1 ], [ 10, 1 ], [ 16, 2 ], [ 44, 1 ] ]457]]></Example>458459<P/>460461The output of <Ref Func="CharacterDegrees" BookName="ref"/>462means that the <M>2</M>-modular irreducibles of <M>M_{11}</M>463have degrees <M>1</M>, <M>10</M>, <M>16</M>, <M>16</M>, and <M>44</M>.464465<P/>466467Using <Ref Func="DisplayAtlasInfo"/>,468we find out that matrix generators for the irreducible <M>10</M>-dimensional469representation are available in the database.470471<P/>472473<Example><![CDATA[474gap> DisplayAtlasInfo( "M11", Characteristic, 2 );475Representations for G = M11: (all refer to std. generators 1)476----------------------------4776: G <= GL(10,2) character 10a4787: G <= GL(32,2) character 16ab4798: G <= GL(44,2) character 44a48016: G <= GL(16a,4) character 16a48117: G <= GL(16b,4) character 16b482]]></Example>483484<P/>485486So we decide to work with this representation.487We fetch the generators and compute the list of class representatives488of <M>M_{11}</M> in the representation.489The ordering of class representatives is the same as that in the character490table of the &ATLAS; of Finite Groups (<Cite Key="CCN85"/>),491which coincides with the ordering of columns in the &GAP; table we have492fetched above.493494<P/>495496<Example><![CDATA[497gap> info:= OneAtlasGeneratingSetInfo( "M11", Characteristic, 2,498> Dimension, 10 );;499gap> gens:= AtlasGenerators( info.identifier );;500gap> ccls:= AtlasProgram( "M11", gens.standardization, "classes" );501rec( groupname := "M11", identifier := [ "M11", "M11G1-cclsW1", 1 ],502outputs := [ "1A", "2A", "3A", "4A", "5A", "6A", "8A", "8B", "11A",503"11B" ], program := <straight line program>,504standardization := 1 )505gap> reps:= ResultOfStraightLineProgram( ccls.program, gens.generators );;506]]></Example>507508<P/>509510If we would need only a few class representatives, we could use511the &GAP; library function <Ref Func="RestrictOutputsOfSLP" BookName="ref"/>512to create a straight line program that computes only specified outputs.513Here is an example where only the class representatives of order eight are514computed.515516<P/>517518<Example><![CDATA[519gap> ord8prg:= RestrictOutputsOfSLP( ccls.program,520> Filtered( [ 1 .. 10 ], i -> ccls.outputs[i][1] = '8' ) );521<straight line program>522gap> ord8reps:= ResultOfStraightLineProgram( ord8prg, gens.generators );;523gap> List( ord8reps, m -> Position( reps, m ) );524[ 7, 8 ]525]]></Example>526527<P/>528529Let us check that the class representatives have the right orders.530531<P/>532533<Example><![CDATA[534gap> List( reps, Order ) = OrdersClassRepresentatives( tbl );535true536]]></Example>537538<P/>539540From the class representatives, we can compute the Brauer character541we had started with.542This Brauer character is defined on all classes of the <M>2</M>-modular543table.544So we first pick only those representatives,545using the &GAP; function <Ref Func="GetFusionMap" BookName="ref"/>;546in this situation, it returns the class fusion from the Brauer table into547the ordinary table.548549<P/>550551<Example><![CDATA[552gap> fus:= GetFusionMap( modtbl, tbl );553[ 1, 3, 5, 9, 10 ]554gap> modreps:= reps{ fus };;555]]></Example>556557<P/>558559Then we call the &GAP; function560<Ref Func="BrauerCharacterValue" BookName="ref"/>,561which computes the Brauer character value from the matrix given.562563<P/>564565<Example><![CDATA[566gap> char:= List( modreps, BrauerCharacterValue );567[ 10, 1, 0, -1, -1 ]568gap> Position( Irr( modtbl ), char );5692570]]></Example>571572</Subsection>573574575<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->576<Subsection Label="subsect:Example: Permutation and Matrix Representations">577<Heading>Example: Permutation and Matrix Representations</Heading>578579The second example shows the computation of a permutation representation580from a matrix representation.581We work with the <M>10</M>-dimensional representation used above,582and consider the action on the <M>2^{10}</M> vectors of the underlying row583space.584585<P/>586587<Example><![CDATA[588gap> grp:= Group( gens.generators );;589gap> v:= GF(2)^10;;590gap> orbs:= Orbits( grp, AsList( v ) );;591gap> List( orbs, Length );592[ 1, 396, 55, 330, 66, 165, 11 ]593]]></Example>594595<P/>596597We see that there are six nontrivial orbits,598and we can compute the permutation actions on these orbits directly599using <Ref Func="Action" BookName="ref"/>.600However, for larger examples, one cannot write down all orbits on the601row space, so one has to use another strategy if one is interested in602a particular orbit.603604<P/>605606Let us assume that we are interested in the orbit of length <M>11</M>.607The point stabilizer is the first maximal subgroup of <M>M_{11}</M>,608thus the restriction of the representation to this subgroup has a609nontrivial fixed point space.610This restriction can be computed using the <Package>AtlasRep</Package>611package.612613<P/>614615<Example><![CDATA[616gap> gens:= AtlasGenerators( "M11", 6, 1 );;617]]></Example>618<P/>619Now computing the fixed point space is standard linear algebra.620<P/>621<Example><![CDATA[622gap> id:= IdentityMat( 10, GF(2) );;623gap> sub1:= Subspace( v, NullspaceMat( gens.generators[1] - id ) );;624gap> sub2:= Subspace( v, NullspaceMat( gens.generators[2] - id ) );;625gap> fix:= Intersection( sub1, sub2 );626<vector space of dimension 1 over GF(2)>627]]></Example>628629<P/>630631The final step is of course the computation of the permutation action632on the orbit.633634<P/>635636<Example><![CDATA[637gap> orb:= Orbit( grp, Basis( fix )[1] );;638gap> act:= Action( grp, orb );; Print( act, "\n" );639Group( [ ( 1, 2)( 4, 6)( 5, 8)( 7,10), ( 1, 3, 5, 9)( 2, 4, 7,11) ] )640]]></Example>641642<P/>643644Note that this group is <E>not</E> equal to the group obtained by fetching645the permutation representation from the database.646This is due to a different numbering of the points,647so the groups are permutation isomorphic.648649<P/>650651<Example><![CDATA[652gap> permgrp:= Group( AtlasGenerators( "M11", 1 ).generators );;653gap> Print( permgrp, "\n" );654Group( [ ( 2,10)( 4,11)( 5, 7)( 8, 9), ( 1, 4, 3, 8)( 2, 5, 6, 9) ] )655gap> permgrp = act;656false657gap> IsConjugate( SymmetricGroup(11), permgrp, act );658true659]]></Example>660661</Subsection>662663664<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->665<Subsection Label="subsect:Example: Outer Automorphisms">666<Heading>Example: Outer Automorphisms</Heading>667668The straight line programs for applying outer automorphisms to669standard generators can of course be used to define the automorphisms670themselves as &GAP; mappings.671672<P/>673674<Example><![CDATA[675gap> DisplayAtlasInfo( "G2(3)", IsStraightLineProgram );676Programs for G = G2(3): (all refer to std. generators 1)677-----------------------678class repres.679presentation680repr. cyc. subg.681std. gen. checker682automorphisms:6832684maxes (all 10):6851: U3(3).26862: U3(3).26873: (3^(1+2)+x3^2):2S46884: (3^(1+2)+x3^2):2S46895: L3(3).26906: L3(3).26917: L2(8).36928: 2^3.L3(2)6939: L2(13)69410: 2^(1+4)+:3^2.2695gap> prog:= AtlasProgram( "G2(3)", "automorphism", "2" ).program;;696gap> info:= OneAtlasGeneratingSetInfo( "G2(3)", Dimension, 7 );;697gap> gens:= AtlasGenerators( info ).generators;;698gap> imgs:= ResultOfStraightLineProgram( prog, gens );;699]]></Example>700701<P/>702703If we are not suspicious whether the script really describes an704automorphism then we should tell this to &GAP;,705in order to avoid the expensive checks of the properties of being a706homomorphism and bijective707(see Section <Ref Sect="Creating Group Homomorphisms" BookName="ref"/>).708This looks as follows.709710<P/>711712<Example><![CDATA[713gap> g:= Group( gens );;714gap> aut:= GroupHomomorphismByImagesNC( g, g, gens, imgs );;715gap> SetIsBijective( aut, true );716]]></Example>717718<P/>719720If we are suspicious whether the script describes an automorphism721then we might have the idea to check it with &GAP;, as follows.722723<P/>724725<Example><![CDATA[726gap> aut:= GroupHomomorphismByImages( g, g, gens, imgs );;727gap> IsBijective( aut );728true729]]></Example>730731<P/>732733(Note that even for a comparatively small group such as <M>G_2(3)</M>,734this was a difficult task for &GAP; before version 4.3.)735736<P/>737738Often one can form images under an automorphism <M>\alpha</M>, say,739without creating the homomorphism object.740This is obvious for the standard generators of the group <M>G</M> themselves,741but also for generators of a maximal subgroup <M>M</M> computed from standard742generators of <M>G</M>, provided that the straight line programs in question743refer to the same standard generators.744Note that the generators of <M>M</M> are given by evaluating words in terms745of standard generators of <M>G</M>,746and their images under <M>\alpha</M> can be obtained by evaluating the same747words at the images under <M>\alpha</M> of the standard generators of748<M>G</M>.749750<P/>751752<Example><![CDATA[753gap> max1:= AtlasProgram( "G2(3)", 1 ).program;;754gap> mgens:= ResultOfStraightLineProgram( max1, gens );;755gap> comp:= CompositionOfStraightLinePrograms( max1, prog );;756gap> mimgs:= ResultOfStraightLineProgram( comp, gens );;757]]></Example>758759<P/>760761The list <C>mgens</C> is the list of generators of the first maximal subgroup762of <M>G_2(3)</M>, <C>mimgs</C> is the list of images under the automorphism763given by the straight line program <C>prog</C>.764Note that applying the program returned by765<Ref Func="CompositionOfStraightLinePrograms" BookName="ref"/>766means to apply first <C>prog</C> and then <C>max1</C>.767Since we have already constructed the &GAP; object representing the768automorphism, we can check whether the results are equal.769770<P/>771772<Example><![CDATA[773gap> mimgs = List( mgens, x -> x^aut );774true775]]></Example>776777<P/>778779However, it should be emphasized that using <C>aut</C> requires a huge780machinery of computations behind the scenes, whereas applying the781straight line programs <C>prog</C> and <C>max1</C> involves only elementary782operations with the generators.783The latter is feasible also for larger groups,784for which constructing the &GAP; automorphism might be too hard.785786</Subsection>787788789<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->790<Subsection Label="subsect:Example: Semi-presentations">791<Heading>Example: Using Semi-presentations and Black Box Programs</Heading>792793Let us suppose that we want to restrict a representation of the794Mathieu group <M>M_{12}</M> to a non-maximal subgroup of the type795<M>L_2(11)</M>.796The idea is that this subgroup can be found as a maximal subgroup of a797maximal subgroup of the type <M>M_{11}</M>,798which is itself maximal in <M>M_{12}</M>.799For that,800we fetch a representation of <M>M_{12}</M> and use a straight line program801for restricting it to the first maximal subgroup,802which has the type <M>M_{11}</M>.803804<P/>805806<Example><![CDATA[807gap> info:= OneAtlasGeneratingSetInfo( "M12", NrMovedPoints, 12 );808rec( charactername := "1a+11a", groupname := "M12", id := "a",809identifier := [ "M12", [ "M12G1-p12aB0.m1", "M12G1-p12aB0.m2" ], 1,81012 ], isPrimitive := true, maxnr := 1, p := 12, rankAction := 2,811repname := "M12G1-p12aB0", repnr := 1, size := 95040,812stabilizer := "M11", standardization := 1, transitivity := 5,813type := "perm" )814gap> gensM12:= AtlasGenerators( info.identifier );;815gap> restM11:= AtlasProgram( "M12", "maxes", 1 );;816gap> gensM11:= ResultOfStraightLineProgram( restM11.program,817> gensM12.generators );818[ (3,9)(4,12)(5,10)(6,8), (1,4,11,5)(2,10,8,3) ]819]]></Example>820821<P/>822823Now we <E>cannot</E> simply apply a straight line program for a group824to some generators, since they are not necessarily825<E>standard</E> generators of the group.826We check this property using a semi-presentation for <M>M_{11}</M>,827see <Ref Subsect="Semi-Presentations and Presentations"/>.828829<P/>830831<Example><![CDATA[832gap> checkM11:= AtlasProgram( "M11", "check" );833rec( groupname := "M11", identifier := [ "M11", "M11G1-check1", 1, 1 ]834, program := <straight line decision>, standardization := 1 )835gap> ResultOfStraightLineDecision( checkM11.program, gensM11 );836true837]]></Example>838839<P/>840841So we are lucky that applying the appropriate program for <M>M_{11}</M>842will give us the required generators for <M>L_2(11)</M>.843844<P/>845846<Example><![CDATA[847gap> restL211:= AtlasProgram( "M11", "maxes", 2 );;848gap> gensL211:= ResultOfStraightLineProgram( restL211.program, gensM11 );849[ (3,9)(4,12)(5,10)(6,8), (1,11,9)(2,12,8)(3,6,10) ]850gap> G:= Group( gensL211 );; Size( G ); IsSimple( G );851660852true853]]></Example>854855<P/>856857Usually representations are not given in terms of standard generators.858For example, let us take the <M>M_{11}</M> type group returned by the &GAP;859function <Ref Func="MathieuGroup" BookName="ref"/>.860861<P/>862863<Example><![CDATA[864gap> G:= MathieuGroup( 11 );;865gap> gens:= GeneratorsOfGroup( G );866[ (1,2,3,4,5,6,7,8,9,10,11), (3,7,11,8)(4,10,5,6) ]867gap> ResultOfStraightLineDecision( checkM11.program, gens );868false869]]></Example>870871<P/>872873If we want to compute an <M>L_2(11)</M> type subgroup of this group,874we can use a black box program for computing standard generators,875and then apply the straight line program for computing the restriction.876877<P/>878879<Example><![CDATA[880gap> find:= AtlasProgram( "M11", "find" );881rec( groupname := "M11", identifier := [ "M11", "M11G1-find1", 1, 1 ],882program := <black box program>, standardization := 1 )883gap> stdgens:= ResultOfBBoxProgram( find.program, Group( gens ) );;884gap> List( stdgens, Order );885[ 2, 4 ]886gap> ResultOfStraightLineDecision( checkM11.program, stdgens );887true888gap> gensL211:= ResultOfStraightLineProgram( restL211.program, stdgens );;889gap> List( gensL211, Order );890[ 2, 3 ]891gap> G:= Group( gensL211 );; Size( G ); IsSimple( G );892660893true894]]></Example>895896</Subsection>897898899<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->900<Subsection Label="subsect:Example: Using the GAP Library of Tables of Marks">901<Heading>Example: Using the &GAP; Library of Tables of Marks</Heading>902903The &GAP; Library of Tables of Marks904(the &GAP; package <Package>TomLib</Package>, <Cite Key="TomLib"/>)905provides,906for many almost simple groups, information for constructing representatives907of all conjugacy classes of subgroups.908If this information is compatible with the standard generators of the909&ATLAS; of Group Representations then we can use it to restrict any910representation from the &ATLAS; to prescribed subgroups.911This is useful in particular for those subgroups for which the &ATLAS;912of Group Representations itself does not contain a straight line program.913914<P/>915916<Example><![CDATA[917gap> tom:= TableOfMarks( "A5" );918TableOfMarks( "A5" )919gap> info:= StandardGeneratorsInfo( tom );920[ rec( ATLAS := true, description := "|a|=2, |b|=3, |ab|=5",921generators := "a, b",922script := [ [ 1, 2 ], [ 2, 3 ], [ 1, 1, 2, 1, 5 ] ],923standardization := 1 ) ]924]]></Example>925926<P/>927928The <K>true</K> value of the component <C>ATLAS</C> indicates929that the information stored on <C>tom</C> refers to the standard generators930of type <M>1</M> in the &ATLAS; of Group Representations.931932<P/>933934We want to restrict a <M>4</M>-dimensional integral representation of935<M>A_5</M> to a Sylow <M>2</M> subgroup of <M>A_5</M>,936and use <Ref Func="RepresentativeTomByGeneratorsNC" BookName="ref"/>937for that.938939<P/>940941<Example><![CDATA[942gap> info:= OneAtlasGeneratingSetInfo( "A5", Ring, Integers, Dimension, 4 );;943gap> stdgens:= AtlasGenerators( info.identifier );944rec( dim := 4,945generators :=946[947[ [ 1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ],948[ -1, -1, -1, -1 ] ],949[ [ 0, 1, 0, 0 ], [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ],950[ 1, 0, 0, 0 ] ] ], groupname := "A5", id := "",951identifier := [ "A5", "A5G1-Zr4B0.g", 1, 4 ],952repname := "A5G1-Zr4B0", repnr := 14, ring := Integers, size := 60,953standardization := 1, type := "matint" )954gap> orders:= OrdersTom( tom );955[ 1, 2, 3, 4, 5, 6, 10, 12, 60 ]956gap> pos:= Position( orders, 4 );9574958gap> sub:= RepresentativeTomByGeneratorsNC( tom, pos, stdgens.generators );959<matrix group of size 4 with 2 generators>960gap> GeneratorsOfGroup( sub );961[ [ [ 1, 0, 0, 0 ], [ -1, -1, -1, -1 ], [ 0, 0, 0, 1 ],962[ 0, 0, 1, 0 ] ],963[ [ 1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ],964[ -1, -1, -1, -1 ] ] ]965]]></Example>966967</Subsection>968969970<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->971<Subsection Label="subsect:Example: Index 770 Subgroups in M22">972<Heading>Example: Index <M>770</M> Subgroups in <M>M_{22}</M></Heading>973974The sporadic simple Mathieu group <M>M_{22}</M> contains a unique class of975subgroups of index <M>770</M> (and order <M>576</M>).976This can be seen for example using &GAP;'s Library of Tables of Marks.977978<P/>979980<Example><![CDATA[981gap> tom:= TableOfMarks( "M22" );982TableOfMarks( "M22" )983gap> subord:= Size( UnderlyingGroup( tom ) ) / 770;984576985gap> ord:= OrdersTom( tom );;986gap> tomstabs:= Filtered( [ 1 .. Length( ord ) ], i -> ord[i] = subord );987[ 144 ]988]]></Example>989990<P/>991992The permutation representation of <M>M_{22}</M> on the right cosets of such993a subgroup <M>S</M> is contained in the &ATLAS; of Group Representations.994995<P/>996997<Example><![CDATA[998gap> DisplayAtlasInfo( "M22", NrMovedPoints, 770 );999Representations for G = M22: (all refer to std. generators 1)1000----------------------------100112: G <= Sym(770) rank 9, on cosets of (A4xA4):4 < 2^4:A61002]]></Example>10031004<P/>10051006We now verify the information shown about the point stabilizer and1007about the maximal overgroups of <M>S</M> in <M>M_{22}</M>.10081009<P/>10101011<Example><![CDATA[1012gap> maxtom:= MaximalSubgroupsTom( tom );1013[ [ 155, 154, 153, 152, 151, 150, 146, 145 ],1014[ 22, 77, 176, 176, 231, 330, 616, 672 ] ]1015gap> List( tomstabs, i -> List( maxtom[1], j -> ContainedTom( tom, i, j ) ) );1016[ [ 0, 10, 0, 0, 0, 0, 0, 0 ] ]1017]]></Example>10181019<P/>10201021We see that the only maximal subgroups of <M>M_{22}</M> that contain <M>S</M>1022have index <M>77</M> in <M>M_{22}</M>.1023According to the &ATLAS; of Finite Groups, these maximal subgroups have the1024structure <M>2^4:A_6</M>. From that and from the structure of <M>A_6</M>,1025we conclude that <M>S</M> has the structure <M>2^4:(3^2:4)</M>.10261027<P/>10281029Alternatively, we look at the permutation representation of degree <M>770</M>.1030We fetch it from the &ATLAS; of Group Representations.1031There is exactly one nontrivial block system for this representation,1032with <M>77</M> blocks of length <M>10</M>.10331034<P/>10351036<Example><![CDATA[1037gap> g:= AtlasGroup( "M22", NrMovedPoints, 770 );1038<permutation group of size 443520 with 2 generators>1039gap> allbl:= AllBlocks( g );;1040gap> List( allbl, Length );1041[ 10 ]1042]]></Example>10431044<P/>10451046Furthermore, &GAP; computes that the point stabilizer <M>S</M> has the1047structure <M>(A_4 \times A_4):4</M>.10481049<P/>10501051<Example><![CDATA[1052gap> stab:= Stabilizer( g, 1 );;1053gap> StructureDescription( stab );1054"(A4 x A4) : C4"1055gap> blocks:= Orbit( g, allbl[1], OnSets );;1056gap> act:= Action( g, blocks, OnSets );;1057gap> StructureDescription( Stabilizer( act, 1 ) );1058"(C2 x C2 x C2 x C2) : A6"1059]]></Example>106010611062</Subsection>106310641065<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->1066<Subsection Label="subsect:Example: Index 462 Subgroups in M22">1067<Heading>Example: Index <M>462</M> Subgroups in <M>M_{22}</M></Heading>10681069The &ATLAS; of Group Representations contains three1070degree <M>462</M> permutation representations of the group <M>M_{22}</M>.10711072<P/>10731074<Example><![CDATA[1075gap> DisplayAtlasInfo( "M22", NrMovedPoints, 462 );1076Representations for G = M22: (all refer to std. generators 1)1077----------------------------10787: G <= Sym(462a) rank 5, on cosets of 2^4:A5 < 2^4:A610798: G <= Sym(462b) rank 8, on cosets of 2^4:A5 < L3(4), 2^4:S510809: G <= Sym(462c) rank 8, on cosets of 2^4:A5 < L3(4), 2^4:A61081]]></Example>10821083<P/>10841085The point stabilizers in these three representations have the structure1086<M>2^4:A_5</M>.1087Using &GAP;'s Library of Tables of Marks,1088we can show that these stabilizers are exactly the three classes of subgroups1089of order <M>960</M> in <M>M_{22}</M>.1090For that, we first verify that the group generators stored in &GAP;'s1091table of marks coincide with the standard generators used by the1092&ATLAS; of Group Representations.10931094<P/>10951096<Example><![CDATA[1097gap> tom:= TableOfMarks( "M22" );1098TableOfMarks( "M22" )1099gap> genstom:= GeneratorsOfGroup( UnderlyingGroup( tom ) );;1100gap> checkM22:= AtlasProgram( "M22", "check" );1101rec( groupname := "M22", identifier := [ "M22", "M22G1-check1", 1, 1 ]1102, program := <straight line decision>, standardization := 1 )1103gap> ResultOfStraightLineDecision( checkM22.program, genstom );1104true1105]]></Example>11061107<P/>11081109There are indeed three classes of subgroups of order <M>960</M>1110in <M>M_{22}</M>.11111112<P/>11131114<Example><![CDATA[1115gap> ord:= OrdersTom( tom );;1116gap> tomstabs:= Filtered( [ 1 .. Length( ord ) ], i -> ord[i] = 960 );1117[ 147, 148, 149 ]1118]]></Example>11191120<P/>11211122Now we compute representatives of these three classes in the three1123representations <C>462a</C>, <C>462b</C>, and <C>462c</C>.1124We see that each of the three classes occurs as a point stabilizer1125in exactly one of the three representations.11261127<P/>11281129<Example><![CDATA[1130gap> atlasreps:= AllAtlasGeneratingSetInfos( "M22", NrMovedPoints, 462 );1131[ rec( charactername := "1a+21a+55a+154a+231a", groupname := "M22",1132id := "a",1133identifier :=1134[ "M22", [ "M22G1-p462aB0.m1", "M22G1-p462aB0.m2" ], 1, 462 ],1135isPrimitive := false, p := 462, rankAction := 5,1136repname := "M22G1-p462aB0", repnr := 7, size := 443520,1137stabilizer := "2^4:A5 < 2^4:A6", standardization := 1,1138transitivity := 1, type := "perm" ),1139rec( charactername := "1a+21a^2+55a+154a+210a", groupname := "M22",1140id := "b",1141identifier :=1142[ "M22", [ "M22G1-p462bB0.m1", "M22G1-p462bB0.m2" ], 1, 462 ],1143isPrimitive := false, p := 462, rankAction := 8,1144repname := "M22G1-p462bB0", repnr := 8, size := 443520,1145stabilizer := "2^4:A5 < L3(4), 2^4:S5", standardization := 1,1146transitivity := 1, type := "perm" ),1147rec( charactername := "1a+21a^2+55a+154a+210a", groupname := "M22",1148id := "c",1149identifier :=1150[ "M22", [ "M22G1-p462cB0.m1", "M22G1-p462cB0.m2" ], 1, 462 ],1151isPrimitive := false, p := 462, rankAction := 8,1152repname := "M22G1-p462cB0", repnr := 9, size := 443520,1153stabilizer := "2^4:A5 < L3(4), 2^4:A6", standardization := 1,1154transitivity := 1, type := "perm" ) ]1155gap> atlasreps:= List( atlasreps, AtlasGroup );;1156gap> tomstabreps:= List( atlasreps, G -> List( tomstabs,1157> i -> RepresentativeTomByGenerators( tom, i, GeneratorsOfGroup( G ) ) ) );;1158gap> List( tomstabreps, x -> List( x, NrMovedPoints ) );1159[ [ 462, 462, 461 ], [ 460, 462, 462 ], [ 462, 461, 462 ] ]1160]]></Example>11611162<P/>11631164More precisely, we see that the point stabilizers in the three1165representations <C>462a</C>, <C>462b</C>, <C>462c</C> lie in the1166subgroup classes <M>149</M>, <M>147</M>, <M>148</M>, respectively,1167of the table of marks.11681169<P/>11701171The point stabilizers in the representations <C>462b</C> and <C>462c</C>1172are isomorphic, but not isomorphic with the point stabilizer in <C>462a</C>.11731174<P/>11751176<Example><![CDATA[1177gap> stabs:= List( atlasreps, G -> Stabilizer( G, 1 ) );;1178gap> List( stabs, IdGroup );1179[ [ 960, 11358 ], [ 960, 11357 ], [ 960, 11357 ] ]1180gap> List( stabs, PerfectIdentification );1181[ [ 960, 2 ], [ 960, 1 ], [ 960, 1 ] ]1182]]></Example>11831184<P/>11851186The three representations are imprimitive.1187The containment of the point stabilizers in maximal subgroups of1188<M>M_{22}</M> can be computed using the table of marks of <M>M_{22}</M>.11891190<P/>11911192<Example><![CDATA[1193gap> maxtom:= MaximalSubgroupsTom( tom );1194[ [ 155, 154, 153, 152, 151, 150, 146, 145 ],1195[ 22, 77, 176, 176, 231, 330, 616, 672 ] ]1196gap> List( tomstabs, i -> List( maxtom[1], j -> ContainedTom( tom, i, j ) ) );1197[ [ 21, 0, 0, 0, 1, 0, 0, 0 ], [ 21, 6, 0, 0, 0, 0, 0, 0 ],1198[ 0, 6, 0, 0, 0, 0, 0, 0 ] ]1199]]></Example>12001201<P/>12021203We see:12041205<List>1206<Item>1207The point stabilizers in <C>462a</C> (subgroups in the class1208<M>149</M> of the table of marks) are contained only in maximal subgroups1209in class <M>154</M>; these groups have the structure <M>2^4:A_6</M>.1210</Item>1211<Item>1212The point stabilizers in <C>462b</C> (subgroups in the class <M>147</M>)1213are contained in maximal subgroups in the classes <M>155</M> and <M>151</M>;1214these groups have the structures <M>L_3(4)</M> and <M>2^4:S_5</M>,1215respectively.1216</Item>1217<Item>1218The point stabilizers in <C>462c</C> (subgroups in the class <M>148</M>)1219are contained in maximal subgroups in the classes <M>155</M> and <M>154</M>.1220</Item>1221</List>12221223<P/>12241225We identify the supergroups of the point stabilizers by computing the1226block systems.12271228<P/>12291230<Example><![CDATA[1231gap> bl:= List( atlasreps, AllBlocks );;1232gap> List( bl, Length );1233[ 1, 3, 2 ]1234gap> List( bl, l -> List( l, Length ) );1235[ [ 6 ], [ 21, 21, 2 ], [ 21, 6 ] ]1236]]></Example>12371238<P/>12391240Note that the two block systems with blocks of length <M>21</M> for1241<C>462b</C> belong to the same supergroups (of the type <M>L_3(4)</M>);1242each of these subgroups fixes two different subsets of <M>21</M> points.12431244<P/>12451246The representation <C>462a</C> is <E>multiplicity-free</E>,1247that is, it splits into a sum of pairwise nonisomorphic irreducible1248representations.1249This can be seen from the fact that the rank of this permutation1250representation (that is, the number of orbits of the point stabilizer)1251is five; each permutation representation with this property is1252multiplicity-free.12531254<P/>12551256The other two representations have rank eight.1257We have seen the ranks in the overview that was shown by1258<Ref Func="DisplayAtlasInfo"/> in the beginning.1259Now we compute the ranks from the permutation groups.12601261<P/>12621263<Example><![CDATA[1264gap> List( atlasreps, RankAction );1265[ 5, 8, 8 ]1266]]></Example>12671268<P/>12691270In fact the two representations <C>462b</C> and <C>462c</C> have the same1271permutation character.1272We check this by computing the possible permutation characters1273of degree <M>462</M> for <M>M_{22}</M>,1274and decomposing them into irreducible characters,1275using the character table from &GAP;'s Character Table Library.12761277<P/>12781279<Example><![CDATA[1280gap> t:= CharacterTable( "M22" );;1281gap> perms:= PermChars( t, 462 );1282[ Character( CharacterTable( "M22" ),1283[ 462, 30, 3, 2, 2, 2, 3, 0, 0, 0, 0, 0 ] ),1284Character( CharacterTable( "M22" ),1285[ 462, 30, 12, 2, 2, 2, 0, 0, 0, 0, 0, 0 ] ) ]1286gap> MatScalarProducts( t, Irr( t ), perms );1287[ [ 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0 ],1288[ 1, 2, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0 ] ]1289]]></Example>12901291<P/>12921293In particular, we see that the rank eight characters are not1294multiplicity-free.12951296</Subsection>12971298<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->12991300</Section>13011302<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->13031304</Chapter>1305130613071308