research/lab/py/design-zeta

0 directories and 2 files in research/lab/py/design-zeta.

design-zeta

  • The Dirichlet series of a digit design, zeta_F(s) = sum_(n in S_F) n^(-s) over the base-base integers whose digits all lie in a digit set F, continued to the whole plane and read for its zeros.
  • Abscissa alpha = log_base fill, fill = card F; the object is Burnol 2026's K(s), and the continuation is his Proposition 4.1 in a peeled form.
  • Peeling: with E_j(w) the sum over the exactly-j-digit elements and G_P(w) = sum_(j >= P) E_j(w), the digit map gives (1 - fill base^(-w)) G_P(w) = E_P(w) + sum_(l >= 1) binom(-w, l) base^(-w-l) gamma_l G_P(w+l) with gamma_l = sum_(a in F) a^l, and zeta_F(w) = D_(P-1)(w) + G_P(w) for the finite Dirichlet polynomial D_(P-1) over S_F below base^(P-1).
  • The l-series has ratio max F/base^P, so the peel depth buys the convergence; the small quantity G_P is carried directly and never as a difference of two large ones.
  • Truncation is proved and propagated: abs(G_P(w)) <= k_1 (fill base^(-Re w))^(P-1)/(1 - fill base^(-Re w)) bounds the base of the ladder, a binomial majorant with a geometric remainder bounds the l-cut, and the same recursion that carries the value carries the bound.
  • Every printed value carries its bound, the census included: the ladder raises rather than returns when the requested tolerance is not reached, and the census prints the largest bound it met anywhere on its contour beside the largest phase step.
  • Residues come off the same ladder: at s_(m,j) = alpha - m + 2 pi i j/log base the factor 1 - fill base^(-s) has derivative log base, so the residue is the ladder numerator over log base.

THE CENSUS

  • The census reads the Lyndon cofactor Z(s) = zeta_F(s)(1 - fill base^(-s)) and not zeta_F. The level-m denominator of the ladder is 1 - fill base^(-(s+m)), so Z is analytic on Re s > alpha - 1, every zero of zeta_F right of that line is a zero of one analytic function, and no pole-free strip is needed.
  • One strip, alpha - 0.92 < Re s < alpha + 3.02, 0.02 < Im s < 60, split at Re s = alpha exactly. The two halves are therefore right of the abscissa and left of it with nothing unscanned between them; the stated strip is the computed strip and its edges are printed with the count.
  • Below Re s = alpha - 0.92 the ladder cannot reach tolerance against the cofactor's own pole line Re s = alpha - 1, so that is the left edge and the left-hand count is a count on the strip actually scanned.
  • The phase is accumulated along an adaptively refined contour that halves any segment whose principal-branch step exceeds one radian; a box of winding one is bisected by quadrant and polished by Muller.
  • The count is Verified and not Proved. The largest surviving phase step is printed, but nothing here bounds zeta_F'/zeta_F on the contour, so the argument principle is resolved and not certified and a zero pair closer than the surviving spacing would stay invisible.

RUN

  • uv run python research/lab/py/design-zeta/design_zeta.py
  • uv run python research/lab/py/design-zeta/design_zeta.py --full runs the census to Im s = 60 and adds the base-10 columns; --y10=40 caps the base-10 height alone.
  • Prints only, writes nothing.

CONTROLS

  • Base 2 on the full digit set is the whole integer line, so zeta_F is zeta there. The engine matches mpmath's zeta to the printed bound at s = 2, at the first zero, at 0.3 + 40i, at -1 + 2i and at 0.5 + 100i, gives residue exactly 1 at alpha = 1, and gives residue zero at alpha + 2 pi i/log 2, where the design family has a pole and the integers do not.
  • That column is censused on BOTH sides of its abscissa alpha = 1, and each side names the object it counts. Zeros of zeta right of the abscissa, alpha + 0.02 < Re s < alpha + 3.02: winding zero, which is what the Euler product forbids, now computed and not quoted. Zeros of zeta left of it, alpha - 0.98 < Re s < alpha - 0.02: exactly the first thirteen below Im s = 60, six of them below Im s = 40.
  • The cofactor is a different object on that column and is counted separately. 1 - 2 base^(-s) has teeth exactly ON Re s = alpha, floor(T log base/2 pi) of them below height T, so the one-strip cofactor count reads 19 = 13 + 6 at Im s < 60 and never puts a zero of zeta right of Re s = 1.
  • The residues at base = 3 reproduce the certified interval enclosures of lab/py/burnol-residue digit for digit on both F = {0,1} and F = {0,2}, by a route that shares no code with them.