research/lab/py/zeta-locus

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

zeta-locus

  • The locus of the zeros of the design zeta zeta_F(s) = sum_(n in S_F) n^(-s), with F the digits of the code and S_F the integers they write: where the zeros sit across bases and digit sets, and which law the real part obeys.
  • The ladder, the contour engine and the truncation bounds are imported from ../design-zeta and never copied; this study adds the cofactor, the Laurent data at the poles, the derived shadow law and the falsification sweep.

THE COFACTOR

  • Z(s) = zeta_F(s) (1 - fill base^(-s)) is the Lyndon cofactor: 1/(1 - fill base^(-s)) is the zeta of the free monoid on F with norm base^(length), is zero free, and carries the whole pole lattice.
  • Z is analytic on Re s > alpha - 1, because 1 - fill base^(-s) cancels exactly the m = 0 line of the ladder's poles and no other; its own poles are the s_(m,j) with m >= 1 at which zeta_F has a nonvanishing residue, the nearest to the strip being Re s = alpha - 1 with residue -s_(1,j) gamma_1 r_j/fill, and on a full digit set there are none at all, Z being entire.
  • Z(s) -> a_min^(-s) as Re s -> +infinity with a_min the least nonzero digit, so every zero of zeta_F right of alpha - 1 is a zero of one analytic function.
  • The transfer runs one way without exception and the other way with one: a zero of zeta_F is always a zero of Z; a zero of Z is a zero of zeta_F except at a pole s_(0,j) where the residue vanishes, and there Z vanishes while zeta_F is regular.
  • The one-level digit recursion gives it in closed form: Z(s) = E_1(s) + sum_(l >= 1) binom(-s, l) base^(-s-l) gamma_l zeta_F(s+l) with E_1(s) = sum_(a in F, a != 0) a^(-s) and gamma_l = sum_(a in F) a^l; the peeled ladder of ../design-zeta evaluates it as (1 - fill base^(-s)) D_(P-1)(s) plus the ladder numerator, so the printed VALUE of Z carries the same propagated bound. The Laurent coefficients do not: Z_1 and Z_2 are central differences at step 1e-5 carrying about 1e-10 of truncation, far above the ladder's own bound, enough for a prediction compared at 1e-3 and not a certificate.

THE DERIVED SHADOW

  • At a pole s_(0,j) = alpha + 2 pi i j/log base one has fill base^(-s_(0,j)) = 1 exactly for every j, so 1 - fill base^(-s) = 1 - base^(-u) in u = s - s_(0,j) with no j dependence at all.
  • With Z(s) = Z_0 + Z_1 u + Z_2 u^2 + ..., the identity 1/(1 - e^(-x)) = 1/x + 1/2 + x/12 - x^3/720 + ... at x = u log base gives the Laurent expansion of zeta_F at the pole term by term.
  • Residue r_j = Z_0/(log base), regular part R_j = Z_1/(log base) + Z_0/2, its derivative R'_j = Z_2/(log base) + Z_1/2 + Z_0 (log base)/12. The residues are Burnol's lambda_(0,j), certified by ../burnol-residue; on the full digit set r_0 = 1 and R_0 is Euler-Mascheroni, which is what zeta has at s = 1.
  • A zero near the pole solves u (R_j + R'_j u + ...) = -r_j. First order u_1 = -r_j/R_j; second order the root of R'_j u^2 + R_j u + r_j = 0 nearest u_1. Nothing is fitted: the prediction is built from the residue and the regular part alone and is then compared with the polished zero.
  • The pole index j is the only label; the disc count, not the size of the prediction, decides whether a pole carries a zero at all.

THE SWEEP

  • Every printed zero carries Re s, Im s, Im s log base/(2 pi), its fractional part, alpha, fill/base, the pole index and the first-order prediction, so a curve law, a comb law and a family law each have a column to die in.
  • Equal-alpha pairs at different bases are the falsifier: base 4 {0,1}, base 9 {0,1,2} and base 16 {0,1,2,3} all have alpha = 1/2, and base 4 {0,1} and base 16 {0,1,2,3} also share fill/base = 1/2.
  • Equal-alpha pairs at one base are the cheaper falsifier: all fill 2 sets at base 4 share alpha and fill/base and differ only in F.
  • Scaling classes are quotiented first: zeta_(aF)(s) = a^(-s) zeta_F(s) has the same zeros, so one representative per class is censused.
  • The base 2 full digit set is the line control: there zeta_F = zeta and the locus is the critical line Re s = 1/2 = alpha/2.

THE CENSUS

  • The strip is alpha - 0.92 < Re s < alpha + 3.02, one box, no pole inside and no blind sliver, the winding of Z on it counted by the argument principle with the largest surviving phase step printed as the certificate.
  • Each pole gets its own contour, a circle of radius 0.45 about s_(0,j), an assignment radius fixed by the discs not overlapping and not by the tooth law, so every count is conditional on it; that ONE radius serves both the count and the tooth: the winding gives the number of zeros of Z in the disc, the residue-null centre is subtracted to give the number of zeros of zeta_F, and exactly that many are then located by a polar grid inside the disc.
  • The teeth are located without the prediction: the grid seeds the polish and the prediction is compared afterwards, so no tooth is selected by the law it tests, and a pole whose zero the search fails to pin is reported as such.
  • N_F(T) is the running winding at the box boundaries, printed per design, and the zeros per period is N_F(T) 2 pi/(T log base).
  • A zero is either matched to a tooth or tagged second family; the second family is what remains when the pole lattice is stripped, and on the base 2 full digit set it is the critical line.

THE ROUCHE CERTIFICATE

  • The disc count is an argument principle on a resolved contour, which is a measurement. The certificate replaces it by an inequality, and the inequality is what a proof needs.
  • Split Z(s_0 + u) = P(u) + T(u) with P(u) = (1 - base^(-u)) D_(P-1)(s_0+u) + E_P(s_0+u) and T the l >= 1 part of the ladder numerator. The split matters: a modulus bound on the Dirichlet polynomial D_(P-1) throws away its cancellation and runs about fifty times its true size, so P is never bounded, only expanded.
  • P is entire with Taylor coefficients in closed form, d_m = sum_(n) n^(-s_0)(-log n)^m/m! over the two string pools convolved with the coefficients of 1 - e^(-u log base), computed exactly to m = 60 with a remainder bounded by sum_n n^(rho - Re s_0)(rho log n)^(M/2+1)/(M/2+1)! and its mirror on the other factor.
  • T is bounded on abs(u) <= R_2 by the ladder's own majorant, sum_(l >= 1) binom(abs(s_0)+R_2+l-1, l) base^(-sigma-l) gamma_l G(sigma+l) with sigma = Re s_0 - R_2, G bounded by summing two peel levels exactly before the geometric tail, worth about a factor three over the raw tail. The l sum is closed by a majorant ratio and not by an observed one: gamma_(l+1)/gamma_l <= a_max and G(sigma+l+1)/G(sigma+l) <= base^(-(P-1)) because every string in the pools is at least base^(P-1), so the term ratio is at most R_l = ((abs(s_0)+R_2+l)/(l+1)) a_max base^(-P), which decreases in l once abs(s_0)+R_2 >= 1 and is below a_max base^(-P) otherwise; stopping at the first l with R_l < 1 and adding term_l R_l/(1-R_l) is a proof, where the term ratio itself is not monotone.
  • Z_0 comes from the ladder at s_0 with its propagated bound. Z_1 is NOT the central difference: it is the first Fourier mode of T on a circle of radius R, whose aliasing is (B_T/R_2)(R/R_2)^N/(1 - (R/R_2)^N) by Cauchy, plus the exact p_1, so no step of the certificate uses a differenced quantity.
  • Rouche against the model Z_0 + Z_1 u, whose zero count in the disc is exactly one when abs(Z_0/Z_1) < rho: certified when margin = (abs(Z_1)_low rho - abs(Z_0)_up) - sum_(m >= 2) abs(P_m) rho^m - B_T tau^2/(1 - tau) > 0, tau = rho/R_2.
  • A positive margin proves exactly one zero of Z, hence of zeta_F when the residue does not vanish, in abs(u) < rho. rho and R_2 are free parameters of the proof and the verb reports the pair it used.
  • The peel depth is a free parameter of the proof, not a constant: the verb raises P at a pole until the certificate fires or the string pool passes its cap, and prints the depth each certified pole used. A pole that fails at the depth build picks automatically may certify two levels deeper.

RUN

  • uv run python research/lab/py/zeta-locus/zeta_locus.py shadow 40 all - the derived law at every design: residue, regular part, prediction, disc counts of Z and of zeta_F, the located tooth and both misses.
  • uv run python research/lab/py/zeta-locus/zeta_locus.py rouche 40 rou - the certificate at every pole of the nine designs the landed census counts: margin, the rho and R_2 achieving it, B_T, the bounds on abs(Z_0) and abs(Z_1), the sample count, and the argument principle count in the same disc for comparison.
  • uv run python research/lab/py/zeta-locus/zeta_locus.py census 40 all - the same plus the strip census, N_F(T), one row per zero and the falsification lines.
  • The third argument selects a family: q3, q4, q5, half, wide, ctl, rou the nine designs of the Rouche census, all. The second is the height.
  • Prints only, writes nothing. The full census to height 40 is about fifteen minutes; base 10 costs about nine times base 3 per evaluation.