[Up] [Previous] [Next] [Index]

2 Tables

Sections

  1. Nilpotent tables
  2. Algebras in the GAP sense
  3. Tables for the Modular Isomorphism Problem

Finite dimensional algebras can be described by structure contants tables. For nilpotent algebras it is not neccessary to store a full structure contants 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 (b1, …, bd) be a weighted basis of A; that is, a basis with weights (w1, …, wd) satifying that Aj = 〈bi | wij 〉. Let
bi bj =

k 
ai,j,k bk·
The nilpotent table T for A (with respect to the basis (b1, …, bd)) is a record with the following entries.

dim
the dimension d of A;

fld
the field F of A;

wgs
the weights (w1, …, wd);

rnk
the rank e of A (i.e. the dimension of A/A2).

wds
a list of length d with holes; If the ith entry is bounded, then it is of the form [k,l]. In this case, wi > 1 and bi = bk bl and wk = 1 and wl = wi−1 holds.

tab
a partial structure contants table for A; If tab[i][j][k] is bounded, then it is ai,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 ≤ i,je 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 bi bj. If the global variable STORE is true, then the function stores the computed entry in the table.

  • GetEntryTable( T, i, j ) F

    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.

  • MultByTable( T, v, w ) F

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

  • CompareTables( T1, T2 ) F

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

  • CheckAssociativity( T ) F

    Checks that (bi bj) bk = bi (bj bk) for all i,j,k. Note that this may be time-consuming.

  • CheckCommutativity( T ) F

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

  • CheckConsistency( T ) F

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

    All later described algorithms of 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.

  • AlgebraByTable( T ) F
  • NilpotentTable( A ) F

    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 radial is. The following function determines a nilpotent table for the Jacobson radical.

  • NilpotentTableOfRad( FG ) F

    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 allow to compute 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 allows to determine the class-n quotient of the augmentation ideal without computing the full augmentation ideal using NilpotentTableOfRad. The corresponding table can be computed by

  • TableOfRadQuotient( FG, n ) F

    or

  • ModIsomTable( G, n, [f] ) F

    Here ModIsomTable(G, n) will produce the quotient with respect to the algebra FpG, while ModIsomTable( G, n, f ) will do the same for the algebra FpfG. If ModIsomTable is executed as ModIsomTable(G, n) it provides the table with respect to the algebra FpG.

    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.commords 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 g1,…,gm. Note that |G| = pm. The weights of the elements g1−1,…,gm−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 (g1−1)e1 ·…(gm−1)em where [e_1,…,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 g1−1,…,gm−1 in the chosen basis of T are recorded in T.pre.poswone. We elaborate using an example.

    We consider the group G=SmallGroup(37, 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 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(kG)/I(kG)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), (b2−1), (a−1)(b2−1), (b−1)(b2−1), (a−1)(b−1)(b2−1).

    Say continuing the previous example we want to multiply (b−1)+(a−1)(b−1)+(a−1)(b2−1) and (a−1)+(b−1)+(b2−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)(b2−1).

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

  • MIPElementTableToAlgebra( v, T, FG ) F

    and

  • MIPElementAlgebraToTable( el, FG, T ) F

    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
    

    [Up] [Previous] [Next] [Index]

    ModIsom manual
    September 2024