  
  [1X9 [33X[0;0YMatrix Representations[133X[101X
  
  [33X[0;0YThis  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.[133X
  
  
  [1X9.1 [33X[0;0YUnitriangular matrix groups[133X[101X
  
  [1X9.1-1 UnitriangularMatrixRepresentation[101X
  
  [29X[2XUnitriangularMatrixRepresentation[102X( [3XG[103X ) [32X operation
  
  [33X[0;0Ycomputes  a  faithful  representation of a torsion-free nilpotent group [3XG[103X as
  unipotent  lower  triangular matrices over the integers. The pc-presentation
  for  [3XG[103X  must  not contain any power relations. The algorithm is described in
  [GN02].[133X
  
  [1X9.1-2 IsMatrixRepresentation[101X
  
  [29X[2XIsMatrixRepresentation[102X( [3XG[103X, [3Xmatrices[103X ) [32X function
  
  [33X[0;0Ychecks  if  the map defined by mapping the [22Xi[122X-th generator of the pcp-group [3XG[103X
  to the [22Xi[122X-th matrix of [3Xmatrices[103X defines a homomorphism.[133X
  
  
  [1X9.2 [33X[0;0YUpper unitriangular matrix groups[133X[101X
  
  [33X[0;0YWe  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.[133X
  
  [33X[0;0YThe  subgroup of all upper unitriangular matrices of [22XGL(n,ℤ)[122X is torsion-free
  nilpotent.  The  [22Xk[122X-th  term  of  its  lower central series is the set of all
  matrices  of  weight  [22Xk-1[122X.  The [22Xℤ[122X-rank of the [22Xk[122X-th term of the lower central
  series modulo the [22X(k+1)[122X-th term is [22Xn-k[122X.[133X
  
  [1X9.2-1 IsomorphismUpperUnitriMatGroupPcpGroup[101X
  
  [29X[2XIsomorphismUpperUnitriMatGroupPcpGroup[102X( [3XG[103X ) [32X function
  
  [33X[0;0Ytakes  a group [3XG[103X 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.[133X
  
  [1X9.2-2 SiftUpperUnitriMatGroup[101X
  
  [29X[2XSiftUpperUnitriMatGroup[102X( [3XG[103X ) [32X function
  
  [33X[0;0Ytakes  a group [3XG[103X generated by upper unitriangular matrices over the integers
  and  returns  a  recursive data structure [3XL[103X with the following properties: [3XL[103X
  contains a polycyclic generating sequence for [3XG[103X, using [3XL[103X one can decide if a
  given upper unitriangular matrix is contained in [3XG[103X, a given element of [3XG[103X can
  be  written  as  a  word  in  the  polycyclic  generating  sequence.  [3XL[103X is a
  representation  of  a  chain  of  subgroups of [3XG[103X refining the lower centrals
  series  of  [3XG[103X..  It  contains  for  each  subgroup  in  the  chain a minimal
  generating set.[133X
  
  [1X9.2-3 RanksLevels[101X
  
  [29X[2XRanksLevels[102X( [3XL[103X ) [32X function
  
  [33X[0;0Ytakes  the  data  structure  returned  by  [10XSiftUpperUnitriMat[110X and prints the
  [22Xℤ[122X-rank of each the subgroup in [3XL[103X.[133X
  
  [1X9.2-4 MakeNewLevel[101X
  
  [29X[2XMakeNewLevel[102X( [3Xm[103X ) [32X function
  
  [33X[0;0Ycreates  one  level of the data structure returned by [10XSiftUpperUnitriMat[110X and
  initialises it with weight [3Xm[103X.[133X
  
  [1X9.2-5 SiftUpperUnitriMat[101X
  
  [29X[2XSiftUpperUnitriMat[102X( [3Xgens[103X, [3Xlevel[103X, [3XM[103X ) [32X function
  
  [33X[0;0Ytakes  the  generators  [3Xgens[103X  of  an  upper  unitriangular  group,  the data
  structure   returned   [3Xlevel[103X   by   [10XSiftUpperUnitriMat[110X   and  another  upper
  unitriangular  matrix  [3XM[103X.  It  sift  [3XM[103X  through  [3Xlevel[103X  and  adds  [3XM[103X  at the
  appropriate  place  if  [3XM[103X  is  not  contained in the subgroup represented by
  [3Xlevel[103X.[133X
  
  [33X[0;0YThe    function    [10XSiftUpperUnitriMatGroup[110X    illustrates    the    use   of
  [10XSiftUpperUnitriMat[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28XInstallGlobalFunction( "SiftUpperUnitriMatGroup", function( G )[128X[104X
    [4X[28X    local   firstlevel,  g;[128X[104X
    [4X[28X[128X[104X
    [4X[28X    firstlevel := MakeNewLevel( 0 );[128X[104X
    [4X[28X    for g in GeneratorsOfGroup(G) do[128X[104X
    [4X[28X        SiftUpperUnitriMat( GeneratorsOfGroup(G), firstlevel, g );[128X[104X
    [4X[28X    od;[128X[104X
    [4X[28X    return firstlevel;[128X[104X
    [4X[28Xend );[128X[104X
  [4X[32X[104X
  
  [1X9.2-6 DecomposeUpperUnitriMat[101X
  
  [29X[2XDecomposeUpperUnitriMat[102X( [3Xlevel[103X, [3XM[103X ) [32X function
  
  [33X[0;0Ytakes  the  data  structure  [3Xlevel[103X returned by [10XSiftUpperUnitriMatGroup[110X and a
  upper  unitriangular matrix [3XM[103X and decomposes [3XM[103X into a word in the polycyclic
  generating sequence of [3Xlevel[103X.[133X
  
