Verification code and data for the Krein research programme: inverse spectral analysis of discrete Krein–Stieltjes strings.
Each paper of the programme lives in its own directory and carries its own manifest naming, script by script, which statement of the paper that script certifies. Tools and cached data used by more than one paper sit at the top level, so those papers use the same routines rather than private copies; material used by one paper only lives in that paper's directory.
satz1/ An Exact Derivative Calculus for Discrete Krein Strings
paper (.tex/.pdf), manifest, all verification scripts,
run logs in satz1/logs/
krein/ What a Krein String Sees in Its Weights
(an application of satz1/): paper, exact certificates,
world builders, drift expansion, case study, the sealed
preregistration, its own data and run_all.sh;
see krein/README.md
run_all.sh runs and checks every script of satz1/ (see below)
lib/ chain_lab.py RKPW reconstruction of Jacobi data
string_lab.py Jacobi data -> string (l, m)
data/ zeros_cache_1500.json ordinates 1..1500, 45 digits
zprime_cache_1500.json the corresponding |zeta'(rho)|
satz1/: Python 3.8 or later. The exact certification scripts need only
sympy and the standard library; the one benchmark additionally needs
mpmath and numpy (≥ 1.17, for default_rng).
krein/: Python 3.10 or later with numpy, scipy, mpmath, sympy
and matplotlib; krein/README.md lists which part needs which package
and the versions the scripts were tested with. Older versions that are
available as binary wheels suffice: the exact parts are rational, and the
string reconstructions run in mpmath.
pip install sympy mpmath numpy scipy matplotlib
./run_all.sh # satz1/: exact certificates, about 3 minutes
./run_all.sh --full # plus the numerical benchmark, about 10 minutes
cd krein && ./run_all.sh # krein/: every number of the paper, about 1.5 hours on one core
cd krein && ./run_all.sh --full-only # the class-test control worlds alone, several hoursEach run_all.sh runs the scripts of its paper and checks their output
against the expected result; it exits with 0 only if all checks pass.
Output goes to runlogs/ (for satz1/) and to krein/run_output/; the
committed reference logs are satz1/logs/ and krein/certify/logs/. The
first command of krein/run_all.sh is a pre-push guard, and
krein/SHA256SUMS seals every file of that folder
(cd krein && sha256sum -c SHA256SUMS). Individual scripts can also be
run directly, from any working directory: paths are resolved relative to
the repository, not to the shell.
For the exact scripts the standard is that every reported difference is exactly zero in rational arithmetic — not small — and every certificate comes with negative probes that must fail. Numerical results reproduce the figures printed in the papers; where double precision enters, the last digit may vary with the numpy/BLAS build, as the papers state.
On systems with glibc older than 2.28 (e.g. CentOS 7), install the
numerical packages with pip install --only-binary=:all: <package>;
current wheels require a newer glibc, and without the flag pip attempts a
source build.
The manifests satz1/satz1_checks_MANIFEST.md and
krein/checks/krein_checks_MANIFEST.md are the authoritative maps from
script to certified statement, including expected output and runtime.
The papers are archived on Zenodo; each identifier resolves to the current version of its paper. Please cite the papers rather than this repository.
| Paper | Directory | DOI |
|---|---|---|
| An Exact Derivative Calculus for Discrete Krein Strings | satz1/ |
10.5281/zenodo.22847188 |
| What a Krein String Sees in Its Weights | krein/ |
10.5281/zenodo.23038257 |
- v1.0.0 —
satz1/(research note v1.0), withlib/anddata/. - v2.0.0 — adds
krein/(research note v1.0);satz1/,lib/,data/and the top-levelrun_all.share unchanged.
The formal results are statements about finite positive discrete
measures on the half-line with distinct positive nodes. They use no
hypothesis about the distribution of the Riemann zeros, and no claim
concerning the Riemann Hypothesis is made or implied anywhere in this
repository. The benchmark of satz1/ consumes a concrete list of
ordinates purely as a reproducible supply of distinct positive numbers.
The case study of krein/ consumes lists of ordinates and of the moduli
of the derivative of zeta at the zeros as declared, hashed numerical
inputs; no property of their distribution is assumed, the definitions
and proofs do not contain these lists, and nothing is offered as
evidence for or against any conjecture about them.
The code — all scripts in satz1/ and krein/, the tools in lib/, and
the run_all.sh scripts — is released under the MIT License; see
LICENSE.
The papers (satz1/*.tex, satz1/*.pdf, krein/paper/), the cached data
in data/ and krein/data/, and the world files, prediction curves and
preregistration in krein/ are released under the Creative Commons
Attribution 4.0 International License
(CC BY 4.0), matching the
Zenodo records.