# Homogeneous symmetric functions#

By this we mean the basis formed of the complete homogeneous symmetric functions $$h_\lambda$$, not an arbitrary graded basis.

class sage.combinat.sf.homogeneous.SymmetricFunctionAlgebra_homogeneous(Sym)[source]#

A class of methods specific to the homogeneous basis of symmetric functions.

INPUT:

• self – a homogeneous basis of symmetric functions

• Sym – an instance of the ring of symmetric functions

class Element[source]#

Bases: Element

expand(n, alphabet='x')[source]#

Expand the symmetric function self as a symmetric polynomial in n variables.

INPUT:

• n – a nonnegative integer

• alphabet – (default: 'x') a variable for the expansion

OUTPUT:

A monomial expansion of self in the $$n$$ variables labelled by alphabet.

EXAMPLES:

sage: h = SymmetricFunctions(QQ).h()
sage: h([3]).expand(2)
x0^3 + x0^2*x1 + x0*x1^2 + x1^3
sage: h([1,1,1]).expand(2)
x0^3 + 3*x0^2*x1 + 3*x0*x1^2 + x1^3
sage: h([2,1]).expand(3)
x0^3 + 2*x0^2*x1 + 2*x0*x1^2 + x1^3 + 2*x0^2*x2 + 3*x0*x1*x2 + 2*x1^2*x2 + 2*x0*x2^2 + 2*x1*x2^2 + x2^3
sage: h([3]).expand(2,alphabet='y')
y0^3 + y0^2*y1 + y0*y1^2 + y1^3
sage: h([3]).expand(2,alphabet='x,y')
x^3 + x^2*y + x*y^2 + y^3
sage: h([3]).expand(3,alphabet='x,y,z')
x^3 + x^2*y + x*y^2 + y^3 + x^2*z + x*y*z + y^2*z + x*z^2 + y*z^2 + z^3
sage: (h([]) + 2*h([1])).expand(3)
2*x0 + 2*x1 + 2*x2 + 1
sage: h([1]).expand(0)
0
sage: (3*h([])).expand(0)
3

>>> from sage.all import *
>>> h = SymmetricFunctions(QQ).h()
>>> h([Integer(3)]).expand(Integer(2))
x0^3 + x0^2*x1 + x0*x1^2 + x1^3
>>> h([Integer(1),Integer(1),Integer(1)]).expand(Integer(2))
x0^3 + 3*x0^2*x1 + 3*x0*x1^2 + x1^3
>>> h([Integer(2),Integer(1)]).expand(Integer(3))
x0^3 + 2*x0^2*x1 + 2*x0*x1^2 + x1^3 + 2*x0^2*x2 + 3*x0*x1*x2 + 2*x1^2*x2 + 2*x0*x2^2 + 2*x1*x2^2 + x2^3
>>> h([Integer(3)]).expand(Integer(2),alphabet='y')
y0^3 + y0^2*y1 + y0*y1^2 + y1^3
>>> h([Integer(3)]).expand(Integer(2),alphabet='x,y')
x^3 + x^2*y + x*y^2 + y^3
>>> h([Integer(3)]).expand(Integer(3),alphabet='x,y,z')
x^3 + x^2*y + x*y^2 + y^3 + x^2*z + x*y*z + y^2*z + x*z^2 + y*z^2 + z^3
>>> (h([]) + Integer(2)*h([Integer(1)])).expand(Integer(3))
2*x0 + 2*x1 + 2*x2 + 1
>>> h([Integer(1)]).expand(Integer(0))
0
>>> (Integer(3)*h([])).expand(Integer(0))
3

exponential_specialization(t=None, q=1)[source]#

Return the exponential specialization of a symmetric function (when $$q = 1$$), or the $$q$$-exponential specialization (when $$q \neq 1$$).

The exponential specialization $$ex$$ at $$t$$ is a $$K$$-algebra homomorphism from the $$K$$-algebra of symmetric functions to another $$K$$-algebra $$R$$. It is defined whenever the base ring $$K$$ is a $$\QQ$$-algebra and $$t$$ is an element of $$R$$. The easiest way to define it is by specifying its values on the powersum symmetric functions to be $$p_1 = t$$ and $$p_n = 0$$ for $$n > 1$$. Equivalently, on the homogeneous functions it is given by $$ex(h_n) = t^n / n!$$; see Proposition 7.8.4 of [EnumComb2].

By analogy, the $$q$$-exponential specialization is a $$K$$-algebra homomorphism from the $$K$$-algebra of symmetric functions to another $$K$$-algebra $$R$$ that depends on two elements $$t$$ and $$q$$ of $$R$$ for which the elements $$1 - q^i$$ for all positive integers $$i$$ are invertible. It can be defined by specifying its values on the complete homogeneous symmetric functions to be

$ex_q(h_n) = t^n / [n]_q!,$

where $$[n]_q!$$ is the $$q$$-factorial. Equivalently, for $$q \neq 1$$ and a homogeneous symmetric function $$f$$ of degree $$n$$, we have

$ex_q(f) = (1-q)^n t^n ps_q(f),$

where $$ps_q(f)$$ is the stable principal specialization of $$f$$ (see principal_specialization()). (See (7.29) in [EnumComb2].)

The limit of $$ex_q$$ as $$q \to 1$$ is $$ex$$.

INPUT:

• t (default: None) – the value to use for $$t$$; the default is to create a ring of polynomials in t.

• q (default: $$1$$) – the value to use for $$q$$. If q is None, then a ring (or fraction field) of polynomials in q is created.

EXAMPLES:

sage: h = SymmetricFunctions(QQ).h()
sage: x = h[5,3]
sage: x.exponential_specialization()
1/720*t^8
sage: factorial(5)*factorial(3)
720

sage: x = 5*h[1,1,1] + 3*h[2,1] + 1
sage: x.exponential_specialization()
13/2*t^3 + 1

>>> from sage.all import *
>>> h = SymmetricFunctions(QQ).h()
>>> x = h[Integer(5),Integer(3)]
>>> x.exponential_specialization()
1/720*t^8
>>> factorial(Integer(5))*factorial(Integer(3))
720

>>> x = Integer(5)*h[Integer(1),Integer(1),Integer(1)] + Integer(3)*h[Integer(2),Integer(1)] + Integer(1)
>>> x.exponential_specialization()
13/2*t^3 + 1


We also support the $$q$$-exponential_specialization:

sage: factor(h[3].exponential_specialization(q=var("q"), t=var("t")))   # needs sage.symbolic
t^3/((q^2 + q + 1)*(q + 1))

>>> from sage.all import *
>>> factor(h[Integer(3)].exponential_specialization(q=var("q"), t=var("t")))   # needs sage.symbolic
t^3/((q^2 + q + 1)*(q + 1))

omega()[source]#

Return the image of self under the omega automorphism.

The omega automorphism is defined to be the unique algebra endomorphism $$\omega$$ of the ring of symmetric functions that satisfies $$\omega(e_k) = h_k$$ for all positive integers $$k$$ (where $$e_k$$ stands for the $$k$$-th elementary symmetric function, and $$h_k$$ stands for the $$k$$-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 $$p_k$$ to $$(-1)^{k-1} p_k$$ for every positive integer $$k$$.

The images of some bases under the omega automorphism are given by

$\omega(e_{\lambda}) = h_{\lambda}, \qquad \omega(h_{\lambda}) = e_{\lambda}, \qquad \omega(p_{\lambda}) = (-1)^{|\lambda| - \ell(\lambda)} p_{\lambda}, \qquad \omega(s_{\lambda}) = s_{\lambda^{\prime}},$

where $$\lambda$$ is any partition, where $$\ell(\lambda)$$ denotes the length (length()) of the partition $$\lambda$$, where $$\lambda^{\prime}$$ denotes the conjugate partition (conjugate()) of $$\lambda$$, and where the usual notations for bases are used ($$e$$ = elementary, $$h$$ = complete homogeneous, $$p$$ = powersum, $$s$$ = Schur).

omega_involution() is a synonym for the omega() method.

OUTPUT:

• the image of self under the omega automorphism

EXAMPLES:

sage: h = SymmetricFunctions(QQ).h()
sage: a = h([2,1]); a
h[2, 1]
sage: a.omega()
h[1, 1, 1] - h[2, 1]
sage: e = SymmetricFunctions(QQ).e()
sage: e(h([2,1]).omega())
e[2, 1]

>>> from sage.all import *
>>> h = SymmetricFunctions(QQ).h()
>>> a = h([Integer(2),Integer(1)]); a
h[2, 1]
>>> a.omega()
h[1, 1, 1] - h[2, 1]
>>> e = SymmetricFunctions(QQ).e()
>>> e(h([Integer(2),Integer(1)]).omega())
e[2, 1]

omega_involution()[source]#

Return the image of self under the omega automorphism.

The omega automorphism is defined to be the unique algebra endomorphism $$\omega$$ of the ring of symmetric functions that satisfies $$\omega(e_k) = h_k$$ for all positive integers $$k$$ (where $$e_k$$ stands for the $$k$$-th elementary symmetric function, and $$h_k$$ stands for the $$k$$-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 $$p_k$$ to $$(-1)^{k-1} p_k$$ for every positive integer $$k$$.

The images of some bases under the omega automorphism are given by

$\omega(e_{\lambda}) = h_{\lambda}, \qquad \omega(h_{\lambda}) = e_{\lambda}, \qquad \omega(p_{\lambda}) = (-1)^{|\lambda| - \ell(\lambda)} p_{\lambda}, \qquad \omega(s_{\lambda}) = s_{\lambda^{\prime}},$

where $$\lambda$$ is any partition, where $$\ell(\lambda)$$ denotes the length (length()) of the partition $$\lambda$$, where $$\lambda^{\prime}$$ denotes the conjugate partition (conjugate()) of $$\lambda$$, and where the usual notations for bases are used ($$e$$ = elementary, $$h$$ = complete homogeneous, $$p$$ = powersum, $$s$$ = Schur).

omega_involution() is a synonym for the omega() method.

OUTPUT:

• the image of self under the omega automorphism

EXAMPLES:

sage: h = SymmetricFunctions(QQ).h()
sage: a = h([2,1]); a
h[2, 1]
sage: a.omega()
h[1, 1, 1] - h[2, 1]
sage: e = SymmetricFunctions(QQ).e()
sage: e(h([2,1]).omega())
e[2, 1]

>>> from sage.all import *
>>> h = SymmetricFunctions(QQ).h()
>>> a = h([Integer(2),Integer(1)]); a
h[2, 1]
>>> a.omega()
h[1, 1, 1] - h[2, 1]
>>> e = SymmetricFunctions(QQ).e()
>>> e(h([Integer(2),Integer(1)]).omega())
e[2, 1]

principal_specialization(n=+Infinity, q=None)[source]#

Return the principal specialization of a symmetric function.

The principal specialization of order $$n$$ at $$q$$ is the ring homomorphism $$ps_{n,q}$$ from the ring of symmetric functions to another commutative ring $$R$$ given by $$x_i \mapsto q^{i-1}$$ for $$i \in \{1,\dots,n\}$$ and $$x_i \mapsto 0$$ for $$i > n$$. Here, $$q$$ is a given element of $$R$$, and we assume that the variables of our symmetric functions are $$x_1, x_2, x_3, \ldots$$. (To be more precise, $$ps_{n,q}$$ is a $$K$$-algebra homomorphism, where $$K$$ is the base ring.) See Section 7.8 of [EnumComb2].

The stable principal specialization at $$q$$ is the ring homomorphism $$ps_q$$ from the ring of symmetric functions to another commutative ring $$R$$ given by $$x_i \mapsto q^{i-1}$$ for all $$i$$. This is well-defined only if the resulting infinite sums converge; thus, in particular, setting $$q = 1$$ in the stable principal specialization is an invalid operation.

INPUT:

• n (default: infinity) – a nonnegative integer or infinity, specifying whether to compute the principal specialization of order n or the stable principal specialization.

• q (default: None) – the value to use for $$q$$; the default is to create a ring of polynomials in q (or a field of rational functions in q) over the given coefficient ring.

We use the formulas from Proposition 7.8.3 of [EnumComb2] (using Gaussian binomial coefficients $$\binom{u}{v}_q$$):

\begin{align}\begin{aligned}ps_{n,q}(h_\lambda) = \prod_i \binom{n+\lambda_i-1}{\lambda_i}_q,\\ps_{n,1}(h_\lambda) = \prod_i \binom{n+\lambda_i-1}{\lambda_i},\\ps_q(h_\lambda) = 1 / \prod_i \prod_{j=1}^{\lambda_i} (1-q^j).\end{aligned}\end{align}

EXAMPLES:

sage: h = SymmetricFunctions(QQ).h()
sage: x = h[2,1]
sage: x.principal_specialization(3)
q^6 + 2*q^5 + 4*q^4 + 4*q^3 + 4*q^2 + 2*q + 1
sage: x = 3*h[2] + 2*h[1] + 1
sage: x.principal_specialization(3, q=var("q"))                         # needs sage.symbolic
2*(q^3 - 1)/(q - 1) + 3*(q^4 - 1)*(q^3 - 1)/((q^2 - 1)*(q - 1)) + 1

>>> from sage.all import *
>>> h = SymmetricFunctions(QQ).h()
>>> x = h[Integer(2),Integer(1)]
>>> x.principal_specialization(Integer(3))
q^6 + 2*q^5 + 4*q^4 + 4*q^3 + 4*q^2 + 2*q + 1
>>> x = Integer(3)*h[Integer(2)] + Integer(2)*h[Integer(1)] + Integer(1)
>>> x.principal_specialization(Integer(3), q=var("q"))                         # needs sage.symbolic
2*(q^3 - 1)/(q - 1) + 3*(q^4 - 1)*(q^3 - 1)/((q^2 - 1)*(q - 1)) + 1

coproduct_on_generators(i)[source]#

Return the coproduct on $$h_i$$.

INPUT:

• self – a homogeneous basis of symmetric functions

• i – a nonnegative integer

OUTPUT:

• the sum $$\sum_{r=0}^i h_r \otimes h_{i-r}$$

EXAMPLES:

sage: Sym = SymmetricFunctions(QQ)
sage: h = Sym.homogeneous()
sage: h.coproduct_on_generators(2)
h[] # h[2] + h[1] # h[1] + h[2] # h[]
sage: h.coproduct_on_generators(0)
h[] # h[]

>>> from sage.all import *
>>> Sym = SymmetricFunctions(QQ)
>>> h = Sym.homogeneous()
>>> h.coproduct_on_generators(Integer(2))
h[] # h[2] + h[1] # h[1] + h[2] # h[]
>>> h.coproduct_on_generators(Integer(0))
h[] # h[]