SF: The Symmetric Functions Package
Help Texts for the Vanilla Edition of SF 2.3
For a detailed introduction to the package, consult the TeX document
"A Maple Package for Symmetric Functions."
After loading the vanilla edition of SF, each package function can be
accessed using the calling sequence SF[functionname](arguments). In order
to use the abbreviated form functionname(arguments), run the command
'withSF()'. If there is a conflict between the names of one of the package
functions and another name in the same session, a warning is printed.
To use the abbreviated form for a subset of the procedures in the package
(e.g., to avoid conflicts), run the command 'withSF(name1,name2,...)'.
Note that the names e, h, p, s, cl, and e1, p1, h1, e2, h2, p2,.... play
special roles as global variables in the package and should not be
assigned values by the user.
This document provides help texts for each of the functions in SF:
- Par - list partitions
- add_basis - add a new basis to the set of known bases
- char2sf - convert (virtual) characters to symmetric functions
- conjugate - conjugate a partition
- dominate - list all partitions dominated by another partition
- dual_basis - add a dual basis to the set of known bases
- evalsf - plethystic evaluation of symmetric functions
- hooks - hook lengths of a partition
- itensor - inner tensor product of symmetric functions
- jt_matrix - Jacobi-Trudi matrix of a (possibly skew) partition
- omega - apply the omega automorphism to a symmetric function
- plethysm - plethysm of symmetric functions
- scalar - scalar product of symmetric functions
- sf2char - convert symmetric functions to (virtual) characters
- skew - skew operation on symmetric functions
- stdeg - degree with respect to the standard grading
- subPar - list all subpartitions of a partition
- theta - apply the theta automorphism to a symmetric function
- toe - convert a symmetric function to the e-basis
- toh - convert a symmetric function to the h-basis
- top - convert a symmetric function to the p-basis
- tos - convert a symmetric function to the Schur function basis
- varset - variable set of a symmetric function
- zee - squared norm of power sums
FUNCTION: Par - list partitions
CALLING SEQUENCE: Par(n); Par(n,l); Par(n,k,l);
PARAMETERS: n = a nonnegative integer
l = (optional) maximum number of parts allowed
k = (optional) maximum part size allowed
SYNOPSIS:
A partition of n is defined to be a non-increasing list of positive
integers with sum n. The members of the list are called parts.
Par(n) returns a list consisting of all partitions of n.
Par(n,l) returns a list of all partitions of n with at most l parts.
Par(n,k,l) returns a list of all partitions of n with at most l parts
such that every part is <= k.
In all cases, the list of partitions is arranged in lexicographic order,
so that mu precedes nu if mu[1]>nu[1], or if mu[1]=nu[1] and mu[2]>nu[2],
or if mu[1]=nu[1], mu[2]=nu[2] and mu[3]>nu[3], and so on. This ordering
is a refinement of the dominance partial order (see 'dominate').
EXAMPLES:
Par(4); yields [[4], [3,1], [2,2], [2,1,1], [1,1,1,1]]
Par(7,2); yields [[7], [6,1], [5,2], [4,3]]
Par(9,4,3); yields [[4,4,1], [4,3,2], [3,3,3]]
SEE ALSO: conjugate, dominate, subPar
FUNCTION: add_basis - add a new basis to the set of known bases
CALLING SEQUENCE: add_basis(b,scp);
add_basis(b,scp,lterm);
PARAMETERS: b = name of a new basis
scp,lterm = procedures that accepts partitions as input
SYNOPSIS:
Let < , > be a scalar product of symmetric functions in which the power
sums are orthogonal, and let 'scp' be a procedure such that scp(lambda)
computes the squared norm of the power sum indexed by lambda. The
standard scalar product is obtained by choosing scp=zee. See the help
for 'scalar' and 'zee'.
By the Gram-Schmidt algorithm, there is a unique basis b[.] of the space
of symmetric functions that is orthogonal w.r.t. < , > and satisfies
b[lambda] = m[lambda] + a linear combination of "later" m[mu]'s, (*)
where m[.] denotes the basis of monomial symmetric functions, and the
mu's that appear in the above sum are "later" with respect to the
ordering of partitions defined by 'Par' (see the help for 'Par').
For example, the Schur functions s[lambda] are the basis one obtains by
this method, relative to the standard scalar product.
More generally, we can modify (*) so that the "leading term" of b[lambda]
is any chosen (nonzero) scalar multiple of m[lambda], not necessarily 1.
Such a choice is specified by a procedure 'lterm' designed so that
lterm(lambda) returns the desired leading coefficient for b[lambda].
If 'scp' and 'lterm' are as described, and 'b' is a name that has not
been previously defined to be a symmetric function basis, then the
procedure call add_basis(b,scp,lterm) will add 'b[]' to the list of
known bases, and define it to be the orthogonal basis as above.
The effects of this are:
(1) All predefined conversion procedures for symmetric functions, such
as 'toe', 'top',... as well as procedures defined by previous calls to
'dual_basis' and 'add_basis', will now be able to correctly process
symmetric function expressions that involve the new basis 'b'.
(2) A new procedure, named to.b (i.e., the concatenation of "to" and b)
is defined. Its purpose is to convert symmetric functions into the newly
created b-basis. The possible calling sequences for this procedure are:
to.b(f); to.b(f,B); to.b(f,parlist); to.b(f,B,parlist);
where: (i) f is a symmetric function, (ii) 'B' (optional) is a name that
can be used to indicate that the procedure may assume that f is expressed
solely in terms of the basis B, and (iii) 'parlist' (optional) is a list
of partitions that can be used to specify that the coefficient of
b[lambda] is nonzero only for partitions lambda appearing in 'parlist'.
If f is "sparse" with respect to 'b', specifying a partition list can
greatly improve the speed of the algorithm.
The output is collected with respect to the elements of the basis 'b' and
'normal' is applied to the coefficients.
On the first occasion that a procedure does a computation involving
b[lambda], it converts b[lambda] into a polynomial in the elementary
symmetric functions and saves the result in a remember table.
Consequently (especially for complicated scalar products), the first
operation involving a given b[lambda] can be expensive, but subsequent
operations are cheap. In particular, converting a general expression into
the b-basis may be very expensive the first time, since it may involve
the first computation of several of the b[lambda]'s.
An error condition is generated if 'b' is the name of a previously
defined basis. Otherwise, the result returned by a call to 'add_basis' is
'Okay'. If the last argument is omitted from 'add_basis', the default is
to use 1 as the leading coefficient.
EXAMPLES:
#Define Hall-Littlewood symmetric functions
Zee:= mu -> zee(mu,0,t);
add_basis(HL,Zee);
toHL(s[2,2],dominate([2,2])); yields
HL[2,2] + t*HL[2,1,1] + (t^4+t^2)*HL[1,1,1,1]
c:=scalar(HL[2,2],HL[2,2],Zee);
factor(c); yields 1/(1+t)/(1-t)^2
#Define zonal polynomials
Zee2:=mu -> zee(mu,2);
add_basis(Z, Zee2, mu -> hooks(mu,2));
toZ(p1^3); yields 1/15*Z[3] + 3/5*Z[2,1] + 1/3*Z[1,1,1]
top(Z[3]); yields p1^3+6*p1*p2+8*p3
SEE ALSO: dual_basis, scalar, zee
FUNCTION: char2sf - convert (virtual) characters to symmetric functions
CALLING SEQUENCE: char2sf(clf);
char2sf(clf,b);
PARAMETERS: clf = a class function (i.e., a linear combination of the
indicator functions cl[lambda] for partitions lambda)
b = (optional) a basis name
SYNOPSIS:
For each partition lambda, the expression cl[lambda] denotes the class
function on the symmetric group that takes on the value 1 for
permutations of cycle-type lambda, and 0 otherwise. General class
functions on the symmetric group S_n can be expressed as linear
combinations of cl[lambda], where lambda ranges over partitions of n.
The characteristic map is an isometric isomorphism between symmetric
functions that are homogeneous of degree n and class functions on S_n.
Under this map, the irreducible character indexed by lambda corresponds
to the Schur function s[lambda].
For any class function clf, char2sf(clf) returns the symmetric function
corresponding to f, expressed in terms of the power-sums p1,p2,....
If a second argument b is specified, then the procedure expresses the
result in terms of the basis b.
EXAMPLES:
char2sf(cl[3,2,2,1]); yields 1/24*p3*p2^2*p1
char2sf(6*cl[1,1,1,1,1]-2*cl[2,2,1]+cl[5],s);
yields s[3, 1, 1]
SEE ALSO: itensor, plethysm, sf2char, zee, combinat[Chi]
FUNCTION: conjugate - conjugate a partition
CALLING SEQUENCE: conjugate(lambda);
PARAMETERS: lambda = a partition
SYNOPSIS:
The conjugate of a partition lambda is the partition whose i-th part is
the number of parts of lambda that are >=i. This amounts to reflecting
the diagram of lambda across the main diagonal.
EXAMPLES:
conjugate([7,7,3,2,2,2,1]); yields [7, 6, 3, 2, 2, 2, 2]
SEE ALSO: Par, dominate, subPar
FUNCTION: dominate - list all partitions dominated by another partition
CALLING SEQUENCE: dominate(lambda);
dominate(lambda,n);
PARAMETERS: lambda = a partition
n = (optional) a nonnegative integer
SYNOPSIS:
If lambda and mu are partitions of some integer m, then lambda dominates
mu if lambda[1]+...+lambda[i] >= mu[1]+...+mu[i] for i=1,2,...
dominate(lambda) returns a list consisting of all partitions dominated by
lambda, with the first term in the list being lambda.
dominate(lambda,n) returns a list consisting of all partitions with at
most n parts that are dominated by lambda.
EXAMPLES:
dominate([2,2]); yields [[2,2], [2,1,1], [1,1,1,1]]
dominate([3,2,1],4); yields [[3,2,1], [2,2,2], [3,1,1,1], [2,2,1,1]]
SEE ALSO: Par, conjugate, subPar
FUNCTION: dual_basis - add a dual basis to the set of known bases
CALLING SEQUENCE: dual_basis(b,oldb);
dual_basis(b,oldb,scp);
PARAMETERS: b = name of a new basis
oldb = name of a previously defined basis
scp = (optional) a procedure that accepts partitions as input
SYNOPSIS:
Let < , > be a scalar product of symmetric functions in which the power
sums are orthogonal, and let 'scp' be a procedure such that scp(lambda)
computes the squared norm of the power sum indexed by lambda. The standard
scalar product is obtained by choosing scp=zee. See the help for 'scalar'
and 'zee'.
Given any basis B[.] of the space of symmetric functions, there is a
unique dual basis b[.] relative to < , >. It is defined by the property
that <b[lambda],B[mu]> = 1 for lambda=mu, and = 0 otherwise.
For example, the monomial symmetric functions m[.] are dual (relative to
the standard scalar product) to the basis generated by the complete
homogeneous symmetric functions h1,h2,....
If 'oldb' is the name of any previously defined symmetric function basis
(i.e., a member of the global variable `SF/Bases`), and 'b' is a name that
has not been previously defined to be a symmetric function basis, then the
procedure call dual_basis(b,oldb,scp) will add 'b[]' to the list of
known bases, and define it to be the basis that is dual to 'oldb', relative
to the scalar product defined by 'scp'. The effects of this are:
(1) All predefined conversion procedures for symmetric functions, such as
'toe', 'top',... as well as procedures defined by previous calls to
'dual_basis' and 'add_basis', will now be able to correctly process
symmetric function expressions that involve the new basis 'b'.
(2) A new procedure, named to.b (i.e., the concatenation of "to" and b)
is defined. Its purpose is to convert symmetric functions into the newly
created b-basis. The possible calling sequences for this procedure are:
to.b(f); to.b(f,B); to.b(f,parlist); to.b(f,B,parlist);
where: (i) f is a symmetric function, (ii) 'B' (optional) is a name that
can be used to indicate that the procedure may assume that f is expressed
solely in terms of the basis B, and (iii) 'parlist' (optional) is a list
of partitions that can be used to specify that the coefficient of
b[lambda] is nonzero only for partitions lambda appearing in 'parlist'.
If f is "sparse" with respect to 'b', specifying a partition list can
greatly improve the speed of the algorithm.
The output is collected with respect to the elements of the basis 'b' and
'normal' is applied to the coefficients.
An error condition is generated if 'b' is, or if 'oldb' is not, the name
of a previously defined basis. Otherwise, the result returned by a call
to 'dual_basis' is 'Okay'. If the last argument (the procedure defining
the scalar product) is omitted, the standard scalar product is assumed.
EXAMPLES:
#Define the basis of monomial symmetric functions
dual_basis(m,h);
tom(s[2,2,1],s,dominate([2,2,1]));
yields m[2,2,1]+2*m[2,1,1,1]+5*m[1,1,1,1,1]
tos(m[2,2]+m[3,1],m); yields s[3,1]-2*s[2,1,1]+3*s[1,1,1,1]
Zee:= mu -> zee(mu,0,t);
dual_basis(S,s,Zee);
toe(S[2,1]); yields (-t+t^2)*e1^3+(1-t^3)*e2*e1+(-1+t^3)*e3
toS(e2*e1*(1-t)^2*(1-t^2),e);
yields t*S[3]+(t+1)*S[2,1]+S[1,1,1]
SEE ALSO: add_basis, scalar, zee
FUNCTION: evalsf - plethystic evaluation of symmetric functions
CALLING SEQUENCE: evalsf(f,a);
PARAMETERS: f = a symmetric function
a = an expression or symmetric function
SYNOPSIS:
Let a be a symmetric function whose coefficients are rational functions
in some set of variables. For positive integers j, let a<j> denote the
result of substituting x = x^j, y = y^j,... and p.i = p.(i*j) for each
variable x,y,... and each power-sum p.i appearing in the power-sum
expansion of a.
If f is any symmetric function, evalsf(f,a) returns the expression
obtained by converting f into a polynomial in the power-sums p1,p2,...,
and then substituting p1 = a<1>, p2 = a<2>, etc.
If a is a symmetric function with constant coefficients, then evalsf(f,a)
is identical to plethysm(f,a).
If a is a rational function of some set of ordinary variables (i.e., a
symmetric function of degree 0), then a<j> is obtained by substituting
x = x^j for each variable x that appears in a. In particular,
(1) evalsf(f,1/(1-q)) is the "principal specialization" of f.
(2) evalsf(f,a+b+c) is equivalent to evaluating f as a symmetric
function of the variables a,b,c.
EXAMPLES:
f:=evalsf(e3,x+y+z+w);
expand(f); yields x*y*z + x*y*w + x*z*w + y*z*w
f:=evalsf(s[2,2],1/(1-q));
factor(f); yields q^2/(1-q)^4/(q^2+q+1)/(q+1)^2
f:=evalsf(h2,(a-b)/(1-q));
factor(f); yields (a-b)*(a-q*b)/(1-q)^2/(1+q)
f:=evalsf(h2,e3);
tos(f); yields s[2,2,2] + s[2,1,1,1,1]
f:=evalsf(e3,(1+t)*p1);
tos(f); yields t*(1+t)*s[2,1] + (1+t+t^2+t^3)*s[1,1,1]
SEE ALSO: plethysm, theta
FUNCTION: hooks - hook lengths of a partition
CALLING SEQUENCE: hooks(lambda);
hooks(lambda,a);
hooks(lambda,q,t);
PARAMETERS: lambda = a partition
a,q,t = (optional) expressions
SYNOPSIS:
If lambda is a partition of n, then the hook lengths of lambda are the
numbers lambda[i] - i + mu[j] - j + 1, where mu is the conjugate of
lambda (see the help for 'conjugate'), and (i,j) ranges over all cells of
the diagram of lambda; i.e., 1 <= i <= nops(lambda), 1 <= j <= lambda[i].
The arm and leg lengths of cell (i,j) are lambda[i] - j and mu[j] - i.
For any partition lambda, hooks(lambda) returns the list of hook lengths
of lambda, sorted into non-increasing order. If one or two additional
(optional) arguments are supplied, then the procedure returns one of the
following hook-related polynomials:
With one extra argument a, the result is the product of
a * arm_length[i,j] + leg_length[i,j] + 1
over all cells of the diagram.
With two extra arguments, say q and t, the result is the product of
1 - q^arm_length[i,j] * t^(1+leg_length[i,j])
over all cells of the diagram.
Note that hooks(lambda,q,q) is the product of 1 - q^hook_length[i,j].
EXAMPLES:
### Compute the number of standard tableaux of shape [3,2,1]:
hk:=hooks([3,2,1]); yields [5, 3, 3, 1, 1, 1]
6!/convert(hk,`*`); yields 16
hooks([3,2,1],z); yields (2*z+3)*(z+2)^2
hooks([3,1,1,1],q,t); yields (1-q^2*t^4)*(1-q*t)*(1-t)^2*(1-t^3)*(1-t^2)
SEE ALSO: Par, conjugate
FUNCTION: itensor - inner tensor product of symmetric functions
CALLING SEQUENCE: itensor(f,g); itensor(f,g,b1,b2);
itensor(f,g,b); itensor(f,g,b1,b2,b);
PARAMETERS: f,g = symmetric functions
b,b1,b2 = (optional) basis names
SYNOPSIS:
Let f and g be symmetric functions that are homogeneous of degree n. Via
the characteristic map (see 'sf2char') there are virtual characters of
the symmetric group S_n corresponding to f and g. The tensor (i.e.,
pointwise) product of these two characters is therefore also a virtual
character corresponding to some symmetric function, the "inner tensor
product" (a.k.a. Kronecker product) of f and g. This product is linear
in both arguments, and is zero if f and g are of unequal degrees.
itensor(f,g) returns the inner tensor product of the symmetric functions
f and g. The output is collected with respect to the power-sums and
'normal' is applied to the coefficients. If there is an odd number of
arguments (3 or 5), with the last being a basis name b, then the output is
expressed in terms of the basis b. If there are 4 or 5 arguments, with the
the third and fourth being basis names b1 and b2, then then the procedure
assumes that f and g are expressed solely in terms of bases b1 and b2,
respectively. In particular, if (say) b1 is not one of the predefined
bases, this requires f to be linear in elements of the basis b1.
EXAMPLES:
itensor(s[2,1],s[3,2]); yields 0
itensor(s[2,1],s[2,1],s); yields s[3]+s[2,1]+s[1,1,1]
itensor(s[2,2],h2^2,s,h); yields 1/2*p2^2+1/2*p1^4
itensor(e5,s[3,2],e,s,s); yields s[2,2,1]
SEE ALSO: char2sf, sf2char, plethysm
FUNCTION: jt_matrix - Jacobi-Trudi matrix of a (possibly skew) partition
CALLING SEQUENCE: jt_matrix(lambda);
jt_matrix(lambda,mu);
jt_matrix(lambda,mu,b);
PARAMETERS: lambda,mu = partitions
b = (optional) a name
SYNOPSIS:
If lambda is a partition with l parts, the Jacobi-Trudi matrix associated
to lambda is an l x l matrix whose [i,j] entry is the complete homogeneous
symmetric function h.(lambda[i]-i+j). The determinant of the matrix is the
Schur function s[lambda].
More generally, if mu is a second partition, then the Jacobi-Trudi matrix
associated to the "skew shape" lambda/mu is the matrix whose [i,j] entry
is h.(lambda[i]-mu[j]-i+j). Its determinant is the skew Schur function
indexed by lambda/mu. In particular, the determinant is 0 unless mu is a
subpartition of lambda.
jt_matrix(lambda) returns the Jacobi-Trudi matrix associated to lambda.
jt_matrix(lambda,mu) does the same for the skew shape lambda/mu.
If a third argument 'b', is present, then the matrix returned uses b as
the base name for the entries of the matrix rather than (the default) h.
EXAMPLES:
jt_matrix([4,2,1]); yields
array([[h4,h5,h6], [h1,h2,h3], [0,1,h1]])
jt_matrix([5,3,2],[3,2],q); yields
array([[q2,q4,q7], [0,q1,q4], [0,0,q2]])
SEE ALSO: conjugate, skew, subPar, tos
FUNCTION: omega - apply the omega automorphism to a symmetric function
CALLING SEQUENCE: omega(f);
omega(f,b1);
omega(f,b1,b2);
PARAMETERS: f = a symmetric function
b1,b2 = (optional) names of bases
SYNOPSIS:
The omega automorphism is an involution on the ring of symmetric functions
in which h.i -> e.i, e.i -> h.i, p.i -> (-1)^(i-1) * p.i, and
s[lambda] -> s[lambda'], where lambda' denotes the conjugate of lambda.
If f is any symmetric function, omega(f) applies the automorphism to f.
If a second argument b1 is specified, then the procedure assumes that f
is expressed solely in terms of base b1. In particular, if b1 is not one
of the predefined bases, this requires f to be linear in elements of the
basis b1.
If a third argument b2 is specified, then the result is expressed in terms
of the basis b2. If no such argument is specified, the output is expressed
in whatever terms that the procedure finds most convenient (possibly
including mixed bases).
EXAMPLES:
omega(h3*p4+e2); yields -e3*p4+h2
dual_basis(m,h); dual_basis(f,e);
omega(m[3,2],m); yields -p5-p3*p2
omega(m[3,2],m,f); yields f[3, 2]
SEE ALSO: conjugate, theta
FUNCTION: plethysm - plethysm of symmetric functions
CALLING SEQUENCE: plethysm(f,g); plethysm(f,g,b1,b2);
plethysm(f,g,b); plethysm(f,g,b1,b2,b);
PARAMETERS: f,g = symmetric functions
b,b1,b2 = (optional) basis names
SYNOPSIS:
The plethysm operation on symmetric functions f and g is the (unique)
binary operation f[g] satisfying the following properties:
(1) (f+g)[h] = f[h]+g[h], (2) (f*g)[h] = (f[h])*(g[h]),
(3) f[p.j] = p.j[f], (4) p.i[p.j] = p.(i*j),
where p.i denotes the i-th power-sum symmetric function.
If f and g are characters of representations of the general linear group,
then f[g] is the character of the composition of the representations. If
f and g correspond to symmetric group characters (via the characteristic
map--see 'sf2char'), then the plethysm f[g] corresponds to an induction
operation on characters of the wreath product of two symmetric groups.
plethysm(f,g) returns the plethysm of symmetric functions f and g, with
the output by default expressed in terms of (collected) power-sums and
with 'normal' applied to the coefficients.
If there is an odd number of arguments (3 or 5), then the output is
expressed in terms of the basis b, where b is the last argument. If there
are 4 or 5 arguments, with the the third and fourth being basis names b1
and b2, then the procedure assumes that f and g are expressed solely in
terms of bases b1 and b2, respectively. In particular, if (say) b1 is not
one of the predefined bases, this requires f to be linear in the elements
of the basis b1.
Reference:
I. Macdonald, "Symmetric Functions and Hall polynomials", Section I.8.
EXAMPLES:
plethysm(h3,h2,s); yields s[6]+s[4,2]+s[2,2,2]
plethysm(p3,s[2,1]); yields 1/3*p3^3-1/3*p9
plethysm(p3,s[2,1],p,s); yields 1/3*p3^3-1/3*p9
plethysm(e3,e2,e,e,e); yields e4*e1^2-e1*e5-2*e4*e2+e6+e3^2
SEE ALSO: char2sf, evalsf, itensor, sf2char
FUNCTION: scalar - scalar product of symmetric functions
CALLING SEQUENCE: scalar(f,g); scalar(f,g,b1,b2);
scalar(f,g,scp); scalar(f,g,b1,b2,scp);
PARAMETERS: f,g = symmetric functions
b1,b2 = (optional) names of bases
scp = (optional) a procedure that accepts partitions as input
SYNOPSIS:
Let < , > be a scalar product of symmetric functions in which the power
sums are orthogonal, and let 'scp' be a procedure such that scp(lambda)
computes the squared norm of the power sum indexed by lambda. The standard
scalar product is obtained by choosing scp=zee.
If f and g are symmetric functions and 'scp' is as described, then
scalar(f,g,scp) computes the scalar product of f and g. If the last
argument 'scp' is omitted, then by default the standard scalar product
is computed. Hence scalar(f,g) is equivalent to scalar(f,g,zee).
If two additional arguments b1 and b2 are specified, then the procedure
assumes that f and g are expressed solely in terms of the bases b1 and b2
respectively. In particular, if (say) b1 is not one of the predefined
bases, this requires f to be linear in the members of b1.
EXAMPLES:
scalar(s[3,2],h2*h1^3); yields 3
scalar(s[3,1,1],e3*e2,s,e); yields 0
Zee:=mu -> zee(mu,q^2,q);
c:=scalar(s[2,1],s[2,1],Zee);
normal(c); yields q^3+2*q^2+2*q+1
dual_basis(m,h);
c:=scalar(m[3,1]+m[2,1],p3*(1+p1),m,p,Zee);
normal(c); yields 3*q*(q^3+1)
SEE ALSO: add_basis, dual_basis, skew, zee
FUNCTION: sf2char - convert symmetric functions to (virtual) characters
CALLING SEQUENCE: sf2char(f);
sf2char(f,b);
PARAMETERS: f = a symmetric function
b = (optional) a basis name
SYNOPSIS:
The characteristic map is an isometric isomorphism between symmetric
functions that are homogeneous of degree n and class functions on the
symmetric group S_n (i.e., functions constant on conjugacy classes).
Under this map, the Schur function s[lambda] corresponds to the
irreducible character of S_n indexed by lambda, and the power sum indexed
by lambda corresponds to the function that takes on the value zee(lambda)
for all permutations of cycle-type lambda, and 0 otherwise.
For any symmetric function f, sf2char(f) returns the class function
corresponding to f. The result is expressed as a linear combination of
expressions of the form cl[lambda], where cl[lambda] denotes the class
function that takes the value 1 at cycle-type lambda, and 0 otherwise.
In particular, the coefficient of cl[1,1,1,...] is the degree of the
(possibly virtual) character corresponding to f.
If a second argument b is specified, then the procedure assumes that f is
expressed solely in terms of the basis b. In particular, if b is not one
of the predefined bases, this requires f to be linear in elements of b.
EXAMPLES:
sf2char((p1+p2)^2); yields 8*cl[2,2]+4*cl[2,1]+2*cl[1,1]
sf2char(s[3,1],s); yields 3*cl[1,1,1,1]+cl[2,1,1]-cl[2,2]-cl[4]
SEE ALSO: char2sf, itensor, plethysm, zee, combinat[Chi]
FUNCTION: skew - skew operation on symmetric functions
CALLING SEQUENCE: skew(f,g); skew(f,g,b1,b2);
skew(f,g,scp); skew(f,g,b1,b2,scp);
PARAMETERS: f,g = symmetric functions
b1,b2 = (optional) names of bases
scp = (optional) a procedure that accepts partitions as input
SYNOPSIS:
Let < , > be a scalar product of symmetric functions in which the power
sums are orthogonal, and let 'scp' be a procedure such that scp(lambda)
computes the squared norm of the power sum indexed by lambda. The standard
scalar product is obtained by choosing scp=zee. See the help for 'scalar'
and 'zee'.
For each symmetric function f, there is a linear transformation Skew(f)
on symmetric functions that is adjoint (w.r.t. < , >) to multiplication
by f. That is, <Skew(f)g,h>=<g,f*h> for all symmetric functions f, g, h.
If f and g are symmetric functions and 'scp' is as described, then
skew(f,g,scp) returns Skew(f)g (relative to < , >), with the output
expressed as a collected polynomial with respect to power-sums and
with 'normal' applied to the coefficients.
If the last argument 'scp' is omitted, then by default the adjoint is
computed relative to the standard scalar product. Hence skew(f,g) is
equivalent to skew(f,g,zee).
If two additional arguments b1 and b2 are specified, then the procedure
assumes that f and g are expressed solely in terms of the bases b1 and b2
respectively. In particular, if (say) b1 is not one of the predefined
bases, this requires f to be linear in the members of b1.
If lambda and mu are partitions, then the skew Schur function indexed by
the pair lambda/mu is skew(s[mu],s[lambda]). However, it is generally
faster to obtain skew Schur functions via the Jacobi-Trudi identity:
linalg[det](jt_matrix(lambda,mu)).
EXAMPLES:
skew(e3,s[4,2]); yields 0
f:=skew(p2,h6,p,h);
toh(f); yields h4
Zee:= mu -> zee(mu,0,t);
f:=skew(p2,s[4,2],Zee);
tos(f); yields 1/(1-t^2)*s[4]+1/(1-t^2)*s[2,2]
SEE ALSO: jt_matrix, scalar, zee
FUNCTION: stdeg - degree with respect to the standard grading
CALLING SEQUENCE: stdeg(f); stdeg(f,B);
PARAMETERS: f = a symmetric function
B = (optional) a name
SYNOPSIS:
The standard grading of the ring of symmetric functions assigns the
degrees 1,2,... to each variable of the form b1,b2,..., and degree n
to each variable of the form b[mu] with mu a partition of n.
Given a symmetric function f, stdeg(f) returns the degree of f in the
standard grading. Any variables appearing f that do not belong to a
basis known to SF (as specified by the global variable `SF/Bases`) are
assigned the degree 0.
If B is a name of 'string' type, then stdeg(f,B) computes the degree of
f under the assumption that f is expressed entirely in terms of the
variables B1,B2,...; (i.e., all other variables are given degree 0).
Given a name B[] of 'indexed' type, stdeg(f,B[]) computes the degree of
f under the assumption that f is expressed entirely in terms of the
variables B[mu], where mu ranges over partitions.
Note that stdeg acts as a front-end to Maple's degree function, and
hence inherits all of its peculiarities. In particular, (1) reliable
results cannot be obtained unless f is expanded or collected with respect
to the variables of some basis (e.g., (1+p1)^2 - p1^2 and s[2]-h2 are
reported to have degree 2), and (2) versions of Maple prior to V.5
report that 0 has degree 0, while current versions report -infinity.
There are no restrictions on indexed names, but string names must consist
of a single letter.
EXAMPLES:
stdeg(s[4,2]*p2-h6); yields 8
stdeg(s[4,2]*p2-h6,s[]); yields 6
stdeg(t*p3^3+p4^2,p); yields 9
SEE ALSO: varset
FUNCTION: subPar - list all subpartitions of a partition
CALLING SEQUENCE: subPar(lambda); subPar(lambda,n);
PARAMETERS: lambda = a partition
n = (optional) a nonnegative integer
SYNOPSIS:
If lambda and mu are partitions, then mu is a subpartition of lambda if
nops(mu) <= nops(lambda) and mu[i] <= lambda[i] for i=1,...,nops(mu).
subPar(lambda) returns a list consisting of all subpartitions of lambda.
subPar(lambda,n) returns a list consisting of all partitions of n that
are subpartitions of lambda.
In both cases, the list of partitions is arranged in lexicographic order
so that mu precedes nu if mu[1]>nu[1], or if mu[1]=nu[1] and mu[2]>nu[2],
or if mu[1]=nu[1], mu[2]=nu[2] and mu[3]>nu[3], and so on.
EXAMPLES:
subPar([2,2]); yields [[2,2], [2,1], [2], [1,1], [1], []]
subPar([4,3,2],7); yields [[4,3], [4,2,1], [3,3,1], [3,2,2]]
SEE ALSO: Par, conjugate, dominate
FUNCTION: theta - apply the theta automorphism to a symmetric function
CALLING SEQUENCE: theta(f,a); theta(f,q,t);
PARAMETERS: f = a symmetric function
a,q,t = arbitrary names or expressions
SYNOPSIS:
There are two types of "theta" automorphisms of the ring of symmetric
functions that are of use in computations with Jack symmetric functions
and Macdonald's symmetric functions. Both can be defined by their action
on the power-sums p1,p2,p3,...
In the first form, theta(f,a) applies to the symmetric function f the
automorphism in which p.j is mapped to a*p.j.
In the second form, theta(f,q,t) applies to the symmetric function f the
automorphism in which p.j is mapped to (1-q^j)/(1-t^j)*p.j. Note that
this is equivalent to evalsf(f,(1-q)*p1/(1-t)).
In both cases, the output is expressed in terms of (collected) power-sums
with 'normal' applied to the coefficients.
EXAMPLES:
theta(s[3,1,1],z); yields 1/20*z^5*p1^5-1/4*z^3*p2^2*p1+1/5*z*p5
f:=theta(s[3,1],q^2,q);
factor(scalar(f,s[3,1])); yields (q^2+q+1)^2
SEE ALSO: evalsf, omega
FUNCTION: toe - convert a symmetric function to the e-basis
CALLING SEQUENCE: toe(f); toe(f,b);
PARAMETERS: f = a symmetric function
b = (optional) a basis name
SYNOPSIS:
If f is any symmetric function, toe(f) will convert f into a polynomial
in the elementary symmetric functions e1,e2,e3,..., with the result
collected in 'distributed' form with respect to e1,e2,e3,..., and with
'normal' applied to the coefficients.
If a second argument b is specified, then the procedure assumes that f is
expressed solely in terms of the basis b. In particular, if b is not one
of the predefined bases, this requires f to be linear in elements of the
basis b.
EXAMPLES:
toe(h1*e2*p2+s[2,1]*s[2]); yields 2*e2*e1^3-e3*e1^2-3*e2^2*e1+e3*e2
toe(s[3,1]+s[2,2],s); yields e2*e1^2-2*e1*e3+e4
SEE ALSO: add_basis, dual_basis, toh, top, tos
FUNCTION: toh - convert a symmetric function to the h-basis
CALLING SEQUENCE: toh(f); toh(f,b);
PARAMETERS: f = a symmetric function
b = (optional) a basis name
SYNOPSIS:
If f is any symmetric function, toh(f) will convert f into a polynomial
in the complete homogeneous symmetric functions h1,h2,h3,..., with the
result collected in 'distributed' form with respect to h1,h2,h3,..., and
with 'normal' applied to the coefficients.
If a second argument b is specified, then the procedure assumes that f is
expressed solely in terms of the basis b. In particular, if b is not one
of the predefined bases, this requires f to be linear in elements of the
basis b.
EXAMPLES:
toh(e2^2+p2^2-2*e4); yields -4*h1*h3+3*h2^2+2*h4
toh(s[4,3],s); yields h4*h3-h5*h2
SEE ALSO: add_basis, dual_basis, toe, top, tos
FUNCTION: top - convert a symmetric function to the p-basis
CALLING SEQUENCE: top(f); top(f,b);
PARAMETERS: f = a symmetric function
b = (optional) a basis name
SYNOPSIS:
If f is any symmetric function, top(f) will convert f into a polynomial
in the power-sum symmetric functions p1,p2,p3,..., with the result
collected in 'distributed' form with respect to p1,p2,p3,..., and with
'normal' applied to the coefficients.
If a second argument b is specified, then the procedure assumes that f is
expressed solely in terms of the basis b. In particular, if b is not one
of the predefined bases, this requires f to be linear in elements of the
basis b.
EXAMPLES:
top(s[3,1,1],s); yields 1/20*p1^5-1/4*p2^2*p1+1/5*p5
top(36*h3*e3); yields p1^6+4*p3*p1^3-9*p2^2*p1^2+4*p3^2
SEE ALSO: add_basis, dual_basis, toe, toh, tos
FUNCTION: tos - convert a symmetric function to the Schur function basis
CALLING SEQUENCE: tos(f); tos(f,<options>);
PARAMETERS: f = a symmetric function
<options> = one or more of the following (in any order):
(1) a basis name
(2) a list of partitions
(3) an equation of the form 'nrows=<integer>'
SYNOPSIS:
If f is any symmetric function, tos(f) will convert f into a linear
combination of the Schur functions s[lambda], with 'normal' applied to
the coefficients.
A number of optional arguments can be passed to the procedure that may
increase the efficiency, or (in some cases) modify the behavior of 'tos'.
In particular, if one of the arguments passed to 'tos' is...
(1) A basis name b, then the procedure assumes that f is expressed solely
in terms of the basis b. In particular, if b is not one of the predefined
bases, this requires f to be linear in elements of the basis b.
(2) A list of partitions, then the procedure will assume (without
verification) that if the coefficient of s[lambda] is nonzero in f, then
lambda is a member of the given partition list. If f is "sparse" with
respect to Schur functions, this can significantly improve the speed of
the algorithm. The procedures 'Par', 'subPar', and 'dominate' are useful
for producing lists of partitions for this purpose.
(3) An equation of the form 'nrows=n', where n is a positive integer,
then the calculation will be performed in a quotient ring of the full ring
of symmetric functions; namely, the quotient in which the elementary
symmetric functions e.(n+1),e.(n+2),... are all zero. This quotient has
a basis consisting of Schur functions s[lambda] in which lambda varies
over partitions with at most n rows (or parts). These Schur functions
correspond to the irreducible polynomial characters of GL(n).
EXAMPLES:
tos(h3*p2); yields s[5]+s[3,2]-s[3,1,1]
tos(s[2,1]*s[2,2], s, Par(7,4,4)); yields
s[4,3]+s[4,2,1]+s[3,3,1]+s[3,2,2]+s[3,2,1,1]+s[2,2,2,1]
#Compute the expansion of a skew Schur function in 3 variables:
f:=linalg[det](jt_matrix([5,4,2,1],[3,2]));
tos(f, nrows=3, subPar([5,4,2,1],7)); yields
s[5,2]+s[5,1,1]+2*s[4,3]+3*s[4,2,1]+2*s[3,3,1]+2*s[3,2,2]
SEE ALSO: Par, add_basis, dual_basis, dominate, subPar, toe, toh, top
FUNCTION: varset - variable set of a symmetric function
CALLING SEQUENCE: varset(f); varset(f,B);
PARAMETERS: f = a symmetric function
B = (optional) a name, or a list or set of names
SYNOPSIS:
If f is a symmetric function, varset(f) returns a table whose entries
describe the set of basic symmetric functions that occur (syntactically)
in f. There will be a table entry corresponding to each member of
`SF/Bases`, the global variable that specifies the known bases.
For each name of 'indexed' type in `SF/Bases`, say 'b[]', there will be
a table entry indexed by 'b', consisting of a list of all partitions
lambda such that b[lambda] appears in f.
For each name of 'string' type in `SF/Bases`, say 'b', there will be a
table entry indexed by 'b' consisting of the largest integer d such that
b.d appears in f (or 0, if b1,b2,... do not occur in f).
If B is any list or set of basis names (string or indexed), varset(f,B)
returns the same information, using B as the set of basis names.
If B is any basis name of type 'string' or 'indexed', varset(f,B) returns
only the table entry corresponding to the basis B (either an integer or
a list), not the table itself.
There are no restrictions on indexed names, but string names must consist
of a single letter.
EXAMPLES:
varset((p1+p3)^3+p7^2,p); yields 7
f:=s[3,2]*s[2]*m[2,1]+h3*h1^2;
varset(f); yields
table([(e)=0,(h)=3,(p)=0,(s)=[[3,2], [2]]])
T:=varset(f,{h,m[]}): T[m]; yields [[2,1]]
SEE ALSO: stdeg
FUNCTION: zee - squared norm of power sums
CALLING SEQUENCE: zee(lambda);
zee(lambda,a);
zee(lambda,q,t);
PARAMETERS: lambda = a partition
a,q,t = (optional) names or expressions
SYNOPSIS:
If lambda is a partition with m[i] parts equal to i, then zee(lambda) is
defined to be 1^m[1] * m[1]! * 2^m[2] * m[2]! * ... This is equal to the
size of the centralizer of any permutation of cycle-type lambda, and also
equals the squared norm of the power-sum symmetric function corresponding
to lambda, with respect to the standard scalar product.
The procedure also accepts additional arguments that are useful for
defining commonly used variations of the standard scalar product. See
the help for 'add_basis', 'dual_basis', 'scalar' and 'skew').
With two arguments, zee(lambda,a) returns a^nops(lambda) * zee(lambda).
With three arguments, zee(lambda,q,t) returns the product of zee(lambda)
and (1-q^lambda[i])/(1-t^lambda[i]), for i=1,2,...
EXAMPLES:
zee([3,3,2]); yields 36
zee([3,3,2],x); yields 36*x^3
Zee:= mu -> zee(mu,q^2,q);
c:=scalar(s[2,2],s[2,2],Zee);
normal(c); yields q^4+q^3+2*q^2+q+1
SEE ALSO: Par, add_basis, dual_basis, skew, scalar