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]
EXAMPLES:
sage: m = SFAMonomial(QQ)
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(zee)
sage: a = h(2); a
2*d_m[]
sage: ~a
1/2*d_m[]
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]); a # indirect doctest
d_m[2, 1] + d_m[3]
sage: a.dual()
4*m[1, 1, 1] + 3*m[2, 1] + 2*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/2 # indirect doctest
1/2*d_m[2, 1] + 1/2*d_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: -h([2,1]) # indirect doctest
-d_m[2, 1]
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: h([2,1])-h([3]) # indirect doctest
d_m[2, 1] - d_m[3]
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)
Coerce things into self. We do this by coercing things into self’s dual basis, and then converting that to self.
EXAMPLES:
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:
sage: e = SFAElementary(QQ)
sage: f = e.dual_basis()
sage: f == loads(dumps(f))
True
EXAMPLES:
sage: m = SFAMonomial(QQ)
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(scalar=zee); h #indirect doctests
Dual basis to Symmetric Function Algebra over Rational Field, Monomial symmetric functions as basis
sage: h = m.dual_basis(scalar=zee, scalar_name='Hall scalar product'); h #indirect doctest
Dual basis to Symmetric Function Algebra over Rational Field, Monomial symmetric functions as basis with respect to the Hall scalar product
Multiplication is done by performing the multiplication in self’s dual basis and then converting back to self.
EXAMPLES:
sage: m = SFAMonomial(QQ)
sage: zee = sage.combinat.sf.sfa.zee
sage: h = m.dual_basis(scalar=zee)
sage: a = h([2])
sage: b = a*a; b # indirect doctest
d_m[2, 2]
sage: b.dual()
6*m[1, 1, 1, 1] + 4*m[2, 1, 1] + 3*m[2, 2] + 2*m[3, 1] + m[4]
Computes the transition matrix between self and its dual basis for
the homogenous component of size .
EXAMPLES:
sage: e = SFAElementary(QQ)
sage: f = e.dual_basis()
sage: f._precompute(2)
sage: l = lambda c: [ (i[0],[j for j in sorted(i[1].items())]) for i in sorted(c.items())]
sage: l(f._to_self_cache)
[([1, 1], [([1, 1], 2), ([2], 1)]), ([2], [([1, 1], 1), ([2], 1)])]
sage: l(f._from_self_cache)
[([1, 1], [([1, 1], 1), ([2], -1)]), ([2], [([1, 1], -1), ([2], 2)])]
sage: f._transition_matrices[2]
[1 1]
[1 2]
sage: f._inverse_transition_matrices[2]
[ 2 -1]
[-1 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]