Skip to content

Commit 76503ad

Browse files
author
Release Manager
committed
sagemathgh-39988: Adding an implementation of the Abreu-Nigro symmetric functions <!-- ^ Please provide a concise and informative title. --> <!-- ^ Don't put issue numbers in the title, do this in the PR description below. --> <!-- ^ For example, instead of "Fixes sagemath#12345" use "Introduce new method to calculate 1 + 2". --> <!-- v Describe your changes below in detail. --> <!-- v Why is this change required? What problem does it solve? --> <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes sagemath#12345". --> Following the definition given in (2.2) of https://arxiv.org/abs/2504.09123, we implement the Abreu-Nigro symmetric functions $g_{H,k}(x; q)$, where $H$ is a Hessenberg function. To do so, we also implement their $\rho$ basis. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on. For example, --> <!-- - sagemath#12345: short description why this is a dependency --> <!-- - sagemath#34567: ... --> URL: sagemath#39988 Reported by: Travis Scrimshaw Reviewer(s): Darij Grinberg, Frédéric Chapoton
2 parents a719e2c + 104b42b commit 76503ad

File tree

7 files changed

+558
-11
lines changed

7 files changed

+558
-11
lines changed

src/doc/en/reference/combinat/module_list.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ Comprehensive Module List
309309
sage/combinat/set_partition
310310
sage/combinat/set_partition_iterator
311311
sage/combinat/set_partition_ordered
312+
sage/combinat/sf/abreu_nigro
312313
sage/combinat/sf/all
313314
sage/combinat/sf/character
314315
sage/combinat/sf/classical

src/doc/en/reference/references/index.rst

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,18 @@ REFERENCES:
265265
Symposium, Volume 51, page 20.
266266
Australian Computer Society, Inc. 2006.
267267
268+
.. [AN2021] Alex Abreu and Antonio Nigro. *Chromatic symmetric functions from
269+
the modular law*. J. Combin. Theory Ser. A, **180** (2021), paper
270+
no. 105407. :arxiv:`2006.00657`.
271+
272+
.. [AN2021II] Alex Abreu and Antonio Nigro. *A symmetric function of increasing
273+
forests*. Forum Math. Sigma, **9** No. 21 (2021), Id/No e35.
274+
:arxiv:`2006.08418`.
275+
276+
.. [AN2023] Alex Abreu and Antonio Nigro. *Splitting the cohomology of Hessenberg
277+
varieties and e-positivity of chromatic symmetric functions*.
278+
Preprint (2023). :arxiv:`2304.10644`.
279+
268280
.. [Ang1997] B. Anglès. 1997. *On some characteristic polynomials attached to
269281
finite Drinfeld modules.* manuscripta mathematica 93, 1 (01 Aug 1997),
270282
369–379. https://doi.org/10.1007/BF02677478

src/sage/combinat/posets/poset_examples.py

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
:meth:`~Posets.DoubleTailedDiamond` | Return the double tailed diamond poset on `2n + 2` elements.
3838
:meth:`~Posets.IntegerCompositions` | Return the poset of integer compositions of `n`.
3939
:meth:`~Posets.IntegerPartitions` | Return the poset of integer partitions of ``n``.
40-
:meth:`~Posets.IntegerPartitionsDominanceOrder` | Return the lattice of integer partitions on the integer `n` ordered by dominance.
40+
:meth:`~Posets.IntegerPartitionsDominanceOrder` | Return the lattice of integer partitions of the integer `n` ordered by dominance.
4141
:meth:`~Posets.MobilePoset` | Return the mobile poset formed by the `ribbon` with `hangers` below and an `anchor` above.
4242
:meth:`~Posets.NoncrossingPartitions` | Return the poset of noncrossing partitions of a finite Coxeter group ``W``.
4343
:meth:`~Posets.PentagonPoset` | Return the Pentagon poset.
@@ -467,8 +467,8 @@ def DivisorLattice(n, facade=None):
467467
"""
468468
Return the divisor lattice of an integer.
469469
470-
Elements of the lattice are divisors of `n` and `x < y` in the
471-
lattice if `x` divides `y`.
470+
Elements of the lattice are divisors of `n`, and we have
471+
`x \leq y` in the lattice if `x` divides `y`.
472472
473473
INPUT:
474474
@@ -500,16 +500,53 @@ def DivisorLattice(n, facade=None):
500500
return FiniteLatticePoset(hasse, elements=Div_n, facade=facade,
501501
category=FiniteLatticePosets())
502502

503+
@staticmethod
504+
def HessenbergPoset(H):
505+
r"""
506+
Return the poset associated to a Hessenberg function ``H``.
507+
508+
A *Hessenberg function* (of length `n`) is a function `H: \{1,\ldots,n\}
509+
\to \{1,\ldots,n\}` such that `\max(i, H(i-1)) \leq H(i) \leq n` for all
510+
`i` (where `H(0) = 0` by convention). The corresponding poset is given
511+
by `i < j` (in the poset) if and only if `H(i) < j` (as integers).
512+
These posets correspond to the natural unit interval order posets.
513+
514+
INPUT:
515+
516+
- ``H`` -- list of the Hessenberg function values
517+
(without `H(0)`)
518+
519+
EXAMPLES::
520+
521+
sage: P = posets.HessenbergPoset([2, 3, 5, 5, 5]); P
522+
Finite poset containing 5 elements
523+
sage: P.cover_relations()
524+
[[2, 4], [2, 5], [1, 3], [1, 4], [1, 5]]
525+
526+
TESTS::
527+
528+
sage: P = posets.HessenbergPoset([2, 2, 6, 4, 5, 6])
529+
Traceback (most recent call last):
530+
...
531+
ValueError: [2, 2, 6, 4, 5, 6] is not a Hessenberg function
532+
sage: P = posets.HessenbergPoset([]); P
533+
Finite poset containing 0 elements
534+
"""
535+
n = len(H)
536+
if not all(max(i+1, H[i-1]) <= H[i] for i in range(1, n)) or 0 < n < H[-1]:
537+
raise ValueError(f"{H} is not a Hessenberg function")
538+
return Poset((tuple(range(1, n+1)), lambda i, j: H[i-1] < j))
539+
503540
@staticmethod
504541
def IntegerCompositions(n):
505542
"""
506543
Return the poset of integer compositions of the integer ``n``.
507544
508545
A composition of a positive integer `n` is a list of positive
509546
integers that sum to `n`. The order is reverse refinement:
510-
`[p_1,p_2,...,p_l] < [q_1,q_2,...,q_m]` if `q` consists
511-
of an integer composition of `p_1`, followed by an integer
512-
composition of `p_2`, and so on.
547+
`p = [p_1,p_2,...,p_l] \leq q = [q_1,q_2,...,q_m]` if `q`
548+
consists of an integer composition of `p_1`, followed by an
549+
integer composition of `p_2`, and so on.
513550
514551
EXAMPLES::
515552
@@ -526,7 +563,7 @@ def IntegerCompositions(n):
526563
@staticmethod
527564
def IntegerPartitions(n):
528565
"""
529-
Return the poset of integer partitions on the integer ``n``.
566+
Return the poset of integer partitions of the integer ``n``.
530567
531568
A partition of a positive integer `n` is a non-increasing list
532569
of positive integers that sum to `n`. If `p` and `q` are
@@ -565,7 +602,7 @@ def lower_covers(partition):
565602
@staticmethod
566603
def RestrictedIntegerPartitions(n):
567604
"""
568-
Return the poset of integer partitions on the integer `n`
605+
Return the poset of integer partitions of the integer `n`
569606
ordered by restricted refinement.
570607
571608
That is, if `p` and `q` are integer partitions of `n`, then
@@ -604,12 +641,12 @@ def lower_covers(partition):
604641
@staticmethod
605642
def IntegerPartitionsDominanceOrder(n):
606643
r"""
607-
Return the lattice of integer partitions on the integer `n`
644+
Return the lattice of integer partitions of the integer `n`
608645
ordered by dominance.
609646
610647
That is, if `p=(p_1,\ldots,p_i)` and `q=(q_1,\ldots,q_j)` are
611-
integer partitions of `n`, then `p` is greater than `q` if and
612-
only if `p_1+\cdots+p_k > q_1+\cdots+q_k` for all `k`.
648+
integer partitions of `n`, then `p \geq q` if and
649+
only if `p_1+\cdots+p_k \geq q_1+\cdots+q_k` for all `k`.
613650
614651
INPUT:
615652

0 commit comments

Comments
 (0)