############################################################################# ## #W diymod.gi QuaGroup Willem de Graaf ## ## ## A function for entering a module over a quantized enveloping algebra. ##
# Here V is a DIY U-module, # s the number of positive roots, # rank the rank of the root system, # B is the matrix of the bilinear form, # posR is the list of pos roots in convex order # actlist a list describing the actions of the generators, # x an element of U, # u0 an element of V; # this function returns x^u0.
local v, rel, k, w, lemon, r, pos, exp, i, cfs, t, qp, rtpos;
v:= Zero( V );
rel:= ExtRepOfObj( x ); for k in [1,3..Length(rel)-1] do
w:= u0;
lemon:= Length(rel[k]); for r in [lemon-1,lemon-3..1] do if IsZero( w ) then break; fi;
if IsList( rel[k][r] ) then # it is a `K'; special treatment for the binomial expressions.
pos:= rel[k][r][1];
qp:= _q^( B[pos-s][pos-s]/2 ); for i in [1..rel[k][r+1]] do if IsZero( w ) then break; fi;
cfs:= Coefficients( Basis(V), w );
w:= Zero( V ); for t in [1..Length(cfs)] do if cfs[t]<>0*cfs[t] and
IsBound( actlist[ pos ][t] ) then
w:= w+cfs[t]*(1/(qp^i-qp^(-i)))*
( qp^(-i+1)*actlist[pos][t] -
qp^(i-1)*actlist[pos+rank][t] ); fi;
od;
od; if rel[k][r][2] > 0then # act also with lone K_{\alpha}:
cfs:= Coefficients( Basis(V), w );
w:= Zero( V ); for t in [1..Length(cfs)] do if cfs[t]<>0*cfs[t] and
IsBound( actlist[ pos ][t] ) then
w:= w+cfs[t]*actlist[pos][t]; fi;
od; fi; else
# `pos' will be the position in the list `actlist' corr # to the variable `rel[k][r]'; # `exp' will be the exponent with which it occurs. # `rtpos' ill be the position of the corr pos root in posR. if rel[k][r] <= s then # it is an F...
pos:= rel[k][r];
rtpos:= pos;
exp:= rel[k][r+1]; else # it is an E...
pos:= rel[k][r]+rank;
rtpos:= rel[k][r]-s-rank;
exp:= rel[k][r+1]; fi;
for i in [1..exp] do if IsZero( w ) then break; fi;
cfs:= Coefficients( Basis(V), w );
w:= Zero( V ); for t in [1..Length(cfs)] do if cfs[t]<>0*cfs[t] and
IsBound( actlist[ pos ][t] ) then
w:= w+cfs[t]*actlist[pos][t]; fi;
od;
od; # need to divide by [exp]!
qp:= _q^( posR[rtpos]*( B*posR[rtpos] )/2 );
w:= w/GaussianFactorial( exp, qp ); fi;
od;
v:= v+rel[k+1]*w;
od;
return v;
end;
QGPrivateFunctions.CompleteActList:= function( U, V, acts )
# Here V is a U-module, and atcs is a list of lists, of length 4*l, # where l is the rank of te root system. acts describes the actions # of the generators [F_1,...,F_l,K_1,...,K_l,K_1^-1,...,K_l^-1, # E_1,...,E_l ]. The action of each generator is described by a list # of length dim V, giving the images as elts of V; the zero elements # may be omitted: in that case there is a `hole' in the list. # This funtion returns a list with the actions of all PBW-generators.
# find a simple root r such that posR[i]-r is also a root for k in [1..rank ] do
k1:= Position( convR, posR[i] - sim[k] ); if k1 <> fail then
k2:= Position( convR, sim[k] ); if k1 > k2 then
pair:= [ k1, k2 ]; else
pair:= [ k2, k1 ]; fi;
rel:= List( fam!.multTab[pair[1]][pair[2]], ShallowCopy );
# see whether F_i is in there...
pos:= Position( rel, [ Position( convR, posR[i] ), 1 ] ); if pos <> fail then
break; fi;
fi;
od;
# F_i is in `rel'; we get it out
cf:= rel[ pos+1];
Unbind( rel[pos] ); Unbind( rel[pos+1] );
rel:= Filtered( rel, x -> IsBound(x) );
for k in [2,4..Length(rel)] do
rel[k]:= -(1/cf)*rel[k];
od;
# Now compute the action of `rel' (which is the same as # the action of F_i).
aa:= [ ]; for j in [1..Length(basV)] do
v:= Zero( V ); for k in [1,3..Length(rel)-1] do
w:= basV[j];
lemon:= Length(rel[k]); for r in [lemon-1,lemon-3..1] do if IsZero( w ) then break; fi; for x in [1..rel[k][r+1]] do if IsZero( w ) then break; fi;
cfs:= Coefficients( Basis(V), w );
w:= Zero( V ); for t in [1..Length(cfs)] do if IsBound( actlist[ rel[k][r] ][t] ) then
w:= w+cfs[t]*actlist[rel[k][r]][t]; fi;
od;
od; if rel[k][r+1] > 1then
qa:= convR[ rel[k][r] ]*( B*convR[ rel[k][r] ] );
w:= w/GaussianFactorial( rel[k][r+1], qa ); fi;
od;
v:= v+rel[k+1]*w;
od; if not IsZero( v ) then
aa[j]:= v; fi;
od;
# find a simple root r such that posR[i]-r is also a root for k in [1..rank ] do
k1:= Position( convR, posR[i] - sim[k] ); if k1 <> fail then
k2:= Position( convR, sim[k] );
if k1 > k2 then
pair:= [ s+rank+k1, s+rank+k2 ]; else
pair:= [ s+rank+k2, s+rank+k1 ]; fi;
rel:= List( fam!.multTab[pair[1]][pair[2]], ShallowCopy ); # See whether E_i is in rel:
pos:= Position( rel, [ Position( convR, posR[i] )+s+rank, 1 ] ); if pos <> fail then
break; fi; fi;
od;
# E_i is in `rel'; we get it out
cf:= rel[ pos+1];
Unbind( rel[pos] ); Unbind( rel[pos+1] );
rel:= Filtered( rel, x -> IsBound(x) );
for k in [2,4..Length(rel)] do
rel[k]:= -(1/cf)*rel[k];
od;
aa:= [ ]; for j in [1..Length(basV)] do
v:= Zero( V ); for k in [1,3..Length(rel)-1] do
w:= basV[j];
lemon:= Length(rel[k]); for r in [lemon-1,lemon-3..1] do if IsZero( w ) then break; fi; # `pos' will be the psition of the action descr # of generator with number rel[k][r], in the list # `actlist'.
pos:= rel[k][r]+rank; for x in [1..rel[k][r+1]] do if IsZero( w ) then break; fi;
cfs:= Coefficients( Basis(V), w );
w:= Zero( V ); for t in [1..Length(cfs)] do if IsBound( actlist[ pos ][t] ) then
w:= w+cfs[t]*actlist[pos][t]; fi;
od;
od; if rel[k][r+1] > 1then
qa:= convR[ rel[k][r]-s-rank ]*(
B*convR[ rel[k][r]-s-rank ] );
w:= w/GaussianFactorial( rel[k][r+1], qa ); fi;
od;
v:= v+rel[k+1]*w;
od; if not IsZero( v ) then
aa[j]:= v; fi;
od;
InstallMethod( DIYModule, "for a quantum uea, a vector space, and a list",
true, [ IsQuantumUEA, IsLeftModule, IsList ], 0,
function( U, V, acts )
local R, s, rank, aa, f, B, posR;
R:= RootSystem( U );
B:= BilinearFormMatNF( R );
s:= Length( PositiveRoots( R ) );
rank:= Length( CartanMatrix( R ) );
posR:= PositiveRootsInConvexOrder( R );
aa:= QGPrivateFunctions.CompleteActList( U, V, acts );
f:= function( x, u ) return
QGPrivateFunctions.DIYAction( V, s, rank, B, posR, aa, x, u ); end;
return LeftAlgebraModule( U, f, V );
end );
Messung V0.5 in Prozent
¤ 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.0.25Bemerkung:
(vorverarbeitet am 2026-10-11)
¤
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.