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);

>

>