|
184 | 184 | :meth:`~FinitePoset.flag_h_polynomial` | Return the flag h-polynomial of the poset. |
185 | 185 | :meth:`~FinitePoset.order_polynomial` | Return the order polynomial of the poset. |
186 | 186 | :meth:`~FinitePoset.zeta_polynomial` | Return the zeta polynomial of the poset. |
| 187 | + :meth:`~FinitePoset.apozeta_polynomial` | Return the apozeta polynomial of the poset. |
187 | 188 | :meth:`~FinitePoset.M_triangle` | Return the M-triangle of the poset. |
188 | 189 | :meth:`~FinitePoset.kazhdan_lusztig_polynomial` | Return the Kazhdan-Lusztig polynomial of the poset. |
189 | 190 | :meth:`~FinitePoset.coxeter_polynomial` | Return the characteristic polynomial of the Coxeter transformation. |
@@ -7236,6 +7237,8 @@ def zeta_polynomial(self): |
7236 | 7237 | In particular, `Z(2)` is the number of vertices and `Z(3)` is |
7237 | 7238 | the number of intervals. |
7238 | 7239 |
|
| 7240 | + .. SEEALSO:: :meth:`apozeta_polynomial` |
| 7241 | +
|
7239 | 7242 | EXAMPLES:: |
7240 | 7243 |
|
7241 | 7244 | sage: posets.ChainPoset(2).zeta_polynomial() |
@@ -7276,6 +7279,54 @@ def zeta_polynomial(self): |
7276 | 7279 | f = g[n] + f / n |
7277 | 7280 | return f |
7278 | 7281 |
|
| 7282 | + def apozeta_polynomial(self): |
| 7283 | + r""" |
| 7284 | + Return the apozeta polynomial of the poset ``self``. |
| 7285 | +
|
| 7286 | + The poset is assumed to be graded. |
| 7287 | +
|
| 7288 | + The apozeta polynomial of a poset is the unique polynomial |
| 7289 | + `Z^{a}(q)` such that for every integer `m > 1`, `Z^{a}(m)` is |
| 7290 | + the number of weakly increasing sequences `x_1 \leq x_2 \leq |
| 7291 | + \dots \leq x_{m-1}` of elements of the poset whose largest |
| 7292 | + element belongs to the top level of the poset. |
| 7293 | +
|
| 7294 | + When the poset `P` has a unique maximal element, this is |
| 7295 | + equal to `Z(q-1)` where `Z` is the zeta polynomial of `P`. |
| 7296 | +
|
| 7297 | + The name comes from the greek radical ``apo``. |
| 7298 | +
|
| 7299 | + .. SEEALSO:: :meth:`zeta_polynomial` |
| 7300 | +
|
| 7301 | + EXAMPLES:: |
| 7302 | +
|
| 7303 | + sage: P = posets.NoncrossingPartitions(SymmetricGroup(4)) |
| 7304 | + sage: P.apozeta_polynomial() |
| 7305 | + 8/3*q^3 - 10*q^2 + 37/3*q - 5 |
| 7306 | +
|
| 7307 | + sage: P = Poset({"a": "bc", "b": "d", "c": "de"}) |
| 7308 | + sage: P.apozeta_polynomial() |
| 7309 | + 3/2*q^2 - 5/2*q + 1 |
| 7310 | + sage: P.zeta_polynomial() |
| 7311 | + 3/2*q^2 - 1/2*q |
| 7312 | +
|
| 7313 | + TESTS: |
| 7314 | +
|
| 7315 | + Checking the simplest case:: |
| 7316 | +
|
| 7317 | + sage: Poset({1: []}).apozeta_polynomial() |
| 7318 | + 1 |
| 7319 | + sage: parent(_) |
| 7320 | + Univariate Polynomial Ring in q over Rational Field |
| 7321 | + """ |
| 7322 | + from sage.functions.other import binomial |
| 7323 | + R = PolynomialRing(QQ, 'q') |
| 7324 | + q = R.gen() |
| 7325 | + |
| 7326 | + top_level = self.level_sets()[-1] |
| 7327 | + return sum(binomial(q - 2, len(c) - 1) |
| 7328 | + for c in self.chains() if c and c[-1] in top_level) |
| 7329 | + |
7279 | 7330 | def M_triangle(self): |
7280 | 7331 | r""" |
7281 | 7332 | Return the M-triangle of the poset. |
|
0 commit comments