Quelle chap1.html
Sprache: HTML
|
|
| products/Sources/formale Sprachen/GAP/pkg/ctbllib/doc2/chap1.html |
 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (CTblLibXpls) - Chapter 1: Maintenance Issues for the GAP Character Table Library</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap1" onload="jscontent()">
<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a> <a href="chap1.html">1</a> <a href="chap2.html">2</a> <a href="chap3.html">3</a> <a href="chap4.html">4</a> <a href="chap5.html">5</a> <a href="chap6.html">6</a> <a href="chap7.html">7</a> <a href="chap8.html">8</a> <a href="chap9.html">9</a> <a href="chap10.html">10</a> <a href="chap11.html">11</a> <a href="chapBib.html">Bib</a> <a href="chapInd.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap0.html">[Previous Chapter]</a> <a href="chap2.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap1_mj.html">[MathJax on]</a></p>
<p><a id="X8354C98179CDB193" name="X8354C98179CDB193"></a></p>
<div class="ChapSects"><a href="chap1.html#X8354C98179CDB193">1 <span class="Heading">Maintenance Issues for the <strong class="pkg">GAP</strong> Character Table Library</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X7ECA800587320C2C">1.1 <span class="Heading">Disproving Possible Character Tables (November 2006)</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X795DCCEA7F4D187A">1.1-1 <span class="Heading">A Perfect Pseudo Character Table (November 2006)</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X80F0B4E07B0B2277">1.1-2 <span class="Heading">An Error in the Character Table of <span class="SimpleMath">E_6(2)</span> (March 2016)</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X7D7982CD87413F76">1.1-3 <span class="Heading">An Error in a Power Map of the Character Table of <span class="SimpleMath">2.F_4(2).2</span> (November 2015)</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X836E4B6184F32EF5">1.1-4 <span class="Heading">A Character Table with a Wrong Name (May 2017)</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X8159D79C7F071B33">1.2 <span class="Heading">Some finite factor groups of perfect space groups (February 2014)</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X8710D4947AEB366F">1.2-1 <span class="Heading">Constructing the space groups in question</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X84E7FE70843422B0">1.2-2 <span class="Heading">Constructing the factor groups in question</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X79109A20873E76DA">1.2-3 <span class="Heading">Examples with point group <span class="SimpleMath">A_5</span></span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X83523D1E792F9E01">1.2-4 <span class="Heading">Examples with point group <span class="SimpleMath">L_3(2)</span></span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X7A01A9BC846BE39A">1.2-5 <span class="Heading">Example with point group SL<span class="SimpleMath">_2(7)</span></span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X7D3100B58093F37D">1.2-6 <span class="Heading">Example with point group <span class="SimpleMath">2^3.L_3(2)</span></span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X80800F3B7D6EF06C">1.2-7 <span class="Heading">Examples with point group <span class="SimpleMath">A_6</span></span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X7D43452C79B0EAE1">1.2-8 <span class="Heading">Examples with point group <span class="SimpleMath">L_2(8)</span></span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X8575CE147A9819BF">1.2-9 <span class="Heading">Example with point group <span class="SimpleMath">M_11</span></span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X7C0201B77DA1682A">1.2-10 <span class="Heading">Example with point group <span class="SimpleMath">U_3(3)</span></span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X85D9C329792E58F3">1.2-11 <span class="Heading">Examples with point group <span class="SimpleMath">U_4(2)</span></span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X8635EE0B78A66120">1.2-12 <span class="Heading">A remark on one of the example groups</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X8448022280E82C52">1.3 <span class="Heading">Generality problems (December 2004/October 2015)</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X7D1A66C3844D09B1">1.3-1 <span class="Heading">Listing possible generality problems</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X80EB5D827A78975A">1.3-2 <span class="Heading">A generality problem concerning the group <span class="SimpleMath">J_3</span> (April 2015)</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X82C37532783168AA">1.3-3 <span class="Heading">A generality problem concerning the group <span class="SimpleMath">HN</span> (August 2022)</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X7D8C6D1883C9CECA">1.4 <span class="Heading">Brauer Tables that can be derived from Known Tables</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X7DF018B77E722CA7">1.4-1 <span class="Heading">Brauer Tables via Construction Information</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X795419A287BD228E">1.4-2 <span class="Heading">Liftable Brauer Characters (May 2017)</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap1.html#X864EFF897A854F89">1.5 <span class="Heading">Information about certain subgroups of the Monster group</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X82C7A03684DD7C6E">1.5-1 <span class="Heading">The Monster group does not contain subgroups of the type <span class="SimpleMath">2.U_4(2)</span> (August 2023)</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X87EC0C48866D1BDE">1.5-2 <span class="Heading">Perfect central extensions of <span class="SimpleMath">L_3(4)</span> (August 2023)</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap1.html#X7F605CA28441687F">1.5-3 <span class="Heading">The character table of <span class="SimpleMath">(2 × O_8^+(3)).S_4 ≤ 2.B</span> (October 2023)</span></a>
</span>
</div></div>
</div>
<h3>1 <span class="Heading">Maintenance Issues for the <strong class="pkg">GAP</strong> Character Table Library</span></h3>
<p>This chapter collects examples of computations that arose in the context of maintaining the <strong class="pkg">GAP</strong> Character Table Library. The sections have been added when the issues in question arose; the dates of the additions are shown in the section titles.</p>
<p><a id="X7ECA800587320C2C" name="X7ECA800587320C2C"></a></p>
<h4>1.1 <span class="Heading">Disproving Possible Character Tables (November 2006)</span></h4>
<p>I do not know a necessary and sufficient criterion for checking whether a given matrix together with a list of power maps describes the character table of a finite group. Examples of <em>pseudo character tables</em> (tables which satisfy certain necessary conditions but for which actually no group exists) have been given in <a href="chapBib.html#biBGag86">[Gag86]</a>. Another such example is described in Section <a href="chap2.html#X7E0C603880157C4E"><span class="RefLink">2.4-17</span></a>. The tables in the <strong class="pkg">GAP</strong> Character Table Library satisfy the usual tests. However, there are table candidates for which these tests are not good enough. Another question would be whether a given character table belongs to the group for which it is claimed to belong, see Section <a href="chap1.html#X836E4B6184F32EF5"><span class="RefLink">1.1-4</span></a> for an example.</p>
<p><a id="X795DCCEA7F4D187A" name="X795DCCEA7F4D187A"></a></p>
<h5>1.1-1 <span class="Heading">A Perfect Pseudo Character Table (November 2006)</span></h5>
<p>(This example arose from a discussion with Jack Schmidt.)</p>
<p>Up to version 1.1.3 of the <strong class="pkg">GAP</strong> Character Table Library, the table with identifier <code class="code">"P41/G1/L1/V4/ext2"</code> was not correct. The problem occurs already in the microfiches that are attached to <a href="chapBib.html#biBHP89">[HP89]</a>.</p>
<p>In the following, we show that this table is not the character table of a finite group, using the <strong class="pkg">GAP</strong> library of perfect groups. Currently we do not know how to prove this inconsistency alone from the table.</p>
<p>We start with the construction of the inconsistent table; apart from a little editing, the following input equals the data formerly stored in the file <code class="file">data/ctoholpl.tbl</code> of the <strong class="pkg">GAP</strong> Character Table Library.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tbl:= rec(</span>
<span class="GAPprompt">></span> <span class="GAPinput"> Identifier:= "P41/G1/L1/V4/ext2",</span>
<span class="GAPprompt">></span> <span class="GAPinput"> InfoText:= Concatenation( [</span>
<span class="GAPprompt">></span> <span class="GAPinput"> "origin: Hanrath library,\n",</span>
<span class="GAPprompt">></span> <span class="GAPinput"> "structure is 2^7.L2(8),\n",</span>
<span class="GAPprompt">></span> <span class="GAPinput"> "characters sorted with permutation (12,14,15,13)(19,20)" ] ),</span>
<span class="GAPprompt">></span> <span class="GAPinput"> UnderlyingCharacteristic:= 0,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> SizesCentralizers:= [64512,1024,1024,64512,64,64,64,64,128,128,64,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 64,128,128,18,18,14,14,14,14,14,14,18,18,18,18,18,18],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> ComputedPowerMaps:= [,[1,1,1,1,2,3,3,2,3,2,2,1,3,2,16,16,20,20,22,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 22,18,18,26,26,27,27,23,23],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,4,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 1,21,22,17,18,19,20,16,15,15,16,16,15],,,,[1,2,3,4,5,6,7,8,9,10,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 11,12,13,14,15,16,4,1,4,1,4,1,26,25,28,27,23,24]],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> Irr:= 0,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> AutomorphismsOfTable:= Group( [(23,26,27)(24,25,28),(9,13)(10,14),</span>
<span class="GAPprompt">></span> <span class="GAPinput"> (17,19,21)(18,20,22)] ),</span>
<span class="GAPprompt">></span> <span class="GAPinput"> ConstructionInfoCharacterTable:= ["ConstructClifford",[[[1,2,3,4,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 5,6,7,8,9],[1,7,8,3,9,2],[1,4,5,6,2],[1,2,2,2,2,2,2,2]],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [["L2(8)"],["Dihedral",18],["Dihedral",14],["2^3"]],[[[1,2,3,4],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [1,1,1,1],["elab",4,25]],[[1,2,3,4,4,4,4,4,4,4],[2,6,5,2,3,4,5,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 6,7,8],["elab",10,17]],[[1,2],[3,4],[[1,1],[-1,1]]],[[1,3],[4,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 2],[[1,1],[-1,1]]],[[1,3],[5,3],[[1,1],[-1,1]]],[[1,3],[6,4],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [[1,1],[-1,1]]],[[1,2],[7,2],[[1,1],[1,-1]]],[[1,2],[8,3],[[1,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> 1],[-1,1]]],[[1,2],[9,5],[[1,1],[1,-1]]]]]],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ConstructClifford( tbl, tbl.ConstructionInfoCharacterTable[2] );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ConvertToLibraryCharacterTableNC( tbl );;</span>
</pre></div>
<p>Suppose that there is a group <span class="SimpleMath">G</span>, say, with this table. Then <span class="SimpleMath">G</span> is perfect since the table has only one linear character.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( LinearCharacters( tbl ) );</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">IsPerfectCharacterTable( tbl );</span>
true
</pre></div>
<p>The table satisfies the orthogonality relations, the structure constants are nonnegative integers, and symmetrizations of the irreducibles decompose into the irreducibles, with nonnegative integral coefficients.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsInternallyConsistent( tbl );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">irr:= Irr( tbl );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">test:= Concatenation( List( [ 2 .. 7 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> n -> Symmetrizations( tbl, irr, n ) ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Append( test, Set( Tensored( irr, irr ) ) );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fail in Decomposition( irr, test, "nonnegative" );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">if ForAny( Tuples( [ 1 .. NrConjugacyClasses( tbl ) ], 3 ),</span>
<span class="GAPprompt">></span> <span class="GAPinput"> t -> not ClassMultiplicationCoefficient( tbl, t[1], t[2], t[3] )</span>
<span class="GAPprompt">></span> <span class="GAPinput"> in NonnegativeIntegers ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput"> Error( "contradiction" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">fi;</span>
</pre></div>
<p>The <strong class="pkg">GAP</strong> Library of Perfect Groups contains representatives of the four isomorphism types of perfect groups of order <span class="SimpleMath">|G| = 64512</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">n:= Size( tbl );</span>
64512
<span class="GAPprompt">gap></span> <span class="GAPinput">NumberPerfectGroups( n );</span>
4
<span class="GAPprompt">gap></span> <span class="GAPinput">grps:= List( [ 1 .. 4 ], i -> PerfectGroup( IsPermGroup, n, i ) );</span>
[ L2(8) 2^6 E 2^1, L2(8) N 2^6 E 2^1 I, L2(8) N 2^6 E 2^1 II,
L2(8) N 2^6 E 2^1 III ]
</pre></div>
<p>If we believe that the classification of perfect groups of order <span class="SimpleMath">|G|</span> is correct then all we have to do is to show that none of the character tables of these four groups is equivalent to the given table.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tbls:= List( grps, CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">List( tbls,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> x -> TransformingPermutationsCharacterTables( x, tbl ) );</span>
[ fail, fail, fail, fail ]
</pre></div>
<p>In fact, already the matrices of irreducible characters of the four groups do not fit to the given table.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">List( tbls,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> t -> TransformingPermutations( Irr( t ), Irr( tbl ) ) );</span>
[ fail, fail, fail, fail ]
</pre></div>
<p>Let us look closer at the tables in question. Each character table of a perfect group of order <span class="SimpleMath">64512</span> has exactly one irreducible character of degree <span class="SimpleMath">63</span> that takes exactly the values <span class="SimpleMath">-1</span>, <span class="SimpleMath">0</span>, <span class="SimpleMath">7</span>, and <span class="SimpleMath">63</span>; moreover, the value <span class="SimpleMath">7</span> occurs in exactly two classes.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">testchars:= List( tbls,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> t -> Filtered( Irr( t ),</span>
<span class="GAPprompt">></span> <span class="GAPinput"> x -> x[1] = 63 and Set( x ) = [ -1, 0, 7, 63 ] ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">List( testchars, Length );</span>
[ 1, 1, 1, 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( testchars, l -> Number( l[1], x -> x = 7 ) );</span>
[ 2, 2, 2, 2 ]
</pre></div>
<p>(Another way to state this is that in each of the four tables <span class="SimpleMath">t</span> in question, there are ten preimage classes of the involution class in the simple factor group <span class="SimpleMath">L_2(8)</span>, there are eight preimage classes of this class in the factor group <span class="SimpleMath">2^6.L_2(8)</span>, and that the unique class in which an irreducible degree <span class="SimpleMath">63</span> character of this factor group takes the value <span class="SimpleMath">7</span> splits in <span class="SimpleMath">t</span>.)</p>
<p>In the erroneous table, however, there is only one class with the value <span class="SimpleMath">7</span> in this character.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">testchars:= List( [ tbl ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> t -> Filtered( Irr( t ),</span>
<span class="GAPprompt">></span> <span class="GAPinput"> x -> x[1] = 63 and Set( x ) = [ -1, 0, 7, 63 ] ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">List( testchars, Length );</span>
[ 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( testchars, l -> Number( l[1], x -> x = 7 ) );</span>
[ 1 ]
</pre></div>
<p>This property can be checked easily for the displayed table stored in fiche <span class="SimpleMath">2</span>, row <span class="SimpleMath">4</span>, column <span class="SimpleMath">7</span> of <a href="chapBib.html#biBHP89">[HP89]</a>, with the name <code class="code">6L1<>Z^7<>L2(8); V4; MOD 2</code>, and it turns out that this table is not correct.</p>
<p>Note that these microfiches contain <em>two</em> tables of order <span class="SimpleMath">64512</span>, and there were <em>three</em> tables of groups of that order in the <strong class="pkg">GAP</strong> Character Table Library that contain <code class="code">origin: Hanrath library</code> in their <code class="func">InfoText</code> (<a href="../../../doc/ref/chap12.html#X871562FD7F982C12"><span class="RefLink">Reference: InfoText</span></a>) value. Besides the incorrect table, these library tables are the character tables of the groups <code class="code">PerfectGroup( 64512, 1 )</code> and <code class="code">PerfectGroup( 64512, 3 )</code>, respectively. (The matrices of irreducible characters of these tables are equivalent.)</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Filtered( [ 1 .. 4 ], i -></span>
<span class="GAPprompt">></span> <span class="GAPinput"> TransformingPermutationsCharacterTables( tbls[i],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> CharacterTable( "P41/G1/L1/V1/ext2" ) ) <> fail );</span>
[ 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Filtered( [ 1 .. 4 ], i -></span>
<span class="GAPprompt">></span> <span class="GAPinput"> TransformingPermutationsCharacterTables( tbls[i],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> CharacterTable( "P41/G1/L1/V2/ext2" ) ) <> fail );</span>
[ 3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">TransformingPermutations( Irr( tbls[1] ), Irr( tbls[3] ) ) <> fail;</span>
true
</pre></div>
<p>Since version 1.2 of the <strong class="pkg">GAP</strong> Character Table Library, the character table with the <code class="func">Identifier</code> (<a href="../../../doc/ref/chap70.html#X810E53597B5BB4F8"><span class="RefLink">Reference: Identifier for tables of marks</span></a>) value <code class="code">"P41/G1/L1/V4/ext2"</code> corresponds to the group <code class="code">PerfectGroup( 64512, 4 )</code>. The choice of this group was somewhat arbitrary since the vector system <code class="code">V4</code> seems to be not defined in <a href="chapBib.html#biBHP89">[HP89]</a>; anyhow, this group and the remaining perfect group, <code class="code">PerfectGroup( 64512, 2 )</code>, have equivalent matrices of irreducibles.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Filtered( [ 1 .. 4 ], i -></span>
<span class="GAPprompt">></span> <span class="GAPinput"> TransformingPermutationsCharacterTables( tbls[i],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> CharacterTable( "P41/G1/L1/V4/ext2" ) ) <> fail );</span>
[ 4 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">TransformingPermutations( Irr( tbls[2] ), Irr( tbls[4] ) ) <> fail;</span>
true
</pre></div>
<p><a id="X80F0B4E07B0B2277" name="X80F0B4E07B0B2277"></a></p>
<h5>1.1-2 <span class="Heading">An Error in the Character Table of <span class="SimpleMath">E_6(2)</span> (March 2016)</span></h5>
<p>In March 2016, Bill Unger computed the character table of the simple group <span class="SimpleMath">E_6(2)</span> with Magma (see <a href="chapBib.html#biBCP96">[CP96]</a>) and compared it with the table that was contained in the <strong class="pkg">GAP</strong> Character Table Library since 2000. It turned out that the two tables did not coincide.</p>
<p>The differences concern irrational character values on classes of element order <span class="SimpleMath">91</span> and power map values on these classes. (The character values and power maps fit to each other in both tables; thus it may be that the assumption of a wrong power has implied the wrong character values, or vice versa.) Specifically, the <span class="SimpleMath">11</span>th power map in the <strong class="pkg">GAP</strong> table fixed all elements of order <span class="SimpleMath">91</span>. Using the smallest matrix representation of <span class="SimpleMath">E_6(2)</span> over the field with two elements, one can easily find an element <span class="SimpleMath">g</span> of order <span class="SimpleMath">91</span>, and show that the characteristic polynomials of <span class="SimpleMath">g</span> and <span class="SimpleMath">g^11</span> differ. Hence these two elements cannot be conjugate in <span class="SimpleMath">E_6(2)</span>. In other words, the <strong class="pkg">GAP</strong> table was wrong.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= AtlasGroup( "E6(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat x:= PseudoRandom( g ); until Order( x ) = 91;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">CharacteristicPolynomial( x ) = CharacteristicPolynomial( x^11 );</span>
false
</pre></div>
<p>The wrong <strong class="pkg">GAP</strong> table has been corrected in version 1.3.0 of the <strong class="pkg">GAP</strong> Character Table Library.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "E6(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ord91:= Positions( OrdersClassRepresentatives( t ), 91 );</span>
[ 163, 164, 165, 166, 167, 168 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PowerMap( t, 11 ){ ord91 };</span>
[ 167, 168, 163, 164, 165, 166 ]
</pre></div>
<p><a id="X7D7982CD87413F76" name="X7D7982CD87413F76"></a></p>
<h5>1.1-3 <span class="Heading">An Error in a Power Map of the Character Table of <span class="SimpleMath">2.F_4(2).2</span> (November 2015)</span></h5>
<p>As a part of the computations for <a href="chapBib.html#biBBMO17">[BMO17]</a>, the character table of the group <span class="SimpleMath">2.F_4(2).2</span> was computed automatically from a representation of the group, using Magma (see <a href="chapBib.html#biBCP96">[CP96]</a>). It turned out that the <span class="SimpleMath">2</span>-nd power map that had been stored on the library character table of <span class="SimpleMath">2.F_4(2).2</span> had been wrong.</p>
<p>In fact, this was the one and only case of a power map for an <strong class="pkg">Atlas</strong> group which was not determined by the character table, and the <code class="func">InfoText</code> (<a href="../../../doc/ref/chap12.html#X871562FD7F982C12"><span class="RefLink">Reference: InfoText</span></a>) value of the character table had mentioned the two alternatives.</p>
<p>Note that the ambiguity is not present in the table of the factor group <span class="SimpleMath">F_4(2).2</span>, and only four faithful irreducible characters of <span class="SimpleMath">2.F_4(2).2</span> distinguish the four relevant conjugacy classes.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "2.F4(2).2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">f:= CharacterTable( "F4(2).2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">map:= PowerMap( t, 2 );</span>
[ 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 11, 11, 3, 3, 3, 5, 5, 5, 3, 6, 6, 5,
5, 7, 7, 5, 8, 7, 29, 29, 9, 9, 9, 9, 11, 11, 9, 9, 9, 9, 11, 11,
43, 43, 20, 20, 20, 14, 14, 13, 13, 20, 21, 24, 28, 28, 57, 57, 29,
29, 29, 29, 33, 33, 35, 37, 37, 37, 37, 33, 33, 37, 37, 35, 41, 41,
42, 42, 79, 79, 43, 43, 83, 83, 45, 45, 47, 47, 53, 53, 91, 91, 57,
57, 61, 61, 61, 98, 98, 70, 70, 63, 63, 81, 81, 83, 83, 1, 6, 7,
11, 16, 17, 24, 24, 21, 27, 27, 25, 26, 29, 41, 53, 53, 53, 46, 56,
56, 56, 56, 62, 75, 75, 78, 78, 77, 77, 79, 79, 86, 86, 85, 85, 88,
88, 88, 88, 95, 95, 96, 96 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PositionSublist( map, [ 86, 86, 85, 85 ] );</span>
140
<span class="GAPprompt">gap></span> <span class="GAPinput">OrdersClassRepresentatives( t ){ [ 140 .. 143 ] };</span>
[ 32, 32, 32, 32 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">SizesCentralizers( t ){ [ 140 .. 143 ] };</span>
[ 64, 64, 64, 64 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">GetFusionMap( t, f ){ [ 140 ..143 ] };</span>
[ 86, 86, 87, 87 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PowerMap( f, 2 ){ [ 86, 87 ] };</span>
[ 50, 50 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pos:= PositionsProperty( Irr( t ),</span>
<span class="GAPprompt">></span> <span class="GAPinput"> x -> x[1] <> x[2] and Length( Set( x{ [ 140 .. 143 ] } ) ) > 1 );</span>
[ 144, 145, 146, 147 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( pos, i -> Irr(t)[i]{ [ 140 .. 143 ] } );</span>
[ [ 2*E(16)-2*E(16)^7, -2*E(16)+2*E(16)^7, 2*E(16)^3-2*E(16)^5,
-2*E(16)^3+2*E(16)^5 ],
[ -2*E(16)+2*E(16)^7, 2*E(16)-2*E(16)^7, -2*E(16)^3+2*E(16)^5,
2*E(16)^3-2*E(16)^5 ],
[ -2*E(16)^3+2*E(16)^5, 2*E(16)^3-2*E(16)^5, 2*E(16)-2*E(16)^7,
-2*E(16)+2*E(16)^7 ],
[ 2*E(16)^3-2*E(16)^5, -2*E(16)^3+2*E(16)^5, -2*E(16)+2*E(16)^7,
2*E(16)-2*E(16)^7 ] ]
</pre></div>
<p>I had not found a suitable subgroup of <span class="SimpleMath">2.F_4(2).2</span> whose character table could be used to decide the question which of the two alternatives is the correct one.</p>
<p><a id="X836E4B6184F32EF5" name="X836E4B6184F32EF5"></a></p>
<h5>1.1-4 <span class="Heading">A Character Table with a Wrong Name (May 2017)</span></h5>
<p>(This example is much older.)</p>
<p>The character table that is shown in <a href="chapBib.html#biBOst86">[Ost86, p. 126 f.]</a> is claimed to be the table of a Sylow <span class="SimpleMath">2</span> subgroup <span class="SimpleMath">P</span> of the sporadic simple Lyons group <span class="SimpleMath">Ly</span>. This table had been contained in the character table library of the <strong class="pkg">CAS</strong> system (see <a href="chapBib.html#biBNPP84">[NPP84]</a>), which was one of the predecessors of <strong class="pkg">GAP</strong>.</p>
<p>It is easy to see that no subgroup of <span class="SimpleMath">Ly</span> can have this character table. Namely, the group of that table contains elements of order eight with centralizer order <span class="SimpleMath">2^6</span>, and this does not occur in <span class="SimpleMath">Ly</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tbl:= CharacterTable( "Ly" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">orders:= OrdersClassRepresentatives( tbl );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">order8:= Filtered( [ 1 .. Length( orders ) ], x -> orders[x] = 8 );</span>
[ 12, 13 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">SizesCentralizers( tbl ){ order8 } / 2^6;</span>
[ 15/2, 3/2 ]
</pre></div>
<p>The table of <span class="SimpleMath">P</span> has been computed in <a href="chapBib.html#biBBre91">[Bre91]</a> with character theoretic methods. Nowadays it would be no problem to take a permutation representation of <span class="SimpleMath">Ly</span>, to compute its Sylow <span class="SimpleMath">2</span> subgroup, and use this group to compute its character table. However, the task is even easier if we assume that <span class="SimpleMath">Ly</span> has a subgroup of the structure <span class="SimpleMath">3.McL.2</span>. This subgroup is of odd index, hence it contains a conjugate of <span class="SimpleMath">P</span>. Clearly the Sylow <span class="SimpleMath">2</span> subgroups in the factor group <span class="SimpleMath">McL.2</span> are isomorphic with <span class="SimpleMath">P</span>. Thus we can start with a rather small permutation representation.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= AtlasGroup( "McL.2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">NrMovedPoints( g );</span>
275
<span class="GAPprompt">gap></span> <span class="GAPinput">syl:= SylowSubgroup( g, 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pc:= Image( IsomorphismPcGroup( syl ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( pc );;</span>
</pre></div>
<p>The character table coincides with the one which is stored in the Character Table Library.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsRecord( TransformingPermutationsCharacterTables( t,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> CharacterTable( "LyN2" ) ) );</span>
true
</pre></div>
<p><a id="X8159D79C7F071B33" name="X8159D79C7F071B33"></a></p>
<h4>1.2 <span class="Heading">Some finite factor groups of perfect space groups (February 2014)</span></h4>
<p>If one wants to find a group to which a given character table from the <strong class="pkg">GAP</strong> Character Table Library belongs, one can try the function <code class="func">GroupInfoForCharacterTable</code> (<a href="../doc/chap3.html#X78DCD38B7D96D8A4"><span class="RefLink">CTblLib: GroupInfoForCharacterTable</span></a>). For a long time, this was not successful in the case of <span class="SimpleMath">16</span> character tables that had been computed by W. Hanrath (see Section <q>Ordinary and Brauer Tables in the <strong class="pkg">GAP</strong> Character Table Library</q> in the <strong class="pkg">CTblLib</strong> manual).</p>
<p>Using the information from <a href="chapBib.html#biBHP89">[HP89]</a>, it is straightforward to construct such groups as factor groups of infinite groups. Since version 1.3.0 of the <strong class="pkg">CTblLib</strong> package, calling <code class="func">GroupInfoForCharacterTable</code> (<a href="../doc/chap3.html#X78DCD38B7D96D8A4"><span class="RefLink">CTblLib: GroupInfoForCharacterTable</span></a>) for the <span class="SimpleMath">16</span> library tables in question yields nonempty lists and thus allows one to access the results of these constructions, via the function <code class="code">CTblLib.FactorGroupOfPerfectSpaceGroup</code>. This is an undocumented auxiliary function that becomes available automatically when <code class="func">GroupInfoForCharacterTable</code> (<a href="../doc/chap3.html#X78DCD38B7D96D8A4"><span class="RefLink">CTblLib: GroupInfoForCharacterTable</span></a>) has been called for the first time.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">GroupInfoForCharacterTable( "A5" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsBound( CTblLib.FactorGroupOfPerfectSpaceGroup );</span>
true
</pre></div>
<p>Below we list the <span class="SimpleMath">16</span> group constructions. In each case, an epimorphism from the space group in question is defined by mapping the generators returned by by the function <code class="code">generatorsOfPerfectSpaceGroup</code> defined below to the generators stored in the attribute <code class="func">GeneratorsOfGroup</code> (<a href="../../../doc/ref/chap39.html#X79C44528864044C5"><span class="RefLink">Reference: GeneratorsOfGroup</span></a>) of the group returned by <code class="code">CTblLib.FactorGroupOfPerfectSpaceGroup</code>.</p>
<p><a id="X8710D4947AEB366F" name="X8710D4947AEB366F"></a></p>
<h5>1.2-1 <span class="Heading">Constructing the space groups in question</span></h5>
<p>In <a href="chapBib.html#biBHP89">[HP89]</a>, a space group <span class="SimpleMath">S</span> is described as a subgroup <span class="SimpleMath">{ M(g, t); g ∈ P, t ∈ T }</span> of GL<span class="SimpleMath">(d+1, ℤ)</span>, where</p>
<p><div class="pcenter"><table> <tr> <td class="tdright"><span class="SimpleMath">M(g, t)</span></td> <td class="tdcenter"><span class="SimpleMath"> = </span></td> <td class="tdleft"> <table class="GAPDocTable"> <tr> <td class="tdright"><span class="SimpleMath">g</span></td> <td class="tdright"><span class="SimpleMath">0</span></td> </tr> <tr> <td class="tdright"><span class="SimpleMath">V(g)+t</span></td> <td class="tdright"><span class="SimpleMath">1</span></td> </tr> </table> </td> </tr> </table> </div></p>
<p>the <em>point group</em> <span class="SimpleMath">P</span> of <span class="SimpleMath">S</span> is a finite subgroup of GL<span class="SimpleMath">(d, ℤ)</span>, the <em>translation lattice</em> <span class="SimpleMath">T</span> of <span class="SimpleMath">S</span> is a sublattice of <span class="SimpleMath">ℤ^d</span>, and the <em>vector system</em> <span class="SimpleMath">V</span> of <span class="SimpleMath">S</span> is a map from <span class="SimpleMath">P</span> to <span class="SimpleMath">ℤ^d</span>. Note that <span class="SimpleMath">V</span> maps the identity matrix <span class="SimpleMath">I ∈</span> GL<span class="SimpleMath">(d, ℤ)</span> to the zero vector, and <span class="SimpleMath">M(T):= { M(I, t); t ∈ T }</span> is a normal subgroup of <span class="SimpleMath">S</span> that is isomorphic with <span class="SimpleMath">T</span>. More generally, <span class="SimpleMath">M(n T)</span> is a normal subgroup of <span class="SimpleMath">S</span>, for any positive integer <span class="SimpleMath">n</span>.</p>
<p>Specifically, <span class="SimpleMath">P</span> is given by generators <span class="SimpleMath">g_1, g_2, ..., g_k</span>, <span class="SimpleMath">T</span> is given by a <span class="SimpleMath">ℤ</span>-basis <span class="SimpleMath">B = { b_1, b_2, ..., b_d }</span> of <span class="SimpleMath">T</span>, and <span class="SimpleMath">V</span> is given by the vectors <span class="SimpleMath">V(g_1), V(g_2), ..., V(g_k)</span>.</p>
<p>In the examples below, the matrix representation of <span class="SimpleMath">P</span> is irreducible, so we need just the following <span class="SimpleMath">k+1</span> elements to generate <span class="SimpleMath">S</span>:</p>
<p><div class="pcenter"> <table> <tr> <td class="tdleft"> <table class="GAPDocTable"> <tr> <td class="tdright"><span class="SimpleMath">g_1</span></td> <td class="tdright"><span class="SimpleMath">0</span></td> </tr> <tr> <td class="tdright"><span class="SimpleMath">V(g_1)</span></td> <td class="tdright"><span class="SimpleMath">1</span></td> </tr> </table> <td class="tdleft"> , </td> </td> <td class="tdleft"> <table class="GAPDocTable"> <tr> <td class="tdright"><span class="SimpleMath">g_2</span></td> <td class="tdright"><span class="SimpleMath">0</span></td> </tr> <tr> <td class="tdright"><span class="SimpleMath">V(g_2)</span></td> <td class="tdright"><span class="SimpleMath">1</span></td> </tr> </table> </td> <td class="tdleft"> , ..., </td> <td class="tdleft"> <table class="GAPDocTable"> <tr> <td class="tdright"><span class="SimpleMath">g_k</span></td> <td class="tdright"><span class="SimpleMath">0</span></td> </tr> <tr> <td class="tdright"><span class="SimpleMath">V(g_k)</span></td> <td class="tdright"><span class="SimpleMath">1</span></td> </tr> </table> </td> <td class="tdleft"> , </td> <td class="tdleft"> <table class="GAPDocTable"> <tr> <td class="tdright"><span class="SimpleMath">I</span></td> <td class="tdright"><span class="SimpleMath">0</span></td> </tr> <tr> <td class="tdright"><span class="SimpleMath">b_1</span></td> <td class="tdright"><span class="SimpleMath">1</span></td> </tr> </table> </td> <td class="tdleft"> . </td> </tr> </table> </div></p>
<p>These generators are returned by the function <code class="code">generatorsOfPerfectSpaceGroup</code>, when the inputs are <span class="SimpleMath">[ g_1, g_2, ..., g_k ]</span>, <span class="SimpleMath">[ V(g_1), V(g_2), ..., V(g_k) ]</span>, and <span class="SimpleMath">b_1</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">generatorsOfPerfectSpaceGroup:= function( Pgens, V, t )</span>
<span class="GAPprompt">></span> <span class="GAPinput"> local d, result, i, m;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> d:= Length( Pgens[1] );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> result:= [];</span>
<span class="GAPprompt">></span> <span class="GAPinput"> for i in [ 1 .. Length( Pgens ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput"> m:= IdentityMat( d+1 );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> m{ [ 1 .. d ] }{ [ 1 .. d ] }:= Pgens[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput"> m[ d+1 ]{ [ 1 .. d ] }:= V[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput"> result[i]:= m;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> od;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> m:= IdentityMat( d+1 );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> m[ d+1 ]{ [ 1 .. d ] }:= t;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> Add( result, m );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> return result;</span>
<span class="GAPprompt">></span> <span class="GAPinput">end;;</span>
</pre></div>
<p><a id="X84E7FE70843422B0" name="X84E7FE70843422B0"></a></p>
<h5>1.2-2 <span class="Heading">Constructing the factor groups in question</span></h5>
<p>The space group <span class="SimpleMath">S</span> acts on <span class="SimpleMath">ℤ^d</span>, via <span class="SimpleMath">v ⋅ M(g, t) = v g + V(g) + t</span>. A (not necessarily faithful) representation of <span class="SimpleMath">S/M(n T)</span> can be obtained from the corresponding action of <span class="SimpleMath">S</span> on <span class="SimpleMath">ℤ^d/(n ℤ^d)</span>, that is, by reducing the vectors modulo <span class="SimpleMath">n</span>. For the <strong class="pkg">GAP</strong> computations, we work instead with vectors of length <span class="SimpleMath">d+1</span>, extending each vector in <span class="SimpleMath">ℤ^d</span> by <span class="SimpleMath">1</span> in the last position, and acting on these vectors by right multiplicaton with elements of <span class="SimpleMath">S</span>. Multiplication followed by reduction modulo <span class="SimpleMath">n</span> is implemented by the action function returned by <code class="code">multiplicationModulo</code> when this is called with argument <span class="SimpleMath">n</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">multiplicationModulo:= n -> function( v, g )</span>
<span class="GAPprompt">></span> <span class="GAPinput"> return List( v * g, x -> x mod n ); end;;</span>
</pre></div>
<p>In some of the examples, the representation of <span class="SimpleMath">P</span> given in <a href="chapBib.html#biBHP89">[HP89]</a> is the action on the factor of a permutation module modulo its trivial submodule. For that, we provide the function <code class="code">deletedPermutationMat</code>, cf. <a href="chapBib.html#biBHP89">[HP89, p. 269]</a>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">deletedPermutationMat:= function( pi, n )</span>
<span class="GAPprompt">></span> <span class="GAPinput"> local mat, j, i;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> mat:= PermutationMat( pi, n );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> mat:= mat{ [ 1 .. n-1 ] }{ [ 1 .. n-1 ] };</span>
<span class="GAPprompt">></span> <span class="GAPinput"> j:= n ^ pi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> if j <> n then</span>
<span class="GAPprompt">></span> <span class="GAPinput"> for i in [ 1 .. n-1 ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput"> mat[i][j]:= -1;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> od;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> return mat;</span>
<span class="GAPprompt">></span> <span class="GAPinput">end;;</span>
</pre></div>
<p>After constructing permutation generators for the example groups, we verify that the groups fit to the character tables from the <strong class="pkg">GAP</strong> Character Table Library and to the permutation generators stored for the construction of the group via <code class="code">CTblLib.FactorGroupOfPerfectSpaceGroup</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">verifyFactorGroup:= function( gens, id )</span>
<span class="GAPprompt">></span> <span class="GAPinput"> local sm, act, stored, hom;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> sm:= SmallerDegreePermutationRepresentation( Group( gens ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> gens:= List( gens, x -> x^sm );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> act:= Images( sm );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> if not IsRecord( TransformingPermutationsCharacterTables(</span>
<span class="GAPprompt">></span> <span class="GAPinput"> CharacterTable( act ),</span>
<span class="GAPprompt">></span> <span class="GAPinput"> CharacterTable( id ) ) ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput"> return "wrong character table";</span>
<span class="GAPprompt">></span> <span class="GAPinput"> fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> GroupInfoForCharacterTable( id );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> stored:= CTblLib.FactorGroupOfPerfectSpaceGroup( id );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> hom:= GroupHomomorphismByImages( stored, act,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> GeneratorsOfGroup( stored ), gens );</span>
<span class="GAPprompt">></span> <span class="GAPinput"> if hom = fail or not IsBijective( hom ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput"> return "wrong group";</span>
<span class="GAPprompt">></span> <span class="GAPinput"> fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> return true;</span>
<span class="GAPprompt">></span> <span class="GAPinput">end;;</span>
</pre></div>
<p><a id="X79109A20873E76DA" name="X79109A20873E76DA"></a></p>
<h5>1.2-3 <span class="Heading">Examples with point group <span class="SimpleMath">A_5</span></span></h5>
<p>There are two examples with <span class="SimpleMath">d = 5</span>. The generators of the point group are as follows (see <a href="chapBib.html#biBHP89">[HP89, p. 272]</a>).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">a:= deletedPermutationMat( (1,3)(2,4), 6 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">b:= deletedPermutationMat( (1,2,3)(4,5,6), 6 );;</span>
</pre></div>
<p>In both cases, the vector system is <span class="SimpleMath">V_2</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">v:= [ [ 2, 2, 0, 0, 1 ], 0 * b[1] ];;</span>
</pre></div>
<p>In the first example, the translation lattice is the sublattice <span class="SimpleMath">L = 2 L_1</span> of the full lattice <span class="SimpleMath">L_1 = ℤ^d</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= [ 2, 0, 0, 0, 0 ];;</span>
</pre></div>
<p>The library character table with identifier <code class="code">"P1/G2/L1/V2/ext4"</code> belongs to the factor group of <span class="SimpleMath">S</span> modulo the normal subgroup <span class="SimpleMath">M(4 L)</span>, so we compute the action on an orbit modulo <span class="SimpleMath">8</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">sgens:= generatorsOfPerfectSpaceGroup( [ a, b ], v, t );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= Group( sgens );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fun:= multiplicationModulo( 8 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">orb:= Orbit( g, [ 1, 0, 0, 0, 0, 1 ], fun );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">permgens:= List( sgens, x -> Permutation( x, orb, fun ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">verifyFactorGroup( permgens, "P1/G2/L1/V2/ext4" );</span>
true
</pre></div>
<p>In the second example, the translation lattice is the sublattice <span class="SimpleMath">2 L_2</span> of <span class="SimpleMath">ℤ^d</span> where <span class="SimpleMath">L_2</span> has the following basis.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">bas:= [ [-1,-1, 1, 1, 1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [-1, 1,-1, 1, 1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 1, 1, 1,-1,-1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 1, 1,-1,-1, 1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [-1, 1, 1,-1, 1 ] ];;</span>
</pre></div>
<p>For the sake of simplicity, we rewrite the action of the point group to one on <span class="SimpleMath">L_2</span>, and we adjust also the vector system.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">B:= Basis( Rationals^Length( bas ), bas );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">abas:= List( bas, x -> Coefficients( B, x * a ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">bbas:= List( bas, x -> Coefficients( B, x * b ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vbas:= List( v, x -> Coefficients( B, x ) );</span>
[ [ 3/2, 1, 2, 3/2, -1 ], [ 0, 0, 0, 0, 0 ] ]
</pre></div>
<p>In order to work with integral matrices (which is necessary because <code class="code">multiplicationModulo</code> uses <strong class="pkg">GAP</strong>'s mod operator), we double both the vector system and the translation lattice.
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">vbas:= vbas * 2;</span>
[ [ 3, 2, 4, 3, -2 ], [ 0, 0, 0, 0, 0 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= 2 * t;</span>
[ 4, 0, 0, 0, 0 ]
</pre></div>
<p>The library character table with identifier <code class="code">"P1/G2/L2/V2/ext4"</code> belongs to the factor group of <span class="SimpleMath">S</span> modulo the normal subgroup <span class="SimpleMath">M(8 L_2)</span>; since we have doubled the lattice, we compute the action on an orbit modulo <span class="SimpleMath">16</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">sgens:= generatorsOfPerfectSpaceGroup( [ abas, bbas ], vbas, t );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= Group( sgens );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fun:= multiplicationModulo( 16 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">orb:= Orbit( g, [ 0, 0, 0, 0, 0, 1 ], fun );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">permgens:= List( sgens, x -> Permutation( x, orb, fun ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">verifyFactorGroup( permgens, "P1/G2/L2/V2/ext4" );</span>
true
</pre></div>
<p><a id="X83523D1E792F9E01" name="X83523D1E792F9E01"></a></p>
<h5>1.2-4 <span class="Heading">Examples with point group <span class="SimpleMath">L_3(2)</span></span></h5>
<p>There are three examples with <span class="SimpleMath">d = 6</span> and one example with <span class="SimpleMath">d = 8</span>. The generators of the point group for the first three examples are as follows (see <a href="chapBib.html#biBHP89">[HP89, p. 290]</a>).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">a:= [ [ 0, 1, 0, 1, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 1, 0, 1, 1, 1, 1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [-1,-1,-1,-1, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 0, 0,-1,-1,-1,-1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 1, 1, 1, 1, 0, 1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 0, 0, 1, 0, 1, 0 ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">b:= [ [-1, 0, 0, 0, 0,-1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 0, 0,-1, 0,-1, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 1, 1, 1, 1, 1, 1 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 0, 0, 1, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [-1,-1,-1, 0, 0, 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [ 1, 0, 0, 0, 0, 0 ] ];;</span>
</pre></div>
<p>The first vector system is the trivial vector system <span class="SimpleMath">V_1</span> (that is, the space group <span class="SimpleMath">S</span> is a split extension of the point group and the translation lattice), and the translation lattice is the full lattice <span class="SimpleMath">L_1 = ℤ^d</span>.</p>
<p>The library character table with identifier <code class="code">"P11/G1/L1/V1/ext4"</code> belongs to the factor group of <span class="SimpleMath">S</span> modulo the normal subgroup <span class="SimpleMath">M(4 L_1)</span>, so we compute the action on an orbit modulo <span class="SimpleMath">4</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">v:= List( [ 1, 2 ], i -> 0 * a[1] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= [ 1, 0, 0, 0, 0, 0 ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sgens:= generatorsOfPerfectSpaceGroup( [ a, b ], v, t );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= Group( sgens );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fun:= multiplicationModulo( 4 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">seed:= [ 1, 0, 0, 0, 0, 0, 1 ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">orb:= Orbit( g, seed, fun );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">permgens:= List( sgens, x -> Permutation( x, orb, fun ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">verifyFactorGroup( permgens, "P11/G1/L1/V1/ext4" );</span>
true
</pre></div>
<p>The second vector system is <span class="SimpleMath">V_2</span>, and the translation lattice is <span class="SimpleMath">2 L_1</span>.</p>
<p>The library character table with identifier <code class="code">"P11/G1/L1/V2/ext4"</code> belongs to the factor group of <span class="SimpleMath">S</span> modulo the normal subgroup <span class= | |