Skip to content

Commit 9d37b44

Browse files
author
Release Manager
committed
gh-39785: Kostka-Foulkes polynomials now also for skew shapes We have Kostka-Foulkes polynomials for usual partitions; here is an update that makes them work for skew partitions as well. I don't know if the rigged configurations model still applies in this generality, so I'm using the definition via charge here. URL: #39785 Reported by: Darij Grinberg Reviewer(s): Travis Scrimshaw
2 parents 106432d + 79086c2 commit 9d37b44

File tree

1 file changed

+63
-6
lines changed

1 file changed

+63
-6
lines changed

src/sage/combinat/sf/kfpoly.py

+63-6
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,36 @@
2424

2525
from sage.combinat.partition import _Partitions
2626
from sage.combinat.partitions import ZS1_iterator
27+
from sage.combinat.skew_partition import SkewPartitions
28+
from sage.combinat.skew_tableau import SemistandardSkewTableaux
2729
from sage.rings.polynomial.polynomial_ring import polygen
2830
from sage.rings.integer_ring import ZZ
2931

3032

3133
def KostkaFoulkesPolynomial(mu, nu, t=None):
3234
r"""
3335
Return the Kostka-Foulkes polynomial `K_{\mu, \nu}(t)`.
36+
Here, `\mu` is a partition or a skew partition, whereas
37+
`\nu` is a partition of the same size.
38+
39+
The Kostka-Foulkes polynomial is defined to be the sum
40+
of the monomials `t^{\operatorname{charge}(T)}` over all
41+
semistandard tableaux `T` of shape `\lambda / \mu``,
42+
where `\operatorname{charge}(T)` denotes the charge
43+
of the reading word of `T`
44+
(see :meth:`sage.combinat.words.finite_word.FiniteWord_class.charge`).
3445
3546
INPUT:
3647
37-
- ``mu``, ``nu`` -- partitions
48+
- ``mu`` -- partition or skew partition
49+
- ``nu`` -- partition
3850
- ``t`` -- an optional parameter (default: ``None``)
3951
4052
OUTPUT:
4153
42-
- the Koskta-Foulkes polynomial indexed by partitions ``mu`` and ``nu`` and
54+
- the Kostka-Foulkes polynomial indexed by ``mu`` and ``nu`` and
4355
evaluated at the parameter ``t``. If ``t`` is ``None`` the resulting
44-
polynomial is in the polynomial ring `\ZZ['t']`.
56+
polynomial is in the polynomial ring `\ZZ[t]`.
4557
4658
EXAMPLES::
4759
@@ -56,13 +68,15 @@ def KostkaFoulkesPolynomial(mu, nu, t=None):
5668
sage: q = PolynomialRing(QQ,'q').gen()
5769
sage: KostkaFoulkesPolynomial([2,2],[2,1,1],q)
5870
q
71+
sage: KostkaFoulkesPolynomial([[3,2],[1]],[2,2],q)
72+
q + 1
5973
6074
TESTS::
6175
6276
sage: KostkaFoulkesPolynomial([2,4],[2,2])
6377
Traceback (most recent call last):
6478
...
65-
ValueError: mu must be a partition
79+
ValueError: mu must be a partition or a skew partition
6680
sage: KostkaFoulkesPolynomial([2,2],[2,4])
6781
Traceback (most recent call last):
6882
...
@@ -73,7 +87,9 @@ def KostkaFoulkesPolynomial(mu, nu, t=None):
7387
ValueError: mu and nu must be partitions of the same size
7488
"""
7589
if mu not in _Partitions:
76-
raise ValueError("mu must be a partition")
90+
if mu in SkewPartitions():
91+
return kfpoly_skew(mu, nu, t)
92+
raise ValueError("mu must be a partition or a skew partition")
7793
if nu not in _Partitions:
7894
raise ValueError("nu must be a partition")
7995
if sum(mu) != sum(nu):
@@ -94,7 +110,7 @@ def kfpoly(mu, nu, t=None):
94110
95111
OUTPUT:
96112
97-
- the Koskta-Foulkes polynomial indexed by partitions ``mu`` and ``nu`` and
113+
- the Kostka-Foulkes polynomial indexed by partitions ``mu`` and ``nu`` and
98114
evaluated at the parameter ``t``. If ``t`` is ``None`` the resulting polynomial
99115
is in the polynomial ring `\ZZ['t']`.
100116
@@ -127,6 +143,47 @@ def kfpoly(mu, nu, t=None):
127143

128144
return sum(f(rg) for rg in riggings(mu))
129145

146+
def kfpoly_skew(lamu, nu, t=None):
147+
r"""
148+
Return the Kostka-Foulkes polynomial `K_{\lambda / \mu, \nu}(t)`
149+
by summing `t^{\operatorname{charge}(T)}` over all semistandard
150+
tableaux `T` of shape `\lambda / \mu``.
151+
152+
INPUT:
153+
154+
- ``lamu`` -- skew partition `\lambda / \mu`
155+
- ``nu`` -- partition `\nu`
156+
- ``t`` -- an optional parameter (default: ``None``)
157+
158+
OUTPUT:
159+
160+
- the Kostka-Foulkes polynomial indexed by ``mu`` and ``nu`` and
161+
evaluated at the parameter ``t``. If ``t`` is ``None`` the
162+
resulting polynomial is in the polynomial ring `\ZZ['t']`.
163+
164+
EXAMPLES::
165+
166+
sage: from sage.combinat.sf.kfpoly import kfpoly_skew
167+
sage: kfpoly_skew([[3,3], [1,1]], [2,1,1])
168+
t
169+
sage: kfpoly_skew([[3,3], [1,1]], [2,1,1], 5)
170+
5
171+
sage: kfpoly_skew([[5], [1]], [2,2])
172+
t^2
173+
174+
TESTS::
175+
176+
sage: from sage.combinat.sf.kfpoly import kfpoly, kfpoly_skew
177+
sage: all(kfpoly_skew(SkewPartition([b,[]]), c) == kfpoly(b,c)
178+
....: for n in range(6) for b in Partitions(n)
179+
....: for c in Partitions(n))
180+
True
181+
"""
182+
if t is None:
183+
t = polygen(ZZ, 't')
184+
185+
return t.parent().sum(t ** (T.to_word().charge())
186+
for T in SemistandardSkewTableaux(lamu, nu))
130187

131188
def schur_to_hl(mu, t=None):
132189
r"""

0 commit comments

Comments
 (0)