############################################################################ ## #W paths.gi QuaGroup Willem de Graaf ## ## ## Implementation of methods for LS-paths. ##
############################################################################# ## #M Falpha( <p>, <i> ) ##
InstallMethod( Falpha, "for an LS path and an integer", true,
[ IsLSPath, IsInt ], 0, function( p, alpha )
# Here path is an L-S path, represented as # [ [w1, w2,..., ws], [a0=0, a1, a2, ..., as=1] ] # We apply the root operator f_{\alpha}. # alpha is represented by the index in which it occurs # in the list of simple roots.
local path, R, s, h, i, m_a, j, k, eta, x, w, res,
word;
path:= LSSequence( p );
R:= FamilyObj( p )!.rootSystem;
s:= Length( path[1] );
h:= [0]; for i in [1..s] do
Add( h, h[i] + (path[2][i+1]-path[2][i])*path[1][i][alpha] );
od;
m_a:= Minimum( h );
j:= Length(h); while h[j] <> m_a do j:= j-1; od;
k:= j+1; while k <= Length( h ) and h[k] < m_a + 1do
k:= k+1;
od;
if k > Length(h) then return fail; fi;
if h[k] = h[j] + 1then
eta:= List( path, ShallowCopy ); for i in [j..k-1] do
eta[1][i]:= ShallowCopy( eta[1][i] );
ApplySimpleReflection( SparseCartanMatrix(WeylGroup(R)),
alpha, eta[1][i] );
od; else
x:= path[2][k-1] + (1/path[1][k-1][alpha])*(h[j]+1-h[k-1]);
eta:= [ [], [] ]; for i in [1..j-1] do
Add( eta[1], path[1][i] );
Add( eta[2], path[2][i] );
od; for i in [j..k-1] do
w:= ShallowCopy( path[1][i] );
ApplySimpleReflection( SparseCartanMatrix(WeylGroup(R)),
alpha, w );
Add( eta[1], w );
Add( eta[2], path[2][i] );
od;
Add( eta[1], path[1][k-1] );
Add( eta[2], x ); for i in [k..s] do
Add( eta[1], path[1][i] );
Add( eta[2], path[2][i] );
od;
Add( eta[2], path[2][s+1] ); fi;
for i in [1..Length(eta[1])-1] do if eta[1][i] = eta[1][i+1] then
Unbind( eta[1][i] );
Unbind( eta[2][i+1] ); fi;
od;
eta[1]:= Filtered( eta[1], x -> IsBound(x) );
eta[2]:= Filtered( eta[2], x -> IsBound(x) );
word:= ShallowCopy( WeylWord( p ) ); if j = 1then
word:= [ alpha ];
Append( word, WeylWord( p ) ); else
word:= ShallowCopy( WeylWord( p ) ); fi;
res:= rec();
ObjectifyWithAttributes( res, TypeObj( p ),
WeylWord, word,
EndWeight, EndWeight( p ) - SimpleRootsAsWeights(R)[alpha],
LSSequence, eta );
return res;
end );
############################################################################# ## #M Ealpha( <p>, <i> ) ##
InstallMethod( Ealpha, "for an LS path and an integer", true,
[ IsLSPath, IsInt ], 0, function( p, alpha )
# Here path is an L-S path, represented as # [ [w1, w2,..., ws], [a0=0, a1, a2, ..., as=1] ] # We apply the root operator f_{\alpha}. # alpha is represented by the index in which it occurs # in the list of simple roots.
local path, R, s, h, i, m_a, j, k, eta, x, w, res,
word;
path:= LSSequence( p );
R:= FamilyObj( p )!.rootSystem;
s:= Length( path[1] );
h:= [0]; for i in [1..s] do
Add( h, h[i] + (path[2][i+1]-path[2][i])*path[1][i][alpha] );
od;
m_a:= Minimum( h );
j:= 1; while h[j] <> m_a do j:= j+1; od;
k:= j-1; while k > 0 and h[k] < m_a + 1do
k:= k-1;
od;
if k = 0then return fail; fi;
if h[k] = h[j] + 1then
eta:= List( path, ShallowCopy ); for i in [k..j-1] do
eta[1][i]:= ShallowCopy( eta[1][i] );
ApplySimpleReflection( SparseCartanMatrix(WeylGroup(R)),
alpha, eta[1][i] );
od; else
x:= path[2][k] + (1/path[1][k][alpha])*(h[j]+1-h[k]);
eta:= [ [ ], [ 0 ] ]; for i in [1..k-1] do
Add( eta[1], path[1][i] );
Add( eta[2], path[2][i+1] );
od;
Add( eta[1], path[1][k] );
Add( eta[2], x ); for i in [k..j-1] do
w:= ShallowCopy( path[1][i] );
ApplySimpleReflection( SparseCartanMatrix(WeylGroup(R)),
alpha, w );
Add( eta[1], w );
Add( eta[2], path[2][i+1] );
od; for i in [j..s] do
Add( eta[1], path[1][i] );
Add( eta[2], path[2][i+1] );
od; fi;
for i in [1..Length(eta[1])-1] do if eta[1][i] = eta[1][i+1] then
Unbind( eta[1][i] );
Unbind( eta[2][i+1] ); fi;
od;
eta[1]:= Filtered( eta[1], x -> IsBound(x) );
eta[2]:= Filtered( eta[2], x -> IsBound(x) );
word:= ShallowCopy( WeylWord( p ) ); if k = 1 and h[k] = m_a + 1then
word:= Reversed( WeylWord( p ) );
word:= ExchangeElement( WeylGroup(R), word, alpha );
word:= Reversed( word ); else
word:= ShallowCopy( WeylWord( p ) ); fi;
res:= rec();
ObjectifyWithAttributes( res, TypeObj( p ),
WeylWord, word,
EndWeight, EndWeight( p ) + SimpleRootsAsWeights(R)[alpha],
LSSequence, eta );
for k in [1..Length(lastlev)] do for i in [1..rk] do
path:= Falpha( lastlev[k], i ); if path <> fail then
pos:= Position( curlev, path ); if pos = fail then
Add( points, path );
nopoints:= nopoints+1;
Add( curlev, path );
Add( curpos, nopoints );
Add( edges, [ [lastpos[k],nopoints], i ] ); else
Add( edges, [ [lastpos[k],curpos[pos]], i ] ); fi; fi;
od;
od;
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.