Bases: sage.combinat.sf.classical.SymmetricFunctionAlgebra_classical
Generic dual base of a basis of symmetric functions.
EXAMPLES:
sage: e = SymmetricFunctions(QQ).e()
sage: f = e.dual_basis(prefix = "m")
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
, and by composition
with the above get an isomorphism from self to
(and
similarly for the isomorphism
to
).
This should be striped down to just (auto?) defining canonical isomorphism by adjunction (as in MuPAD-Combinat), and let the coercion handle the rest.
By transitivity, this defines indirect coercions to and from all other bases:
sage: s = SFASchur(QQ['t'].fraction_field())
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)]
Return the dual basis to self. If a the scalar option is not passed, then it returns the dual basis with respect to the scalar product used to define self.
EXAMPLES:
sage: m = SFAMonomial(QQ)
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(scalar=zee)
sage: h.dual_basis()
Symmetric Function Algebra over Rational Field, Monomial symmetric functions as basis
sage: m2 = h.dual_basis(zee, prefix='m2')
sage: m([2])^2
2*m[2, 2] + m[4]
sage: m2([2])^2
2*m2[2, 2] + m2[4]
Returns the transition matrix between the
homogeneous component of self and basis.
EXAMPLES:
sage: s = SFASchur(QQ)
sage: e = SFAElementary(QQ)
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: 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]
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 = SFAMonomial(QQ)
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.
EXAMPLES:
sage: m = SFAMonomial(QQ)
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(scalar=zee)
sage: a = h([2,1])
sage: a.dual()
3*m[1, 1, 1] + 2*m[2, 1] + m[3]
EXAMPLES:
sage: m = SFAMonomial(QQ)
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.
EXAMPLES:
sage: m = SFAMonomial(QQ)
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(zee)
sage: hh = SFAHomogeneous(QQ)
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.
EXAMPLES:
sage: m = SFAMonomial(QQ)
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.
EXAMPLES:
sage: m = SFAMonomial(QQ)
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)