|
InstallGlobalFunction( ExtensionOfsl2BySoluble,
function( F, arg )
local b, c12, c13, c23, T, L;
if arg[1] = 1 then
L := SolvableLieAlgebra( F, [3,1] );
elif arg[1] = 2 then
L := SolvableLieAlgebra( F, [3,2] );
elif arg[1] = 3 then
L := SolvableLieAlgebra( F, [3,3, arg[2]] );
elif arg[1] = 4 then
L := SolvableLieAlgebra( F, [3,4, arg[2]] );
else
Error( "Argument out of range." );
fi;
b := Basis( L );
c12 := Coefficients( b, b[1]*b[2] );
c13 := Coefficients( b, b[1]*b[3] );
c23 := Coefficients( b, b[2]*b[3] );
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [-2,1] );
SetEntrySCTable( T, 2, 3, [2,2] );
SetEntrySCTable( T, 4, 5, [c12[1], 4, c12[2], 5, c12[3], 6] );
SetEntrySCTable( T, 4, 6, [c13[1], 4, c13[2], 5, c13[3], 6] );
SetEntrySCTable( T, 5, 6, [c23[1], 4, c23[2], 5, c23[3], 6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )),
")+solv(", String( arg ), ")"));
return L;
end );
InstallGlobalFunction( ExtensionOfW121BySoluble,
function( F, arg )
local b, c12, c13, c23, T, L;
# W(1,2)^{(1)} + 3-dim solvable.
if arg[1] = 1 then
L := SolvableLieAlgebra( F, [3,1] );
elif arg[1] = 2 then
L := SolvableLieAlgebra( F, [3,2] );
elif arg[1] = 3 then
L := SolvableLieAlgebra( F, [3,3, arg[2]] );
elif arg[1] = 4 then
L := SolvableLieAlgebra( F, [3,4, arg[2]] );
else
Error( "Argument out of range." );
fi;
b := Basis( L );
c12 := Coefficients( b, b[1]*b[2] );
c13 := Coefficients( b, b[1]*b[3] );
c23 := Coefficients( b, b[2]*b[3] );
T := EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 4, 5, [c12[1], 4, c12[2], 5, c12[3], 6] );
SetEntrySCTable( T, 4, 6, [c13[1], 4, c13[2], 5, c13[3], 6] );
SetEntrySCTable( T, 5, 6, [c23[1], 4, c23[2], 5, c23[3], 6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2)^{(1)}+solv(", String( arg ), ")"));
return L;
end );
InstallGlobalFunction( ExtensionOfW12ByAbelian,
function( F, a )
local T, L;
# W(1,2) semidirect abelian: 4 + |F| Lie algebras, depending
# on the action of W(1,2) on the abelian.
# only x^3d acts on the abelian non-trivially.
if Characteristic( F ) <> 2 then
Error( "The field must have characteristic 2" );
fi;
if a=0 then
# 1st Lie algebra. action of x^3d is trivial.
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2)+GF(", String( Size( F )), ")+GF(",
String( Size( F )), ")" ));
return L;
elif a = 1 then
# 2nd Lie algebra. action is [[0,1],[0,0]]
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 4, 5, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2):(GF(", String( Size( F )), ")+GF(",
String( Size( F )), "))(1)" ));
return L;
elif a = 2 then
# 3rd Lie algebra. Action is identity
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 4, 5, [1,5] );
SetEntrySCTable( T, 4, 6, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2):(GF(",
String( Size( F )), ")+GF(",
String( Size( F )), "))(2)" ));
return L;
elif a = 3 then
# 4th Lie algebra. Action is [[1,1],[0,1]]
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 4, 5, [1,5,1,6] );
SetEntrySCTable( T, 4, 6, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2):(GF(",
String( Size( F )), ")+GF(",
String( Size( F )), "))(3)" ));
return L;
elif a in F and a <> Zero( F ) then
# Lie algebras. Action is [[0,a],[1,1]]
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 4, 5, [a,6] );
SetEntrySCTable( T, 4, 6, [1,5,1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2):(GF(",
String( Size( F )), ")+GF(",
String( Size( F )), "))(", String( a ), ")" ));
return L;
else
Error( "Invalid parameters." );
fi;
end );
InstallGlobalFunction( ExtensionOfsl2ByV2a,
function( F, a )
local T, L;
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 2, 1, [2,1] );
SetEntrySCTable( T, 2, 3, [-2,3] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 4, 1, [-1,5] );
SetEntrySCTable( T, 5, 1, [-1,6] );
SetEntrySCTable( T, 6, 1, [-1,4] );
SetEntrySCTable( T, 5, 2, [-2,5] );
SetEntrySCTable( T, 6, 2, [-1,6] );
SetEntrySCTable( T, 4, 3, [-a,6] );
SetEntrySCTable( T, 5, 3, [-a,4] );
SetEntrySCTable( T, 6, 3, [2-a,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )),
"):V(2,", String( a ), ")"));
return L;
end );
InstallMethod( NonSolvableLieAlgebra,
"for a finite field and a list of parameters",
true,
[ IsField and IsFinite, IsList ],
0,
function( F, arg )
local T, L, list, x, c, par, dim, pos, b, f, i, l, k, z;
dim := arg[1];
if Length( arg ) > 1 then
pos := arg[2];
fi;
if dim > 6 then
Error( "The complete list of non-solvable Lie algebras is only stored up to dimension 6" );
fi;
if dim <= 2 then
Error( "The dimension must be at least 3" );
elif dim = 3 then
if Characteristic( F ) = 2 then
# Strade's W(1;2)^{(1)}. Basis is {d, x1d, x2d}
T:= EmptySCTable( 3, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
L := LieAlgebraByStructureConstants( F, T ) ;
L!.arg := arg;
SetName( L, "W(1;2)^{(1)}" );
return L;
else
# sl(2,F). Basis [[0,1],[0,0]],[[0,0],[0,1]],[[1,0],[0,-1]]
T:= EmptySCTable( 3, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [-2,1] );
SetEntrySCTable( T, 2, 3, [2,2] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )), ")" ));
L!.arg := arg;
return L;
fi;
elif dim = 4 then
if Characteristic( F ) = 2 then
if not IsBound( pos ) then
Error( "More than one Lie algebra exists. Give a second parameter." );
fi;
if pos = 2 then
# W(1;2)^{(1)} + F. Basis {d,x1d,x2d,z}
T:= EmptySCTable( 4, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2)^{(1)}+GF(",
String( Size( F )), ")" ));
L!.arg := arg;
return L;
elif pos = 1 then
# W(1;2). Basis {d,x1d,x2d,x3d}
T:= EmptySCTable( 4, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, "W(1;2)" );
L!.arg := arg;
return L;
else
Error( "Argument out of range." );
fi;
else
# gl(2,F)
T:= EmptySCTable( 4, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,2] );
SetEntrySCTable( T, 1, 3, [-1,3] );
SetEntrySCTable( T, 2, 3, [1,1,-1,4] );
SetEntrySCTable( T, 2, 4, [1,2] );
SetEntrySCTable( T, 3, 4, [-1,3] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "gl(2,", String( Size( F )), ")" ));
L!.arg := arg;
return L;
fi;
elif dim = 5 then
if Characteristic( F ) = 2 then
if not IsBound( pos ) then
Error( "More than one Lie algebra exists. Give a second parameter." );
fi;
if pos = 1 then
# Der( W(1;2)^{(1)}. Basis {d,x1d,x2d,x3d,dd}
T := EmptySCTable( 5, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 3, 5, [1,1] );
SetEntrySCTable( T, 4, 5, [1,2] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, "Der(W(1;2)^{(1)})" );
L!.arg := arg;
return L;
elif pos = 2 then
if Length( arg ) < 3 then
Error( "This is a parametrized family." );
fi;
if not arg[3] in [0,1] then
Error( "Parameter is out of range" );
fi;
# W(1,2) + F (direct sum if arg[3] = 0, not direct otherwise)
T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 4, 5, [arg[3],5] );
L := LieAlgebraByStructureConstants( F, T );
if arg[3] = 0 then
SetName( L, Concatenation( "W(1;2)+GF(",
String( Size( F )), ")" ));
else
SetName( L, Concatenation( "W(1;2):GF(",
String( Size( F )), ")" ));
L!.arg := arg;
return L;
fi;
L!.arg := arg;
return L;
elif pos = 3 then
if Length( arg ) < 3 then
Error( "This is a parametrized family." );
fi;
if not arg[3] in [0,1] then
Error( "Parameter is out of range" );
fi;
# W(1,2)^{(1)} + 2-dim (abelian if arg[3]=0,
# non-abelian if arg[3] = 1)
T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 4, 5, [arg[3],5] );
L := LieAlgebraByStructureConstants( F, T );
if arg[3] = 0 then
SetName( L, Concatenation( "W(1;2)^{(1)}+GF(",
String( Size( F )), ")",
"+GF(", String( Size( F )), ")" ));
else
SetName( L, "W(1;2)^{(1)}+<x1,x2|[x1,x2]=x2>" );
fi;
L!.arg := arg;
return L;
else
Error( "Argument out of range." );
fi;
else
if not IsBound( pos ) then
Error( "More than one Lie algebra exists. Give a second parameter." );
fi;
if pos = 1 then
if Length( arg ) < 3 then
Error( "This is a parametrized family." );
fi;
if not arg[3] in [0,1] then
Error( "Parameter is out of range" );
fi;
# sl(2,k) + Abelian
T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [-2,1] );
SetEntrySCTable( T, 2, 3, [2,2] );
SetEntrySCTable( T, 4, 5, [arg[3],5] );
L := LieAlgebraByStructureConstants( F, T );
if arg[3] = 0 then
SetName( L, Concatenation( "sl(2,", String( Size( F )),
")+GF(", String( Size( F )), ")+GF(",
String( Size( F )),
")"));
else
SetName( L, Concatenation( "sl(2,", String( Size( F )),
")+<x1,x2|[x1,x2]=x2>" ));
fi;
L!.arg := arg;
return L;
elif pos = 2 then
# sl(2,k) semidirect natural module
T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [-2,1] );
SetEntrySCTable( T, 2, 3, [2,2] );
SetEntrySCTable( T, 4, 1, [1,5] );
SetEntrySCTable( T, 4, 3, [1,4] );
SetEntrySCTable( T, 5, 2, [1,4] );
SetEntrySCTable( T, 5, 3, [-1,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )),
"):V(1)"));
L!.arg := arg;
return L;
# if char=3 then there is an additional one.
elif pos = 3 and Characteristic( F ) = 3 then
T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 2, 1, [-1,1,1,5] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 4, [1,4] );
SetEntrySCTable( T, 2, 5, [-1,5] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 3, 4, [1,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )),
").V(1)"));
L!.arg := arg;
return L;
# if char = 5 then W(1;1)
elif pos = 3 and Characteristic( F ) = 5 then
T:= EmptySCTable( 5, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 2, 4, [2,4] );
SetEntrySCTable( T, 2, 5, [3,5] );
SetEntrySCTable( T, 3, 4, [2,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, "W(1;1)" );
L!.arg := arg;
return L;
else
Error( "Argument out of range." );
fi;
fi;
elif dim = 6 then
if not IsBound( pos ) then
Error( "More than one Lie algebra exists. Give a second parameter." );
fi;
if Characteristic( F ) = 2 then
# radical zero-dim
if pos = 1 then
# W(1,2)^{(1)}+W(1,2)^{(1)}
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 4, 5, [1,4] );
SetEntrySCTable( T, 4, 6, [1,5] );
SetEntrySCTable( T, 5, 6, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, "W(1;2)^{(1)}+W(1;2)^{(1)}" );
L!.arg := arg;
return L;
elif pos = 2 then
# W(1,2)^{(1)} x field extension of degree 2.
# Basis={d,xd,x^2d,d x xi, xd x xi, x^2d x xi }
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
x := Z( Size( F )^2 );
c := Coefficients( Basis( VectorSpace( F,
[ One( F ), x ])), x^2 );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 1, 6, [1,5] );
SetEntrySCTable( T, 2, 4, [1,4] );
SetEntrySCTable( T, 2, 6, [1,6] );
SetEntrySCTable( T, 3, 4, [1,5] );
SetEntrySCTable( T, 3, 5, [1,6] );
SetEntrySCTable( T, 4, 5, [c[1],1,c[2],4] );
SetEntrySCTable( T, 4, 6, [c[1],2,c[2],5] );
SetEntrySCTable( T, 5, 6, [c[1],3,c[2],6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2)^{(1)}xGF(",
String( Size( F )^2), ")" ));
L!.arg := arg;
return L;
elif pos = 3 then
if Length( arg ) < 3 then
Error( "This is a parametrized family." );
fi;
# if arg[3] = 1 then
# Der(W(1;2)^{(1)}) + F. Basis {d,x1d,x2d,x3d,dd,z}
# otherwise
# Der( W(1;2)^{(1)} semidirect F. Basis {d,x1d,x2d,x3d,dd,u}
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 3, 5, [1,1] );
SetEntrySCTable( T, 4, 5, [1,2] );
SetEntrySCTable( T, 5, 6, [arg[3],6] );
L := LieAlgebraByStructureConstants( F, T );
if arg[3] = 0 then
SetName( L, Concatenation( "Der(W(1;2)^{(1)})+GF(",
String( Size( F )), ")" ));
else
SetName( L, Concatenation( "Der(W(1;2)^{(1)}):GF(",
String( Size( F )), ")" ));
fi;
L!.arg := arg;
return L;
# W(1,2) semidirect abelian: 4 + |F| Lie algebras, depending
# on the action of W(1,2) on the abelian.
# only x^3d acts on the abelian non-trivially.
elif pos = 4 then
if Length( arg ) >= 3 then
L := ExtensionOfW12ByAbelian( F, arg[3] );
L!.arg := arg;
return L;
else
Error( "This is a parametric family. Give an additional parameter." );
fi;
elif pos = 5 then
# W(1,2) semidirect non-abelian
# two lie algebras
# 1st Lie algebra. W(1;2) + non-abelian
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 5, 6, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, "W(1;2)+<x,y|[x,y]=y>" );
L!.arg := arg;
return L;
elif pos = 6 then
# 3-dim radical
# W(1,2)^{(1)} + 3-dim solvable.
if Length( arg ) >= 3 then
L := ExtensionOfW121BySoluble( F,
arg{[3..Length( arg )]} );
L!.arg := arg;
return L;
else
Error( "This is a parametric family. Give an additional parameter." );
fi;
elif pos = 7 then
# W(1,2)^{(1)} + O(1,2)/k
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 1, 6, [1,5] );
SetEntrySCTable( T, 2, 4, [1,4] );
SetEntrySCTable( T, 2, 6, [1,6] );
SetEntrySCTable( T, 3, 4, [1,5] );
SetEntrySCTable( T, 3, 5, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2)^{(1)}:O(1;2)/GF(",
String( Size( F )), ")"));
L!.arg := arg;
return L;
elif pos = 8 then
# Non-split extension 0 -> O(1,2)/k -> L -> W(1,2)^{(1)} -> 0
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1,1,6] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 4, [1,4] );
SetEntrySCTable( T, 2, 6, [1,6] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 1, 6, [1,5] );
SetEntrySCTable( T, 3, 4, [1,5] );
SetEntrySCTable( T, 3, 5, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;2)^{(1)}.O(1;2)/GF(",
String( Size( F )), ")"));
L!.arg := arg;
return L;
else
Error( "Argument out of range." );
fi;
else
if not IsBound( pos ) then
Error( "More than one Lie algebra exists. Give a second parameter." );
fi;
# The algebras from Theorem 5.2
if pos = 1 then
# sl(2,F) + sl(2,F)
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [-2,1] );
SetEntrySCTable( T, 2, 3, [2,2] );
SetEntrySCTable( T, 4, 5, [1,6] );
SetEntrySCTable( T, 4, 6, [-2,4] );
SetEntrySCTable( T, 5, 6, [2,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,",
String( Size( F )), ")+sl(2,", String( Size( F )), ")"));
L!.arg := arg;
return L;
elif pos = 2 then
# sl(2,F<x>) where F<x> is a quadratic extension
L := NonSolvableLieAlgebra( GF( Size( F )^2 ), [3] );
b := ShallowCopy( Basis( L ));
Append( b, List( b, x->x*Z(Size( F )^2 )));
L := LieAlgebra( F, b );
Setter( IsFiniteDimensional )( L, true );
SetName( L, Concatenation( "sl(2,GF(",
String( Size( F )^2 ), "))" ));
L!.arg := arg;
return L;
# The Lie algebras in Theorem 5.3
elif pos = 3 then
# sl(2,F) + solvable
L := ExtensionOfsl2BySoluble( F,
arg{[3..Length( arg )]} );
L!.arg := arg;
return L;
elif pos = 4 then
# sl(2,F) semidirect V(1)+V(0)
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [-2,1] );
SetEntrySCTable( T, 2, 3, [2,2] );
SetEntrySCTable( T, 4, 1, [1,5] );
SetEntrySCTable( T, 5, 2, [1,4] );
SetEntrySCTable( T, 4, 3, [1,4] );
SetEntrySCTable( T, 5, 3, [-1,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )),
"):(V(1)+V(0))" ));
L!.arg := arg;
return L;
elif pos = 5 then
# sl(2,F) semidirect V(2)
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [-2,1] );
SetEntrySCTable( T, 2, 3, [2,2] );
SetEntrySCTable( T, 4, 1, [2,5] );
SetEntrySCTable( T, 5, 1, [2,6] );
SetEntrySCTable( T, 5, 2, [1,4] );
SetEntrySCTable( T, 6, 2, [1,5] );
SetEntrySCTable( T, 4, 3, [2,4] );
SetEntrySCTable( T, 6, 3, [-2,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )),
"):V(2)" ));
L!.arg := arg;
return L;
elif pos = 6 then
# sl(2,F) semidirect Heisenberg
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [-2,1] );
SetEntrySCTable( T, 2, 3, [2,2] );
SetEntrySCTable( T, 4, 1, [1,5] );
SetEntrySCTable( T, 5, 2, [1,4] );
SetEntrySCTable( T, 4, 3, [1,4] );
SetEntrySCTable( T, 5, 3, [-1,5] );
SetEntrySCTable( T, 4, 5, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )),
"):H" ));
L!.arg := arg;
return L;
elif pos = 7 then
# sl(2,F) semidirect Rad( L ). Rad( L ) = Z(L)+V(1) and
# Rad( L ) = <d,u,v> [d,u]=u, [d,v]=v;
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [-2,1] );
SetEntrySCTable( T, 2, 3, [2,2] );
SetEntrySCTable( T, 4, 1, [1,5] );
SetEntrySCTable( T, 5, 2, [1,4] );
SetEntrySCTable( T, 4, 3, [1,4] );
SetEntrySCTable( T, 5, 3, [-1,5] );
SetEntrySCTable( T, 6, 4, [1,4] );
SetEntrySCTable( T, 6, 5, [1,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )),
"):<x,y,z|[x,y]=y,[x,z]=z>" ));
L!.arg := arg;
return L;
elif pos = 8 and Characteristic( F ) = 3 then
x := Indeterminate( F );
if Length( arg ) >= 3 then
if arg[3] = -1 then
z := Zero( F );
else
z := Z(Size( F ))^arg[3];
fi;
f := Factors( x^3+x^2-z );
i := 1;
repeat
k := CoefficientsOfUnivariatePolynomial(
f[i] )[1];
until Degree( f[i] ) = 1;
l := k^3;
L := ExtensionOfsl2ByV2a( F, l );
L!.arg := arg;
return L;
else
Error( "This is a parametric family. Give a parameter" );
fi;
elif pos = 9 and Characteristic( F ) = 3 then
# W( 1, 1 ) semidirect O(1,1)
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 1, 6, [1,5] );
SetEntrySCTable( T, 2, 5, [1,5]);
SetEntrySCTable( T, 2, 6, [2,6] );
SetEntrySCTable( T, 3, 5, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, "W(1;1):O(1;1)" );
L!.arg := arg;
return L;
elif pos = 10 and Characteristic( F ) = 3 then
# W( 1, 1 ) semidirect O(1,1)* (the dual action)
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [-1,1] );
SetEntrySCTable( T, 1, 3, [-1,2] );
SetEntrySCTable( T, 2, 3, [-1,3] );
SetEntrySCTable( T, 1, 4, [1,5] );
SetEntrySCTable( T, 1, 5, [1,6] );
SetEntrySCTable( T, 2, 5, [1,5] );
SetEntrySCTable( T, 2, 6, [2,6] );
SetEntrySCTable( T, 3, 6, [1,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, "W(1;1):O(1;1)*" );
L!.arg := arg;
return L;
elif pos = 11 and Characteristic( F ) = 3 then
if Length( arg ) < 3 then
Error( "This is a parametrized family." );
fi;
# The algebras from Proposition 4.5
# b=0 a=arg[3]
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 2, 1, [-1,1,1,5] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 4, [1,4] );
SetEntrySCTable( T, 2, 5, [-1,5] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 3, 4, [1,5] );
SetEntrySCTable( T, 1, 4, [arg[3],6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,", String( Size( F )),
").H(", String( arg[3] ), ")" ));
L!.arg := arg;
return L;
elif pos = 12 and Characteristic( F ) = 3 then
# The two lie algebras from Theorem 5.4
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 2, 1, [-1,1,1,5] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 4, [1,4] );
SetEntrySCTable( T, 2, 5, [-1,5] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 3, 4, [1,5] );
SetEntrySCTable( T, 6, 1, [1,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,",
String( Size( F )), ").(",
LieAlgDBField2String( F ), "+",
LieAlgDBField2String( F ), "+",
LieAlgDBField2String( F ), ")(1)" ));
L!.arg := arg;
return L;
# the other algebra
elif pos = 13 and Characteristic( F ) = 3 then
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 2, 1, [-1,1,1,5] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 2, 4, [1,4] );
SetEntrySCTable( T, 2, 5, [-1,5] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 3, 4, [1,5] );
SetEntrySCTable( T, 6, 3, [1,4] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "sl(2,",
String( Size( F )), ").(",
LieAlgDBField2String( F ), "+",
LieAlgDBField2String( F ), "+",
LieAlgDBField2String( F ), ")(2)" ));
L!.arg := arg;
return L;
elif pos = 8 and Characteristic( F ) = 5 then
# W(1,1)+F
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 2, 4, [2,4] );
SetEntrySCTable( T, 2, 5, [3,5] );
SetEntrySCTable( T, 3, 4, [2,5] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;1)+",
LieAlgDBField2String( F )));
L!.arg := arg;
return L;
elif pos = 9 and Characteristic( F ) = 5 then
# central, Frattini extension of W(1,1)
T:= EmptySCTable( 6, Zero(F), "antisymmetric" );
SetEntrySCTable( T, 1, 2, [1,1] );
SetEntrySCTable( T, 1, 3, [1,2] );
SetEntrySCTable( T, 1, 4, [1,3] );
SetEntrySCTable( T, 1, 5, [1,4] );
SetEntrySCTable( T, 2, 3, [1,3] );
SetEntrySCTable( T, 2, 4, [2,4] );
SetEntrySCTable( T, 2, 5, [3,5] );
SetEntrySCTable( T, 3, 4, [2,5] );
SetEntrySCTable( T, 4, 5, [1,6] );
L := LieAlgebraByStructureConstants( F, T );
SetName( L, Concatenation( "W(1;1).",
LieAlgDBField2String( F )));
L!.arg := arg;
return L;
else
Error( "Argument out of range." );
fi;
fi;
else
return fail;
fi;
end );
BindGlobal( "VaughanLeeAlgebras", function( F, pars )
local T;
if not pars in [[7,1],[7,2],[8,1],[8,2],[9,1]] then
Error( "Invalid parameters!" );
fi;
T := EmptySCTable( pars[1], 0, "antisymmetric" );
if pars = [ 7, 1 ] then
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [1,4] );
SetEntrySCTable( T, 1, 4, [1,5] );
SetEntrySCTable( T, 1, 5, [1,6] );
SetEntrySCTable( T, 1, 6, [1,7] );
SetEntrySCTable( T, 1, 7, [1,1] );
SetEntrySCTable( T, 2, 7, [1,2] );
SetEntrySCTable( T, 3, 6, [1,2] );
SetEntrySCTable( T, 4, 5, [1,2] );
SetEntrySCTable( T, 4, 6, [1,3] );
SetEntrySCTable( T, 4, 7, [1,4] );
SetEntrySCTable( T, 6, 7, [1,6] );
return LieAlgebraByStructureConstants( F, T );
elif pars = [ 7, 2 ] then
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [1,1,1,4] );
SetEntrySCTable( T, 1, 4, [1,5] );
SetEntrySCTable( T, 1, 5, [1,6] );
SetEntrySCTable( T, 1, 6, [1,7] );
SetEntrySCTable( T, 2, 3, [1,2] );
SetEntrySCTable( T, 2, 5, [1,2,1,4] );
SetEntrySCTable( T, 2, 6, [1,5] );
SetEntrySCTable( T, 2, 7, [1,1,1,4] );
SetEntrySCTable( T, 3, 4, [1,2,1,4] );
SetEntrySCTable( T, 3, 5, [1,3] );
SetEntrySCTable( T, 3, 6, [1,1,1,4,1,6] );
SetEntrySCTable( T, 3, 7, [1,5] );
SetEntrySCTable( T, 4, 7, [1,6] );
SetEntrySCTable( T, 5, 6, [1,6] );
SetEntrySCTable( T, 5, 7, [1,7] );
return LieAlgebraByStructureConstants( F, T );
elif pars = [8,1] then
SetEntrySCTable( T, 1, 3, [1,5] );
SetEntrySCTable( T, 1, 4, [1,6] );
SetEntrySCTable( T, 1, 7, [1,2] );
SetEntrySCTable( T, 1, 8, [1,1] );
SetEntrySCTable( T, 2, 3, [1,7] );
SetEntrySCTable( T, 2, 4, [1,5,1,8] );
SetEntrySCTable( T, 2, 5, [1,2] );
SetEntrySCTable( T, 2, 6, [1,1] );
SetEntrySCTable( T, 2, 8, [1,2] );
SetEntrySCTable( T, 3, 6, [1,4] );
SetEntrySCTable( T, 3, 8, [1,3] );
SetEntrySCTable( T, 4, 5, [1,4] );
SetEntrySCTable( T, 4, 7, [1,3] );
SetEntrySCTable( T, 4, 8, [1,4] );
SetEntrySCTable( T, 5, 6, [1,6] );
SetEntrySCTable( T, 5, 7, [1,7] );
SetEntrySCTable( T, 6, 7, [1,8] );
return LieAlgebraByStructureConstants( F, T );
elif pars = [ 8, 2 ] then
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [1,2,1,5] );
SetEntrySCTable( T, 1, 4, [1,6] );
SetEntrySCTable( T, 1, 5, [1,2] );
SetEntrySCTable( T, 1, 6, [1,1,1,4,1,8] );
SetEntrySCTable( T, 1, 8, [1,4] );
SetEntrySCTable( T, 2, 3, [1,4] );
SetEntrySCTable( T, 2, 4, [1,1] );
SetEntrySCTable( T, 2, 5, [1,6] );
SetEntrySCTable( T, 2, 6, [1,2,1,7] );
SetEntrySCTable( T, 2, 7, [1,2,1,5] );
SetEntrySCTable( T, 3, 4, [1,2,1,7] );
SetEntrySCTable( T, 3, 5, [1,1,1,4,1,8] );
SetEntrySCTable( T, 3, 6, [1,1] );
SetEntrySCTable( T, 3, 7, [1,2,1,3] );
SetEntrySCTable( T, 3, 8, [1,1] );
SetEntrySCTable( T, 4, 5, [1,3] );
SetEntrySCTable( T, 4, 6, [1,2,1,4] );
SetEntrySCTable( T, 4, 7, [1,1,1,4,1,8] );
SetEntrySCTable( T, 4, 8, [1,3] );
SetEntrySCTable( T, 5, 6, [1,1,1,2,1,5] );
SetEntrySCTable( T, 5, 7, [1,3] );
SetEntrySCTable( T, 5, 8, [1,2,1,7] );
SetEntrySCTable( T, 6, 7, [1,4,1,6] );
SetEntrySCTable( T, 6, 8, [1,2,1,5] );
SetEntrySCTable( T, 7, 8, [1,6] );
return LieAlgebraByStructureConstants( F, T );
elif pars = [ 9, 1 ] then
SetEntrySCTable( T, 1, 2, [1,3] );
SetEntrySCTable( T, 1, 3, [1,5] );
SetEntrySCTable( T, 1, 5, [1,6] );
SetEntrySCTable( T, 1, 6, [1,7] );
SetEntrySCTable( T, 1, 7, [1,6,1,9] );
SetEntrySCTable( T, 1, 9, [1,2] );
SetEntrySCTable( T, 2, 3, [1,4] );
SetEntrySCTable( T, 2, 4, [1,6] );
SetEntrySCTable( T, 2, 6, [1,8] );
SetEntrySCTable( T, 2, 8, [1,6,1,9] );
SetEntrySCTable( T, 2, 9, [1,1] );
SetEntrySCTable( T, 3, 4, [1,7] );
SetEntrySCTable( T, 3, 5, [1,8] );
SetEntrySCTable( T, 3, 7, [1,1,1,8] );
SetEntrySCTable( T, 3, 8, [1,2,1,7] );
SetEntrySCTable( T, 4, 5, [1,6,1,9] );
SetEntrySCTable( T, 4, 6, [1,2,1,7] );
SetEntrySCTable( T, 4, 7, [1,3,1,6,1,9] );
SetEntrySCTable( T, 4, 9, [1,5] );
SetEntrySCTable( T, 5, 6, [1,1,1,8] );
SetEntrySCTable( T, 5, 8, [1,3,1,6,1,9] );
SetEntrySCTable( T, 5, 9, [1,4] );
SetEntrySCTable( T, 6, 7, [1,1,1,4,1,8] );
SetEntrySCTable( T, 6, 8, [1,2,1,5,1,7] );
SetEntrySCTable( T, 7, 8, [1,3,1,9] );
SetEntrySCTable( T, 7, 9, [1,8] );
SetEntrySCTable( T, 8, 9, [1,7] );
return LieAlgebraByStructureConstants( F, T );
fi;
end );
InstallMethod( AllSimpleLieAlgebras,
"for a finite field and a positive int",
true,
[ IsField and IsFinite, IsPosInt ],
0,
function( F, dim )
if dim in [1,2,4] then
return [];
elif dim = 3 then
return AsList( AllNonSolvableLieAlgebras( F, dim ));
elif dim = 5 and Characteristic( F ) = 5 then
return [ NonSolvableLieAlgebra( F, [5,3] ) ];
elif dim = 5 and Characteristic( F ) <> 5 then
return [];
elif dim = 6 then
return [ NonSolvableLieAlgebra( F, [6,2] ) ];
elif dim = 7 and F = GF(2) then
return [ VaughanLeeAlgebras( GF(2), [7,1] ),
VaughanLeeAlgebras( GF(2), [7,2] )];
elif dim = 8 and F = GF(2) then
return [ VaughanLeeAlgebras( GF(2), [8,1] ),
VaughanLeeAlgebras( GF(2), [8,2] ) ];
elif dim = 9 and F = GF( 2 ) then
return [ VaughanLeeAlgebras( GF( 2 ), [ 9, 1 ] )];
fi;
Error( "The list of simple Lie algebras is not available for these parameters." );
end );
[ Dauer der Verarbeitung: 0.43 Sekunden
(vorverarbeitet)
]
|