Skip to content

Commit 64a087c

Browse files
committed
introduce new apozeta polynomial for posets
1 parent c9dd1e8 commit 64a087c

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

src/sage/combinat/posets/posets.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@
184184
:meth:`~FinitePoset.flag_h_polynomial` | Return the flag h-polynomial of the poset.
185185
:meth:`~FinitePoset.order_polynomial` | Return the order polynomial of the poset.
186186
:meth:`~FinitePoset.zeta_polynomial` | Return the zeta polynomial of the poset.
187+
:meth:`~FinitePoset.apozeta_polynomial` | Return the apozeta polynomial of the poset.
187188
:meth:`~FinitePoset.M_triangle` | Return the M-triangle of the poset.
188189
:meth:`~FinitePoset.kazhdan_lusztig_polynomial` | Return the Kazhdan-Lusztig polynomial of the poset.
189190
:meth:`~FinitePoset.coxeter_polynomial` | Return the characteristic polynomial of the Coxeter transformation.
@@ -7240,6 +7241,8 @@ def zeta_polynomial(self):
72407241
In particular, `Z(2)` is the number of vertices and `Z(3)` is
72417242
the number of intervals.
72427243
7244+
.. SEEALSO:: :meth:`apozeta_polynomial`
7245+
72437246
EXAMPLES::
72447247
72457248
sage: posets.ChainPoset(2).zeta_polynomial()
@@ -7280,6 +7283,53 @@ def zeta_polynomial(self):
72807283
f = g[n] + f / n
72817284
return f
72827285

7286+
def apozeta_polynomial(self):
7287+
r"""
7288+
Return the apozeta polynomial of the poset ``self``.
7289+
7290+
The poset is assumed to be graded.
7291+
7292+
The apozeta polynomial of a poset is the unique polynomial
7293+
`Z^{a}(q)` such that for every integer `m > 1`, `Z^{a}(m)` is
7294+
the number of weakly increasing sequences `x_1 \leq x_2 \leq
7295+
\dots \leq x_{m-1}` of elements of the poset whose largest
7296+
element belongs to the top level of the poset.
7297+
7298+
When the poset `P` has a unique maximal element, this is
7299+
equal to `Z(q-1)` where `Z` is the zeta polynomial of `P`.
7300+
7301+
The name comes from the greek radical ``apo``.
7302+
7303+
.. SEEALSO:: :meth:`zeta_polynomial`
7304+
7305+
EXAMPLES::
7306+
7307+
sage: P = posets.NoncrossingPartitions(SymmetricGroup(4))
7308+
sage: P.apozeta_polynomial()
7309+
8/3*q^3 - 10*q^2 + 37/3*q - 5
7310+
7311+
sage: P = Poset({"a": "bc", "b": "d", "c": "de"})
7312+
sage: P.apozeta_polynomial()
7313+
3/2*q^2 - 5/2*q + 1
7314+
sage: P.zeta_polynomial()
7315+
3/2*q^2 - 1/2*q
7316+
7317+
TESTS:
7318+
7319+
Checking the simplest case::
7320+
7321+
sage: Poset({1: []}).apozeta_polynomial()
7322+
1
7323+
sage: parent(_)
7324+
Univariate Polynomial Ring in q over Rational Field
7325+
"""
7326+
R = PolynomialRing(QQ, 'q')
7327+
q = R.gen()
7328+
7329+
top_level = self.level_sets()[-1]
7330+
return sum(binomial(q - 2, len(c) - 1)
7331+
for c in self.chains() if c and c[-1] in top_level)
7332+
72837333
def M_triangle(self):
72847334
r"""
72857335
Return the M-triangle of the poset.

0 commit comments

Comments
 (0)