Bases: sage.combinat.sf.classical.SymmetricFunctionAlgebra_classical
Generic dual basis of a basis of symmetric functions.
INPUT:
dual_basis – a basis of the ring of symmetric functions
scalar – A function on partitions which determines the
scalar product on the power sum basis by
. (Independently on the
function chosen, the power sum basis will always be orthogonal; the
function scalar only determines the norms of the basis elements.)
This defaults to the function zee defined in
sage.combinat.sf.sfa, that is, the function is defined by:
where means the number of times
appears in
. This default function gives the standard Hall scalar
product on the ring of symmetric functions.
scalar_name – (default: the empty string) a string giving a description of the scalar product specified by the parameter scalar
basis_name – (optional) a string to serve as name for the basis to be generated (such as “forgotten” in “the forgotten basis”); don’t set it to any of the already existing basis names (such as homogeneous, monomial, forgotten, etc.).
prefix – (default: 'd' and the prefix for dual_basis) a string to use as the symbol for the basis
OUTPUT:
The basis of the ring of symmetric functions dual to the basis dual_basis with respect to the scalar product determined by scalar.
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
(=powersum), and build the adjoint isomorphism from
to
self^*. Since
is self-adjoint for this scalar product,
derive an isomorphism from
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(lambda x: 1)
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 ticket 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)]
Bases: sage.combinat.sf.classical.SymmetricFunctionAlgebra_classical.Element
An element in the dual basis.
INPUT:
At least one of the following must be specified. The one (if any) which is not provided will be computed.
Return self in the dual basis.
OUTPUT:
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 the symmetric function self as a symmetric polynomial
in variables.
INPUT:
OUTPUT:
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
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 sends the power-sum symmetric function
to
for every positive integer
.
OUTPUT:
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]
Return the standard scalar product of self and x.
INPUT:
OUTPUT:
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
Return the Hall-Littlewood scalar product of self and x.
INPUT:
OUTPUT:
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)
Returns the transition matrix between the homogeneous components
of self and basis.
INPUT:
OUTPUT:
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]