\(k\)-Schur Functions¶
- class sage.combinat.sf.new_kschur.KBoundedSubspace(Sym, k, t='t')[source]¶
Bases:
UniqueRepresentation
,Parent
This class implements the subspace of the ring of symmetric functions spanned by \(\{ s_{\lambda}[X/(1-t)] \}_{\lambda_1\le k} = \{ s_{\lambda}^{(k)}[X;t]\}_{\lambda_1 \le k}\) over the base ring \(\QQ[t]\). When \(t=1\), this space is in fact a subring of the ring of symmetric functions generated by the complete homogeneous symmetric functions \(h_i\) for \(1\le i \le k\).
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: KB = Sym.kBoundedSubspace(3,1); KB 3-bounded Symmetric Functions over Rational Field with t=1 sage: Sym = SymmetricFunctions(QQ['t']) sage: KB = Sym.kBoundedSubspace(3); KB 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ) >>> KB = Sym.kBoundedSubspace(Integer(3),Integer(1)); KB 3-bounded Symmetric Functions over Rational Field with t=1 >>> Sym = SymmetricFunctions(QQ['t']) >>> KB = Sym.kBoundedSubspace(Integer(3)); KB 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field
Sym = SymmetricFunctions(QQ) KB = Sym.kBoundedSubspace(3,1); KB Sym = SymmetricFunctions(QQ['t']) KB = Sym.kBoundedSubspace(3); KB
The \(k\)-Schur function basis can be constructed as follows:
sage: ks = KB.kschur(); ks 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis
>>> from sage.all import * >>> ks = KB.kschur(); ks 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis
ks = KB.kschur(); ks
- K_kschur()[source]¶
Return the \(k\)-bounded basis called the K-\(k\)-Schur basis.
See [Morse11] and [LamSchillingShimozono10].
REFERENCES:
[Morse11]J. Morse, Combinatorics of the K-theory of affine Grassmannians, Adv. in Math., Volume 229, Issue 5, pp. 2950–2984.
[LamSchillingShimozono10]T. Lam, A. Schilling, M.Shimozono, K-theory Schubert calculus of the affine Grassmannian, Compositio Math. 146 (2010), 811-852.
EXAMPLES:
sage: kB = SymmetricFunctions(QQ).kBoundedSubspace(3,1) sage: g = kB.K_kschur() sage: g 3-bounded Symmetric Functions over Rational Field with t=1 in the K-3-Schur basis sage: kB = SymmetricFunctions(QQ['t']).kBoundedSubspace(3) sage: g = kB.K_kschur() Traceback (most recent call last): ... ValueError: This basis only exists for t=1
>>> from sage.all import * >>> kB = SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)) >>> g = kB.K_kschur() >>> g 3-bounded Symmetric Functions over Rational Field with t=1 in the K-3-Schur basis >>> kB = SymmetricFunctions(QQ['t']).kBoundedSubspace(Integer(3)) >>> g = kB.K_kschur() Traceback (most recent call last): ... ValueError: This basis only exists for t=1
kB = SymmetricFunctions(QQ).kBoundedSubspace(3,1) g = kB.K_kschur() g kB = SymmetricFunctions(QQ['t']).kBoundedSubspace(3) g = kB.K_kschur()
- khomogeneous()[source]¶
The homogeneous basis of this algebra.
See also
EXAMPLES:
sage: kh3 = SymmetricFunctions(QQ).kBoundedSubspace(3,1).khomogeneous() sage: TestSuite(kh3).run()
>>> from sage.all import * >>> kh3 = SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)).khomogeneous() >>> TestSuite(kh3).run()
kh3 = SymmetricFunctions(QQ).kBoundedSubspace(3,1).khomogeneous() TestSuite(kh3).run()
- kschur()[source]¶
The \(k\)-Schur basis of this algebra.
See also
EXAMPLES:
sage: ks3 = SymmetricFunctions(QQ).kBoundedSubspace(3,1).kschur() sage: TestSuite(ks3).run()
>>> from sage.all import * >>> ks3 = SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)).kschur() >>> TestSuite(ks3).run()
ks3 = SymmetricFunctions(QQ).kBoundedSubspace(3,1).kschur() TestSuite(ks3).run()
- ksplit()[source]¶
The \(k\)-split basis of this algebra.
See also
EXAMPLES:
sage: ksp3 = SymmetricFunctions(QQ).kBoundedSubspace(3,1).ksplit() sage: TestSuite(ksp3).run()
>>> from sage.all import * >>> ksp3 = SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)).ksplit() >>> TestSuite(ksp3).run()
ksp3 = SymmetricFunctions(QQ).kBoundedSubspace(3,1).ksplit() TestSuite(ksp3).run()
- realizations()[source]¶
A list of realizations of this algebra.
EXAMPLES:
sage: SymmetricFunctions(QQ).kBoundedSubspace(3,1).realizations() [3-bounded Symmetric Functions over Rational Field with t=1 in the 3-Schur basis, 3-bounded Symmetric Functions over Rational Field with t=1 in the 3-split basis, 3-bounded Symmetric Functions over Rational Field with t=1 in the 3-bounded homogeneous basis, 3-bounded Symmetric Functions over Rational Field with t=1 in the K-3-Schur basis] sage: SymmetricFunctions(QQ['t']).kBoundedSubspace(3).realizations() [3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis, 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-split basis]
>>> from sage.all import * >>> SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)).realizations() [3-bounded Symmetric Functions over Rational Field with t=1 in the 3-Schur basis, 3-bounded Symmetric Functions over Rational Field with t=1 in the 3-split basis, 3-bounded Symmetric Functions over Rational Field with t=1 in the 3-bounded homogeneous basis, 3-bounded Symmetric Functions over Rational Field with t=1 in the K-3-Schur basis] >>> SymmetricFunctions(QQ['t']).kBoundedSubspace(Integer(3)).realizations() [3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis, 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-split basis]
SymmetricFunctions(QQ).kBoundedSubspace(3,1).realizations() SymmetricFunctions(QQ['t']).kBoundedSubspace(3).realizations()
- retract(sym)[source]¶
Return the retract of
sym
from the ring of symmetric functions toself
.INPUT:
sym
– a symmetric function
OUTPUT:
the analogue of the symmetric function in the \(k\)-bounded subspace (if possible)
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: s = Sym.schur() sage: KB = Sym.kBoundedSubspace(3,1); KB 3-bounded Symmetric Functions over Rational Field with t=1 sage: KB.retract(s[2]+s[3]) ks3[2] + ks3[3] sage: KB.retract(s[2,1,1]) Traceback (most recent call last): ... ValueError: s[2, 1, 1] is not in the image
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ) >>> s = Sym.schur() >>> KB = Sym.kBoundedSubspace(Integer(3),Integer(1)); KB 3-bounded Symmetric Functions over Rational Field with t=1 >>> KB.retract(s[Integer(2)]+s[Integer(3)]) ks3[2] + ks3[3] >>> KB.retract(s[Integer(2),Integer(1),Integer(1)]) Traceback (most recent call last): ... ValueError: s[2, 1, 1] is not in the image
Sym = SymmetricFunctions(QQ) s = Sym.schur() KB = Sym.kBoundedSubspace(3,1); KB KB.retract(s[2]+s[3]) KB.retract(s[2,1,1])
- class sage.combinat.sf.new_kschur.KBoundedSubspaceBases(base, t='t')[source]¶
Bases:
Category_realization_of_parent
The category of bases for the \(k\)-bounded subspace of symmetric functions.
- class ElementMethods[source]¶
Bases:
object
- expand(*args, **kwargs)[source]¶
Return the monomial expansion of
self
in \(n\) variables.INPUT:
n
– positive integer
OUTPUT: monomial expansion of
self
in \(n\) variablesEXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: ks = Sym.kschur(3,1) sage: ks[3,1].expand(2) x0^4 + 2*x0^3*x1 + 2*x0^2*x1^2 + 2*x0*x1^3 + x1^4 sage: s = Sym.schur() sage: ks[3,1].expand(2) == s(ks[3,1]).expand(2) True sage: Sym = SymmetricFunctions(QQ['t']) sage: ks = Sym.kschur(3) sage: f = ks[3,2]-ks[1] sage: f.expand(2) t^2*x0^5 + (t^2 + t)*x0^4*x1 + (t^2 + t + 1)*x0^3*x1^2 + (t^2 + t + 1)*x0^2*x1^3 + (t^2 + t)*x0*x1^4 + t^2*x1^5 - x0 - x1
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ) >>> ks = Sym.kschur(Integer(3),Integer(1)) >>> ks[Integer(3),Integer(1)].expand(Integer(2)) x0^4 + 2*x0^3*x1 + 2*x0^2*x1^2 + 2*x0*x1^3 + x1^4 >>> s = Sym.schur() >>> ks[Integer(3),Integer(1)].expand(Integer(2)) == s(ks[Integer(3),Integer(1)]).expand(Integer(2)) True >>> Sym = SymmetricFunctions(QQ['t']) >>> ks = Sym.kschur(Integer(3)) >>> f = ks[Integer(3),Integer(2)]-ks[Integer(1)] >>> f.expand(Integer(2)) t^2*x0^5 + (t^2 + t)*x0^4*x1 + (t^2 + t + 1)*x0^3*x1^2 + (t^2 + t + 1)*x0^2*x1^3 + (t^2 + t)*x0*x1^4 + t^2*x1^5 - x0 - x1
Sym = SymmetricFunctions(QQ) ks = Sym.kschur(3,1) ks[3,1].expand(2) s = Sym.schur() ks[3,1].expand(2) == s(ks[3,1]).expand(2) Sym = SymmetricFunctions(QQ['t']) ks = Sym.kschur(3) f = ks[3,2]-ks[1] f.expand(2)
- hl_creation_operator(nu, t=None)[source]¶
This is the vertex operator that generalizes Jing’s operator.
It is a linear operator that raises the degree by \(|\nu|\). This creation operator is a t-analogue of multiplication by
s(nu)
.See also
Proposition 5 in [SZ2001].
INPUT:
nu
– a partition or a list of integerst
– (default:None
, in which caset
is used) an element of the base ring
EXAMPLES:
sage: Sym = SymmetricFunctions(FractionField(QQ['t'])) sage: ks = Sym.kschur(4) sage: s = Sym.schur() sage: s(ks([3,1,1]).hl_creation_operator([1])) (t-1)*s[2, 2, 1, 1] + t^2*s[3, 1, 1, 1] + (t^3+t^2-t)*s[3, 2, 1] + (t^3-t^2)*s[3, 3] + (t^4+t^3)*s[4, 1, 1] + t^4*s[4, 2] + t^5*s[5, 1] sage: ks([3,1,1]).hl_creation_operator([1]) (t-1)*ks4[2, 2, 1, 1] + t^2*ks4[3, 1, 1, 1] + t^3*ks4[3, 2, 1] + (t^3-t^2)*ks4[3, 3] + t^4*ks4[4, 1, 1] sage: Sym = SymmetricFunctions(QQ) sage: ks = Sym.kschur(4,t=1) sage: ks([3,1,1]).hl_creation_operator([1]) ks4[3, 1, 1, 1] + ks4[3, 2, 1] + ks4[4, 1, 1]
>>> from sage.all import * >>> Sym = SymmetricFunctions(FractionField(QQ['t'])) >>> ks = Sym.kschur(Integer(4)) >>> s = Sym.schur() >>> s(ks([Integer(3),Integer(1),Integer(1)]).hl_creation_operator([Integer(1)])) (t-1)*s[2, 2, 1, 1] + t^2*s[3, 1, 1, 1] + (t^3+t^2-t)*s[3, 2, 1] + (t^3-t^2)*s[3, 3] + (t^4+t^3)*s[4, 1, 1] + t^4*s[4, 2] + t^5*s[5, 1] >>> ks([Integer(3),Integer(1),Integer(1)]).hl_creation_operator([Integer(1)]) (t-1)*ks4[2, 2, 1, 1] + t^2*ks4[3, 1, 1, 1] + t^3*ks4[3, 2, 1] + (t^3-t^2)*ks4[3, 3] + t^4*ks4[4, 1, 1] >>> Sym = SymmetricFunctions(QQ) >>> ks = Sym.kschur(Integer(4),t=Integer(1)) >>> ks([Integer(3),Integer(1),Integer(1)]).hl_creation_operator([Integer(1)]) ks4[3, 1, 1, 1] + ks4[3, 2, 1] + ks4[4, 1, 1]
Sym = SymmetricFunctions(FractionField(QQ['t'])) ks = Sym.kschur(4) s = Sym.schur() s(ks([3,1,1]).hl_creation_operator([1])) ks([3,1,1]).hl_creation_operator([1]) Sym = SymmetricFunctions(QQ) ks = Sym.kschur(4,t=1) ks([3,1,1]).hl_creation_operator([1])
- is_schur_positive(*args, **kwargs)[source]¶
Return whether
self
is Schur positive.EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: ks = Sym.kschur(3,1) sage: f = ks[3,2]+ks[1] sage: f.is_schur_positive() True sage: f = ks[3,2]-ks[1] sage: f.is_schur_positive() False sage: Sym = SymmetricFunctions(QQ['t']) sage: ks = Sym.kschur(3) sage: f = ks[3,2]+ks[1] sage: f.is_schur_positive() True sage: f = ks[3,2]-ks[1] sage: f.is_schur_positive() False
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ) >>> ks = Sym.kschur(Integer(3),Integer(1)) >>> f = ks[Integer(3),Integer(2)]+ks[Integer(1)] >>> f.is_schur_positive() True >>> f = ks[Integer(3),Integer(2)]-ks[Integer(1)] >>> f.is_schur_positive() False >>> Sym = SymmetricFunctions(QQ['t']) >>> ks = Sym.kschur(Integer(3)) >>> f = ks[Integer(3),Integer(2)]+ks[Integer(1)] >>> f.is_schur_positive() True >>> f = ks[Integer(3),Integer(2)]-ks[Integer(1)] >>> f.is_schur_positive() False
Sym = SymmetricFunctions(QQ) ks = Sym.kschur(3,1) f = ks[3,2]+ks[1] f.is_schur_positive() f = ks[3,2]-ks[1] f.is_schur_positive() Sym = SymmetricFunctions(QQ['t']) ks = Sym.kschur(3) f = ks[3,2]+ks[1] f.is_schur_positive() f = ks[3,2]-ks[1] f.is_schur_positive()
- omega()[source]¶
Return the \(\omega\) operator on
self
.At \(t=1\), \(\omega\) maps the \(k\)-Schur function \(s^{(k)}_\lambda\) to \(s^{(k)}_{\lambda^{(k)}}\), where \(\lambda^{(k)}\) is the \(k\)-conjugate of the partition \(\lambda\).
See also
For generic \(t\), \(\omega\) sends \(s^{(k)}_\lambda[X;t]\) to \(t^d s^{(k)}_{\lambda^{(k)}}[X;1/t]\), where \(d\) is the size of the core of \(\lambda\) minus the size of \(\lambda\). Most of the time, this result is not in the \(k\)-bounded subspace.
See also
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: ks = Sym.kschur(3,1) sage: ks[2,2,1,1].omega() ks3[2, 2, 2] sage: kh = Sym.khomogeneous(3) sage: kh[3].omega() h3[1, 1, 1] - 2*h3[2, 1] + h3[3] sage: Sym = SymmetricFunctions(FractionField(QQ['t'])) sage: ks = Sym.kschur(3) sage: ks[3,1,1].omega() Traceback (most recent call last): ... ValueError: t*s[2, 1, 1, 1] + s[3, 1, 1] is not in the image
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ) >>> ks = Sym.kschur(Integer(3),Integer(1)) >>> ks[Integer(2),Integer(2),Integer(1),Integer(1)].omega() ks3[2, 2, 2] >>> kh = Sym.khomogeneous(Integer(3)) >>> kh[Integer(3)].omega() h3[1, 1, 1] - 2*h3[2, 1] + h3[3] >>> Sym = SymmetricFunctions(FractionField(QQ['t'])) >>> ks = Sym.kschur(Integer(3)) >>> ks[Integer(3),Integer(1),Integer(1)].omega() Traceback (most recent call last): ... ValueError: t*s[2, 1, 1, 1] + s[3, 1, 1] is not in the image
Sym = SymmetricFunctions(QQ) ks = Sym.kschur(3,1) ks[2,2,1,1].omega() kh = Sym.khomogeneous(3) kh[3].omega() Sym = SymmetricFunctions(FractionField(QQ['t'])) ks = Sym.kschur(3) ks[3,1,1].omega()
- omega_t_inverse()[source]¶
Return the map \(t\to 1/t\) composed with \(\omega\) on
self
.Unlike the map
omega()
, the result ofomega_t_inverse()
lives in the \(k\)-bounded subspace and hence will return an element even for generic \(t\). For \(t=1\),omega()
andomega_t_inverse()
return the same result.EXAMPLES:
sage: Sym = SymmetricFunctions(FractionField(QQ['t'])) sage: ks = Sym.kschur(3) sage: ks[3,1,1].omega_t_inverse() 1/t*ks3[2, 1, 1, 1] sage: ks[3,2].omega_t_inverse() 1/t^2*ks3[1, 1, 1, 1, 1]
>>> from sage.all import * >>> Sym = SymmetricFunctions(FractionField(QQ['t'])) >>> ks = Sym.kschur(Integer(3)) >>> ks[Integer(3),Integer(1),Integer(1)].omega_t_inverse() 1/t*ks3[2, 1, 1, 1] >>> ks[Integer(3),Integer(2)].omega_t_inverse() 1/t^2*ks3[1, 1, 1, 1, 1]
Sym = SymmetricFunctions(FractionField(QQ['t'])) ks = Sym.kschur(3) ks[3,1,1].omega_t_inverse() ks[3,2].omega_t_inverse()
- scalar(x, zee=None)[source]¶
Return standard scalar product between
self
andx
.INPUT:
x
– element of the ring of symmetric functions over the same base ring asself
zee
– an optional function on partitions giving the value for the scalar product between \(p_{\mu}\) and \(p_{\mu}\) (default: use the standardzee()
function)
See also
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ['t']) sage: ks3 = Sym.kschur(3) sage: ks3[3,2,1].scalar( ks3[2,2,2] ) t^3 + t sage: dks3 = Sym.kBoundedQuotient(3).dks() sage: [ks3[3,2,1].scalar(dks3(la)) for la in Partitions(6, max_part=3)] [0, 1, 0, 0, 0, 0, 0] sage: dks3 = Sym.kBoundedQuotient(3,t=1).dks() sage: [ks3[2,2,2].scalar(dks3(la)) for la in Partitions(6, max_part=3)] [0, t - 1, 0, 1, 0, 0, 0] sage: ks3 = Sym.kschur(3,t=1) sage: [ks3[2,2,2].scalar(dks3(la)) for la in Partitions(6, max_part=3)] [0, 0, 0, 1, 0, 0, 0] sage: kH = Sym.khomogeneous(4) sage: kH([2,2,1]).scalar(ks3[2,2,1]) 3
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ['t']) >>> ks3 = Sym.kschur(Integer(3)) >>> ks3[Integer(3),Integer(2),Integer(1)].scalar( ks3[Integer(2),Integer(2),Integer(2)] ) t^3 + t >>> dks3 = Sym.kBoundedQuotient(Integer(3)).dks() >>> [ks3[Integer(3),Integer(2),Integer(1)].scalar(dks3(la)) for la in Partitions(Integer(6), max_part=Integer(3))] [0, 1, 0, 0, 0, 0, 0] >>> dks3 = Sym.kBoundedQuotient(Integer(3),t=Integer(1)).dks() >>> [ks3[Integer(2),Integer(2),Integer(2)].scalar(dks3(la)) for la in Partitions(Integer(6), max_part=Integer(3))] [0, t - 1, 0, 1, 0, 0, 0] >>> ks3 = Sym.kschur(Integer(3),t=Integer(1)) >>> [ks3[Integer(2),Integer(2),Integer(2)].scalar(dks3(la)) for la in Partitions(Integer(6), max_part=Integer(3))] [0, 0, 0, 1, 0, 0, 0] >>> kH = Sym.khomogeneous(Integer(4)) >>> kH([Integer(2),Integer(2),Integer(1)]).scalar(ks3[Integer(2),Integer(2),Integer(1)]) 3
Sym = SymmetricFunctions(QQ['t']) ks3 = Sym.kschur(3) ks3[3,2,1].scalar( ks3[2,2,2] ) dks3 = Sym.kBoundedQuotient(3).dks() [ks3[3,2,1].scalar(dks3(la)) for la in Partitions(6, max_part=3)] dks3 = Sym.kBoundedQuotient(3,t=1).dks() [ks3[2,2,2].scalar(dks3(la)) for la in Partitions(6, max_part=3)] ks3 = Sym.kschur(3,t=1) [ks3[2,2,2].scalar(dks3(la)) for la in Partitions(6, max_part=3)] kH = Sym.khomogeneous(4) kH([2,2,1]).scalar(ks3[2,2,1])
- class ParentMethods[source]¶
Bases:
object
- an_element()[source]¶
Return an element of
self
.EXAMPLES:
sage: SymmetricFunctions(QQ['t']).kschur(3).an_element() 2*ks3[] + 2*ks3[1] + 3*ks3[2]
>>> from sage.all import * >>> SymmetricFunctions(QQ['t']).kschur(Integer(3)).an_element() 2*ks3[] + 2*ks3[1] + 3*ks3[2]
SymmetricFunctions(QQ['t']).kschur(3).an_element()
- antipode(element)[source]¶
Return the antipode on
self
by lifting to the space of symmetric functions, computing the antipode, and then converting toself.parent()
. This is only the antipode for \(t = 1\) and for other values of \(t\) the result may not be in the space where the \(k\)-Schur functions live.INPUT:
element
– an element in a basis of the ring of symmetric functions
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: ks3 = Sym.kschur(3,1) sage: ks3[3,2].antipode() -ks3[1, 1, 1, 1, 1] sage: ks3.antipode(ks3[3,2]) -ks3[1, 1, 1, 1, 1]
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ) >>> ks3 = Sym.kschur(Integer(3),Integer(1)) >>> ks3[Integer(3),Integer(2)].antipode() -ks3[1, 1, 1, 1, 1] >>> ks3.antipode(ks3[Integer(3),Integer(2)]) -ks3[1, 1, 1, 1, 1]
Sym = SymmetricFunctions(QQ) ks3 = Sym.kschur(3,1) ks3[3,2].antipode() ks3.antipode(ks3[3,2])
- coproduct(element)[source]¶
Return the coproduct operation on
element
.The coproduct is first computed on the homogeneous basis if \(t=1\) and on the Hall-Littlewood
Qp
basis otherwise. The result is computed then converted to the tensor squared ofself.parent()
.INPUT:
element
– an element in a basis of the ring of symmetric functions
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: ks3 = Sym.kschur(3,1) sage: ks3[2,1].coproduct() ks3[] # ks3[2, 1] + ks3[1] # ks3[1, 1] + ks3[1] # ks3[2] + ks3[1, 1] # ks3[1] + ks3[2] # ks3[1] + ks3[2, 1] # ks3[] sage: h3 = Sym.khomogeneous(3) sage: h3[2,1].coproduct() h3[] # h3[2, 1] + h3[1] # h3[1, 1] + h3[1] # h3[2] + h3[1, 1] # h3[1] + h3[2] # h3[1] + h3[2, 1] # h3[] sage: ks3t = SymmetricFunctions(FractionField(QQ['t'])).kschur(3) sage: ks3t[2,1].coproduct() ks3[] # ks3[2, 1] + ks3[1] # ks3[1, 1] + ks3[1] # ks3[2] + ks3[1, 1] # ks3[1] + ks3[2] # ks3[1] + ks3[2, 1] # ks3[] sage: ks3t[3,1].coproduct() ks3[] # ks3[3, 1] + ks3[1] # ks3[2, 1] + (t+1)*ks3[1] # ks3[3] + ks3[1, 1] # ks3[2] + ks3[2] # ks3[1, 1] + (t+1)*ks3[2] # ks3[2] + ks3[2, 1] # ks3[1] + (t+1)*ks3[3] # ks3[1] + ks3[3, 1] # ks3[] sage: h3.coproduct(h3[2,1]) h3[] # h3[2, 1] + h3[1] # h3[1, 1] + h3[1] # h3[2] + h3[1, 1] # h3[1] + h3[2] # h3[1] + h3[2, 1] # h3[]
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ) >>> ks3 = Sym.kschur(Integer(3),Integer(1)) >>> ks3[Integer(2),Integer(1)].coproduct() ks3[] # ks3[2, 1] + ks3[1] # ks3[1, 1] + ks3[1] # ks3[2] + ks3[1, 1] # ks3[1] + ks3[2] # ks3[1] + ks3[2, 1] # ks3[] >>> h3 = Sym.khomogeneous(Integer(3)) >>> h3[Integer(2),Integer(1)].coproduct() h3[] # h3[2, 1] + h3[1] # h3[1, 1] + h3[1] # h3[2] + h3[1, 1] # h3[1] + h3[2] # h3[1] + h3[2, 1] # h3[] >>> ks3t = SymmetricFunctions(FractionField(QQ['t'])).kschur(Integer(3)) >>> ks3t[Integer(2),Integer(1)].coproduct() ks3[] # ks3[2, 1] + ks3[1] # ks3[1, 1] + ks3[1] # ks3[2] + ks3[1, 1] # ks3[1] + ks3[2] # ks3[1] + ks3[2, 1] # ks3[] >>> ks3t[Integer(3),Integer(1)].coproduct() ks3[] # ks3[3, 1] + ks3[1] # ks3[2, 1] + (t+1)*ks3[1] # ks3[3] + ks3[1, 1] # ks3[2] + ks3[2] # ks3[1, 1] + (t+1)*ks3[2] # ks3[2] + ks3[2, 1] # ks3[1] + (t+1)*ks3[3] # ks3[1] + ks3[3, 1] # ks3[] >>> h3.coproduct(h3[Integer(2),Integer(1)]) h3[] # h3[2, 1] + h3[1] # h3[1, 1] + h3[1] # h3[2] + h3[1, 1] # h3[1] + h3[2] # h3[1] + h3[2, 1] # h3[]
Sym = SymmetricFunctions(QQ) ks3 = Sym.kschur(3,1) ks3[2,1].coproduct() h3 = Sym.khomogeneous(3) h3[2,1].coproduct() ks3t = SymmetricFunctions(FractionField(QQ['t'])).kschur(3) ks3t[2,1].coproduct() ks3t[3,1].coproduct() h3.coproduct(h3[2,1])
- counit(element)[source]¶
Return the counit of
element
.The counit is the constant term of
element
.INPUT:
element
– an element in a basis of the ring of symmetric functions
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: ks3 = Sym.kschur(3,1) sage: f = 2*ks3[2,1] + 3*ks3[[]] sage: f.counit() 3 sage: ks3.counit(f) 3
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ) >>> ks3 = Sym.kschur(Integer(3),Integer(1)) >>> f = Integer(2)*ks3[Integer(2),Integer(1)] + Integer(3)*ks3[[]] >>> f.counit() 3 >>> ks3.counit(f) 3
Sym = SymmetricFunctions(QQ) ks3 = Sym.kschur(3,1) f = 2*ks3[2,1] + 3*ks3[[]] f.counit() ks3.counit(f)
- degree_on_basis(b)[source]¶
Return the degree of the basis element indexed by \(b\).
INPUT:
b
– a partition
EXAMPLES:
sage: ks3 = SymmetricFunctions(QQ).kschur(3,1) sage: ks3.degree_on_basis(Partition([3,2])) 5
>>> from sage.all import * >>> ks3 = SymmetricFunctions(QQ).kschur(Integer(3),Integer(1)) >>> ks3.degree_on_basis(Partition([Integer(3),Integer(2)])) 5
ks3 = SymmetricFunctions(QQ).kschur(3,1) ks3.degree_on_basis(Partition([3,2]))
- one_basis()[source]¶
Return the basis element indexing
1
.EXAMPLES:
sage: ks3 = SymmetricFunctions(QQ).kschur(3,1) sage: ks3.one() # indirect doctest ks3[]
>>> from sage.all import * >>> ks3 = SymmetricFunctions(QQ).kschur(Integer(3),Integer(1)) >>> ks3.one() # indirect doctest ks3[]
ks3 = SymmetricFunctions(QQ).kschur(3,1) ks3.one() # indirect doctest
- transition_matrix(other, n)[source]¶
Return the degree
n
transition matrix betweenself
andother
.INPUT:
other
– a basis in the ring of symmetric functionsn
– positive integer
The entry in the \(i\)-th row and \(j\)-th column is the coefficient obtained by writing the \(i\)-th element of the basis of
self
in terms of the basisother
, and extracting the \(j\)-th coefficient.EXAMPLES:
sage: Sym = SymmetricFunctions(QQ); s = Sym.schur() sage: ks3 = Sym.kschur(3,1) sage: ks3.transition_matrix(s,5) [1 1 1 0 0 0 0] [0 1 0 1 0 0 0] [0 0 1 0 1 0 0] [0 0 0 1 0 1 0] [0 0 0 0 1 1 1] sage: Sym = SymmetricFunctions(QQ['t']) sage: s = Sym.schur() sage: ks = Sym.kschur(3) sage: ks.transition_matrix(s,5) [t^2 t 1 0 0 0 0] [ 0 t 0 1 0 0 0] [ 0 0 t 0 1 0 0] [ 0 0 0 t 0 1 0] [ 0 0 0 0 t^2 t 1]
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ); s = Sym.schur() >>> ks3 = Sym.kschur(Integer(3),Integer(1)) >>> ks3.transition_matrix(s,Integer(5)) [1 1 1 0 0 0 0] [0 1 0 1 0 0 0] [0 0 1 0 1 0 0] [0 0 0 1 0 1 0] [0 0 0 0 1 1 1] >>> Sym = SymmetricFunctions(QQ['t']) >>> s = Sym.schur() >>> ks = Sym.kschur(Integer(3)) >>> ks.transition_matrix(s,Integer(5)) [t^2 t 1 0 0 0 0] [ 0 t 0 1 0 0 0] [ 0 0 t 0 1 0 0] [ 0 0 0 t 0 1 0] [ 0 0 0 0 t^2 t 1]
Sym = SymmetricFunctions(QQ); s = Sym.schur() ks3 = Sym.kschur(3,1) ks3.transition_matrix(s,5) Sym = SymmetricFunctions(QQ['t']) s = Sym.schur() ks = Sym.kschur(3) ks.transition_matrix(s,5)
- super_categories()[source]¶
The super categories of
self
.EXAMPLES:
sage: Sym = SymmetricFunctions(QQ['t']) sage: from sage.combinat.sf.new_kschur import KBoundedSubspaceBases sage: KB = Sym.kBoundedSubspace(3) sage: KBB = KBoundedSubspaceBases(KB); KBB Category of k bounded subspace bases of 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field sage: KBB.super_categories() [Category of realizations of 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field, Join of Category of graded coalgebras with basis over Univariate Polynomial Ring in t over Rational Field and Category of subobjects of filtered modules with basis over Univariate Polynomial Ring in t over Rational Field]
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ['t']) >>> from sage.combinat.sf.new_kschur import KBoundedSubspaceBases >>> KB = Sym.kBoundedSubspace(Integer(3)) >>> KBB = KBoundedSubspaceBases(KB); KBB Category of k bounded subspace bases of 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field >>> KBB.super_categories() [Category of realizations of 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field, Join of Category of graded coalgebras with basis over Univariate Polynomial Ring in t over Rational Field and Category of subobjects of filtered modules with basis over Univariate Polynomial Ring in t over Rational Field]
Sym = SymmetricFunctions(QQ['t']) from sage.combinat.sf.new_kschur import KBoundedSubspaceBases KB = Sym.kBoundedSubspace(3) KBB = KBoundedSubspaceBases(KB); KBB KBB.super_categories()
- class sage.combinat.sf.new_kschur.K_kSchur(kBoundedRing)[source]¶
Bases:
CombinatorialFreeModule
This class implements the basis of the \(k\)-bounded subspace called the K-\(k\)-Schur basis.
See [Morse2011], [LamSchillingShimozono2010].
REFERENCES:
[Morse2011]J. Morse, Combinatorics of the K-theory of affine Grassmannians, Adv. in Math., Volume 229, Issue 5, pp. 2950–2984.
[LamSchillingShimozono2010]T. Lam, A. Schilling, M.Shimozono, K-theory Schubert calculus of the affine Grassmannian, Compositio Math. 146 (2010), 811-852.
- K_k_Schur_non_commutative_variables(la)[source]¶
Return the K-\(k\)-Schur function, as embedded inside the affine zero Hecke algebra.
INPUT:
la
– a \(k\)-bounded Partition
OUTPUT: an element of the affine zero Hecke algebra
EXAMPLES:
sage: g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() sage: g.K_k_Schur_non_commutative_variables([2,1]) T[3,1,0] + T[1,2,0] + T[3,2,0] + T[0,1,0] + T[2,0,1] + T[0,3,0] + T[2,0,3] + T[0,3,1] + T[2,3,2] + T[2,3,1] + T[3,1,2] + T[1,2,1] - T[2,0] - T[3,1] sage: g.K_k_Schur_non_commutative_variables([]) 1 sage: g.K_k_Schur_non_commutative_variables([4,1]) Traceback (most recent call last): ... ValueError: Partition should be 3-bounded
>>> from sage.all import * >>> g = SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)).K_kschur() >>> g.K_k_Schur_non_commutative_variables([Integer(2),Integer(1)]) T[3,1,0] + T[1,2,0] + T[3,2,0] + T[0,1,0] + T[2,0,1] + T[0,3,0] + T[2,0,3] + T[0,3,1] + T[2,3,2] + T[2,3,1] + T[3,1,2] + T[1,2,1] - T[2,0] - T[3,1] >>> g.K_k_Schur_non_commutative_variables([]) 1 >>> g.K_k_Schur_non_commutative_variables([Integer(4),Integer(1)]) Traceback (most recent call last): ... ValueError: Partition should be 3-bounded
g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() g.K_k_Schur_non_commutative_variables([2,1]) g.K_k_Schur_non_commutative_variables([]) g.K_k_Schur_non_commutative_variables([4,1])
- homogeneous_basis_noncommutative_variables_zero_Hecke(la)[source]¶
Return the homogeneous basis element indexed by
la
, viewed as an element inside the affine zero Hecke algebra. For the code, see method _homogeneous_basis.INPUT:
la
– a \(k\)-bounded partition
OUTPUT: an element of the affine zero Hecke algebra
EXAMPLES:
sage: g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() sage: g.homogeneous_basis_noncommutative_variables_zero_Hecke([2,1]) T[2,1,0] + T[3,1,0] + T[1,2,0] + T[3,2,0] + T[0,1,0] + T[2,0,1] + T[1,0,3] + T[0,3,0] + T[2,0,3] + T[0,3,2] + T[0,3,1] + T[2,3,2] + T[3,2,1] + T[2,3,1] + T[3,1,2] + T[1,2,1] - T[1,0] - 2*T[2,0] - T[0,3] - T[3,2] - 2*T[3,1] - T[2,1] sage: g.homogeneous_basis_noncommutative_variables_zero_Hecke([]) 1
>>> from sage.all import * >>> g = SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)).K_kschur() >>> g.homogeneous_basis_noncommutative_variables_zero_Hecke([Integer(2),Integer(1)]) T[2,1,0] + T[3,1,0] + T[1,2,0] + T[3,2,0] + T[0,1,0] + T[2,0,1] + T[1,0,3] + T[0,3,0] + T[2,0,3] + T[0,3,2] + T[0,3,1] + T[2,3,2] + T[3,2,1] + T[2,3,1] + T[3,1,2] + T[1,2,1] - T[1,0] - 2*T[2,0] - T[0,3] - T[3,2] - 2*T[3,1] - T[2,1] >>> g.homogeneous_basis_noncommutative_variables_zero_Hecke([]) 1
g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() g.homogeneous_basis_noncommutative_variables_zero_Hecke([2,1]) g.homogeneous_basis_noncommutative_variables_zero_Hecke([])
- lift(x)[source]¶
Return the lift of a \(k\)-bounded symmetric function.
INPUT:
x
– an expression in the K-\(k\)-Schur basis. Equivalently,x
can be a\(k\)-bounded partition (then
x
corresponds to the basis element indexed byx
)
OUTPUT: a symmetric function
EXAMPLES:
sage: g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() sage: g.lift([2,1]) h[2] + h[2, 1] - h[3] sage: g.lift([]) h[] sage: g.lift([4,1]) Traceback (most recent call last): ... TypeError: do not know how to make x (= [4, 1]) an element of self (=3-bounded Symmetric Functions over Rational Field with t=1 in the K-3-Schur basis)
>>> from sage.all import * >>> g = SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)).K_kschur() >>> g.lift([Integer(2),Integer(1)]) h[2] + h[2, 1] - h[3] >>> g.lift([]) h[] >>> g.lift([Integer(4),Integer(1)]) Traceback (most recent call last): ... TypeError: do not know how to make x (= [4, 1]) an element of self (=3-bounded Symmetric Functions over Rational Field with t=1 in the K-3-Schur basis)
g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() g.lift([2,1]) g.lift([]) g.lift([4,1])
- product(x, y)[source]¶
Return the product of the two K-\(k\)-Schur functions.
INPUT:
x
,y
– elements of the \(k\)-bounded subspace, in the K-\(k\)-Schur basis
OUTPUT: an element of the \(k\)-bounded subspace, in the K-\(k\)-Schur basis
EXAMPLES:
sage: g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() sage: g.product(g([2,1]), g[1]) -2*Kks3[2, 1] + Kks3[2, 1, 1] + Kks3[2, 2] sage: g.product(g([2,1]), g([])) Kks3[2, 1]
>>> from sage.all import * >>> g = SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)).K_kschur() >>> g.product(g([Integer(2),Integer(1)]), g[Integer(1)]) -2*Kks3[2, 1] + Kks3[2, 1, 1] + Kks3[2, 2] >>> g.product(g([Integer(2),Integer(1)]), g([])) Kks3[2, 1]
g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() g.product(g([2,1]), g[1]) g.product(g([2,1]), g([]))
- retract(x)[source]¶
Return the retract of a symmetric function.
INPUT:
x
– a symmetric function
OUTPUT: a \(k\)-bounded symmetric function in the K-\(k\)-Schur basis
EXAMPLES:
sage: g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() sage: m = SymmetricFunctions(QQ).m() sage: g.retract(m[2,1]) -2*Kks3[1] + 4*Kks3[1, 1] - 2*Kks3[1, 1, 1] - Kks3[2] + Kks3[2, 1] sage: g.retract(m([])) Kks3[]
>>> from sage.all import * >>> g = SymmetricFunctions(QQ).kBoundedSubspace(Integer(3),Integer(1)).K_kschur() >>> m = SymmetricFunctions(QQ).m() >>> g.retract(m[Integer(2),Integer(1)]) -2*Kks3[1] + 4*Kks3[1, 1] - 2*Kks3[1, 1, 1] - Kks3[2] + Kks3[2, 1] >>> g.retract(m([])) Kks3[]
g = SymmetricFunctions(QQ).kBoundedSubspace(3,1).K_kschur() m = SymmetricFunctions(QQ).m() g.retract(m[2,1]) g.retract(m([]))
- class sage.combinat.sf.new_kschur.kHomogeneous(kBoundedRing)[source]¶
Bases:
CombinatorialFreeModule
Space of \(k\)-bounded homogeneous symmetric functions.
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ) sage: kH = Sym.khomogeneous(3) sage: kH[2] h3[2] sage: kH[2].lift() h[2]
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ) >>> kH = Sym.khomogeneous(Integer(3)) >>> kH[Integer(2)] h3[2] >>> kH[Integer(2)].lift() h[2]
Sym = SymmetricFunctions(QQ) kH = Sym.khomogeneous(3) kH[2] kH[2].lift()
- class sage.combinat.sf.new_kschur.kSchur(kBoundedRing)[source]¶
Bases:
CombinatorialFreeModule
Space of \(k\)-Schur functions.
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ['t']) sage: KB = Sym.kBoundedSubspace(3); KB 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ['t']) >>> KB = Sym.kBoundedSubspace(Integer(3)); KB 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field
Sym = SymmetricFunctions(QQ['t']) KB = Sym.kBoundedSubspace(3); KB
The \(k\)-Schur function basis can be constructed as follows:
sage: ks3 = KB.kschur(); ks3 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis
>>> from sage.all import * >>> ks3 = KB.kschur(); ks3 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis
ks3 = KB.kschur(); ks3
We can convert to any basis of the ring of symmetric functions and, whenever it makes sense, also the other way round:
sage: s = Sym.schur() sage: s(ks3([3,2,1])) s[3, 2, 1] + t*s[4, 1, 1] + t*s[4, 2] + t^2*s[5, 1] sage: t = Sym.base_ring().gen() sage: ks3(s([3, 2, 1]) + t*s([4, 1, 1]) + t*s([4, 2]) + t^2*s([5, 1])) ks3[3, 2, 1] sage: s(ks3[2, 1, 1]) s[2, 1, 1] + t*s[3, 1] sage: ks3(s[2, 1, 1] + t*s[3, 1]) ks3[2, 1, 1]
>>> from sage.all import * >>> s = Sym.schur() >>> s(ks3([Integer(3),Integer(2),Integer(1)])) s[3, 2, 1] + t*s[4, 1, 1] + t*s[4, 2] + t^2*s[5, 1] >>> t = Sym.base_ring().gen() >>> ks3(s([Integer(3), Integer(2), Integer(1)]) + t*s([Integer(4), Integer(1), Integer(1)]) + t*s([Integer(4), Integer(2)]) + t**Integer(2)*s([Integer(5), Integer(1)])) ks3[3, 2, 1] >>> s(ks3[Integer(2), Integer(1), Integer(1)]) s[2, 1, 1] + t*s[3, 1] >>> ks3(s[Integer(2), Integer(1), Integer(1)] + t*s[Integer(3), Integer(1)]) ks3[2, 1, 1]
s = Sym.schur() s(ks3([3,2,1])) t = Sym.base_ring().gen() ks3(s([3, 2, 1]) + t*s([4, 1, 1]) + t*s([4, 2]) + t^2*s([5, 1])) s(ks3[2, 1, 1]) ks3(s[2, 1, 1] + t*s[3, 1])
\(k\)-Schur functions are indexed by partitions with first part \(\le k\). Constructing a \(k\)-Schur function for a larger partition raises an error:
sage: ks3([4,3,2,1]) # Traceback (most recent call last): ... TypeError: do not know how to make x (= [4, 3, 2, 1]) an element of self (=3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis)
>>> from sage.all import * >>> ks3([Integer(4),Integer(3),Integer(2),Integer(1)]) # Traceback (most recent call last): ... TypeError: do not know how to make x (= [4, 3, 2, 1]) an element of self (=3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis)
ks3([4,3,2,1]) #
Similarly, attempting to convert a function that is not in the linear span of the \(k\)-Schur functions raises an error:
sage: ks3(s([4])) Traceback (most recent call last): ... ValueError: s[4] is not in the image
>>> from sage.all import * >>> ks3(s([Integer(4)])) Traceback (most recent call last): ... ValueError: s[4] is not in the image
ks3(s([4]))
Note that the product of \(k\)-Schur functions is not guaranteed to be in the space spanned by the \(k\)-Schurs. In general, we only have that a \(k\)-Schur times a \(j\)-Schur function is in the \((k+j)\)-bounded subspace. The multiplication of two \(k\)-Schur functions thus generally returns the product of the lift of the functions to the ambient symmetric function space. If the result happens to lie in the \(k\)-bounded subspace, then the result is cast into the \(k\)-Schur basis:
sage: ks2 = Sym.kBoundedSubspace(2).kschur() sage: ks2[1] * ks2[1] ks2[1, 1] + ks2[2] sage: ks2[1] * ks2[2] s[2, 1] + s[3]
>>> from sage.all import * >>> ks2 = Sym.kBoundedSubspace(Integer(2)).kschur() >>> ks2[Integer(1)] * ks2[Integer(1)] ks2[1, 1] + ks2[2] >>> ks2[Integer(1)] * ks2[Integer(2)] s[2, 1] + s[3]
ks2 = Sym.kBoundedSubspace(2).kschur() ks2[1] * ks2[1] ks2[1] * ks2[2]
Because the target space of the product of a \(k\)-Schur and a \(j\)-Schur has several possibilities, the product of a \(k\)-Schur and \(j\)-Schur function is not implemented for distinct \(k\) and \(j\). Let us show how to get around this ‘manually’:
sage: ks3 = Sym.kBoundedSubspace(3).kschur() sage: ks2([2,1]) * ks3([3,1]) Traceback (most recent call last): ... TypeError: unsupported operand parent(s) for *: '2-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 2-Schur basis' and '3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis'
>>> from sage.all import * >>> ks3 = Sym.kBoundedSubspace(Integer(3)).kschur() >>> ks2([Integer(2),Integer(1)]) * ks3([Integer(3),Integer(1)]) Traceback (most recent call last): ... TypeError: unsupported operand parent(s) for *: '2-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 2-Schur basis' and '3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 3-Schur basis'
ks3 = Sym.kBoundedSubspace(3).kschur() ks2([2,1]) * ks3([3,1])
The workaround:
sage: f = s(ks2([2,1])) * s(ks3([3,1])); f # Convert to Schur functions first and multiply there. s[3, 2, 1, 1] + s[3, 2, 2] + (t+1)*s[3, 3, 1] + s[4, 1, 1, 1] + (2*t+2)*s[4, 2, 1] + (t^2+t+1)*s[4, 3] + (2*t+1)*s[5, 1, 1] + (t^2+2*t+1)*s[5, 2] + (t^2+2*t)*s[6, 1] + t^2*s[7]
>>> from sage.all import * >>> f = s(ks2([Integer(2),Integer(1)])) * s(ks3([Integer(3),Integer(1)])); f # Convert to Schur functions first and multiply there. s[3, 2, 1, 1] + s[3, 2, 2] + (t+1)*s[3, 3, 1] + s[4, 1, 1, 1] + (2*t+2)*s[4, 2, 1] + (t^2+t+1)*s[4, 3] + (2*t+1)*s[5, 1, 1] + (t^2+2*t+1)*s[5, 2] + (t^2+2*t)*s[6, 1] + t^2*s[7]
f = s(ks2([2,1])) * s(ks3([3,1])); f # Convert to Schur functions first and multiply there.
or:
sage: f = ks2[2,1].lift() * ks3[3,1].lift() sage: ks5 = Sym.kBoundedSubspace(5).kschur() sage: ks5(f) # The product of a 'ks2' with a 'ks3' is a 'ks5'. ks5[3, 2, 1, 1] + ks5[3, 2, 2] + (t+1)*ks5[3, 3, 1] + ks5[4, 1, 1, 1] + (t+2)*ks5[4, 2, 1] + (t^2+t+1)*ks5[4, 3] + (t+1)*ks5[5, 1, 1] + ks5[5, 2]
>>> from sage.all import * >>> f = ks2[Integer(2),Integer(1)].lift() * ks3[Integer(3),Integer(1)].lift() >>> ks5 = Sym.kBoundedSubspace(Integer(5)).kschur() >>> ks5(f) # The product of a 'ks2' with a 'ks3' is a 'ks5'. ks5[3, 2, 1, 1] + ks5[3, 2, 2] + (t+1)*ks5[3, 3, 1] + ks5[4, 1, 1, 1] + (t+2)*ks5[4, 2, 1] + (t^2+t+1)*ks5[4, 3] + (t+1)*ks5[5, 1, 1] + ks5[5, 2]
f = ks2[2,1].lift() * ks3[3,1].lift() ks5 = Sym.kBoundedSubspace(5).kschur() ks5(f) # The product of a 'ks2' with a 'ks3' is a 'ks5'.
For other technical reasons, taking powers of \(k\)-Schur functions is not implemented, even when the answer is still in the \(k\)-bounded subspace:
sage: ks2([1])^2 Traceback (most recent call last): ... TypeError: unsupported operand parent(s) for ^: '2-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 2-Schur basis' and 'Integer Ring'
>>> from sage.all import * >>> ks2([Integer(1)])**Integer(2) Traceback (most recent call last): ... TypeError: unsupported operand parent(s) for ^: '2-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field in the 2-Schur basis' and 'Integer Ring'
ks2([1])^2
Todo
Get rid of said technical “reasons”.
However, at \(t=1\), the product of \(k\)-Schur functions is in the span of the \(k\)-Schur functions always. Below are some examples at \(t=1\)
sage: ks3 = Sym.kBoundedSubspace(3, t=1).kschur(); ks3 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field with t=1 in the 3-Schur basis sage: s = SymmetricFunctions(ks3.base_ring()).schur() sage: ks3(s([3])) ks3[3] sage: s(ks3([3,2,1])) s[3, 2, 1] + s[4, 1, 1] + s[4, 2] + s[5, 1] sage: ks3([2,1])^2 # taking powers works for t=1 ks3[2, 2, 1, 1] + ks3[2, 2, 2] + ks3[3, 1, 1, 1]
>>> from sage.all import * >>> ks3 = Sym.kBoundedSubspace(Integer(3), t=Integer(1)).kschur(); ks3 3-bounded Symmetric Functions over Univariate Polynomial Ring in t over Rational Field with t=1 in the 3-Schur basis >>> s = SymmetricFunctions(ks3.base_ring()).schur() >>> ks3(s([Integer(3)])) ks3[3] >>> s(ks3([Integer(3),Integer(2),Integer(1)])) s[3, 2, 1] + s[4, 1, 1] + s[4, 2] + s[5, 1] >>> ks3([Integer(2),Integer(1)])**Integer(2) # taking powers works for t=1 ks3[2, 2, 1, 1] + ks3[2, 2, 2] + ks3[3, 1, 1, 1]
ks3 = Sym.kBoundedSubspace(3, t=1).kschur(); ks3 s = SymmetricFunctions(ks3.base_ring()).schur() ks3(s([3])) s(ks3([3,2,1])) ks3([2,1])^2 # taking powers works for t=1
- product_on_basis(left, right)[source]¶
Take the product of two \(k\)-Schur functions.
If \(t \neq 1\), then take the product by lifting to the Schur functions and then retracting back into the \(k\)-bounded subspace (if possible).
If \(t=1\), then the product calls
_product_on_basis_via_rectangles()
.INPUT:
left
,right
– partitions
OUTPUT: an element of the \(k\)-Schur functions
EXAMPLES:
sage: Sym = SymmetricFunctions(QQ['t']) sage: ks3 = Sym.kschur(3,1) sage: kH = Sym.khomogeneous(3) sage: ks3(kH[2,1,1]) ks3[2, 1, 1] + ks3[2, 2] + ks3[3, 1] sage: ks3([])*kH[2,1,1] ks3[2, 1, 1] + ks3[2, 2] + ks3[3, 1] sage: ks3([3,3,3,2,2,1,1,1])^2 ks3[3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1] sage: ks3([3,3,3,2,2,1,1,1])*ks3([2,2,2,2,2,1,1,1,1]) ks3[3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1] sage: ks3([2,2,1,1,1,1])*ks3([2,2,2,1,1,1,1]) ks3[2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + ks3[2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1] sage: ks3[2,1]^2 ks3[2, 2, 1, 1] + ks3[2, 2, 2] + ks3[3, 1, 1, 1] sage: ks3 = Sym.kschur(3) sage: ks3[2,1]*ks3[2,1] s[2, 2, 1, 1] + s[2, 2, 2] + s[3, 1, 1, 1] + 2*s[3, 2, 1] + s[3, 3] + s[4, 1, 1] + s[4, 2]
>>> from sage.all import * >>> Sym = SymmetricFunctions(QQ['t']) >>> ks3 = Sym.kschur(Integer(3),Integer(1)) >>> kH = Sym.khomogeneous(Integer(3)) >>> ks3(kH[Integer(2),Integer(1),Integer(1)]) ks3[2, 1, 1] + ks3[2, 2] + ks3[3, 1] >>> ks3([])*kH[Integer(2),Integer(1),Integer(1)] ks3[2, 1, 1] + ks3[2, 2] + ks3[3, 1] >>> ks3([Integer(3),Integer(3),Integer(3),Integer(2),Integer(2),Integer(1),Integer(1),Integer(1)])**Integer(2) ks3[3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1] >>> ks3([Integer(3),Integer(3),Integer(3),Integer(2),Integer(2),Integer(1),Integer(1),Integer(1)])*ks3([Integer(2),Integer(2),Integer(2),Integer(2),Integer(2),Integer(1),Integer(1),Integer(1),Integer(1)]) ks3[3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1] >>> ks3([Integer(2),Integer(2),Integer(1),Integer(1),Integer(1),Integer(1)])*ks3([Integer(2),Integer(2),Integer(2),Integer(1),Integer(1),Integer(1),Integer(1)]) ks3[2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + ks3[2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1] >>> ks3[Integer(2),Integer(1)]**Integer(2) ks3[2, 2, 1, 1] + ks3[2, 2, 2] + ks3[3, 1, 1, 1] >>> ks3 = Sym.kschur(Integer(3)) >>> ks3[Integer(2),Integer(1)]*ks3[Integer(2),Integer(1)] s[2, 2, 1, 1] + s[2, 2, 2] + s[3, 1, 1, 1] + 2*s[3, 2, 1] + s[3, 3] + s[4, 1, 1] + s[4, 2]
Sym = SymmetricFunctions(QQ['t']) ks3 = Sym.kschur(3,1) kH = Sym.khomogeneous(3) ks3(kH[2,1,1]) ks3([])*kH[2,1,1] ks3([3,3,3,2,2,1,1,1])^2 ks3([3,3,3,2,2,1,1,1])*ks3([2,2,2,2,2,1,1,1,1]) ks3([2,2,1,1,1,1])*ks3([2,2,2,1,1,1,1]) ks3[2,1]^2 ks3 = Sym.kschur(3) ks3[2,1]*ks3[2,1]
- class sage.combinat.sf.new_kschur.kSplit(kBoundedRing)[source]¶
Bases:
CombinatorialFreeModule
The \(k\)-split basis of the space of \(k\)-bounded-symmetric functions.
Fix
k
a positive integer andt
an element of the base ring.The \(k\)-split functions are a basis for the space of \(k\)-bounded symmetric functions that also have the bases
\[\{ Q'_{\lambda}[X;t] \}_{\lambda_1\le k} = \{ s_{\lambda}^{(k)}[X;t] \}_{\lambda_1 \le k}\]where \(Q'_\lambda[X;t]\) are the Hall-Littlewood symmetric functions (using the notation of [MAC]) and \(s_{\lambda}^{(k)}[X;t]\) are the \(k\)-Schur functions. If \(t\) is not a root of unity, then
\[\{ s_{\lambda}[X/(1-t)] \}_{\lambda_1\le k}\]is also a basis of this space.
The \(k\)-split basis has the property that \(Q'_\lambda[X;t]\) expands positively in the \(k\)-split basis and the \(k\)-split basis conjecturally expands positively in the \(k\)-Schur functions. See [LLMSSZ] p. 81.
The \(k\)-split basis is defined recursively using the Hall-Littlewood creation operator defined in [SZ2001]. If a partition
la
is the concatenation (as lists) of a partitionmu
andnu
wheremu
has maximal hook length equal tok
thenksp(la) = ksp(nu).hl_creation_operator(mu)
. If the hook length ofla
is less than or equal tok
, thenksp(la)
is equal to the Schur function indexed byla
.EXAMPLES:
sage: Symt = SymmetricFunctions(QQ['t'].fraction_field()) sage: kBS3 = Symt.kBoundedSubspace(3) sage: ks3 = kBS3.kschur() sage: ksp3 = kBS3.ksplit() sage: ks3(ksp3[2,1,1]) ks3[2, 1, 1] + t*ks3[2, 2] sage: ksp3(ks3[2,1,1]) ksp3[2, 1, 1] - t*ksp3[2, 2] sage: ksp3[2,1]*ksp3[1] s[2, 1, 1] + s[2, 2] + s[3, 1] sage: ksp3[2,1].hl_creation_operator([1]) t*ksp3[2, 1, 1] + (-t^2+t)*ksp3[2, 2] sage: Qp = Symt.hall_littlewood().Qp() sage: ksp3(Qp[3,2,1]) ksp3[3, 2, 1] + t*ksp3[3, 3] sage: kBS4 = Symt.kBoundedSubspace(4) sage: ksp4 = kBS4.ksplit() sage: ksp4(ksp3([3,2,1])) ksp4[3, 2, 1] - t*ksp4[3, 3] + t*ksp4[4, 1, 1] sage: ks4 = kBS4.kschur() sage: ks4(ksp4[3,2,2,1]) ks4[3, 2, 2, 1] + t*ks4[3, 3, 1, 1] + t*ks4[3, 3, 2]
>>> from sage.all import * >>> Symt = SymmetricFunctions(QQ['t'].fraction_field()) >>> kBS3 = Symt.kBoundedSubspace(Integer(3)) >>> ks3 = kBS3.kschur() >>> ksp3 = kBS3.ksplit() >>> ks3(ksp3[Integer(2),Integer(1),Integer(1)]) ks3[2, 1, 1] + t*ks3[2, 2] >>> ksp3(ks3[Integer(2),Integer(1),Integer(1)]) ksp3[2, 1, 1] - t*ksp3[2, 2] >>> ksp3[Integer(2),Integer(1)]*ksp3[Integer(1)] s[2, 1, 1] + s[2, 2] + s[3, 1] >>> ksp3[Integer(2),Integer(1)].hl_creation_operator([Integer(1)]) t*ksp3[2, 1, 1] + (-t^2+t)*ksp3[2, 2] >>> Qp = Symt.hall_littlewood().Qp() >>> ksp3(Qp[Integer(3),Integer(2),Integer(1)]) ksp3[3, 2, 1] + t*ksp3[3, 3] >>> kBS4 = Symt.kBoundedSubspace(Integer(4)) >>> ksp4 = kBS4.ksplit() >>> ksp4(ksp3([Integer(3),Integer(2),Integer(1)])) ksp4[3, 2, 1] - t*ksp4[3, 3] + t*ksp4[4, 1, 1] >>> ks4 = kBS4.kschur() >>> ks4(ksp4[Integer(3),Integer(2),Integer(2),Integer(1)]) ks4[3, 2, 2, 1] + t*ks4[3, 3, 1, 1] + t*ks4[3, 3, 2]
Symt = SymmetricFunctions(QQ['t'].fraction_field()) kBS3 = Symt.kBoundedSubspace(3) ks3 = kBS3.kschur() ksp3 = kBS3.ksplit() ks3(ksp3[2,1,1]) ksp3(ks3[2,1,1]) ksp3[2,1]*ksp3[1] ksp3[2,1].hl_creation_operator([1]) Qp = Symt.hall_littlewood().Qp() ksp3(Qp[3,2,1]) kBS4 = Symt.kBoundedSubspace(4) ksp4 = kBS4.ksplit() ksp4(ksp3([3,2,1])) ks4 = kBS4.kschur() ks4(ksp4[3,2,2,1])