Power sum symmetric functions¶
-
class
sage.combinat.sf.powersum.
SymmetricFunctionAlgebra_power
(Sym)¶ Bases:
sage.combinat.sf.multiplicative.SymmetricFunctionAlgebra_multiplicative
A class for methods associated to the power sum basis of the symmetric functions
INPUT:
self
– the power sum basis of the symmetric functionsSym
– an instance of the ring of symmetric functions
TESTS:
sage: p = SymmetricFunctions(QQ).p() sage: p == loads(dumps(p)) True sage: TestSuite(p).run(skip=['_test_associativity', '_test_distributivity', '_test_prod']) sage: TestSuite(p).run(elements = [p[1,1]+p[2], p[1]+2*p[1,1]])
-
class
Element
(M, x)¶ Bases:
sage.combinat.sf.classical.SymmetricFunctionAlgebra_classical.Element
Create a combinatorial module element. This should never be called directly, but only through the parent combinatorial free module’s
__call__()
method.TESTS:
sage: F = CombinatorialFreeModule(QQ, ['a','b','c']) sage: B = F.basis() sage: f = B['a'] + 3*B['c']; f B['a'] + 3*B['c'] sage: f == loads(dumps(f)) True
-
adams_operation
(n)¶ Return the image of the symmetric function
self
under the-th Frobenius operator.
The
-th Frobenius operator
is defined to be the map from the ring of symmetric functions to itself that sends every symmetric function
to
. This operator
is a Hopf algebra endomorphism, and satisfies
for every partition
(where
means the monomial basis). Moreover,
for every positive integer
(where
denotes the
-th powersum symmetric function).
The
-th Frobenius operator is also called the
-th Frobenius endomorphism. It is not related to the Frobenius map which connects the ring of symmetric functions with the representation theory of the symmetric group.
The
-th Frobenius operator is also the
-th Adams operator of the
-ring of symmetric functions over the integers.
The
-th Frobenius operator can also be described via plethysm: Every symmetric function
satisfies
, where
is the
-th powersum symmetric function, and
denotes (outer) plethysm.
INPUT:
n
– a positive integer
OUTPUT:
The result of applying the
-th Frobenius operator (on the ring of symmetric functions) to
self
.EXAMPLES:
sage: Sym = SymmetricFunctions(ZZ) sage: p = Sym.p() sage: p[3].frobenius(2) p[6] sage: p[4,2,1].frobenius(3) p[12, 6, 3] sage: p([]).frobenius(4) p[] sage: p[3].frobenius(1) p[3] sage: (p([3]) - p([2]) + p([])).frobenius(3) p[] - p[6] + p[9]
TESTS:
Let us check that this method on the powersum basis gives the same result as the implementation in
sage.combinat.sf.sfa
on the complete homogeneous basis:sage: Sym = SymmetricFunctions(QQ) sage: p = Sym.p(); h = Sym.h() sage: all( h(p(lam)).frobenius(3) == h(p(lam).frobenius(3)) ....: for lam in Partitions(3) ) True sage: all( p(h(lam)).frobenius(2) == p(h(lam).frobenius(2)) ....: for lam in Partitions(4) ) True
See also
-
expand
(n, alphabet='x')¶ Expand the symmetric function
self
as a symmetric polynomial inn
variables.INPUT:
n
– a nonnegative integeralphabet
– (default:'x'
) a variable for the expansion
OUTPUT:
A monomial expansion of
self
in thevariables labelled by
alphabet
.EXAMPLES:
sage: p = SymmetricFunctions(QQ).p() sage: a = p([2]) sage: a.expand(2) x0^2 + x1^2 sage: a.expand(3, alphabet=['a','b','c']) a^2 + b^2 + c^2 sage: p([2,1,1]).expand(2) x0^4 + 2*x0^3*x1 + 2*x0^2*x1^2 + 2*x0*x1^3 + x1^4 sage: p([7]).expand(4) x0^7 + x1^7 + x2^7 + x3^7 sage: p([7]).expand(4,alphabet='t') t0^7 + t1^7 + t2^7 + t3^7 sage: p([7]).expand(4,alphabet='x,y,z,t') x^7 + y^7 + z^7 + t^7 sage: p(1).expand(4) 1 sage: p(0).expand(4) 0 sage: (p([]) + 2*p([1])).expand(3) 2*x0 + 2*x1 + 2*x2 + 1 sage: p([1]).expand(0) 0 sage: (3*p([])).expand(0) 3
-
frobenius
(n)¶ Return the image of the symmetric function
self
under the-th Frobenius operator.
The
-th Frobenius operator
is defined to be the map from the ring of symmetric functions to itself that sends every symmetric function
to
. This operator
is a Hopf algebra endomorphism, and satisfies
for every partition
(where
means the monomial basis). Moreover,
for every positive integer
(where
denotes the
-th powersum symmetric function).
The
-th Frobenius operator is also called the
-th Frobenius endomorphism. It is not related to the Frobenius map which connects the ring of symmetric functions with the representation theory of the symmetric group.
The
-th Frobenius operator is also the
-th Adams operator of the
-ring of symmetric functions over the integers.
The
-th Frobenius operator can also be described via plethysm: Every symmetric function
satisfies
, where
is the
-th powersum symmetric function, and
denotes (outer) plethysm.
INPUT:
n
– a positive integer
OUTPUT:
The result of applying the
-th Frobenius operator (on the ring of symmetric functions) to
self
.EXAMPLES:
sage: Sym = SymmetricFunctions(ZZ) sage: p = Sym.p() sage: p[3].frobenius(2) p[6] sage: p[4,2,1].frobenius(3) p[12, 6, 3] sage: p([]).frobenius(4) p[] sage: p[3].frobenius(1) p[3] sage: (p([3]) - p([2]) + p([])).frobenius(3) p[] - p[6] + p[9]
TESTS:
Let us check that this method on the powersum basis gives the same result as the implementation in
sage.combinat.sf.sfa
on the complete homogeneous basis:sage: Sym = SymmetricFunctions(QQ) sage: p = Sym.p(); h = Sym.h() sage: all( h(p(lam)).frobenius(3) == h(p(lam).frobenius(3)) ....: for lam in Partitions(3) ) True sage: all( p(h(lam)).frobenius(2) == p(h(lam).frobenius(2)) ....: for lam in Partitions(4) ) True
See also
-
omega
()¶ Return the image of
self
under the omega automorphism.The omega automorphism is defined to be the unique algebra endomorphism
of the ring of symmetric functions that satisfies
for all positive integers
(where
stands for the
-th elementary symmetric function, and
stands for the
-th complete homogeneous symmetric function). It furthermore is a Hopf algebra endomorphism and an involution, and it is also known as the omega involution. It sends the power-sum symmetric function
to
for every positive integer
.
The images of some bases under the omega automorphism are given by
where
is any partition, where
denotes the length (
length()
) of the partition, where
denotes the conjugate partition (
conjugate()
) of, and where the usual notations for bases are used (
= elementary,
= complete homogeneous,
= powersum,
= Schur).
omega_involution()
is a synonym for theomega()
method.OUTPUT:
- the image of
self
under the omega automorphism
EXAMPLES:
sage: p = SymmetricFunctions(QQ).p() sage: a = p([2,1]); a p[2, 1] sage: a.omega() -p[2, 1] sage: p([]).omega() p[] sage: p(0).omega() 0 sage: p = SymmetricFunctions(ZZ).p() sage: (p([3,1,1]) - 2 * p([2,1])).omega() 2*p[2, 1] + p[3, 1, 1]
- the image of
-
omega_involution
()¶ Return the image of
self
under the omega automorphism.The omega automorphism is defined to be the unique algebra endomorphism
of the ring of symmetric functions that satisfies
for all positive integers
(where
stands for the
-th elementary symmetric function, and
stands for the
-th complete homogeneous symmetric function). It furthermore is a Hopf algebra endomorphism and an involution, and it is also known as the omega involution. It sends the power-sum symmetric function
to
for every positive integer
.
The images of some bases under the omega automorphism are given by
where
is any partition, where
denotes the length (
length()
) of the partition, where
denotes the conjugate partition (
conjugate()
) of, and where the usual notations for bases are used (
= elementary,
= complete homogeneous,
= powersum,
= Schur).
omega_involution()
is a synonym for theomega()
method.OUTPUT:
- the image of
self
under the omega automorphism
EXAMPLES:
sage: p = SymmetricFunctions(QQ).p() sage: a = p([2,1]); a p[2, 1] sage: a.omega() -p[2, 1] sage: p([]).omega() p[] sage: p(0).omega() 0 sage: p = SymmetricFunctions(ZZ).p() sage: (p([3,1,1]) - 2 * p([2,1])).omega() 2*p[2, 1] + p[3, 1, 1]
- the image of
-
scalar
(x, zee=None)¶ Return the standard scalar product of
self
andx
.INPUT:
x
– a power sum symmetric functionzee
– (default: uses standardzee
function) optional input specifying the scalar product on the power sum basis with normalization.
zee
should be a function on partitions.
Note that the power-sum symmetric functions are orthogonal under this scalar product. With the default value of
zee
, the value ofis given by the size of the centralizer in
of a permutation of cycle type
.
OUTPUT:
- the standard scalar product between
self
andx
, or, if the optional parameterzee
is specified, then the scalar product with respect to the normalizationwith the power sum basis elements being orthogonal
EXAMPLES:
sage: p = SymmetricFunctions(QQ).p() sage: p4 = Partitions(4) sage: matrix([ [p(a).scalar(p(b)) for a in p4] for b in p4]) [ 4 0 0 0 0] [ 0 3 0 0 0] [ 0 0 8 0 0] [ 0 0 0 4 0] [ 0 0 0 0 24] sage: p(0).scalar(p(1)) 0 sage: p(1).scalar(p(2)) 2 sage: zee = lambda x : 1 sage: matrix( [[p[la].scalar(p[mu], zee) for la in Partitions(3)] for mu in Partitions(3)]) [1 0 0] [0 1 0] [0 0 1]
-
verschiebung
(n)¶ Return the image of the symmetric function
self
under the-th Verschiebung operator.
The
-th Verschiebung operator
is defined to be the unique algebra endomorphism
of the ring of symmetric functions that satisfies
for every positive integer
divisible by
, and satisfies
for every positive integer
not divisible by
. This operator
is a Hopf algebra endomorphism. For every nonnegative integer
with
, it satisfies
(where
is the complete homogeneous basis,
is the powersum basis, and
is the elementary basis). For every nonnegative integer
with
, it satisfes
The
-th Verschiebung operator is also called the
-th Verschiebung endomorphism. Its name derives from the Verschiebung (German for “shift”) endomorphism of the Witt vectors.
The
-th Verschiebung operator is adjoint to the
-th Frobenius operator (see
frobenius()
for its definition) with respect to the Hall scalar product (scalar()
).The action of the
-th Verschiebung operator on the Schur basis can also be computed explicitly. The following (probably clumsier than necessary) description can be obtained by solving exercise 7.61 in Stanley’s [STA].
Let
be a partition. Let
be a positive integer. If the
-core of
is nonempty, then
. Otherwise, the following method computes
: Write the partition
in the form
for some nonnegative integer
. (If
does not divide the length of
, then this is achieved by adding trailing zeroes to
.) Set
for every
. Then,
is a strictly decreasing sequence of nonnegative integers. Stably sort the list
in order of (weakly) increasing remainder of
modulo
. Let
be the sign of the permutation that is used for this sorting. Let
be the sign of the permutation that is used to stably sort the list
in order of (weakly) increasing remainder of
modulo
. (Notice that
.) Then,
, where
is the
-quotient of
.
INPUT:
n
– a positive integer
OUTPUT:
The result of applying the
-th Verschiebung operator (on the ring of symmetric functions) to
self
.EXAMPLES:
sage: Sym = SymmetricFunctions(ZZ) sage: p = Sym.p() sage: p[3].verschiebung(2) 0 sage: p[4].verschiebung(4) 4*p[1]
The Verschiebung endomorphisms are multiplicative:
sage: all( all( p(lam).verschiebung(2) * p(mu).verschiebung(2) ....: == (p(lam) * p(mu)).verschiebung(2) ....: for mu in Partitions(4) ) ....: for lam in Partitions(4) ) True
Testing the adjointness between the Frobenius operators
and the Verschiebung operators
:
sage: Sym = SymmetricFunctions(QQ) sage: p = Sym.p() sage: all( all( p(lam).verschiebung(2).scalar(p(mu)) ....: == p(lam).scalar(p(mu).frobenius(2)) ....: for mu in Partitions(2) ) ....: for lam in Partitions(4) ) True
TESTS:
Let us check that this method on the powersum basis gives the same result as the implementation in
sage.combinat.sf.sfa
on the monomial basis:sage: Sym = SymmetricFunctions(QQ) sage: p = Sym.p(); m = Sym.m() sage: all( m(p(lam)).verschiebung(3) == m(p(lam).verschiebung(3)) ....: for lam in Partitions(6) ) True sage: all( p(m(lam)).verschiebung(2) == p(m(lam).verschiebung(2)) ....: for lam in Partitions(4) ) True
-
-
SymmetricFunctionAlgebra_power.
antipode_on_basis
(partition)¶ Return the antipode of
self[partition]
.The antipode on the generator
(for
) is
, and the antipode on
is
.
INPUT:
self
– the power sum basis of the symmetric functionspartition
– a partition
OUTPUT:
- the result of the antipode on
self(partition)
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: p = Sym.p() sage: p.antipode_on_basis([2]) -p[2] sage: p.antipode_on_basis([3]) -p[3] sage: p.antipode_on_basis([2,2]) p[2, 2] sage: p.antipode_on_basis([]) p[]
-
SymmetricFunctionAlgebra_power.
bottom_schur_function
(partition, degree=None)¶ Return the least-degree component of
s[partition]
, wheres
denotes the Schur basis of the symmetric functions, and the grading is not the usual grading on the symmetric functions but rather the grading which gives everydegree
.
This least-degree component has its degree equal to the Frobenius rank of
partition
, while the degree with respect to the usual grading is still the size ofpartition
.This method requires the base ring to be a (commutative)
-algebra. This restriction is unavoidable, since the least-degree component (in general) has noninteger coefficients in all classical bases of the symmetric functions.
The optional keyword
degree
allows taking any homogeneous component rather than merely the least-degree one. Specifically, ifdegree
is set, then thedegree
-th component will be returned.REFERENCES:
[ClSt03] Peter Clifford, Richard P. Stanley, Bottom Schur functions. Arxiv math/0311382v2. EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: p = Sym.p() sage: p.bottom_schur_function([2,2,1]) -1/6*p[3, 2] + 1/4*p[4, 1] sage: p.bottom_schur_function([2,1]) -1/3*p[3] sage: p.bottom_schur_function([3]) 1/3*p[3] sage: p.bottom_schur_function([1,1,1]) 1/3*p[3] sage: p.bottom_schur_function(Partition([1,1,1])) 1/3*p[3] sage: p.bottom_schur_function([2,1], degree=1) -1/3*p[3] sage: p.bottom_schur_function([2,1], degree=2) 0 sage: p.bottom_schur_function([2,1], degree=3) 1/3*p[1, 1, 1] sage: p.bottom_schur_function([2,2,1], degree=3) 1/8*p[2, 2, 1] - 1/6*p[3, 1, 1]
-
SymmetricFunctionAlgebra_power.
coproduct_on_generators
(i)¶ Return coproduct on generators for power sums
(for
).
The elements
are primitive elements.
INPUT:
self
– the power sum basis of the symmetric functionsi
– a positive integer
OUTPUT:
- the result of the coproduct on the generator
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: p = Sym.powersum() sage: p.coproduct_on_generators(2) p[] # p[2] + p[2] # p[]