Bases: sage.combinat.sf.classical.SymmetricFunctionAlgebra_classical
Generic dual base of a basis of symmetric functions.
INPUT:
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(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)]
Bases: sage.combinat.sf.classical.SymmetricFunctionAlgebra_classical.Element
Create an element of a dual basis.
INPUT:
At least one of the following must be specified. The one (if any) which is not provided will be computed.
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]
Returns self in the dual basis.
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.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]
Expands the symmetric function 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
Returns the image of self under the Frobenius / omega automorphism.
INPUT:
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]
Returns 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
Returns 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 component 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]