Back to the main page on q-analog of Schur's Q-functions
home

The Schur-Q functions and their q-analogs G_\mu[X;q]


These procedures compute the functions Q_\la[X] and G_\la[X;q]


main functions:

Qlap( lambda )
returns Schur's Q function in the p-basis

Glaq( lambda )
returns G_\la^q in the p-basis

toSchurQ( expression )
turn an expression to Schur's Q-function basis

paraGq( seqoflambda )
returns the parabolic versions of these functions indexed by a sequence of partitions



requires the package SF from John Stembridge

> with(SF);

[Maple Math]
[Maple Math]

Some versions of SF don't have the degree function in the front end

> stdeg:=`SF/stdeg`:

> Qk:=proc(k) local i,j;
if k=0 then 1;
else add(2*s[i,seq(1,j=1..k-i)],i=1..k);
fi;
end:

> strict:=proc(la) local i,out;
out:=true;
for i from 1 to nops(la)-1 do
if la[i]=la[i+1] then out:=false; fi;
od;
out;
end:

> Qkp:=proc(k) option remember;
local i,j;
top(Qk(k));
end:

> addQkp:=proc(m,EX) local i,PEX;
PEX:=top(EX);
Qkp(m)*PEX + add((-1)^i*Qkp(m+i)*skew(e.i,PEX),i=1..stdeg(PEX));
end:

> addQkq:=proc(m,EX);
subs({seq(pp.i=p.i,i=1..stdeg(EX))},addQkp(m,
subs({seq(p.i=q^i*pp.i+(1-q^i)*p.i,i=1..stdeg(EX))},top(EX))));
end:

> Qlap:=proc(la) local out,i;
out:=1;
for i from nops(la) to 1 by -1 do
out:=addQkp(la[i],out);
od;
out;
end:

> Glaq:=proc(la) local out,i;
out:=1;
for i from nops(la) to 1 by -1 do
out:=addQkq(la[i],out);
od;
tos(out);
end:

> addQla:=proc(la,EX) local out,i;
out:=EX;
for i from nops(la) to 1 by -1 do
out:=addQkp(la[i],out);
od;
out;
end:

> addGla:=proc(la,EX);
subs({seq(pp.i=p.i,i=1..stdeg(EX))},addQla(la,
subs({seq(p.i=q^i*pp.i+(1-q^i)*p.i,i=1..stdeg(EX))},top(EX))));
end:

> paraGla:=proc(R) local out,i;
out:=1;
for i from nops(R) to 1 by -1 do
out:=addGla(R[i],out);
od;
out;
end:

> toSchurQ:=proc(EX) local sp,prs,d,cfl,i,sln,inds;
if type(EX,'list') then sp:=top(op(EX));
else
RETURN(convert(map(x->toSchurQ([x]),[`SF/homog_cmps`(top(EX))]),`+`));
fi;
prs:=select(strict,Par(stdeg(sp)));
d:=stdeg(sp);
inds:={seq(p.i,i=1..d)};
cfl:={coeffs(collect(sp-add(c[i]*Qlap(prs[i]),i=1..nops(prs)),
inds,'distributed'),inds)};
sln:=readlib(`solve/linear`)(cfl,{seq(c[i],i=1..nops(prs))});
subs(sln,add(c[i]*Q[op(prs[i])],i=1..nops(prs)));
end:


Examples

> Glaq([3,2]);

[Maple Math]
[Maple Math]

> toSchurQ(%);

[Maple Math]

> toSchurQ(Glaq([3,3,2,1]));

[Maple Math]
[Maple Math]
[Maple Math]

> toSchurQ(Glaq([3,2,2,1]));

[Maple Math]
[Maple Math]

> for la in select(strict,Par(6)) do
Gq[op(la)] = toSchurQ(Glaq(la));
od;

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

> toSchurQ(Glaq([4,3,2,1]));

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

> toSchurQ(paraGla([[4,3],[2,1]]));

[Maple Math]

> toSchurQ(paraGla([[4],[3,2],[1]]));

[Maple Math]
[Maple Math]


Back to the main page on q-analog of Schur's Q-functions