Skip to main content

Follow the source behind the result.

Search the paper sections, open their original context and follow the checks they actually cite. The knowledge atlas explains the result; this library locates its source.

v1018_e8_directed_readout.py

verification/v1018_e8_directed_readout.py

This is a registered verification module. Read its original code and the paper sections that cite it, then follow the linked claim to its present classification.

Read the publication code on this page

The registered Python source is shown as text. Displaying it does not execute the code.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""v1018 -- E8.DIRECTED.READOUT.01 (2026-09-02):
SEVEN EXACT E8 READOUT CELLS (C7 OPEN).

Promotion of round r609.  The module RE-DERIVES the seven sealed
cells from scratch (no probe imports, no subprocess, no note-file
parser).  Every gated identity is exact over Z/Q via sympy or
plain integer arithmetic.  Display [E] (Identity).

THE SEVEN CELLS (probe C1--C6,C8; Hamming and the 120-line graph
are listed separately in the promotion brief):

  1. Seifert/Euler form.  Bourbaki E8 edges
     (1,3),(3,4),(4,5),(5,6),(6,7),(7,8),(2,4).  S_ii=1, S_ij=-1
     on a bipartite orientation.  S+S^T = A_{E8},
     charpoly(-S^{-1} S^T) = Phi_30, rank(S-S^T)=8, the charpoly
     is independent of bipartite vs unique-sink orientations.
     Accompanying sealed C5: exponents = totatives of 30,
     degrees {2,8,12,14,18,20,24,30}, sum(2m_i+1)=248,
     sum m_i=120, sum(m_i+1)=128.
  2. Hamming H_8 = RM(1,3)=extended Hamming [8,4,4]: weight
     enumerator 1+14 y^4+y^8, Construction A even unimodular,
     240 = 16 + 14*16 minimal vectors, S(3,4,8) Steiner system.
  3. Strongly regular root-line graph srg(120,56,28,24) with
     eigenvalues 56/8/-4 and multiplicities 1/35/84.
  4. Hecke rule: N(n)=240 sigma_3(n) for n<=10 (theta of E8 = E_4);
     coprime Hecke on (2,3),(2,5),(3,4),(4,5).
  5. Delta signature: A_P(n)/A_P(1)=tau(n) for n<=8 on three axes,
     degree-2/4/6 vanishing, E_4^3 - E_6^2 = 1728 Delta.
  6. (Z/30)^x cong C_2 x C_4 (orders {1,2,2,2,4,4,4,4}, not C_2^3);
     D_chi(s)=L(s,chi) L(s-3,chi) coefficientwise for n<=200.
  7. E6 oplus A2 gluing census: index 3, Smith (1^6,3,3),
     roots 72+6+162, glue classes 78/81/81.

NOT PROMOTED -- C7 (Gauss-code transform).  The eighth cell stays
OPEN: see note_e8_gaussian_code.tex remark rem:c7-audit.  The note
does not yet fix a transformation matrix of the Gaussian E8 code, so
monomial equivalence to H_2 tensor F_4 is an audit question, not a
sealed identity.  This module does not invent that matrix and does
not gate C7.

HONEST SCOPE: finite exact identities of the E8 lattice / Coxeter /
Hamming / Hecke / Delta / Dirichlet-character package.  Classical
ingredients (Phi_30, E_4=theta_{E8}, Ramanujan tau, Steiner S(3,4,8))
are re-derived here as machine-checked statements, not cited-only.
No physics claim.  NOT evidence for or against the Riemann Hypothesis.
NO RH CLAIM.  Python-only / Wolfram deferred (engine DEFERRED_NO_ENGINE).

PROVENANCE: experiments/tfpt-discovery/e8_directed_readout_probe.py
(r609, 49/49, VERDICT E8_READOUT_SEALED(7/8), SPEC_SHA
3edfb82499d80cecff6afb8da3b4533888b1dd042e7a8943e8caea1bdee581a3).
The probe stays experiments-side.
"""
from __future__ import annotations

import itertools
import math
from collections import defaultdict

import numpy as np
import sympy as sp
from sympy.matrices.normalforms import hermite_normal_form, smith_normal_form

from tfpt_constants import check as suite_check, summary, reset


R609_SPEC = "3edfb82499d80cecff6afb8da3b4533888b1dd042e7a8943e8caea1bdee581a3"
PHI30 = [1, 1, 0, -1, -1, -1, 0, 1, 1]
TAU = (1, -24, 252, -1472, 4830, -6048, -16744, 84480)
TOTATIVES = (1, 7, 11, 13, 17, 19, 23, 29)
EXPONENTS = TOTATIVES
DEGREES = tuple(m + 1 for m in EXPONENTS)
EDGES_E8 = ((1, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (2, 4))
C7_NOTE = (
    "C7 Gauss-code transform NOT promoted: stays OPEN "
    "(note_e8_gaussian_code.tex rem:c7-audit)"
)


def check(label: str, condition: bool, detail: str = "") -> bool:
    ok = bool(condition)
    suite_check(label if not detail else "%s -- %s" % (label, detail), ok)
    return ok


def divisors(n: int) -> list[int]:
    n = abs(int(n))
    if n == 0:
        return []
    out = []
    d = 1
    while d * d <= n:
        if n % d == 0:
            out.append(d)
            if d * d != n:
                out.append(n // d)
        d += 1
    out.sort()
    return out


def sigma_k(n: int, k: int) -> int:
    return sum(d ** k for d in divisors(n))


def ramanujan_c(n: int, k: int) -> int:
    g = math.gcd(n, k)
    return sum(int(sp.mobius(n // d)) * d for d in divisors(g))


def poly_mul(a: list[int], b: list[int], nmax: int) -> list[int]:
    c = [0] * (nmax + 1)
    for i, ai in enumerate(a):
        if ai == 0:
            continue
        jmax = min(len(b) - 1, nmax - i)
        for j in range(jmax + 1):
            bj = b[j]
            if bj:
                c[i + j] += ai * bj
    return c


def _f2_points() -> list[tuple[int, int, int]]:
    return [(i & 1, (i >> 1) & 1, (i >> 2) & 1) for i in range(8)]


def hamming_code() -> tuple[tuple[tuple[int, ...], ...], tuple[tuple[int, ...], ...]]:
    pts = _f2_points()
    gens = [tuple(1 for _ in range(8))]
    for j in range(3):
        gens.append(tuple(p[j] for p in pts))
    gens_t = tuple(gens)
    words = []
    for bits in itertools.product((0, 1), repeat=4):
        w = [0] * 8
        for b, g in zip(bits, gens):
            if b:
                for i in range(8):
                    w[i] ^= g[i]
        words.append(tuple(w))
    return tuple(sorted(words)), gens_t


CODE, CODE_GENS = hamming_code()


def affine_hyperplanes() -> set[frozenset[int]]:
    pts = _f2_points()
    blocks = set()
    for a in itertools.product((0, 1), repeat=3):
        if a == (0, 0, 0):
            continue
        for bit in (0, 1):
            supp = frozenset(
                i for i, p in enumerate(pts)
                if (a[0] * p[0] + a[1] * p[1] + a[2] * p[2]) % 2 == bit
            )
            blocks.add(supp)
    return blocks


def cartan_e8() -> sp.Matrix:
    a = sp.eye(8) * 2
    for i, j in EDGES_E8:
        a[i - 1, j - 1] = -1
        a[j - 1, i - 1] = -1
    return a


def euler_S(arrows: list[tuple[int, int]]) -> sp.Matrix:
    s = sp.eye(8)
    for i, j in arrows:
        s[i - 1, j - 1] = -1
    return s


def bipartite_arrows() -> list[tuple[int, int]]:
    a_set = {1, 4, 6, 8}
    arrows = []
    for i, j in EDGES_E8:
        if i in a_set:
            arrows.append((i, j))
        else:
            arrows.append((j, i))
    return arrows


def sink_arrows(sink: int) -> list[tuple[int, int]]:
    adj: dict[int, list[int]] = {i: [] for i in range(1, 9)}
    for i, j in EDGES_E8:
        adj[i].append(j)
        adj[j].append(i)
    parent = {sink: 0}
    queue = [sink]
    for u in queue:
        for v in adj[u]:
            if v not in parent:
                parent[v] = u
                queue.append(v)
    arrows = []
    for v, u in parent.items():
        if u != 0:
            arrows.append((v, u))
    return arrows


def coxeter_from_arrows(arrows: list[tuple[int, int]]) -> sp.Matrix:
    s = euler_S(arrows)
    return -s.inv() * s.T


def charpoly_coeffs(m: sp.Matrix) -> list[int]:
    x = sp.symbols("x")
    p = m.charpoly(x)
    return [int(c) for c in p.all_coeffs()]


def gegenbauer_coeffs(n: int, lam: sp.Rational) -> list[sp.Rational]:
    t = sp.symbols("t")
    expr = sp.expand(sp.gegenbauer(n, lam, t))
    poly = sp.Poly(expr, t)
    return [sp.Rational(poly.coeff_monomial(t ** k)) for k in range(n + 1)]


def zonal_ql(n: int, u2: sp.Expr) -> tuple[sp.Expr, sp.Symbol, sp.Symbol]:
    q, ell = sp.symbols("q ell")
    ak = gegenbauer_coeffs(n, sp.Rational(3))
    expr = sp.Integer(0)
    for k, a in enumerate(ak):
        if a == 0 or ((n - k) & 1):
            continue
        expr += a * ell ** k * q ** ((n - k) // 2) / (u2 ** (sp.Rational(k, 2)))
    return sp.expand(expr), q, ell


def laplacian_ql(f: sp.Expr, q: sp.Symbol, ell: sp.Symbol, d: int, u2: sp.Expr) -> sp.Expr:
    fq = sp.diff(f, q)
    return sp.expand(
        2 * d * fq
        + 4 * q * sp.diff(f, q, 2)
        + 4 * ell * sp.diff(f, q, ell)
        + u2 * sp.diff(f, ell, 2)
    )


def half_table(bound: int, par: tuple[int, ...], max_ss: int) -> dict[int, list[tuple[int, ...]]]:
    ranges = [
        [x for x in range(-bound, bound + 1) if (x & 1) == (par[i] & 1)]
        for i in range(4)
    ]
    tab: dict[int, list[tuple[int, ...]]] = defaultdict(list)
    for v in itertools.product(*ranges):
        ss = v[0] * v[0] + v[1] * v[1] + v[2] * v[2] + v[3] * v[3]
        if ss <= max_ss:
            tab[ss].append(v)
    return tab


def enumerate_construction_a(max_n: int, collect_n: int = 0):
    max_ss = 4 * max_n
    bound = int(math.isqrt(max_ss))
    counts = {n: 0 for n in range(1, max_n + 1)}
    collected: dict[int, list[tuple[int, ...]]] = {
        n: [] for n in range(1, collect_n + 1)
    }
    for cw in CODE:
        left = half_table(bound, cw[:4], max_ss)
        right = half_table(bound, cw[4:], max_ss)
        for sl, lvecs in left.items():
            sr_max = max_ss - sl
            for sr, rvecs in right.items():
                if sr > sr_max:
                    continue
                ss = sl + sr
                if ss == 0 or ss % 4 != 0:
                    continue
                n = ss // 4
                if n > max_n:
                    continue
                nvec = len(lvecs) * len(rvecs)
                counts[n] += nvec
                if 1 <= n <= collect_n:
                    for a in lvecs:
                        for b in rvecs:
                            collected[n].append(a + b)
    return counts, collected


def eval_zonal_shell(arr: np.ndarray, ak: list[sp.Rational], n_deg: int, mode: str) -> sp.Rational:
    x = np.asarray(arr, dtype=object)
    ss = np.sum(x * x, axis=1)
    if mode == "e1":
        ell_num, ell_den = x[:, 0], 1
    elif mode == "diag":
        ell_num, ell_den = x[:, 0] + x[:, 1], "sqrt2"
    elif mode == "generic":
        ell_num, ell_den = 3 * x[:, 0] + 4 * x[:, 1], 5
    else:
        raise ValueError(mode)
    acc = 0
    for k, a in enumerate(ak):
        if a == 0 or ((n_deg - k) & 1):
            continue
        term = (ell_num ** k) * (ss ** ((n_deg - k) // 2))
        sterm = int(np.sum(term))
        if ell_den == "sqrt2":
            sterm = sp.Integer(sterm) / (2 ** (k // 2))
        elif ell_den != 1:
            sterm = sp.Integer(sterm) / (sp.Integer(ell_den) ** k)
        else:
            sterm = sp.Integer(sterm)
        acc += a * sterm
    return sp.nsimplify(acc)


def zspan_hnf_rows(vectors: list[tuple[int, ...]]) -> list[tuple[int, ...]]:
    if not vectors:
        return []
    dim = len(vectors[0])
    m = sp.Matrix(dim, len(vectors), lambda i, j: int(vectors[j][i]))
    h = hermite_normal_form(m)
    basis = []
    for j in range(h.cols):
        col = tuple(int(h[i, j]) for i in range(h.rows))
        if any(col):
            basis.append(col)
    return basis


def gram_int(basis: list[tuple[int, ...]]) -> sp.Matrix:
    b = sp.Matrix([list(v) for v in basis])
    return b * b.T


def smith_diag(mat: sp.Matrix) -> list[int]:
    s = smith_normal_form(mat)
    return [int(s[i, i]) for i in range(min(s.rows, s.cols))]


def gmul(a: tuple[int, int], b: tuple[int, int]) -> tuple[int, int]:
    return (a[0] * b[0] - a[1] * b[1], a[0] * b[1] + a[1] * b[0])


def i_pow(m: int) -> tuple[int, int]:
    return ((1, 0), (0, 1), (-1, 0), (0, -1))[m % 4]


def unit_ab(n: int) -> tuple[int, int] | None:
    n = n % 30
    for a in (0, 1):
        for b in range(4):
            if (pow(11, a, 30) * pow(7, b, 30)) % 30 == n:
                return a, b
    return None


def chi_kl(k: int, l: int, n: int) -> tuple[int, int]:
    if math.gcd(n, 30) != 1:
        return (0, 0)
    ab = unit_ab(n)
    if ab is None:
        return (0, 0)
    a, b = ab
    sign = 1 if ((k * a) & 1) == 0 else -1
    re, im = i_pow(l * b)
    return (sign * re, sign * im)


def cell1_seifert() -> sp.Matrix:
    print("\nCELL 1  Seifert/Euler form + principal multiplets")
    a = cartan_e8()
    arrows0 = bipartite_arrows()
    s = euler_S(arrows0)
    check("C1.S+ST=Cartan", s + s.T == a, "bipartite orientation")
    c = coxeter_from_arrows(arrows0)
    coeffs = charpoly_coeffs(c)
    x = sp.symbols("x")
    phi = [int(cf) for cf in sp.Poly(sp.cyclotomic_poly(30, x), x).all_coeffs()]
    check("C1.charpoly=Phi_30", coeffs == PHI30 and coeffs == phi, "coeffs=%s" % coeffs)
    ident = sp.eye(8)
    ok_period = c ** 30 == ident
    smaller = [d for d in divisors(30) if 0 < d < 30 and c ** d == ident]
    check("C1.C^30=I_min", ok_period and smaller == [], "smaller=%s" % (smaller,))
    traces = [int((c ** k).trace()) for k in range(0, 31)]
    rsums = [ramanujan_c(30, k) for k in range(0, 31)]
    check("C1.Tr(C^k)=c_30(k)", traces == rsums, "k=0..30")
    y = c + c.inv()
    quartic = y ** 4 + y ** 3 - 4 * y ** 2 - 4 * y + ident
    check("C1.Y-quartic", quartic == 0 * ident, "Y^4+Y^3-4Y^2-4Y+I=0")
    rk = int((s - s.T).rank())
    check("C1.skew-rank", rk == 8, "rank(S-S^T)=%d" % rk)
    p0 = coeffs
    p8 = charpoly_coeffs(coxeter_from_arrows(sink_arrows(8)))
    p4 = charpoly_coeffs(coxeter_from_arrows(sink_arrows(4)))
    check("C1.charpoly orientation-invariant", p0 == p8 == p4,
          "bipartite vs sink-8 vs sink-4")
    m = list(EXPONENTS)
    check("C5.sum(2m_i+1)=248", sum(2 * mi + 1 for mi in m) == 248)
    check("C5.sum m_i=120", sum(m) == 120)
    check("C5.sum(m_i+1)=128", sum(mi + 1 for mi in m) == 128)
    check("C5.degrees=m_i+1", DEGREES == (2, 8, 12, 14, 18, 20, 24, 30),
          "degrees=%s" % (DEGREES,))
    return c


def cell2_hamming_and_srg():
    print("\nCELL 2--3  Hamming H_8 + srg(120,56,28,24)")
    wdist = {}
    for w in CODE:
        wt = sum(w)
        wdist[wt] = wdist.get(wt, 0) + 1
    check("C2.weight-enumerator",
          len(CODE) == 16 and wdist == {0: 1, 4: 14, 8: 1},
          "1+14 y^4+y^8  dist=%s" % (wdist,))
    dual = []
    for v in itertools.product((0, 1), repeat=8):
        if all(sum(a * b for a, b in zip(v, c)) % 2 == 0 for c in CODE):
            dual.append(v)
    check("C2.self-dual", sorted(dual) == list(CODE), "C=C-perp")
    check("C2.doubly-even", all(sum(c) % 4 == 0 for c in CODE), "weights in 0 mod 4")
    gens = [list(g) for g in CODE_GENS]
    for i in range(8):
        v = [0] * 8
        v[i] = 2
        gens.append(v)
    basis_L = zspan_hnf_rows([tuple(g) for g in gens])
    check("C2.L-rank", len(basis_L) == 8, "HNF rank %d" % len(basis_L))
    gram = gram_int(basis_L)
    even = all(int(gram[i, j]) % 2 == 0 for i in range(8) for j in range(8))
    even_diag = all(int(gram[i, i]) % 4 == 0 for i in range(8))
    det_g = int(gram.det())
    det_scaled = sp.Rational(det_g, 256)
    check("C2.Gram even unimodular",
          even and even_diag and det_scaled == 1,
          "det(Gram_L)=%d  det(Gram/2)=%s" % (det_g, det_scaled))
    roots = []
    for cw in CODE:
        ranges = []
        for i in range(8):
            if cw[i] == 0:
                ranges.append([-2, 0, 2])
            else:
                ranges.append([-1, 1])
        for v in itertools.product(*ranges):
            if sum(x * x for x in v) == 4:
                roots.append(v)
    roots = tuple(sorted(roots))
    n_coord = sum(1 for r in roots if max(abs(x) for x in r) == 2)
    n_w4 = len(roots) - n_coord
    check("C2.min-vectors 240=16+14*16",
          len(roots) == 240 and n_coord == 16 and n_w4 == 14 * 16,
          "240=%d+%d" % (n_coord, n_w4))
    w4 = [c for c in CODE if sum(c) == 4]
    supports = [frozenset(i for i, b in enumerate(c) if b) for c in w4]
    planes = affine_hyperplanes()
    check("C2.affine-hyperplanes",
          set(supports) == planes and len(planes) == 14,
          "14 = 7 directions x 2")
    steiner_ok = True
    for triple in itertools.combinations(range(8), 3):
        hit = sum(1 for s in supports if set(triple) <= s)
        if hit != 1:
            steiner_ok = False
            break
    check("C2.Steiner S(3,4,8)", steiner_ok,
          "every 3-subset in exactly one weight-4 word")
    r0 = roots[0]
    dist = {2: 0, 1: 0, 0: 0, -1: 0, -2: 0}
    for r in roots:
        ip = sum(a * b for a, b in zip(r0, r)) // 2
        dist[ip] = dist.get(ip, 0) + 1
    want = {2: 1, 1: 56, 0: 126, -1: 56, -2: 1}
    check("C2.inner-product dist", dist == want,
          "(2,1,0,-1,-2)=(%d,%d,%d,%d,%d)"
          % (dist[2], dist[1], dist[0], dist[-1], dist[-2]))
    lines = []
    seen = set()
    for r in roots:
        key = r if r > tuple(-x for x in r) else tuple(-x for x in r)
        if key not in seen:
            seen.add(key)
            lines.append(key)
    nlines = len(lines)
    a_adj = np.zeros((nlines, nlines), dtype=np.int64)
    for i in range(nlines):
        for j in range(i + 1, nlines):
            ip = sum(a * b for a, b in zip(lines[i], lines[j])) // 2
            if abs(ip) == 1:
                a_adj[i, j] = 1
                a_adj[j, i] = 1
    a2 = a_adj @ a_adj
    deg = np.diag(a2)
    lam_vals = a2[a_adj == 1]
    mu_mask = (a_adj == 0) & (~np.eye(nlines, dtype=bool))
    mu_vals = a2[mu_mask]
    lam = int(lam_vals[0]) if lam_vals.size else -1
    mu = int(mu_vals[0]) if mu_vals.size else -1
    srg = (
        nlines == 120
        and set(int(d) for d in deg) == {56}
        and lam_vals.size > 0 and mu_vals.size > 0
        and int(lam_vals.min()) == int(lam_vals.max()) == 28
        and int(mu_vals.min()) == int(mu_vals.max()) == 24
    )
    disc = (lam - mu) ** 2 + 4 * (56 - mu)
    theta = (lam - mu + int(math.isqrt(disc))) // 2
    tau_e = (lam - mu - int(math.isqrt(disc))) // 2
    n_m, k_m = 120, 56
    rootd = int(math.isqrt(disc))
    f_mult = ((n_m - 1) + ((n_m - 1) * (mu - lam) - 2 * k_m) // rootd) // 2
    g_mult = ((n_m - 1) - ((n_m - 1) * (mu - lam) - 2 * k_m) // rootd) // 2
    mults = sorted((1, f_mult, g_mult))
    check("C2.120-line spectrum",
          srg and mults == [1, 35, 84] and (theta, tau_e) == (8, -4),
          "srg(120,56,%d,%d) eig (56, %d, %d) mult (1, %d, %d)"
          % (lam, mu, theta, tau_e, f_mult, g_mult))
    return roots, basis_L


def cell4_hecke(counts: dict[int, int]) -> None:
    print("\nCELL 4  Hecke N(n)=240 sigma_3(n)")
    n_ok = True
    got = []
    for n in range(1, 11):
        want = 240 * sigma_k(n, 3)
        got.append(counts[n])
        if counts[n] != want:
            n_ok = False
            check("C3.N(%d)" % n, False,
                  "got %d want 240*sigma_3(%d)=%d" % (counts[n], n, want))
    if n_ok:
        check("C3.N(n)=240 sigma_3(n)", True, "n=1..10  N=%s" % (got,))
    pairs = ((2, 3), (2, 5), (3, 4), (4, 5))
    hecke_ok = True
    details = []
    for m, n in pairs:
        lhs = counts[m * n]
        rhs = counts[m] * counts[n] // 240
        details.append("%d*%d: %d vs %d" % (m, n, lhs, rhs))
        if lhs != rhs:
            hecke_ok = False
    check("C3.Hecke coprime", hecke_ok, "; ".join(details))


def cell5_delta(collected: dict[int, list[tuple[int, ...]]]) -> None:
    print("\nCELL 5  Ramanujan Delta as first anisotropy")
    for tag, u2 in (
        ("u=e1", 1),
        ("u=(1,1,0..)/sqrt2", 1),
        ("u=(3,4,0..)/5", 1),
    ):
        f, q, ell = zonal_ql(8, sp.Integer(u2))
        lap = laplacian_ql(f, q, ell, 8, sp.Integer(u2))
        check("C4.Delta P=0 (%s)" % tag, lap == 0, "symbolic Laplacian in (q,ell)")
    ak8 = gegenbauer_coeffs(8, sp.Rational(3))
    directions = ("e1", "diag", "generic")
    ap_table: dict[str, list[sp.Rational]] = {}
    for name in directions:
        vals = []
        for n in range(1, 9):
            arr = np.array(collected[n], dtype=object)
            vals.append(eval_zonal_shell(arr, ak8, 8, name))
        ap_table[name] = vals
    working = None
    tau_hits = []
    for name, vals in ap_table.items():
        if vals[0] == 0:
            check("C4.A_P(n)/A_P(1)=tau(n)  u=%s" % name, False, "A_P(1)=0")
            continue
        if working is None:
            working = name
        ratios = [sp.simplify(vals[n] / vals[0]) for n in range(8)]
        ok = ratios == [sp.Integer(t) for t in TAU]
        if ok:
            tau_hits.append(name)
        check("C4.A_P(n)/A_P(1)=tau(n)  u=%s" % name, ok,
              "A_P(1)=%s ratios=%s" % (vals[0], [int(r) for r in ratios]))
    nonzero = [name for name, vals in ap_table.items() if vals[0] != 0]
    check("C4.which-u", len(nonzero) > 0,
          "A_P(1)!=0 on %s; tau match on %s"
          % (",".join(nonzero) if nonzero else "(none)",
             ",".join(tau_hits) if tau_hits else "(none)"))
    vanish_ok = True
    vanish_detail = []
    for deg in (2, 4, 6):
        ak = gegenbauer_coeffs(deg, sp.Rational(3))
        f, q, ell = zonal_ql(deg, sp.Integer(1))
        if laplacian_ql(f, q, ell, 8, sp.Integer(1)) != 0:
            vanish_ok = False
            vanish_detail.append("deg%d not harmonic" % deg)
            continue
        for n in range(1, 5):
            arr = np.array(collected[n], dtype=object)
            s = eval_zonal_shell(arr, ak, deg, "e1")
            vanish_detail.append("F_%d(n=%d)=%s" % (deg, n, s))
            if s != 0:
                vanish_ok = False
    check("C4.deg 2,4,6 vanish n=1..4", vanish_ok,
          "7-design; " + ", ".join(vanish_detail[:6]))
    nmax = 8
    e4 = [0] * (nmax + 1)
    e6 = [0] * (nmax + 1)
    e4[0] = 1
    e6[0] = 1
    for n in range(1, nmax + 1):
        e4[n] = 240 * sigma_k(n, 3)
        e6[n] = -504 * sigma_k(n, 5)
    e4_3 = poly_mul(poly_mul(e4, e4, nmax), e4, nmax)
    e6_2 = poly_mul(e6, e6, nmax)
    diff = [e4_3[i] - e6_2[i] for i in range(nmax + 1)]
    delta = [0] * (nmax + 1)
    delta[1] = 1
    for n in range(1, nmax + 1):
        fac = [0] * (nmax + 1)
        for k in range(0, 25):
            exp = n * k
            if exp > nmax:
                break
            fac[exp] += math.comb(24, k) * ((-1) ** k)
        delta = poly_mul(delta, fac, nmax)
    check("C4.E4^3-E6^2=1728 Delta",
          diff == [1728 * c for c in delta],
          "q-series to order 8; Delta=%s" % (delta[1:],))
    if working is not None:
        c0 = ap_table[working][0]
        theta_p = [0] + ap_table[working]
        want_th = [c0 * sp.Integer(delta[n]) for n in range(nmax + 1)]
        ok_th = all(theta_p[n] == want_th[n] for n in range(1, nmax + 1))
        check("C4.Theta_{E8,P}=c Delta", ok_th, "c=A_P(1)=%s" % c0)


def cell6_characters() -> None:
    print("\nCELL 6  (Z/30)^x characters")
    units = list(TOTATIVES)
    orders = []
    for g in units:
        x, k = g, 1
        while x != 1:
            x = (x * g) % 30
            k += 1
            if k > 30:
                break
        orders.append(k)
    multiset = tuple(sorted(orders))
    check("C6.order multiset",
          multiset == (1, 2, 2, 2, 4, 4, 4, 4),
          "orders=%s" % (multiset,))
    check("C6.iso C2xC4",
          orders.count(1) == 1 and orders.count(2) == 3 and orders.count(4) == 4,
          "(Z/30)^x cong C2 x C4")
    check("C6.not iso (F2^3,+)",
          multiset != tuple([1] + [2] * 7),
          "(F2^3,+) all seven nontrivial order 2")
    elts = []
    for a in range(2):
        for b in range(4):
            elts.append((pow(11, a, 30) * pow(7, b, 30)) % 30)
    h2f4 = [[None] * 8 for _ in range(8)]
    for k in range(2):
        for l in range(4):
            for a in range(2):
                for b in range(4):
                    sign = 1 if ((k * a) & 1) == 0 else -1
                    re, im = i_pow(l * b)
                    h2f4[k * 4 + l][a * 4 + b] = (sign * re, sign * im)
    chi_prod = [[None] * 8 for _ in range(8)]
    for k in range(2):
        for l in range(4):
            for j, g in enumerate(elts):
                chi_prod[k * 4 + l][j] = chi_kl(k, l, g)
    check("C6.H2⊗F4 in product order", chi_prod == h2f4,
          "cols (a,b), rows (k,l)")
    col_of = [elts.index(u) for u in units]
    chi_sorted = [[chi_kl(k, l, u) for u in units] for k in range(2) for l in range(4)]
    h2_perm = [[h2f4[r][col_of[c]] for c in range(8)] for r in range(8)]
    check("C6.Fourier monomially ~ H2⊗F4", chi_sorted == h2_perm,
          "column perm %s" % (col_of,))
    vals = {chi_kl(k, l, u) for k in range(2) for l in range(4) for u in units}
    check("C6.character values in {±1,±i}",
          vals <= {(1, 0), (-1, 0), (0, 1), (0, -1)},
          "values=%s" % (sorted(vals),))
    nmax = 200
    dchi_ok = True
    nfail = None
    for k in range(2):
        for l in range(4):
            for n in range(1, nmax + 1):
                chn = chi_kl(k, l, n)
                lhs = (chn[0] * sigma_k(n, 3), chn[1] * sigma_k(n, 3))
                rhs = (0, 0)
                for d in divisors(n):
                    prod = gmul(chi_kl(k, l, d), chi_kl(k, l, n // d))
                    sc = (n // d) ** 3
                    rhs = (rhs[0] + prod[0] * sc, rhs[1] + prod[1] * sc)
                if lhs != rhs:
                    dchi_ok = False
                    nfail = (k, l, n, lhs, rhs)
                    break
            if not dchi_ok:
                break
        if not dchi_ok:
            break
    check("C6.D_chi = L(s,chi)L(s-3,chi)", dchi_ok,
          "n<=200, 8 Dirichlet chars mod 30"
          + ("" if dchi_ok else " FAIL %s" % (nfail,)))


def cell7_e6_a2(roots: tuple, basis_L: list[tuple[int, ...]]) -> None:
    print("\nCELL 7  E6 ⊕ A2 ⊂ E8 glue")
    alpha = None
    beta = None
    for r in roots:
        if r == (2, 0, 0, 0, 0, 0, 0, 0) or r == (-2, 0, 0, 0, 0, 0, 0, 0):
            alpha = r
            break
    if alpha is None:
        alpha = roots[0]
    for r in roots:
        ip = sum(a * b for a, b in zip(alpha, r))
        if ip == -2:
            beta = r
            break
    check("C8.A2 pair", alpha is not None and beta is not None,
          "alpha=%s beta=%s" % (alpha, beta))
    a2_roots = []
    for s in (1, -1):
        a2_roots.append(tuple(s * x for x in alpha))
        a2_roots.append(tuple(s * x for x in beta))
        a2_roots.append(tuple(s * (alpha[i] + beta[i]) for i in range(8)))
    a2_roots = tuple(sorted(set(a2_roots)))
    e6_roots = []
    for r in roots:
        if (sum(a * b for a, b in zip(r, alpha)) == 0
                and sum(a * b for a, b in zip(r, beta)) == 0):
            e6_roots.append(r)
    in_a2 = set(a2_roots)
    e6_set = set(e6_roots)
    glue_roots = [r for r in roots if r not in in_a2 and r not in e6_set]
    split = (len(e6_roots), len(a2_roots), len(glue_roots))
    check("C8.root split 72+6+162", split == (72, 6, 162),
          "got %s" % (split,))
    e6_basis = zspan_hnf_rows(e6_roots)
    a2_basis = zspan_hnf_rows(list(a2_roots))
    check("C8.ranks E6,A2",
          len(e6_basis) == 6 and len(a2_basis) == 2,
          "rk E6=%d rk A2=%d" % (len(e6_basis), len(a2_basis)))
    m_basis = zspan_hnf_rows(e6_basis + a2_basis)
    check("C8.M=E6⊕A2 rank 8", len(m_basis) == 8, "rk M=%d" % len(m_basis))
    gram_m = gram_int(m_basis)
    gram_l = gram_int(basis_L)
    det_m = int(gram_m.det())
    det_l = int(gram_l.det())
    ratio = sp.Rational(det_m, det_l)
    index = int(sp.sqrt(ratio)) if ratio > 0 and sp.sqrt(ratio).is_integer else -1
    check("C8.index 3 (det 9 scaled)",
          index == 3 and ratio == 9,
          "det Gram_M=%d det Gram_L=%d  [L:M]=%s" % (det_m, det_l, index))
    even_m = all(int(gram_m[i, j]) % 2 == 0 for i in range(8) for j in range(8))
    gram_scaled = sp.Matrix(8, 8, lambda i, j: int(gram_m[i, j]) // 2)
    inv = smith_diag(gram_scaled) if even_m else []
    inv_abs = [abs(d) for d in inv if d not in (0,)]
    check("C8.Smith (1^6,3,3)",
          even_m and sorted(inv_abs) == [1, 1, 1, 1, 1, 1, 3, 3],
          "Smith(Gram_M/2)=%s" % (inv,))
    b = sp.Matrix([list(v) for v in m_basis])
    binv = b.inv()
    class_count: dict[tuple, int] = defaultdict(int)
    for r in roots:
        xi = (sp.Matrix(list(r)).T * binv).tolist()[0]
        frac = []
        for t in xi:
            t = sp.nsimplify(t)
            frac.append(t - sp.floor(t))
        class_count[tuple(frac)] += 1
    sizes = sorted(class_count.values(), reverse=True)
    check("C8.glue classes 78/81/81",
          len(class_count) == 3 and sizes == [81, 81, 78],
          "#classes=%d  sizes=%s" % (len(class_count), sizes))


def run():
    reset()
    print("=" * 74)
    print("v1018 -- E8.DIRECTED.READOUT.01  (seven exact cells; C7 OPEN)")
    print("SPEC_SHA %s" % R609_SPEC)
    print(C7_NOTE)
    print("=" * 74, flush=True)

    cell1_seifert()
    roots, basis_L = cell2_hamming_and_srg()
    cell6_characters()

    print("\nenumeration  Construction-A shells n=1..20 (collect n<=8)")
    counts, collected = enumerate_construction_a(max_n=20, collect_n=8)
    print("  N(n) n=1..10: %s" % [counts[n] for n in range(1, 11)], flush=True)
    cell4_hecke(counts)
    cell5_delta(collected)
    cell7_e6_a2(roots, basis_L)

    print("\nC7 STATUS: OPEN -- not gated.  %s" % C7_NOTE)
    print("  r609 SPEC_SHA  %s" % R609_SPEC)
    return summary("v1018 E8 directed readout (7/8 cells; C7 open)")


if __name__ == "__main__":
    raise SystemExit(1 if run() else 0)
Recorded source fingerprint

25f541903f01621990cf317372f1349be22a495b1594eb12c77c64db151dc9db

Bounded scientific source excerpts

Each excerpt retains its own original lines, fingerprint and source freshness. These are separate recorded ranges, not a replacement for the complete document.

Paper sections that cite this module

What this source index covers

The public registry includes 116 document views, 6,693 section records and 985 physical LaTeX sources. Active publication documents, research material and archives retain their recorded roles. This is source navigation, not a new semantic review or proof run.