<p>This chapter is intended for advanced users. It explains the provided search methods and the interface to the search graph structure <code class="code">LinsGraph</code>.</p>
<p>All search methods in <strong class="pkg">LINS</strong> return a <code class="code">LinsGraph</code> encoding a partial normal subgroup lattice of a finitely presented group <span class="SimpleMath">\(G\)</span>. A <code class="code">LinsGraph</code> is a graph, where each node is a <code class="code">LinsNode</code> that contains a normal subgroup <span class="SimpleMath">\(H\)</span> of <span class="SimpleMath">\(G\)</span> and pointers to the minimal <span class="SimpleMath">\(G\)</span>-normal super/sub-groups of <span class="SimpleMath">\(H\)</span>, i.e. its neighbours in the graph. The directed edges of the graph are therefore encoded directly into the nodes.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ List</code>( <var class="Arg">gr</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns a list of all <code class="code">LinsNodes</code> in the graph <var class="Arg">gr</var>.</p>
<p>The nodes are sorted by index in increasing order, e.g. the root node is at the first position. In order to get a list containing only the normal subgroups that the search graph attempted to find, use <code class="func">ComputedNormalSubgroups</code> (<a href="chap2_mj.html#X7C5BDEAA86131918"><span class="RefLink">2.1-2</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ComputedNormalSubgroups</code>( <var class="Arg">gr</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the normal subgroups that the search graph attempted to find.</p>
<p>If the <code class="code">ComputedNormalSubgroups</code> component of the graph is not set, this defaults to a call of <code class="func">List</code> (<a href="chap2_mj.html#X805D91168165F914"><span class="RefLink">2.1-1</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LinsRoot</code>( <var class="Arg">gr</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the root node of the graph.</p>
<p>If the search was started in the finitely presented group <span class="SimpleMath">\(G\)</span>, this will return the <code class="code">LinsNode</code> that contains <span class="SimpleMath">\(G\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IndexBound</code>( <var class="Arg">gr</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the index bound for the search in <var class="Arg">gr</var>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsomorphismFpGroup</code>( <var class="Arg">gr</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the isomorphism from the original group of the search onto the fp-group contained in the root.</p>
<p>A <code class="code">LinsNode</code> is a part of the search graph structure <code class="code">LinsGraph</code> (see <a href="chap2_mj.html#X7FE2171385FFDCFA"><span class="RefLink">2.1</span></a>). As such, all methods are with respect to the search graph, where the node is contained in.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Grp</code>( <var class="Arg">rH</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Returns the group contained in the node.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Index</code>( <var class="Arg">rH</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Let <span class="SimpleMath">\(G\)</span> be the group contained in the root node and <span class="SimpleMath">\(H\)</span> be the <span class="SimpleMath">\(G\)</span>-normal subgroup contained in <var class="Arg">rH</var>.</p>
<p>Returns the index <span class="SimpleMath">\([G : H]\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LinsNodeMinimalSupergroups</code>( <var class="Arg">rH</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Let <span class="SimpleMath">\(G\)</span> be the group contained in the root node and <span class="SimpleMath">\(H\)</span> be the <span class="SimpleMath">\(G\)</span>-normal subgroup contained in <var class="Arg">rH</var>.</p>
<p>Returns a list of all <code class="code">LinsNodes</code> containing minimal <span class="SimpleMath">\(G\)</span>-normal supergroups of <span class="SimpleMath">\(H\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LinsNodeMinimalSubgroups</code>( <var class="Arg">rH</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Let <span class="SimpleMath">\(G\)</span> be the group contained in the root node and <span class="SimpleMath">\(H\)</span> be the <span class="SimpleMath">\(G\)</span>-normal subgroup contained in <var class="Arg">rH</var>.</p>
<p>Returns a list of all <code class="code">LinsNodes</code> containing minimal <span class="SimpleMath">\(G\)</span>-normal subgroups of <span class="SimpleMath">\(H\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LinsNodeSupergroups</code>( <var class="Arg">rH</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Let <span class="SimpleMath">\(G\)</span> be the group contained in the root node and <span class="SimpleMath">\(H\)</span> be the <span class="SimpleMath">\(G\)</span>-normal subgroup contained in <var class="Arg">rH</var>.</p>
<p>Returns a list of all <code class="code">LinsNodes</code> containing <span class="SimpleMath">\(G\)</span>-normal supergroups of <span class="SimpleMath">\(H\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LinsNodeSubgroups</code>( <var class="Arg">rH</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Let <span class="SimpleMath">\(G\)</span> be the group contained in the root node and <span class="SimpleMath">\(H\)</span> be the <span class="SimpleMath">\(G\)</span>-normal subgroup contained in <var class="Arg">rH</var>.</p>
<p>Returns a list of all <code class="code">LinsNodes</code> containing <span class="SimpleMath">\(G\)</span>-normal subgroups of <span class="SimpleMath">\(H\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LowIndexNormalSubgroupsSearch</code>( <var class="Arg">G</var>, <var class="Arg">n</var>[, <var class="Arg">opts</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Given a finitely presented group <var class="Arg">G</var> and some index bound <var class="Arg">n</var>, this will start a search in the normal subgroup lattice of <var class="Arg">G</var> up to index <var class="Arg">n</var>.</p>
<p>The optional argument <var class="Arg">opts</var> must be a record containing valid search options (see <a href="chap3_mj.html#X7E1489817AF4CDDB"><span class="RefLink">3.1</span></a>).</p>
<p>If the optional argument <var class="Arg">opts</var> is not given, the search will be started with the default options, i.e. it will terminate once all normal subgroups of <var class="Arg">G</var> with index at most <var class="Arg">n</var> are found.</p>
<p>It is possible to call the function with a group <var class="Arg">G</var> that is not an fp-group. The group will be automatically replaced with an fp-group (see <code class="func">IsomorphismFpGroup</code> (<a href="chap2_mj.html#X828E91E67C410968"><span class="RefLink">2.1-6</span></a>)).</p>
<p>Returns: <code class="code">LinsGraph</code> encoding a partial normal subgroup lattice of <var class="Arg">G</var></p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LowIndexNormalSubgroupsSearchForAll</code>( <var class="Arg">G</var>, <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Given a finitely presented group <var class="Arg">G</var> and some index bound <var class="Arg">n</var>, this will compute all normal subgroups of <var class="Arg">G</var> with index at most <var class="Arg">n</var>.</p>
<p>This is a synonym for calling <code class="func">LowIndexNormalSubgroupsSearch</code> (<a href="chap2_mj.html#X8064963E80A5D83F"><span class="RefLink">2.3-1</span></a>) without any options.</p>
<p>It is possible to call the function with a group <var class="Arg">G</var> that is not an fp-group. The group will be automatically replaced with an fp-group (see <code class="func">IsomorphismFpGroup</code> (<a href="chap2_mj.html#X828E91E67C410968"><span class="RefLink">2.1-6</span></a>)).</p>
<p>Returns: <code class="code">LinsGraph</code> encoding a partial normal subgroup lattice of <var class="Arg">G</var></p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LowIndexNormalSubgroupsSearchForIndex</code>( <var class="Arg">G</var>, <var class="Arg">n</var>, <var class="Arg">l</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Given a finitely presented group <var class="Arg">G</var>, some index <var class="Arg">n</var> and <var class="Arg">l</var> being a positive integer or <code class="code">infinity</code>, this will attempt to find <var class="Arg">l</var> normal subgroups of <var class="Arg">G</var> with index <var class="Arg">n</var>.</p>
<p>In particular, if <var class="Arg">l</var> is <code class="code">infinity</code>, all normal subgroups of <var class="Arg">G</var> with index <var class="Arg">n</var> will be computed.</p>
<p>Furthermore, if <var class="Arg">l</var> is a positive integer and the <code class="code">ComputedNormalSubgroups</code> of the graph has less than <var class="Arg">l</var> nodes, then all normal subgroups of <var class="Arg">G</var> with index <var class="Arg">n</var> were computed.</p>
<p>It is possible to call the function with a group <var class="Arg">G</var> that is not an fp-group. The group will be automatically replaced with an fp-group (see <code class="func">IsomorphismFpGroup</code> (<a href="chap2_mj.html#X828E91E67C410968"><span class="RefLink">2.1-6</span></a>)).</p>
<p>Returns: <code class="code">LinsGraph</code> encoding a partial normal subgroup lattice of <var class="Arg">G</var></p>
<p>In this section we present example sessions which demonstrate how to use the advanced search methods provided by <strong class="pkg">LINS</strong>. For this we revise the examples from the introduction as well as include new ones.</p>
<h5>2.4-1 <span class="Heading">Revised Example : all normal subgroups up to index <span class="SimpleMath">\(n\)</span></span></h5>
<p>We compute all normal subgroups in <span class="SimpleMath">\(D_{50}\)</span>, the dihedral group of size <span class="SimpleMath">\(50\)</span>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">G := DihedralGroup(50);</span>
<pc group of size 50 with 3 generators>
</pre></div>
<p>The search algorithm automatically translates the group into a finitely presented group via a call to <code class="code">IsomorphismFpGroup</code>. <br /> The isomorphism is stored inside the lins graph.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := LowIndexNormalSubgroupsSearchForAll(G, 50);</span>
<lins graph contains 4 normal subgroups up to index 50>
<span class="GAPprompt">gap></span> <span class="GAPinput">r := LinsRoot(gr);</span>
<lins node of index 1>
<span class="GAPprompt">gap></span> <span class="GAPinput">H := Grp(r);</span>
<fp group of size 50 on the generators [ F1, F2, F3 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">Iso := IsomorphismFpGroup(gr);</span>
[ f1, f2, f3 ] -> [ F1, F2, F3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Source(Iso) = G;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Range(Iso) = H;</span>
true
</pre></div>
<p>In order to get all nodes from the search graph, we need to use <code class="code">List</code>. As expected, the algorithm finds <span class="SimpleMath">\(D_{50}, C_{25}, C_5\)</span> and the trivial group.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">L := List(gr);</span>
[ <lins node of index 1>, <lins node of index 2>, <lins node of index 10>,
<lins node of index 50> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsoTypes := List(L, node -> StructureDescription(Grp(node)));</span>
[ "D50", "C25", "C5", "1" ]
</pre></div>
<h5>2.4-2 <span class="Heading">Revised Example : all normal subgroups of index <span class="SimpleMath">\(n\)</span></span></h5>
<p>We compute all normal subgroups of index <span class="SimpleMath">\(5^2 = 25\)</span> in <span class="SimpleMath">\(C_5^4\)</span>, the direct product of <span class="SimpleMath">\(4\)</span> copies of the cyclic group of order <span class="SimpleMath">\(5\)</span>:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">G := ElementaryAbelianGroup(5^4);</span>
<pc group of size 625 with 4 generators>
</pre></div>
<p>Again, the search algorithm automatically translates the group into a finitely presented group via a call to <code class="code">IsomorphismFpGroup</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := LowIndexNormalSubgroupsSearchForIndex(G, 5 ^ 2, infinity);</span>
<lins graph contains 963 normal subgroups up to index 25>
</pre></div>
<p>Now we are not interested in all normal subgroups that the search graph considered, but only in those of index <span class="SimpleMath">\(25\)</span>. Thus we need to use <code class="code">ComputedNormalSubgroups</code>. For a prime <span class="SimpleMath">\(p\)</span>, and integers <span class="SimpleMath">\(d, s \in \mathbb{N}\)</span>, the number of subgroups of order <span class="SimpleMath">\(p^s\)</span> of an elementary abelian <span class="SimpleMath">\(p\)</span>-group of order <span class="SimpleMath">\(p^d\)</span> is exactly</p>
<p>Thus we expect to find <span class="SimpleMath">\(( (5^4-1) \cdot (5^4-5) ) / ( (5^2 - 1) \cdot (5^2 - 5) ) = 806\)</span> normal subgroups of index <span class="SimpleMath">\(25\)</span>. <br /> Furthermore, all subgroups need to be of the isomorphism type <span class="SimpleMath">\(C_5^2\)</span>.</p>
<h5>2.4-3 <span class="Heading">Example : a normal subgroup of index <span class="SimpleMath">\(n\)</span></span></h5>
<p>We compute a normal subgroup of index <span class="SimpleMath">\(3 \cdot 5 = 15\)</span> in <span class="SimpleMath">\(C_3 \times C_3 \times C_4 \times C_5\)</span>, a direct product of cyclic groups:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">G := AbelianGroup([3, 3, 4, 5]);</span>
<pc group of size 180 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := LowIndexNormalSubgroupsSearchForIndex(G, 15, 1);</span>
<lins graph contains 7 normal subgroups up to index 15>
</pre></div>
<p>We use <code class="code">ComputedNormalSubgroups</code> in order to get the normal subgroup of index <span class="SimpleMath">\(15\)</span>. As expected, the algorithm finds a group of the isomorphism type <span class="SimpleMath">\(C_{12} = C_3 \times C_4\)</span>.</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.