\(k\)-Schur Functions

sage.combinat.sf.new_kschur.KBoundedSubspace

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

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
sage.combinat.sf.new_kschur.KBoundedSubspaceBases

The category of bases for the \(k\)-bounded subspace of symmetric functions.

sage.combinat.sf.new_kschur.K_kSchur

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.
sage.combinat.sf.new_kschur.kHomogeneous

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]
sage.combinat.sf.new_kschur.kSchur

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

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

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]

\(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)

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

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]

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'

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]

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]

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'

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]
class sage.combinat.sf.new_kschur.kSplit(kBoundedRing)

Bases: sage.combinat.free_module.CombinatorialFreeModule

The \(k\)-split basis of the space of \(k\)-bounded-symmetric functions

Fix k a positive integer and t 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 partition mu and nu where mu has maximal hook length equal to k then ksp(la) = ksp(nu).hl_creation_operator(mu). If the hook length of la is less than or equal to k, then ksp(la) is equal to the Schur function indexed by la.

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]