<p>To actually run an orbit enumeration by suborbits, we have to collect some insight into the structure of the group under consideration and into its representation theory. In general, preparing the input data is more of an art than a science. The mathematical details are described in <a href="chapBib.html#biBMNW">[MNW07]</a>.</p>
<p>In Section <a href="chap11.html#X7D5456AC85A830A4"><span class="RefLink">11.1</span></a> we present a small example of the usage of the orbit-by-suborbit machinery. We use the sporadic simple Mathieu group <span class="SimpleMath">M_{11}</span> acting projectively on its irreducible module of dimension 24 over the field with 3 elements.</p>
<p>In Section <a href="chap11.html#X790F22B67C56A49F"><span class="RefLink">11.2</span></a> we present another example of the usage of the orbit-by-suborbit programs. In this example we determine 35 of the 36 double coset representatives of the sporadic simple Fischer group <span class="SimpleMath">Fi_{23}</span> with respect to its seventh maximal subgroup.</p>
<p>In Section <a href="chap11.html#X7D7BDBF87E7C45ED"><span class="RefLink">11.3</span></a> we present a bigger example of the usage of the orbit-by-suborbit machinery. In this example the orbit lengths of the sporadic simple Conway group <span class="SimpleMath">Co_{1}</span> acting in in its irreducible projective representation over the field with <span class="SimpleMath">5</span> elements in dimension <span class="SimpleMath">24</span> are determined, which were previously unknown. These orbit lengths were needed to rule out a case in <a href="chapBib.html#biBLongOrbits">[Mal06]</a>.</p>
<p>In Section <a href="chap11.html#X781209EE7C9D3E0E"><span class="RefLink">11.4</span></a> we present as an extended worked example how to enumerate the smallest non-trivial orbit of the sporadic simple Baby Monster group <span class="SimpleMath">B</span>. We give a log of a <strong class="pkg">GAP</strong> session with explanations in between, being intended to illustrate a few of the tools which are available in the <strong class="pkg">orb</strong> package as well as in related packages. Actually, the <strong class="pkg">orb</strong> package has also been applied to two much larger permutation actions of <span class="SimpleMath">B</span>, namely its action on its 2B involutions, having degree <span class="SimpleMath">≈ 1.2⋅ 10^13</span>, and its action on the cosets of a maximal subgroup isomorphic to <span class="SimpleMath">Fi_23</span>, having degree <span class="SimpleMath">≈ 1.0⋅ 10^15</span>; for details see <a href="chapBib.html#biBMueBMCo2">[M\t08]</a> and <a href="chapBib.html#biBMNW">[MNW07]</a>, respectively.</p>
<p>Note that for all this to work you have to acquire and install the packages <strong class="pkg">IO</strong>, <strong class="pkg">cvec</strong>, and <strong class="pkg">atlasrep</strong>, and for Section <a href="chap11.html#X781209EE7C9D3E0E"><span class="RefLink">11.4</span></a> you additionally need the packages <strong class="pkg">chop</strong> and <strong class="pkg">genss</strong>.</p>
<h4>11.1 <span class="Heading">The Mathieu group <span class="SimpleMath">M_{11}</span> acting in
dimension <span class="SimpleMath">24</span></span></h4>
<p>The example in this section is very small but our intention is that everything can still be analysed and looked at more or less by hand. We want to enumerate orbits of the Mathieu group <span class="SimpleMath">M_{11}</span> acting projectively on its irreducible module of dimension 24 over the field with 3 elements. All the files for this example are located in the <code class="file">examples/m11PF3d24</code> subdirectory of the <strong class="pkg">orb</strong> package. Then you simply run the example in the following way:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ReadPackage("orb","examples/m11PF3d24/M11OrbitOnPF3d24.g");</span>
...
<span class="GAPprompt">gap></span> <span class="GAPinput">o := OrbitBySuborbit(setup,v,3,3,2,100);</span>
...
#I OrbitBySuborbit found 100% of a U3-orbit of size 7 920
...
</pre></div>
<p>Everything works instantly as it would have without the orbit-by-suborbits method. (Depending on whether the matrix and permutation generators for <span class="SimpleMath">M_{11}</span> are already stored locally, some time might be needed to fetch them.) The details of this computation can be directly read off from the code in the file <code class="file">M11OrbitOnPF3d24.g</code>:</p>
v := ZeroMutable(cgens[1][1]);
Randomize(v);
ORB_NormalizeVector(v);
Print("Now do\n o := OrbitBySuborbit(setup,v,3,3,2,100);\n");
</pre></div>
<p>We are using two helper subgroups <span class="SimpleMath">U_1 < U_2 < M_11</span>, where <span class="SimpleMath">U_2≅ A_6.2</span> is the largest maximal subgroup of <span class="SimpleMath">M_11</span>, having order <span class="SimpleMath">720</span>, and <span class="SimpleMath">U_2≅ 5:4</span> is a maximal subgroup of <span class="SimpleMath">U_2</span> of order <span class="SimpleMath">20</span>, see <a href="chapBib.html#biBCCN85">[CCN+85]</a> or the <strong class="pkg">CTblLib</strong> package. The quotient spaces we use for the helper subgroups have dimensions <span class="SimpleMath">5</span> and <span class="SimpleMath">11</span> respectively. Straight line programs to compute generators of the helper subgroups in terms of the given generators of <span class="SimpleMath">M_11</span>, and an appropriate basis exhibiting the quotients, have already been computed, and are stored in the files <code class="file">m11slps.g</code> and <code class="file">m11basech.cmat</code>, respectively. (In Section <a href="chap11.html#X781209EE7C9D3E0E"><span class="RefLink">11.4</span></a> we show in detail how such straight line programs and suitable bases can be found using the tools available in in the <strong class="pkg">orb</strong> package.) The command <code class="file">OrbitBySuborbitBootstrapForLines</code> invokes the precomputation, and in particular says that we want to use projective action.</p>
<h4>11.2 <span class="Heading">The Fischer group <span class="SimpleMath">Fi_{23}</span> acting in
dimension <span class="SimpleMath">1494</span>
</span></h4>
<p>The example in this section shows how to compute 35 of the 36 double coset representatives of the Fischer group <span class="SimpleMath">Fi_{23}</span> with respect to its seventh maximal subgroup <span class="SimpleMath">H≅ 3_+^{1+8}.2_-^{1+6}.3_+^{1+2}.2S_4</span>, which has order <span class="SimpleMath">3265173504≈ 3.2⋅ 10^9</span> and index <span class="SimpleMath">[Fi_{23}: H]=1252451200 ≈ 1.3 ⋅ 10^9</span>, see <a href="chapBib.html#biBCCN85">[CCN+85]</a> or the <strong class="pkg">CTblLib</strong> package. All the files for this example are located in the <code class="file">examples/fi23m7</code> subdirectory of the <strong class="pkg">orb</strong> package. You simply run the example in the following way:</p>
<p>We will not go into the details of the computation here, but they can be read off directly from the code in the files in that directory. In the first part, run by the file <code class="file">GOrbitByKOrbitsPrepare.g</code>, we prepare the necessary input data, by using similar techniques as described at length in Section <a href="chap11.html#X781209EE7C9D3E0E"><span class="RefLink">11.4</span></a>. (Actually, this example has been dealt with before the advent of the packages <strong class="pkg">chop</strong> and <strong class="pkg">genss</strong>, hence we are using appropriate private code instead.) We are using two helper subgroups <span class="SimpleMath">U_1 < U_2 < H < Fi_{23}</span>, being <span class="SimpleMath">3</span>-subgroups of <span class="SimpleMath">H</span> of order <span class="SimpleMath">81</span> and <span class="SimpleMath">6561</span>, respectively. The 1494-dimensional irreducible representation of <span class="SimpleMath">Fi_{23}</span> over the field with 2 elements contains a vector that is fixed by <span class="SimpleMath">H</span>, such that the action on its <span class="SimpleMath">Fi_{23}</span>-orbit is isomorphic to the action on the cosets of <span class="SimpleMath">H</span>.</p>
<p>The second part, in the file <code class="file">GOrbitByKOrbitsSearch35.g</code>, is the actual enumeration of <span class="SimpleMath">H</span>-orbits:</p>
<p>Note that this computation finds only 35 of the 36 double coset representatives. The last corresponds to a very short suborbit which is very difficult to find. Knowing the number of missing points, we guess the stabiliser in <span class="SimpleMath">H</span> of a missing representative, and find the latter amongst the fixed points of the stabiliser. We can then choose the one which lies in the <span class="SimpleMath">G</span>-orbit we have nearly enumerated above.</p>
<p>These double coset representatives were needed to determine the 2-modular character table of <span class="SimpleMath">Fi_{23}</span>. Details of this can be found in <a href="chapBib.html#biBFi23mod2">[HNN06]</a>.</p>
<h4>11.3 <span class="Heading">The Conway group <span class="SimpleMath">Co_1</span> acting in
dimension <span class="SimpleMath">24</span>
</span></h4>
<p>The example in this section shows how to compute all suborbit lengths of the Conway group <span class="SimpleMath">Co_1</span>, in its irreducible projective action on a module of dimension 24 over the field with 5 elements. All the files for this example are located in the <code class="file">examples/co1F5d24</code> subdirectory of the <strong class="pkg">orb</strong> package. Then you simply run the example in the following way:</p>
<p>We will not go into the details of the first part of the computation here, as they are very similar to those reproduced in Section <a href="chap11.html#X7D5456AC85A830A4"><span class="RefLink">11.1</span></a>, and can be directly read off from the code in the file <code class="file">Co1OrbitOnPF5d24.g</code>: We are using three helper subgroups <span class="SimpleMath">U_1 < U_2 < U_3 < Co_1</span>, where <span class="SimpleMath">Co_1</span> has order <span class="SimpleMath">4157776806543360000≈ 4.2⋅ 10^18</span>, see <a href="chapBib.html#biBCCN85">[CCN+85]</a> or the <strong class="pkg">CTblLib</strong> package, and where <span class="SimpleMath">U_3≅ 2_+^{1+8}.O_8(2)</span> is the fifth maximal subgroup of <span class="SimpleMath">Co_1</span>, having order <span class="SimpleMath">89181388800≈ 8.9⋅ 10^10</span>, while <span class="SimpleMath">U_2≅ [2^8]: S_6(2)</span> is a maximal subgroup of <span class="SimpleMath">U_3</span> of order <span class="SimpleMath">371589120≈ 3.7⋅ 10^8</span>, and <span class="SimpleMath">U_1≅ 2^6: L_3(2)</span> is a maximal subgroup of <span class="SimpleMath">S_6(2)</span> of order <span class="SimpleMath">10752≈ 1.1⋅ 10^4</span>. The projective action comes from the irreducible 24-dimensional linear representation of the Schur cover <span class="SimpleMath">2.Co_1</span> of <span class="SimpleMath">Co_1</span>, which by <a href="chapBib.html#biBJansen">[Jan05]</a> is the smallest faithful representation of <span class="SimpleMath">2.Co_1</span> over the field GF(5), and the quotient spaces we use for the helper subgroups have dimensions <span class="SimpleMath">8</span>, <span class="SimpleMath">8</span> and <span class="SimpleMath">16</span> respectively.</p>
<p>The details of the second part can be directly read off from the code in the file <code class="file">Co1OrbitOnPF5d24.findall.g</code>:</p>
<p>Note that this example needs about 2GB of main memory on a 32bit machine and probably nearly 4GB on a 64bit machine. However, the orbit lengths were previously unknown before they were computed with this program. The orbit lengths were needed to rule out a case in <a href="chapBib.html#biBLongOrbits">[Mal06]</a>.</p>
<h4>11.4 <span class="Heading">The Baby Monster <span class="SimpleMath">B</span> acting on its 2A involutions</span></h4>
<p>The example in this section shows how to enumerate the smallest non-trivial orbit of the Baby Monster group <span class="SimpleMath">B</span>. All the files for this example are located in the <code class="file">examples/bmF2d4370</code> subdirectory of the <strong class="pkg">orb</strong> package. You may simply run the example in the following way:</p>
<p>The one-point stabilisers associated to the smallest non-trivial orbit of <span class="SimpleMath">B</span> are its largest maximal subgroups <span class="SimpleMath">E ≅ 2.^2E_6(2).2</span>, which are the centralisers of its 2A involutions. Here <span class="SimpleMath">E</span> is a bicyclic extension of the twisted Lie type group <span class="SimpleMath">^2E_6(2)</span>, and has index <span class="SimpleMath">[B: E]=13571955000 ≈ 1.4 ⋅ 10^10</span>, see <a href="chapBib.html#biBCCN85">[CCN+85]</a> or the <strong class="pkg">CTblLib</strong> package.</p>
<p>We first try to find a matrix representation of <span class="SimpleMath">B</span> such that the <span class="SimpleMath">B</span>-orbit we look for is realised as a set of vectors in the underlying vector space. The smallest faithful representation of <span class="SimpleMath">B</span> over the field GF(2), by <a href="chapBib.html#biBJansen">[Jan05]</a> having dimension 4370, springs to mind. Explicit matrices in terms of standard generators in the sense of <a href="chapBib.html#biBWil96">[Wil96]</a> are available in <a href="chapBib.html#biBAGR">[Wil]</a>, and are accessibe through the <strong class="pkg">atlasrep</strong> package. Moreover, we find generators of <span class="SimpleMath">E</span> by applying a straight line program, also available in the <strongclass="pkg">atlasrep</strong> package, expressing generators of <span class="SimpleMath">E</span> in terms of the generators of <span class="SimpleMath">B</span>.</p>
<p>We look for a non-zero vector being fixed by both generators of <span class="SimpleMath">E</span>. It turns out that the latter have a common fixed space of dimension 1. Then, since <span class="SimpleMath">E</span> is a maximal subgroup, the stabiliser in <span class="SimpleMath">B</span> of the non-zero vector <span class="SimpleMath">v</span> in that fixed space coincides with <span class="SimpleMath">E</span>.</p>
<p>Storing eight elements of GF(2) into 1 byte, to store a vector of length 4370 needs 547 bytes plus some organisational overhead resulting in about 580 bytes, hence to store the full <span class="SimpleMath">B</span>-orbit of <span class="SimpleMath">v</span> we need <span class="SimpleMath">580 ⋅ [B: E] ≈ 7.9 ⋅ 10^12</span> bytes. Hence we try to find helper subgroups suitable to achieve a saving factor of <span class="SimpleMath">≈ 10^4</span>, i. e. allowing to store only one out of <span class="SimpleMath">≈ 10^4</span> vectors. To this end, we look for a pair <span class="SimpleMath">U_1<U_2</span> of helper subgroups such that <span class="SimpleMath">|U_2| ≈ 10^5</span>, where we take into account that typically the overall saving factor achieved is somewhat smaller than the order of the largest helper subgroup.</p>
<p>By <a href="chapBib.html#biBCCN85">[CCN+85]</a>, and a few computations with subgroup fusions using the <strong class="pkg">CTblLib</strong> package, the derived subgroup <span class="SimpleMath">E' ≅ 2.^2E_6(2) of E turns out to possess maximal subgroups 2 × Fi_{22} and 2.Fi_{22}, where Fi_{22} denotes one of the sporadic simple Fischer groups, and where the former constitute a unique conjugacy class with associated normalizers in E of shape 2 × Fi_{22}.2, while the latter consist of two conjugacy classes being self-normalising and interchanged by E.
<p>Now <span class="SimpleMath">Fi_{22}</span> has a unique conjugacy class of maximal subgroups <span class="SimpleMath">M_{12}</span>, where the latter denotes one of the sporadic simple Mathieu groups; the subgroups <span class="SimpleMath">M_{12}</span> lift to a unique conjugacy class of subgroups <span class="SimpleMath">M_{12}</span> of <span class="SimpleMath">2.Fi_{22}</span>, which turn out to constitute a conjugacy class of subgroups of <span class="SimpleMath">E</span> different from the subgroups <span class="SimpleMath">M_{12}</span> being contained in <span class="SimpleMath">Fi_{22}</span>. Anyway, we have <span class="SimpleMath">|M_{12}|=95040</span>, hence <span class="SimpleMath">U_2=M_{12}</span> seems to be a good candidate for the larger helper subgroup. In particular, there is a unique conjugacy class of maximal subgroups <span class="SimpleMath">L_2(11)</span> of <span class="SimpleMath">M_{12}</span>, and since <span class="SimpleMath">|L_2(11)|=660</span> and <span class="SimpleMath">[M_{12}: L_2(11)]=144</span> letting <span class="SimpleMath">U_1=L_2(11)</span> seems to be a good candidate for the smaller helper subgroup. Recall that <span class="SimpleMath">U_1</span> and <span class="SimpleMath">U_2</span> are useful helper subgroups only if we are able to find suitable quotient modules allowing for the envisaged saving factor.</p>
<p>To find <span class="SimpleMath">U_1</span> and <span class="SimpleMath">U_2</span>, we first try to find a subgroup <span class="SimpleMath">Fi_{22}</span> or <span class="SimpleMath">2.Fi_{22}</span> of <span class="SimpleMath">E</span>. We start a random search, aiming at finding standard generators of either <span class="SimpleMath">Fi_{22}</span> or <span class="SimpleMath">2.Fi_{22}</span>, and we use <code class="code">GeneratorsWithMemory</code> in order to be able to express the generators found as words in the generators of <span class="SimpleMath">E</span>. To accelerate computations we first construct a small representation of <span class="SimpleMath">E</span>; by <a href="chapBib.html#biBJansen">[Jan05]</a> the smallest faithful irreducible representation of <span class="SimpleMath">Fi_{22}</span> over GF(2) has dimension 78, hence we cannot do better for <span class="SimpleMath">E</span>; note that the latter is a representation of <span class="SimpleMath">overlineE:=E/Z(E) ≅ ^2E_6(2).2</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetInfoLevel(InfoChop,2);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := Module(egens);</span>
<module of dim. 4370 over GF(2)>
<span class="GAPprompt">gap></span> <span class="GAPinput">r := Chop(m);</span>
...
rec( ischoprecord := true,
db := [ <abs. simple module of dim. 78 over GF(2)>,
<trivial module of dim. 1 over GF(2)>,
<abs. simple module of dim. 1702 over GF(2)>,
<abs. simple module of dim. 572 over GF(2)> ],
mult := [ 5, 4, 2, 1 ], acs := [ 1, 2, 3, 1, 4, 1, 1, 2, 2, 3, 1, 2 ],
module := <reducible module of dim. 4370 over GF(2)> )
<span class="GAPprompt">gap></span> <span class="GAPinput">i := Position(List(r.db,Dimension),78);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">egens78 := GeneratorsWithMemory(RepresentingMatrices(r.db[i]));</span>
[ <<immutable cmat 78x78 over GF(2,1)> with mem>,
<<immutable cmat 78x78 over GF(2,1)> with mem> ]
</pre></div>
<p>By <a href="chapBib.html#biBAGR">[Wil]</a>, standard generators <span class="SimpleMath">a,b</span> of <span class="SimpleMath">Fi_{22}</span> are given as follows: <span class="SimpleMath">a</span> is an element of the 2A conjugacy class of <span class="SimpleMath">Fi_{22}</span>, and <span class="SimpleMath">b</span>, <span class="SimpleMath">ab</span>, and <span class="SimpleMath">(ab)^4bab(abb)^2</span> have order 13, 11, and 12, respectively; standard generators of <span class="SimpleMath">2.Fi_{22}</span> are lifts of standard generators of <span class="SimpleMath">Fi_{22}</span> having the same order fingerprint. The 2A conjugacy class of <span class="SimpleMath">Fi_{22}</span> fuses into the 2A conjugacy class of <span class="SimpleMath">overlineE</span>, where the latter is obtained as the 11-th power of the unique conjugacy class of elements of order 22, and <span class="SimpleMath">overlineE</span> has only one conjugacy class of elements of order 13.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">o := Orb(egens78,StripMemory(egens78[1])^0,OnRight,rec(schreier := true,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> lookingfor := function(o,x) return Order(x)=22; end));</span>
<open orbit, 1 points with Schreier tree looking for sth.>
<span class="GAPprompt">gap></span> <span class="GAPinput">Enumerate(o);</span>
<open orbit, 393 points with Schreier tree looking for sth.>
<span class="GAPprompt">gap></span> <span class="GAPinput">word := TraceSchreierTreeForward(o,PositionOfFound(o));</span>
[ 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">g2a := Product(egens78{word})^11;</span>
<<immutable cmat 78x78 over GF(2,1)> with mem>
<span class="GAPprompt">gap></span> <span class="GAPinput">o := Orb(egens78,StripMemory(egens78[1])^0,OnRight,rec(schreier := true,</span>
<span class="GAPprompt">></span> <span class="GAPinput"> lookingfor := function(o,x) return Order(x)=13; end));</span>
<open orbit, 1 points with Schreier tree looking for sth.>
<span class="GAPprompt">gap></span> <span class="GAPinput">Enumerate(o);</span>
<open orbit, 144 points with Schreier tree looking for sth.>
<span class="GAPprompt">gap></span> <span class="GAPinput">word := TraceSchreierTreeForward(o,PositionOfFound(o));</span>
[ 1, 2, 1, 2, 1, 2, 1, 2, 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">b := Product(egens78{word});</span>
<<immutable cmat 78x78 over GF(2,1)> with mem>
</pre></div>
<p>We search through the <span class="SimpleMath">overlineE</span>-conjugates of <code class="code">g2a</code> until we find a conjugate <span class="SimpleMath">a</span> together with <span class="SimpleMath">b</span> fulfilling the defining conditions of standard generators of <span class="SimpleMath">Fi_{22}</span>, and moreover fulfilling the relations of the associated presentation of <span class="SimpleMath">Fi_{22}</span> available in <a href="chapBib.html#biBAGR">[Wil]</a>.</p>
<p>To find conjugates, we use the product replacement algorithm to produce pseudo random elements of <span class="SimpleMath">overlineE</span>. Assuming a genuine random search, the success probability of this approach is as follows: Letting <span class="SimpleMath">overlineE':=E'/Z(E') ≅ ^2E_6(2), out of the |overlineE'|/|C_overlineE'}(g2a)| conjugates of g2a there are |C_{ overlineE' }(b)|/|C_{ overlineE' }(Fi_{22})| =|C_{ overlineE' }(b)|</span> elements together with the fixed element <span class="SimpleMath">b</span> giving standard generators of <span class="SimpleMath">Fi_{22}</span>. Since <span class="SimpleMath">Fi_{22}</span> has two conjugacy classes of elements of order 13, and there are three conjugacy classes of subgroups <span class="SimpleMath">Fi_{22}</span> of <span class="SimpleMath">overlineE', the success probability is 6 ⋅ |C_{ overlineE' }(g2a)| ⋅ |C_{ overlineE' }(b)|/|overlineE'| ≈ 2 ⋅ 10^-5</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pr := ProductReplacer(egens78,rec(maxdepth := 150));</span>
<product replacer nrgens=2 slots=12 scramble=100 maxdepth=150 steps=0 (rattle)>
<span class="GAPprompt">gap></span> <span class="GAPinput">i := 0;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">repeat</span>
<span class="GAPprompt">></span> <span class="GAPinput"> i := i + 1; </span>
<span class="GAPprompt">></span> <span class="GAPinput"> x := Next(pr);</span>
<span class="GAPprompt">></span> <span class="GAPinput"> a := g2a^x;</span>
<span class="GAPprompt">></span> <span class="GAPinput"> until IsOne((a*b)^11) and IsOne(((a*b)^4*b*a*b*(a*b*b)^2)^12) and</span>
<span class="GAPprompt">></span> <span class="GAPinput"> IsOne((a*b^2)^21) and IsOne(Comm(a,b)^3) and </span>
<span class="GAPprompt">></span> <span class="GAPinput"> IsOne(Comm(a,b^2)^3) and IsOne(Comm(a,b^3)^3) and</span>
<span class="GAPprompt">></span> <span class="GAPinput"> IsOne(Comm(a,b^4)^2) and IsOne(Comm(a,b^5)^3) and</span>
<span class="GAPprompt">></span> <span class="GAPinput"> IsOne(Comm(a,b*a*b^2)^3) and IsOne(Comm(a,b^-1*a*b^-2)^2) and</span>
<span class="GAPprompt">></span> <span class="GAPinput"> IsOne(Comm(a,b*a*b^5)^2) and IsOne(Comm(a,b^2*a*b^5)^2);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">i;</span>
53271
</pre></div>
<p>Note that the initial state of the random number generator does influence this randomised result: it may very well be that you see some other value for <span class="SimpleMath">i</span>.</p>
<p>Due to a presentation being available we have proved that the elements found generate a subgroup <span class="SimpleMath">Fi_{22}</span>. If we had not had a presentation at hand, we might only have been able to find elements fulfilling the defining conditions of standard generators of <span class="SimpleMath">Fi_{22}</span>, but still generating a subgroup of another isomorphism type. In that case, for further checks we can use the following tools: We try to find a short orbit of vectors, and using a randomized Schreier-Sims algorithm gives a lower bound for the order of the group seen. However, we can use the action on the orbit to get a homomorphism into a permutation group, allowing to prove that the group generated indeed has <span class="SimpleMath">Fi_{22}</span> as a quotient.</p>
<p>By construction the group generated by <span class="SimpleMath">a,b</span> is <span class="SimpleMath">Fi_{22}</span> or <span class="SimpleMath">2 × Fi_{22}</span> or <span class="SimpleMath">2.Fi_{22}</span>. Note that due to different seeds in the random number generator it is in fact possible at this stage that you have created a different group as displayed here! In our outcome, since <span class="SimpleMath">a</span> has even order, and both <span class="SimpleMath">b</span> and <span class="SimpleMath">ab</span> have odd order, we cannot possibly have <span class="SimpleMath">2 × Fi_{22}</span>; and by the presentation of <span class="SimpleMath">2.Fi_{22}</span> available in <a href="chapBib.html#biBAGR">[Wil]</a> the order of <span class="SimpleMath">ab^2</span> being 21 implies that we cannot possibly have <span class="SimpleMath">2.Fi_{22}</span> either. Hence we indeed have found standard generators of <span class="SimpleMath">Fi_{22}</span>. If we had hit one of the cases <span class="SimpleMath">2 × Fi_{22}</span> or <span class="SimpleMath">2.Fi_{22}</span>, we could just continue the above search until we find a subgroup <span class="SimpleMath">Fi_{22}</span>, or using the above order fingerprint we could easily modify the elements found to obtain standard generators of either <span class="SimpleMath">Fi_{22}</span> or <span class="SimpleMath">2.Fi_{22}</span>.</p>
<p>Now, standard generators of <span class="SimpleMath">U_2=M_{12}</span> in terms of standard generators of <span class="SimpleMath">Fi_{22}</span>, and generators of <span class="SimpleMath">U_1=L_2(11)</span> in terms of standard generators of <span class="SimpleMath">M_{12}</span> are accessible in the <strong class="pkg">atlasrep</strong> package. Note that if we had found a subgroup <span class="SimpleMath">2.Fi_{22}</span> above, since <span class="SimpleMath">M_{12}</span> lifts to a subgroup <span class="SimpleMath">2 × M_{12}</span> of <span class="SimpleMath">2.Fi_{22}</span>, it would again be easy to find standard generators of <span class="SimpleMath">M_{12}</span> from the generators of <span class="SimpleMath">M_{12}</span> or <span class="SimpleMath">2 × M_{12}</span> respectively provided by the <strong class="pkg">atlasrep</strong> package. Anyway, the next task is to find good quotient modules such that the helper subgroups have longish orbits on vectors. To this end, we restrict to <span class="SimpleMath">M_{12}</span> and compute the radical series of the restricted module.</p>
<p>We observe that there are faithful irreducible quotients of dimensions 10, 32, 44, and 144. Since we look for a quotient module such that <span class="SimpleMath">M_{12}</span> has many regular orbits on vectors, we ignore the irreducible module of dimension 10. We consider the one of dimension 32.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">i := Position(List(rad.db,Dimension),32);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">mgens32 := RepresentingMatrices(rad.db[i]);</span>
[ <immutable cmat 32x32 over GF(2,1)>, <immutable cmat 32x32 over GF(2,1)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">OrbitStatisticOnVectorSpace(mgens32,95040,30);</span>
Found length 95040, have now 24 orbits, average length: 93060
</pre></div>
<p>This is excellent indeed. Hence we pick a summand of dimension 32 in the first radical layer, and apply the associated base change to all the generators.</p>
<p>We consider the irreducible quotient module of <span class="SimpleMath">M_{12}</span> of dimension 32, whose restriction to <span class="SimpleMath">L_2(11)</span> turns out to be is semisimple. The irreducible quotients of dimension 10 are too small to have too many regular orbits, but the direct sum of two of them turns out to work fine.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">lgens32 := List(lgens,x->ExtractSubMatrix(x,[1..32],[1..32]));</span>
[ <cmat 32x32 over GF(2,1)>, <cmat 32x32 over GF(2,1)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">m := Module(lgens32);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">r := Chop(m);</span>
...
<span class="GAPprompt">gap></span> <span class="GAPinput">soc := SocleSeries(m,r.db);</span>
...
rec( issoclerecord := true,
db := [ <simple module of dim. 10 over GF(2) splitting field degree 2>,
<trivial module of dim. 1 over GF(2)>,
<abs. simple module of dim. 10 over GF(2)> ],
module := <reducible module of dim. 32 over GF(2)>,
basis := <cmat 32x32 over GF(2,1)>, ibasis := <cmat 32x32 over GF(2,1)>,
cfposs := [ [ [ 1 .. 10 ], [ 11 ], [ 12 ], [ 13 .. 22 ], [ 23 .. 32 ] ] ],
isotypes := [ [ 1, 2, 2, 3, 3 ] ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">i := Position(List(soc.db,x->[Dimension(x),DegreeOfSplittingField(x)]),</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [10,1]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">j := Position(soc.isotypes[1],i);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">l := Concatenation(soc.cfposs[1]{[j,j+1]});;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">lgens32 := List(lgens32,x->soc.basis*x*soc.ibasis);</span>
[ <cmat 32x32 over GF(2,1)>, <cmat 32x32 over GF(2,1)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">lgens20 := List(lgens32,x->ExtractSubMatrix(x,l,l));</span>
[ <cmat 20x20 over GF(2,1)>, <cmat 20x20 over GF(2,1)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">OrbitStatisticOnVectorSpace(lgens20,660,30);</span>
Found length 660, have now 4401 orbits, average length: 598
</pre></div>
<p>We apply the appropriate base change to all the generators.</p>
<p>Now we are prepared to actually run the orbit enumeration. Note that for the following memory estimates we assume that we are running things on a 64bit machine. On a 32bit machine the overhead is smaller. We expect that all the vectors in the smaller quotient of dimension 20 will enumerated; needing 3 bytes per vector for the actual data which results in 40 bytes including overhead, this amounts to <span class="SimpleMath">40 ⋅ 2^20 ≈ 42</span> MB of memory space. Since <span class="SimpleMath">2^32 ≈ 4.3 ⋅ 10^9</span> is less than <span class="SimpleMath">[B: E]</span>, we also expect that the larger quotient of dimension 32 will be enumerated completely, by <span class="SimpleMath">L_2(11)</span>-orbits; needing 4 bytes per vector for the actual data resulting in 40 bytes including overhead, and assuming a saving factor as suggested by <code class="code">OrbitStatisticOnVectorSpace</code> yields an estimated memory requirement of <span class="SimpleMath">40 ⋅ 2^32 ⋅ 1/598 ≈ 287</span> MB. For the large <span class="SimpleMath">B</span>-orbit, being enumerated by <span class="SimpleMath">M_{12}</span>-orbits, we similarly get an estimated memory requirement of <span class="SimpleMath">584 ⋅ [B: E] ⋅ 1/93060 ≈ 85</span> MB.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">setup := OrbitBySuborbitBootstrapForVectors(</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [lgens,mgens,bgens],[lpermgens,mpermgens,[(),()]],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [660,95040,4154781481226426191177580544000000],[20,32],rec());</span>
#I Calculating stabilizer chain for whole group...
#I Trying smaller degree permutation representation for U2...
#I Trying smaller degree permutation representation for U1...
#I Enumerating permutation base images of U_1...
#I Looking for U1-coset-recognising U2-orbit in factor space...
#I OrbitBySuborbit found 100% of a U2-orbit of size 95 040
#I Found 144 suborbits (need 144)
<setup for an orbit-by-suborbit enumeration, k=2>
<span class="GAPprompt">gap></span> <span class="GAPinput">o := OrbitBySuborbitKnownSize(setup,v,3,3,2,51,13571955000);</span>
#I OrbitBySuborbit found 100% of a U2-orbit of size 1
#I OrbitBySuborbit found 100% of a U2-orbit of size 23 760
...
#I OrbitBySuborbit found 51% of a U3-orbit of size 13 571 955 000
<orbit-by-suborbit size=13571955000 stabsize=306129918735099415756800 (
51%) saving factor=56404>
</pre></div>
<p>Indeed the saving factor actually achieved is smaller than the best possible estimate given above, but it still has the same order of magnitude.</p>
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 ist noch experimentell.