Generic dual bases symmetric functions¶

class sage.combinat.sf.dual.SymmetricFunctionAlgebra_dual(dual_basis, scalar, scalar_name='', basis_name=None, prefix=None)

Generic dual base of a basis of symmetric functions.

INPUT:

• self – a dual basis of the symmetric functions
• dual_basis – a basis of the symmetric functions dual to self
• scalar – a function $$zee$$ on partitions which determines the scalar product on the power sum basis with normalization $$<p_\mu, p_\mu> = zee(\mu)$$.
• scalar_name – a string giving a description of the scalar product specified by the parameter scalar (default : the empty string)
• prefix – a string to use as the symbol for the basis. The default string will be “d” + the prefix for dual_basis

EXAMPLES:

sage: e = SymmetricFunctions(QQ).e()
sage: f = e.dual_basis(prefix = "m", basis_name="Forgotten symmetric functions"); f
Symmetric Functions over Rational Field in the Forgotten symmetric functions basis
sage: TestSuite(f).run(elements = [f[1,1]+2*f[2], f[1]+3*f[1,1]])
sage: TestSuite(f).run() # long time (11s on sage.math, 2011)


This class defines canonical coercions between self and self^*, as follow:

Lookup for the canonical isomorphism from self to $$P$$ (=powersum), and build the adjoint isomorphism from $$P^*$$ to self^*. Since $$P$$ is self-adjoint for this scalar product, derive an isomorphism from $$P$$ to self^*, and by composition with the above get an isomorphism from self to self^* (and similarly for the isomorphism self^* to self).

This should be striped down to just (auto?) defining canonical isomorphism by adjunction (as in MuPAD-Combinat), and let the coercion handle the rest.

Inversions may not be possible if the base ring is not a field:

sage: m = SymmetricFunctions(ZZ).m()
sage: h = m.dual_basis(sage.combinat.sf.sfa.zee)
sage: h[2,1]
Traceback (most recent call last):
...
TypeError: no conversion of this rational to integer


By transitivity, this defines indirect coercions to and from all other bases:

sage: s = SymmetricFunctions(QQ['t'].fraction_field()).s()
sage: t = QQ['t'].fraction_field().gen()
sage: zee_hl = lambda x: x.centralizer_size(t=t)
sage: S = s.dual_basis(zee_hl)
sage: S(s([2,1]))
(-t/(t^5-2*t^4+t^3-t^2+2*t-1))*d_s[1, 1, 1] + ((-t^2-1)/(t^5-2*t^4+t^3-t^2+2*t-1))*d_s[2, 1] + (-t/(t^5-2*t^4+t^3-t^2+2*t-1))*d_s[3]


TESTS:

Regression test for trac ticket #12489. This ticked improving equality test revealed that the conversion back from the dual basis did not strip cancelled terms from the dictionary:

sage: y = e[1, 1, 1, 1] - 2*e[2, 1, 1] + e[2, 2]
sage: sorted(f.element_class(f, dual = y))
[([1, 1, 1, 1], 6), ([2, 1, 1], 2), ([2, 2], 1)]

class Element(A, dictionary=None, dual=None)

Create an element of a dual basis.

INPUT:

• self – an element of the symmetric functions in a dual basis

At least one of the following must be specified. The one (if any) which is not provided will be computed.

• dictionary – an internal dictionary for the monomials and coefficients of self
• dual – self as an element of the dual basis.

TESTS:

sage: m = SymmetricFunctions(QQ).monomial()
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(scalar=zee, prefix='h')
sage: a = h([2])
sage: ec = h._element_class
sage: ec(h, dual=m([2]))
-h[1, 1] + 2*h[2]
sage: h(m([2]))
-h[1, 1] + 2*h[2]
sage: h([2])
h[2]
sage: h([2])._dual
m[1, 1] + m[2]
sage: m(h([2]))
m[1, 1] + m[2]

dual()

Returns self in the dual basis.

INPUT:

• self – an element of the symmetric functions in a dual basis

OUTPUT:

• the element self expanded in the dual basis to self.parent()

EXAMPLES:

sage: m = SymmetricFunctions(QQ).monomial()
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(scalar=zee)
sage: a = h([2,1])
sage: a.parent()
Dual basis to Symmetric Functions over Rational Field in the monomial basis
sage: a.dual()
3*m[1, 1, 1] + 2*m[2, 1] + m[3]

expand(n, alphabet='x')

Expands the symmetric function as a symmetric polynomial in $$n$$ variables.

INPUT:

• self – an element of the symmetric functions in a dual basis
• n – a positive integer
• alphabet – a variable for the expansion (default: $$x$$)

OUTPUT:

• a monomial expansion of an instance of dual of self in $$n$$ variable

EXAMPLES:

sage: m = SymmetricFunctions(QQ).monomial()
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(zee)
sage: a = h([2,1])+h([3])
sage: a.expand(2)
2*x0^3 + 3*x0^2*x1 + 3*x0*x1^2 + 2*x1^3
sage: a.dual().expand(2)
2*x0^3 + 3*x0^2*x1 + 3*x0*x1^2 + 2*x1^3
sage: a.expand(2,alphabet='y')
2*y0^3 + 3*y0^2*y1 + 3*y0*y1^2 + 2*y1^3
sage: a.expand(2,alphabet='x,y')
2*x^3 + 3*x^2*y + 3*x*y^2 + 2*y^3

omega()

Returns the image of self under the Frobenius / omega automorphism.

INPUT:

• self – an element of the symmetric functions in a dual basis

OUTPUT:

• returns omega applied to self

EXAMPLES:

sage: m = SymmetricFunctions(QQ).monomial()
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(zee)
sage: hh = SymmetricFunctions(QQ).homogeneous()
sage: hh([2,1]).omega()
h[1, 1, 1] - h[2, 1]
sage: h([2,1]).omega()
d_m[1, 1, 1] - d_m[2, 1]

scalar(x)

Returns the standard scalar product of self and x.

INPUT:

• self – an element of the symmetric functions in a dual basis
• x – element of the symmetric functions

OUTPUT:

• the scalar product between x and self

EXAMPLES:

sage: m = SymmetricFunctions(QQ).monomial()
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(scalar=zee)
sage: a = h([2,1])
sage: a.scalar(a)
2

scalar_hl(x)

Returns the Hall-Littlewood scalar product of self and x.

INPUT:

• self – an element of the symmetric functions in a dual basis
• x – element of self

OUTPUT:

• the scalar product between x and self

EXAMPLES:

sage: m = SymmetricFunctions(QQ).monomial()
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(scalar=zee)
sage: a = h([2,1])
sage: a.scalar_hl(a)
(t + 2)/(-t^4 + 2*t^3 - 2*t + 1)

SymmetricFunctionAlgebra_dual.transition_matrix(basis, n)

Returns the transition matrix between the $$n^{th}$$ homogeneous component of self and basis.

INPUT:

• self – a dual basis of the symmetric functions
• basis – a target basis of the ring of symmetric functions
• n – nonnegative integer

OUTPUT:

• returns a transition matrix from self to basis for the elements of degree n. The indexing order of the rows and columns is the order of Partitions(n).

EXAMPLES:

sage: Sym = SymmetricFunctions(QQ)
sage: s = Sym.schur()
sage: e = Sym.elementary()
sage: f = e.dual_basis()
sage: f.transition_matrix(s, 5)
[ 1 -1  0  1  0 -1  1]
[-2  1  1 -1 -1  1  0]
[-2  2 -1 -1  1  0  0]
[ 3 -1 -1  1  0  0  0]
[ 3 -2  1  0  0  0  0]
[-4  1  0  0  0  0  0]
[ 1  0  0  0  0  0  0]
sage: Partitions(5).list()
[[5], [4, 1], [3, 2], [3, 1, 1], [2, 2, 1], [2, 1, 1, 1], [1, 1, 1, 1, 1]]
sage: s(f[2,2,1])
s[3, 2] - 2*s[4, 1] + 3*s[5]
sage: e.transition_matrix(s, 5).inverse().transpose()
[ 1 -1  0  1  0 -1  1]
[-2  1  1 -1 -1  1  0]
[-2  2 -1 -1  1  0  0]
[ 3 -1 -1  1  0  0  0]
[ 3 -2  1  0  0  0  0]
[-4  1  0  0  0  0  0]
[ 1  0  0  0  0  0  0]


Previous topic

Power sum symmetric functions

Next topic

Symmetric functions defined by orthogonality and triangularity.