<html><head><title>[Polycyclic] 9 Matrix Representations</title></head> <body text="#000000" bgcolor="#ffffff"> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP008.htm">Previous</a>] [<a href = "theindex.htm">Index</a>] <h1>9 Matrix Representations</h1><p> <P> <H3>Sections</H3> <oL> <li> <A HREF="CHAP009.htm#SECT001">Unitriangular matrix groups</a> <li> <A HREF="CHAP009.htm#SECT002">Upper unitriangular matrix groups</a> </ol><p> <p> This chapter describes functions which compute with matrix representations for pcp-groups. So far the routines in this package are only able to compute matrix representations for torsion-free nilpotent groups. <p> <p> <h2><a name="SECT001">9.1 Unitriangular matrix groups</a></h2> <p><p> <a name = "SSEC001.1"></a> <li><code>UnitriangularMatrixRepresentation( G )</code> <p> computes a faithful representation of a torsion-free nilpotent group <var>G</var> as unipotent lowertriangular matrices over the integers. The pc-presentation for <var>G</var> must not contain any power relations. The algorithm is described in <a href="biblio.htm#dGN02"><cite>dGN02</cite></a>. <p> <a name = "SSEC001.2"></a> <li><code>IsMatrixRepresentation( </code><var>G</var><code>, </code><var>matrices</var><code> )</code> <p> checks if the map defined by maping the i-th generator of the pcp-group <var>G</var> to the i-th matrix of <var>matrices</var> defines a homomorphism. <p> <p> <h2><a name="SECT002">9.2 Upper unitriangular matrix groups</a></h2> <p><p> We call a matrix upper unitriangular if it is an upper triangular matrix with ones on the main diagonal. The weight of an upper unitriangular matrix is the number of diagonals above the main diagonal that contain zeroes only. <p> The subgroup of all upper unitriangular matrices of <var>GL(n,<font face="helvetica,arial">Z</font>)</var> is torsion-free nilpotent. The k-th term of its lower central series is the set of all matrices of weight <var>k-1</var>. The <var><font face="helvetica,arial">Z</font></var>-rank of the k-th term of the lower central series modulo the <var>(k+1)</var>-th term is <var>n-k</var>. <p> <a name = "SSEC002.1"></a> <li><code>IsomorphismUpperUnitriMatGroupPcpGroup( </code><var>G</var><code> )</code> <p> takes a group <var>G</var> generated by upper unitriangular matrices over the integers and computes a polycylic presentation for the group. The function returns an isomorphism from the matrix group to the pcp group. Note that a group generated by upper unitriangular matrices is necessarily torsion-free nilpotent. <p> <a name = "SSEC002.2"></a> <li><code>SiftUpperUnitriMatGroup( </code><var>G</var><code> )</code> <p> takes a group <var>G</var> generated by upper unitriangular matrices over the integers and returns a recursive data structure <var>L</var> with the following properties: <var>L</var> contains a polycyclic generating sequence for <var>G</var>, using <var>L</var> one can decide if a given upper unitriangular matrix is contained in <var>G</var>, a given element of <var>G</var> can be written as a word in the polycyclic generating sequence. <var>L</var> is a representation of a chain of subgroups of <var>G</var> refining the lower centrals series of <var>G</var>.. It contains for each subgroup in the chain a minimal generating set. <p> <a name = "SSEC002.3"></a> <li><code>RanksLevels( </code><var>L</var><code> )</code> <p> takes the data structure returned by <code>SiftUpperUnitriMat</code> and prints the <font face="helvetica,arial">Z</font>-rank of each the subgroup in <var>L</var>. <p> <a name = "SSEC002.4"></a> <li><code>MakeNewLevel( </code><var>m</var><code> )</code> <p> creates one level of the data structure returned by <code>SiftUpperUnitriMat</code> and initialises it with weight <var>m</var>. <p> <a name = "SSEC002.5"></a> <li><code>SiftUpperUnitriMat( gens, level, M )</code> <p> takes the generators <var>gens</var> of an upper unitriangular group, the data structure returned <var>level</var> by <code>SiftUpperUnitriMat</code> and another upper unitriangular matrix <var>M</var>. It sift <var>M</var> through <var>level</var> and adds <var>M</var> at the appropriate place if <var>M</var> is not contained in the subgroup represented by <var>level</var>. <p> The function <code>SiftUpperUnitriMatGroup</code> illustrates the use of <code>SiftUpperUnitriMat</code>. <pre> InstallGlobalFunction( "SiftUpperUnitriMatGroup", function( G ) local firstlevel, g; firstlevel := MakeNewLevel( 0 ); for g in GeneratorsOfGroup(G) do SiftUpperUnitriMat( GeneratorsOfGroup(G), firstlevel, g ); od; return firstlevel; end ); </pre> <p> <a name = "SSEC002.6"></a> <li><code>DecomposeUpperUnitriMat( </code><var>level</var><code>, </code><var>M</var><code> )</code> <p> takes the data structure <var>level</var> returned by <code>SiftUpperUnitriMatGroup</code> and a upper unitriangular matrix <var>M</var> and decomposes <var>M</var> into a word in the polycyclic generating sequence of <var>level</var>. <p> <p> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP008.htm">Previous</a>] [<a href = "theindex.htm">Index</a>] <P> <address>Polycyclic manual<br>Februar 2009 </address></body></html>