[GAP Forum] RadicalOfAlgebra
Willem De Graaf
degraaf at science.unitn.it
Mon Nov 7 10:34:07 GMT 2011
Dear Neha,
You asked:
> Could you please tell me as to where can I find the code for the standard
> RadicalOfAlgebra method in GAP?? I wanted to see the theory behind how it
> computes the radical as I could not find a detailed documentation for it.
The code for matrix algebras is in lib/algmat.gi; I also append it
below. It contains a reference.
For non-matrix algebras first a faithful representation is computed,
and then the code for matrix algebras is used.
Best wishes,
Willem
#############################################################################
##
#M RadicalOfAlgebra( <A> ) . . . . . . . . for an associative matrix algebra
##
## The radical of an associative algebra <A> defined as the ideal of all
## elements $x$ of <A> such that $x y$ is nilpotent for all $y$ in <A>.
##
## For Gaussian matrix algebras this is easy to calculate,
## for arbitrary associative algebras the task is reduced to the
## Gaussian matrix algebra case.
##
## The implementation of the characterisitc p>0 part is by Craig Struble.
##
InstallMethod( RadicalOfAlgebra,
"for associative Gaussian matrix algebra",
true,
[ IsAlgebra and IsGaussianMatrixSpace and IsMatrixFLMLOR ], 0,
function( A )
local F, # the field of A
p, # the characteristic of F
q, # the size of F
n, # the dimension of A
ident, # the identity matrix
bas, # a list of basis vectors of A
minusOne, # -1 in F
eqs, # equation set
i,j, # loop variables
G, # Gram matrix
I, # a list of basis vectors of an ideal of A
I_prime, # I \cup ident
changed, # flag denoted if $I_i <> I_{i-1}$ in ideal sequence
pexp, # a power of the prime p
dim, # the dimension of the vector space where A acts on
charPoly, # characteristic polynomials of elements in A
invFrob, # inverse of the Frobenius map of F
invFrobexp, # a power of the invFrob
r, r_prime; # the length of I and I_prime
# Check associativity.
if not IsAssociative( A ) then
TryNextMethod();
fi;
if Dimension( A ) = 0 then return A; fi;
F:= LeftActingDomain( A );
p:= Characteristic( F );
n:= Dimension( A );
bas:= BasisVectors( Basis( A ) );
if p = 0 then
# First we treat the characteristic 0 case.
# According to Dickson's theorem we have that in this case
# the radical of `A' is $\{ x\in A \mid Tr(xy) = 0 \forall y \in A \}$,
# so it can be computed by solving a system of linear equations.
eqs:= List( [ 1 .. n ], x -> [] );
for i in [1..n] do
for j in [i..n] do
eqs[i][j]:= TraceMat( bas[i] * bas[j] );
eqs[j][i]:= eqs[i][j];
od;
od;
return SubalgebraNC( A, List( NullspaceMat( eqs ),
x -> LinearCombination( bas, x ) ),
"basis" );
else
# If `p' is greater than 0, then the situation is more difficult.
# We implement the algorithm presented in
# "Cohen, Arjeh M, G\'{a}bor Ivanyos, and David B. Wales,
# 'Finding the radical of an algebra of linear tranformations,'
# Journal of Pure and Applied Algebra 117 & 118 (1997), 177-193".
q := Size( F );
dim := Length( bas[1] );
pexp := 1;
invFrob := InverseGeneralMapping(FrobeniusAutomorphism(F));
invFrobexp := invFrob;
minusOne := -One(F);
ident := IdentityMat( dim, F );
changed := true;
I := ShallowCopy( bas );
# Compute the sequence of ideals $I_i$ (see the paper by Cohen, et.al.)
while pexp <= dim do
# These values need recomputation only when $I_i <> I_{i-1}$
if changed then
I_prime := ShallowCopy( I );
if not ident in I_prime then
Add( I_prime, ident );
fi;
r := Length( I );
r_prime := Length( I_prime );
eqs := NullMat( r, r_prime, F );
charPoly := List( [1..r], x -> [] );
for i in [1..r] do
for j in [1..r_prime] do
charPoly[i][j] :=
CoefficientsOfUnivariatePolynomial(
CharacteristicPolynomial( F, F, I[i]*I_prime[j]
) );
od;
od;
changed := false;
fi;
for i in [1..r] do
for j in [1..r_prime] do
eqs[i][j] := minusOne^pexp * charPoly[i][j][dim-pexp+1];
od;
od;
G := NullspaceMat( eqs );
if Length( G ) = 0 then
return TrivialSubalgebra( A );
elif Length( G ) <> r then
# $I_i <> I_{i-1}$, so compute the basis for $I_i$
changed := true;
if 1 < pexp and pexp < q then
G := List( G, x -> List( x, y -> y^invFrobexp ) );
fi;
I := List( G, x -> LinearCombination( I, x ) );
fi;
# prepare for next step
invFrobexp := invFrobexp * invFrob;
pexp := pexp*p;
od;
return SubalgebraNC( A, I, "basis" );
fi;
end );
More information about the Forum
mailing list