<html><head><title>[Polenta] 2 Methods for matrix groups</title></head> <body text="#000000" bgcolor="#ffffff"> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href ="CHAP003.htm">Next</a>] [<a href = "theindex.htm">Index</a>] <h1>2 Methods for matrix groups</h1><p> <P> <H3>Sections</H3> <oL> <li> <A HREF="CHAP002.htm#SECT001">Polycyclic presentations of matrix groups</a> <li> <A HREF="CHAP002.htm#SECT002">Module series</a> <li> <A HREF="CHAP002.htm#SECT003">Subgroups</a> <li> <A HREF="CHAP002.htm#SECT004">Examples</a> </ol><p> <p> <p> <h2><a name="SECT001">2.1 Polycyclic presentations of matrix groups</a></h2> <p><p> Groups defined by polycyclic presentations are called PcpGroups in <font face="Gill Sans,Helvetica,Arial">GAP</font>. We refer to the Polycyclic manual <a href="biblio.htm#Polycyclic"><cite>Polycyclic</cite></a> for further background. <p> Suppose that a collection <var>X</var> of matrices of <var>GL(d,R)</var> is given, where the ring <var>R</var> is either <var><font face="helvetica,arial">Q</font>,<font face="helvetica,arial">Z</font></var> or a finite field. Let <var>G= < X ></var>. If the group <var>G</var> is polycyclic, then the following functions determine a PcpGroup isomorphic to <var>G</var>. <p> <a name = "SSEC001.1"></a> <li><code>PcpGroupByMatGroup( </code><var>G</var><code> )</code> <p> <var>G</var> is a subgroup of <var>GL(d,R)</var> where <var>R=<font face="helvetica,arial">Q</font>,<font face="helvetica,arial">Z</font></var> or <var><font face="helvetica,arial">F</font><sub>q</sub></var>. If <var>G</var> is polycyclic, then this function determines a PcpGroup isomorphic to <var>G</var>. If <var>G</var> is not polycyclic, then this function returns 'fail'. <p> <a name = "SSEC001.2"></a> <li><code>IsomorphismPcpGroup( </code><var>G</var><code> )</code> <p> <var>G</var> is a subgroup of <var>GL(d,R)</var> where <var>R=<font face="helvetica,arial">Q</font>,<font face="helvetica,arial">Z</font></var> or <var><font face="helvetica,arial">F</font><sub>q</sub></var>. If <var>G</var> is polycyclic, then this function determines an isomorphism onto a PcpGroup. If <var>G</var> is not polycyclic, then this function returns 'fail'. <p> Note that the method <code>IsomorphismPcpGroup</code>, installed in this package, cannot be applied directly to a group given by the function <code>AlmostCrystallographicGroup</code>. Please use <code>POL_AlmostCrystallographicGroup</code> (with the same parameters as <code>AlmostCrystallographicGroup</code>) instead. <p> <a name = "SSEC001.3"></a> <li><code>Image( </code><var>map</var><code> )</code> <a name = "SSEC001.3"></a> <li><code>ImageElm( </code><var>map</var><code>, </code><var>elm</var><code> )</code> <a name = "SSEC001.3"></a> <li><code>ImagesSet( </code><var>map</var><code>, </code><var>elms</var><code> )</code> <a name = "SSEC001.3"></a> <li><code>PreImage( </code><var>map</var><code>, </code><var>pcpelm</var><code> )</code> <p> Here <var>map</var> is an isomorphism from a polycyclic matrix group <var>G</var> onto a PcpGroup <var>H</var> calculated by <code>IsomorphismPcpGroup(</code><var>G</var><code>)</code>. These functions can be used to compute with such an isomorphism. If the input <var>elm</var> is an element of <var>G</var>, then the function <code>ImageElm</code> can be used to compute the image of <var>elm</var> under <var>map</var>. If <var>elm</var> is not contained in <var>G</var> then the function <code>ImageElm</code> returns 'fail'. The input <var>pcpelm</var> is an element of <var>H</var>. <p> <a name = "SSEC001.4"></a> <li><code>IsSolvableGroup( </code><var>G</var><code> )</code> <p> <var>G</var> is a subgroup of <var>GL(d,R)</var> where <var>R=<font face="helvetica,arial">Q</font>,<font face="helvetica,arial">Z</font></var> or <var><font face="helvetica,arial">F</font><sub>q</sub></var>. This function tests if <var>G</var> is solvable and returns 'true' or 'false'. <p> <a name = "SSEC001.5"></a> <li><code>IsTriangularizableMatGroup( </code><var>G</var><code> )</code> <p> <var>G</var> is a subgroup of <var>GL(d,<font face="helvetica,arial">Q</font>)</var>. This function tests if <var>G</var> is triangularizable and returns 'true' or 'false'. <p> <a name = "SSEC001.6"></a> <li><code>IsPolycyclicMatGroup( </code><var>G</var><code> )</code> <p> <var>G</var> is a subgroup of <var>GL(d,R)</var> where <var>R=<font face="helvetica,arial">Q</font>,<font face="helvetica,arial">Z</font></var> or <var><font face="helvetica,arial">F</font><sub>q</sub></var>. This function tests if <var>G</var> is polycyclic and returns 'true' or 'false'. <p> <p> <h2><a name="SECT002">2.2 Module series</a></h2> <p><p> Let <var>G</var> be a finitely generated solvable subgroup of <var>GL(d,<font face="helvetica,arial">Q</font>)</var>. The vector space <var><font face="helvetica,arial">Q</font><sup>d</sup></var> is a module for the algebra <var><font face="helvetica,arial">Q</font>[G]</var>. The following functions provide the possibility to compute certain module series of <var><font face="helvetica,arial">Q</font><sup>d</sup></var>. Recall that the radical <var>Rad<sub>G</sub>(<font face="helvetica,arial">Q</font><sup>d</sup>)</var> is defined to be the intersection of maximal <var><font face="helvetica,arial">Q</font>[G]</var>-submodules of <var><font face="helvetica,arial">Q</font><sup>d</sup></var>. Also recall that the radical series <p><var> 0=R<sub>n</sub> < R<sub>n-1</sub> < ...< R<sub>1</sub> < R<sub>0</sub>=<font face="helvetica,arial">Q</font><sup>d</sup> <p></var> is defined by <var>R<sub>i+1</sub>:= Rad<sub>G</sub>(R<sub>i</sub>)</var>. <p> <a name = "SSEC002.1"></a> <li><code>RadicalSeriesSolvableMatGroup( </code><var>G</var><code> )</code> <p> This function returns a radical series for the <var><font face="helvetica,arial">Q</font>[G]</var>-module <var><font face="helvetica,arial">Q</font><sup>d</sup></var>, where <var>G</var> is a solvable subgroup of <var>GL(d,<font face="helvetica,arial">Q</font>)</var>. <p> A radical series of <var><font face="helvetica,arial">Q</font><sup>d</sup></var> can be refined to a homogeneous series. <p> <a name = "SSEC002.2"></a> <li><code>HomogeneousSeriesAbelianMatGroup( </code><var>G</var><code> )</code> <p> A module is said to be homogeneous if it is the direct sum of pairwise irreducible isomorphic submodules. A homogeneous series of a module is a submodule series such that the factors are homogeneous. This function returns a homogeneous series for the <var><font face="helvetica,arial">Q</font>[G]</var>-module <var><font face="helvetica,arial">Q</font><sup>d</sup></var>, where <var>G</var> is an abelian subgroup of <var>GL(d,<font face="helvetica,arial">Q</font>)</var>. <p> <a name = "SSEC002.3"></a> <li><code>HomogeneousSeriesTriangularizableMatGroup( </code><var>G</var><code> )</code> <p> A module is said to be homogeneous if it is the direct sum of pairwise irreducible isomorphic submodules. A homogeneous series of a module is a submodule series such that the factors are homogeneous. This function returns a homogeneous series for the <var><font face="helvetica,arial">Q</font>[G]</var>-module <var><font face="helvetica,arial">Q</font><sup>d</sup></var>, where <var>G</var> is a triangularizable subgroup of <var>GL(d,<font face="helvetica,arial">Q</font>)</var>. <p> A homogeneous series can be refined to a composition series. <p> <a name = "SSEC002.4"></a> <li><code>CompositionSeriesAbelianMatGroup( </code><var>G</var><code> )</code> <p> A composition series of a module is a submodule series such that the factors are irreducible. This function returns a composition series for the <var><font face="helvetica,arial">Q</font>[G]</var>-module <var><font face="helvetica,arial">Q</font><sup>d</sup></var>, where <var>G</var> is an abelian subgroup of <var>GL(d,<font face="helvetica,arial">Q</font>)</var>. <p> <a name = "SSEC002.5"></a> <li><code>CompositionSeriesTriangularizableMatGroup( </code><var>G</var><code> )</code> <p> A composition series of a module is a submodule series such that the factors are irreducible. This function returns a composition series for the <var><font face="helvetica,arial">Q</font>[G]</var>-module <var><font face="helvetica,arial">Q</font><sup>d</sup></var>, where <var>G</var> is a triangularizable subgroup of <var>GL(d,<font face="helvetica,arial">Q</font>)</var>. <p> <p> <h2><a name="SECT003">2.3 Subgroups</a></h2> <p><p> <a name = "SSEC003.1"></a> <li><code>SubgroupsUnipotentByAbelianByFinite( </code><var>G</var><code> )</code> <p> <var>G</var> is a subgroup of <var>GL(d,R)</var> where <var>R=<font face="helvetica,arial">Q</font></var> or <var><font face="helvetica,arial">Z</font></var>. If <var>G</var> is polycyclic, then this function returns a record containing two normal subgroups <var>T</var> and <var>U</var> of <var>G</var>. The group <var>T</var> is unipotent-by-abelian (and thus triangularizable) and of finite index in <var>G</var>. The group <var>U</var> is unipotent and is such that <var>T/U</var> is abelian. If <var>G</var> is not polycyclic, then the algorithm returns 'fail'. <p> <p> <h2><a name="SECT004">2.4 Examples</a></h2> <p><p> <a name = "SSEC004.1"></a> <li><code>PolExamples( </code><var>l</var><code> )</code> <p> Returns some examples for polycyclic rational matrix groups, where <var>l</var> is an integer between 1 and 24. These can be used to test the functions in this package. Some of the properties of the examples are summarised in the following table. <p> <pre> PolExamples number generators subgroup of Hirsch length 1 3 GL(4,Z) 6 2 2 GL(5,Z) 6 3 2 GL(4,Q) 4 4 2 GL(5,Q) 6 5 9 GL(16,Z) 3 6 6 GL(4,Z) 3 7 6 GL(4,Z) 3 8 7 GL(4,Z) 3 9 5 GL(4,Q) 3 10 4 GL(4,Q) 3 11 5 GL(4,Q) 3 12 5 GL(4,Q) 3 13 5 GL(5,Q) 4 14 6 GL(5,Q) 4 15 6 GL(5,Q) 4 16 5 GL(5,Q) 4 17 5 GL(5,Q) 4 18 5 GL(5,Q) 4 19 5 GL(5,Q) 4 20 7 GL(16,Z) 3 21 5 GL(16,Q) 3 22 4 GL(16,Q) 3 23 5 GL(16,Q) 3 24 5 GL(16,Q) 3 </pre> <p> <p> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href ="CHAP003.htm">Next</a>] [<a href = "theindex.htm">Index</a>] <P> <address>Polenta manual<br>June 2007 </address></body></html>