Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

SSL chap8.html

  Sprache: HTML
 

 products/Sources/formale Sprachen/GAP/pkg/ctbllib/doc2/chap8.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 8: Permutation Characters in GAP</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="chap8"  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="chap7.html">[Previous Chapter]</a>    <a href="chap9.html">[Next Chapter]</a>   </div>

<p id="mathjaxlink" class="pcenter"><a href="chap8_mj.html">[MathJax on]</a></p>
<p><a id="X7A7EEBE9858333E1" name="X7A7EEBE9858333E1"></a></p>
<div class="ChapSects"><a href="chap8.html#X7A7EEBE9858333E1">8 <span class="Heading">Permutation Characters in <strong class="pkg">GAP</strong></span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X86A1325B82E5AECD">8.1 <span class="Heading">Some Computations with <span class="SimpleMath">M_24</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X79C9051F805851DB">8.2 <span class="Heading">All Possible Permutation Characters of <span class="SimpleMath">M_11</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X81A5FC968782CFC3">8.3 <span class="Heading">The Action of <span class="SimpleMath">U_6(2)</span> on the Cosets of <span class="SimpleMath">M_22</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X7EE1811C8496C428">8.4 <span class="Heading">Degree <span class="SimpleMath">20736</span> Permutation Characters of <span class="SimpleMath">U_6(2)</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X7DC6A6E785A347C8">8.5 <span class="Heading">Degree <span class="SimpleMath">57572775</span> Permutation Characters of <span class="SimpleMath">O_8^+(3)</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X792D2C2380591D8D">8.6 <span class="Heading">The Action of <span class="SimpleMath">O_7(3).2</span> on the Cosets of <span class="SimpleMath">2^7.S_7</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X875B361C8512939F">8.7 <span class="Heading">The Action of <span class="SimpleMath">O_8^+(3).2_1</span> on the Cosets of <span class="SimpleMath">2^7.A_8</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X7B1DFAF98182CFF4">8.8 <span class="Heading">The Action of <span class="SimpleMath">S_4(4).4</span> on the Cosets of <span class="SimpleMath">5^2.[2^5]</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X7F04F0C684AA8B30">8.9 <span class="Heading">The Action of <span class="SimpleMath">Co_1</span> on the Cosets of Involution Centralizers</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X8230719D8538384B">8.10 <span class="Heading">The Multiplicity Free Permutation Characters of <span class="SimpleMath">G_2(3)</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X7E3E326C7CB0E2CD">8.11 <span class="Heading">Degree <span class="SimpleMath">11200</span> Permutation Characters of <span class="SimpleMath">O_8^+(2)</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X7D8572E68194CBB9">8.12 <span class="Heading">A Proof of Nonexistence of a Certain Subgroup</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X8068E9DA7CD03BF2">8.13 <span class="Heading">A Permutation Character of the Lyons group</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X87D6C1A67CC7EE0A">8.14 <span class="Heading">Identifying two subgroups of Aut<span class="SimpleMath">(U_3(5))</span> (October 2001)</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X793669787CF73A55">8.15 <span class="Heading">A Permutation Character of Aut<span class="SimpleMath">(O_8^+(2))</span> (October 2001)</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X8337F3C682B6BE63">8.16 <span class="Heading">Four Primitive Permutation Characters of the Monster Group</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X78A8A1248336DD26">8.16-1 <span class="Heading">The Subgroup <span class="SimpleMath">2^2.2^11.2^22.(S_3 × M_24)</span>
(June 2009)</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X79E9247182B20474">8.16-2 <span class="Heading">The Subgroup <span class="SimpleMath">2^3.2^6.2^12.2^18.(L_3(2) × 3.S_6)</span>
(September 2009)</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X7BC36C597E542DEE">8.16-3 <span class="Heading">The Subgroup <span class="SimpleMath">2^5.2^10.2^20.(S_3 × L_5(2))</span>
(October 2009)</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X7F2ABD3E7AFF5F6E">8.16-4 <span class="Heading">The Subgroup <span class="SimpleMath">2^{10+16}.O_10^+(2)</span(November 2009)</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X87D11B097D95D027">8.17 <span class="Heading">A permutation character of the Baby Monster (June 2012)</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X86827FA97D27F3A2">8.18 <span class="Heading">A permutation character of <span class="SimpleMath">2.B</span> (October 2017)</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X849F0EA6807C9B19">8.19 <span class="Heading">Generation of sporadic simple groups by <span class="SimpleMath">π</span>- and <span class="SimpleMath"'</span>-subgroups (December 2021)</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X839272078243F4DB">8.19-1 <span class="Heading">Special Arguments for the Monster Group that are no longer needed</span></a>
</span>
</div></div>
</div>

<h3>8 <span class="Heading">Permutation Characters in <strong class="pkg">GAP</strong></span></h3>

<p>Date: April 17th1999</p>

<p>This is a loose collection of examples of computations with permutation characters and possible permutation characters in the <strong class="pkg">GAP</strong> system <a href="chapBib.html#biBGAP">[GAP24]</a>. We mainly use the <strong class="pkg">GAP</strong> implementation of the algorithms to compute possible permutation characters that are described in <a href="chapBib.html#biBBP98copy">[BP98]</a>, and information from the Atlas of Finite Groups <a href="chapBib.html#biBCCN85">[CCN+85]</a>. A <em>possible permutation character</em> of a finite group <span class="SimpleMath">G</span> is a character satisfying the conditions listed in Section <q>Possible Permutation Characters</q> of the <strong class="pkg">GAP</strong> Reference Manual.</p>


<ul>
<li><p>Sections <a href="chap8.html#X87D6C1A67CC7EE0A"><span class="RefLink">8.14</span></a> and <a href="chap8.html#X793669787CF73A55"><span class="RefLink">8.15</span></a> were added in October 2001.</p>

</li>
<li><p>Section <a href="chap8.html#X78A8A1248336DD26"><span class="RefLink">8.16-1</span></a> was added in June 2009.</p>

</li>
<li><p>Section <a href="chap8.html#X79E9247182B20474"><span class="RefLink">8.16-2</span></a> was added in September 2009.</p>

</li>
<li><p>Section <a href="chap8.html#X7BC36C597E542DEE"><span class="RefLink">8.16-3</span></a> was added in October 2009.</p>

</li>
<li><p>Section <a href="chap8.html#X7F2ABD3E7AFF5F6E"><span class="RefLink">8.16-4</span></a> was added in November 2009.</p>

</li>
<li><p>Section <a href="chap8.html#X87D11B097D95D027"><span class="RefLink">8.17</span></a> was added in June 2012.</p>

</li>
<li><p>Section <a href="chap8.html#X86827FA97D27F3A2"><span class="RefLink">8.18</span></a> was added in October 2017.</p>

</li>
<li><p>Section <a href="chap8.html#X849F0EA6807C9B19"><span class="RefLink">8.19</span></a> was added in December 2021.</p>

</li>
</ul>
<p>In the following, the <strong class="pkg">GAP</strong> Character Table Library <a href="chapBib.html#biBCTblLib">[Bre25]</a> will be used frequently.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage( "ctbllib""1.2", false );</span>
true
</pre></div>

<p><a id="X86A1325B82E5AECD" name="X86A1325B82E5AECD"></a></p>

<h4>8.1 <span class="Heading">Some Computations with <span class="SimpleMath">M_24</span></span></h4>

<p>We start with the sporadic simple Mathieu group <span class="SimpleMath">G = M_24</span> in its natural action on <span class="SimpleMath">24</span> points.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= MathieuGroup( 24 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( g, "m24" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size( g );  IsSimple( g );  NrMovedPoints( g );</span>
244823040
true
24
</pre></div>

<p>The conjugacy classes that are computed for a group can be ordered differently in different <strong class="pkg">GAP</strong> sessions. In order to make the output shown in the following examples stable, we first sort the conjugacy classes of <span class="SimpleMath">G</span> for our purposes.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ccl:= AttributeValueNotSet( ConjugacyClasses, g );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">HasConjugacyClasses( g );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">invariants:= List( ccl, c -> [ Order( Representative( c ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Size( c ), Size( ConjugacyClass( g, Representative( c )^2 ) ) ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SortParallel( invariants, ccl );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetConjugacyClasses( g, ccl );</span>
</pre></div>

<p>The permutation character <code class="code">pi</code> of <span class="SimpleMath">G</span> corresponding to the action on the moved points is constructed. This action is <span class="SimpleMath">5</span>-transitive.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">NrConjugacyClasses( g );</span>
26
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= NaturalCharacter( g );</span>
Character( CharacterTable( m24 ),
 [ 24806004042033202001111
  0011 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsTransitive( pi );  Transitivity( pi );</span>
true
5
<span class="GAPprompt">gap></span> <span class="GAPinput">SetIdentifier( CharacterTable( g )"M24table" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( pi );</span>
M24table

     2 10 10  9  3  3  7  7  5  2  3  3  1  1  4   2   .   2   2   1
     3  3  1  1  3  2  1  .  1  1  1  1  1  1  .   .   .   1   1   .
     5  1  .  1  1  .  .  .  .  1  .  .  .  .  .   1   .   .   .   .
     7  1  1  .  .  1  .  .  .  .  .  .  1  1  .   .   .   .   .   1
    11  1  .  .  .  .  .  .  .  .  .  .  .  .  .   .   1   .   .   .
    23  1  .  .  .  .  .  .  .  .  .  .  .  .  .   .   .   .   .   .

       122334445667781011121214a

Y.1    24  8  .  6  .  .  4  .  4  2  .  3  3  2   .   2   .   .   1

     2   1   .   .   .   .   .   .
     3   .   1   1   1   1   .   .
     5   .   1   1   .   .   .   .
     7   1   .   .   1   1   .   .
    11   .   .   .   .   .   .   .
    23   .   .   .   .   .   1   1

       14151521212323b

Y.1      1   1   1   .   .   1   1
</pre></div>

<p>(We have set the <code class="func">Identifier</code> (<a href="../doc/chap3.html#X860F49407882658F"><span class="RefLink">CTblLib: IdentifierOfMainTable</span></a>) value of the character table because otherwise some default identifier would be chosen, which depends on the <strong class="pkg">GAP</strong> session.)</p>

<p><code class="code">pi</code> determines the permutation characters of the <span class="SimpleMath">G</span>-actions on related sets, for example <code class="code">piop</code> on the set of ordered and <code class="code">piup</code> on the set of unordered pairs of points.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">piop:= pi * pi;</span>
Character( CharacterTable( m24 ),
 [ 57664036001601640994040011
  110011 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsTransitive( piop );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">piup:= SymmetricParts( UnderlyingCharacterTable(pi), [ pi ], 2 )[1];</span>
Character( CharacterTable( m24 ),
 [ 300441221041201050664230122
  110011 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsTransitive( piup );</span>
false
</pre></div>

<p>Clearly the action on unordered pairs is not transitive, since the pairs <span class="SimpleMath">[ i, i ]</spanform an orbit of their own. There are exactly two <span class="SimpleMath">G</span>-orbits on the unordered pairs, hence the <span class="SimpleMath">G</span>-action on <span class="SimpleMath">2</span>-sets of points is transitive.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ScalarProduct( piup, TrivialCharacter( g ) );</span>
2
<span class="GAPprompt">gap></span> <span class="GAPinput">comb:= Combinations( [ 1 .. 24 ], 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom:= ActionHomomorphism( g, comb, OnSets );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pihom:= NaturalCharacter( hom );</span>
Character( CharacterTable( m24 ),
 [ 2763612150480630332210111
  000000 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">Transitivity( pihom );</span>
1
</pre></div>

<p>In terms of characters, the permutation character <code class="code">pihom</code> is the difference of <code class="code">piup</code> and <code class="code">pi</code> . Note that <strong class="pkg">GAP</strong> does not know that this difference is in fact a character; in general this question is not easy to decide without knowing the irreducible characters of <span class="SimpleMath">G</span>, and up to now <strong class="pkg">GAP</strong> has not computed the irreducibles.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi2s:= piup - pi;</span>
VirtualCharacter( CharacterTable( m24 ),
 [ 2763612150480630332210111
  000000 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">pi2s = pihom;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">HasIrr( g );  HasIrr( CharacterTable( g ) );</span>
false
false
</pre></div>

<p>The point stabilizer in the action on <span class="SimpleMath">2</span>-sets is in fact a maximal subgroup of <span class="SimpleMath">G</span>, which is isomorphic to the automorphism group <span class="SimpleMath">M_22:2</span> of the Mathieu group <span class="SimpleMath">M_22</span>. Thus this permutation action is primitive. But we cannot apply <code class="func">IsPrimitive</code> (<a href="../../../doc/ref/chap41.html#X84C19AD68247B760"><span class="RefLink">Reference: IsPrimitive</span></a>) to the character <code class="code">pihom</code> for getting this answer because primitivity of characters is defined in a different way, cf. <code class="func">IsPrimitiveCharacter</code> (<a href="../../../doc/ref/chap75.html#X7BC72ECE822D4245"><span class="RefLink">Reference: IsPrimitiveCharacter</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsPrimitive( g, comb, OnSets );</span>
true
</pre></div>

<p>We could also have computed the transitive permutation character of degree <span class="SimpleMath">276</span> using the <strong class="pkg">GAP</strong> Character Table Library instead of the group <span class="SimpleMath">G</span>, since the character tables of <span class="SimpleMath">G</span> and all its maximal subgroups are available, together with the class fusions of the maximal subgroups into <span class="SimpleMath">G</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tbl:= CharacterTable( "M24" );</span>
CharacterTable( "M24" )
<span class="GAPprompt">gap></span> <span class="GAPinput">maxes:= Maxes( tbl );</span>
"M23""M22.2""2^4:a8""M12.2""2^6:3.s6""L3(4).3.2_2"
  "2^6:(psl(3,2)xs3)""L2(23)""L3(2)" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">s:= CharacterTable( maxes[2] );</span>
CharacterTable( "M22.2" )
<span class="GAPprompt">gap></span> <span class="GAPinput">TrivialCharacter( s )^tbl;</span>
Character( CharacterTable( "M24" ),
 [ 2763612150480630332211011
  000000 ] )
</pre></div>

<p>Note that the sequence of conjugacy classes in the library table of <span class="SimpleMath">G</span> does in general not agree with the succession computed for the group.</p>

<p><a id="X79C9051F805851DB" name="X79C9051F805851DB"></a></p>

<h4>8.2 <span class="Heading">All Possible Permutation Characters of <span class="SimpleMath">M_11</span></span></h4>

<p>We compute all possible permutation characters of the Mathieu group <span class="SimpleMath">M_11</span>, using the three different strategies available in <strong class="pkg">GAP</strong>. First we try the algorithm that enumerates all candidates via solving a system of inequalities, which is described in <a href="chapBib.html#biBBP98copy">[BP98, Section 3.2]</a>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m11:= CharacterTable( "M11" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( m11, "m11" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( m11 );</span>
[ Character( m11, [ 1111111111 ] ), Character( m11,
  [ 11323101100 ] ), Character( m11,
  [ 12430210011 ] ), Character( m11,
  [ 22642200000 ] ), Character( m11,
  [ 55713011100 ] ), Character( m11,
  [ 661032110000 ] ), Character( m11,
  [ 110622002200 ] ), Character( m11,
  [ 110626000000 ] ), Character( m11,
  [ 1101422020000 ] ), Character( m11,
  [ 1321260200000 ] ), Character( m11,
  [ 144000400011 ] ), Character( m11,
  [ 1651331011100 ] ), Character( m11,
  [ 220440040000 ] ), Character( m11,
  [ 2201244000000 ] ), Character( m11,
  [ 2202040020000 ] ), Character( m11,
  [ 330262020000 ] ), Character( m11,
  [ 3301862000000 ] ), Character( m11,
  [ 3961204100000 ] ), Character( m11,
  [ 440880020000 ] ), Character( m11,
  [ 4402480000000 ] ), Character( m11,
  [ 4951503001100 ] ), Character( m11,
  [ 660434010000 ] ), Character( m11,
  [ 6601230030000 ] ), Character( m11,
  [ 66012120000000 ] ), Character( m11,
  [ 6602830010000 ] ), Character( m11,
  [ 720000000055 ] ), Character( m11,
  [ 7922400200000 ] ), Character( m11,
  [ 8800160000000 ] ), Character( m11,
  [ 990602002200 ] ), Character( m11,
  [ 990606000000 ] ), Character( m11,
  [ 9903002000000 ] ), Character( m11,
  [ 1320860020000 ] ), Character( m11,
  [ 13202460000000 ] ), Character( m11,
  [ 1584000400000 ] ), Character( m11,
  [ 19801204000000 ] ), Character( m11,
  [ 19803600000000 ] ), Character( m11,
  [ 26400120000000 ] ), Character( m11,
  [ 39602400000000 ] ), Character( m11,
  [ 7920000000000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( perms );</span>
39
</pre></div>

<p>Next we try the improved combinatorial approach that is sketched at the end of Section 3.2 in <a href="chapBib.html#biBBP98copy">[BP98]</a>. We get the same characters, except that they may be ordered in a different way; thus we compare the ordered lists.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">degrees:= DivisorsInt( Size( m11 ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms2:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for d in degrees do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Append( perms2, PermChars( m11, d ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Set( perms ) = Set( perms2 );</span>
true
</pre></div>

<p>Finally, we try the algorithm that is based on Gaussian elimination and that is described in <a href="chapBib.html#biBBP98copy">[BP98, Section 3.3]</a>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms3:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for d in degrees do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Append( perms3, PermChars( m11, rec( torso:= [ d ] ) ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Set( perms ) = Set( perms3 );</span>
true
</pre></div>

<p><strong class="pkg">GAP</strong> provides two more functions to test properties of permutation characters. The first one yields no new information in our case, but the second excludes one possible permutation character; note that <code class="code">TestPerm5</code> needs a <span class="SimpleMath">p</span>-modular Brauer table, and the <strong class="pkg">GAP</strong> character table library contains all Brauer tables of <span class="SimpleMath">M_11</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">newperms:= TestPerm4( m11, perms );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">newperms = perms;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">newperms:= TestPerm5( m11, perms, m11 mod 11 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">newperms = perms;</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">Difference( perms, newperms );</span>
[ Character( m11, [ 220440040000 ] ) ]
</pre></div>

<p><strong class="pkg">GAP</strong> knows the table of marks of <span class="SimpleMath">M_11</span>, from which the permutation characters can be extracted. It turns out that <span class="SimpleMath">M_11</span> has <span class="SimpleMath">39</span> conjugacy classes of subgroups but only <span class="SimpleMath">36</span> different permutation characters, so three candidates computed above are in fact not permutation characters.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tom:= TableOfMarks( "M11" );</span>
TableOfMarks( "M11" )
<span class="GAPprompt">gap></span> <span class="GAPinput">trueperms:= PermCharsTom( m11, tom );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( trueperms );  Length( Set( trueperms ) );</span>
39
36
<span class="GAPprompt">gap></span> <span class="GAPinput">Difference( perms, trueperms );</span>
[ Character( m11, [ 220440040000 ] ), 
  Character( m11, [ 660434010000 ] ), 
  Character( m11, [ 6601230030000 ] ) ]
</pre></div>

<p><a id="X81A5FC968782CFC3" name="X81A5FC968782CFC3"></a></p>

<h4>8.3 <span class="Heading">The Action of <span class="SimpleMath">U_6(2)</span> on the Cosets of <span class="SimpleMath">M_22</span></span></h4>

<p>We are interested in the permutation character of <span class="SimpleMath">U_6(2)</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 115]</a>) that corresponds to the action on the cosets of a <span class="SimpleMath">M_22</span> subgroup (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 39]</a>). The character tables of both the group and the point stabilizer are available in the <strong class="pkg">GAP</strong> character table library, so we can compute class fusion and permutation character directly; note that if the class fusion is not stored on the table of the subgroup, in general one will not get a unique fusion but only a list of candidates for the fusion.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">u62:= CharacterTable( "U6(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m22:= CharacterTable( "M22" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( m22, u62 );</span>
[ [ 137101415222424263334 ], 
  [ 137101415222424263433 ], 
  [ 137111415222424273334 ], 
  [ 137111415222424273433 ], 
  [ 137121415222424283334 ], 
  [ 137121415222424283433 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">RepresentativesFusions( m22, fus, u62 );</span>
[ [ 137101415222424263334 ] ]
</pre></div>

<p>We see that there are six possible class fusions that are equivalent under table automorphisms of <span class="SimpleMath">U_6(2)</span> and <span class="SimpleMath">M22</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= Set( fus,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> x -> Induced( m22, u62, [ TrivialCharacter( m22 ) ], x )[1] );</span>
[ Character( CharacterTable( "U6(2)" ),
  [ 2073603840005400004801660000
      006020004000011000000
      000000 ] ), Character( CharacterTable( "U6(2)" ),
  [ 2073603840005400048001660000
      006020040000011000000
      000000 ] ), Character( CharacterTable( "U6(2)" ),
  [ 2073603840005400480001660000
      006020400000011000000
      000000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( u62, cand ).ATLAS;</span>
"1a+22a+252a+616a+1155c+1386a+8064a+9240c"
  "1a+22a+252a+616a+1155b+1386a+8064a+9240b"
  "1a+22a+252a+616a+1155a+1386a+8064a+9240a" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">aut:= AutomorphismsOfTable( u62 );;  Size( aut );</span>
24
<span class="GAPprompt">gap></span> <span class="GAPinput">elms:= Filtered( Elements( aut ), x -> Order( x ) = 3 );</span>
[ (10,11,12)(26,27,28)(40,41,42), (10,12,11)(26,28,27)(40,42,41) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Position( cand, Permuted( cand[1], elms[1] ) );</span>
3
<span class="GAPprompt">gap></span> <span class="GAPinput">Position( cand, Permuted( cand[3], elms[1] ) );</span>
2
</pre></div>

<p>The six fusions induce three different characters, they are conjugate under the action of the unique subgroup of order <span class="SimpleMath">3</span> in the group of table automorphisms of <span class="SimpleMath">U_6(2)</span>. The table automorphisms of order <span class="SimpleMath">3</span> are induced by group automorphisms of <span class="SimpleMath">U_6(2)</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 120]</a>). As can be seen from the list of maximal subgroups of <span class="SimpleMath">U_6(2)</span> in <a href="chapBib.html#biBCCN85">[CCN+85, p. 115]</a>, the three induced characters are in fact permutation characters which belong to the three classes of maximal subgroups of type <span class="SimpleMath">M_22</span> in <span class="SimpleMath">U_6(2)</span>, which are permuted by an outer automorphism of order 3. Now we want to compute the extension of the above permutation character to the group <span class="SimpleMath">U_6(2).2</span>, which corresponds to the action of this group on the cosets of a <span class="SimpleMath">M_22.2</span> subgroup.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">u622:= CharacterTable( "U6(2).2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m222:= CharacterTable( "M22.2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( m222, u622 );</span>
[ [ 1371013142022222429383942414650
      53585959 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= Induced( m222, u622, [ TrivialCharacter( m222 ) ], fus[1] );</span>
[ Character( CharacterTable( "U6(2).2" ),
  [ 2073603840005400480016600000
      602040000100000000108072
      0488000180008002000022
      000000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( u622, cand ).ATLAS;</span>
"1a+22a+252a+616a+1155a+1386a+8064a+9240a" ]
</pre></div>

<p>We see that for the embedding of <span class="SimpleMath">M_22.2</span> into <span class="SimpleMath">U_6(2).2</span>, the class fusion is unique, so we get a unique extension of one of the above permutation characters. This implies that exactly one class of maximal subgroups of type <span class="SimpleMath">M_22</span> extends to <span class="SimpleMath">M_22.2</span> in a given group <span class="SimpleMath">U_6(2).2</span>.</p>

<p><a id="X7EE1811C8496C428" name="X7EE1811C8496C428"></a></p>

<h4>8.4 <span class="Heading">Degree <span class="SimpleMath">20736</span> Permutation Characters of <span class="SimpleMath">U_6(2)</span></span></h4>

<p>Now we show an alternative way to compute the characters dealt with in the previous example. This works also if the character table of the point stabilizer is not available. In this situation we can compute all those characters that have certain properties of permutation characters. Of course this may take much longer than the above computations, which needed only a few seconds. (The following calculations may need several hours, depending on the computer used.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( u62, rec( torso := 20736 ] ) );</span>
[ Character( CharacterTable( "U6(2)" ), 
    [ 207360384000540000480166000
      000602000400001100000
      0000000 ] ), Character( CharacterTable( "U6(2)" ), 
    [ 207360384000540004800166000
      000602004000001100000
      0000000 ] ), Character( CharacterTable( "U6(2)" ), 
    [ 207360384000540048000166000
      000602040000001100000
      0000000 ] ) ]
</pre></div>

<p>For the next step, that is, the computation of the extension of the permutation character to <span class="SimpleMath">U_6(2).2</span>, we may use the above information, since the values on the inner classes are prescribed. The question which of the three candidates for <span class="SimpleMath">U_6(2)</span> extends to <span class="SimpleMath">U_6(2).2</span> depends on the choice of the class fusion of <span class="SimpleMath">U_6(2)</span> into <span class="SimpleMath">U_6(2).2</span>. With respect to the class fusion that is stored on the <strong class="pkg">GAP</strong> library table, the third candidate extends, as can be seen from the fact that this one is invariant under the permutation of conjugacy classes of <span class="SimpleMath">U_6(2)</span> that is induced by the action of the chosen supergroup <span class="SimpleMath">U_6(2).2</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">u622:= CharacterTable( "U6(2).2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">inv:= InverseMap( GetFusionMap( u62, u622 ) );</span>
12345678910, [ 1112 ], 131415, [ 1617 ], 
  181920212223242526, [ 2728 ], [ 2930 ], 3132
  [ 3334 ], [ 3536 ], 37, [ 3839 ], 40, [ 4142 ], 4344
  [ 4546 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ext:= List( cand, x -> CompositionMaps( x, inv ) );</span>
[ [ 20736038400054000, [ 048 ], 016600
      00060200, [ 04 ], 0001000000
      00 ], 
  [ 20736038400054000, [ 048 ], 016600
      00060200, [ 04 ], 0001000000
      00 ], 
  [ 2073603840005400480016600000
      602040000100000000 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( u622, rec( torso:= ext[3] ) );</span>
[ Character( CharacterTable( "U6(2).2" ), 
    [ 207360384000540048001660000
      06020400001000000001080
      72048800018000800200002
      2000000 ] ) ]
</pre></div>

<p><a id="X7DC6A6E785A347C8" name="X7DC6A6E785A347C8"></a></p>

<h4>8.5 <span class="Heading">Degree <span class="SimpleMath">57572775</span> Permutation Characters of <span class="SimpleMath">O_8^+(3)</span></span></h4>

<p>The group <span class="SimpleMath">O_8^+(3)</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 140]</a>) contains a subgroup of type <span class="SimpleMath">2^{3+6}.L_3(2)</span>, which extends to a maximal subgroup <span class="SimpleMath">U</span> in <span class="SimpleMath">O_8^+(3).3</span>. For the computation of the permutation character, we cannot use explicit induction since the table of <span class="SimpleMath">U</span> is not available in the <strong class="pkg">GAP</strongtable library. Since <span class="SimpleMath">U ∩ O_8^+(3)</span> is contained in a <span class="SimpleMath">O_8^+(2)</span> subgroup of <span class="SimpleMath">O_8^+(3)</span>, we can try to find the permutation character of <span class="SimpleMath">O_8^+(2)</span> corresponding to the action on the cosets of <span class="SimpleMath">U ∩ O_8^+(3)</span>, and then induce this character to <span class="SimpleMath">O_8^+(3)</span>. This kind of computations becomes more difficult with increasing degree, so we try to reduce the problem further. In fact, the <span class="SimpleMath">2^{3+6}.L_3(2)</span> group is contained in a <span class="SimpleMath">2^6:A_8</span> subgroup of <span class="SimpleMath">O_8^+(2)</span>, in which the index is only <span class="SimpleMath">15</span>; the unique possible permutation character of this degree can be read off immediately. Induction to <span class="SimpleMath">O_8^+(3)</span> through the chain of subgroups is possible provided the class fusions are available. There are <span class="SimpleMath">24</span> possible fusions from <span class="SimpleMath">O_8^+(2)</span> into <span class="SimpleMath">O_8^+(3)</span>, which are all equivalent w.r.t. table automorphisms of <span class="SimpleMath">O_8^+(3)</span>. If we later want to consider the extension of the permutation character in question to <span class="SimpleMath">O_8^+(3).3</span> then we have to choose a fusion of an <span class="SimpleMath">O_8^+(2)</span> subgroup that does <em>not</em> extend to <span class="SimpleMath">O_8^+(2).3</span>. But if for example our question is just whether the resulting permutation character is multiplicity-free then this can be decided already from the permutation character of <span class="SimpleMath">O_8^+(3)</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">o8p3:= CharacterTable("O8+(3)");;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size( o8p3 ) / (2^9*168);</span>
57572775
<span class="GAPprompt">gap></span> <span class="GAPinput">o8p2:= CharacterTable( "O8+(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( o8p2, o8p3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( fus );</span>
24
<span class="GAPprompt">gap></span> <span class="GAPinput">rep:= RepresentativesFusions( o8p2, fus, o8p3 );</span>
[ [ 1523457812161719232021222324
      25263738423132364952515043444553
      55565771717172737478798388899094
      100101105 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= rep[1];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size( o8p2 ) / (2^9*168);</span>
2025
<span class="GAPprompt">gap></span> <span class="GAPinput">sub:= CharacterTable( "2^6:A8" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">subfus:= GetFusionMap( sub, o8p2 );</span>
1322456133612131472124113029
  3113171516141736371841244448283332
  3435355151 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= CompositionMaps( fus, subfus );</span>
1255345232519232073731175051
  4323232122202356572472317889524544
  535555100100 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Size( sub ) / (2^9*168);</span>
15
<span class="GAPprompt">gap></span> <span class="GAPinput">List( Irr( sub ), Degree );</span>
17142021212128354545566470282835
  35353570707070140140140140140210210252
  252280280315315315315420448 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( sub15 );</span>
[ Character( CharacterTable( "2^6:A8" ),
  [ 151515777773333300033333
      33311110000011111100 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= Induced( sub, o8p3, cand, fus );</span>
[ Character( CharacterTable( "O8+(3)" ),
  [ 575727755953559535595353591000000000
      00218702713513513524300000000
      00000000000272727000027
      27272708110000000000000
      000000000000000000000
      000000000000000000000
      00 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">o8p33:= CharacterTable( "O8+(3).3" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">inv:= InverseMap( GetFusionMap( o8p3, o8p33 ) );</span>
1, [ 234 ], 56, [ 789 ], [ 101112 ], 13
  [ 141516 ], 171819, [ 202122 ], 23, [ 242526 ], 
  [ 272829 ], 30, [ 313233 ], [ 343536 ], [ 373839 ], 
  [ 404142 ], [ 434445 ], 46, [ 474849 ], 50
  [ 515253 ], 54555657, [ 585960 ], [ 616263 ], 64
  [ 656667 ], 68, [ 697071 ], [ 727374 ], [ 757677 ], 
  [ 787980 ], [ 818283 ], 8485, [ 868788 ], 
  [ 899091 ], [ 929394 ], 9596, [ 979899 ], 
  [ 100101102 ], [ 103104105 ], [ 106107108 ], 
  [ 109110111 ], [ 112113114 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ext:= CompositionMaps( ind[1], inv );</span>
5757277559535359100000218702713524300
  000002700272708110000000
  0000000000000000 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( o8p33, rec( torso:= ext ) );</span>
[ Character( CharacterTable( "O8+(3).3" ),
  [ 575727755953535910000021870271352430
      00000027002727081100000
      0000000000000000003159
      315924324339393300000000333
      333000000221111000000
      00 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( o8p33, perms ).ATLAS;</span>
"1a+780aabb+2457a+2808abc+9450aaabbcc+18200abcdddef+24192a+54600a^{5\
}b+70200aabb+87360ab+139776a^{5}+147420a^{4}b^{4}+163800ab+184275aabc+\
199017aa+218700a+245700a+291200aef+332800a^{4}b^{5}c^{5}+491400aaabcd+\
531441a^{5}b^{4}c^{4}+552825a^{4}+568620aabb+698880a^{4}b^{4}+716800aa\
abbccdddeeff+786240aabb+873600aa+998400aa+1257984a^{6}+1397760aa" ]
</pre></div>

<p><a id="X792D2C2380591D8D" name="X792D2C2380591D8D"></a></p>

<h4>8.6 <span class="Heading">The Action of <span class="SimpleMath">O_7(3).2</span> on the Cosets of <span class="SimpleMath">2^7.S_7</span></span></h4>

<p>We want to know whether the permutation character of <span class="SimpleMath">O_7(3).2</span(see <a href="chapBib.html#biBCCN85">[CCN+85, p. 108]</a>) on the cosets of its maximal subgroup <span class="SimpleMath">U</span> of type <span class="SimpleMath">2^7.S_7</span> is multiplicity-free. As in the previous examples, first we try to compute the permutation character of the simple group <span class="SimpleMath">O_7(3)</span>. It turns out that the direct computation of all candidates from the degree is very time consuming. But we can use for example the additional information provided by the fact that <span class="SimpleMath">U</span> contains an <span class="SimpleMath">A_7</span> subgroup. We compute the possible class fusions.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">o73:= CharacterTable( "O7(3)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a7:= CharacterTable( "A7" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( a7, o73 );</span>
[ [ 136101516243333 ], 
  [ 137101516223333 ] ]
</pre></div>

<p>We cannot decide easily which fusion is the right one, but already the fact that no other fusions are possible gives us some information about impossible constituents of the permutation character we want to compute.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= List( fus,</span>
<span class="GAPprompt">></span> <span class="GAPinput">      x -> Induced( a7, o73, [ TrivialCharacter( a7 ) ], x )[1] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mat:= MatScalarProducts( o73, Irr( o73 ), ind );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sum:= Sum( mat );</span>
26208624483044935009010
  561511211572414160121278814
  121214662016121212101012128126 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">const:= Filtered( [ 1 .. Length( sum ) ], x -> sum[x] <> 0 );</span>
123567891011131415161720222324
  2526272829303132333436373839404142
  43444546474849505152535455565758 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( const );</span>
52
<span class="GAPprompt">gap></span> <span class="GAPinput">const:= Irr( o73 ){ const };;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">rat:= RationalizedMat( const );;</span>
</pre></div>

<p>But much more can be deduced from the fact that certain zeros of the permutation character can be predicted.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">names:= ClassNames( o73 );</span>
"1a""2a""2b""2c""3a""3b""3c""3d""3e""3f""3g"
  "4a""4b""4c""4d""5a""6a""6b""6c""6d""6e""6f"
  "6g""6h""6i""6j""6k""6l""6m""6n""6o""6p""7a"
  "8a""8b""9a""9b""9c""9d""10a""10b""12a""12b"
  "12c""12d""12e""12f""12g""12h""13a""13b""14a"
  "15a""18a""18b""18c""18d""20a" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( fus, x -> names{ x } );</span>
[ [ "1a""2b""3b""3f""4d""5a""6h""7a""7a" ], 
  [ "1a""2b""3c""3f""4d""5a""6f""7a""7a" ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">torso:= [ 28431 ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">zeros:= [ 58911172023282932363738,</span>
<span class="GAPprompt">></span> <span class="GAPinput">             43464748535455565758 ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">names{ zeros };</span>
"3a""3d""3e""3g""6a""6d""6g""6l""6m""6p""9a"
  "9b""9c""12b""12e""12f""12g""15a""18a""18b""18c"
  "18d""20a" ]
</pre></div>

<p>Every order <span class="SimpleMath">3</span> element of <span class="SimpleMath">U</span> lies in an <span class="SimpleMath">A_7</span> subgroup of <span class="SimpleMath">U</span>, so among the classes of element order <span class="SimpleMath">3</span>, at most the classes <code class="code">3B</code>, <code class="code">3C</code>, and <code class="code">3F</code> can have nonzero permutation character values. The excluded classes of element order <span class="SimpleMath">6</spanare the square roots of the excluded order <span class="SimpleMath">3</span> elements, likewise the given classes of element orders <span class="SimpleMath">9</span>, <span class="SimpleMath">12</span>, and <span class="SimpleMath">18</span> are excluded. The character value on <code class="code">20A</code> must be zero because <span class="SimpleMath">U</span> does not contain elements of this order. So we enter the additional information about these zeros.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in zeros do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     torso[i]:= 0;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">torso;</span>
28431,,,, 0,,, 00,, 0,,,,,, 0,,, 0,,, 0,,,,, 00,,, 0,,,, 00
  0,,,,, 0,,, 000,,,,, 000000 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( o73, rec( torso:= torso, chars:= rat ) );</span>
[ Character( CharacterTable( "O7(3)" ),
  [ 28431567567111002430081015327156
      0027032700039003304110
      000223030000000000000
      0 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( o73, perms ).ATLAS;</span>
"1a+78a+168a+182a+260ab+1092a+2457a+2730a+4095b+5460a+11648a" ]
</pre></div>

<p>We see that this character is already multiplicity free, so this holds also for its extension to <span class="SimpleMath">O_7(3).2</span>, and we need not compute this extension. (Of course we could compute it in the same way as in the examples above.)</p>

<p><a id="X875B361C8512939F" name="X875B361C8512939F"></a></p>

<h4>8.7 <span class="Heading">The Action of <span class="SimpleMath">O_8^+(3).2_1</span> on the Cosets of <span class="SimpleMath">2^7.A_8</span></span></h4>

<p>We are interested in the permutation character of <span class="SimpleMath">O_8^+(3).2_1</span> that corresponds to the action on the cosets of a subgroup of type <span class="SimpleMath">2^7.A_8</span>. The intersection of the point stabilizer with the simple group <span class="SimpleMath">O_8^+(3)</span> is of type <span class="SimpleMath">2^6.A_8</span>. First we compute the class fusion of these groups, modulo problems with ambiguities due to table automorphisms.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">o8p3:= CharacterTable( "O8+(3)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">o8p2:= CharacterTable( "O8+(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( o8p2, o8p3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">NamesOfFusionSources( o8p2 );</span>
"A9""2^8:O8+(2)""(D10xD10).2^2""(3x3^3:S3):2"
  "(3x3^(1+2)+:2A4).2""2^(3+3+3).L3(2)""NRS(O8+(2),2^(3+3+3)_a)"
  "NRS(O8+(2),2^(3+3+3)_b)""O8+(2)N2""O8+(2)M2""O8+(2)M3"
  "O8+(2)M5""O8+(2)M6""O8+(2)M8""O8+(2)M9""(3xU4(2)):2"
  "O8+(2)M11""O8+(2)M12""2^(1+8)_+:(S3xS3xS3)""3^4:2^3.S4(a)"
  "(A5xA5):2^2""O8+(2)M16""O8+(2)M17""2^(1+8)+.O8+(2)""7:6"
  "(A5xD10).2""(D10xA5).2""O8+(2)N5C""2^6:A8""2.O8+(2)"
  "2^2.O8+(2)""S6(2)" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">sub:= CharacterTable( "2^6:A8" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">subfus:= GetFusionMap( sub, o8p2 );</span>
1322456133612131472124113029
  3113171516141736371841244448283332
  3435355151 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= List( fus, x -> CompositionMaps( x, subfus ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= Set( fus );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( fus );</span>
24
</pre></div>

<p>The ambiguities due to Galois automorphisms disappear when we are looking for the permutation characters induced by the fusions.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= List( fus, x -> Induced( sub, o8p3,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             [ TrivialCharacter( sub ) ], x )[1] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= Set( ind );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( ind );</span>
6
</pre></div>

<p>Now we try to extend the candidates to <span class="SimpleMath">O_8^+(3).2_1</span>; the choice of the fusion of <span class="SimpleMath">O_8^+(3)</span> into <span class="SimpleMath">O_8^+(3).2_1</span> determines which of the candidates may extend.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">o8p32:= CharacterTable( "O8+(3).2_1" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= GetFusionMap( o8p3, o8p32 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ext:= List( ind, x -> CompositionMaps( x, InverseMap( fus ) ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ext:= Filtered( ext, x -> ForAll( x, IsInt ) );</span>
[ [ 3838185175778505850587300006561007290
      910545451053000000000018900
      09927270027908110000000
      020000000090000003000
      0000060000000 ], 
  [ 3838185175778505850587306561000007290
      910545451053000000018900090
      00927270092708110000000
      020000090000003000000
      0060000000000 ] ]
</pre></div>

<p>We compute the extensions of the first candidate; the other belongs to another class of subgroups, which is the image under an outer automorphism.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( o8p32, rec( torso:= ext[1] ) );</span>
[ Character( CharacterTable( "O8+(3).2_1" ),
  [ 3838185175778505850587300006561007290
      910545451053000000000018900
      09927270027908110000000
      020000000090000003000
      0000060000000315915755676387
      150045081927003333550004
      0027090015030020000030
      0000000000000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( o8p32, perms ).ATLAS;</span>
"1a+260abc+520ab+819a+2808b+9450aab+18200a+23400ac+29120b+36400aab+4\
6592abce+49140d+66339a+98280ab+163800a+189540d+232960d+332800ab+368550\
a+419328a+531441ab" ]
</pre></div>

<p>Now we repeat the calculations for <span class="SimpleMath">O_8^+(3).2_2</span> instead of <span class="SimpleMath">O_8^+(3).2_1</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">o8p32:= CharacterTable( "O8+(3).2_2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= GetFusionMap( o8p3, o8p32 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ext:= List( ind, x -> CompositionMaps( x, InverseMap( fus ) ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ext:= Filtered( ext, x -> ForAll( x, IsInt ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( o8p32, rec( torso:= ext[1] ) );</span>
[ Character( CharacterTable( "O8+(3).2_2" ),
  [ 38381851757785058730006561000072909
      105451053000000018900090927
      0002727908110000000000
      200000900000003000000
      06000000019901720252974417390
      12150000081000027270191200
      4500100310000000000210
      00000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( o8p32, perms ).ATLAS;</span>
"1a+260aac+520ab+819a+2808a+9450aaa+18200accee+23400ac+29120a+36400a\
+46592aa+49140c+66339a+93184a+98280ab+163800a+184275ac+189540c+232960c\
+332800aa+419328a+531441aa" ]
</pre></div>

<p>We might be interested in the extension to <span class="SimpleMath">O_8^+(3).(2^2)_122</span>. It is clear that this cannot be multiplicity free because of the multiplicity <code class="code">9450aaa</code> in the character induced from <span class="SimpleMath">O_8^+(3).2_2</span>. We could put the extensions to the index two subgroups together, but it is simpler (and not expensive) to run the same program as above.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">o8p322:= CharacterTable( "O8+(3).(2^2)_{122}" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= GetFusionMap( o8p32, o8p322 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ext:= List( perms, x -> CompositionMaps( x, InverseMap( fus ) ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ext:= Filtered( ext, x -> ForAll( x, IsInt ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( o8p322, rec( torso:= ext[1] ) );</span>
[ Character( CharacterTable( "O8+(3).(2^2)_{122}" ),
  [ 383818517577850587300065610072909105
      45105300000001890099270027
      908110000000200000900
      000300000060000031591575
      56763871500450819270033350
      0400270900150300200030
      000000000019901720252974417390
      12150000810002727019120045
      001003100000002100000
      02843116471356387390024327008163
      000903362000900333040
      000000000020 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( o8p322, perms ).ATLAS;</span>
"1a+260ace+819a+1040a+2808c+9450aac+18200a+23400ae+29120c+36400aac+4\
6592ac+49140g+66339a+93184a+163800b+189540g+196560a+232960g+332800ac+3\
68550a+419328a+531441ac" ]
</pre></div>

<p><a id="X7B1DFAF98182CFF4" name="X7B1DFAF98182CFF4"></a></p>

<h4>8.8 <span class="Heading">The Action of <span class="SimpleMath">S_4(4).4</span> on the Cosets of <span class="SimpleMath">5^2.[2^5]</span></span></h4>

<p>We want to know whether the permutation character corresponding to the action of <span class="SimpleMath">S_4(4).4</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 44]</a>) on the cosets of its maximal subgroup of type <span class="SimpleMath">5^2:[2^5]</span> is multiplicity free. The library names of subgroups for which the class fusions are stored are listed as value of the attribute <code class="func">NamesOfFusionSources</code> (<a href="../../../doc/ref/chap73.html#X7F6569D5786A9D49"><span class="RefLink">Reference: NamesOfFusionSources</span></a>), and for groups whose isomorphism type is not determined by the name this is the recommended way to find out whether the table of the subgroup is contained in the <strong class="pkg">GAP</strong> library and known to belong to this group. (It might be that a table with such a name is contained in the library but belongs to another group, and it may also be that the table of the group is contained in the library --with any name-- but it is not known that this group is isomorphic to a subgroup of <span class="SimpleMath">S_4(4).4</span>.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">s444:= CharacterTable( "S4(4).4" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">NamesOfFusionSources( s444 );</span>
"(L3(2)xS4(4):2).2""S4(4)""S4(4).2" ]
</pre></div>

<p>So we cannot simply fetch the table of the subgroup. As in the previous examples, we compute the possible permutation characters.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( s444,</span>
<span class="GAPprompt">></span> <span class="GAPinput">               rec( torso:= [ Size( s444 ) / ( 5^2*2^5 ) ] ) );</span>
[ Character( CharacterTable( "S4(4).4" ),
  [ 4896384960163236160400000000
      000000000000 ] ), 
  Character( CharacterTable( "S4(4).4" ),
  [ 489619232008610200360120001
      06622000011 ] ), 
  Character( CharacterTable( "S4(4).4" ),
  [ 4896240640883616000001280440
      00000000000 ] ) ]
</pre></div>

<p>So there are three candidates. None of them is multiplicity free, so we need not decide which of the candidates actually belongs to the group <span class="SimpleMath">5^2:[2^5]</span> we have in mind.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( s444, perms ).ATLAS;</span>
"1abcd+50abcd+153abcd+170a^{4}b^{4}+680aabb"
  "1a+50ac+153a+170aab+256a+680abb+816a+1020a"
  "1ac+50ac+68a+153abcd+170aabbb+204a+680abb+1020a" ]
</pre></div>

<p>(If we would be interested which candidate is the right one, we could for example look at the intersection with <span class="SimpleMath">S_4(4)</span>, and hope for a contradiction to the fact that the group must lie in a <span class="SimpleMath">(A_5 × A_5):2</span> subgroup.)</p>

<p><a id="X7F04F0C684AA8B30" name="X7F04F0C684AA8B30"></a></p>

<h4>8.9 <span class="Heading">The Action of <span class="SimpleMath">Co_1</span> on the Cosets of Involution Centralizers</span></h4>

<p>We compute the permutation characters of the sporadic simple Conway group <span class="SimpleMath">Co_1</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 180]</a>) corresponding to the actions on the cosets of involution centralizers. Equivalently, we are interested in the action of <span class="SimpleMath">Co_1</span> on conjugacy classes of involutions. These characters can be computed as follows. First we take the table of <span class="SimpleMath">Co_1</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "Co1" );</span>
CharacterTable( "Co1" )
</pre></div>

<p>The centralizer of each <code class="code">2A</code> element is a maximal subgroup of <span class="SimpleMath">Co_1</span>. This group is also contained in the table library. So we can compute the permutation character by explicit induction, and the decomposition in irreducibles is computed with the command <code class="func">PermCharInfo</code> (<a href="../../../doc/ref/chap72.html#X8477004C7A31D28C"><span class="RefLink">Reference: PermCharInfo</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">s:= CharacterTable( Maxes( t )[5] );</span>
CharacterTable( "2^(1+8)+.O8+(2)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= Induced( s, t, [ TrivialCharacter( s ) ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( t, ind ).ATLAS;</span>
"1a+299a+17250a+27300a+80730a+313950a+644644a+2816856a+5494125a+1243\
2420a+24794000a" ]
</pre></div>

<p>The centralizer of a <code class="code">2B</code> element is not maximal. First we compute which maximal subgroup can contain it. The character tables of all maximal subgroups of <span class="SimpleMath">Co_1</span> are contained in the <strong class="pkg">GAP</strong>'s table library, so we may take these tables and look at the group orders.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">centorder:= SizesCentralizers( t )[3];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">maxes:= List( Maxes( t ), CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= Filtered( maxes, x -> Size( x ) mod centorder = 0 );</span>
[ CharacterTable( "(A4xG2(4)):2" ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">u:= cand[1];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">index:= Size( u ) / centorder;</span>
3
</pre></div>

<p>So there is a unique class of maximal subgroups containing the centralizer of a <code class="code">2B</code> element, as a subgroup of index <span class="SimpleMath">3</span>. We compute the unique permutation character of degree <span class="SimpleMath">3</span> of this group, and induce this character to <span class="SimpleMath">G</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">subperm:= PermChars( u, rec( degree := index, bounds := false ) );</span>
[ Character( CharacterTable( "(A4xG2(4)):2" ),
  [ 3333333333333333333333
      331111111111111111333
      333333333333333333333
      000000000000000000000
      000000000001111111111
      111111 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">subperm = PermChars( u, rec( torso := 3 ] ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= Induced( u, t, subperm );</span>
[ Character( CharacterTable( "Co1" ),
  [ 20656944001814401194083801627799200037830240
      86407203168025203006480150800000
      3818105060012056240120001204818
      00603601441080010000004239
      001530044000000300000
      1280600301033000000003
      0 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( t, ind ).ATLAS;</span>
"1a+1771a+8855a+27300aa+313950a+345345a+644644aa+871884aaa+1771000a+\
2055625a+4100096a+7628985a+9669660a+12432420aa+21528000aa+23244375a+24\
174150aa+24794000a+31574400aa+40370176a+60435375a+85250880aa+100725625\
a+106142400a+150732800a+184184000a+185912496a+207491625a+299710125a+30\
2176875a" ]
</pre></div>

<p>Finally, we try the same for the centralizer of a <code class="code">2C</code> element.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">centorder:= SizesCentralizers( t )[4];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= Filtered( maxes, x -> Size( x ) mod centorder = 0 );</span>
[ CharacterTable( "Co2" ), CharacterTable( "2^11:M24" ) ]
</pre></div>

<p>The group order excludes all except two classes of maximal subgroups. But the <code class="code">2C</code> centralizer cannot lie in <span class="SimpleMath">Co_2</span> because the involution centralizers in <span class="SimpleMath">Co_2</span> are too small.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">u:= cand[1];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">GetFusionMap( u, t );</span>
12247691111101112141716212320
  2222242830333132333337424143444852
  4953555352546060606465656766707372
  7879848587929393 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">centorder;</span>
389283840
<span class="GAPprompt">gap></span> <span class="GAPinput">SizesCentralizers( u )[4];</span>
1474560
</pre></div>

<p>So we try the second candidate.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">u:= cand[2];</span>
CharacterTable( "2^11:M24" )
<span class="GAPprompt">gap></span> <span class="GAPinput">index:= Size( u ) / centorder;</span>
1288
<span class="GAPprompt">gap></span> <span class="GAPinput">subperm:= PermChars( u, rec( torso := [ index ] ) );</span>
[ Character( CharacterTable( "2^11:M24" ),
  [ 128812881288565656565656484848484810
      10101077888888444444444
      443332222223330000222
      233311222211000000000
      000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">subperm = PermChars( u, rec( degree:= index, bounds := false ) );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= Induced( u, t, subperm );</span>
[ Character( CharacterTable( "Co1" ),
  [ 1068057900019882801965609474401701009457560
      343222801728252308022500027003060
      4645250012032125236360000045
      150930000180300618035000
      000002200003000010000
      60200000000000000000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( t, ind ).ATLAS;</span>
"1a+17250aa+27300a+80730aa+644644aaa+871884a+1821600a+2055625aaa+281\
6856a+5494125a^{4}+12432420aa+16347825aa+23244375a+24174150aa+24667500\
aa+24794000aaa+31574400a+40370176a+55255200a+66602250a^{4}+83720000aa+\
85250880aaa+91547820aa+106142400a+150732800a+184184000aaa+185912496aaa\
+185955000aaa+207491625aaa+215547904aa+241741500aaa+247235625a+2578576\
00aa+259008750a+280280000a+302176875a+326956500a+387317700a+402902500a\
+464257024a+469945476b+502078500a+503513010a+504627200a+522161640a" ]
</pre></div>

<p><a id="X8230719D8538384B" name="X8230719D8538384B"></a></p>

<h4>8.10 <span class="Heading">The Multiplicity Free Permutation Characters of <span class="SimpleMath">G_2(3)</span></span></h4>

<p>We compute the multiplicity free possible permutation characters of <span class="SimpleMath">G_2(3)</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 60]</a>). For each divisor <span class="SimpleMath">d</span> of the group order, we compute all those possible permutation characters of degree <span class="SimpleMath">d</span> of <span class="SimpleMath">G</span> for which each irreducible constituent occurs with multiplicity at most <span class="SimpleMath">1</span>; this is done by prescribing the <code class="code">maxmult</code> component of the second argument of <code class="func">PermChars</code> (<a href="../../../doc/ref/chap72.html#X7D02541482C196A6"><span class="RefLink">Reference: PermChars</span></a>) to be the list with <span class="SimpleMath">1</span> at each position.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "G2(3)" );</span>
CharacterTable( "G2(3)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "G2(3)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">n:= Length( RationalizedMat( Irr( t ) ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">maxmult:= List( [ 1 .. n ], i -> 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">divs:= DivisorsInt( Size( t ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for d in divs do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Append( perms,</span>
<span class="GAPprompt">></span> <span class="GAPinput">             PermChars( t, rec( bounds  := false,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                degree  := d,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                maxmult := maxmult ) ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( perms );</span>
42
<span class="GAPprompt">gap></span> <span class="GAPinput">List( perms, Degree );</span>
1351351364364378378546546546546546702702
  728728109210921092109210921092109210921456
  14561638163821842184245724572457245731593276
  327632763276436865526552 ]
</pre></div>

<p>For finding out which of these candidates are really permutation characters, we could inspect them piece by piece, using the information in <a href="chapBib.html#biBCCN85">[CCN+85]</a>. For example, the candidates of degrees <span class="SimpleMath">351</span>, <span class="SimpleMath">364</span>, and <span class="SimpleMath">378</span> are induced from the trivial characters of maximal subgroups of <span class="SimpleMath">G</span>, whereas the candidates of degree <span class="SimpleMath">546</span> are not permutation characters.</p>

<p>Since the table of marks of <span class="SimpleMath">G</span> is available in <strong class="pkg">GAP</strong>, we can extract all permutation characters from the table of marks, and then filter out the multiplicity free ones.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tom:= TableOfMarks( "G2(3)" );</span>
TableOfMarks( "G2(3)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">tbl:= CharacterTable( "G2(3)" );</span>
CharacterTable( "G2(3)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">permstom:= PermCharsTom( tbl, tom );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( permstom );</span>
433
<span class="GAPprompt">gap></span> <span class="GAPinput">multfree:= Intersection( perms, permstom );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( multfree );</span>
15
<span class="GAPprompt">gap></span> <span class="GAPinput">List( multfree, Degree );</span>
135135136436437837870270272872810921092
  21842184 ]
</pre></div>

<p><a id="X7E3E326C7CB0E2CD" name="X7E3E326C7CB0E2CD"></a></p>

<h4>8.11 <span class="Heading">Degree <span class="SimpleMath">11200</span> Permutation Characters of <span class="SimpleMath">O_8^+(2)</span></span></h4>

<p>We compute the primitive permutation characters of degree <span class="SimpleMath">11200</span> of <span class="SimpleMath">O_8^+(2)</span> and <span class="SimpleMath">O_8^+(2).2</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 85]</a>). The character table of the maximal subgroup of type <span class="SimpleMath">3^4:2^3.S_4</span> in <span class="SimpleMath">O_8^+(2)</span> is not available in the <strong class="pkg">GAP</strongtable library. But the group extends to a wreath product of <span class="SimpleMath">S_3</span> and <span class="SimpleMath">S_4</span> in the group <span class="SimpleMath">O_8^+(2).2</span>, and the table of this wreath product can be constructed easily.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tbl2:= CharacterTable("O8+(2).2");;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">s3:= CharacterTable( "Symmetric"3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">s:= CharacterTableWreathSymmetric( s3, 4 );</span>
CharacterTable( "Sym(3)wrS4" )
</pre></div>

<p>The permutation character <code class="code">pi</code> of <span class="SimpleMath">O_8^+(2).2</span> can thus be computed by explicit induction, and the character of <span class="SimpleMath">O_8^+(2)</span> is obtained by restriction of <code class="code">pi</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( s, tbl2 );</span>
[ [ 1416348942195185502449724422
      421253175821547265037522360184
      462514612095330512664852311356
      38 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= Induced( s, tbl2, [ TrivialCharacter( s ) ], fus[1] )[1];</span>
Character( CharacterTable( "O8+(2).2" ),
 [ 112002561601608040407613008840016
  16444111150001100000220
  0112096016016810467123002040
  11001000 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( tbl2, pi ).ATLAS;</span>
"1a+84a+168a+175a+300a+700c+972a+1400a+3200a+4200b" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">tbl:= CharacterTable( "O8+(2)" );</span>
CharacterTable( "O8+(2)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">rest:= RestrictedClassFunction( pi, tbl );</span>
Character( CharacterTable( "O8+(2)" ),
 [ 1120025616016016080404040761300888
  400016161644441111115000
  1110000000222000 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( tbl, rest ).ATLAS;</span>
"1a+84abc+175a+300a+700bcd+972a+3200a+4200a" ]
</pre></div>

<p><a id="X7D8572E68194CBB9" name="X7D8572E68194CBB9"></a></p>

<h4>8.12 <span class="Heading">A Proof of Nonexistence of a Certain Subgroup</span></h4>

<p>We prove that the sporadic simple Mathieu group <span class="SimpleMath">G = M_22</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 39]</a>) has no subgroup of index <span class="SimpleMath">56</span>. In <a href="chapBib.html#biBIsa76">[Isa76]</a>, remark after Theorem 5.18, this is stated as an example of the case that a character may be a possible permutation character but not a permutation character. Let us consider the possible permutation character of degree <span class="SimpleMath">56</span> of <span class="SimpleMath">G</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tbl:= CharacterTable( "M22" );</span>
CharacterTable( "M22" )
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( tbl, rec( torso:= [ 56 ] ) );</span>
[ Character( CharacterTable( "M22" ),
  [ 5682401200211 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= perms[1];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Norm( pi );</span>
2
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( tbl, rec( chars:= perms ) );</span>
M22

     2  7  7  2  5  4  .  2  .  .  3   .   .
     3  2  1  2  .  .  .  1  .  .  .   .   .
     5  1  .  .  .  .  1  .  .  .  .   .   .
     7  1  .  .  .  .  .  .  1  1  .   .   .
    11  1  .  .  .  .  .  .  .  .  .   1   1

       12344567781111b
    211322537741111a
    312144527781111b
    512344167781111b
    712344561181111a
   111234456778a  1a  1a

Y.1    56  8  2  4  .  1  2  .  .  2   1   1
</pre></div>

<p>Suppose that <code class="code">pi</code> is a permutation character of <span class="SimpleMath">G</span>. Since <span class="SimpleMath">G</span> is <span class="SimpleMath">2</span>-transitive on the <span class="SimpleMath">56</span> cosets of the point stabilizer <span class="SimpleMath">S</span>, this stabilizer is transitive on <span class="SimpleMath">55</span> points, and thus <span class="SimpleMath">G</span> has a subgroup <span class="SimpleMath">U</span> of index <span class="SimpleMath">56 ⋅ 55 = 3080</span>. We compute the possible permutation character of this degree.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( tbl, rec( torso:= [ 56 * 55 ] ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( perms );</span>
16
</pre></div>

<p><span class="SimpleMath">U</span> is contained in <span class="SimpleMath">S</span>, so only those candidates must be considered that vanish on all classes where <code class="code">pi</code> vanishes. Furthermore, the index of <span class="SimpleMath">U</span> in <span class="SimpleMath">S</span> is odd, so the Sylow <span class="SimpleMath">2</span> subgroups of <span class="SimpleMath">U</span> and <span class="SimpleMath">S</span> are isomorphic; <span class="SimpleMath">S</span> contains elements of order <span class="SimpleMath">8</span>, hence also <span class="SimpleMath">U</span> does.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">OrdersClassRepresentatives( tbl );</span>
12344567781111 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= Filtered( perms, x -> x[5] = 0 and x[10] <> 0 );</span>
[ Character( CharacterTable( "M22" ),
  [ 30805621200200200 ] ), 
  Character( CharacterTable( "M22" ),
  [ 308082800200400 ] ), 
  Character( CharacterTable( "M22" ),
  [ 30802411400300200 ] ), 
  Character( CharacterTable( "M22" ),
  [ 30802420400000200 ] ) ]
</pre></div>

<p>For getting an overview of the distribution of the elements of <span class="SimpleMath">U</span> to the conjugacy classes of <span class="SimpleMath">G</span>, we use the output of <code class="func">PermCharInfo</code> (<a href="../../../doc/ref/chap72.html#X8477004C7A31D28C"><span class="RefLink">Reference: PermCharInfo</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">infoperms:= PermCharInfo( tbl, perms );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( tbl, infoperms.display );</span>
M22

      2    7  7  2  5  2  3
      3    2  1  2  .  1  .
      5    1  .  .  .  .  .
      7    1  .  .  .  .  .
     11    1  .  .  .  .  .

          123468a
     2P   113234a
     3P   121428a
     5P   123468a
     7P   123468a
    11P   123468a

I.1     3080 56  2 12  2  2
I.2        1 21  8 54 24 36
I.3        1  3  4  9 12 18
I.4     3080  8  2  8  2  4
I.5        1  3  8 36 24 72
I.6        1  3  4  9 12 18
I.7     3080 24 11  4  3  2
I.8        1  9 44 18 36 36
I.9        1  3  4  9 12 18
I.10    3080 24 20  4  .  2
I.11       1  9 80 18  . 36
I.12       1  3  4  9 12 18
</pre></div>

<p>We have four candidates. For each the above list shows first the character values, then the cardinality of the intersection of <span class="SimpleMath">U</span> with the classes, and then lower bounds for the lengths of <span class="SimpleMath">U</span>-conjugacy classes of these elements. Only those classes of <span class="SimpleMath">G</span> are shown that contain elements of <span class="SimpleMath">U</span> for at least one of the characters.</p>

<p>If the first two candidates are permutation characters corresponding to <span class="SimpleMath">U</span> then <span class="SimpleMath">U</span> contains exactly <span class="SimpleMath">8</span> elements of order <span class="SimpleMath">3</span> and thus <span class="SimpleMath">U</span> has a normal Sylow <span class="SimpleMath">3</span> subgroup <span class="SimpleMath">P</span>. But the order of <span class="SimpleMath">N_G(P)</span> is bounded by <span class="SimpleMath">72</span>, which can be shown as follows. The only elements in <span class="SimpleMath">G</span> with centralizer order divisible by <span class="SimpleMath">9</span> are of order <span class="SimpleMath">1</span> or <span class="SimpleMath">3</span>, so <span class="SimpleMath">P</span> is self-centralizing in <span class="SimpleMath">G</span>. The factor <span class="SimpleMath">N_G(P)/C_G(P)</span> is isomorphic with a subgroup of Aut<span class="SimpleMath">(G) ≅ GL(2,3)</span> which has order divisible by <span class="SimpleMath">16</span>, hence the order of <span class="SimpleMath">N_G(P)</span> divides <span class="SimpleMath">144</span>. Now note that <span class="SimpleMath">[ G : N_G(P) ] ≡ 1 mod 3</span> by Sylow's Theorem, and <span class="SimpleMath">|G|/144 = 3080 ≡ -1 mod 3</span>. Thus the first two candidates are not permutation characters.</p>

<p>If the last two candidates are permutation characters corresponding to <span class="SimpleMath">U</span> then <span class="SimpleMath">U</span> has self-normalizing Sylow subgroups. This is because the index of a Sylow <span class="SimpleMath">2</span> normalizer in <span class="SimpleMath">G</span> is odd and divides <span class="SimpleMath">9</span>, and if it is smaller than <span class="SimpleMath">9</span> then <span class="SimpleMath">U</span> contains at most <span class="SimpleMath">3 ⋅ 15 + 1</span> elements of <span class="SimpleMath">2</span> power order; the index of a Sylow <span class="SimpleMath">3</span> normalizer in <span class="SimpleMath">G</span> is congruent to <span class="SimpleMath">1</span> modulo <span class="SimpleMath">3</span> and divides <span class="SimpleMath">16</span>, and if it is smaller than <span class="SimpleMath">16</span> then <span class="SimpleMath">U</span> contains at most <span class="SimpleMath">4 ⋅ 8</span> elements of order <span class="SimpleMath">3</span>.</p>

<p>But since <span class="SimpleMath">U</span> is solvable and not a <span class="SimpleMath">p</span>-group, not all its Sylow subgroups can be self-normalizing; note that <span class="SimpleMath">U</span> has a proper normal subgroup <span class="SimpleMath">N</span> containing a Sylow <span class="SimpleMath">p</span> subgroup <span class="SimpleMath">P</span> of <span class="SimpleMath">U</span> for a prime divisor <span class="SimpleMath">p</span> of <span class="SimpleMath">|U|</span>, and <span class="SimpleMath">U = N ⋅ N_U(P)</span> holds by the Frattini argument (see <a href="chapBib.html#biBHup67">[Hup67, Satz I.7.8]</a>).</p>

<p><a id="X8068E9DA7CD03BF2" name="X8068E9DA7CD03BF2"></a></p>

<h4>8.13 <span class="Heading">A Permutation Character of the Lyons group</span></h4>

<p>Let <span class="SimpleMath">G</span> be a maximal subgroup with structure <span class="SimpleMath">3^{2+4}:2A_5.D_8</span> in the sporadic simple Lyons group <span class="SimpleMath">Ly</span>. We want to compute the permutation character <span class="SimpleMath">1_G^Ly</span>. (This construction has been explained in <a href="chapBib.html#biBBP98copy">[BP98, Section 4.2]</a>, without showing explicit <strong class="pkg">GAP</strongcode.)</p>

<p>In the representation of <span class="SimpleMath">Ly</span> as automorphism group of the rank <span class="SimpleMath">5</span> graph <code class="code">B</code> with <span class="SimpleMath">9606125</span> points (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 174]</a>), <span class="SimpleMath">G</span> is the stabilizer of an edge. A group <span class="SimpleMath">S</span> with structure <span class="SimpleMath">3.McL.2</span> is the point stabilizer. So the two point stabilizer <span class="SimpleMath">U = S ∩ G</span> is a subgroup of index <span class="SimpleMath">2</span> in <span class="SimpleMath">G</span>. The index of <span class="SimpleMath">U</span> in <span class="SimpleMath">S</span> is <span class="SimpleMath">15400</span>, and according to the list of maximal subgroups of <span class="SimpleMath">McL.2</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 100]</a>), the group <span class="SimpleMath">U</span> is isomorphic to the preimage in <span class="SimpleMath">3.McL.2</span> of a subgroup <span class="SimpleMath">H</span> of <span class="SimpleMath">McL.2</span> with structure <span class="SimpleMath">3_+^{1+4}:4S_5</span>.</p>

<p>Using the improved combinatorial method described in <a href="chapBib.html#biBBP98copy">[BP98, Section 3.2]</a>, all possible permutation characters of degree <span class="SimpleMath">15400</span> for the group <span class="SimpleMath">McL</span> are computed. (The method of <a href="chapBib.html#biBBP98copy">[BP98, Section 3.3]</a> is slower but also needs only a few seconds.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ly:= CharacterTable( "Ly" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mcl:= CharacterTable( "McL" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mcl2:= CharacterTable( "McL.2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">3mcl2:= CharacterTable( "3.McL.2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( mcl, rec( degree:= 15400 ) );</span>
[ Character( CharacterTable( "McL" ),
  [ 1540056911012250112002111003
      001111 ] ), Character( CharacterTable( "McL" ),
  [ 1540028010372005101002110002
      000000 ] ) ]
</pre></div>

<p>We get two characters, corresponding to the two classes of maximal subgroups of index <span class="SimpleMath">15400</span> in <span class="SimpleMath">McL</span>. The permutation character <span class="SimpleMath">π = 1_{H ∩ McL}^McL</span> is the one with nonzero value on the class <code class="code">10A</code>, since the subgroup of structure <span class="SimpleMath">2S_5</span> in <span class="SimpleMath">H ∩ McL</span> contains elements of order <span class="SimpleMath">10</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ord10:= Filtered( [ 1 .. NrConjugacyClasses( mcl ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     i -> OrdersClassRepresentatives( mcl )[i] = 10 );</span>
15 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( perms, pi -> pi[ ord10[1] ] );</span>
10 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= perms[1];</span>
Character( CharacterTable( "McL" ),
 [ 15400569110122501120021110030
  01111 ] )
</pre></div>

<p>The character <span class="SimpleMath">1_H^McL.2</span> is an extension of <span class="SimpleMath">π</span>, so we can use the method of <a href="chapBib.html#biBBP98copy">[BP98, Section 3.3]</a> to compute all possible permutation characters for the group <span class="SimpleMath">McL.2</span> that have the values of <span class="SimpleMath">π</span> on the classes of <span class="SimpleMath">McL</span>. We find that the extension of <span class="SimpleMath">π</span> to a permutation character of <span class="SimpleMath">McL.2</span> is unique. Regarded as a character of <span class="SimpleMath">3.McL.2</span>, this character is equal to <span class="SimpleMath">1_U^S</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">map:= InverseMap( GetFusionMap( mcl, mcl2 ) );</span>
123456789, [ 1011 ], 12, [ 1314 ], 151617
  18, [ 1920 ], [ 2122 ], [ 2324 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">torso:= CompositionMaps( pi, map );</span>
15400569110122501120211003011 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( mcl2, rec( torso:= torso ) );</span>
[ Character( CharacterTable( "McL.2" ),
  [ 1540056911012250112021100301
      111026240052110011 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= Inflated( perms[1], 3mcl2 );</span>
Character( CharacterTable( "3.McL.2" ),
 [ 15400154005656919110121225250011112
  2000221110000330001111
  1111026240052110011 ] )
</pre></div>

<p>The fusion of conjugacy classes of <span class="SimpleMath">S</span> in <span class="SimpleMath">Ly</span> can be computed from the character tables of <span class="SimpleMath">S</span> and <span class="SimpleMath">Ly</span> given in <a href="chapBib.html#biBCCN85">[CCN+85]</a>, it is unique up to Galois automorphisms of the table of <span class="SimpleMath">Ly</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( 3mcl2, ly );;  Length( fus );</span>
4
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= AutomorphismsOfTable( ly );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">OrbitLengths( g, fus, OnTuples );    </span>
4 ]
</pre></div>

<p>Now we can induce <span class="SimpleMath">1_U^S</span> to <span class="SimpleMath">Ly</span>, which yields <span class="SimpleMath">(1_U^S)^Ly = 1_U^Ly</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= Induced( 3mcl2, ly, [ pi ], fus[1] )[1];</span>
Character( CharacterTable( "Ly" ),
 [ 147934325000286440141680010827841250006724224
  04002200006410050200400004
  0000220000000000000000 ] )
</pre></div>

<p>All elements of odd order in <span class="SimpleMath">G</span> are contained in <span class="SimpleMath">U</span>, for such an element <span class="SimpleMath">g</span> we have</p>

<p class="pcenter">1_G^Ly(g) = |C_Ly(g)| / |G| ⋅ |G ∩ Cl_Ly(g)| = |C_Ly(g)| / (2 ⋅ |U|) ⋅ |U ∩ Cl_Ly(g)| = 1/2 ⋅ 1_U^Ly(g) ,</p>

<p>so we can prescribe the values of <span class="SimpleMath">1_G^Ly</span> on all classes of odd element order. For elements <span class="SimpleMath">g</span> of even order we have the weaker condition <span class="SimpleMath">U∩ Cl_Ly(g) ⊆ G ∩ Cl_Ly(g)</span> and thus <span class="SimpleMath">1_G^Ly(g) ≥ 1/2 ⋅ 1_U^Ly(g)</span>, which gives lower bounds for the value of <span class="SimpleMath">1_G^Ly</span> on the remaining classes.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">orders:= OrdersClassRepresentatives( ly );</span>
12334556667889101011111212
  1415151518202121222224242425283030
  31313131313333373740404242676767 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">torso:= [];;                                   </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [ 1 .. Length( orders ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if orders[i] mod 2 = 1 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       torso[i]:= pi[i]/2;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">torso;</span>
73967162500,, 708400541,, 62500,,,, 0,,, 1,,, 00,,,, 2510,
  ,, 00,,,,,, 0,,,, 000000000,,,,, 000 ]
</pre></div>

<p>Exactly one possible permutation character of <span class="SimpleMath">Ly</span> satisfies these conditions.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermChars( ly, rec( torso:= torso ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( perms );</span>
43
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= Filtered( perms, cand -> ForAll( [ 1 .. Length( orders ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">       i -> cand[i] >= pi[i] / 2 ) );</span>
[ Character( CharacterTable( "Ly" ),
  [ 7396716250020482070840054139262500145661250
      221011000032502510120000
      411001100000000022000
      00 ] ) ]
</pre></div>

<p>(The permutation character <span class="SimpleMath">1_G^Ly</span> was used in the proof that the character <span class="SimpleMath">χ_37</span> of <span class="SimpleMath">Ly</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 175]</a>) occurs with multiplicity at least 2 in each character of <span class="SimpleMath">Ly</span> that is induced from a proper subgroup of <span class="SimpleMath">Ly</span>.)</p>

<p><a id="X87D6C1A67CC7EE0A" name="X87D6C1A67CC7EE0A"></a></p>

<h4>8.14 <span class="Heading">Identifying two subgroups of Aut<span class="SimpleMath">(U_3(5))</span> (October 2001)</span></h4>

<p>According to the Atlas of Finite Groups <a href="chapBib.html#biBCCN85">[CCN+85, p. 34]</a>, the group Aut<span class="SimpleMath">(U_3(5))</span> has two classes of maximal subgroups of order <span class="SimpleMath">2^4 ⋅ 3^3</span>, which have the structures <span class="SimpleMath">3^2 : 2S_4</span> and <span class="SimpleMath">6^2 : D_12</span>, respectively.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tbl:= CharacterTable( "U3(5).3.2" );</span>
CharacterTable( "U3(5).3.2" )
<span class="GAPprompt">gap></span> <span class="GAPinput">deg:= Size( tbl ) / ( 2^4*3^3 );</span>
1750
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= PermChars( tbl, rec( torso:= [ deg ] ) );</span>
[ Character( CharacterTable( "U3(5).3.2" ),
  [ 17507013200100010710420000
      003010300100 ] ), 
  Character( CharacterTable( "U3(5).3.2" ),
  [ 1750304600000040706000000
      0200220000 ] ) ]
</pre></div>

<p>Now the question is which character belongs to which subgroup. We see that the first character vanishes on the classes of element order <span class="SimpleMath">8</span> and the second does not, so only the first one can be the permutation character induced from <span class="SimpleMath">6^2 : D_12</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ord8:= Filtered( [ 1 .. NrConjugacyClasses( tbl ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">              i -> OrdersClassRepresentatives( tbl )[i] = 8 );</span>
925 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( pi, x -> x{ ord8 } );</span>
[ [ 00 ], [ 02 ] ]
</pre></div>

<p>Thus the question is whether the second candidate is really a permutation character. Since none of the two candidates vanishes on any outer coset of <span class="SimpleMath">U_3(5)</span> in Aut<span class="SimpleMath">(U_3(5))</span>, the point stabilizers are extensions of groups of order <span class="SimpleMath">2^3 ⋅ 3^2</span> in <span class="SimpleMath">U_3(5)</span>. The restrictions of the candidates to <span class="SimpleMath">U_3(5)</span> are different, so we can try to answer the question using information about this group.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">subtbl:= CharacterTable( "U3(5)" );</span>
CharacterTable( "U3(5)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">rest:= RestrictedClassFunctions( pi, subtbl );</span>
[ Character( CharacterTable( "U3(5)" ),
  [ 1750701320000100000 ] ), 
  Character( CharacterTable( "U3(5)" ),
  [ 175030460000000000 ] ) ]
</pre></div>

<p>The intersection of the <span class="SimpleMath">3^2 : 2S_4</span> subgroup with <span class="SimpleMath">U_3(5)</span> lies inside the maximal subgroup of type <span class="SimpleMath">M_10</span>, which does not contain elements of order<span class="SimpleMath">6</span>. Only the second character has this property.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ord6:= Filtered( [ 1 .. NrConjugacyClasses( subtbl ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">              i -> OrdersClassRepresentatives( subtbl )[i] = 6 );</span>
9 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( rest, x -> x{ ord6 } );</span>
[ [ 1 ], [ 0 ] ]
</pre></div>

<p>In order to establish the two characters as permutation characters, we could also compute the permutation characters of the degree in question directly from the table of marks of <span class="SimpleMath">U_3(5)</span>, which is contained in the <strong class="pkg">GAP</strong> library of tables of marks.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">tom:= TableOfMarks( "U3(5)" );</span>
TableOfMarks( "U3(5)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermCharsTom( subtbl, tom );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Set( Filtered( perms, x -> x[1] = deg ) ) = Set( rest );</span>
true
</pre></div>

<p>We were mainly interested in the multiplicities of irreducible characters in these characters. The action of Aut<span class="SimpleMath">(U_3(5)</span> on the cosets of <span class="SimpleMath">3^2 : 2S_4</span> turns out to be multiplicity-free whereas that on the cosets of <span class="SimpleMath">6^2 : D_12</span> is not.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( tbl, pi ).ATLAS;</span>
"1a+21a+42a+84aac+105a+125a+126a+250a+252a+288bc"
  "1a+42a+84ac+105ab+125a+126a+250a+252b+288bc" ]
</pre></div>

<p>It should be noted that the restrictions of the multiplicity-free character to the subgroups <span class="SimpleMath">U_3(5).2</span> and <span class="SimpleMath">U_3(5).3</span> of Aut<span class="SimpleMath">(U_3(5)</span> are not multiplicity-free.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">subtbl2:= CharacterTable( "U3(5).2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">rest2:= RestrictedClassFunctions( pi, subtbl2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( subtbl2, rest2 ).ATLAS;</span>
"1a+21aab+28aa+56aa+84a+105a+125aab+126aab+288aa"
  "1a+21ab+28a+56a+84a+105ab+125aab+126a+252a+288aa" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">subtbl3:= CharacterTable( "U3(5).3" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">rest3:= RestrictedClassFunctions( pi, subtbl3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( subtbl3, rest3 ).ATLAS;</span>
"1a+21abc+84aab+105a+125abc+126abc+144bcef"
  "1a+21bc+84ab+105aa+125abc+126adg+144bcef" ]
</pre></div>

<p><a id="X793669787CF73A55" name="X793669787CF73A55"></a></p>

<h4>8.15 <span class="Heading">A Permutation Character of Aut<span class="SimpleMath">(O_8^+(2))</span> (October 2001)</span></h4>

<p>According to the Atlas of Finite Groups <a href="chapBib.html#biBCCN85">[CCN+85, p. 85]</a>, the group <span class="SimpleMath">G =</span> Aut<span class="SimpleMath">(O_8^+(2))</span> has a class of maximal subgroups of order <span class="SimpleMath">2^13 ⋅ 3^2</span>, thus the index of these subgroups in <span class="SimpleMath">G</span> is <span class="SimpleMath">3^4 ⋅ 5^2 ⋅ 7</span>. The intersection of these subgroups with <span class="SimpleMath">H = O_8^+(2)</span> lie inside maximal subgroups of type <span class="SimpleMath">2^6 : A_8</span>. We want to show that the permutation character of the action of <span class="SimpleMath">G</span> on the cosets of these subgroups is not multiplicity-free.</p>

<p>Since the table of marks for <span class="SimpleMath">H</span> is available in <strong class="pkg">GAP</strong>, but not that for <span class="SimpleMath">G</span>, we first compute the <span class="SimpleMath">H</span>-permutation characters of the intersections with <span class="SimpleMath">H</span> of index <span class="SimpleMath">3^4 ⋅ 5^2 ⋅ 7 = 14175</span> subgroups in <span class="SimpleMath">G</span>.</p>

<p>(Note that these intersections have order <span class="SimpleMath">2^12 ⋅ 3</span> because subgroups of order <span class="SimpleMath">2^12 ⋅ 3^2</span> are contained in <span class="SimpleMath">O_8^+(2).2</span> and hence are not maximal in <span class="SimpleMath">G</span>.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "O8+(2).3.2" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">s:= CharacterTable( "O8+(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">tom:= TableOfMarks( s );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermCharsTom( s, tom );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">deg:= 3^4*5^2*7;</span>
14175
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= Filtered( perms, x -> x[1] = deg );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( perms );</span>
4
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( Set( perms ) );</span>
1
</pre></div>

<p>We see that there are four classes of subgroups <span class="SimpleMath">S</span> in <span class="SimpleMath">H</span> that may belong to maximal subgroups of the desired index in <span class="SimpleMath">G</span>, and that the permutation characters are equal. They lead to such groups if they extend to <span class="SimpleMath">G</span>, so we compute the possible permutation characters of <span class="SimpleMath">G</span> that extend these characters.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( s, t );</span>
[ [ 1233345556789101010111212
      12131313141414151616161717171819
      20212222222323232424242526262627
      2727 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= fus[1];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">inv:= InverseMap( fus );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">comp:= CompositionMaps( perms[1], inv );</span>
14175121537579002727991570000931
  011000000 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ext:= PermChars( t, rec( torso:= comp ) );</span>
[ Character( CharacterTable( "O8+(2).3.2" ),
  [ 1417512153757900272799157000093
      1011000000639157103331
      001194512945692125130009033
      7100031000000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermCharInfo( t, ext[1] ).ATLAS;</span>
"1a+50b+100a+252bb+300b+700b+972bb+1400a+1944a+3200b+4032b" ]
</pre></div>

<p>Thus we get one permutation character of <span class="SimpleMath">G</span> which is not multiplicity-free.</p>

<p><a id="X8337F3C682B6BE63" name="X8337F3C682B6BE63"></a></p>

<h4>8.16 <span class="Heading">Four Primitive Permutation Characters of the Monster Group</span></h4>

<p>In this section, we compute four primitive permutation characters <span class="SimpleMath">1_H^M</span> of the sporadic simple Monster group <span class="SimpleMath">M</span>, using the following strategy.</p>

<p>Let <span class="SimpleMath">E</span> be an elementary abelian <span class="SimpleMath">2</span>-subgroup of <span class="SimpleMath">M</span>, and <span class="SimpleMath">H = N_M(E)</span>. For an involution <span class="SimpleMath">z ∈ E</span>, let <span class="SimpleMath">G = C_M(z)</span> and <span class="SimpleMath">U = G ∩ H = C_H(z)</span> and <span class="SimpleMath">V = C_H(E)</span>, a normal subgroup of <span class="SimpleMath">H</span>. According to the Atlas of Finite Groups <a href="chapBib.html#biBCCN85">[CCN+85, p. 234]</a>, <span class="SimpleMath">G</span> has the structure <span class="SimpleMath">2.B</span> if <span class="SimpleMath">z</span> is in the class <code class="code">2A</code> of <span class="SimpleMath">M</span>, and <span class="SimpleMath">G</span> has the structure <span class="SimpleMath">2^{1+24}_+.Co_1</span> if <span class="SimpleMath">z</span> is in the class <code class="code">2B</code> of <span class="SimpleMath">M</span>. In the latter case, let <span class="SimpleMath">N</span> denote the extraspecial normal subgroup of order <span class="SimpleMath">2^25</span> in <span class="SimpleMath">G</span>. It will turn out that in our situation, <span class="SimpleMath">U</span> contains <span class="SimpleMath">N</span>.</p>

<p>We want to compute many values of <span class="SimpleMath">1_H^M</span> from the knowledge of permutation characters <span class="SimpleMath">1_X^M</span>, for suitable subgroups <span class="SimpleMath">X</span> with the property <span class="SimpleMath">V ≤ X ≤ U</span>, and then use the <strong class="pkg">GAP</strong> function <code class="func">PermChars</code> (<a href="../../../doc/ref/chap72.html#X7D02541482C196A6"><span class="RefLink">Reference: PermChars</span></a>) for computing all those possible permutation characters of <span class="SimpleMath">M</span> that take the known values; if there is a unique solution then this is the desired character <span class="SimpleMath">1_H^M</span>.</p>

<p>(In the year 2023, the character tables of three of the four maximal subgroups <span class="SimpleMath">H</span> in question became available, and the character table of the last one became available in 2025. Since then one can compute the permutation characters directly by first computing the possible class fusions to <span class="SimpleMath">M</span> and then inducing the trivial character of <span class="SimpleMath">H</span> to <span class="SimpleMath">M</span>. We get the same results this way, see below.)</p>

<p><center> <img src="ctblpope01.png" alt="setup: some subgroups of G"/> </center></p>

<p>Why does this approach have a chance to be successful? Currently we do not have representations for the subgroups <span class="SimpleMath">H</span> in question, but the character tables of the involution centralizers <span class="SimpleMath">G</span> in <span class="SimpleMath">M</span> are available, and also either the character tables of <span class="SimpleMath">X/V</span> for the interesting subgroups <span class="SimpleMath">X</span> are known or we have enough information to compute the characters <span class="SimpleMath">1_X^G</span>.</p>

<p>And how do we compute certain values of <span class="SimpleMath">1_H^M</span>? Suppose that <span class="SimpleMath">C</span> is a union of classes of <span class="SimpleMath">M</span> and <span class="SimpleMath">I</span> is an index set such that <span class="SimpleMath">(1_H)_{C ∩ H} = (∑_{i ∈ I} c_i 1_{X_i}^H)_{C ∩ H}</span> holds for suitable rational numbers <span class="SimpleMath">c_i</span>.</p>

<p>The right hand side of this equality lives in <span class="SimpleMath">H/V</span>, provided that <span class="SimpleMath">C</span> <q>behaves well</q> w.r.t. factoring out the normal subgroup <span class="SimpleMath">V</span> of <span class="SimpleMath">H</span>, i. e., if there is a set of classes in <span class="SimpleMath">H/V</span> whose preimages in <span class="SimpleMath">H</spanform the set <span class="SimpleMath">H ∩ C</span>. For example, <span class="SimpleMath">C</span> may be the set of all those elements in <span class="SimpleMath">M</span> whose order is not divisible by a particular prime <span class="SimpleMath">p</span> that divides <span class="SimpleMath">|H|</span> but not <span class="SimpleMath">|U|</span>.</p>

<p>Under these conditions, we have <span class="SimpleMath">(1_H^M)_C = ((∑_{i ∈ I} c_i 1_{X_i}^G)^M)_C</span>, and we interpret the right hand side as follows: If <span class="SimpleMath">X_i</span> contains <span class="SimpleMath">N</span> then <span class="SimpleMath">1_{X_i}^G</span> can be identified with <span class="SimpleMath">1_{X_i/N}^{G/N}</span>. If <span class="SimpleMath">X_i</span> contains at least <span class="SimpleMath">Z</span> then <span class="SimpleMath">1_{X_i}^G</span> can be identified with <span class="SimpleMath">1_{X_i/Z}^{G/Z}</span>. As mentioned above, we have good chances to compute these characters. So the main task in each of the following sections is to find, for a suitable set <span class="SimpleMath">C</span> of classes, a linear combination of permutation characters of <span class="SimpleMath">H/V</span> whose restriction to <span class="SimpleMath">(C ∩ H) / V</span> is constant and nonzero.</p>

<p><a id="X78A8A1248336DD26" name="X78A8A1248336DD26"></a></p>

<h5>8.16-1 <span class="Heading">The Subgroup <span class="SimpleMath">2^2.2^11.2^22.(S_3 × M_24)</span>
(June 2009)</span></h5>

<p>According to the Atlas of Finite Groups <a href="chapBib.html#biBCCN85">[CCN+85, p. 234]</a>, the Monster group <span class="SimpleMath">M</span> has a class of maximal subgroups <span class="SimpleMath">H</span> of the type <span class="SimpleMath">2^2.2^11.2^22.(S_3 × M_24)</span>. Currently the character table of <span class="SimpleMath">H</span> and the class fusion into <span class="SimpleMath">M</span> are not available in <strong class="pkg">GAP</strong>. We are interested in the permutation character <span class="SimpleMath">1_H^G</span>, and we will compute it without this information.</p>

<p>The subgroup <span class="SimpleMath">H</span> normalizes a Klein four group <span class="SimpleMath">E</span> whose involutions lie in the class <code class="code">2B</code>. We fix an involution <span class="SimpleMath">z</span> in <span class="SimpleMath">E</span>, and set <span class="SimpleMath">G = C_M(z)</span>, <span class="SimpleMath">U = C_H(z)</span>, and <span class="SimpleMath">V = C_H(E)</span>. Further, let <span class="SimpleMath">N</span> be the extraspecial normal subgroup of order <span class="SimpleMath">2^25</span> in <span class="SimpleMath">G</span>.</p>

<p>So <span class="SimpleMath">G</span> has the structure <span class="SimpleMath">2^{1+24}_+.Co_1</span>, and <span class="SimpleMath">U</span> has index three in <span class="SimpleMath">H</span>. The order of <span class="SimpleMath">N U / N</span> is a multiple of <span class="SimpleMath">2^{2+11+22-25} ⋅ 2 ⋅ |M_24|</span>, and <span class="SimpleMath">N U / N</span> occurs as a subgroup of <span class="SimpleMath">G / N ≅ Co_1</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">co1:= CharacterTable( "Co1" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">order:= 2^(2+11+22-25) * 2 * Size( CharacterTable( "M24" ) );</span>
501397585920
<span class="GAPprompt">gap></span> <span class="GAPinput">maxes:= List( Maxes( co1 ), CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );</span>
[ CharacterTable( "2^11:M24" ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( filt, t -> Size( t ) / order );</span>
1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">k:= filt[1];;</span>
</pre></div>

<p>The list of maximal subgroups of <span class="SimpleMath">Co_1</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 183]</a>) tells us that <span class="SimpleMath">NU / N</span> is a maximal subgroup <span class="SimpleMath">K</span> of <span class="SimpleMath">Co_1</span> and has the structure <span class="SimpleMath">2^11:M_24</span>. In particular, <span class="SimpleMath">U</span> contains <span class="SimpleMath">N</span> and thus <span class="SimpleMath">U/N ≅ K</span>.</p>

<p>Let <span class="SimpleMath">C = { g ∈ M; 3 ∤ |g|</span> or <span class="SimpleMath">1_V^M(g^3) = 0 }</span>.</p>

<p>Then <span class="SimpleMath">(1_H)_{C ∩ H} = (1_U^H - 1/3 1_V^H)_{C ∩ H}</span> holds, as we can see from computations with <span class="SimpleMath">H/V ≅ S_3</span>, as follows.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f:= CharacterTable( "Symmetric"3 );</span>
CharacterTable( "Sym(3)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">OrdersClassRepresentatives( f );</span>
123 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">deg3:= PermChars( f, 3 );</span>
[ Character( CharacterTable( "Sym(3)" ), [ 310 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">deg6:= PermChars( f, 6 );</span>
[ Character( CharacterTable( "Sym(3)" ), [ 600 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">deg3[1] - 1/3 * deg6[1];</span>
ClassFunction( CharacterTable( "Sym(3)" ), [ 110 ] )
</pre></div>

<p>The character table of <span class="SimpleMath">G</span> is available in <strong class="pkg">GAP</strong>, so we can compute the permutation character <span class="SimpleMath">π = 1_U^G</span> by computing the primitive permutation character <span class="SimpleMath">1_K^{Co_1}</span>, identifying it with <span class="SimpleMath">1_{U/N}^{G/N}</span>, and then inflating this character to <span class="SimpleMath">G</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m:= CharacterTable( "M" );</span>
CharacterTable( "M" )
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= CharacterTable( "MC2B" );</span>
CharacterTable( "2^1+24.Co1" )
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= RestrictedClassFunction( TrivialCharacter( k )^co1, g );;</span>
</pre></div>

<p>Next we consider the permutation character <span class="SimpleMath">ϕ = 1_V^G</span>. The group <span class="SimpleMath">V</span> does not contain <span class="SimpleMath">N</span> because <span class="SimpleMath">K</span> is perfect. But <span class="SimpleMath">V</span> contains <span class="SimpleMath">Z</span> because otherwise <span class="SimpleMath">U</span> would be a direct product of <span class="SimpleMath">V</span> and <span class="SimpleMath">Z</span>, which would imply that <span class="SimpleMath">N</span> would be a direct product of <span class="SimpleMath">V ∩ N</span> and <span class="SimpleMath">Z</span>. So we can regard <span class="SimpleMath">ϕ</span> as the inflation of <span class="SimpleMath">1_{V/Z}^{G/Z}</span> from <span class="SimpleMath">G/Z</span> to <span class="SimpleMath">G</span>, i. e., we can perform the computations with the charactetable of the factor group <span class="SimpleMath">G/Z</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zclasses:= ClassPositionsOfCentre( g );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">gmodz:= g / zclasses;</span>
CharacterTable( "2^1+24.Co1/[ 1, 2 ]" )
<span class="GAPprompt">gap></span> <span class="GAPinput">invmap:= InverseMap( GetFusionMap( g, gmodz ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pibar:= CompositionMaps( pi, invmap );;</span>
</pre></div>

<p>Since <span class="SimpleMath">ϕ(g) = [G:V] ⋅ |g^G ∩ V| / |g^G|</span> holds for <span class="SimpleMath">g ∈ G</span>, and since <span class="SimpleMath">g^G ∩ V ⊆ g^G ∩ VN</span>, with equality if <span class="SimpleMath">g</span> has odd order, we get <span class="SimpleMath">ϕ(g) = 2 ⋅ π(g)</span> if <span class="SimpleMath">g</span> has odd order, and <span class="SimpleMath">ϕ(g) = 0</span> if <span class="SimpleMath">π(g) = 0</span>.</p>

<p>We want to compute the possible permutation characters with these values.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">factorders:= OrdersClassRepresentatives( gmodz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">phibar:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [ 1 .. NrConjugacyClasses( gmodz ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if factorders[i] mod 2 = 1 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       phibar[i]:= 2 * pibar[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">     elif pibar[i] = 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       phibar[i]:= 0;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( gmodz, rec( torso:= phibar ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( cand );</span>
1
</pre></div>

<p>Now we know <span class="SimpleMath">π^M = 1_U^M</span> and <span class="SimpleMath">ϕ^M = 1_V^M</span>, so we can write down <span class="SimpleMath">(1_H^M)_C</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">phi:= RestrictedClassFunction( cand[1], g )^m;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= pi^m;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= ShallowCopy( pi - 1/3 * phi );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">morders:= OrdersClassRepresentatives( m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [ 1 .. Length( morders ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if morders[i] mod 3 = 0 and phi[ PowerMap( m, 3 )[i] ] <> 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Unbind( cand[i] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
</pre></div>

<p>We claim that <span class="SimpleMath">1_H^M(g) ≥ π^M(g) - 1/3 ψ^M(g)</span> for all <span class="SimpleMath">g ∈ M</span>. In order to see this, let <span class="SimpleMath">H'</span> denote the index two subgroup of <span class="SimpleMath">H</span>, and let <span class="SimpleMath">g ∈ M</span>. Since <span class="SimpleMath">H</span> is the disjoint union of <span class="SimpleMath">V</span>, <span class="SimpleMath">H' ∖ V</span>, and three <span class="SimpleMath">H</span>-conjugates of <span class="SimpleMath">U ∖ V</span>, we get</p>

<p><div class="pcenter"><table> <tr> <td class="tdright"><span class="SimpleMath">1_H^M(g)</span></td> <td class="tdcenter"><span class="SimpleMath">=</span></td> <td class="tdleft"><span class="SimpleMath">[M:H] ⋅ |g^M ∩ H| / |g^M|</span></td> </tr> <tr> <td class="tdcenter"><span class="SimpleMath"> </span></td> <td class="tdcenter"><span class="SimpleMath">=</span></td> <td class="tdcenter"><span class="SimpleMath">[M:H] ⋅ ( |g^M ∩ V| + 3 |g^M ∩ U \ V| + |g^M ∩ H' \ V| ) / |g^M|</span></td> </tr> <tr> <td class="tdcenter"><span class="SimpleMath"> </span></td> <td class="tdcenter"><span class="SimpleMath">=</span></td> <td class="tdcenter"><span class="SimpleMath">[M:H] ⋅ ( 3 |g^M ∩ U| - 2 |g^M ∩ V| + |g^M ∩ H' \ V| ) / |g^M|</span></td> </tr> <tr> <td class="tdcenter"><span class="SimpleMath"> </span></td> <td class="tdcenter"><span class="SimpleMath">=</span></td> <td class="tdcenter"><span class="SimpleMath">1_U^M(g) - 1/3 ⋅ 1_V^G(g) + [M:H] ⋅ |g^M ∩ H' \ V| / |g^M| .</span></td> </tr> </table> </div></p>

<p>Possible constituents of <span class="SimpleMath">1_H^M</span> are those rational irreducible characters of <span class="SimpleMath">M</span> that are constituents of <span class="SimpleMath">π^M</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">constit:= Filtered( RationalizedMat( Irr( m ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                       chi -> ScalarProduct( m, chi, pi ) <> 0 );;</span>
</pre></div>

<p>Now we compute the possible permutation characters that have the prescribed values, are compatible with the given lower bounds for values, and have only constituents in the given list.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( m,</span>
<span class="GAPprompt">></span> <span class="GAPinput">     rec( torso:= cand, chars:= constit,</span>
<span class="GAPprompt">></span> <span class="GAPinput">          lower:= ShallowCopy( pi - 1/3 * phi ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">          normalsubgroup:= [ 1 .. NrConjugacyClasses( m ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">          nonfaithful:= TrivialCharacter( m ) ) );</span>
[ Character( CharacterTable( "M" ),
  [ 160091156298756840063435509449218757774182899642733721875
      1201685444133378754436049512692980215448838605
      131873639625760550656275110042727795943894035568854195
      1851609375046803112204054057862475614467005178605
      248265874650076995591163224055349552953920727
      00375375157750004951165323645623161017
      11268357170145117705004410149803780810
      0083135310000000255195021500
      210042035151116048992259951
      21000009874420001207610000
      001106000000000000530
      0018010033011110020000
      0020000061200200020011
      000000020200111100000
      0000000 ] ) ]
</pre></div>

<p>There is only one candidate, so we have found the permutation character.</p>

<p>The character table of <span class="SimpleMath">H</span> is available since 2023. We can compute the permutation character directly from this table.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">h:= CharacterTable( "2^(2+11+22).(M24xS3)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( h, m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand = Set( fus, map -> InducedClassFunctionsByFusionMap( h, m,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             [ TrivialCharacter( h ) ], map )[1] );</span>
true
</pre></div>

<p><a id="X79E9247182B20474" name="X79E9247182B20474"></a></p>

<h5>8.16-2 <span class="Heading">The Subgroup <span class="SimpleMath">2^3.2^6.2^12.2^18.(L_3(2) × 3.S_6)</span>
(September 2009)</span></h5>

<p>According to the Atlas of Finite Groups <a href="chapBib.html#biBCCN85">[CCN+85, p. 234]</a>, the Monster group <span class="SimpleMath">M</span> has a class of maximal subgroups <span class="SimpleMath">H</span> of the type <span class="SimpleMath">2^3.2^6.2^12.2^18.(L_3(2) × 3.S_6)</span>. Currently the character table of <span class="SimpleMath">H</span> and the class fusion into <span class="SimpleMath">M</span> are not available in <strong class="pkg">GAP</strong>. We are interested in the permutation character <span class="SimpleMath">1_H^G</span>, and we will compute it without this information.</p>

<p>The subgroup <span class="SimpleMath">H</span> normalizes an elementary abelian group <span class="SimpleMath">E</span> of order eight whose involutions lie in the class <code class="code">2B</code>. We fix an involution <span class="SimpleMath">z</span> in <span class="SimpleMath">E</span>, and set <span class="SimpleMath">G = C_M(z)</span>, <span class="SimpleMath">U = C_H(z)</span>, and <span class="SimpleMath">V = C_H(E)</span>. Further, let <span class="SimpleMath">N</span> be the extraspecial normal subgroup of order <span class="SimpleMath">2^25</span> in <span class="SimpleMath">G</span>.</p>

<p>So <span class="SimpleMath">G</span> has the structure <span class="SimpleMath">2^{1+24}_+.Co_1</span>, and <span class="SimpleMath">U</span> has index seven in <span class="SimpleMath">H</span>. The order of <span class="SimpleMath">N U / N</span> is a multiple of <span class="SimpleMath">2^{3+6+12+18-25} ⋅ |L_3(2)| ⋅ |3.S_6| / 7</span>, and <span class="SimpleMath">N U / N</span> occurs as a subgroup of <span class="SimpleMath">G / N ≅ Co_1</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">co1:= CharacterTable( "Co1" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">order:= 2^(3+6+12+18-25) * 168 * 3 * Factorial( 6 ) / 7;</span>
849346560
<span class="GAPprompt">gap></span> <span class="GAPinput">maxes:= List( Maxes( co1 ), CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );</span>
[ CharacterTable( "2^(1+8)+.O8+(2)" ), 
  CharacterTable( "2^(4+12).(S3x3S6)" ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( filt, t -> Size( t ) / order );</span>
1051 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">o8p2:= CharacterTable( "O8+(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">PermChars( o8p2, rec( torso:= [ 105 ] ) );</span>
[  ]
<span class="GAPprompt">gap></span> <span class="GAPinput">k:= filt[2];;</span>
</pre></div>

<p>The list of maximal subgroups of <span class="SimpleMath">Co_1</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 183]</a>) tells us that <span class="SimpleMath">NU / N</span> is a maximal subgroup <span class="SimpleMath">K</span> of <span class="SimpleMath">Co_1</span> and has the structure <span class="SimpleMath">2^{4+12}.(S_3 × 3.S_6)</span>. (Note that the group <span class="SimpleMath">O_8^+(2)</span> has no proper subgroup of index <span class="SimpleMath">105</span>.) In particular, <span class="SimpleMath">U</span> contains <span class="SimpleMath">N</span> and thus <span class="SimpleMath">U/N ≅ K</span>.</p>

<p>Let <span class="SimpleMath">C</span> be the set of elements in <span class="SimpleMath">M</spanwhose order is not divisible by <span class="SimpleMath">7</span>. Then <span class="SimpleMath">(1_H)_{C ∩ H} = (1_U^H - 1/3 1_VN^H + 1/21 1_V^H)_{C ∩ H}</span> holds, as we can see from computations with <span class="SimpleMath">H/V ≅ L_3(2)</span>, as follows.</p>

<p>So S4, V4, 1 suffice! --></p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f:= CharacterTable( "L3(2)" );</span>
CharacterTable( "L3(2)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">OrdersClassRepresentatives( f );</span>
123477 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">deg7:= PermChars( f, 7 );</span>
[ Character( CharacterTable( "L3(2)" ), [ 731100 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">deg42:= PermChars( f, 42 );</span>
[ Character( CharacterTable( "L3(2)" ), [ 4220200 ] ), 
  Character( CharacterTable( "L3(2)" ), [ 4260000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">deg168:= PermChars( f, 168 );</span>
[ Character( CharacterTable( "L3(2)" ), [ 16800000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">deg7[1] - 1/3 * deg42[2] + 1/21 * deg168[1];</span>
ClassFunction( CharacterTable( "L3(2)" ), [ 111100 ] )
</pre></div>

<p>(Note that <span class="SimpleMath">VN/V</span> is a Klein four group, and there is only one transitive permutation character of <span class="SimpleMath">L_3(2)</span> that is induced from such subgroups.)</p>

<p>The character table of <span class="SimpleMath">G</span> is available in <strong class="pkg">GAP</strong>, so we can compute the permutation character <span class="SimpleMath">π = 1_U^G</span> by computing the primitive permutation character <span class="SimpleMath">1_K^{Co_1}</span>, identifying it with <span class="SimpleMath">1_{U/N}^{G/N}</span>, and then inflating this character to <span class="SimpleMath">G</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m:= CharacterTable( "M" );</span>
CharacterTable( "M" )
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= CharacterTable( "MC2B" );</span>
CharacterTable( "2^1+24.Co1" )
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= RestrictedClassFunction( TrivialCharacter( k )^co1, g );;</span>
</pre></div>

<p>The permutation character <span class="SimpleMath">ψ = 1_VN^G</span> can be computed as the inflation of <span class="SimpleMath">1_{VN/N}^{G/N} = (1_{VN/N}^{U/N})^{G/N}</span>, where <span class="SimpleMath">1_{VN/N}^{U/N}</span> is a character of <span class="SimpleMath">K</span> that can be identified with the regular permutation character of <span class="SimpleMath">U/VN ≅ S_3</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">nsg:= ClassPositionsOfNormalSubgroups( k );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">nsgsizes:= List( nsg, x -> Sum( SizesConjugacyClasses( k ){ x } ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">nn:= nsg[ Position( nsgsizes, Size( k ) / 6 ) ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi:= 0 * [ 1 .. NrConjugacyClasses( k ) ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in nn do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     psi[i]:= 6;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi:= InducedClassFunction( k, psi, co1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi:= RestrictedClassFunction( psi, g );;</span>
</pre></div>

<p>Next we consider the permutation character <span class="SimpleMath">ϕ = 1_V^G</span>. The group <span class="SimpleMath">V</span> does not contain <span class="SimpleMath">N</span> because <span class="SimpleMath">K</span> does not have a factor group of the type <span class="SimpleMath">S_4</span>. But <span class="SimpleMath">V</span> contains <span class="SimpleMath">Z</span> because <span class="SimpleMath">U/V</span> is centerless. So we can regard <span class="SimpleMath">ϕ</span> as the inflation of <span class="SimpleMath">1_{V/Z}^{G/Z}</span> from <span class="SimpleMath">G/Z</span> to <span class="SimpleMath">G</span>, i. e., we can perform the computations with the character table of the factor group <span class="SimpleMath">G/Z</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">zclasses:= ClassPositionsOfCentre( g );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">gmodz:= g / zclasses;</span>
CharacterTable( "2^1+24.Co1/[ 1, 2 ]" )
<span class="GAPprompt">gap></span> <span class="GAPinput">invmap:= InverseMap( GetFusionMap( g, gmodz ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">psibar:= CompositionMaps( psi, invmap );;</span>
</pre></div>

<p>Since <span class="SimpleMath">ϕ(g) = [G:V] ⋅ |g^G ∩ V| / |g^G|</span> holds for <span class="SimpleMath">g ∈ G</span>, and since <span class="SimpleMath">g^G ∩ V ⊆ g^G ∩ VN</span>, with equality if <span class="SimpleMath">g</span> has odd order, we get <span class="SimpleMath">ϕ(g) = 4 ⋅ ψ(g)</span> if <span class="SimpleMath">g</span> has odd order, and <span class="SimpleMath">ϕ(g) = 0</span> if <span class="SimpleMath">ψ(g) = 0</span>.</p>

<p>We want to compute the possible permutation characters with these values. This is easier if we <q>go down</q> from <span class="SimpleMath">VN</span> to <span class="SimpleMath">V</span> in two steps.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">factorders:= OrdersClassRepresentatives( gmodz );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">phibar:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">upperphibar:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [ 1 .. NrConjugacyClasses( gmodz ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if factorders[i] mod 2 = 1 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       phibar[i]:= 2 * psibar[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">     elif psibar[i] = 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       phibar[i]:= 0;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     upperphibar[i]:= 2 * psibar[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( gmodz, rec( torso:= phibar,</span>
<span class="GAPprompt">></span> <span class="GAPinput">            upper:= upperphibar,</span>
<span class="GAPprompt">></span> <span class="GAPinput">            normalsubgroup:= [ 1 .. NrConjugacyClasses( gmodz ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">            nonfaithful:= TrivialCharacter( gmodz ) ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( cand );</span>
3
</pre></div>

<p>One of the candidates computed in this first step is excluded by the fact that it is induced from a subgroup that contains <span class="SimpleMath">N/Z</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">nn:= First( ClassPositionsOfNormalSubgroups( gmodz ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">               x -> Sum( SizesConjugacyClasses( gmodz ){x} ) = 2^24 );</span>
1 .. 4 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cont:= PermCharInfo( gmodz, cand ).contained;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= cand{ Filtered( [ 1 .. Length( cand ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                          i -> Sum( cont[i]{ nn } ) < 2^24 ) };;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( cand );</span>
2
</pre></div>

<p>Now we run the second step. After excluding the candidates that cannot be induced from subgroups whose intersection with <span class="SimpleMath">N/Z</span> has index four in <span class="SimpleMath">N/Z</span>, we get four solutions.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">poss:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for v in cand do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     phibar:= [];</span>
<span class="GAPprompt">></span> <span class="GAPinput">     upperphibar:= [];</span>
<span class="GAPprompt">></span> <span class="GAPinput">     for i in [ 1 .. NrConjugacyClasses( gmodz ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">       if factorders[i] mod 2 = 1 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">         phibar[i]:= 2 * v[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">       elif v[i] = 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">         phibar[i]:= 0;</span>
<span class="GAPprompt">></span> <span class="GAPinput">       fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">       upperphibar[i]:= 2 * v[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">     od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Append( poss, PermChars( gmodz, rec( torso:= phibar,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     upper:= upperphibar,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     normalsubgroup:= [ 1 .. NrConjugacyClasses( gmodz ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     nonfaithful:= TrivialCharacter( gmodz ) ) ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( poss );</span>
6
<span class="GAPprompt">gap></span> <span class="GAPinput">cont:= PermCharInfo( gmodz, poss ).contained;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">poss:= poss{ Filtered( [ 1 .. Length( poss ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                          i -> Sum( cont[i]{ nn } ) < 2^23 ) };;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( poss );</span>
4
<span class="GAPprompt">gap></span> <span class="GAPinput">phicand:= RestrictedClassFunctions( poss, g );;</span>
</pre></div>

<p>Since we have several candidates for <span class="SimpleMath">1_V^G</span>, we form the linear combinations for all these candidates.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">phicand:= RestrictedClassFunctions( poss, g );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">phicand:= InducedClassFunctions( phicand, m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">psi:= psi^m;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= pi^m;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= List( phicand,</span>
<span class="GAPprompt">></span> <span class="GAPinput">            phi -> ShallowCopy( pi - 1/3 * psi + 1/21 * phi ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">morders:= OrdersClassRepresentatives( m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for x in cand do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     for i in [ 1 .. Length( morders ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">       if morders[i] mod 7 = 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">         Unbind( x[i] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
</pre></div>

<p>Exactly one of the candidates has only integral values.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= Filtered( cand, x -> ForAll( x, IsInt ) );</span>
[ [ 4050306254358548053604918389065234375148844831270071996434375
      2815847622206994375145673657530250853447181417680
      65936819812535201538231755484643532555706077895
      30565666952645156250195728954856486480186109245
      61410960758160688365,,, 1725031264351376155137935
      9912752731001196253625000040281329160
      18530127812106919324212360576112500,,,, 2160
      81000111179430000000185105065
      00,,,,, 00003371053615737181816421
      00000,,,,, 00604010000001100
      0,,, 00000000051000,,,,, 0000
      000003000000,,,, 00068002
      00000000,,, 00000,,,, 000000
      00000000,, 0 ] ]
</pre></div>

<p>Possible constituents of <span class="SimpleMath">1_H^M</span> are those rational irreducible characters of <span class="SimpleMath">M</span> that are constituents of <span class="SimpleMath">π^M</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">constit:= Filtered( RationalizedMat( Irr( m ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                       chi -> ScalarProduct( m, chi, pi ) <> 0 );;</span>
</pre></div>

<p>Now we compute the possible permutation characters that have the prescribed values and have only constituents in the given list.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( m, rec( torso:= cand[1], chars:= constit ) );</span>
[ Character( CharacterTable( "M" ),
  [ 4050306254358548053604918389065234375148844831270071996434375
      2815847622206994375145673657530250853447181417680
      65936819812535201538231755484643532555706077895
      30565666952645156250195728954856486480186109245
      614109607581606883655831001725031264351376155
      13793599127527310011962536250000402813
      2916018530127812106919324212360576112500
      1302294021608100011117943000000
      01851050650022401400000337105
      3615737181816421000007038140
      006040100000011000100000
      0000005100024060000000
      000300000020000068002
      000000002000000402000
      000000000004000 ] ) ]
</pre></div>

<p>There is only one candidate, so we have found the permutation character.</p>

<p>The character table of <span class="SimpleMath">H</span> is available since 2023. We can compute the permutation character directly from this table. (The class fusion from <span class="SimpleMath">H</span> to <span class="SimpleMath">M</span> is unique up to table automorphisms, but its computation is a bit tricky, thus we do not compute this fusion here.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">h:= CharacterTable( "2^[39].(L3(2)x3.S6)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand[1] = TrivialCharacter( h )^m;</span>
true
</pre></div>

<p><a id="X7BC36C597E542DEE" name="X7BC36C597E542DEE"></a></p>

<h5>8.16-3 <span class="Heading">The Subgroup <span class="SimpleMath">2^5.2^10.2^20.(S_3 × L_5(2))</span>
(October 2009)</span></h5>

<p>According to the Atlas of Finite Groups <a href="chapBib.html#biBCCN85">[CCN+85, p. 234]</a>, the Monster group <span class="SimpleMath">M</span> has a class of maximal subgroups <span class="SimpleMath">H</span> of the type <span class="SimpleMath">2^5.2^10.2^20.(S_3 × L_5(2))</span>. Currently the character table of <span class="SimpleMath">H</span> and the class fusion into <span class="SimpleMath">M</span> are not available in <strong class="pkg">GAP</strong>. We are interested in the permutation character <span class="SimpleMath">1_H^G</span>, and we will compute it without this information.</p>

<p>The subgroup <span class="SimpleMath">H</span> normalizes an elementary abelian group <span class="SimpleMath">E</span> of order <span class="SimpleMath">32</span> whose involutions lie in the class <code class="code">2B</code>. We fix an involution <span class="SimpleMath">z</span> in <span class="SimpleMath">E</span>, and set <span class="SimpleMath">G = C_M(z)</span>, <span class="SimpleMath">U = C_H(z)</span>, and <span class="SimpleMath">V = C_H(E)</span>. Further, let <span class="SimpleMath">N</span> be the extraspecial normal subgroup of order <span class="SimpleMath">2^25</span> in <span class="SimpleMath">G</span>.</p>

<p>So <span class="SimpleMath">G</span> has the structure <span class="SimpleMath">2^{1+24}_+.Co_1</span>, and <span class="SimpleMath">U</span> has index <span class="SimpleMath">31</span> in <span class="SimpleMath">H</span>. The order of <span class="SimpleMath">N U / N</span> is a multiple of <span class="SimpleMath">2^{5+10+20-25} ⋅ |L_5(2)| ⋅ |S_3| / 31</span>, and <span class="SimpleMath">N U / N</span> occurs as a subgroup of <span class="SimpleMath">G / N ≅ Co_1</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">co1:= CharacterTable( "Co1" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">order:= 2^35*Size( CharacterTable"L5(2)" ) )*6 / 2^25 / 31;</span>
1981808640
<span class="GAPprompt">gap></span> <span class="GAPinput">maxes:= List( Maxes( co1 ), CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );</span>
[ CharacterTable( "2^11:M24" ), CharacterTable( "2^(1+8)+.O8+(2)" ), 
  CharacterTable( "2^(2+12):(A8xS3)" ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( filt, t -> Size( t ) / order );</span>
253451 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">m24:= CharacterTable( "M24" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( m24, rec( torso:=253 ] ) );</span>
[ Character( CharacterTable( "M24" ),
  [ 2532913101551321111302111
      001100 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">TestPerm5( m24, cand, m24 mod 11 );</span>
[  ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermChars( CharacterTable( "O8+(2)" ), rec( torso:=[ 45 ] ) );</span>
[  ]
<span class="GAPprompt">gap></span> <span class="GAPinput">k:= filt[3];;</span>
</pre></div>

<p>The list of maximal subgroups of <span class="SimpleMath">Co_1</span> (see <a href="chapBib.html#biBCCN85">[CCN+85, p. 183]</a>) tells us that <span class="SimpleMath">NU / N</span> is a maximal subgroup <span class="SimpleMath">K</span> of <span class="SimpleMath">Co_1</span> and has the structure <span class="SimpleMath">2^{2+12}.(A_8 × S_3)</span>. (Note that the group <span class="SimpleMath">M_24</span> has no proper subgroup of index <span class="SimpleMath">253</span>, which is shown above using the <span class="SimpleMath">11</span>-modular Brauer table of <span class="SimpleMath">M_24</span>. Furthermore, the group <span class="SimpleMath">O_8^+(2)</span> has no subgroup of index <span class="SimpleMath">45</span>.) In particular, <span class="SimpleMath">U</span> contains <span class="SimpleMath">N</span> and thus <span class="SimpleMath">U/N ≅ K</span>.</p>

<p>Let <span class="SimpleMath">C</span> be the set of elements in <span class="SimpleMath">M</spanwhose order is not divisible by <span class="SimpleMath">31</span> or <span class="SimpleMath">21</span>. We want to find an index set <span class="SimpleMath">I</span> and subgroups <span class="SimpleMath">X_i</span>, for <span class="SimpleMath">i ∈ I</span>, with the property that <span class="SimpleMath">V ≤ X_i ≤ U</span> and</p>

<p class="pcenter">(1_H)_{C ∩ H} = ( ∑_{i ∈ I} c_i 1_{X_i}^H )_{C ∩ H}</p>

<p>holds for suitable rational integers <span class="SimpleMath">c_i</span>. Let <span class="SimpleMath">W</span> be the full preimage of the elementary normal subgroup of order <span class="SimpleMath">16</span> in <span class="SimpleMath">U/V ≅ 2^4.A_8</span> under the natural epimorphism from <span class="SimpleMath">U</span> to <span class="SimpleMath">U/V</span>, and set <span class="SimpleMath">I_1 = { i ∈ I; W ≤ X_i }</span> and <span class="SimpleMath">I_2 = I ∖ I_1</span>.</p>

<p>Using the known table of marks of <span class="SimpleMath">U/V</span>, we will find a solution such that <span class="SimpleMath">[W:(W ∩ X_i)] = 2</span> for all <span class="SimpleMath">i ∈ I_2</span>. First we compute the permutation characters <span class="SimpleMath">1_S^{U/V}</span> for all subgroups <span class="SimpleMath">S</span> of <span class="SimpleMath">U/V</span> that contain <span class="SimpleMath">W/V</span>, and induce them to <span class="SimpleMath">H/V</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">subtbl:= CharacterTable( "2^4:A8" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">subtom:= TableOfMarks( subtbl );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">perms:= PermCharsTom( subtbl, subtom );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">nsg:= ClassPositionsOfNormalSubgroups( subtbl );</span>
[ [ 1 ], [ 12 ], [ 1 .. 25 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">above:= Filtered( perms, x -> x[1] = x[2] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">tbl:= CharacterTable( "L5(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">above:= Set( Induced( subtbl, tbl, above ) );;</span>
</pre></div>

<p>Next we compute the permutation characters <span class="SimpleMath">1_S^{U/V}</span> for all subgroups <span class="SimpleMath">S</span> of <span class="SimpleMath">U/V</span> whose intersection with <span class="SimpleMath">W/V</span> has index two in <span class="SimpleMath">W/V</span>. Afterwards we exclude certain subgroups that would slow down later computations, and induce also these characters to <span class="SimpleMath">H/V</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">index2:= Filtered( perms,</span>
<span class="GAPprompt">></span> <span class="GAPinput">     x -> Sum( PermCharInfo( subtbl, [x] ).contained[1]{ [1,2] } ) = 8 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">index2:= Filtered( index2, x -> not x[1] in [ 63084012601680 ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">index2:= Set( Induced( subtbl, tbl, index2 ) );;</span>
</pre></div>

<p>Now we induce the permutation characters to <span class="SimpleMath">H/V</span>, and compute the coefficients of a linear combination as desired.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">orders:= OrdersClassRepresentatives( tbl );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">goodclasses:= Filtered( [ 1 .. NrConjugacyClasses( tbl ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                           i -> not orders[i] in [ 2131 ] );</span>
12345678910111213141516171819 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">matrix:= List( Concatenation( above, index2 ), x -> x{ goodclasses } );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sol:= SolutionMat( matrix,</span>
<span class="GAPprompt">></span> <span class="GAPinput">             ListWithIdenticalEntries( Length( goodclasses ), 1 ) );</span>
692/65157/217, -78/217, -26/217074/65111/21703/217
  151/651022/651000, -11/21700000000
  -115/6510, -3/310000000000000000
  0000000000000000000000
  0000000000000000000000
  000000000000000000, -34/93
  -11/65102/2100000000001/310000
  0000000000000000000000
  0000000000000000000000
  0000000000000000000000
  0000000000000000000000
  0000000000000000000000
  000000000000000000000 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">nonzero:= Filtered( [ 1 .. Length( sol ) ], i -> sol[i] <> 0 );</span>
12346791012162527106107109120 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">sol:= sol{ nonzero };;</span>
</pre></div>

<p>Now we transfer this linear combination to the character tables which are given in our situation.</p>

<p>Those constituents that are induced from subgroups of <span class="SimpleMath">H</span> above <span class="SimpleMath">W</span> can be identified uniquely via their degrees and their values distribution; we compute these characters in the character table of <span class="SimpleMath">U/W</span> obtained as a factor table of the character table of <span class="SimpleMath">U/N</span>, lift them back to <span class="SimpleMath">U/N</span>, induce them to <span class="SimpleMath">G/N</span>, inflate them to <span class="SimpleMath">G</span>, and then induce them fo <span class="SimpleMath">M</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">a8degrees:= List( above{ Filtered( nonzero,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                x -> x <= Length( above ) ) },</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     x -> x[1] ) / 31;</span>
181528565670105120168336336 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">a8tbl:= subtbl / [ 12 ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">invtoa8:= InverseMap( GetFusionMap( subtbl, a8tbl ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">nsg:= ClassPositionsOfNormalSubgroups( k );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">nn:= First( nsg, x -> Sum( SizesConjugacyClasses( k ){ x } ) = 6*2^14 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a8tbl_other:= k / nn;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:= CharacterTable( "MC2B" );</span>
CharacterTable( "2^1+24.Co1" )
<span class="GAPprompt">gap></span> <span class="GAPinput">constit:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [ 1 .. Length( a8degrees ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     cand:= PermChars( a8tbl_other, rec( torso:= [ a8degrees[i] ] ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     filt:= Filtered( perms, x -> x^tbl = above[ nonzero[i] ] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     filt:= List( filt, x -> CompositionMaps( x, invtoa8 ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     cand:= Filtered( cand,</span>
<span class="GAPprompt">></span> <span class="GAPinput">              x -> ForAny( filt, y -> Collected( x ) = Collected(y) ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Add( constit, List( Induced( Restricted( Induced(</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Restricted( cand, k ), co1 ), g ), m ), ValuesOfClassFunction ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">List( constit, Length );</span>
111111111111 ]
</pre></div>

<p>Dealing with the remaining constituents is more involved. For a permutation character <span class="SimpleMath">1_{X/V}^{U/V}</span>, we compute <span class="SimpleMath">1_{WX/V}^{U/V}</span>, a character whose degree is half as large and which can be regarded as a character of <span class="SimpleMath">U/W</span>. This character can be treated like the ones above: We lift it to <span class="SimpleMath">U/N</span>, induce it to <span class="SimpleMath">G/N</span>, and inflate it to <span class="SimpleMath">G/Z(G)</span>; let this character be <span class="SimpleMath">1_Y^{G/Z(G)}</span>, for some subgroup <span class="SimpleMath">Y</span>. Then we compute the possible permutation characters of <span class="SimpleMath">G/Z(G)</span> that can be induced from a subgroup of index two inside <span class="SimpleMath">Y</span>, inflate these characters to <span class="SimpleMath">G</span> and then induce them to <span class="SimpleMath">M</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">downdegrees:= List( index2{ Filtered( nonzero,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                   x -> x > Length( above ) )</span>
<span class="GAPprompt">></span> <span class="GAPinput">                               - Length( above ) },</span>
<span class="GAPprompt">></span> <span class="GAPinput">                       x -> x[1] ) / 31;</span>
302102101920 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">f:= g / ClassPositionsOfCentre( g );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">forders:= OrdersClassRepresentatives( f );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">inv:= InverseMap( GetFusionMap( g, f ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for j in [ 1 .. Length( downdegrees ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     chars:= [];</span>
<span class="GAPprompt">></span> <span class="GAPinput">     cand:= PermChars( a8tbl_other, rec( torso:= [ downdegrees[j]/2 ] ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     filt:= Filtered( perms, x -> x^tbl = index2[ nonzero[</span>
<span class="GAPprompt">></span> <span class="GAPinput">                  j + Length( a8degrees ) ] - Length( above ) ] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     filt:= Induced( subtbl, a8tbl, filt,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     GetFusionMap( subtbl, a8tbl ));</span>
<span class="GAPprompt">></span> <span class="GAPinput">     cand:= Filtered( cand, x -> ForAny( filt,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                y -> Collected( x ) = Collected( y ) ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     cand:= Restricted( Induced( Restricted( cand, k ), co1 ), g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     for chi in cand do</span>
<span class="GAPprompt">></span> <span class="GAPinput">       cchi:= CompositionMaps( chi, inv );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       upper:= [];</span>
<span class="GAPprompt">></span> <span class="GAPinput">       pphi:= [];</span>
<span class="GAPprompt">></span> <span class="GAPinput">       for i in [ 1 .. NrConjugacyClasses( f ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">         if forders[i] mod 2 = 1 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">           pphi[i]:= 2 * cchi[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">         elif cchi[i] = 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">           pphi[i]:= 0;</span>
<span class="GAPprompt">></span> <span class="GAPinput">         fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">         upper[i]:= 2* cchi[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">       od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Append( chars, PermChars( f, rec( torso:= ShallowCopy( pphi ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">           upper:= upper,</span>
<span class="GAPprompt">></span> <span class="GAPinput">           normalsubgroup:= [ 1 .. 4 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">           nonfaithful:= cchi ) ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Add( constit, List( Induced( Restricted( chars, g ), m ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                         ValuesOfClassFunction ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">List( constit, Length );</span>
111111111111310102 ]
</pre></div>

<p>Now we form the possible linear combinations.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= List( Cartesian( constit ), l -> sol * l );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m:= CharacterTable( "M" );</span>
CharacterTable( "M" )
<span class="GAPprompt">gap></span> <span class="GAPinput">morders:= OrdersClassRepresentatives( m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for x in cand do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     for i in [ 1 .. Length( morders ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">       if morders[i] mod 31 = 0 or morders[i] mod 21 = 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">         Unbind( x[i] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
</pre></div>

<p>Exactly one of the candidates has only integral values.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= Filtered( cand, x -> ForAll( x, IsInt ) );</span>
[ [ 39196512138953690841337919894179687523914487292951376996875
      4741631380424688759500455925885925646346515815
      3343634862759541617648751473391032751481392395
      13132815150820312598278859251216215915563259388791
      115911587331874650079515581955336375104371
      62331368550000281255251125018832516767
      889652403947711558912073516270044101498
      000301509115131000000000125
      055,,,,, 000014145276127997315
      000009874420030000666,,, 11
      0000000000000000110,,,,, 0
      000000001000000200000
      002202,,, 000000000000,,,, 0
      00000,,, 000000,, 000 ] ]
</pre></div>

<p>Now we compute the possible permutation characters that have the prescribed values.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( m, rec( torso:= cand[1] ) );</span>
[ Character( CharacterTable( "M" ),
  [ 39196512138953690841337919894179687523914487292951376996875
      4741631380424688759500455925885925646346515815
      3343634862759541617648751473391032751481392395
      13132815150820312598278859251216215915563259388791
      115911587331874650079515581955336375104371
      62331368550000281255251125018832516767
      889652403947711558912073516270044101498
      000301509115131000000000125
      055210042000001414527612799
      731500000987442003000066
      633110000000000000000
      1101801000000000001000
      000200000002202330000
      000000002020000003300
      00000000 ] ) ]
</pre></div>

<p>There is only one candidate, so we have found the permutation character.</p>

<p>The character table of <span class="SimpleMath">H</span> is available since 2025. We can compute the permutation character directly from this table.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">h:= CharacterTable( "2^(5+10+20).(S3xL5(2))" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( h, m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand = Set( fus, map -> InducedClassFunctionsByFusionMap( h, m,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             [ TrivialCharacter( h ) ], map )[1] );</span>
true
</pre></div>

<p><a id="X7F2ABD3E7AFF5F6E" name="X7F2ABD3E7AFF5F6E"></a></p>

<h5>8.16-4 <span class="Heading">The Subgroup <span class="SimpleMath">2^{10+16}.O_10^+(2)</span> (November 2009)</span></h5>

<p>According to the Atlas of Finite Groups <a href="chapBib.html#biBCCN85">[CCN+85, p. 234]</a>, the Monster group <span class="SimpleMath">M</span> has a class of maximal subgroups <span class="SimpleMath">H</span> of the type <span class="SimpleMath">2^{10+16}.O_10^+(2)</span>. Currently the character table of <span class="SimpleMath">H</span> and the class fusion into <span class="SimpleMath">M</span> are not available in <strong class="pkg">GAP</strong>. We are interested in the permutation character <span class="SimpleMath">1_H^M</span>, and we will compute it without this information.</p>

<p>The subgroup <span class="SimpleMath">H</span> normalizes an elementary abelian group <span class="SimpleMath">E</span> of order <span class="SimpleMath">2^10</span> which contains <span class="SimpleMath">496</span> involutions in the class <code class="code">2A</code> and <span class="SimpleMath">527</span> involutions in the class <code class="code">2B</code>. Let <span class="SimpleMath">V</span> denote the normal subgroup of order <span class="SimpleMath">2^26</span> in <span class="SimpleMath">H</span>, and set <span class="SimpleMath">barH = H/N</span>. Since the smallest two indices of maximal subgroups of <span class="SimpleMath">barH</span> are <span class="SimpleMath">496</span> and <span class="SimpleMath">527</span>, respectively, <span class="SimpleMath">H</span> acts transitively on both the <code class="code">2A</code> and the <code class="code">2B</code> involutions in <span class="SimpleMath">E</span>, and the centralizers of these involutions contain <span class="SimpleMath">V</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Hbar:= CharacterTable( "O10+(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">U_Abar:= CharacterTable( "O10+(2)M1" );</span>
CharacterTable( "S8(2)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">Index( Hbar, U_Abar );</span>
496
<span class="GAPprompt">gap></span> <span class="GAPinput">U_Bbar:= CharacterTable( "O10+(2)M2" );</span>
CharacterTable( "2^8:O8+(2)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">Index( Hbar, U_Bbar );</span>
527
</pre></div>

<p>We fix a <code class="code">2A</code> involution <span class="SimpleMath">z_A</span> in <span class="SimpleMath">E</span>, and set <span class="SimpleMath">G_A = C_M(z_A)</span> and <span class="SimpleMath">U_A = C_H(z_A)</span>. So <span class="SimpleMath">G_A</span> has the structure <span class="SimpleMath">2.B</span> and <span class="SimpleMath">U_A</span> has the structure <span class="SimpleMath">2^{10+16}.S_8(2)</span>. From the list of maximal subgroups of <span class="SimpleMath">B</span> we see that the image of <span class="SimpleMath">G_A</span> under the natural epimorphism from <span class="SimpleMath">G_A</span> to <span class="SimpleMath">B</span> is a maximal subgroup of <span class="SimpleMath">B</span> and has the structure <span class="SimpleMath">2^{9+16}.S_8(2)</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">b:= CharacterTable( "B" );</span>
CharacterTable( "B" )
<span class="GAPprompt">gap></span> <span class="GAPinput">Horder:= 2^26 * Size( Hbar );</span>
1577011055923770163200
<span class="GAPprompt">gap></span> <span class="GAPinput">order:= Horder / ( 2 * 496 );</span>
1589728887019929600
<span class="GAPprompt">gap></span> <span class="GAPinput">maxes:= List( Maxes( b ), CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );</span>
[ CharacterTable( "2^(9+16).S8(2)" ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( filt, t -> Size( t ) / order );</span>
1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">u1:= filt[1];</span>
CharacterTable( "2^(9+16).S8(2)" )
</pre></div>

<p>Analogously, we fix a <code class="code">2B</code> involution <span class="SimpleMath">z_B</span> in <span class="SimpleMath">E</span>, and set <span class="SimpleMath">G_B = C_M(z_B)</span> and <span class="SimpleMath">U_B = C_H(z_B)</span>, Further, let <span class="SimpleMath">N</span> be the extraspecial normal subgroup of order <span class="SimpleMath">2^25</span> in <span class="SimpleMath">G_B</span>. So <span class="SimpleMath">G_B</span> has the structure <span class="SimpleMath">2^{1+24}_+.Co_1</span>, and <span class="SimpleMath">U_B</span> has index <span class="SimpleMath">527</span> in <span class="SimpleMath">G_B</span>. From the list of maximal subgroups of <span class="SimpleMath">Co_1</span> we see that the image of <span class="SimpleMath">U_B</spanunder the natural epimorphism from <span class="SimpleMath">G_B</span> to <span class="SimpleMath">Co_1</span> is a maximal subgroup of <span class="SimpleMath">Co_1</span> and has the structure <span class="SimpleMath">2^{1+8}_+.O_8^+(2)</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">co1:= CharacterTable( "Co1" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">order:= Horder / ( 2^25 * 527 );</span>
89181388800
<span class="GAPprompt">gap></span> <span class="GAPinput">maxes:= List( Maxes( co1 ), CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );</span>
[ CharacterTable( "2^(1+8)+.O8+(2)" ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( filt, t -> Size( t ) / order );</span>
1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">u2:= filt[1];</span>
CharacterTable( "2^(1+8)+.O8+(2)" )
</pre></div>

<p>First we compute the permutation characters <span class="SimpleMath">π_A = 1_{U_A}^M</span> and <span class="SimpleMath">π_B = 1_{U_B}^M</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m:= CharacterTable( "M" );</span>
CharacterTable( "M" )
<span class="GAPprompt">gap></span> <span class="GAPinput">2b:= CharacterTable( "MC2A" );</span>
CharacterTable( "2.B" )
<span class="GAPprompt">gap></span> <span class="GAPinput">mm:= CharacterTable( "MC2B" );</span>
CharacterTable( "2^1+24.Co1" )
<span class="GAPprompt">gap></span> <span class="GAPinput">pi_A:= RestrictedClassFunction( TrivialCharacter( u1 )^b, 2b )^m;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi_B:= RestrictedClassFunction( TrivialCharacter( u2 )^co1, mm )^m;;</span>
</pre></div>

<p>The degree of <span class="SimpleMath">1_H^M</span> is of course known.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">torso:= [ Size( m ) / Horder ];</span>
512372707698741056749515292734375 ]
</pre></div>

<p>Next we compute some zero values of <span class="SimpleMath">1_H^M</span>, using the following conditions.</p>


<ul>
<li><p>For <span class="SimpleMath">g ∈ M</span>, if <span class="SimpleMath">|g|</span> does not divide <span class="SimpleMath">|H|</span> or if <span class="SimpleMath">|g|</span> is not the product of an element order in <span class="SimpleMath">H/V</span> and a <span class="SimpleMath">2</span>-power. (In fact we could use that the exponent of <span class="SimpleMath">V</span> is <span class="SimpleMath">4</span>, but this would not improve the result.)</p>

</li>
<li><p>Let <span class="SimpleMath">U ≤ H ≤ G</span>, and let <span class="SimpleMath">p</span> be a prime that does not divide <span class="SimpleMath">[H:U]</span>. Then <span class="SimpleMath">U</spancontains a Sylow <span class="SimpleMath">p</span> subgroup of <span class="SimpleMath">H</span>, so each element of order <span class="SimpleMath">p</span> in <span class="SimpleMath">H</span> is conjugate in <span class="SimpleMath">H</span> to an element in <span class="SimpleMath">U</span>. For <span class="SimpleMath">g ∈ G</span>, <span class="SimpleMath">g = g_p h</span>, where the order of <span class="SimpleMath">g_p</span> is a power of <span class="SimpleMath">p</span> such that <span class="SimpleMath">1_U^G(g_p) = 0</span> holds, we have <span class="SimpleMath">1_H^G(g) = 0</span>. We apply this to <span class="SimpleMath">U ∈ { U_A, U_B }</span>.</p>

</li>
</ul>

<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">morders:= OrdersClassRepresentatives( m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">2parts:= Union( [ 1 ], Filtered( Set( morders ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                         x -> IsPrimePowerInt( x ) and IsEvenInt( x ) ) );</span>
12481632 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">factorders:= Set( OrdersClassRepresentatives( Hbar ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">primes_A:= Filtered( PrimeDivisors( Horder ), p -> 496 mod p <> 0 );</span>
35717 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">primes_B:= Filtered( PrimeDivisors( Horder ), p -> 527 mod p <> 0 );</span>
2357 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">primes:= Union( primes_A, primes_B );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">n:= NrConjugacyClasses( m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [ 1 .. n ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">  if Horder mod morders[i] <> 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">    torso[i]:= 0;</span>
<span class="GAPprompt">></span> <span class="GAPinput">  elif ForAll( factorders, x -> not morders[i] / x in 2parts ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput">    torso[i]:= 0;</span>
<span class="GAPprompt">></span> <span class="GAPinput">  else</span>
<span class="GAPprompt">></span> <span class="GAPinput">    for p in primes do</span>
<span class="GAPprompt">></span> <span class="GAPinput">      if morders[i] mod p = 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">        pprime:= morders[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">        while pprime mod p = 0 do pprime:= pprime / p; od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">        pos:= PowerMap( m, pprime )[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">        if p in primes_A and pi_A[ pos ] = 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">          torso[i]:= 0;</span>
<span class="GAPprompt">></span> <span class="GAPinput">        elif p in primes_B and pi_B[ pos ] = 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">          torso[i]:= 0;</span>
<span class="GAPprompt">></span> <span class="GAPinput">        fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">      fi;</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">od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">torso;</span>
512372707698741056749515292734375,,,,, 0,,,,,,,,,,,, 0,, 0,,,,,,,,,,
  ,,,, 0,,,, 0,,,,,, 000,,, 0,,,, 0,,,,,,,,,, 0,,,,,,,, 000
  0000,,,,, 0,,,,, 000000,,,, 00,,,,, 0,,,,,,, 00,
  , 00,,,,, 00000,,,,, 0,, 00000,, 000000,
  , 0,, 0000,, 00000,,,,,, 0,,, 00,, 00000
  0000,, 000000000000000000
  00 ]
</pre></div>

<p>Now we want to compute as many nonzero values of <span class="SimpleMath">1_H^M</span> as possible, using the same approach as in the previous sections. For that, we first compute several permutation characters <span class="SimpleMath">1_X^M</span>, for subgroups <span class="SimpleMath">X</span> with the property <span class="SimpleMath">V < X < U_A</span> or <span class="SimpleMath">V < X < U_B</span>. Then we find several subsets <span class="SimpleMath">C</span> of <span class="SimpleMath">M</span>, each being a union of conjugacy classes of <span class="SimpleMath">M</span> such that <span class="SimpleMath">(1_H)_{C ∩ H}</span> is a linear combination of the characters <span class="SimpleMath">1_X^H</span>, restricted to <span class="SimpleMath">C ∩ H</span>. This yields the values of <span class="SimpleMath">1_H^M</span> on the classes in <span class="SimpleMath">C</span>.</p>

<p>The actual computations are performed with the characters <span class="SimpleMath">1_{X/V}^{H/V}</span>. So we build two parallel lists <code class="code">cand</code> and <code class="code">candbar</code> of permutation characters of <span class="SimpleMath">M</span> and of <span class="SimpleMath">H/V</span>, respectively. For that, we write two small <strong class="pkg">GAP</strong> functions:</p>


<ul>
<li><p>In the function <code class="code">AddSubgroupOfS82</code>, we choose a subgroup <span class="SimpleMath">Y</span> of <span class="SimpleMath">S_8(2) ≅ U_A/V</span>, compute <span class="SimpleMath">1_Y^{U_A/V}</span>, inflate it to a character of <span class="SimpleMath">U_A</span>, induce this character to <span class="SimpleMath">B</span>, inflate the result to <span class="SimpleMath">G_A</span>, and finally induce this character to <span class="SimpleMath">M</span>.</p>

</li>
<li><p>In the function <code class="code">AddSubgroupOfO8p2</code>, we choose a subgroup <span class="SimpleMath">Y</span> of the factor group <span class="SimpleMath">F ≅ O_8^+(2)</span> of <span class="SimpleMath">U_B/N</span>, compute <span class="SimpleMath">1_Y^F</span>, inflate it to a character of <span class="SimpleMath">U_B/N</span>, induce this to a character of <span class="SimpleMath">G_B/N ≅ Co_1</span>, inflate this to a character of <span class="SimpleMath">G_B</span>, and finally induce this character to <span class="SimpleMath">M</span>.</p>

<p>One difficulty in this case is that choosing a subgroup <span class="SimpleMath">X/V</span> of <span class="SimpleMath">H/V</span> involves fixing the class fusion into <span class="SimpleMath">H/V</span>, but it is not clear which is a compatible class fusion of the corresponding subgroup <span class="SimpleMath">X</span> into <span class="SimpleMath">M</span>; therefore, each entry of <code class="code">cand</code> is in fact not the permutation character of <span class="SimpleMath">M</span> in question but a list of possibilities.</p>

</li>
</ul>

<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= [ [ pi_A ], [ pi_B ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">candbar:= [ TrivialCharacter( U_Abar )^Hbar,</span>
<span class="GAPprompt">></span> <span class="GAPinput">               TrivialCharacter( U_Bbar )^Hbar ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfS82:= function( subname )</span>
<span class="GAPprompt">></span> <span class="GAPinput">  local psis82;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">  psis82:= TrivialCharacter( CharacterTable( subname ) )^U_Abar;</span>
<span class="GAPprompt">></span> <span class="GAPinput">  Add( cand, [ Restricted( Restricted( psis82, u1 )^b, 2b )^m ] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  Add( candbar, psis82 ^ Hbar );</span>
<span class="GAPprompt">></span> <span class="GAPinput">end;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">tt1:= CharacterTable( "O8+(2)" );</span>
CharacterTable( "O8+(2)" )
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfO8p2:= function( subname )</span>
<span class="GAPprompt">></span> <span class="GAPinput">  local psi, list, char;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">  psi:= TrivialCharacter( CharacterTable( subname ) )^tt1;</span>
<span class="GAPprompt">></span> <span class="GAPinput">  list:= [];</span>
<span class="GAPprompt">></span> <span class="GAPinput">  for char in Orbit( AutomorphismsOfTable( tt1 ), psi, Permuted ) do</span>
<span class="GAPprompt">></span> <span class="GAPinput">    AddSet( list, Restricted( Restricted( char, u2 ) ^ co1, mm ) ^ m );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">  Add( cand, list );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  Add( candbar, Restricted( psi, U_Bbar ) ^ Hbar );</span>
<span class="GAPprompt">></span> <span class="GAPinput">end;;</span>
</pre></div>

<p>Now we choose the subgroups that will turn out to be sufficient for our computations.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfS82( "O8+(2).2" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfO8p2( "S6(2)" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfS82( "O8-(2).2" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfS82( "A10.2" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfS82( "S4(4).2" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfS82( "L2(17)" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfO8p2( "A9" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfO8p2( "2^6:A8" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfO8p2( "(3xU4(2)):2" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfO8p2( "(A5xA5):2^2" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSubgroupOfS82( "S8(2)M4" );</span>
</pre></div>

<p>In the case of <span class="SimpleMath">A_5 < S_8(2)</span>, the function <code class="code">AddSubgroupOfS82</code> does not work because there are several class fusions of <span class="SimpleMath">A_5</span> into <span class="SimpleMath">S_8(2)</span>. We choose one fusion; the fact that it really describes an embedding of an <span class="SimpleMath">A_5</span> type subgroup of <span class="SimpleMath">S_8(2)</span> can be checked using the function <code class="func">NrPolyhedralSubgroups</code> (<a href="../../../doc/ref/chap71.html#X83AE05BF8085B3C8"><span class="RefLink">Reference: NrPolyhedralSubgroups</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">a5:= CharacterTable( "A5" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( a5, U_Abar )[1];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">NrPolyhedralSubgroups( U_Abar, fus[2], fus[3], fus[4] );</span>
rec( number := 548352, type := "A5" )
<span class="GAPprompt">gap></span> <span class="GAPinput">psis82:= Induced( a5, U_Abar, [ TrivialCharacter( a5 ) ], fus )[1];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Add( cand, [ Restricted( Restricted( psis82, u1 )^b, 2b )^m ] );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Add( candbar, psis82 ^ Hbar );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">List( cand, Length );</span>
11121111222211 ]
</pre></div>

<p>The following function takes a condition on conjugacy classes in terms of their element orders, which gives a set <span class="SimpleMath">C</span> of elements in <span class="SimpleMath">M</span>. It forms the corresponding set of elements in <span class="SimpleMath">H/V</span> and tries to express the restriction of <span class="SimpleMath">1_{H/V}</span> as a linear combination of the characters <span class="SimpleMath">1_X^{H/V}</span> that are stored in the list <code class="code">candbar</code>. If this works and if the corresponding linear combination of the candidates in <code class="code">cand</code> is unique, the newly found values of <span class="SimpleMath">1_H^M</span> are entered into the list <code class="code">torso</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Hbarorders:= OrdersClassRepresentatives( Hbar );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">TryCondition:= function( cond )</span>
<span class="GAPprompt">></span> <span class="GAPinput">  local pos, sol, lincomb, oldknown, i;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">  pos:= Filtered( [ 1 .. Length( Hbarorders ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">            i -> cond( Hbarorders[i] ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  sol:= SolutionMat( candbar{[1..Length(candbar)]}{ pos },</span>
<span class="GAPprompt">></span> <span class="GAPinput">            ListWithIdenticalEntries( Length( pos ), 1 ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  if sol = fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">    return "no solution";</span>
<span class="GAPprompt">></span> <span class="GAPinput">  fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">  pos:= Filtered( [ 1 .. Length( morders) ], i -> cond( morders[i] ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  lincomb:= Filtered( Set( Cartesian( cand ), x -> sol * x ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                x -> ForAll( pos, i -> IsPosInt( x[i] ) or x[i] = 0 ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  if Length( lincomb ) <> 1 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">    return "solution is not unique";</span>
<span class="GAPprompt">></span> <span class="GAPinput">  fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">  lincomb:= lincomb[1];;</span>
<span class="GAPprompt">></span> <span class="GAPinput">  oldknown:= Number( torso );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  for i in pos do</span>
<span class="GAPprompt">></span> <span class="GAPinput">    if IsBound( torso[i] ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput">      if torso[i] <> lincomb[i] then</span>
<span class="GAPprompt">></span> <span class="GAPinput">        Error( "contradiction of new and known value at position ", i );</span>
<span class="GAPprompt">></span> <span class="GAPinput">      fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">    elif not IsInt( lincomb[i] ) or lincomb[i] < 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">      Error( "new value at position ", i, " is not a nonneg. integer" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">    fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">    torso[i]:= lincomb[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">  od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">  return Concatenation( "now ", String( Number( torso ) ), " values (",</span>
<span class="GAPprompt">></span> <span class="GAPinput">             String( Number( torso ) - oldknown ), " new)" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">end;;</span>
</pre></div>

<p>This procedure makes sense only if the elements of <span class="SimpleMath">H</span> that satisfy the condition are contained in the full preimage of the classes of <span class="SimpleMath">H/V</span> that satisfy the condition. Note that this is in fact the case for the conditions used below. This is clear for condition concerning only <em>odd</em> element orders, because <span class="SimpleMath">V</span> is a <span class="SimpleMath">2</span>-group. Also the set of all elements of the orders <span class="SimpleMath">9</span>, <span class="SimpleMath">18</span>, and <span class="SimpleMath">36</span> is such a <q>closed</q> set, since <span class="SimpleMath">M</span> has no elements of order <span class="SimpleMath">72</span>. Finally, the set of all elements of the orders <span class="SimpleMath">1</span>, <span class="SimpleMath">2</span>, and <span class="SimpleMath">4</span> in <span class="SimpleMath">H</span> is admissible because it is contained in the preimage of the set of all elements of these orders in <span class="SimpleMath">H/V</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">TryCondition( x -> x mod 7 = 0 and x mod 3 <> 0 );</span>
"now 99 values (7 new)"
<span class="GAPprompt">gap></span> <span class="GAPinput">TryCondition( x -> x mod 17 = 0 and x mod 3 <> 0 );</span>
"now 102 values (3 new)"
<span class="GAPprompt">gap></span> <span class="GAPinput">TryCondition( x -> x mod 5 = 0 and x mod 3 <> 0 );</span>
"now 119 values (17 new)"
<span class="GAPprompt">gap></span> <span class="GAPinput">TryCondition( x -> 4 mod x = 0 );</span>
"now 125 values (6 new)"
<span class="GAPprompt">gap></span> <span class="GAPinput">TryCondition( x -> 9 mod x = 0 );</span>
"now 129 values (4 new)"
<span class="GAPprompt">gap></span> <span class="GAPinput">TryCondition( x -> x in [ 91836 ] );</span>
"now 138 values (9 new)"
</pre></div>

<p>Possible constituents of <span class="SimpleMath">1_H^M</span> are those rational irreducible characters of <span class="SimpleMath">M</span> that are constituents of <span class="SimpleMath">π^M</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">constit:= Filtered( RationalizedMat( Irr( m ) ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">              x -> ScalarProduct( m, x, pi_A ) <> 0</span>
<span class="GAPprompt">></span> <span class="GAPinput">                   and ScalarProduct( m, x, pi_B ) <> 0 );;</span>
</pre></div>

<p>For the missing values, we can provide at least lower bounds, using that <span class="SimpleMath">U ≤ H ≤ G</span> implies <span class="SimpleMath">1_H^G(g) ≥ 1_U^G(g) / [H:U] = [G:H] ⋅ 1_U^G(g) / 1_U^G(1)</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">lower:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Hindex:= Size( m ) / Horder;</span>
512372707698741056749515292734375
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [ 1 .. NrConjugacyClasses( m ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">  lower[i]:= Maximum( pi_A[i] / ( pi_A[1/ Hindex ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                      pi_B[i] / ( pi_B[1] / Hindex ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  if not IsInt( lower[i] ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput">    lower[i]:= Int( lower[i] + 1 );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">od;</span>
</pre></div>

<p>Now we compute the possible permutation characters that have the prescribed values, are compatible with the given lower bounds for values, and have only constituents in the given list.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand:= PermChars( m, rec( torso:= torso, chars:= constit,</span>
<span class="GAPprompt">></span> <span class="GAPinput">     lower:= lower, normalsubgroup:= [ 1 .. NrConjugacyClasses( m ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">     nonfaithful:= TrivialCharacter( m ) ) );</span>
[ Character( CharacterTable( "M" ),
  [ 512372707698741056749515292734375405589064025344574375
      296287867421295756582015216626852154488386050
      12197177437528098354375335229607108472455164587500
      4921875248750716525675652615778965938053989250
      437325044983234399906752139141111129156561
      656117710076606875315275011337317901572130
      495711979093013970003885525028359045
      01036743288118999905403001752015
      74200000000165613737099135
      00000077451300451151910055
      991100400993100000041
      1024000006000000104000
      010000033112033000000
      000000200000000000000
      000000 ] ) ]
</pre></div>

<p>There is only one candidate, so we have found the permutation character.</p>

<p>The character table of <span class="SimpleMath">H</span> is available since 2023. We can compute the permutation character directly from this table.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">h:= CharacterTable( "2^(10+16).O10+(2)" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">fus:= PossibleClassFusions( h, m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cand = Set( fus, map -> InducedClassFunctionsByFusionMap( h, m,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             [ TrivialCharacter( h ) ], map )[1] );</span>
true
</pre></div>

<p><a id="X87D11B097D95D027" name="X87D11B097D95D027"></a></p>

<h4>8.17 <span class="Heading">A permutation character of the Baby Monster (June 2012)</span></h4>

<p>We compute the character of the Baby Monster that is induced from the trivial character of a Sylow <span class="SimpleMath">2</span>-subgroup. (Gabriel Navarro had asked me how <strong class="pkg">GAP</strong> can compute this character.) We start with the computation of those transitive permutation characters of the symmetric group on five points that have degree <span class="SimpleMath">15</span>. Note that the function <code class="func">PermChars</code> (<a href="../../../doc/ref/chap72.html#X7D02541482C196A6"><span class="RefLink">Reference: PermChars</span></a>) computes in general only candidates, but here we are sure that the result consists of permutation characters because it is unique.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "S5" );</span>
CharacterTable( "A5.2" )
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= PermChars( t, rec( torso:= [ 15 ] ) );</span>
[ Character( CharacterTable( "A5.2" ), [ 15300310 ] ) ]
</pre></div>

<p>Next, we regard this character as a character of the group <span class="SimpleMath">2^5:S_5</span> that occurs as a maximal subgroup of index <span class="SimpleMath">231</span> in <span class="SimpleMath">M_22:2</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m222:= CharacterTable( "M22.2" );</span>
CharacterTable( "M22.2" )
<span class="GAPprompt">gap></span> <span class="GAPinput">mx:= List( Maxes( m222 ), CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mx:= Filtered( mx, x -> Size( m222 ) / Size( x ) = 231 );</span>
[ CharacterTable( "M22.2M4" ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= pi[1]{ GetFusionMap( mx[1], t ) };</span>
1515333003311015153330033
  110 ]
</pre></div>

<p>We induce this character to <span class="SimpleMath">M_22:2</span>. (Note that this is the character that is induced from the trivial character of a Sylow <span class="SimpleMath">2</span>-subgroup of <span class="SimpleMath">M_22:2</span>.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= InducedClassFunction( mx[1], pi, m222 );</span>
ClassFunction( CharacterTable( "M22.2" ),
 [ 3465105095000010189459130100
  00 ] )
</pre></div>

<p>Next, we regard this character as a character of the group <span class="SimpleMath">2^10:M_22:2</span> that occurs as a maximal subgroup of index <span class="SimpleMath">46575</span> in <span class="SimpleMath">Co_2</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">co2:= CharacterTable( "Co2" );</span>
CharacterTable( "Co2" )
<span class="GAPprompt">gap></span> <span class="GAPinput">mx:= List( Maxes( co2 ), CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mx:= Filtered( mx, x -> Size( co2 ) / Size( x ) = 46575 );</span>
[ CharacterTable( "2^10:m22:2" ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= pi{ GetFusionMap( mx[1], m222 ) };</span>
34653465346534651051051051051051051051050
  0000999999555550000000
  000111018918918918918918945454545
  99991313131313130000001110
  0000000 ]
</pre></div>

<p>We induce this character to <span class="SimpleMath">Co_2</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= InducedClassFunction( mx[1], pi, co2 );</span>
ClassFunction( CharacterTable( "Co2" ),
 [ 1613823756265351628552749500661539752727855
  567975115000000000635119273570
  0000000000000000001100
  000000000 ] )
</pre></div>

<p>Next, we regard this character as a character of the group <span class="SimpleMath">2^{1+22}.Co_2</span> that occurs as a maximal subgroup of index <span class="SimpleMath">11707448673375</span> in the Baby Monster.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">b:= CharacterTable( "B" );</span>
CharacterTable( "B" )
<span class="GAPprompt">gap></span> <span class="GAPinput">mx:= List( Maxes( b ), CharacterTable );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mx:= Filtered( mx, x -> Size( b ) / Size( x ) = 11707448673375 );</span>
[ CharacterTable( "2^(1+22).Co2" ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= pi{ GetFusionMap( mx[1], co2 ) };;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi[1];</span>
161382375
</pre></div>

<p>We induce this character to the Baby Monster.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= InducedClassFunction( mx[1], pi, b );</span>
ClassFunction( CharacterTable( "B" ),
 [ 1889375872099856765625260938540885522562316674429625
  20781852682526878849042500130527416257537207545
  1282986812705809054636642574315385356333853937689
  201825123322500000000000000713097
  2414253206258852127526557705193052008994416489
  257718255345753000000000000000
  0000000000000000000000
  27341710597185339900000000000
  0000000000000000000000
  0000000000000000000000
  0111100000000000000000
  00000000000000000 ] )
</pre></div>

<p><a id="X86827FA97D27F3A2" name="X86827FA97D27F3A2"></a></p>

<h4>8.18 <span class="Heading">A permutation character of <span class="SimpleMath">2.B</span> (October 2017)</span></h4>

<p>We compute the character of the double cover <span class="SimpleMath">2.B</span> of the Baby Monster that is induced from the trivial character of a subgroup <span class="SimpleMath">U</span> of the structure <span class="SimpleMath">2^1+22.McL</span>.</p>

<p>This subgroup occurs as the intersection of two conjugates of <span class="SimpleMath">2.B</span> inside the Monster group <span class="SimpleMath">M</span>. More precisely, we consider <span class="SimpleMath">2.B</span> as the centralizer of an involution <span class="SimpleMath">a</span> in <span class="SimpleMath">M</span>, and we are interested in the permutation action of <span class="SimpleMath">M</span> on the cosets of <span class="SimpleMath">2.B</span> (or, equivalently, on the conjugacy class in <span class="SimpleMath">M</span> of this involution). The restriction of this action to <span class="SimpleMath">2.B</span> has nine orbits. One of them has point stabilizer <span class="SimpleMath">U</span>.</p>

<p>Background information can be found in <a href="chapBib.html#biBGMS89">[GJMS89]</a>. The decomposition into the nine orbits appears in Definition (3.4.9) on p 587, and our orbit is characterized in Table VII (on p. 582) by the facts that its points <span class="SimpleMath">c</span> have order <span class="SimpleMath">4</span> and the squares of <span class="SimpleMath">a c</span> lie in the class <code class="code">2B</code> of <span class="SimpleMath">M</span>. This implies that <span class="SimpleMath">a</span> and <span class="SimpleMath">c</span> do not commute, hence <span class="SimpleMath">a</span> does not lie in <span class="SimpleMath">U</span>.</p>

<p>From this description, we know that <span class="SimpleMath">U</span> is a subgroup of a maximal subgroup of the type <span class="SimpleMath">2^2+22.Co_2</span> in <span class="SimpleMath">2.B</span>, and the group <span class="SimpleMath">⟨ U, a ⟩</span> has the type <span class="SimpleMath">2^2+22.McL</span>.</p>

<p>Thus we can proceed in two steps. First we induce the trivial character of <span class="SimpleMath">⟨ U, a ⟩</span> to <span class="SimpleMath">2.B</span>. Then we use the variant of the <strong class="pkg">GAP</strong> function <code class="func">PermChars</code> (<a href="../../../doc/ref/chap72.html#X7D02541482C196A6"><span class="RefLink">Reference: PermChars</span></a>) that allows us to prescribe the permutation character of the closure with a normal subgroup, which is <span class="SimpleMath">⟨ a ⟩</span> in our case.</p>

<p>The first step can be performed by inducing the trivial character of <span class="SimpleMath">McL</span> to <span class="SimpleMath">Co_2</span>, <span class="SimpleMath">...</span></p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">mcl:= CharacterTable( "McL" );</span>
CharacterTable( "McL" )
<span class="GAPprompt">gap></span> <span class="GAPinput">co2:= CharacterTable( "Co2" );</span>
CharacterTable( "Co2" )
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= Induced( mcl, co2, [ TrivialCharacter( mcl ) ] )[1];</span>
Character( CharacterTable( "Co2" ),
 [ 4710401024016160000064004241600
  01608000008440020000004
  00220110000000000011 ] )
</pre></div>

<p><span class="SimpleMath">...</span> regarding this character as a character of <span class="SimpleMath">2^1+22.Co_2</span>, <span class="SimpleMath">...</span></p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m:= CharacterTable( "BM2" );</span>
CharacterTable( "2^(1+22).Co2" )
<span class="GAPprompt">gap></span> <span class="GAPinput">infl:= ind{ GetFusionMap( m, co2 ) };</span>
47104471044710447104471044710447104000000
  00000010241024102410241024102410241024
  102410241024102400000000000000
  000016161616160160160160160160160160
  1601600000000000000000000
  0000000000000000000000
  06464646464646464646464646464000
  0000000000000000000000
  00004442424242424242424161616
  16000000000000000000000
  000000161616161616161616161616
  16000000000000000008888
  8888000000000000000000
  0000000000000000000000
  0000000888888888444444
  4400000000000000000002
  2222000000000000000000
  0000000000000000000444
  4000000000000000000022
  2222222200000111100000
  0000000000000000000000
  0000000000000000000000
  1111 ]
</pre></div>

<p><span class="SimpleMath">...</span> inducing this character to <span class="SimpleMath">B</span>, <span class="SimpleMath">...</span></p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">b:= CharacterTable( "B" );</span>
CharacterTable( "B" )
<span class="GAPprompt">gap></span> <span class="GAPinput">ind:= Induced( m, b, [ infl ] )[1];</span>
ClassFunction( CharacterTable( "B" ),
 [ 5514676623106560001869112627202729936343040634521600
  194594400699848495104174653441290242764802073600
  1638479872046080051201386001000110880252000
  112480432129600131283528644320252002880
  28803072288000256641152576640192960108
  25207440104120403016016112010240096288
  6414409601081648032120001680104
  48040000321688024124000024
  424240000400660000000000
  00004000008016840000042
  2000000000004000000000
  0002000000000000000 ] )
</pre></div>

<p><span class="SimpleMath">...</span> and regarding the result as a character of <span class="SimpleMath">2.B</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">2b:= CharacterTable( "2.B" );</span>
CharacterTable( "2.B" )
<span class="GAPprompt">gap></span> <span class="GAPinput">infl:= ind{ GetFusionMap( 2b, b ) };</span>
551467662310656000551467662310656000186911262720272993634304
  27299363430406345216001945944001945944006998469984
  8495104174653441290242764802073600207360016384798720
  460800512013860013860010001000110880252000112480
  11248043212960013121312835286486443202520
  25200288028803072288000256641152576576
  64019296001081082520744744010410412040
  403030160161120102400096288641441440
  9601081081648032121200001680104
  104480044000032168880024124
  400000024424240000040006
  6660000000000000000040
  00000080168440000004422
  2200000000000000040000
  0000000000002200000000
  0000000000000000 ]
</pre></div>

<p>Now we have the character <span class="SimpleMath">ψ</span> that represents the <q>nonfaithful half</q> of the desired permutation character. We have to <q>fill it up</q> with faithful characters of <span class="SimpleMath">2.B</span> of total degree <span class="SimpleMath">ψ(1)</span> such that the sum with <span class="SimpleMath">ψ</span> can be a permutation character of <span class="SimpleMath">2.B</span>.</p>

<p>The <strong class="pkg">GAP</strong> function <code class="func">PermChars</code> (<a href="../../../doc/ref/chap72.html#X7D02541482C196A6"><span class="RefLink">Reference: PermChars</span></a>) is designed for this situation. We specify the normal subgroup <span class="SimpleMath">N = ⟨ a ⟩</span> by listing the positions of its conjugacy classes in the character table of <span class="SimpleMath">2.B</span>, we enter the known permutation character <span class="SimpleMath">1_{UN}^{2.B}</span>, and of course we specify the degree of the possible permutation characters.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">centre:= ClassPositionsOfCentre( 2b );</span>
12 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:= PermChars( 2b, rec( torso:= [ 2 * infl[1], 0 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                            normalsubgroup:= centre,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                            nonfaithful:= infl ) );</span>
[ Character( CharacterTable( "2.B" ),
  [ 110293532462131200001869112627205417902080004197060608
      063452160038918880001399680849510417465344
      1290242764804026240120960163847987204608005120
      2772000200001108802520001900803488043212960
      0259232835217280432050400028802880
      307228800025664115210081446401929600
      216025209605280200812080060016016
      1120102400096288642167209602160
      1648032240000016801604848008
      000003216812400241208000
      00024424240000040006684
      000000000000000004000
      0000801688000000080222
      200000000000000040000
      000000000000220000000
      00000000000000000 ] ) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">MatScalarProducts( 2b, Irr( 2b ), pi );</span>
[ [ 1121202320014120320200
      220023150432003206401
      100003010050520020041
      020424430242403032501
      031011253114511030032
      112114032313013022133
      002000030333103040100
      200200211000012111011
      111102113300011112320
      022435240000520001100
      000070017700016450030
      000041138322501 ] ]
</pre></div>

<p>We are lucky: There is a unique solution, and its computation is quite fast.</p>

<p><a id="X849F0EA6807C9B19" name="X849F0EA6807C9B19"></a></p>

<h4>8.19 <span class="Heading">Generation of sporadic simple groups by <span class="SimpleMath">π</span>- and <span class="SimpleMath"'</span>-subgroups (December 2021)</span></h4>

<p>This section shows the computations that are needed in order to show the following statements from <a href="chapBib.html#biBBG21">[BG]</a>.</p>

<p>At the time when this paper was written, a special treatment of the Monster group was necessary because the classification of its maximal subgroups was not yet complete, and also not all character tables of the known maximal subgroups were available. The now unnecessary computations for the Monster group are shown in Section <a href="chap8.html#X839272078243F4DB"><span class="RefLink">8.19-1</span></a>.</p>

<p><em>Proposition 2.2</em>: Let <span class="SimpleMath">S</span> be a sporadic simple group and let <span class="SimpleMath">P</span> be a Sylow <span class="SimpleMath">2</span>-subgroup of <span class="SimpleMath">S</span>. If <span class="SimpleMath">1 ≠ x ∈ S</span>, then <span class="SimpleMath">S = ⟨ P, x^g ⟩</span> for some <span class="SimpleMath">g ∈ S</span>.</p>

<p><em>Theorem 7.1</em>: Let <span class="SimpleMath">S</span> be a sporadic simple group and let <span class="SimpleMath">p ≤ q</span> be primes each dividing <span class="SimpleMath">|S|</span>. Then <span class="SimpleMath">S</span> can be generated by a Sylow <span class="SimpleMath">p</span>-subgroup and a Sylow <span class="SimpleMath">q</span>-subgroup.</p>

<p>A stronger version of Theorem 7.1: Let <span class="SimpleMath">S</span> be a sporadic simple group, <span class="SimpleMath">p</span> be a prime dividing <span class="SimpleMath">|S|</span>, and <span class="SimpleMath">P</span> be a Sylow <span class="SimpleMath">p</span>-subgroup of <span class="SimpleMath">S</span>. If <span class="SimpleMath">1 ≠ x ∈ S</span>, then <span class="SimpleMath">S = ⟨ P, x^g ⟩</span> for some <span class="SimpleMath">g ∈ S</span>.</p>

<p>First we show <a href="chapBib.html#biBBG21">[BG, Proposition 2.2]</a>. Let <span class="SimpleMath">S</span> be a sporadic simple group, fix a Sylow <span class="SimpleMath">2</span>-subgroup <span class="SimpleMath">P</span> of <span class="SimpleMath">S</span>, and let <span class="SimpleMath">x</span> be a nonidentity element in <span class="SimpleMath">S</span>. We use known information about maximal subgroups of <span class="SimpleMath">S</span> to show that <span class="SimpleMath">x^S</span> is not a subset of the union of those maximal subgroups in <span class="SimpleMath">S</span> that contain <span class="SimpleMath">P</span>.</p>

<p>Let <span class="SimpleMath">M</span> be a maximal subgroup of <span class="SimpleMath">S</spanwith the property <span class="SimpleMath">P ≤ M</span>. The number of <span class="SimpleMath">S</span>-conjugates of <span class="SimpleMath">M</span> that contain <span class="SimpleMath">P</span> is equal to <span class="SimpleMath">|N_S(P)|/|N_M(P)| ≤ [N_S(P):P]</span>, thus these subgroups can contain at most <span class="SimpleMath">[N_S(P):P] |x^S ∩ M|</span> elements from the class <span class="SimpleMath">x^S</span>.</p>

<p>Thus the number of elements in <span class="SimpleMath">x^S</span> that generate a proper subgroup of <span class="SimpleMath">S</span> together with <span class="SimpleMath">P</span> is bounded from above by <span class="SimpleMath">[N_S(P):P] ∑_M |x^S ∩ M|</span>, where the sum is taken over representatives <span class="SimpleMath">M</span> of conjugacy classes of maximal subgroups of odd index in <span class="SimpleMath">S</span>.</p>

<p>Let <span class="SimpleMath">1_M^S</span> denote the permutation character of the action of <span class="SimpleMath">S</span> on the cosets of <span class="SimpleMath">M</span>. We have <span class="SimpleMath">|x^S ∩ M| = |x^S| 1_M^S(x) / 1_M^S(1)</span>. Hence we are done when we show that</p>

<p class="pcenter">[N_S(P):P] ∑_M 1_M^S(x) / 1_M^S(1) < 1</p>

<p>holds.</p>

<p>The numbers <span class="SimpleMath">[N_S(P):P]</span> can be read off from <a href="chapBib.html#biBWil98">[Wil98, Table I]</a>. Here we use the fact that the character table of the Sylow <span class="SimpleMath">2</span>-normalizer of <span class="SimpleMath">S</span> is available except if <span class="SimpleMath">S</span> is one of <span class="SimpleMath">Co_1</span>, <span class="SimpleMath">J_4</span>, <span class="SimpleMath">F_3+</span>, <span class="SimpleMath">B</span>, or <span class="SimpleMath">M</span>, and that the Sylow <span class="SimpleMath">2</span>-subgroup if self-normalizing in these cases.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">names:= AllCharacterTableNames( IsSporadicSimple, true,</span>
<span class="GAPprompt">></span> <span class="GAPinput">           IsDuplicateTable, false : OrderedBy:= Size );</span>
"M11""M12""J1""M22""J2""M23""HS""J3""M24""McL"
  "He""Ru""Suz""ON""Co3""Co2""Fi22""HN""Ly""Th"
  "Fi23""Co1""J4""F3+""B""M" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">normindices:= rec( Co1:= 1, J4:= 1, F3\+:= 1, B:= 1, M:= 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for name in names do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     n:= CharacterTable( Concatenation( name, "N2" ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if n = fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Print( name, "\n" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     else</span>
<span class="GAPprompt">></span> <span class="GAPinput">       2part:= 2^Length( Positions( Factors( Size( n ) ), 2 ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       normindices.( name ):= Size( n ) / 2part;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
Co1
J4
F3+
B
M
</pre></div>

<p>For all sporadic simple groups <span class="SimpleMath">S</span>, the primitive permutation characters <span class="SimpleMath">1_M^S</span> can be computed from the data about maximal subgroups contained in <strong class="pkg">GAP</strong>'s library of character tables.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">maxbound:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for name in names do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     t:= CharacterTable( name );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     mx:= List( Maxes( t ), CharacterTable );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     odd:= Filtered( mx, s -> ( Size( t ) / Size( s ) ) mod 2 <> 0 );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     primperm:= List( odd, s -> TrivialCharacter( s )^t );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     sum:= normindices.( name ) * Sum( primperm, pi -> pi / pi[1] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Add( maxbound,</span>
<span class="GAPprompt">></span> <span class="GAPinput">          [ name, Maximum( sum{ [ 2 .. Length( sum ) ] } ) ] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SortBy( maxbound, x -> - x[2] );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">maxbound[1];</span>
"J2"3/5 ]
</pre></div>

<p>We see that the left hand side of the above inequality is always less than or equal to <span class="SimpleMath">3/5</span>, in particular it is less than <span class="SimpleMath">1</span>.</p>

<p>Next we show <a href="chapBib.html#biBBG21">[BG, Theorem 7.1]</a> and its stronger version stated above.</p>

<p>As a first step, we generalize the approach from the above computations in order to check for which prime divisors <span class="SimpleMath">p</span> of <span class="SimpleMath">|S|</span> and for which nontrivial conjugacy classes <span class="SimpleMath">x^S</span> of <span class="SimpleMath">S</span> the group <span class="SimpleMath">S</span> is generated by a Sylow <span class="SimpleMath">p</span>-subgroup <span class="SimpleMath">P</span> together with a conjugate of <span class="SimpleMath">x</span>.</p>

<p>The upper bound <span class="SimpleMath">[N_S(P):P]</span> for <span class="SimpleMath">|N_S(P)|/|N_M(P)|</span>, for a maximal subgroup <span class="SimpleMath">M</span> of <span class="SimpleMath">S</span> that contains <span class="SimpleMath">P</span>, is not good enough in some of the cases considered here. Instead of it, we compute the upper bound <span class="SimpleMath">u(S, M, p)</span> which is defined as follows; we assume that we know <span class="SimpleMath">|N_S(P)|</span>.</p>


<ul>
<li><p>If <span class="SimpleMath">P</span> is cyclic then we can compute <span class="SimpleMath">|N_M(P)|</span> from the character table of <span class="SimpleMath">M</span>, and set <span class="SimpleMath">u(S, M, p) = |N_S(P)| / |N_M(P)|</span>.</p>

</li>
<li><p>Otherwise, if <span class="SimpleMath">P</span> is normal in <span class="SimpleMath">M</span>, we set <span class="SimpleMath">u(S, M, p) = |N_S(P)| / |M|</span>.</p>

</li>
<li><p>Otherwise, if we know a subgroup <span class="SimpleMath">U</span> of <span class="SimpleMath">M</span> such that <span class="SimpleMath">P</span> is a proper normal subgroup of <span class="SimpleMath">U</span>, we set <span class="SimpleMath">u(S, M, p) = |N_S(P)| / |U|</span>.</p>

</li>
<li><p>Otherwise, we set <span class="SimpleMath">u(S, M, p) = |N_S(P)| / |P|</span>.</p>

</li>
</ul>

<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">upper_bound:= function( tblS, tblM, p )</span>
<span class="GAPprompt">></span> <span class="GAPinput">   local ppart, ppartposS, ppartposM, n, N_S, f, subname, u;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">   ppart:= Product( Filtered( Factors( Size( tblS ) ), x -> x = p ), 1 );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   ppartposS:= Positions( OrdersClassRepresentatives( tblS ), ppart );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   if 0 < Length( ppartposS ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     # P is cyclic.</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if tblM = fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       return ( SizesCentralizers( tblS )[ ppartposS[1] ] * Phi( ppart )</span>
<span class="GAPprompt">></span> <span class="GAPinput">                / Length( ppartposS ) ) / ppart;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     else</span>
<span class="GAPprompt">></span> <span class="GAPinput">       ppartposM:= Positions( OrdersClassRepresentatives( tblM ), ppart );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       return ( SizesCentralizers( tblS )[ ppartposS[1] ] * Phi( ppart )</span>
<span class="GAPprompt">></span> <span class="GAPinput">                / Length( ppartposS ) ) /</span>
<span class="GAPprompt">></span> <span class="GAPinput">              ( SizesCentralizers( tblM )[ ppartposM[1] ] * Phi( ppart )</span>
<span class="GAPprompt">></span> <span class="GAPinput">                / Length( ppartposM ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> </span>
<span class="GAPprompt">></span> <span class="GAPinput">   # Compute |N_S(P)|.</span>
<span class="GAPprompt">></span> <span class="GAPinput">   n:= CharacterTable( Concatenation( Identifier( tblS ), "N",</span>
<span class="GAPprompt">></span> <span class="GAPinput">                           String( p ) ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   if n <> fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     N_S:= Size( n );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   elif p = 2 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     N_S:= ppart * normindices.( Identifier( tblS ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   elif Identifier( tblS ) = "M" and p = 3 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     # The Sylow 3-normalizer is contained in 3^(3+2+6+6):(L3(3)xSD16)</span>
<span class="GAPprompt">></span> <span class="GAPinput">     N_S:= ppart * 2^6;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   elif Identifier( tblS ) = "F3+" and p = 3 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     N_S:= ppart * 8;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   else</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Error( "cannot compute |N_S(P)|" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> </span>
<span class="GAPprompt">></span> <span class="GAPinput">   if tblM = fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     return N_S / ppart;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   elif Sum( SizesConjugacyClasses( tblM ){</span>
<span class="GAPprompt">></span> <span class="GAPinput">                 ClassPositionsOfPCore( tblM, p ) } ) = ppart then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     # P is normal in M.</span>
<span class="GAPprompt">></span> <span class="GAPinput">     return N_S / Size( tblM );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">   # Inspect known character tables of subgroups of M.</span>
<span class="GAPprompt">></span> <span class="GAPinput">   f:= N_S / ppart;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   for subname in NamesOfFusionSources( tblM ) do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     u:= CharacterTable( subname );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if ClassPositionsOfKernel( GetFusionMap( u, tblM ) ) = [ 1 ] and</span>
<span class="GAPprompt">></span> <span class="GAPinput">        Sum( SizesConjugacyClasses( u ){</span>
<span class="GAPprompt">></span> <span class="GAPinput">                 ClassPositionsOfPCore( u, p ) } ) = ppart then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       f:= Minimum( f, N_S / Size( u ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">   return f;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> end;;</span>
</pre></div>

<p>We run over the sporadic simple groups and collect in the list <code class="code">badcases_strong</code> those <q>bad</q> prime divisors <span class="SimpleMath">p</span> of <span class="SimpleMath">|S|</span> and conjugacy class representatives <span class="SimpleMath">x</span> of nonidentity elements in <span class="SimpleMath">S</span> for which</p>

<p class="pcenter">∑_M u(S, M, p) 1_M^S(x) / 1_M^S(1) ≥ 1</p>

<p>holds, where the sum is taken over representatives <span class="SimpleMath">M</span> of conjugacy classes of maximal subgroups of <span class="SimpleMath">S</span> whose index in <span class="SimpleMath">S</span> is coprime to <span class="SimpleMath">p</span>. In these cases, we have to find other arguments.</p>

<p>For the proof of <a href="chapBib.html#biBBG21">[BG, Theorem 7.1]</a>, we can discard all those entries from the list of <q>bad</q> <span class="SimpleMath">p</span> and <span class="SimpleMath">x</span> where <span class="SimpleMath">x</span> is not a <span class="SimpleMath">q</span>-element, for some prime <span class="SimpleMath">q</span>, or where another nonidentity <span class="SimpleMath">q</span>-element exists that does not occur in the list. This is done by collecting a second list <code class="code">badcases_thm</code> of the remaining <q>bad</q> cases.</p>

<p>For the proof of the stronger version, we will later explicitly compute group elements from the classes in question that generate <span class="SimpleMath">S</span> together with a Sylow <span class="SimpleMath">p</span>-subgroup. (The only technical complication is that the class fusion of maximal subgroups of the type <span class="SimpleMath">(2^2 × F_4(2)):2</span> of the Baby Monster is currently not known, thus we cannot simply induce the trivial character in this case. However, the permutation character is uniquely determined by the two character tables.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">badcases_thm:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">badcases_strong:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">good:= "dummy";;   #  Avoid a message about an unbound variable ...</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for name in Filtered( names, x -> x <> "M" ) do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     t:= CharacterTable( name );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     orders:= OrdersClassRepresentatives( t );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     n:= NrConjugacyClasses( t );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     mx:= List( Maxes( t ), CharacterTable );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     for p in PrimeDivisors( Size( t ) ) do</span>
<span class="GAPprompt">></span> <span class="GAPinput">       good:= Filtered( mx, s -> ( Size( t ) / Size( s ) ) mod p <> 0 );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       primperm:= [];</span>
<span class="GAPprompt">></span> <span class="GAPinput">       for s in good do</span>
<span class="GAPprompt">></span> <span class="GAPinput">         if GetFusionMap( s, t ) <> fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">           Add( primperm, TrivialCharacter( s )^t );</span>
<span class="GAPprompt">></span> <span class="GAPinput">         else</span>
<span class="GAPprompt">></span> <span class="GAPinput">           ind:= Set( PossibleClassFusions( s, t ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                      map -> InducedClassFunctionsByFusionMap( s, t,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                                 [ TrivialCharacter( s ) ], map )[1] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">           if Length( ind ) <> 1 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">             Error( "permutation character not uniquely determined" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">           fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">           Add( primperm, ind[1] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">         fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">       od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">       sum:= Sum( [ 1 .. Length( good ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                  i -> upper_bound( t, good[i], p )</span>
<span class="GAPprompt">></span> <span class="GAPinput">                       * primperm[i] / primperm[i][1] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       badpos:= Filtered( [ 2 .. Length( sum ) ], i -> sum[i] >= 1 );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       if badpos <> [] then</span>
<span class="GAPprompt">></span> <span class="GAPinput">         Add( badcases_strong, [ name, p, ShallowCopy( badpos ) ] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">         for i in ShallowCopy( badpos ) do</span>
<span class="GAPprompt">></span> <span class="GAPinput">           q:= SmallestRootInt( orders[i] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">           if IsPrimeInt( q ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput">             if ForAny( [ 2 .. n ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                        j -> SmallestRootInt( orders[j] ) = q</span>
<span class="GAPprompt">></span> <span class="GAPinput">                             and not j in badpos ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput">               RemoveSet( badpos, i );</span>
<span class="GAPprompt">></span> <span class="GAPinput">             fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">           fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">         od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">         if not IsEmpty( badpos ) then</span>
<span class="GAPprompt">></span> <span class="GAPinput">           Add( badcases_thm, [ name, p, badpos ] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">         fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">       fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">badcases_thm;</span>
[ [ "M23"3, [ 3 ] ], [ "HS"3, [ 411 ] ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">badcases_strong;</span>
[ [ "M11"5, [ 2 ] ], [ "M12"5, [ 34 ] ], [ "M22"3, [ 2 ] ], 
  [ "M22"5, [ 2 ] ], [ "J2"3, [ 2 ] ], [ "M23"3, [ 23 ] ], 
  [ "M23"5, [ 2 ] ], [ "M23"7, [ 2 ] ], 
  [ "HS"3, [ 234567911 ] ], [ "HS"5, [ 235 ] ], 
  [ "M24"5, [ 24 ] ], [ "M24"7, [ 24 ] ], [ "He"5, [ 2 ] ], 
  [ "Co2"3, [ 23 ] ], [ "Fi22"5, [ 2 ] ], [ "Fi22"7, [ 2 ] ], 
  [ "Fi23"5, [ 235 ] ], [ "Fi23"7, [ 2 ] ], [ "B"7, [ 2 ] ] 
 ]
</pre></div>

<p>Most of these open cases can be ruled out by constructing the group <span class="SimpleMath">S</span> and a Sylow <span class="SimpleMath">p</span>-subgroup <span class="SimpleMath">P</span> in question and then finding explicit elements <span class="SimpleMath">x</span> such that <span class="SimpleMath">S</span> is generated by <span class="SimpleMath">P</span> and <span class="SimpleMath">x</span>. For that, we use the data from the <strong class="pkg">Atlas</strong> of Group Representations <a href="chapBib.html#biBAGRv3">[WWT+]</a>.</p>

<p>The following function tries to find random elements from all conjugacy classes of nonidentity elements that have the desired property. It returns <code class="keyw">fail</code> if no straight line program is available for computing class representatives, and returns <span class="SimpleMath">P</span> and the list of class representatives that generate together with <span class="SimpleMath">P</span> if such elements were found. Thus the function will not return if the generation property does not hold.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">prove_generation:= function( name, p )</span>
<span class="GAPprompt">></span> <span class="GAPinput">   local S, prg, P, reps, good, x, g, U;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">   prg:= AtlasProgram( name, "classes" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   if prg = fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">     return fail;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">   S:= AtlasGroup( name );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   P:= SylowSubgroup( S, p );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   reps:= ResultOfStraightLineProgram( prg.program, GeneratorsOfGroup( S ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   good:= [];</span>
<span class="GAPprompt">></span> <span class="GAPinput">   for x in Filtered( reps, x -> Order( x ) <> 1 ) do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">       g:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       U:= ClosureGroup( P, x^g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     until Size( U ) = Size( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     Add( good, x^g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">></span> <span class="GAPinput"></span>
<span class="GAPprompt">></span> <span class="GAPinput">   return [ P, good ];</span>
<span class="GAPprompt">></span> <span class="GAPinput"> end;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for entry in badcases_strong do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     res:= prove_generation( entry[1], entry[2] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if res = fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Print( "no classes script for ", entry, "\n" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
no classes script for [ "He"5, [ 2 ] ]
no classes script for [ "Fi22"5, [ 2 ] ]
no classes script for [ "Fi22"7, [ 2 ] ]
no classes script for [ "Fi23"5, [ 235 ] ]
no classes script for [ "Fi23"7, [ 2 ] ]
no classes script for [ "B"7, [ 2 ] ]
</pre></div>

<p>In the remaining cases, we show only the generation property for the class representatives in the list. These are involutions from the class <code class="code">2A</code>, and for the group <span class="SimpleMath">Fi_23</span> and <span class="SimpleMath">p = 5</span> additionally elements from the classes <code class="code">2B</code> and <code class="code">3A</code>.</p>

<p>A <code class="code">2A</code> element in the group <span class="SimpleMath">He</span> can be found as the fifth power of any element of order <span class="SimpleMath">10</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S:= AtlasGroup( "He" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     x:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Order( x ) = 10;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">x:= x^5;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">P5:= SylowSubgroup( S, 5 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     g:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     U:= ClosureGroup( P5, x^g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Size( U ) = Size( S );</span>
</pre></div>

<p>A <code class="code">2A</code> element in the group <span class="SimpleMath">Fi_22</span> can be found as the <span class="SimpleMath">15</span>-th power of any element of order <span class="SimpleMath">30</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S:= AtlasGroup( "Fi22" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     x:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Order( x ) = 30;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">x:= x^15;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">P5:= SylowSubgroup( S, 5 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     g:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     U:= ClosureGroup( P5, x^g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Size( U ) = Size( S );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">P7:= SylowSubgroup( S, 7 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     g:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     U:= ClosureGroup( P7, x^g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Size( U ) = Size( S );</span>
</pre></div>

<p>A <code class="code">2A</code> element in the group <span class="SimpleMath">Fi_23</span> can be found as the <span class="SimpleMath">21</span>-st power of any element of order <span class="SimpleMath">42</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S:= AtlasGroup( "Fi23" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     x:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Order( x ) = 42;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">x:= x^21;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">P5:= SylowSubgroup( S, 5 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     g:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     U:= ClosureGroup( P5, x^g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Size( U ) = Size( S );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">P7:= SylowSubgroup( S, 7 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     g:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     U:= ClosureGroup( P7, x^g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Size( U ) = Size( S );</span>
</pre></div>

<p>A <code class="code">2B</code> element in the group <span class="SimpleMath">Fi_23</span> can be found as the <span class="SimpleMath">30</span>-th power of any element of order <span class="SimpleMath">60</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     x:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Order( x ) = 60;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">x:= x^30;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     g:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     U:= ClosureGroup( P5, x^g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Size( U ) = Size( S );</span>
</pre></div>

<p>A <code class="code">3A</code> element in the group <span class="SimpleMath">Fi_23</span> can be found as the <span class="SimpleMath">20</span>-th power of any element of order <span class="SimpleMath">60</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     x:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Order( x ) = 60;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">x:= x^20;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput">     g:= Random( S );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     U:= ClosureGroup( P5, x^g );</span>
<span class="GAPprompt">></span> <span class="GAPinput">   until Size( U ) = Size( S );</span>
</pre></div>

<p>In the open case for the Baby Monster, we have to show that the group is generated by a <code class="code">2A</code> element and an element of order <span class="SimpleMath">7</span>. This can be done character-theoretically, for example as follows. There are such elements <span class="SimpleMath">x</span> and <span class="SimpleMath">y</span> whose product <span class="SimpleMath">x y</span> has order <span class="SimpleMath">47</span>, and the only proper subgroups of the Baby Monster that contain elements of order <span class="SimpleMath">47</span> are contained in maximal subgroups of the type <span class="SimpleMath">47:23</span>. Thus <span class="SimpleMath">x</span> and <span class="SimpleMath">y</span> generate the Baby Monster.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "B" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">7pos:= Positions( OrdersClassRepresentatives( t ), 7 );</span>
31 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">47pos:= Positions( OrdersClassRepresentatives( t ), 47 );</span>
172173 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ClassMultiplicationCoefficient( t, 27pos[1], 47pos[1] );</span>
7332
<span class="GAPprompt">gap></span> <span class="GAPinput">Filtered( Maxes( t ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">       x -> Size( CharacterTable( x ) ) mod 47 = 0 );</span>
"47:23" ]
</pre></div>

<p><a id="X839272078243F4DB" name="X839272078243F4DB"></a></p>

<h5>8.19-1 <span class="Heading">Special Arguments for the Monster Group that are no longer needed</span></h5>

<p>The following computations were needed to prove the statements in question before the complete list of conjugacy classes of maximal subgroups of the Monster group was known, due to <a href="chapBib.html#biBDLP25">[DLP25]</a>, and before the character tables of all maximal subgroups of the Monster were available.</p>

<p>First we show <a href="chapBib.html#biBBG21">[BG, Proposition 2.2]</a>.</p>

<p>The Monster group is known to contain exactly five classes of maximal subgroups of odd index, of the structures <span class="SimpleMath">2^1+24.Co_1</span> (the normalizer of a <code class="code">2B</code> element in the Monster), <span class="SimpleMath">2^10+16.O_10^+(2)</span>, <span class="SimpleMath">2^2+11+22.(M_24 × S_3)</span>, <span class="SimpleMath">2^5+10+20.(S_3 × L_5(2))</span>, <span class="SimpleMath">[2^39].(L_3(2) × 3S_6)</span>. The corresponding permutation characters are known, see Section <a href="chap8.html#X8337F3C682B6BE63"><span class="RefLink">8.16</span></a>. First we read the information about the known primitive permutation characters of the Monster into the <strong class="pkg">GAP</strong> session, and extract the primitive permutation characters of odd degree.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">dir:= DirectoriesPackageLibrary( "ctbllib""data" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">filename:= Filename( dir"prim_perm_M.json" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Monster_prim_data:= EvalString( StringFile( filename ) )[2];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( Monster_prim_data );</span>
46
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "M" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">monstermaxindices:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">monstermaxtables:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for entry in Monster_prim_data do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if Length( entry ) = 1 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       s:= CharacterTable( entry[1] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Add( monstermaxtables, s );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Add( monstermaxindices, Size( t ) / Size( s ) );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     else</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Add( monstermaxtables, fail );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       Add( monstermaxindices, entry[2][1] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">odd_prim:= [];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in [ 1 .. Length( Monster_prim_data ) ] do</span>
<span class="GAPprompt">></span> <span class="GAPinput">     if monstermaxindices[i] mod 2 <> 0 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">       if monstermaxtables[i] <> fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">         Add( odd_prim, TrivialCharacter( monstermaxtables[i] )^t );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       else</span>
<span class="GAPprompt">></span> <span class="GAPinput">         Add( odd_prim, Monster_prim_data[i][2] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">       fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">     fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">   od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Length( odd_prim );</span>
5
</pre></div>

<p>Now we can use the same approach as for the other sporadic simple groups.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">sum:= normindices.M * Sum( odd_prim, pi -> pi / pi[1] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">max:= Maximum( sum{ [ 2 .. Length( sum ) ] } );</span>
12784979/103007903752128375
<span class="GAPprompt">gap></span> <span class="GAPinput">max < 10^-9;</span>
true
</pre></div>

<p>Next we show <a href="chapBib.html#biBBG21">[BG, Theorem 7.1]</a> and its stronger version stated above.</p>

<p>From <a href="chapBib.html#biBNW12">[NW13]</a> and <a href="chapBib.html#biBMmaxes">[Wil]</a> we know <span class="SimpleMath">44</span> classes of maximal subgroups, and that each possible additional maximal subgroup is almost simple and has socle <span class="SimpleMath">L_2(13)</span>, <span class="SimpleMath">U_3(4)</span>, <span class="SimpleMath">U_3(8)</span>, or <span class="SimpleMath">Sz(8)</span>. This implies that we know all those maximal subgroups that contain a Sylow <span class="SimpleMath">p</span>-subgroup of <span class="SimpleMath">S</span> except in the case <span class="SimpleMath">p = 19</span>, where maximal subgroups with socle <span class="SimpleMath">U_3(8)</span> may arise.</p>

<p>Thus let us first consider that at least one of <span class="SimpleMath">p</span>, <span class="SimpleMath">r</span> is different from <span class="SimpleMath">19</span>. In this situation, we use the same approach as for the other sporadic simple groups. The only complication is that not all permutation characters <span class="SimpleMath">1_M^S</span>, for the relevant maximal subgroups <span class="SimpleMath">M</span> of <span class="SimpleMath">S</span>, are known; however, if this happens then the character table of <span class="SimpleMath">M</span> is known, and we can compute the possible permutation characters, and take the common upper bounds for these characters. In each case, we get that the claimed property holds.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">t:= CharacterTable( "M" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">orders:= OrdersClassRepresentatives( t );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">for p in Difference( PrimeDivisors( Size( t ) ), [ 19 ] ) do</span>
<span class="GAPprompt">></span> <span class="GAPinput">  goodpos:= Filtered( [ 1 .. Length( Monster_prim_data ) ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                      i -> monstermaxindices[i] mod p <> 0 );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  sum:= ListWithIdenticalEntries( NrConjugacyClasses( t ), 0 );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  for i in goodpos do</span>
<span class="GAPprompt">></span> <span class="GAPinput">    if Length( Monster_prim_data[i] ) = 2 then</span>
<span class="GAPprompt">></span> <span class="GAPinput">      # We know the permutation character but not the subgroup table.</span>
<span class="GAPprompt">></span> <span class="GAPinput">      sum:= sum + upper_bound( t, fail, p )</span>
<span class="GAPprompt">></span> <span class="GAPinput">                  * Monster_prim_data[i][2] / monstermaxindices[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">    else</span>
<span class="GAPprompt">></span> <span class="GAPinput">      s:= monstermaxtables[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">      if GetFusionMap( s, t ) <> fail then</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # We can compute the permutation character.</span>
<span class="GAPprompt">></span> <span class="GAPinput">        sum:= sum + upper_bound( t, s, p )</span>
<span class="GAPprompt">></span> <span class="GAPinput">                    * TrivialCharacter( s )^t / monstermaxindices[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">      else</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # We get only candidates for the permutation character.</span>
<span class="GAPprompt">></span> <span class="GAPinput">        cand:= Set( PossibleClassFusions( s, t ),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                    map -> InducedClassFunctionsByFusionMap( s, t,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                               [ TrivialCharacter( s ) ], map )[1] );</span>
<span class="GAPprompt">></span> <span class="GAPinput">        # For each class, take the maximum of the possible values.</span>
<span class="GAPprompt">></span> <span class="GAPinput">        sum:= sum + upper_bound( t, s, p )</span>
<span class="GAPprompt">></span> <span class="GAPinput">                    * List( TransposedMat( cand ), Maximum )</span>
<span class="GAPprompt">></span> <span class="GAPinput">                    / monstermaxindices[i];</span>
<span class="GAPprompt">></span> <span class="GAPinput">      fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">    fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">  od;</span>
<span class="GAPprompt">></span> <span class="GAPinput">  badpos:= Filtered( [ 2 .. Length( sum ) ], i -> sum[i] >= 1 );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  if badpos <> [] then</span>
<span class="GAPprompt">></span> <span class="GAPinput">    Error( "check open cases in ", badpos, "\n" );</span>
<span class="GAPprompt">></span> <span class="GAPinput">  fi;</span>
<span class="GAPprompt">></span> <span class="GAPinput">od;</span>
</pre></div>

<p>Finally, let <span class="SimpleMath">p = r = 19</span>. The group <span class="SimpleMath">S</span> has exactly one class of elements of order <span class="SimpleMath">19</span>. Let <span class="SimpleMath">x</span> be such an element. From the character table of <span class="SimpleMath">S</span>, we compute that there exist conjugates <span class="SimpleMath">y</span> of <span class="SimpleMath">x</span> such that <span class="SimpleMath">x y</span> has order <span class="SimpleMath">71</span>. Since <span class="SimpleMath">⟨ x, y ⟩ = ⟨ x, x y ⟩</span> holds and no maximal subgroup of <span class="SimpleMath">S</span> has order divisible by <span class="SimpleMath">19 ⋅ 71</span>, we have <span class="SimpleMath">⟨ x, y ⟩ = S</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pos19:= Positions( OrdersClassRepresentatives( t ), 19 );</span>
63 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pos71:= Positions( OrdersClassRepresentatives( t ), 71 );</span>
169170 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ClassMultiplicationCoefficient( t, pos19[1], pos19[1], pos71[1] );</span>
621743152370566020417806353602387433415016198936
<span class="GAPprompt">gap></span> <span class="GAPinput">ForAny( monstermaxindices,</span>
<span class="GAPprompt">></span> <span class="GAPinput">           x -> ( Size( t ) / x ) mod ( 19 * 71 ) = 0 );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">ForAny( [ "L2(13)""U3(4)""U3(8)""Sz(8)" ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">           x -> Size( CharacterTable( x ) ) mod 71 = 0 );</span>
false
</pre></div>


<div class="chlinkprevnextbot"> <a href="chap0.html">[Top of Book]</a>   <a href="chap0.html#contents">[Contents]</a>    <a href="chap7.html">[Previous Chapter]</a>    <a href="chap9.html">[Next Chapter]</a>   </div>


<div class="chlinkbot"><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>

<hr />
<p class="foot">generated by <a href="https://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>

Messung V0.5 in Prozent
C=100 H=100 G=100

¤ Dauer der Verarbeitung: 0.257 Sekunden  (vorverarbeitet am  2026-06-22) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik