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

# 2 Tables

### Sections

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 contants 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`

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>
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 ] )
```

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

ModIsom manual
January 2020