Generic dual bases symmetric functions¶
-
class
sage.combinat.sf.dual.
SymmetricFunctionAlgebra_dual
(dual_basis, scalar, scalar_name='', basis_name=None, prefix=None)¶ 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 functionsscalar
– A function \(z\) on partitions which determines the scalar product on the power sum basis by \(\langle p_{\mu}, p_{\mu} \rangle = z(\mu)\). (Independently on the function chosen, the power sum basis will always be orthogonal; the functionscalar
only determines the norms of the basis elements.) This defaults to the functionzee
defined insage.combinat.sf.sfa
, that is, the function is defined by:\[\lambda \mapsto \prod_{i = 1}^\infty m_i(\lambda)! i^{m_i(\lambda)}`,\]where \(m_i(\lambda)\) means the number of times \(i\) appears in \(\lambda\). 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 parameterscalar
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 ashomogeneous
,monomial
,forgotten
, etc.).prefix
– (default:'d'
and the prefix fordual_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 byscalar
.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
andself^*
, as follow:Lookup for the canonical isomorphism from
self
to \(P\) (=powersum), and build the adjoint isomorphism from \(P^*\) toself^*
. Since \(P\) is self-adjoint for this scalar product, derive an isomorphism from \(P\) toself^*
, and by composition with the above get an isomorphism fromself
toself^*
(and similarly for the isomorphismself^*
toself
).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]
-
class
Element
(A, dictionary=None, dual=None)¶ 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.
dictionary
– an internal dictionary for the monomials and coefficients ofself
dual
– self as an element of the dual basis.
-
dual
()¶ Return
self
in the dual basis.OUTPUT:
the element
self
expanded in the dual basis toself.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')¶ Expand the symmetric function
self
as a symmetric polynomial inn
variables.INPUT:
n
– a nonnegative integeralphabet
– (default:'x'
) a variable for the expansion
OUTPUT:
A monomial expansion of
self
in the \(n\) variables labelled byalphabet
.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 sage: h([1]).expand(0) 0 sage: (3*h([])).expand(0) 3
-
omega
()¶ Return the image of
self
under the omega automorphism.The omega automorphism is defined to be the unique algebra endomorphism \(\omega\) of the ring of symmetric functions that satisfies \(\omega(e_k) = h_k\) for all positive integers \(k\) (where \(e_k\) stands for the \(k\)-th elementary symmetric function, and \(h_k\) stands for the \(k\)-th complete homogeneous symmetric function). It furthermore is a Hopf algebra endomorphism and an involution, and it is also known as the omega involution. It sends the power-sum symmetric function \(p_k\) to \((-1)^{k-1} p_k\) for every positive integer \(k\).
The images of some bases under the omega automorphism are given by
\[\omega(e_{\lambda}) = h_{\lambda}, \qquad \omega(h_{\lambda}) = e_{\lambda}, \qquad \omega(p_{\lambda}) = (-1)^{|\lambda| - \ell(\lambda)} p_{\lambda}, \qquad \omega(s_{\lambda}) = s_{\lambda^{\prime}},\]where \(\lambda\) is any partition, where \(\ell(\lambda)\) denotes the length (
length()
) of the partition \(\lambda\), where \(\lambda^{\prime}\) denotes the conjugate partition (conjugate()
) of \(\lambda\), and where the usual notations for bases are used (\(e\) = elementary, \(h\) = complete homogeneous, \(p\) = powersum, \(s\) = Schur).omega_involution()
is a synonym for theomega()
method.OUTPUT:
the result of applying omega 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]
-
omega_involution
()¶ Return the image of
self
under the omega automorphism.The omega automorphism is defined to be the unique algebra endomorphism \(\omega\) of the ring of symmetric functions that satisfies \(\omega(e_k) = h_k\) for all positive integers \(k\) (where \(e_k\) stands for the \(k\)-th elementary symmetric function, and \(h_k\) stands for the \(k\)-th complete homogeneous symmetric function). It furthermore is a Hopf algebra endomorphism and an involution, and it is also known as the omega involution. It sends the power-sum symmetric function \(p_k\) to \((-1)^{k-1} p_k\) for every positive integer \(k\).
The images of some bases under the omega automorphism are given by
\[\omega(e_{\lambda}) = h_{\lambda}, \qquad \omega(h_{\lambda}) = e_{\lambda}, \qquad \omega(p_{\lambda}) = (-1)^{|\lambda| - \ell(\lambda)} p_{\lambda}, \qquad \omega(s_{\lambda}) = s_{\lambda^{\prime}},\]where \(\lambda\) is any partition, where \(\ell(\lambda)\) denotes the length (
length()
) of the partition \(\lambda\), where \(\lambda^{\prime}\) denotes the conjugate partition (conjugate()
) of \(\lambda\), and where the usual notations for bases are used (\(e\) = elementary, \(h\) = complete homogeneous, \(p\) = powersum, \(s\) = Schur).omega_involution()
is a synonym for theomega()
method.OUTPUT:
the result of applying omega 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)¶ Return the standard scalar product of
self
andx
.INPUT:
x
– element of the symmetric functions
OUTPUT:
the scalar product between
x
andself
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)¶ Return the Hall-Littlewood scalar product of
self
andx
.INPUT:
x
– element of the same dual basis asself
OUTPUT:
the Hall-Littlewood scalar product between
x
andself
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)
-
product
(left, right)¶ Return product of
left
andright
.Multiplication is done by performing the multiplication in the dual basis of
self
and then converting back toself
.INPUT:
left
,right
– elements ofself
OUTPUT:
the product of
left
andright
in the basisself
EXAMPLES:
sage: m = SymmetricFunctions(QQ).monomial() 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]
-
transition_matrix
(basis, n)¶ Returns the transition matrix between the \(n^{th}\) homogeneous components of
self
andbasis
.INPUT:
basis
– a target basis of the ring of symmetric functionsn
– nonnegative integer
OUTPUT:
A transition matrix from
self
tobasis
for the elements of degreen
. The indexing order of the rows and columns is the order ofPartitions(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]