Schur basis in p-basis and the character table of S_n
S_mu = sum c_mu(la) p_la/z_la
To convert the Schur to the p-basis, use the Jacobi-Trudi formula to define it for the h-basis then convert it
to the p-basis
>
Schur_in_p:=proc(la);
expand(h2p(Schur_in_h(la)));
end:
>
Examples: we can get the character table by reading the coefficients
of monomials in the p-basis
Build the procedures to compute the coefficients of p_la in s_mu (this is slightly tedious).
mi counts the number of times that i appears as a part in the partition la
>
mi:=proc(la,i) local j, count;
count:=0;
for j from 1 to nops(la) do
if la[j]=i then count:=count+1; fi;
od;
count;
end:
Recall: z_la = mul( la_i, i=1..ell(la)) * mul( m_i(la)!, i=1..la_1)
>
zee:=proc(la) local i;
mul(la[i],i=1..nops(la))*mul(mi(la,i)!,i=1..la[1]);
end:
Turn a monomial such as h3*h3*h2*h1 into a partition [3,3,2,1]
>
mon2part:=proc(mon) local i;
if type(mon,`symbol`) then [var2val(mon)];
elif type(mon,`^`) then
[seq(var2val(op(1,mon)),i=1..op(2,mon))];
elif type(mon,`*`) then
sort(map(op,map(mon2part,[op(mon)])),(x,y)->evalb(x>y));
else;
[];
fi;
end:
> mon2part(h3*h3*h2*h1);
take the coefficients of all the power monomials
>
coeffsofp:=proc(pEX) local i, pids, cfs, mon;
pids:=select(x->evalb(substring(x,1..1)='p'),indets(pEX));
cfs:=coeffs(pEX,pids,'mons');
[[cfs],map(mon2part,[mons])];
end:
>
coeffofpla:=proc(la,pEX) local cfs,place;
cfs:=coeffsofp(pEX);
if member(la,cfs[2],'place') then
cfs[1][place];
else 0;
fi;
end:
> coeffofpla([3,2],Schur_in_p([3,2]));
>
>
rev:=proc(lst) local i;
[seq(lst[nops(lst)-i+1],i=1..nops(lst))];
end:
FINALLY, the following procedure computes the character table for S_n by taking coefficients
of the power symmetric functions in the Schur basis.
>
charactertable:=proc(n) local la,mu;
matrix([seq([seq(zee(la)*coeffofpla(la,Schur_in_p(mu)),
la=rev(listPar(n)))],mu=listPar(n))]);
end:
> rev(listPar(5));
> charactertable(5);
>
>