Irreducible representations of the symmetric group in GAP

109 Views Asked by At

I try to find the irreducible representation of the symmetric group (over the complex numbers) in a quick way using GAP. I made the following program that gives the irreducible representation corresponding to a partition:

DeclareOperation("allirredrepsofsymmetricgroup",[IsList]);

InstallMethod(allirredrepsofsymmetricgroup, "for a representation of a quiver", [IsList],0,function(LIST)

local n,U,g,tbl,irr,W,i,WW;

n:=LIST[1];

U:=Partitions(n);g:= SymmetricGroup( n );SetName( g, "Sn" );tbl:= CharacterTable( g );irr:= Irr( g );W:=[];for i in [1..Size(U)] do Append(W,[[U[i],irr[i]]]);od;

WW:=[];for i in W do Append(WW,[[i[1],IrreducibleRepresentationsDixon(g,i[2])]]);od;

return(WW);

end);

Example on how to use it in GAP: n:=4;U:=allirredrepsofsymmetricgroup([n]);

Sadly it is very slow and only works for $n \leq 6$.

Question: Is there a quicker way to obtain all irreducible representations for the symmetric group in GAP that maybe works for $n \leq 12$ or so?

1

There are 1 best solutions below

5
On BEST ANSWER

Appended is some rather ad-hoc code (it uses global variables for interim storage...), that (following the textbook by B. Steinberg) calculates a basis for a Specht module, as a submodule of the group algebra. (Alas for left multiplication, never got to fixing it.) It should get you up to degree 10, 12 might be tough.

By acting with left multiplication (transpose to make it proper action) we can get matrices.

For example:

gap> s:=specht([3,2,2,1]);;Length(s);
70
gap> b:=Basis(VectorSpace(Rationals,s));;
gap> gens:=GeneratorsOfGroup(symm);
[ (1,2,3,4,5,6,7,8), (1,2) ]
gap> mats:=List(gens,z->TransposedMat(List(b,x->Coefficients(b,z*x))));;
gap> Length(mats[1]);
70
gap> Size(Group(mats));
40320

The code:

n:=-1;

alambda:=function(lambda)
local p,a,t,i;
  if n<>Sum(lambda) then
    n:=Sum(lambda);
    symm:=SymmetricGroup(n);
    qg:=GroupRing(Rationals,symm);
    emb:=Embedding(symm,qg);
  fi;
  t:=[];a:=0;
  p:=symm;
  for i in lambda do
    Add(t,[a+1..a+i]);
    p:=Stabilizer(p,t[Length(t)],OnSets);
    a:=a+i;
  od;
  a:=Zero(qg);
  for i in Elements(p) do
    a:=a+ImagesRepresentative(emb,i);
  od;
  return 1/Size(p)*a;
end;

blambda:=function(lambda)
local q,b,t,i,j;
  if n<>Sum(lambda) then
    n:=Sum(lambda);
    symm:=SymmetricGroup(n);
    qg:=GroupRing(Rationals,symm);
    emb:=Embedding(symm,qg);
  fi;
  t:=[];b:=0;
  q:=symm;
  for i in [1..lambda[1]] do
    b:=[i];
    for j in [2..Length(lambda)] do
      if lambda[j]>=i then
        Add(b,b[Length(b)]+lambda[j-1]);
      fi;
    od;
    Add(t,b);
    q:=Stabilizer(q,b,OnSets);
  od;
  b:=Zero(qg);
  for i in Elements(q) do
    b:=b+SignPerm(i)*ImagesRepresentative(emb,i);
  od;
  return 1/Size(q)*b;
end;

specht:=function(lambda)
local c,b,bas,i,g,a,aa,piv,cp,sol;
  c:=alambda(lambda)*blambda(lambda);
  bas:=Basis(qg);
  b:=[c];
  c:=[Coefficients(bas,c)];
  piv:=List(c,PositionNonZero);
  cp:=List(c,x->x{piv});
  i:=1;
  while i<=Length(b) do
    for g in GeneratorsOfLeftOperatorRingWithOne(qg) do
      #Print(i," ",g,"\n");
      a:=g*b[i];
      aa:=Coefficients(bas,a);
      sol:=SolutionMat(cp,aa{piv});
      if sol=fail or sol*c<>aa then
        Add(b,a);
        Add(c,aa);
        TriangulizeMat(c);
        piv:=List(c,PositionNonZero);
        cp:=List(c,x->x{piv});
      fi;
    od;
    i:=i+1;
  od;
  return b;
end;
```