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


Quelle  ctblatlas.htm   Sprache: HTML

 
 products/Sources/formale Sprachen/GAP/pkg/ctbllib/htm/ctblatlas.htm


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<meta name="GENERATOR" content="TtH 3.59">
 <style type="text/css"div.p { margin-top: 7pt;}</style>
 <style type="text/css"><!--
 td div.comp { margin-top: -0.6ex; margin-bottom: -1ex;}
 td div.comb { margin-top: -0.6ex; margin-bottom: -.6ex;}
 td div.hrcomp { line-height: 0.9; margin-top: -0.8ex; margin-bottom: -1ex;}
 td div.norm {line-height:normal;}
 span.roman {font-family: serif; font-style: normal; font-weight: normal;} 
 span.overacc2 {position: relative;  left: .8em; top: -1.2ex;}
 span.overacc1 {position: relative;  left: .6em; top: -1.2ex;} -->

 

             <title>Constructing the ordinary character tables of some Atlas groups using character theoretic methods</title>
<h1 align="center">Constructing the ordinary character tables of some Atlas groups using character theoretic methods</h1>
  <body bgcolor="FFFFFF"

<div class="p"><!----></div>

<h3 align="center"> T<font size="-2">HOMAS</font> B<font size="-2">REUER</font> <br />
<i>Lehrstuhl D für Mathematik</i> <br />
<i>RWTH, 52056 Aachen, Germany</i> </h3>

<div class="p"><!----></div>

<h3 align="center">May 8th, 2016 </h3>

<div class="p"><!----></div>


<div class="p"><!----></div>
We compute the character tables of the following groups
with character theoretic methods,
using known information about the conjugacy classes
and about the character tables of some subgroups and factor groups:
Th, J<sub>4</sub>, 2.<sup>2</sup>E<sub>6</sub>(2), 2.<sup>2</sup>E<sub>6</sub>(2).2, and 2.B.

<div class="p"><!----></div>



<div class="p"><!----></div>

<h1>Contents </h1><a href="#tth_sEc1"
>1  Overview</a><br /><a href="#tth_sEc2"
>2  The character table of Th (December 30th, 2015)</a><br />    <a href="#tth_sEc2.1"
>2.1  The conjugacy classes of Th</a><br />    <a href="#tth_sEc2.2"
>2.2  The subgroup 2<sup>5</sup>.L<sub>5</sub>(2)</a><br />    <a href="#tth_sEc2.3"
>2.3  The power maps of Th</a><br />    <a href="#tth_sEc2.4"
>2.4  The irreducible characters of Th</a><br /><a href="#tth_sEc3"
>3  The character table of J<sub>4</sub> (January 1st, 2016)</a><br />    <a href="#tth_sEc3.1"
>3.1  The conjugacy classes of J<sub>4</sub></a><br />    <a href="#tth_sEc3.2"
>3.2  The subgroup 2<sup>11</sup>:M<sub>24</sub></a><br />    <a href="#tth_sEc3.3"
>3.3  The power maps of J<sub>4</sub></a><br />    <a href="#tth_sEc3.4"
>3.4  The irreducible characters of J<sub>4</sub></a><br /><a href="#tth_sEc4"
>4  The character table of 2.<sup>2</sup>E<sub>6</sub>(2) (February 29th, 2016)</a><br />    <a href="#tth_sEc4.1"
>4.1  Assumptions</a><br />    <a href="#tth_sEc4.2"
>4.2  Outer automorphisms of G</a><br />    <a href="#tth_sEc4.3"
>4.3  Tools for determining the conjugacy classes of 2.G</a><br />        <a href="#tth_sEc4.3.1"
>4.3.1  Elementary criteria</a><br />        <a href="#tth_sEc4.3.2"
>4.3.2  Norms of induced characters</a><br />    <a href="#tth_sEc4.4"
>4.4  Subgroups of the type F<sub>4</sub>(2) in G</a><br />    <a href="#tth_sEc4.5"
>4.5  Element orders in 2.G</a><br />    <a href="#tth_sEc4.6"
>4.6  The class fusion from π<sup>−1</sup>( M<sub>3</sub> )</a><br />    <a href="#tth_sEc4.7"
>4.7  Subgroups of the type Fi<sub>22</sub> in G</a><br />    <a href="#tth_sEc4.8"
>4.8  The class fusion from π<sup>−1</sup>( M<sub>7</sub> )</a><br />    <a href="#tth_sEc4.9"
>4.9  The class fusion from π<sup>−1</sup>( M<sub>8</sub> )</a><br />    <a href="#tth_sEc4.10"
>4.10  The class fusion from π<sup>−1</sup>( M<sub>9</sub> )</a><br />    <a href="#tth_sEc4.11"
>4.11  The class fusion from π<sup>−1</sup>( M<sub>4</sub> )</a><br />    <a href="#tth_sEc4.12"
>4.12  The class fusion from π<sup>−1</sup>( M<sub>5</sub> )</a><br />    <a href="#tth_sEc4.13"
>4.13  Subgroups of the type 3 ×U<sub>6</sub>(2) in G</a><br />    <a href="#tth_sEc4.14"
>4.14  Subgroups of the type O<sup>−</sup><sub>10</sub>(2) in G</a><br />    <a href="#tth_sEc4.15"
>4.15  What do we know up to now about the table of 2.G?</a><br />    <a href="#tth_sEc4.16"
>4.16  Additional characters of 2.G</a><br />    <a href="#tth_sEc4.17"
>4.17  The faithful irreducible characters of 2.G</a><br /><a href="#tth_sEc5"
>5  The character table of 2.<sup>2</sup>E<sub>6</sub>(2).2 (March 28th, 2016)</a><br />    <a href="#tth_sEc5.1"
>5.1  Class numbers of 2.G.2</a><br />    <a href="#tth_sEc5.2"
>5.2  Subgroups of the type 2 ×F<sub>4</sub>(2) ×2 in 2.G.2</a><br />    <a href="#tth_sEc5.3"
>5.3  Subgroups of the type 3 ×2.U<sub>6</sub>(2).2 in 2.G.2</a><br />    <a href="#tth_sEc5.4"
>5.4  Norms of induced characters - a refinement</a><br />    <a href="#tth_sEc5.5"
>5.5  Element orders in 2.G.2</a><br />    <a href="#tth_sEc5.6"
>5.6  The class fusion from 2 ×F<sub>4</sub>(2) ×2</a><br />    <a href="#tth_sEc5.7"
>5.7  The class fusion from 3 ×2.U<sub>6</sub>(2).2</a><br />    <a href="#tth_sEc5.8"
>5.8  Approximations for some power maps of 2.G.2</a><br />    <a href="#tth_sEc5.9"
>5.9  The faithful irreducible characters of 2.G.2</a><br /><a href="#tth_sEc6"
>6  The character table of 2.B (May 8th, 2016)</a><br />    <a href="#tth_sEc6.1"
>6.1  Assumptions</a><br />    <a href="#tth_sEc6.2"
>6.2  Subgroups of the type 2<sup>2</sup>.<sup>2</sup>E<sub>6</sub>(2).2 in 2.B</a><br />    <a href="#tth_sEc6.3"
>6.3  Element orders in 2.B</a><br />    <a href="#tth_sEc6.4"
>6.4  The class fusion from 2<sup>2</sup>.<sup>2</sup>E<sub>6</sub>(2).2</a><br />    <a href="#tth_sEc6.5"
>6.5  Subgroups of the type 2 ×Th in 2.B</a><br />    <a href="#tth_sEc6.6"
>6.6  Additional characters of 2.B</a><br />    <a href="#tth_sEc6.7"
>6.7  The irreducible characters of 2.B</a><br />

<div class="p"><!----></div>

<div class="p"><!----></div>

 <h2><a name="tth_sEc1">
1</a>  Overview</h2>

<div class="p"><!----></div>
The character tables of
Th, J<sub>4</sub>, 2.<sup>2</sup>E<sub>6</sub>(2), 2.<sup>2</sup>E<sub>6</sub>(2).2, and 2.B
are shown in the  A<font size="-2">TLAS</font> of Finite Groups [<a href="#CCN85" name="CITECCN85">CCN<sup>+</sup>85</a>], and these  A<font size="-2">TLAS</font>
tables are contained in the character table library [<a href="#CTblLib" name="CITECTblLib">Bre25</a>]
of the computer algebra system <font face="helvetica">GAP</font> [<a href="#GAP483" name="CITEGAP483">GAP16</a>].
Except for the case of Th (see [<a href="#BMO17" name="CITEBMO17">BMO17</a>]),
I am not aware of published proofs of the correctness
of these character tables.

<div class="p"><!----></div>
In the following sections,
we show how one can compute the tables in question with <font face="helvetica">GAP</font>,
using character theoretic methods.
We will assume the character tables of certain proper subgroups
and factor groups;
except in the case of 2.B, these tables have been verified either
by direct computations with the group in question
or by character theoretic methods.
I am not aware of such a verification for the character table of B,
thus the construction of the character table of 2.B in
Section <a href="#section2B">6</a> relies on the correctness of the  A<font size="-2">TLAS</fonttable
of B.

<div class="p"><!----></div>
The main tools for the computation of the irreducible characters
will be LLL reduction (see [<a href="#LLL82" name="CITELLL82">LLJL82</a>])
and the enumeration of orthogonal embeddings (see [<a href="#Ple90" name="CITEPle90">Ple95</a>]).
Several <font face="helvetica">GAP</font> library functions from the Chapter
"Maps Concerning Character Tables" of the <font face="helvetica">GAP</font> Reference Manual
will be used without comments.
We will use the <font face="helvetica">GAP</font> Character Table Library,
thus we have to load this <font face="helvetica">GAP</font> package.

<div class="p"><!----></div>

<pre>
    gap> LoadPackage( "ctbllib", false );
    true

</pre>

<div class="p"><!----></div>

 <h2><a name="tth_sEc2">
2</a>  The character table of Th (December 30th, 2015)</h2>

<div class="p"><!----></div>
The character table of the sporadic simple Thompson group Th
has been published in [<a href="#Smi76c" name="CITESmi76c">Smi76</a>,pp. 162-163] without proof.
This table (with some rows and columns permuted) is shown in the
 A<font size="-2">TLAS</font> of Finite Groups (see [<a href="#CCN85" name="CITECCN85">CCN<sup>+</sup>85</a>,p. 176]),
and this  A<font size="-2">TLAS</fonttable is contained in the character table library
 [<a href="#CTblLib" name="CITECTblLib">Bre25</a>]
of the computer algebra system <font face="helvetica">GAP</font> [<a href="#GAP483" name="CITEGAP483">GAP16</a>].

<div class="p"><!----></div>
We start with the description of the conjugacy classes of Th
as given in [<a href="#Par77" name="CITEPar77">Par77</a>] (see Section<a href="#sectclassesTh">2.1</a>),
then we compute the character table of a subgroup of type 2<sup>5</sup>:L<sub>5</sub>(2)
in Th (the so-called Dempwolff group, see Section <a href="#sectsubgroupTh">2.2</a>),
then we write down the power maps of Th
(see Section <a href="#sectpowermapsTh">2.3</a>),
and finally we compute the irreducible characters of Th
(see Section <a href="#sectirreduciblesTh">2.4</a>).

<div class="p"><!----></div>

     <h3><a name="tth_sEc2.1">
2.1</a>  The conjugacy classes of Th</h3><a name="sectclassesTh">
</a>

<div class="p"><!----></div>
The conjugacy classes of elements of order different from
1, 19, and 31 in Th are listed in [<a href="#Par77" name="CITEPar77">Par77</a>,Table I],
and [<a href="#Par77" name="CITEPar77">Par77</a>,(6.3)] states that there are
one class of elements of order 19
and two (nonreal) classes of elements of order 31;
note that Case I (α) holds by the proof of (6.1).

<div class="p"><!----></div>
Up to a permutation of classes,
this description of the classes agrees with the element orders
and centralizer orders in the character table that is claimed for Th
in <font face="helvetica">GAP</font>'s Character Table Library [Bre25].

<div class="p"><!----></div>

<pre>
    gap> lib:= CharacterTable( "Th" );;
    gap> parrottnames:= [
    >      "1A""z""c2""c3""c1""r1""v""b""zc1""zc2",
    >      "zc3""a""us1""w""f1""f3""f2""zb",
    >      "r1c2""(r1c2)^-1""r1c3""vc1""l""za",
    >      "c1b""(c1b)^-1""zf1""zf2""19A""vb""c2a2",
    >      "us1c2""(us1c2)^-1""wc1""(wc1)^-1",
    >      "f4""f5""(f5)^-1""r1a""zbc1""(zbc1)^-1",
    >      "31A""31B""r1f1""s1f1""(s1f1)^-1",
    >      "c2l""(c2l)^-1" ];;
    gap> orders:= OrdersClassRepresentatives( lib );;
    gap> centralizers:= SizesCentralizers( lib );;
    gap> descr:= TransposedMat( [ parrottnames, orders, centralizers ] );;
    gap> for entry in descr do
    >      Print( String( entry[1], -12 ),
    >             String( entry[2], 2 ), " ",
    >             StringPP( entry[3] ), "\n" );
    >    od;
    1A           1  2^15*3^10*5^3*7^2*13*19*31
    z            2  2^15*3^4*5*7
    c2           3  2^6*3^7*7*13
    c3           3  2^3*3^10
    c1           3  2^4*3^7*5
    r1           4  2^11*3^3*7
    v            4  2^9*3*5
    b            5  2^3*3*5^3
    zc1          6  2^4*3^3*5
    zc2          6  2^6*3^3
    zc3          6  2^3*3^4
    a            7  2^3*3*7^2
    us1          8  2^7*3
    w            8  2^5*3
    f1           9  2^3*3^6
    f3           9  3^6
    f2           9  2*3^4
    zb          10  2^3*3*5
    r1c2        12  2^5*3^2
    (r1c2)^-1   12  2^5*3^2
    r1c3        12  2^2*3^3
    vc1         12  2^3*3
    l           13  3*13
    za          14  2^3*7
    c1b         15  2*3*5
    (c1b)^-1    15  2*3*5
    zf1         18  2^3*3^2
    zf2         18  2*3^2
    19A         19  19
    vb          20  2^2*5
    c2a2        21  3*7
    us1c2       24  2^3*3
    (us1c2)^-1  24  2^3*3
    wc1         24  2^3*3
    (wc1)^-1    24  2^3*3
    f4          27  3^3
    f5          27  3^3
    (f5)^-1     27  3^3
    r1a         28  2^2*7
    zbc1        30  2*3*5
    (zbc1)^-1   30  2*3*5
    31A         31  31
    31B         31  31
    r1f1        36  2^2*3^2
    s1f1        36  2^2*3^2
    (s1f1)^-1   36  2^2*3^2
    c2l         39  3*13
    (c2l)^-1    39  3*13

</pre>

<div class="p"><!----></div>
We create a new character table object for a group of the given order
and with the given element orders and centralizer orders.

<div class="p"><!----></div>

<pre>
    gap> th:= rec( UnderlyingCharacteristic:= 0,
    >              OrdersClassRepresentatives:= orders,
    >              SizesCentralizers:= centralizers,
    >              Size:= centralizers[1] );;
    gap> ConvertToCharacterTableNC( th );;

</pre>

<div class="p"><!----></div>

     <h3><a name="tth_sEc2.2">
2.2</a>  The subgroup 2<sup>5</sup>.L<sub>5</sub>(2)</h3><a name="sectsubgroupTh">
</a>

<div class="p"><!----></div>
The group Th contains a subgroup D that is a non-split extension
of an elementary abelian group of order 2<sup>5</sup> by the general linear group
<span class="roman">GL</span>(5,2), see [<a href="#Smi76c" name="CITESmi76c">Smi76</a>].
This subgroup is uniquely determined up to isomorphism by these properties
(see [<a href="#Dem72" name="CITEDem72">Dem72</a>]), it is usually called the <em>Dempwolff group</em>.

<div class="p"><!----></div>
The character table of D is available in <font face="helvetica">GAP</font>'s character table library,
but we recompute it anew from a permutation representation of D,
in order to make the construction of the character table of Th
self-contained.

<div class="p"><!----></div>
Since <font face="helvetica">GAP</font>'s current default algorithm requires more than 4 GB of space
-too much for my small notebook-
we use some character theoretic methods for computing the irreducible
characters of D.

<div class="p"><!----></div>
First we compute the irreducible characters that are inflated from the
factor group <span class="roman">GL</span>(5,2).

<div class="p"><!----></div>

<div class="p"><!----></div>

<pre>
    gap> g:= AtlasGroup( "2^5.L5(2)" );;
    gap> bl:= Blocks( g, MovedPoints( g ) );;
    gap> Length( bl[1] );
    2
    gap> acthom:= ActionHomomorphism( g, bl, OnSets );;
    gap> img:= Image( acthom );;
    gap> Size( g ) / Size( img );
    32
    gap> sm:= SmallerDegreePermutationRepresentation( img );;
    gap> NrMovedPoints( Image( sm ) );
    31
    gap> f:= CharacterTable( Image( sm ) );;
    gap> d:= CharacterTable( g );;
    gap> fus:= List( ConjugacyClasses( d ),
    >            c -> PositionProperty( ConjugacyClasses( f ),
    >                   cc -> ( Representative( c )^acthom )^sm in cc ) );;
    gap> infl:= List( Irr( f ), x -> x{ fus } );;

</pre>

<div class="p"><!----></div>
Next we compute the characters induced from all linear characters of
cyclic subgroups of D,
and the permutation character of the given permutation representation.
Reducing these characters with the known irreducibles yields one
faithful irreducible character.
Then we form tensor products of the known irreducible characters
with the faithful irreducible character, reduce them with the known
irreducibles,
and apply the LLL algorithm to the reducible characters which we have;
this yields five new irreducible characters.

<div class="p"><!----></div>

<pre>
    gap> indcyc:= InducedCyclic( d, [ 2 .. NrConjugacyClasses( d ) ], "all" );;
    gap> nat:= NaturalCharacter( g );;
    gap> red:= ReducedOrdinary( d, infl, Concatenation( indcyc, [ nat ] ) );;
    gap> Length( red.irreducibles );
    1
    gap> faithirr:= ShallowCopy( red.irreducibles );;
    gap> ten:= Set( Tensored( infl, faithirr ) );;
    gap> ten:= Reduced( d, faithirr, ten );;
    gap> lll:= LLL( d, Concatenation( red.remainders, ten.remainders ) );;
    gap> Length( lll.irreducibles );
    5
    gap> Append( faithirr, lll.irreducibles );

</pre>

<div class="p"><!----></div>
Next we compute symmetrization of the known irreducible characters,
reduce them, and apply LLL again -four new irreducibles.

<div class="p"><!----></div>

<pre>
    gap> sym2:= Symmetrizations( d, faithirr, 2 );;
    gap> sym3:= Symmetrizations( d, faithirr, 3 );;
    gap> irr:= Concatenation( infl, faithirr );;
    gap> sym:= Reduced( d, irr, Concatenation( sym2, sym3 ) );;
    gap> lll:= LLL( d, Concatenation( lll.remainders, sym.remainders ) );;
    gap> Length( lll.irreducibles );
    4
    gap> Append( irr, lll.irreducibles );

</pre>

<div class="p"><!----></div>
Next we compute the possible orthogonal embeddings of the
four-dimensional LLL-reduced lattice into the four-dimensional
standard lattice.
we get two solutions for the missing irreducibles of D.

<div class="p"><!----></div>

<pre>
    gap> gram:= MatScalarProducts( d, lll.remainders, lll.remainders );;
    gap> emb:= OrthogonalEmbeddings( gram );;                           
    gap> Length( emb.solutions );
    3
    gap> dec:= List( emb.solutions,
    >                x -> Decreased( d, lll.remainders, emb.vectors{ x } ) );;
    gap> dec:= Filtered( dec, x -> x <> fail );;
    gap> Length( dec );
    2

</pre>

<div class="p"><!----></div>
One solution is not compatible with the given 2-nd power map of D.
Thus the other solution is the correct one.

<div class="p"><!----></div>

<pre>
    gap> sym:= List( [ 1, 2 ],
    >            i -> Symmetrizations( d, [ dec[i].irreducibles[1] ], 2 ) );;
    gap> good:= Filtered( [ 1, 2 ],
    >             i -> ForAll( dec[i].irreducibles,
    >                    x -> IsInt( ScalarProduct( d, sym[i][1], x ) ) ) );;
    gap> Length( good );
    1
    gap> SetIrr( d, Concatenation( irr, dec[ good[1] ].irreducibles ) );

</pre>

<div class="p"><!----></div>
Finally, we show that we have really computed the character table of
a group which contains an elementary abelian normal subgroup N
of order 2<sup>5</sup>, ...

<div class="p"><!----></div>

<pre>
    gap> nsg:= ClassPositionsOfNormalSubgroups( d );
    [ [ 1 ], [ 1, 2 ], [ 1 .. 41 ] ]
    gap> SizesConjugacyClasses( d ){ nsg[2] };
    [ 1, 31 ]
    gap> OrdersClassRepresentatives( d ){ nsg[2] };
    [ 1, 2 ]

</pre>

<div class="p"><!----></div>
... that the extension is non-split, ...

<div class="p"><!----></div>

<pre>
    gap> f:= d / nsg[2];;
    gap> PossibleClassFusions( f, d );
    [  ]

</pre>

<div class="p"><!----></div>
... that the factor group by N is isomorphic with <span class="roman">GL</span>(5,2), ...

<div class="p"><!----></div>

<pre>
    gap> n:= PCore( g, 2 );
    <permutation group with 5 generators>
    gap> Size( n );
    32
    gap> IsomorphismGroups( g / n, GL(5,2) ) = fail;
    false

</pre>

<div class="p"><!----></div>
... and that the computed character table is equivalent to the table
which can fetched from <font face="helvetica">GAP</font>'s character table library via the call
<tt>CharacterTable( "2^5.L5(2)" )</tt>.

<div class="p"><!----></div>

<pre>
    gap> libsub:= CharacterTable( "2^5.L5(2)" );;
    gap> IsRecord( TransformingPermutationsCharacterTables( d, libsub ) );
    true
    gap> d:= libsub;;

</pre>

<div class="p"><!----></div>

     <h3><a name="tth_sEc2.3">
2.3</a>  The power maps of Th</h3><a name="sectpowermapsTh">
</a>

<div class="p"><!----></div>
Before we can compute the irreducible characters of Th by inducing
characters from D and from cyclic subgroups of Th,
we determine the power maps of Th.

<div class="p"><!----></div>
In addition to the conditions that are imposed by the representative orders
and centralizer orders,
we use the following information from [<a href="#Par77" name="CITEPar77">Par77</a>];
each entry <tt>[ c, p, i ]</tt> means that the <tt>p</tt>-th power of the class with
the name <tt>c</tt> is the class with the name <tt>i</tt>.

<div class="p"><!----></div>

<pre>
    gap> powinfo:= [
    >     [ "zc3", 2, "c3" ],     # c3 commutes with z
    >     [ "zf2", 2, "f2" ],     # f2 commutes with z
    >     [ "r1c3", 2, "zc3" ],   # r1 commutes with c3
    >     [ "vc1", 2, "zc1" ],    # v squares to z and commutes with c1
    >     [ "wc1", 2, "vc1" ],    # w squares to v and commutes with c1
    >     [ "(wc1)^-1", 2, "vc1" ],
    >     [ "us1c2", 2, "r1c2" ], # us1 squares to r1
    >     [ "(us1c2)^-1", 2, "(r1c2)^-1" ],
    >     [ "us1", 2, "r1" ],     # (5.1)
    >     [ "w", 2, "v" ],        # (5.1)
    >     [ "zbc1", 2, "c1b" ],
    >     [ "(zbc1)^-1", 2, "(c1b)^-1" ],
    >     [ "f1", 3, "c3" ],
    >     [ "f2", 3, "c3" ],
    >     [ "f3", 3, "c3" ],
    >     [ "vc1", 3, "v" ],      # v commutes with c1
    >     [ "zf1", 3, "zc3" ],
    >     [ "zf2", 3, "zc3" ],
    >     [ "us1c2", 3, "us1" ],
    >     [ "(us1c2)^-1", 3, "us1" ],
    >     [ "wc1", 3, "w" ],
    >     [ "(wc1)^-1", 3, "w" ],
    >     [ "f4", 3, "f3" ],
    >     [ "f5", 3, "f3" ],
    >     [ "(f5)^-1", 3, "f3" ],
    >     [ "r1f1", 3, "r1c3" ],
    >     [ "s1f1", 3, "r1c3" ],
    >     [ "(s1f1)^-1", 3, "r1c3" ],
    >     ];;

</pre>

<div class="p"><!----></div>
Next we enter information about Galois conjugation;
we will need p-th power maps for primes p up to the largest
element order in Th.

<div class="p"><!----></div>

<pre>
    gap> maxorder:= Maximum( OrdersClassRepresentatives( th ) );
    39
    gap> primes:= Filtered( [ 1 .. maxorder ], IsPrimeInt );;

</pre>

<div class="p"><!----></div>
The classes of <tt>r1f1</tt> and <tt>f4</tt> (element orders 36 and 27, respectively)
are rational.

<div class="p"><!----></div>

<pre>
    gap> for p in primes do
    >      if 36 mod p <> 0 then
    >        Add( powinfo, [ "r1f1", p, "r1f1" ] );
    >      fi;
    >      if 27 mod p <> 0 then
    >        Add( powinfo, [ "f4", p, "f4" ] );
    >      fi;
    >    od;

</pre>

<div class="p"><!----></div>
For the non-rational classes, it is more suitable to set the power map entries
directly, instead of using the list <tt>powinfo</tt>.
Thus we first initialize the power maps and then evaluate this list.

<div class="p"><!----></div>

<pre>
    gap> powermaps:= [];;
    gap> for p in primes do
    >      powermaps[p]:= InitPowerMap( th, p );
    >    od;
    gap> for entry in powinfo do
    >      p:= entry[2];
    >      pow:= powermaps[p];
    >      src:= Position( parrottnames, entry[1] );
    >      trg:= Position( parrottnames, entry[3] );
    >      if IsInt( pow[ src ] ) then
    >        if pow[ src ] <> trg then
    >          Error( "contradiction!" );
    >        fi;
    >      elif not trg in pow[ src ] then
    >        Error( "contradiction!" );
    >      else
    >        pow[ src ]:= trg;
    >      fi;
    >    od;
    gap> SetComputedPowerMaps( th, powermaps );

</pre>

<div class="p"><!----></div>
Any non-rational class C, say, of Th has exactly one Galois conjugate
class,
that is, the character values attained on C generate a quadratic
extension field of the rationals.
Let x be a generating element of this extension.
If p does not divide the order of the elements in C
then the p-th power map swaps C and its Galois conjugate
if and only if x differs from the Galois image x<sup>∗p</sup>,
otherwise the p-th power map fixes the two classes.
The following small function is suitable for setting the
power map info in these cases.

<div class="p"><!----></div>

<pre>
    gap> setGaloisInfo:= function( powermaps, classes, orders, primes, x )
    >    local ord, p;
    >    ord:= orders[ classes[1] ];
    >    for p in primes do
    >      if ord mod p <> 0 then
    >        if GaloisCyc( x, p ) = x then
    >          powermaps[p]{ classes }:= classes;
    >        else
    >          powermaps[p]{ classes }:= classes{ [ 2, 1 ] };
    >        fi;
    >      fi;
    >    od;
    >    end;;

</pre>

<div class="p"><!----></div>
The elements <tt>c1b</tt> and <tt>(c1b)^-1</tt> have order 15,
so the character values on these elements lie in a
non-real quadratic subfield of the field of 15-th roots of unity,
that is, in the extension by √{−3} or √{−15}.
Since the subgroup D contains exactly two Galois conjugate classes
of element order 15,
we can decide from the character table of D which case occurs.

<div class="p"><!----></div>
The same argument holds for the classes of the elements <tt>zbc1</tt> and <tt>(zbc1)^-1</tt>,
which have order 30.

<div class="p"><!----></div>

<pre>
    gap> pos:= Positions( OrdersClassRepresentatives( d ), 15 );
    [ 22, 24 ]
    gap> f:= Field( List( Irr( d ), x -> x[ pos[1] ] ) );
    NF(15,[ 1, 2, 4, 8 ])
    gap> Sqrt( -15 ) in f;
    true
    gap> pos:= Positions( orders, 15 );
    [ 25, 26 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -15 ) );
    gap> pos:= Positions( OrdersClassRepresentatives( d ), 30 );
    [ 23, 25 ]
    gap> f:= Field( List( Irr( d ), x -> x[ pos[1] ] ) );
    NF(15,[ 1, 2, 4, 8 ])
    gap> pos:= Positions( orders, 30 );
    [ 40, 41 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -15 ) );

</pre>

<div class="p"><!----></div>
The character values on <tt>f5</tt>, <tt>(f5)^-1</tt> lie in the unique
quadratic subfield of the field of 27-th roots of unity,
which is generated by √{−3}.
Analogously, the character values on the two classes of element order 31
lie in the extension by √{−31}.

<div class="p"><!----></div>

<pre>
    gap> setGaloisInfo( powermaps,
    >        List( [ "f5""(f5)^-1" ], x -> Position( parrottnames, x ) ),
    >        orders, primes, Sqrt( -3 ) );
    gap> setGaloisInfo( powermaps, Positions( orders, 31 ), orders, primes,
    >                   Sqrt( -31 ) );

</pre>

<div class="p"><!----></div>
Concerning the two classes of element order 39,
with representatives <tt>c2l</tt> and <tt>(c2l)^-1</tt>,
the field of character values is generated either by √{−3}
or √{−39}.
We try both possibilities,
only with the second one the characters induced from the cyclic subgroup
of order 39 have integral norms.

<div class="p"><!----></div>

<pre>
    gap> pos:= Positions( orders, 39 );
    [ 47, 48 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -3 ) );
    gap> indcyc:= InducedCyclic( th, [ pos[1] ], "all" );;
    gap> ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) );
    false
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -39 ) );
    gap> indcyc:= InducedCyclic( th, [ pos[1] ], "all" );;
    gap> ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) );
    true

</pre>

<div class="p"><!----></div>
The elements <tt>s1f1</tt>, <tt>(s1f1)^-1</tt> have order 36,
the field of character values on their classes is generated
by √{−3} or √{−1}.
Only the first candidate is compatible with induced characters.

<div class="p"><!----></div>

<pre>
    gap> pos:= Positions( orders, 36 );
    [ 44, 45, 46 ]
    gap> parrottnames{ pos };
    [ "r1f1""s1f1""(s1f1)^-1" ]
    gap> setGaloisInfo( powermaps, [ 45, 46 ], orders, primes, Sqrt( -3 ) );
    gap> indcyc:= InducedCyclic( th, [ 45 ], "all" );;    
    gap> ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) );
    true
    gap> setGaloisInfo( powermaps, [ 45, 46 ], orders, primes, Sqrt( -1 ) );
    gap> indcyc:= InducedCyclic( th, [ 45 ], "all" );;
    gap> ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) );
    false
    gap> setGaloisInfo( powermaps, [ 45, 46 ], orders, primes, Sqrt( -3 ) );

</pre>

<div class="p"><!----></div>
The elements <tt>wc1</tt>, <tt>(wc1)^-1</tt> have order 24,
the field of character values on their classes is a non-real
quadratic subfield of the field of 24-th roots of unity,
the generators to check are √{−3}, √{−1}, √{−2},
and √{−6}.
Only the last candidate is compatible with induced characters.

<div class="p"><!----></div>

<pre>
    gap> List( [ "wc1""(wc1)^-1" ], x -> Position( parrottnames, x ) );
    [ 34, 35 ]
    gap> vals:= [ Sqrt( -3 ), Sqrt( -1 ), Sqrt( -2 ), Sqrt( -6 ) ];
    [ E(3)-E(3)^2, E(4), E(8)+E(8)^3, E(24)+E(24)^11-E(24)^17-E(24)^19 ]
    gap> good:= [];;
    gap> for val in vals do
    >      setGaloisInfo( powermaps, [ 34, 35 ], orders, primes, val );
    >      indcyc:= InducedCyclic( th, [ 34 ], "all" );
    >      if ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) ) then
    >        Add( good, val );
    >      fi;
    >    od;
    gap> good;
    [ E(24)+E(24)^11-E(24)^17-E(24)^19 ]
    gap> setGaloisInfo( powermaps, [ 34, 35 ], orders, primes, good[1] );

</pre>

<div class="p"><!----></div>
The only classes for which the information about powers is missing
are those of the elements <tt>r1c2</tt> and <tt>(r1c2)^-1</tt> (of order 12)
and their roots <tt>us1c2</tt>, <tt>(us1c2)^-1</tt> (of order 24).
We use that the subgroup D of Th contains elements from these classes,
which can be seen from the fact that the elements of order 12 in D
lie in the classes of <tt>r1c2</tt> and <tt>(r1c2)^-1</tt>.
(The class fusion from D to Th will be determined below,
here we need only the compatibility of element orders and centralizer orders
of a class of the subgroup and the possible image classes in the overgroup.)

<div class="p"><!----></div>
Note that the classes of <tt>us1c2</tt>, <tt>(us1c2)^-1</tt> must have the same
field of character values as their squares.

<div class="p"><!----></div>

<pre>
    gap> parrottnames{ [ 19, 20, 32, 33 ] };
    [ "r1c2""(r1c2)^-1""us1c2""(us1c2)^-1" ]
    gap> fus:= InitFusion( d, th );;
    gap> pos:= Positions( OrdersClassRepresentatives( d ), 12 );
    [ 12, 15, 16 ]
    gap> fus{ pos };
    [ [ 19, 20, 21, 22 ], [ 19, 20 ], [ 19, 20 ] ]
    gap> List( pos, x -> Field( List( Irr( d ), chi -> chi[x] ) ) );
    [ Rationals, CF(3), CF(3) ]
    gap> Sqrt( -3 ) in CF(3);
    true
    gap> setGaloisInfo( powermaps, [ 19, 20 ], orders, primes, Sqrt( -3 ) );
    gap> setGaloisInfo( powermaps, [ 32, 33 ], orders, primes, Sqrt( -3 ) );

</pre>

<div class="p"><!----></div>

     <h3><a name="tth_sEc2.4">
2.4</a>  The irreducible characters of Th</h3><a name="sectirreduciblesTh">
</a>

<div class="p"><!----></div>
We start with creating some characters of Th by inducing all linear
characters of cyclic subgroups.

<div class="p"><!----></div>

<pre>
    gap> indcyc:= InducedCyclic( th, [ 2 .. NrConjugacyClasses( th ) ], "all" );;

</pre>

<div class="p"><!----></div>
In order to induce characters from the subgroup D,
we have to determine the class fusion from D to Th.
For that, we use element orders, centralizer orders, power maps,
and the fact that the restrictions of the known characters of Th
are characters of D.
Since the table of Th will have a table automorphism that swaps
exactly the classes of element order 31,
we may choose a fixed such class as the image of one class of element order
31 in D.

<div class="p"><!----></div>

<pre>
    gap> fus:= InitFusion( d, th );
    [ 1, 2, 2, 6, [ 6, 7 ], [ 6, 7 ], 13, [ 13, 14 ], [ 13, 14 ], 5, 9, 
      [ 19, 20, 21, 22 ], 3, 10, [ 19, 20 ], [ 19, 20 ], [ 9, 10 ], 
      [ 32, 33, 34, 35 ], [ 32, 33, 34, 35 ], 8, 18, [ 25, 26 ], [ 40, 41 ], 
      [ 25, 26 ], [ 40, 41 ], 12, 24, 24, 39, 31, 12, 24, 24, 39, 31, [ 42, 43 ], 
      [ 42, 43 ], [ 42, 43 ], [ 42, 43 ], [ 42, 43 ], [ 42, 43 ] ]
    gap> Positions( OrdersClassRepresentatives( d ), 31 );
    [ 36, 37, 38, 39, 40, 41 ]
    gap> fus[36];
    [ 42, 43 ]
    gap> fus[36]:= 42;;
    gap> TestConsistencyMaps( ComputedPowerMaps( d ), fus,
    >        ComputedPowerMaps( th ) );
    true
    gap> possfus:= FusionsAllowedByRestrictions( d, th, Irr( d ), indcyc, fus,
    >      rec( maxlen:= 10, minamb:= 1, maxamb:= 10^6, quick:= false,
    >           contained:= ContainedPossibleCharacters ) );;
    gap> possfus:= RepresentativesFusions( d, possfus, Group( () ) );
    [ [ 1, 2, 2, 6, 7, 6, 13, 14, 13, 5, 9, 22, 3, 10, 19, 20, 10, 33, 32, 8, 18, 
          25, 40, 26, 41, 12, 24, 24, 39, 31, 12, 24, 24, 39, 31, 42, 43, 42, 42, 
          43, 43 ], 
      [ 1, 2, 2, 6, 7, 7, 13, 14, 14, 5, 9, 22, 3, 10, 19, 20, 10, 33, 32, 8, 18, 
          25, 40, 26, 41, 12, 24, 24, 39, 31, 12, 24, 24, 39, 31, 42, 43, 42, 42, 
          43, 43 ] ]

</pre>

<div class="p"><!----></div>
We get two solutions, up to symmetries of the character table of D.
Using that characters induced from D must have integral norm,
one of these candidates gets excluded.

<div class="p"><!----></div>

<pre>
    gap> indd:= InducedClassFunctionsByFusionMap( d, th, Irr( d ), possfus[1] );;
    gap> ForAll( indd, x -> IsInt( ScalarProduct( th, x, x ) ) );
    false
    gap> indd:= InducedClassFunctionsByFusionMap( d, th, Irr( d ), possfus[2] );;
    gap> ForAll( indd, x -> IsInt( ScalarProduct( th, x, x ) ) );
    true

</pre>

<div class="p"><!----></div>
We initialize the list of known irreducibles (with the trivial character),
and reduce the induced characters.
Applying the LLL algorithm to the reduced characters yields four new
irreducibles.

<div class="p"><!----></div>

<pre>
    gap> irr:= [ TrivialCharacter( th ) ];;
    gap> red:= ReducedOrdinary( th, irr, Concatenation( indcyc, indd ) );;
    gap> lll:= LLL( th, red.remainders );;
    gap> Length( lll.irreducibles );
    4
    gap> Append( irr, lll.irreducibles );

</pre>

<div class="p"><!----></div>
We create symmetrizations and tensor products of the known irreducibles,
and apply LLL again.
This yields three new irreducibles.

<div class="p"><!----></div>

<pre>
    gap> sym:= Concatenation( List( [ 2, 3, 4, 5 ],
    >              p -> Symmetrizations( th, irr, p ) ) );;
    gap> sym:= ReducedOrdinary( th, irr, sym );;
    gap> ten:= Set( Tensored( irr, irr ) );;
    gap> ten:= ReducedOrdinary( th, irr, ten );;
    gap> lll:= LLL( th, Concatenation( lll.remainders, sym.remainders,
    >                               ten.remainders ) );;
    gap> Length( lll.irreducibles );
    3
    gap> Append( irr, lll.irreducibles );
    gap> DimensionsMat( irr );
    [ 8, 48 ]

</pre>

<div class="p"><!----></div>
The missing 40 irreducibles are found in one step,
by computing the possible orthogonal embeddings of the LLL-reduced
lattice of virtual characters into the 40-dimensional standard lattice.

<div class="p"><!----></div>
(In order to accelerate these computations,
we create a new LLL-reduced lattice.)

<div class="p"><!----></div>

<div class="p"><!----></div>

<pre>
    gap> indcyc:= ReducedOrdinary( th, irr, indcyc );;
    gap> indd:= ReducedOrdinary( th, irr, indd );;
    gap> sym:= ReducedOrdinary( th, irr, sym.remainders );;
    gap> ten:= ReducedOrdinary( th, irr, ten.remainders );;
    gap> lll:= LLL( th, Concatenation( indcyc.remainders, indd.remainders,
    >                       sym.remainders, ten.remainders ) );;
    gap> gram:= MatScalarProducts( th, lll.remainders, lll.remainders );;
    gap> emb:= OrthogonalEmbeddings( gram, 40 );;
    gap> Length( emb.solutions );
    4

</pre>

<div class="p"><!----></div>
Two of the four solutions do not satisfy the condition that the standard
basis vectors are irreducible characters.

<div class="p"><!----></div>

<pre>
    gap> dec:= List( emb.solutions,
    >                x -> Decreased( th, lll.remainders, emb.vectors{ x } ) );;
    gap> dec:= Filtered( dec, x -> x <> fail );;
    gap> Length( dec );
    2

</pre>

<div class="p"><!----></div>
We check whether the first solution yields a character table for Th
that is permutation equivalent to the character table in
<font face="helvetica">GAP</font>'s library of character tables,
which is equal to the table that is shown in [<a href="#CCN85" name="CITECCN85">CCN<sup>+</sup>85</a>,p. 176].

<div class="p"><!----></div>

<pre>
    gap> SetIrr( th, List( Concatenation( irr, dec[1].irreducibles ),
    >                      x -> Character( th, x ) ) );
    gap> IsRecord( TransformingPermutationsCharacterTables( th, lib ) );
    true

</pre>

<div class="p"><!----></div>
We do the same for the second solution.

<div class="p"><!----></div>

<pre>
    gap> ResetFilterObj( th, HasIrr );
    gap> SetIrr( th, List( Concatenation( irr, dec[2].irreducibles ),
    >                      x -> Character( th, x ) ) );
    gap> IsRecord( TransformingPermutationsCharacterTables( th, lib ) );
    true

</pre>

<div class="p"><!----></div>
We see that both solutions are permutation equivalent
to the  A<font size="-2">TLAS</fonttable of Th.

<div class="p"><!----></div>

 <h2><a name="tth_sEc3">
3</a>  The character table of J<sub>4</sub> (January 1st, 2016)</h2>

<div class="p"><!----></div>
The character table of the sporadic simple Janko group J<sub>4</sub>
is shown in the  A<font size="-2">TLAS</font> of Finite Groups (see [<a href="#CCN85" name="CITECCN85">CCN<sup>+</sup>85</a>,pp. 188-189]),
and this  A<font size="-2">TLAS</fonttable is contained in
the character table library [<a href="#CTblLib" name="CITECTblLib">Bre25</a>]
of the computer algebra system <font face="helvetica">GAP</font> [<a href="#GAP483" name="CITEGAP483">GAP16</a>].

<div class="p"><!----></div>
We start with the description of the conjugacy classes of J<sub>4</sub>
as given in [<a href="#Jan76" name="CITEJan76">Jan76</a>] (see Section <a href="#sectclassesJ4">3.1</a>),
then we compute the character table of a subgroup of the type 2<sup>11</sup>:M<sub>24</sub>
in J<sub>4</sub> (see Section <a href="#sectsubgroupJ4">3.2</a>),
then we write down the power maps of J<sub>4</sub>
(see Section <a href="#sectpowermapsJ4">3.3</a>),
and finally we compute the irreducible characters of J<sub>4</sub>
(see Section <a href="#sectirreduciblesJ4">3.4</a>).

<div class="p"><!----></div>

     <h3><a name="tth_sEc3.1">
3.1</a>  The conjugacy classes of J<sub>4</sub></h3><a name="sectclassesJ4">
</a>

<div class="p"><!----></div>
The conjugacy classes of elements of J<sub>4</sub> are listed in [<a href="#Jan76" name="CITEJan76">Jan76</a>,Table I].

<div class="p"><!----></div>
Up to the permutation (x<sub>14</sub>, x<sub>15</sub>)(x<sub>21</sub>, x<sub>22</sub>),
this description of the classes agrees with the element orders
and centralizer orders in the character table that is claimed for J<sub>4</sub>
in <font face="helvetica">GAP</font>'s Character Table Library [Bre25].

<div class="p"><!----></div>
(The permutation is obvious for x<sub>14</sub> and x<sub>15</sub> because of the
centralizer orders.
For x<sub>21</sub> and x<sub>22</sub>,
the flip is necessary in order to get a table with the same third power map
as in the <font face="helvetica">GAP</fonttable.)

<div class="p"><!----></div>

<pre>
    gap> lib:= CharacterTable( "J4" );;
    gap> pos:= [ 1 .. NrConjugacyClasses( lib ) ];;
    gap> orders:= OrdersClassRepresentatives( lib );;
    gap> centralizers:= SizesCentralizers( lib );;
    gap> descr:= TransposedMat( [ pos, orders, centralizers ] );;
    gap> for entry in descr do
    >      Print( String( entry[1], 2 ), " ",
    >             String( entry[2], 2 ), " ",
    >             StringPP( entry[3] ), "\n" );
    >    od;
     1   1  2^21*3^3*5*7*11^3*23*29*31*37*43
     2   2  2^21*3^3*5*7*11
     3   2  2^19*3^2*5*7*11
     4   3  2^8*3^3*5*7*11
     5   4  2^15*3*5*11
     6   4  2^15*3
     7   4  2^11*3*7
     8   5  2^6*3*5*7
     9   6  2^8*3^3*5*7*11
    10   6  2^8*3^2
    11   6  2^8*3^2
    12   7  2^3*3*5*7
    13   7  2^3*3*5*7
    14   8  2^8*5
    15   8  2^8*3
    16   8  2^9
    17  10  2^6*3*5
    18  10  2^4*5
    19  11  2^3*3*11^3
    20  11  2*11^2
    21  12  2^6*3
    22  12  2^6*3
    23  12  2^4*3
    24  14  2^2*3*7
    25  14  2^2*3*7
    26  14  2^3*7
    27  14  2^3*7
    28  15  2*3*5
    29  16  2^5
    30  20  2^5*5
    31  20  2^5*5
    32  21  2*3*7
    33  21  2*3*7
    34  22  2^3*3*11
    35  22  2*11
    36  23  23
    37  24  2^4*3
    38  24  2^4*3
    39  28  2^2*7
    40  28  2^2*7
    41  29  29
    42  30  2*3*5
    43  31  31
    44  31  31
    45  31  31
    46  33  2*3*11
    47  33  2*3*11
    48  35  5*7
    49  35  5*7
    50  37  37
    51  37  37
    52  37  37
    53  40  2^3*5
    54  40  2^3*5
    55  42  2*3*7
    56  42  2*3*7
    57  43  43
    58  43  43
    59  43  43
    60  44  2^2*11
    61  66  2*3*11
    62  66  2*3*11

</pre>

<div class="p"><!----></div>
We create a new character table object for a group of the given order
and with the given element orders and centralizer orders.

<div class="p"><!----></div>

<pre>
    gap> j4:= rec( UnderlyingCharacteristic:= 0,
    >              OrdersClassRepresentatives:= orders,
    >              SizesCentralizers:= centralizers,
    >              Size:= centralizers[1] );;
    gap> ConvertToCharacterTableNC( j4 );;

</pre>

<div class="p"><!----></div>

     <h3><a name="tth_sEc3.2">
3.2</a>  The subgroup 2<sup>11</sup>:M<sub>24</sub></h3><a name="sectsubgroupJ4">
</a>

<div class="p"><!----></div>
By [<a href="#Jan76" name="CITEJan76">Jan76</a>,Theorem A (4)],
the group J<sub>4</sub> contains a subgroup U that is a split extension
of an elementary abelian group N of order 2<sup>11</sup> by the Mathieu group
M<sub>24</sub>.

<div class="p"><!----></div>
E. O'Brien has computed the character table of this subgroup
with the MAGMA system [<a href="#Magma" name="CITEMagma">BCP97</a>] from a representation of J<sub>4</sub>.
This character table is permutation equivalent to the character table
that is available in <font face="helvetica">GAP</font>'s character table library,
with the name <tt>"J4M1"</tt>, which stands for "the first class of maximal
subgroups in J<sub>4</sub>".

<div class="p"><!----></div>

<pre>
    gap> u:= CharacterTable( "J4M1" );
    CharacterTable( "mx1j4" )

</pre>

<div class="p"><!----></div>
(Trying to recompute the character table with <font face="helvetica">GAP</font>'s default algorithm
from a permutation representation on 2<sup>11</sup> points failed
on my small notebook, due to space limitations.)

<div class="p"><!----></div>

<div class="p"><!----></div>

     <h3><a name="tth_sEc3.3">
3.3</a>  The power maps of J<sub>4</sub></h3><a name="sectpowermapsJ4">
</a>

<div class="p"><!----></div>
Before we can compute the irreducible characters of J<sub>4</sub> by inducing
characters from U and from cyclic subgroups of J<sub>4</sub>,
we determine the power maps of J<sub>4</sub>.

<div class="p"><!----></div>
In addition to the conditions that are imposed by the representative orders
and centralizer orders,
we use the following information from [<a href="#Jan76" name="CITEJan76">Jan76</a>,Table I];
each entry <tt>[ c, p, i ]</tt> means that the <tt>p</tt>-th power of the <tt>c</tt>-th class
is the <tt>i</tt>-th class.
(Note that the classes 14 and 21 must be swapped with 15 and 22,
respectively, in our character table,
compared with the classes description from [<a href="#Jan76" name="CITEJan76">Jan76</a>,Table I].)

<div class="p"><!----></div>

<pre>
    gap> powinfo:= [
    >     [  5,  2,  2 ],
    >     [  6,  2,  2 ],
    >     [  7,  2,  3 ],
    >     [ 10,  3,  2 ],
    >     [ 11,  3,  3 ],
    >     [ 15,  2,  6 ],
    >     [ 16,  2,  6 ],
    >     [ 17,  5,  2 ],
    >     [ 18,  5,  3 ],
    >     [ 21,  3,  5 ],
    >     [ 22,  3,  6 ],
    >     [ 23,  3,  7 ],
    >     [ 24,  7,  2 ],
    >     [ 25,  7,  2 ],
    >     [ 26,  7,  3 ],
    >     [ 27,  7,  3 ],
    >     [ 29,  2, 16 ],
    >     [ 34, 11,  2 ],
    >     [ 35, 11,  3 ],
    >     ];;

</pre>

<div class="p"><!----></div>
Next we enter information about Galois conjugation;
we will need p-th power maps for primes p up to the largest
element order in J<sub>4</sub>.

<div class="p"><!----></div>

<pre>
    gap> maxorder:= Maximum( OrdersClassRepresentatives( j4 ) );
    66
    gap> primes:= Filtered( [ 1 .. maxorder ], IsPrimeInt );;

</pre>

<div class="p"><!----></div>
The three classes of element order 6 are rational;
note that the classes of x<sub>10</sub> and x<sub>11</sub> have the same size,
but their third powers are different.
Analogously, the three classes of element order 12 are rational,
because their third powers lie in the three different rational classes
of element order 4.

<div class="p"><!----></div>

<pre>
    gap> pos:= Union( Positions( orders, 6 ), Positions( orders, 12 ) );
    [ 9, 10, 11, 21, 22, 23 ]
    gap> for p in primes do
    >      if 6 mod p <> 0 then
    >        for i in pos do
    >          Add( powinfo, [ i, p, i ] );
    >        od;
    >      fi;
    >    od;

</pre>

<div class="p"><!----></div>
Without loss of generality,
we may choose x<sub>24</sub><sup>2</sup>  ∼ x<sub>12</sub>, x<sub>25</sub><sup>2</sup>  ∼ x<sub>13</sub>,
x<sub>26</sub><sup>2</sup>  ∼ x<sub>12</sub>, and x<sub>27</sub><sup>2</sup>  ∼ x<sub>13</sub>.
Analogously, we may choose
x<sub>55</sub><sup>2</sup>  ∼ x<sub>32</sub>, and x<sub>56</sub><sup>2</sup>  ∼ x<sub>33</sub>.

<div class="p"><!----></div>
The squares of x<sub>39</sub> and x<sub>40</sub> can be chosen as conjugates of
x<sub>26</sub> and x<sub>27</sub>, respectively,
since the 14-th powers of x<sub>39</sub> and x<sub>40</sub> are conjugate to x<sub>3</sub>.

<div class="p"><!----></div>
When we choose x<sub>55</sub><sup>3</sup>  ∼ x<sub>25</sub> and x<sub>56</sub><sup>3</sup>  ∼ x<sub>24</sub>,
we have to choose x<sub>32</sub><sup>3</sup>  ∼ x<sub>13</sub> and x<sub>33</sub><sup>3</sup>  ∼ x<sub>12</sub>,
in order to get compatible 6-th powers.
(We choose these powers in order to get the same third power map
as in the <font face="helvetica">GAP</fonttable.)

<div class="p"><!----></div>

<pre>
    gap> Add( powinfo, [ 24, 2, 12 ] );
    gap> Add( powinfo, [ 25, 2, 13 ] );
    gap> Add( powinfo, [ 26, 2, 12 ] );
    gap> Add( powinfo, [ 27, 2, 13 ] );
    gap> Add( powinfo, [ 39, 2, 26 ] );
    gap> Add( powinfo, [ 40, 2, 27 ] );
    gap> Add( powinfo, [ 55, 2, 32 ] );
    gap> Add( powinfo, [ 56, 2, 33 ] );
    gap> Add( powinfo, [ 55, 3, 25 ] );
    gap> Add( powinfo, [ 56, 3, 24 ] );
    gap> Add( powinfo, [ 32, 3, 13 ] );
    gap> Add( powinfo, [ 33, 3, 12 ] );

</pre>

<div class="p"><!----></div>
For the non-rational classes, it is more suitable to set the power map entries
directly, instead of using the list <tt>powinfo</tt>.
Thus we first initialize the power maps and then evaluate this list.

<div class="p"><!----></div>

<pre>
    gap> powermaps:= [];;
    gap> for p in primes do
    >      powermaps[p]:= InitPowerMap( j4, p );
    >    od;
    gap> for entry in powinfo do
    >      p:= entry[2];
    >      pow:= powermaps[p];
    >      src:= entry[1];
    >      trg:= entry[3];
    >      if IsInt( pow[ src ] ) then
    >        if pow[ src ] <> trg then
    >          Error( "contradiction!" );
    >        fi;
    >      elif not trg in pow[ src ] then
    >        Error( "contradiction!" );
    >      else
    >        pow[ src ]:= trg;
    >      fi;
    >    od;
    gap> SetComputedPowerMaps( j4, powermaps );

</pre>

<div class="p"><!----></div>
There are two Galois conjugate conjugacy classes of elements of order 7
in J<sub>4</sub>,
that is, the character values attained on these classes lie in the unique
quadratic extension field F, say, of the rationals.
The field F is generated by √{−7}.
If p is a prime different from 7
then the p-th power map swaps the two classes
if and only if √{−7} differs from the Galois image √{−7}<sup>∗p</sup>,
otherwise the p-th power map fixes the two classes.
The same holds for the p-th powers of the elements of order
n  ∈ { 14, 21, 28, 35, 42 } in J<sub>4</sub> if p does not divide n.
The function <tt>setGaloisInfo</tt> that has been introduced in
Section <a href="#sectpowermapsTh">2.3</a> will be used for setting the power map info
in these cases.

<div class="p"><!----></div>
(As we have used already above,
the distribution of the four classes of element order 14 into two pairs
is determined by the known seventh powers.)

<div class="p"><!----></div>

<pre>
    gap> x:= Sqrt( -7 );;
    gap> pos:= Positions( orders, 7 );
    [ 12, 13 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, x );
    gap> setGaloisInfo( powermaps, [ 24, 25 ], orders, primes, x );
    gap> setGaloisInfo( powermaps, [ 26, 27 ], orders, primes, x );
    gap> pos:= Positions( orders, 21 );
    [ 32, 33 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, x );
    gap> pos:= Positions( orders, 28 );
    [ 39, 40 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, x );
    gap> pos:= Positions( orders, 35 );
    [ 48, 49 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, x );
    gap> pos:= Positions( orders, 42 );
    [ 55, 56 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, x );

</pre>

<div class="p"><!----></div>
Without loss of generality,
we choose the representatives x<sub>48</sub>, x<sub>49</sub> in such a way that
their 5-th powers are x<sub>13</sub> and x<sub>12</sub>, respectively.

<div class="p"><!----></div>

<pre>
    gap> powermaps[5]{ [ 48, 49 ] }:= [ 13, 12 ];;

</pre>

<div class="p"><!----></div>
There are four possibilities for the two classes of element order 33.
Either they are rational, or the character values lie in the quadratic
number field generated by √{−3}, √{−11}, or √{33}.
We check for which of them the induction of characters from the cyclic
subgroup can yield characters of J<sub>4</sub>.

<div class="p"><!----></div>

<pre>
    gap> pos:= Positions( orders, 33 );
    [ 46, 47 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, 1 );
    gap> ind:= InducedCyclic( j4, [ 46 ], "all" );;
    gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
    false
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -3 ) );
    gap> ind:= InducedCyclic( j4, [ 46 ], "all" );;
    gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
    false
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -11 ) );
    gap> ind:= InducedCyclic( j4, [ 46 ], "all" );;
    gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
    false
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 33 ) );
    gap> ind:= InducedCyclic( j4, [ 46 ], "all" );;
    gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
    true

</pre>

<div class="p"><!----></div>
We see that the character values must lie in the field generated by
√{33}.
This implies that also the two classes of element order 66 are
Galois conjugate, and the character values lie in the same field.
Moreover, we may choose x<sub>46</sub> and x<sub>47</sub> as the squares of x<sub>61</sub>
and x<sub>62</sub>, respectively.

<div class="p"><!----></div>

<pre>
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 33 ) );
    gap> pos:= Positions( orders, 66 );
    [ 61, 62 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 33 ) );
    gap> powermaps[2]{ pos }:= [ 46, 47 ];;

</pre>

<div class="p"><!----></div>
We show that the two classes of element order 20 cannot be real,
in the same way as we did for the elements of order 33.
Since the subgroup U of J<sub>4</sub> contains two Galois conjugate classes
of element order 20, with character values in the quadratic number field
generated by √5,
the two classes of element order 20 in J<sub>4</sub> have the same property.

<div class="p"><!----></div>

<pre>
    gap> pos:= Positions( orders, 20 );
    [ 30, 31 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, 1 );
    gap> ind:= InducedCyclic( j4, [ 30 ], "all" );;
    gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
    false
    gap> u:= CharacterTable( "J4M1" );
    CharacterTable( "mx1j4" )
    gap> pos:= Positions( OrdersClassRepresentatives( u ), 20 );
    [ 60, 61 ]
    gap> flds:= List( pos, i -> Field( List( Irr( u ), x -> x[i] ) ) );
    [ NF(5,[ 1, 4 ]), NF(5,[ 1, 4 ]) ]
    gap> x:= Sqrt(5);;
    gap> ForAll( flds, f -> x in f );
    true
    gap> setGaloisInfo( powermaps, Positions( orders, 20 ), orders, primes, x );

</pre>

<div class="p"><!----></div>
As a consequence, also the two classes of element order 40 must be
Galois conjugate,
the character values on these classes must lie in the same quadratic field,
and we may choose x<sub>31</sub>, x<sub>30</sub> as the squares of x<sub>53</sub>, x<sub>54</sub>,
respectively.
(Again, we choose these images in order to get the same power maps as in
the <font face="helvetica">GAP</fonttable.)

<div class="p"><!----></div>

<div class="p"><!----></div>

<pre>
    gap> pos:= Positions( orders, 40 );
    [ 53, 54 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 5 ) );
    gap> powermaps[2]{ pos }:= [ 31, 30 ];;

</pre>

<div class="p"><!----></div>
For each element order p  ∈ { 31, 37, 43 },
there are three Galois conjugate conjugacy classes in J<sub>4</sub>.
Thus the character values lie in the unique cubic subfield of the
field of p-th roots of unity in each of these cases.
Without loss of generality,
we choose the representatives in such a way that

<div class="p"><!----></div>

<br clear="all" /><table border="0" width="100%"><tr><td>
<table align="center" cellspacing="0"  cellpadding="2"><tr><td nowrap="nowrap" align="center">
 </td><td nowrap="nowrap" align="center">
<table>
<tr><td align="center"><table border="0" cellspacing="0" cellpadding="0"><tr><td nowrap="nowrap" align="center">
x<sub>43</sub><sup>∗5</sup>  ∼ x<sub>44</sub>, </td></tr></table></td><td align="center"><table border="0" cellspacing="0" cellpadding="0"><tr><td nowrap="nowrap" align="center">
x<sub>44</sub><sup>∗5</sup>  ∼ x<sub>45</sub>, </td></tr></table></td></tr>
<tr><td align="center"><table border="0" cellspacing="0" cellpadding="0"><tr><td nowrap="nowrap" align="center">
x<sub>50</sub><sup>∗2</sup>  ∼ x<sub>51</sub>, </td></tr></table></td><td align="center"><table border="0" cellspacing="0" cellpadding="0"><tr><td nowrap="nowrap" align="center">
x<sub>51</sub><sup>∗2</sup>  ∼ x<sub>52</sub>, </td></tr></table></td></tr>
<tr><td align="center"><table border="0" cellspacing="0" cellpadding="0"><tr><td nowrap="nowrap" align="center">
x<sub>57</sub><sup>∗6</sup>  ∼ x<sub>58</sub>, </td></tr></table></td><td align="center"><table border="0" cellspacing="0" cellpadding="0"><tr><td nowrap="nowrap" align="center">
x<sub>58</sub><sup>∗6</sup>  ∼ x<sub>59</sub> </td></tr></table></td></tr></table>
</td><td nowrap="nowrap" align="center">
</td></tr></table>
</td></tr></table>



<div class="p"><!----></div>
hold.
Note that the three cubic field extensions are generated by the
algebraic integer c<sub>p</sub> (see [<a href="#CCN85" name="CITECCN85">CCN<sup>+</sup>85</a>,p. xxvii]),
which can be created with the function <tt>EC</tt> in <font face="helvetica">GAP</font>.

<div class="p"><!----></div>

<pre>
    gap> x:= EC( 31 );;
    gap> classes:= [ 43 .. 45 ];;
    gap> vals:= List( [ 1, 5, 25 ], k -> GaloisCyc( x, k ) );;
    gap> for p in primes do
    >   if p mod 31 <> 0 then
    >     for i in [ 1 .. 3 ] do
    >       powermaps[p][ classes[i] ]:=
    >         classes[ Position( vals, GaloisCyc( vals[i], p ) ) ];
    >     od;
    >   fi;
    > od;
    gap> x:= EC( 37 );;
    gap> classes:= [ 50 .. 52 ];;
    gap> vals:= List( [ 1, 2, 4 ], k -> GaloisCyc( x, k ) );;
    gap> for p in primes do
    >   if p mod 37 <> 0 then
    >     for i in [ 1 .. 3 ] do
    >       powermaps[p][ classes[i] ]:=
    >         classes[ Position( vals, GaloisCyc( vals[i], p ) ) ];
    >     od;
    >   fi;
    > od;
    gap> x:= EC( 43 );;
    gap> classes:= [ 57 .. 59 ];;
    gap> vals:= List( [ 1, 6, 36 ], k -> GaloisCyc( x, k ) );;
    gap> for p in primes do
    >   if p mod 43 <> 0 then
    >     for i in [ 1 .. 3 ] do
    >       powermaps[p][ classes[i] ]:=
    >         classes[ Position( vals, GaloisCyc( vals[i], p ) ) ];
    >     od;
    >   fi;
    > od;

</pre>

<div class="p"><!----></div>
What information is missing now?

<div class="p"><!----></div>

<pre>
    gap> pos:= PositionsProperty( powermaps[2], IsList );
    [ 21, 22, 23, 35, 37, 38 ]
    gap> orders{ pos };
    [ 12, 12, 12, 22, 24, 24 ]

</pre>

<div class="p"><!----></div>
The square of x<sub>35</sub> is not yet determined.
Since the centralizer order of each of the two classes of element order 11
is even, both x<sub>19</sub> and x<sub>20</sub> must have square roots of order 22,
and since x<sub>34</sub><sup>2</sup> is conjugate to x<sub>19</sub>,
we know that x<sub>35</sub><sup>2</sup> is conjugate to x<sub>20</sub>.

<div class="p"><!----></div>

<pre>
    gap> powermaps[2]{ [ 34, 35 ] };
    [ 19, [ 19, 20 ] ]
    gap> powermaps[2][35]:= 20;;

</pre>

<div class="p"><!----></div>
Since x<sub>23</sub> is the only representative of order 12
whose 6-th power is conjugate to x<sub>3</sub>,
and since x<sub>11</sub> is the only representative of order 6
whose cube is conjugate to x<sub>3</sub>,
we know that the square of x<sub>23</sub> is conjugate to x<sub>11</sub>.
Conversely, x<sub>11</sub> cannot be conjugate to the squares of x<sub>21</sub>
or x<sub>22</sub>.

<div class="p"><!----></div>

<pre>
    gap> powermaps[2]{ [ 21, 22, 23 ] }:= [ [ 9, 10 ], [ 9, 10 ], 11 ];;

</pre>

<div class="p"><!----></div>
Because of x<sub>37</sub><sup>3</sup>  ∼ x<sub>38</sub><sup>3</sup>  ∼ x<sub>14</sub> and x<sub>14</sub><sup>2</sup>  ∼ x<sub>6</sub>,
and because the only representative of order 12 whose third power is
conjugate to x<sub>6</sub> is x<sub>21</sub>, we conclude that the squares of
x<sub>37</sub> and x<sub>38</sub> are conjugate to x<sub>21</sub>.

<div class="p"><!----></div>

<pre>
    gap> powermaps[2]{ [ 37, 38 ] }:= [ 22, 22 ];;

</pre>

<div class="p"><!----></div>
Now the three open questions are
whether the classes of element order 24 are rational or not,
and whether the squares of x<sub>21</sub> and x<sub>22</sub> are conjugate to
x<sub>9</sub> or x<sub>10</sub>.

<div class="p"><!----></div>
First we show that the squares of both x<sub>21</sub> and x<sub>22</sub> are conjugate
to x<sub>10</sub>,
since the other three possibilities do not admit a class fusion from U.

<div class="p"><!----></div>

<pre>
    gap> poss:= [];;
    gap> for cand in [ [ 9, 9 ], [ 9, 10 ], [ 10, 9 ] ] do
    >   powermaps[2]{ [ 21, 22 ] }:= cand;
    >   fus:= InitFusion( u, j4 );
    >   TestConsistencyMaps( ComputedPowerMaps( u ), fus, powermaps );
    >   indcyc:= InducedCyclic( j4, [ 21, 22 ], "all" );
    >   possfus:= FusionsAllowedByRestrictions( u, j4, Irr( u ), indcyc, fus,
    >        rec( maxlen:= 10, minamb:= 1, maxamb:= 10^6, quick:= false,
    >             contained:= ContainedPossibleCharacters ) );
    >   Add( poss, Length( possfus ) );
    > od;
    gap> poss;
    [ 0, 0, 0 ]
    gap> powermaps[2]{ [ 21, 22 ] }:= [ 10, 10 ];;

</pre>

<div class="p"><!----></div>
Next we show that the classes of x<sub>37</sub>, x<sub>38</sub> cannot be rational.

<div class="p"><!----></div>

<pre>
    gap> pos:= Positions( orders, 24 );
    [ 37, 38 ]
    gap> setGaloisInfo( powermaps, pos, orders, primes, 1 );
    gap> indcyc:= InducedCyclic( j4, pos, "all" );;
    gap> ForAll( indcyc, x -> IsInt( ScalarProduct( j4, x, x ) ) );
    false

</pre>

<div class="p"><!----></div>
Note that U contains two Galois conjugate classes of element order 24,
with character values in the field generated by √3.
Thus also the character values in the classes of x<sub>37</sub>, x<sub>38</sub> of J<sub>4</sub>
lie in this field.

<div class="p"><!----></div>

<pre>
    gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 3 ) );

</pre>

<div class="p"><!----></div>

     <h3><a name="tth_sEc3.4">
3.4</a>  The irreducible characters of J<sub>4</sub></h3><a name="sectirreduciblesJ4">
</a>

<div class="p"><!----></div>
We start with creating some characters of J<sub>4</sub> by inducing all linear
characters of cyclic subgroups.

<div class="p"><!----></div>

<pre>
    gap> indcyc:= InducedCyclic( j4, [ 2 .. NrConjugacyClasses( j4 ) ], "all" );;

</pre>

<div class="p"><!----></div>
In order to induce characters from the subgroup U,
we have to determine the class fusion of U in J<sub>4</sub>.
For that, we use element orders, centralizer orders, power maps,
and the fact that the restrictions of the known characters of J<sub>4</sub>
are characters of U.

<div class="p"><!----></div>
Note that we may use also the character table automorphisms of U
in those cases where a pair of Galois conjugate classes of U is mapped to
a pair of Galois conjugate classes of J<sub>4</sub>.

<div class="p"><!----></div>

<pre>
    gap> u:= CharacterTable( "J4M1" );
    CharacterTable( "mx1j4" )
    gap> fus:= InitFusion( u, j4 );
    [ 1, [ 2, 3 ], 2, [ 2, 3 ], [ 2, 3 ], [ 2, 3 ], [ 2, 3 ], 4, 4, 5, [ 5, 6 ], 
      [ 5, 6 ], 7, [ 5, 6 ], [ 5, 6, 7 ], [ 5, 6, 7 ], [ 5, 6, 7 ], [ 5, 6, 7 ], 
      [ 5, 6, 7 ], [ 5, 6, 7 ], [ 5, 6, 7 ], [ 5, 6, 7 ], 8, 9, [ 9, 10, 11 ], 
      [ 9, 10, 11 ], [ 9, 10, 11 ], [ 9, 10, 11 ], [ 9, 10, 11 ], [ 9, 10, 11 ], 
      [ 9, 10, 11 ], [ 12, 13 ], [ 12, 13 ], 15, 16, [ 14, 15, 16 ], 
      [ 14, 15, 16 ], [ 14, 15, 16 ], [ 14, 15, 16 ], 17, [ 17, 18 ], [ 17, 18 ], 
      [ 17, 18 ], [ 19, 20 ], [ 21, 22 ], [ 21, 22 ], [ 21, 22, 23 ], 
      [ 21, 22, 23 ], [ 21, 22, 23 ], [ 21, 22, 23 ], [ 21, 22, 23 ], 
      [ 21, 22, 23 ], [ 26, 27 ], [ 26, 27 ], [ 24, 25, 26, 27 ], 
      [ 24, 25, 26, 27 ], 28, 28, 29, [ 30, 31 ], [ 30, 31 ], [ 32, 33 ], 
      [ 32, 33 ], [ 34, 35 ], 36, 36, [ 37, 38 ], [ 37, 38 ], [ 39, 40 ], 
      [ 39, 40 ], 42, 42 ]
    gap> Print( AutomorphismsOfTable( u ), "\n" );
    Group( [ (67,68), (65,66), (60,61), (57,58)(71,72), (57,58)(67,68)(71,72), 
--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=91 H=100 G=95

¤ Dauer der Verarbeitung: 0.25 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

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

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge