Hirzebruch $L$-polynomials $L_n(p_1,\dots,p_n)$
edit · history · discussion · files · short url · characteristic classes algebra polynomial
Polynomials
$n$ 
$L_n$
1:
1/3*p1
2:
-1/45*p1^2 + 7/45*p2
3:
2/945*p1^3 - 13/945*p1*p2 + 62/945*p3
4:
-1/4725*p1^4 + 22/14175*p1^2*p2 - 19/14175*p2^2 - 71/14175*p1*p3 + 127/4725*p4
5:
2/93555*p1^5 - 83/467775*p1^3*p2 + 127/467775*p1*p2^2 + 79/155925*p1^2*p3 - 16/22275*p2*p3 - 919/467775*p1*p4 + 146/13365*p5
6:
-1382/638512875*p1^6 + 12842/638512875*p1^4*p2 - 5527/127702575*p1^2*p2^2 - 33863/638512875*p1^3*p3 + 2906/212837625*p2^3 + 28967/212837625*p1*p2*p3 + 40841/212837625*p1^2*p4 - 40247/638512875*p3^2 - 159287/638512875*p2*p4 - 167968/212837625*p1*p5 + 2828954/638512875*p6
Definition
The entry is the homogeneous component $L_n(p_1,\dots,p_n)$ of the Hirzebruch $L$-class of an oriented real vector bundle $E$, written as a polynomial in the Pontryagin classes $p_i$ [1]. It is defined by the characteristic power series $Q(x)=\sqrt{x}/\tanh\sqrt{x}$ through Formula (1).
Parameters
$n$
—   degree ($n\geq 1$)
Formulas
(1)
$1+\sum_{n\geq1}L_n(p_1,p_2,\dots)=\prod_i Q(x_i)$, where the $x_i$ are the Pontryagin roots and $p_j=e_j(x_1,x_2,\dots)$ is the $j$-th elementary symmetric polynomial.
(2)
$Q(x)=\frac{\sqrt{x}}{\tanh\sqrt{x}}=1+\frac{x}{3}-\frac{x^2}{45} +\frac{2x^3}{945}-\frac{x^4}{4725}+\cdots$ [1]. Equivalently $Q(x)=\sum_{k\geq0}2^{2k}B_{2k}x^k/(2k)!$, using the Bernoulli numbers.
(3)
$L_1=p_1/3$, $L_2=(7p_2-p_1^2)/45$, $L_3=(62p_3-13p_1p_2+2p_1^3)/945$, and $L_4=(381p_4-71p_1p_3-19p_2^2+22p_1^2p_2-3p_1^4)/14175$, as printed in [1].
(4)
$\sigma(M)=\langle L_n(p_1(M),\dots,p_n(M)),[M]\rangle$ for a closed smooth oriented manifold $M$ of dimension $4n$, where $\sigma$ is the signature of the intersection form on $H^{2n}(M)$ [1].
Comments
(5)
The table stores one homogeneous component per row, not the total $L$-class $1+L_1+L_2+\cdots$ truncated at degree $n$.
(6)
The constant component $L_0=1$ is not stored as a row; the table begins at $n=1$.
(7)
The convention here is $p_i=(-1)^i c_{2i}(E\otimes\mathbb C)$ [2].
(8)
The coefficient of $p_n$ in $L_n$ is $2^{2n}(2^{2n-1}-1)|B_{2n}|/(2n)!$, which is never zero, so $L_n$ uses exactly the variables $p_1,\dots,p_n$.
Programs
(P1)
Sage
import numberdb.sage as numberdb  # initialize Sage before named imports
from math import factorial
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
from sage.rings.rational_field import QQ


def B(n):
    a = [QQ(0)] * (n + 1)
    for m in range(n + 1):
        a[m] = QQ(1) / QQ(m + 1)
        for j in range(m, 0, -1):
            a[j - 1] = QQ(j) * (a[j - 1] - a[j])
    return a[0]


def mul(f, g, n):
    h = [QQ(0)] * (n + 1)
    for i, a in enumerate(f):
        for j, b in enumerate(g):
            if i + j <= n:
                h[i + j] += a * b
    return h


def log_q(n):
    u = [QQ(0)] + [QQ(2) ** (2 * k) * B(2 * k) / QQ(factorial(2 * k))
                   for k in range(1, n + 1)]
    out = [QQ(0)] * (n + 1)
    power = [QQ(1)] + [QQ(0)] * n
    for m in range(1, n + 1):
        power = mul(power, u, n)
        sign = QQ(1) if m % 2 else QQ(-1)
        for k in range(1, n + 1):
            out[k] += sign * power[k] / QQ(m)
    return out


def exps(e):
    try:
        return tuple(e)
    except TypeError:
        return (e,)


def weight(e):
    return sum((i + 1) * a for i, a in enumerate(exps(e)))


def monomial(R, xs, e):
    term = R(1)
    for x, a in zip(xs, exps(e)):
        term *= x ** a
    return term


def terms(f, n, exact):
    R = f.parent()
    xs = R.gens()
    out = R(0)
    for e, c in f.dict().items():
        w = weight(e)
        if (exact and w == n) or (not exact and w <= n):
            out += c * monomial(R, xs, e)
    return out


def L(n):
    R = PolynomialRing(QQ, ["p%s" % i for i in range(1, n + 1)])
    p = R.gens()
    s = {}
    for m in range(1, n + 1):
        total = sum(((-1) ** (i + 1) * p[i - 1] * s[m - i]
                     for i in range(1, m)), R(0))
        s[m] = total + (-1) ** (m + 1) * QQ(m) * p[m - 1]
    log = log_q(n)
    exponent = sum((log[m] * s[m] for m in range(1, n + 1)), R(0))
    total = term = R(1)
    for k in range(1, n + 1):
        term = terms(term * exponent / QQ(k), n, False)
        total = terms(total + term, n, False)
    return terms(total, n, True)


print(L(7))
Links
Similar tables
Todd polynomials —   store another universal characteristic-class polynomial defined by a multiplicative sequence
Chern character polynomials —   store another universal characteristic-class polynomial, additive in the Chern roots rather than multiplicative in the Pontryagin roots
Elementary symmetric polynomials —   give the elementary symmetric functions $e_j$ that are renamed as Pontryagin classes here
Bernoulli numbers —   give the Bernoulli numbers appearing in the characteristic power series
Data properties
Entries are of type: rational polynomial
Table is complete: no (it holds every component with $1\leq n\leq 6$; $L_7$ is the first component needing more than six variables, which is the most a stored polynomial may have)
How they were obtained:

Every stored component was checked against the terms printed in [1], against the Pontryagin-root definition in Formula (1), and by substituting the Pontryagin classes of $T\mathbb P^{2m}_{\mathbb C}$ for $1\leq m\leq6$, which gives signature $1$ by the Hirzebruch signature theorem [1].

more

The generator computes exact rational coefficients from Formula (1).