-Schur functions¶
- class sage.combinat.sf.new_kschur.KBoundedSubspace(Sym, k, t='t')[source]¶
Bases:
UniqueRepresentation,ParentThis class implements the subspace of the ring of symmetric functions spanned by
over the base ring . When , this space is in fact a subring of the ring of symmetric functions generated by the complete homogeneous symmetric functions for .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
-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
-bounded basis called the 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
-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
-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
symfrom the ring of symmetric functions toself.INPUT:
sym– a symmetric function
OUTPUT:
the analogue of the symmetric function in the
-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_parentThe category of bases for the
-bounded subspace of symmetric functions.- class ElementMethods[source]¶
Bases:
object- expand(*args, **kwargs)[source]¶
Return the monomial expansion of
selfin variables.INPUT:
n– positive integer
OUTPUT: monomial expansion of
selfin 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
. This creation operator is a t-analogue of multiplication bys(nu).See also
Proposition 5 in [SZ2001].
INPUT:
nu– a partition or a list of integerst– (default:None, in which casetis 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
selfis 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
operator onself.At
, maps the -Schur function to , where is the -conjugate of the partition .See also
For generic
, sends to , where is the size of the core of minus the size of . Most of the time, this result is not in the -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
composed with onself.Unlike the map
omega(), the result ofomega_t_inverse()lives in the -bounded subspace and hence will return an element even for generic . For ,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
selfandx.INPUT:
x– element of the ring of symmetric functions over the same base ring asselfzee– an optional function on partitions giving the value for the scalar product between and (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- antipode(element)[source]¶
Return the antipode on
selfby lifting to the space of symmetric functions, computing the antipode, and then converting toself.parent(). This is only the antipode for and for other values of the result may not be in the space where the -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
and on the Hall-LittlewoodQpbasis 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
.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
ntransition matrix betweenselfandother.INPUT:
other– a basis in the ring of symmetric functionsn– positive integer
The entry in the
-th row and -th column is the coefficient obtained by writing the -th element of the basis ofselfin terms of the basisother, and extracting the -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:
CombinatorialFreeModuleThis class implements the basis of the
-bounded subspace called the 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-
-Schur function, as embedded inside the affine zero Hecke algebra.INPUT:
la– a -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 -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
-bounded symmetric function.INPUT:
x– an expression in the K- -Schur basis. Equivalently,xcan be a -bounded partition (thenxcorresponds 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-
-Schur functions.INPUT:
x,y– elements of the -bounded subspace, in the K- -Schur basis
OUTPUT: an element of the
-bounded subspace, in the K- -Schur basisEXAMPLES:
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
-bounded symmetric function in the K- -Schur basisEXAMPLES:
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:
CombinatorialFreeModuleSpace of
-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:
CombinatorialFreeModuleSpace of
-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
-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])
-Schur functions are indexed by partitions with first part . Constructing a -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
-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
-Schur functions is not guaranteed to be in the space spanned by the -Schurs. In general, we only have that a -Schur times a -Schur function is in the -bounded subspace. The multiplication of two -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 -bounded subspace, then the result is cast into the -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
-Schur and a -Schur has several possibilities, the product of a -Schur and -Schur function is not implemented for distinct and . 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
-Schur functions is not implemented, even when the answer is still in the -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
, the product of -Schur functions is in the span of the -Schur functions always. Below are some examples atsage: 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
-Schur functions.If
, then take the product by lifting to the Schur functions and then retracting back into the -bounded subspace (if possible).If
, then the product calls_product_on_basis_via_rectangles().INPUT:
left,right– partitions
OUTPUT: an element of the
-Schur functionsEXAMPLES:
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:
CombinatorialFreeModuleThe
-split basis of the space of -bounded-symmetric functions.Fix
ka positive integer andtan element of the base ring.The
-split functions are a basis for the space of -bounded symmetric functions that also have the baseswhere
are the Hall-Littlewood symmetric functions (using the notation of [MAC]) and are the -Schur functions. If is not a root of unity, thenis also a basis of this space.
The
-split basis has the property that expands positively in the -split basis and the -split basis conjecturally expands positively in the -Schur functions. See [LLMSSZ] p. 81.The
-split basis is defined recursively using the Hall-Littlewood creation operator defined in [SZ2001]. If a partitionlais the concatenation (as lists) of a partitionmuandnuwheremuhas maximal hook length equal tokthenksp(la) = ksp(nu).hl_creation_operator(mu). If the hook length oflais 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])