InstallMethod( HighestWeightVector, "for an irreducible highest weight module",
true, [ IsAlgebraModule and IsLeftAlgebraModuleElementCollection ], 0, function( V )
local L, K, R, e, m, c, sp;
if HasBasis(V) and IsWeightRepElement( Basis(V)[1]![1] ) then
return Basis(V)[1]; fi;
K:= LeftActingAlgebra( V );
R:= RootSystem(K); if R = fail then return fail; fi;
e:= CanonicalGenerators( R )[1];
m:= List( e, u -> TransposedMatDestructive( MatrixOfAction( Basis(V), u )));
m:= List( [1..Dimension(V)], i -> Concatenation( List( m, u -> u[i] ) ) );
c:= NullspaceMatDestructive(m);
sp:= Subspace( V, List( c, u -> u*Basis(V) ), "basis" ); if Dimension( sp ) > 1then return fail; fi;
return Basis(sp)[1];
end );
InstallMethod( IsIrreducibleHWModule, "for an algebra module",
true, [ IsAlgebraModule and IsLeftAlgebraModuleElementCollection ], 0, function( V )
return HighestWeightVector(V) <> fail;
end );
InstallMethod( HighestWeight, "for an irreducible highest weight module",
true, [ IsAlgebraModule and IsLeftAlgebraModuleElementCollection ], 0, function( V )
local L, h, v0, b;
L:= LeftActingAlgebra(V);
h:= CanonicalGenerators( RootSystem(L) )[3];
v0:= HighestWeightVector( V ); if v0 = fail then return fail; fi;
b:= Basis( Subspace( V, [v0] ), [v0] );
return List( h, u -> Coefficients( b, u^v0 )[1] );
end );
InstallMethod( DirectSumDecomposition, "for a module over a semisimple Lie algebra",
true, [ IsAlgebraModule and IsLeftAlgebraModuleElementCollection], 0,
function( V )
local L, R, e, sp, x, m, c, sp0, K, h, U, es, u, M, b, hw;
K:= LeftActingAlgebra( V );
R:= RootSystem(K); if R = fail then return fail; fi;
e:= CanonicalGenerators( R )[1];
m:= List( e, u -> TransposedMatDestructive( MatrixOfAction( Basis(V), u )));
m:= List( [1..Dimension(V)], i -> Concatenation( List( m, u -> u[i] ) ) );
c:= NullspaceMatDestructive(m);
sp:= Subspace( V, List( c, u -> u*Basis(V) ), "basis" );
# in sp find a basis of weight vectors
h:= CanonicalGenerators( R )[3];
sp:= [ sp ]; for x in h do
sp0:= [ ]; for U in sp do
m:= List( Basis(U), a -> Coefficients( Basis(U), x^a ) );
es:= Eigenspaces(LeftActingDomain(K),m);
Append( sp0, List( es, M -> Subspace( V, List( Basis(M), v ->
v*Basis(U) ) ) ) );
od;
sp:= sp0;
od;
sp0:= [ ]; for U in sp do
u:= Basis(U)[1];
b:= Basis( Subspace( V, [u] ), [u] );
hw:= List( h, s -> Coefficients( b, s^u )[1] ); for u in Basis(U) do
M:= SubAlgebraModule( V, [u] );
SetIsIrreducibleHWModule( M, true );
SetHighestWeightVector( M, u );
SetHighestWeight( M, hw );
Add( sp0, M );
od;
od;
return sp0;
end );
SLAfcts.canbasofhwrep:= function( V )
local L, R, hw, cg, paths, strings, p, p1, word, k, b,
st, i, j, a, y, v, bas, s1, i1, n1, w, sim, pos, posR, yy,
weylwordNF, e, sp, x, m, c, sp0, h, H, t0, s0, sw, wts;
weylwordNF:= function( R, path )
local w, rho, wt, w1; # the WeylWord in lex shortest form...
w:= WeylWord( path );
rho:= List( [1..Length( CartanMatrix(R))], x -> 1 );
wt:= ApplyWeylElement( WeylGroup(R), rho, w );
w1:= ConjugateDominantWeightWithWord( WeylGroup(R), wt )[2];
return w1; end;
L:= LeftActingAlgebra( V );
R:= RootSystem( L );
h:= CanonicalGenerators( R )[3];
hw:= HighestWeight( V );
cg:= CrystalGraph( R, hw );
paths:= cg.points; # For every path we compute its adapted string.
strings:= [ ]; for p in paths do
p1:= p;
st:= [];
word:= weylwordNF( R, p1 ); while word <> [] do
j:= 0;
k:= word[1]; while WeylWord( p1 ) <> [] and word[1] = k do
p1:= Ealpha( p1, k );
word:= weylwordNF( R, p1 );
j:= j+1;
od; if j > 0then
Add( st, k );
Add( st, j ); fi;
od;
Add( strings, st );
od;
y:= ChevalleyBasis( L )[2];
sim:= SimpleSystem( R );
posR:= PositiveRoots( R );
yy:= []; for a in sim do
pos:= Position( posR, a );
Add( yy, y[pos] );
od;
y:= yy;
sw:= SimpleRootsAsWeights(R);
bas:= [ HighestWeightVector(V) ];
wts:= [ HighestWeight(V) ];
for i in [2..Length(strings)] do
s1:= ShallowCopy( strings[i] );
i1:= s1[1];
n1:= s1[2]; if n1 > 1then
s1[2]:= n1-1; else
Unbind( s1[1] ); Unbind( s1[2] );
s1:= Filtered( s1, x -> IsBound(x) ); fi;
pos:= Position( strings, s1 );
w:= bas[pos];
w:= yy[i1]^w;
w:= w/n1;
Add( bas, w );
Add( wts, wts[pos]-sw[i1] );
od;
return [bas,wts]; end;
InstallMethod( Basis, "for an irreducible highest weight module",
true, [ IsFreeLeftModule and IsLeftAlgebraModuleElementCollection and
IsIrreducibleHWModule], 0, function( V )
local vecs;
vecs:= SLAfcts.canbasofhwrep( V )[1];
return BasisOfAlgebraModule( V, vecs );
end );
InstallMethod( IsomorphismOfIrreducibleHWModules, "for two irreducible highest weight modules",
true, [ IsAlgebraModule and IsLeftAlgebraModuleElementCollection,
IsAlgebraModule and IsLeftAlgebraModuleElementCollection ], 0, function( V1, V2 )
local b1, b2;
if not (IsIrreducibleHWModule(V1) and IsIrreducibleHWModule(V2)) then
return fail; fi;
if HighestWeight(V1) <> HighestWeight(V2) then
return fail; fi;
local t, en, type, i, b, s, rank, offset, bound,lv;
t:= CartanType(C); for lv in [1..Length(t.enumeration)] do if not lv = 1then Print("\n"); fi;
en:= t.enumeration[lv]; if Length(labs) > 0then en:= labs{en}; fi;
rank:= Length(en);
type:= t.types[lv][1];
if type ="D"then
offset:= Length(en)+ 3*(rank-3)+3; if rank > 9then offset:= offset+2; fi;
s:= ""; for i in [1..offset] do Append( s, " "); od;
Append(s," ");
Append( s, String(en[rank-1]) );
Append(s,"\n");
Print(s);
s:= ""; for i in [1..offset] do Append( s, " "); od;
Append( s, "/\n" );
Print(s); fi;
if type ="E"then
offset:= 12;
s:= ""; for i in [1..offset] do Append( s, " "); od;
Append( s, " " );
Append( s, String(en[2]) );
Append(s,"\n");
Print(s);
s:= " "; for i in [1..offset] do Append( s, " "); od;
Append( s, "|\n" );
Print(s); fi;
Print( t.types[lv][1], t.types[lv][2], ": " ); if type in ["A","B","C","F","G","E"] then
bound:= rank; elif type = "D"then
bound:= rank-2; fi; for i in [1..bound] do if type <> "E" or i <> 2then
Print(en[i]); fi;
if i < Length(en) then
if type = "A" or (type in ["B","C"] and i < Length(en)-1)
or (type = "D" and i < Length(en)-2) or (type="E" and i <> 2)
or (type = "F" and i in [1,3] ) then
Print( "---"); elif type in ["B","C"] and i = Length(en)-1then if type = "B"then
Print("=>="); else
Print("=<="); fi; elif type = "G"then
Print("#<#"); elif type ="F" and i=2then
Print("=>="); fi; fi;
od;
if type ="D"then
s:= "\n"; for i in [1..offset] do Append( s, " "); od;
Append( s, "\\\n" );
Print(s); #offset:= Length(en) + 3*(rank-3)+3;
s:= ""; for i in [1..offset] do Append( s, " "); od;
Append(s," ");
Append( s, String(en[rank]) );
Append(s,"\n");
Print(s); fi;
od;
end;
InstallMethod( DisplayHighestWeight, "for an irred Lie algebra module",
true, [ IsAlgebraModule and IsLeftAlgebraModuleElementCollection], 0, function( V )
local C, hw;
if not IsIrreducibleHWModule(V) then
Print("<V> is not an irreducible highest weight module"); else
C:= CartanMatrix( RootSystem(LeftActingAlgebra(V) ) );
hw:= HighestWeight(V);
SLAfcts.printdyndiag(C,hw); fi; end);
InstallMethod( DisplayDynkinDiagram, "for a Cartan matrix",
true, [ IsMatrix ], 0, function( C )
SLAfcts.printdyndiag(C,[]); end);
InstallOtherMethod( DisplayDynkinDiagram, "for a root system",
true, [ IsRootSystem ], 0, function( R )
SLAfcts.printdyndiag(CartanMatrix(R),[]); end);
InstallOtherMethod( DisplayDynkinDiagram, "for a semisimple Lie algebra",
true, [ IsLieAlgebra ], 0, function( L )
WeightSpacesOfIrreduciblewHWModule:= function( V )
local a, vv, wts, wts0, sp, w, ii;
if HasBasis(V) and IsWeightRepElement( Basis(V)[1]![1] ) then
vv:= BasisVectors( Basis(V) );
wts:= Set( List( vv, x -> x![1]![1][1][3] ) );
sp:= [ ]; for w in wts do
Add( sp, Subspace(V,Filtered( vv, x -> x![1]![1][1][3]=w),"basis"));
od;
return [ wts, sp ]; fi;
a:= SLAfcts.canbasofhwrep( V );
vv:= a[1];
wts:= a[2];
wts0:= Set( wts );
sp:= [ ]; for w in wts0 do
ii:= Filtered( [1..Length(wts)], i -> wts[i]=w );
Add( sp, Subspace(V,vv{ii},"basis"));
od;
return [ wts0, sp ];
end;
InstallMethod( DualAlgebraModule, "for a left module over a Lie algebra", true,
[ IsAlgebraModule and IsLeftAlgebraModuleElementCollection ], 0, function( M )
local L, Mstr, act, Bst, sp, bas, ff, aa, R, y, k, rhs, sol, Vst;
L:= LeftActingAlgebra( M ); if not IsLieAlgebra( L ) then TryNextMethod(); fi;
Mstr:= DualSpace( M );
act:= function( x, v ) # x in L, v in Mstr
local bM, c, ev, k, a, pos;
bM:= FamilyObj(v)!.basisV;
c:= List( [1..Dimension(M)], x -> Zero(LeftActingDomain(L)) );
ev:= ExtRepOfObj(v); for k in [1,3..Length(ev)-1] do
pos:= Position( bM, ev[k+1] );
c[pos]:= ev[k];
od;
a:= []; for k in [1..Dimension(M)] do
a[k]:= -c*Coefficients( bM, x^bM[k] );
od;
return a*Basis(Mstr);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.