Skip to content

Commit

Permalink
Modified DecomposeTensorProduct to optimise computations
Browse files Browse the repository at this point in the history
This now returns a sorted list of weight vectors
  • Loading branch information
wagh authored and fingolfin committed Oct 26, 2022
1 parent ecad30b commit 143300b
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 7 deletions.
6 changes: 3 additions & 3 deletions lib/lierep.gd
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,7 @@ DeclareOperation( "DominantCharacter", [ IsRootSystem, IsList ] );
## with highest weight <M>w_i</M> for <M>i = 1, 2</M>.
## Let <M>W = V_1 \otimes V_2</M>.
## Then in general <M>W</M> is a reducible <A>L</A>-module. Now this function
## returns a list of two lists. The first of these is the list of highest
## returns a list of two lists. The first of these is the sorted list of highest
## weights of the irreducible modules occurring in the decomposition of
## <M>W</M> as a direct sum of irreducible modules. The second list contains
## the multiplicities of these weights (i.e., the number of copies of
Expand Down Expand Up @@ -587,8 +587,8 @@ DeclareOperation( "DecomposeTensorProduct", [ IsLieAlgebra, IsList, IsList ] );
## [ [ [ 1, 1, 0, 0 ], [ 2, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ],
## [ 1, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], [ 1, 1, 4, 6, 14, 21 ] ]
## gap> DecomposeTensorProduct( L, [ 1, 0, 0, 0 ], [ 0, 0, 1, 0 ] );
## [ [ [ 1, 0, 1, 0 ], [ 1, 0, 0, 0 ], [ 0, 0, 0, 1 ], [ 0, 1, 0, 0 ],
## [ 2, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 1, 1, 0, 0 ] ],
## [ [ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ],
## [ 1, 0, 1, 0 ], [ 1, 1, 0, 0 ], [ 2, 0, 0, 0 ] ],
## [ 1, 1, 1, 1, 1, 1, 1 ] ]
## gap> DimensionOfHighestWeightModule( L, [ 1, 2, 3, 4 ] );
## 79316832731136
Expand Down
8 changes: 4 additions & 4 deletions lib/lierep.gi
Original file line number Diff line number Diff line change
Expand Up @@ -1306,10 +1306,10 @@ InstallMethod( DecomposeTensorProduct,

nu:= mu[1]-rho;
mult:= ch1[2][i]*( (-1)^Length(mu[2]) );
p:= Position( wts, nu );
if p = fail then
Add( wts, nu );
Add( mlts, mult );
p:= PositionSorted( wts, nu );
if not IsBound( wts[p] ) or wts[p] <> nu then
Add( wts, nu, p );
Add( mlts, mult, p );
else
mlts[p]:= mlts[p]+mult;
if mlts[p] = 0 then
Expand Down
29 changes: 29 additions & 0 deletions tst/testinstall/algsc.tst
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#@local T0,T1,T2,T3,a,b,c,coeff,der,e,fam,g,gens,i,id,j,k,l1,l2,l3,lcs,orb
#@local TestMonomialUseLattice_Orig,permgrp,ps,q,s,s1,s2,s3,sc,t,theta
#@local U,ucs,v,vecs,vectors,w,z,A,V,W
#@local L,l
gap> START_TEST("algsc.tst");

#############################################################################
Expand Down Expand Up @@ -218,6 +219,34 @@ gap> LieCentralizer( l1, ps );
gap> LieNormalizer( l1, ps );
<Lie algebra of dimension 4 over Rationals>

# Test added for DecomposeTensorProduct
gap> L := SimpleLieAlgebra( "A", 3, Rationals );;
gap> v := [1,3,1];;
gap> w := [4,1,4];;
gap> l := DecomposeTensorProduct( L, v, w );
[ [ [ 0, 0, 8 ], [ 0, 1, 6 ], [ 0, 2, 4 ], [ 0, 2, 8 ], [ 0, 3, 2 ],
[ 0, 3, 6 ], [ 0, 4, 0 ], [ 0, 4, 4 ], [ 0, 5, 2 ], [ 0, 6, 0 ],
[ 1, 0, 5 ], [ 1, 0, 9 ], [ 1, 1, 3 ], [ 1, 1, 7 ], [ 1, 2, 1 ],
[ 1, 2, 5 ], [ 1, 3, 3 ], [ 1, 3, 7 ], [ 1, 4, 1 ], [ 1, 4, 5 ],
[ 1, 5, 3 ], [ 1, 6, 1 ], [ 2, 0, 6 ], [ 2, 1, 4 ], [ 2, 1, 8 ],
[ 2, 2, 2 ], [ 2, 2, 6 ], [ 2, 3, 0 ], [ 2, 3, 4 ], [ 2, 4, 2 ],
[ 2, 4, 6 ], [ 2, 5, 0 ], [ 2, 5, 4 ], [ 2, 6, 2 ], [ 3, 0, 3 ],
[ 3, 0, 7 ], [ 3, 1, 1 ], [ 3, 1, 5 ], [ 3, 2, 3 ], [ 3, 2, 7 ],
[ 3, 3, 1 ], [ 3, 3, 5 ], [ 3, 4, 3 ], [ 3, 5, 1 ], [ 3, 5, 5 ],
[ 3, 6, 3 ], [ 4, 0, 4 ], [ 4, 0, 8 ], [ 4, 1, 2 ], [ 4, 1, 6 ],
[ 4, 2, 0 ], [ 4, 2, 4 ], [ 4, 3, 2 ], [ 4, 3, 6 ], [ 4, 4, 0 ],
[ 4, 4, 4 ], [ 4, 5, 2 ], [ 5, 0, 1 ], [ 5, 0, 5 ], [ 5, 1, 3 ],
[ 5, 1, 7 ], [ 5, 2, 1 ], [ 5, 2, 5 ], [ 5, 3, 3 ], [ 5, 4, 1 ],
[ 5, 4, 5 ], [ 5, 5, 3 ], [ 6, 0, 2 ], [ 6, 0, 6 ], [ 6, 1, 0 ],
[ 6, 1, 4 ], [ 6, 2, 2 ], [ 6, 2, 6 ], [ 6, 3, 0 ], [ 6, 3, 4 ],
[ 6, 4, 2 ], [ 7, 0, 3 ], [ 7, 1, 1 ], [ 7, 1, 5 ], [ 7, 2, 3 ],
[ 7, 3, 1 ], [ 8, 0, 0 ], [ 8, 0, 4 ], [ 8, 1, 2 ], [ 8, 2, 0 ],
[ 9, 0, 1 ] ],
[ 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 4, 1, 5, 5, 1, 4, 2, 2, 1, 3, 4,
2, 4, 5, 2, 6, 5, 1, 2, 2, 1, 1, 3, 1, 6, 7, 2, 5, 5, 5, 2, 1, 1, 3, 1,
4, 4, 2, 7, 6, 2, 2, 4, 2, 1, 3, 6, 1, 5, 4, 5, 2, 1, 1, 3, 1, 2, 4, 5,
1, 2, 2, 1, 3, 4, 1, 2, 1, 1, 1, 2, 1, 1 ] ]

# use AsAlgebra etc.
gap> KappaPerp( l1, ps );
<vector space of dimension 6 over Rationals>
Expand Down

0 comments on commit 143300b

Please sign in to comment.