Goto Chapter: Top 1 2 3 4 5 6 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

2 Tables
 2.1 Nilpotent tables
 2.2 Algebras in the GAP sense
 2.3 Tables for the Modular Isomorphism Problem

2 Tables

Finite dimensional algebras can be described by structure constants tables. For nilpotent algebras it is not necessary to store a full structure constants table. To use this feature, we introduce nilpotent structure constants tables or just nilpotent tables for short. These are used heavily throughout the package.

2.1 Nilpotent tables

Let \(A\) be a finite-dimensional nilpotent associative algebra over a field \(F\). Let \((b_1, \ldots, b_d)\) be a weighted basis of \(A\); that is, a basis with weights \((w_1, \ldots, w_d)\) satisfying that \(A^j = \langle b_i \mid w_i \geq j \rangle\). Let

\[ b_i b_j = \sum_k a_{i,j,k} b_k.\]

The nilpotent table \(T\) for \(A\) (with respect to the basis \((b_1, \ldots, b_d)\)) is a record with the following entries.

dim

the dimension \(d\) of \(A\);

fld

the field \(F\) of \(A\);

wgs

the weights \((w_1, \ldots, w_d)\);

rnk

the rank \(e\) of \(A\) (i.e. the dimension of \(A/A^2\)).

wds

a list of length \(d\) with holes; if the \(i\)th entry is bounded, then it is of the form \([k,l]\). In this case, \(w_i > 1\) and \(b_i = b_k b_l\) and \(w_k = 1\) and \(w_l = w_i-1\) holds.

tab

a partial structure constants table for \(A\); if tab[i][j][k] is bounded, then it is \(a_{i,j,k}\). Note that either a full vector tab[i][j] is given or tab[i][j] is unbounded. The entry tab[i][j][k] is available for \(1 \leq i,j \leq e\) and if wds[i] is unbounded.

com

optional; if this is bounded, then it is a boolean. If this boolean is true, then the algebra is assumed to be commutative.

In a nilpotent table not all structure constants are readily available. The following function determines the structure constants for the product \(b_i b_j\). If the global variable STORE is true, then the function stores the computed entry in the table.

2.1-1 GetEntryTable
‣ GetEntryTable( T, i, j )( function )

The result of the multiplication of the elements \(v\) and \(w\) in \(T\) can be obtained using the following function. An example of its use is provided below.

2.1-2 MultByTable
‣ MultByTable( T, v, w )( function )

We consider two nilpotent tables as equal if they would be equal once the full set of structure constants is bound. The following function provides an effective check for this.

2.1-3 CompareTables
‣ CompareTables( T1, T2 )( function )

A nilpotent table contains redundant information and hence can be inconsistent. The next functions can be used to check this to some extent.

2.1-4 CheckAssociativity
‣ CheckAssociativity( T )( function )

Checks that \((b_i b_j) b_k = b_i (b_j b_k)\) for all \(i,j,k\). Note that this may be time-consuming.

2.1-5 CheckCommutativity
‣ CheckCommutativity( T )( function )

Checks whether \(T\) defines a commutative algebra and sets the entry com accordingly.

2.1-6 CheckConsistency
‣ CheckConsistency( T )( function )

Checks that wds and tab are compatible. This assumes that CheckAssociativity returns true.

All algorithms described later in this package assume that the tables considered are fully consistent.

gap> T := rec( dim := 3, 
> fld := GF(2), 
> rnk := 2, 
> wgs := [ 1, 1, 2 ],
> wds := [ ,, [ 2, 1 ] ],
> tab := [] );;
gap> T.tab[1] := [[0,0,0],[0,0,1]] * One(T.fld);;
gap> T.tab[2] := [[0,0,1],[0,0,0]] * One(T.fld);;
gap> GetEntryTable( T, 3, 1 );
[ 0*Z(2), 0*Z(2), 0*Z(2) ]

2.2 Algebras in the GAP sense

We provide functions to convert back and forth between algebras in the GAP sense and nilpotent tables.

2.2-1 AlgebraByTable
‣ AlgebraByTable( T )( operation )
‣ NilpotentTable( A )( function )

Note that the second function fails if \(A\) is not nilpotent.

For modular group algebras of \(p\)-groups, the group algebra itself is not nilpotent (as it contains a unit), but its Jacobson radical is. The following function determines a nilpotent table for the Jacobson radical.

2.2-2 NilpotentTableOfRad
‣ NilpotentTableOfRad( FG )( function )
gap> A := GroupRing(GF(2), SmallGroup(8,3));
<algebra-with-one over GF(2), with 3 generators>
gap> NilpotentTableOfRad(A);
rec( dim := 7, fld := GF(2), rnk := 2, 
  tab := 
    [ 
      [ [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ] ], 
      [ [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ] ],, 
      [ [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
          [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ] ] ], 
  wds := [ ,, [ 1, 2 ],, [ 1, 4 ], [ 2, 4 ], [ 1, 6 ] ], 
  wgs := [ 1, 1, 2, 2, 3, 3, 4 ] )

2.3 Tables for the Modular Isomorphism Problem

A special kind of nilpotent table is available in the context of the Modular Isomorphism Problem. Let \(G\) be a finite group, \(F\) a field of characteristic \(p\) and \(I(FG)\) the augmentation ideal of \(FG\) which equals its radical and is a nilpotent ideal. Two functions can be used to compute the class-\(n\) quotient of \(I(FG)\), i.e. \(I(FG)/I(FG)^{n+1}\). The output is a nilpotent table for this quotient, but in addition to the standard entries of a nilpotent table it contains further entries, which allow more efficient computations and can also facilitate manual calculations. This makes it possible to determine the class-\(n\) quotient of the augmentation ideal without computing the full augmentation ideal using NilpotentTableOfRad (2.2-2). The corresponding table can be computed by

2.3-1 TableOfRadQuotient
‣ TableOfRadQuotient( FG, n )( function )

or

2.3-2 ModIsomTable
‣ ModIsomTable( G, n[, f] )( function )

Here ModIsomTable(G, n) will produce the quotient with respect to the algebra \(ℙ_pG\), while ModIsomTable( G, n, f ) will do the same for the algebra \(ℙ_{p^f}G\).

The components \(\dim\), fld, rnk, tab, wgs, wds remain unchanged from a usual nilpotent table. The additional components are commwords, powwords and pre. These new components contain additional information on precisely which basis of \(I(FG)/I(FG)^{n+1}\) is used and what the result of multiplying basis elements is. We explain how users can understand how the basis looks and how they can multiply two elements in the algebra. The components T.commwords and T.powwords contain information on how the elements of the basis behave with respect to commutators and \(p\)-th powers. The component T.pre contains information on the construction of the basis and we describe it in more detail.

The dimension of \(I(FG)/I(FG)^{n+1}\) is recorded in T.dim. The basis of \(I(FG)/I(FG)^{n+1}\) is found as in the theory of Jennings going back to [Jen41], cf. [MM22] for the information needed here. The elements of \(G\) chosen to provide the basis of subsequent quotients of dimension subgroups are recorded in T.pre.jen.pcgs. Let us call these elements \(g_1,\ldots,g_m\). Note that \(|G| = p^m\). The weights of the elements \(g_1-1,\ldots ,g_m-1\) are recorded in T.pre.jen.weights. If now \(r\) is an integer smaller than T.dim+1, then the \(r\)-th element of the basis of \(I(FG)/I(FG)^{n+1}\) is \((g_1-1)^{e_1} \cdot \ldots (g_m-1)^{e_m}\) where \([e_1,\ldots,e_m]\) = T.pre.exps[r]. The weight of this element is recorded in T.wgs[r] and also T.pre.weights[r]. Moreover, the positions of \(g_1-1,\ldots ,g_m-1\) in the chosen basis of \(T\) are recorded in T.pre.poswone. We elaborate using an example.

We consider the group \(G\) = SmallGroup(3^7, 19). The following calculation shows that \(I(FG)/I(FG)^9\) has dimension \(135\) and that the full augmentation ideal \(I(FG)\) has dimension \(2186\).

gap> G := SmallGroup(3^7, 19);;
gap> T := ModIsomTable(G, 8);;
gap> T.dim;
135
gap> FG := GroupRing(GF(3), G);;
gap> TT := TableOfRadQuotient(FG, 8);;
gap> TT.dim;
135
gap> T := ModIsomTable(G, 38);;
gap> T.dim;
2186
gap> T := ModIsomTable(G, 39);;
gap> T.dim;
2186

We next consider an example of how the basis used can be recognized.

gap> G := DihedralGroup(8);;
gap> T := ModIsomTable(G, 4);;
gap> T.dim;
7
gap> pcgs := T.pre.jen.pcgs;
Pcgs([ f1, f2, f3 ])
gap> List(pcgs, Order);
[ 2, 4, 2 ]
gap> pcgs[3] in Center(G);
true
gap> T.pre.exps{[1..7]};
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 1, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 1 ], 
  [ 0, 1, 1 ], [ 1, 1, 1 ] ]

We conclude that \(I(FG)/I(FG)^5\) is \(7\)-dimensional and if we denote by \(a\) a reflection and by \(b\) a non-central rotation in \(G\), then the basis used by \(T\) is, in this order: \((a-1)\), \((b-1)\), \((a-1)(b-1)\), \((b^2-1)\), \((a-1)(b^2-1)\), \((b-1)(b^2-1)\), \((a-1)(b-1)(b^2-1)\).

Continuing the previous example, say we want to multiply \((b-1)+(a-1)(b-1)+(a-1)(b^2-1)\) and \((a-1)+(b-1)+(b^2-1)\).

gap> v := Z(2)^0*[0,1,1,0,1,0,0];
[ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ]
gap> w := Z(2)^0*[1,1,0,1,0,0,0];
[ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ]
gap> MultByTable(T,v,w);
[ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ]

So the result is \((a-1)(b-1) + (a-1)(b^2-1)\).

To facilitate the translation of elements of the group algebra and a corresponding table of a quotient of the augmentation ideal the functions

2.3-3 MIPElementTableToAlgebra
‣ MIPElementTableToAlgebra( v, T, FG )( function )

and

2.3-4 MIPElementAlgebraToTable
‣ MIPElementAlgebraToTable( el, FG, T )( function )

can be used. In the second function of course only a possible representative of \(v\) in \(FG\) is provided. Also, only elements from the augmentation ideal of \(FG\) can be represented using MIPElementAlgebraToTable. These functions can be used for instance to obtain representatives in the same class modulo a power of the augmentation ideal which are more practical to work with, as the following example shows.

gap> G := SmallGroup(3^7, 19);
<pc group of size 2187 with 7 generators>
gap> T := ModIsomTable(G, 4);;
gap> FG := GroupRing(GF(3), G);
<algebra-with-one over GF(3), with 7 generators>
gap> iota := Embedding(G, FG);
<mapping: Group( [ f1, f2, f3, f4, f5, f6, f7 
 ] ) -> AlgebraWithOne( GF(3), ... ) >
gap> a := (T.pre.jen.pcgs[1])^iota;
(Z(3)^0)*f1
gap> b := (T.pre.jen.pcgs[2])^iota;
(Z(3)^0)*f2
gap> z := One(FG);
(Z(3)^0)*<identity> of ...
gap> r := (z + (a-z)*(b-z) )^-1;;  
gap> Size(Support(r-z));
1376
gap> el := MIPElementAlgebraToTable(r-z, FG, T);
[ 0*Z(3), 0*Z(3), 0*Z(3), Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 
  0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 
  0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ]
gap> MIPElementTableToAlgebra(el, T, FG);
(Z(3))*<identity> of ...+(Z(3)^0)*f3+(Z(3)^0)*f1^2+(Z(3))*f1*f2+(Z(3))*f1*f3+(
Z(3)^0)*f2^2+(Z(3))*f2*f3+(Z(3)^0)*f1^2*f2+(Z(3)^0)*f1*f2^2+(Z(3)^
0)*f1*f2*f3+(Z(3)^0)*f1^2*f2^2

We illustrate the information in T.pre.poswone:

gap> d := (T.pre.jen.pcgs[4])^iota;
(Z(3)^0)*f4
gap> el := MIPElementAlgebraToTable(d-z, FG, T);
[ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 
  0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 
  0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ]
gap> Position(last, Z(3)^0);
11
gap> T.pre.poswone[4];
11
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 Bib Ind

generated by GAPDoc2HTML