############################################################################ ## #W basic.gi QuaGroup Willem de Graaf ## ## ## Installs some global variables and operations to be used throughout. ##
############################################################################# ## #V QuantumField ## ## This is the field ${\bf Q}(q)$ over which all quantized enveloping ## algebras are defined. ## ##
BindGlobal( "QuantumField", Objectify( NewType(
CollectionsFamily( FamilyObj( _q ) ),
IsAttributeStoringRep and
IsField and
IsQuantumField and
IsRationalFunctionCollection ), rec() ) );
InstallMethod( \in, "for an object and a quantum field",
IsElmsColls,
[ IsObject, IsQuantumField ], 0, function( p, qf ) # all univariate rational functions with indeterminate q # are in the quantum field.
return IsUnivariateRationalFunction( p ) and
IndeterminateNumberOfUnivariateRationalFunction( p ) =
IndeterminateNumberOfUnivariateRationalFunction( _q ); end );
if a < 0then
return - Sum( List( [0..-a-1], i -> qp^(-a-2*i-1) ) )*qp^0; fi;
return Sum( List( [0..a-1], i -> qp^(a-2*i-1) ) )*qp^0; end );
InstallMethod( GaussianFactorial, "for an integer and a q-element",
true, [ IsInt, IsMultiplicativeElement ], 0, function( a, qp )
return Product( List( [1..a], i -> GaussNumber( i, qp ) ) )*qp^0; end );
InstallMethod( GaussianBinomial, "for two integers and a q-element",
true, [ IsInt, IsInt, IsMultiplicativeElement ], 0, function( a, n, qp )
local e;
e:= Product( List( [0..n-1], i -> GaussNumber( a-i, _q ) ) )*_q^0/
( Product( List( [2..n], i -> GaussNumber( i, _q ) ) )*_q^0 );
return Value( e, qp ); end );
############################################################################# ## #M WeightsAndVectors( <V> ) ##
InstallMethod( WeightsAndVectors, "for a module over a quantized uea", true,
[IsAlgebraModule], 0, function( V )
local U, vv, wts, vecs, R, noPosR, rank, Bil, k, v,
bas, wt, pos, get_exp;
get_exp:= function( pol )
# assume that pol is q^k; get k.
local en, ed, k;
en:= ExtRepNumeratorRatFun( pol )[1];
ed:= ExtRepDenominatorRatFun( pol )[1]; if en = [ ] then
k:= 0; else
k:= en[2]; fi; if ed <> [] then
k:= k-ed[2]; fi;
return k; end;
U:= LeftActingAlgebra( V ); if not IsQuantumUEA( U ) or not IsGenericQUEA(U) then
Error("<V> must be defined over a generic quantized uea"); fi;
# We only do the case where all basis elements of <V> are # weight vectors. This will be the most common case; the other case # will in general be very har (computationally).
vv:= BasisVectors( Basis( V ) );
wts:= [ ];
vecs:= [ ];
R:= RootSystem( U );
noPosR:= Length( PositiveRoots( R ) );
rank:= Length( CartanMatrix( R ) );
Bil:= BilinearFormMatNF( R );
k:= GeneratorsOfAlgebra( U ){[noPosR+1,noPosR+3..noPosR+2*rank-1]};
for v in vv do
bas:= Basis( VectorSpace( LeftActingDomain(V), [v] ), [v] );
wt:= List( [1..rank], i -> 2*get_exp( Coefficients(bas,k[i]^v)[1] )/
Bil[i][i] ); if fail in wt then
Error("Not all basis vectors of <V> are weight vectors"); fi;
pos:= Position( wts, wt ); if pos = fail then
Add( wts, wt );
Add( vecs, [ v ] ); else
Add( vecs[pos], v ); fi;
od;
return [ wts, vecs ]; end );
############################################################################# ## #M HighestWeightsAndVectors( <V> ) ##
InstallMethod( HighestWeightsAndVectors, "for a f.d. module over a quantized uea", true,
[IsAlgebraModule], 0, function( V )
local www, U, R, pos, ee, wts, vecs, i, eqs, j, b, v,
sol, lst, eqs1;
www:= WeightsAndVectors( V );
# for the dominant weights calculate the simultaneous null space # of the Ei.
U:= LeftActingAlgebra( V );
R:= RootSystem( U );
pos:= List( SimpleSystemNF(R), x -> Position(
PositiveRootsInConvexOrder(R), x ) );
ee:= List( pos, x -> GeneratorsOfAlgebra( U )[ Length(PositiveRoots(R))+ 2*Length( CartanMatrix(R) ) + x ] );
wts:= [ ]; vecs:= [ ];
for i in [1..Length(www[1])] do
if ForAll( www[1][i], x -> x >=0 ) then # dominant weight...
eqs:= [ ]; for j in [1..Length(ee)] do
pos:= Position( www[1], www[1][i]+
SimpleRootsAsWeights( R )[j] ); if pos <> fail then # Otherwise e_j acts as zero anyway.
eqs1:= [ ];
b:= Basis( VectorSpace( LeftActingDomain(V),
www[2][pos] ), www[2][pos] ); for v in www[2][i] do
Add( eqs1, Coefficients( b, ee[j]^v ) );
od;
Append( eqs, TransposedMat( eqs1 ) ); fi;
od;
eqs:= TransposedMat( eqs ); if eqs = [ ] then
Add( wts, www[1][i] );
Add( vecs, www[2][i] ); else
sol:= NullspaceMat( eqs ); if sol <> [] then
Add( wts, www[1][i] );
lst:= []; for v in sol do
Add( lst, v*www[2][i] );
od;
Add( vecs, lst ); fi; fi; fi;
od;
return [ wts, vecs ]; end );
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.20 Sekunden
(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.