Two Mathematicians of Göttingen

Riemann&Hilbert

One reimagined space, number, and the meaning of geometry in a single decade of work. The other rebuilt the foundations of all mathematics and posed the questions of a century. Their ideas still meet on the critical line.

σ = ½  ·  THE CRITICAL LINE, DRAWN LIVE ABOVE
Prologue · One University, Two Revolutions

The Göttingen Threads

Between 1850 and 1930, a small university town in Lower Saxony became the mathematical capital of the world. Bernhard Riemann (1826–1866) arrived as Gauss's shy doctoral student and, in a life cut short at thirty-nine, redrew the maps of analysis, geometry, and number theory. David Hilbert (1862–1943) arrived a generation later from Königsberg and made Göttingen the engine of modern axiomatic mathematics — while championing, extending, and finally institutionalizing Riemann's boldest ideas.

Bernhard Riemann · 1826–1866

The Visionary of Concepts

Son of a poor Lutheran pastor from Breselenz. Painfully shy, chronically ill, and almost supernaturally original. He published little — roughly a dozen papers — but nearly every one founded a field: Riemann surfaces, Riemannian geometry, the Riemann integral, the zeta function's analytic theory. He believed mathematics should proceed from ideas rather than calculation: "through the concepts, not the formulas."

David Hilbert · 1862–1943

The Architect of Foundations

Königsberg-born, supremely confident, and organizationally brilliant. He conquered invariant theory, re-axiomatized Euclid, invented (with his school) the abstract theory of infinite-dimensional spaces that bears his name, and in 1900 handed the twentieth century its agenda: twenty-three problems. His credo, carved on his tombstone: Wir müssen wissen — wir werden wissen. We must know — we will know.

A shared timeline

1826

Riemann born in Breselenz, Kingdom of Hanover.

1851

Doctoral thesis under Gauss: foundations of complex function theory and Riemann surfaces. Gauss — famously stingy with praise — calls it work of "a gloriously fertile originality."

1854

Habilitation lecture Über die Hypothesen, welche der Geometrie zu Grunde liegen — the birth of Riemannian geometry, delivered to a mostly uncomprehending audience with one crucial exception: Gauss.

1859

Elected to the Berlin Academy; submits his only number-theory paper, eight pages that contain the Riemann Hypothesis.

1862

Hilbert born in Königsberg, Prussia.

1866

Riemann dies of tuberculosis at Selasca, Italy, aged 39.

1888–93

Hilbert's Basis Theorem and Nullstellensatz demolish and rebuild invariant theory. Gordan: "This is not mathematics. This is theology."

1899

Grundlagen der Geometrie: Euclid re-founded on 20 rigorous axioms.

1900

The Paris address: 23 problems for the new century. Problem 8 is Riemann's Hypothesis.

1904–12

Integral equations and spectral theory — the seed of Hilbert space, later made axiomatic by von Neumann for quantum mechanics.

1915

Hilbert derives the field equations of general relativity from a variational principle — written in the language Riemann invented in 1854.

1920s

Hilbert's Program: secure all mathematics by finitary consistency proofs. Gödel (1931) shows the dream, as stated, is impossible.

1943

Hilbert dies in wartime Göttingen, his school scattered by the Nazi purges of 1933.

If I were to awaken after having slept for a thousand years, my first question would be: Has the Riemann Hypothesis been proven?— attributed to David Hilbert

That quotation — probably apocryphal, endlessly repeated because it ought to be true — captures the relationship this guide explores. Hilbert did not merely admire Riemann; he wove Riemann's threads into the fabric of twentieth-century mathematics. We follow four of those threads: complex analysis, geometry, the zeta function, and the idea of space itself — ending where they braid together in spectral theory and the Hilbert–Pólya dream.

Part I · Riemann — Thread One

Functions of a Complex Variable

Riemann's 1851 doctoral thesis asked a deceptively simple question: what does it mean for a function of a complex variable \(z = x + iy\) to be differentiable? The answer turned out to be one of the most restrictive — and therefore most powerful — conditions in all of analysis.

For a real function, differentiability is a mild, local smoothness condition. But in the complex plane, the limit \(\lim_{h\to 0} \frac{f(z+h)-f(z)}{h}\) must give the same value no matter which direction \(h\) approaches zero from — along the real axis, the imaginary axis, or any spiral in between. Writing \(f(z) = u(x,y) + i\,v(x,y)\) and comparing the horizontal and vertical approaches forces the celebrated system:

$$\frac{\partial u}{\partial x} = \frac{\partial v}{\partial y}, \qquad \frac{\partial u}{\partial y} = -\frac{\partial v}{\partial x}$$
The Cauchy–Riemann equations

Functions satisfying these — holomorphic functions — are astonishingly rigid. Differentiable once, they are automatically differentiable infinitely often, and equal to their own Taylor series. Both \(u\) and \(v\) are harmonic, \(\nabla^2 u = \nabla^2 v = 0\), tying complex analysis to potential theory, fluid flow, and electrostatics — physical intuitions Riemann used freely. His Dirichlet principle asserted that a harmonic function with given boundary values always exists because it minimizes the energy integral

$$D[u] = \iint_\Omega \left|\nabla u\right|^2 \, dx\, dy \;\longrightarrow\; \min$$
Dirichlet's principle — Riemann's favorite tool, Hilbert's rescue project

Weierstrass pointed out that minimizers need not exist in general, and for forty years Riemann's beautiful existence arguments hung under a cloud. It was Hilbert, in 1900–1904, who rehabilitated the Dirichlet principle with a rigorous direct method of the calculus of variations — the first great instance of Hilbert repairing a Riemann bridge rather than demolishing it. The direct method he invented became a cornerstone of modern PDE theory and, not coincidentally, one of the roads into Hilbert space.

Theorem · Riemann Mapping Theorem (1851)

Every simply connected open set \(\Omega \subsetneq \mathbb{C}\) can be mapped one-to-one and holomorphically onto the open unit disk. Any two such regions — a half-plane, a square, the interior of a snowflake curve — are conformally identical. Geometry of shape dissolves; only topology and analysis remain.

Conformal maps preserve angles: an infinitesimal grid of perpendicular lines is carried to a grid of perpendicular curves. The widget below applies famous conformal maps to a Cartesian grid so you can watch angles survive while shapes distort.

Interactive · Conformal Cartographyw = f(z)
Drag blend from 0 → 1 to morph the grid continuously from \(z\) to \(f(z)\). Notice every intersection stays a right angle — the visual signature of the Cauchy–Riemann equations. Where lines crowd together, \(|f'(z)|\) is small; where they spread, it is large.

Octave Lab 1 · Verifying Cauchy–Riemann numerically Riemann

GNU Octave has native complex arithmetic, which makes checking holomorphy a three-line experiment. We test \(f(z)=z^2\) (holomorphic) against \(g(z)=\bar z\) (famously not).

GNU OCTAVEcauchy_riemann_check.m
% Cauchy-Riemann residuals on a grid: holomorphic vs anti-holomorphic
% f(z) = z.^2  satisfies CR;   g(z) = conj(z) violates it everywhere.
h  = 1e-6;
[x, y] = meshgrid(linspace(-2, 2, 41));
z  = x + 1i*y;

function R = cr_residual(f, z, h)
  % partial derivatives of u,v by central differences
  ux = real(f(z+h) - f(z-h)) / (2*h);
  vx = imag(f(z+h) - f(z-h)) / (2*h);
  uy = real(f(z+1i*h) - f(z-1i*h)) / (2*h);
  vy = imag(f(z+1i*h) - f(z-1i*h)) / (2*h);
  R  = abs(ux - vy) + abs(uy + vx);   % zero iff CR holds
endfunction

Rf = cr_residual(@(z) z.^2,     z, h);
Rg = cr_residual(@(z) conj(z),  z, h);

printf("max CR residual, f=z^2   : %.3e\n", max(Rf(:)));
printf("max CR residual, g=conj z: %.3e\n", max(Rg(:)));

% visualize |f'(z)| as the local grid-stretch factor
fp = (z+h).^2;   % cheap forward map for the picture
figure; imagesc(linspace(-2,2,41), linspace(-2,2,41), abs(2*z));
axis xy equal tight; colorbar;
title("|f'(z)| = |2z| : conformal stretch factor of w = z^2");
max CR residual, f=z^2 : 4.469e-10 max CR residual, g=conj z: 2.000e+00
Reading the numbers. The residual for \(z^2\) is pure floating-point noise (∼10⁻¹⁰ at step \(h=10^{-6}\)), while \(\bar z\) shows the exact theoretical violation \(|u_x - v_y| = |1-(-1)| = 2\) at every point. Holomorphy is not approximately true or false — it is structural.
Part I · Riemann — Thread One, Continued

Riemann Surfaces & Multivalued Functions

What is \(\sqrt{z}\)? For \(z = 4\) it might be \(2\) or \(-2\); circle once around the origin and the two answers trade places. Rather than banning such functions, Riemann built them a better home: a new surface on which they become honest, single-valued citizens.

Write \(z = re^{i\theta}\), so \(\sqrt{z} = \sqrt{r}\,e^{i\theta/2}\). Increase \(\theta\) by a full turn \(2\pi\), and the square root picks up a factor \(e^{i\pi} = -1\): the function has monodromy. Riemann's move — made in his 1851 thesis and developed in his 1857 masterpiece on Abelian functions — was to take two copies of the complex plane, slit each along the negative real axis, and glue the top edge of each slit to the bottom edge of the other. On the resulting two-sheeted Riemann surface, walking around the origin carries you smoothly from sheet one to sheet two and back, and \(\sqrt{z}\) never contradicts itself.

Idea · The Domain Adapts to the Function

Before Riemann: a function is a formula living on a fixed plane, and multivaluedness is a pathology. After Riemann: the natural domain of an analytic function is a surface determined by the function itself — its branch points, its sheets, its topology. Analysis becomes geometry.

The topology of that surface carries hard analytic content. For an algebraic curve, the genus \(g\) — the number of "handles" — governs everything, culminating in the Riemann–Roch theorem relating zeros and poles a function can have:

$$\ell(D) - \ell(K - D) = \deg D - g + 1$$
Riemann–Roch — the dimension count that founded algebraic geometry

Below, a domain-coloring view of multivalued behavior: hue encodes the argument \(\arg f(z)\), brightness encodes \(|f(z)|\). For \(\sqrt{z}\) and \(\log z\), watch the hue tear along the branch cut — the seam where Riemann glued his sheets.

Interactive · Domain Coloring & Branch Cutshue = arg f, light = |f|
For \(\sqrt z\) and \(z^{1/3}\), the sheet slider multiplies by the appropriate root of unity — the same picture, phase-rotated: those are the other sheets of the Riemann surface. For \(\log z\), it adds \(2\pi i k\), climbing the infinite spiral staircase. The visible color discontinuity along the negative real axis is the branch cut; on the true Riemann surface it is invisible, an artifact of forcing the surface flat onto one plane.

Octave Lab 2 · Walking around a branch point Riemann

We trace \(\sqrt{z}\) continuously along a circle around the origin — choosing the continuous branch by hand, as if walking on the surface — and watch it return with the opposite sign.

GNU OCTAVEmonodromy_walk.m
% Monodromy of sqrt(z): analytic continuation around the origin.
% We DO NOT call sqrt() blindly (it would snap to the principal branch);
% we integrate the phase continuously, as motion on the Riemann surface.
N     = 400;
theta = linspace(0, 2*pi, N);      % one full loop
z     = exp(1i*theta);              % unit circle, r = 1

w = exp(1i*theta/2);               % continuous branch of sqrt(z)

printf("start : sqrt(1) chosen as %+.4f%+.4fi\n", real(w(1)),   imag(w(1)));
printf("finish: after one loop      %+.4f%+.4fi\n", real(w(end)), imag(w(end)));
printf("monodromy factor: %+.4f  (should be -1)\n", real(w(end)/w(1)));

% Two loops restore the original value: the surface has exactly 2 sheets.
theta2 = linspace(0, 4*pi, 2*N);
w2 = exp(1i*theta2/2);
printf("after two loops : %+.4f  (back to +1)\n", real(w2(end)));

% Render the surface: Re(sqrt) as height over the plane, both sheets
[r, t] = meshgrid(linspace(0.02,1.5,40), linspace(0,4*pi,160));
X = r.*cos(t);  Y = r.*sin(t);
W = sqrt(r).*exp(1i*t/2);
figure; surf(X, Y, real(W), imag(W), "EdgeColor", "none");
title("Riemann surface of sqrt(z): 2 sheets, glued along a cut");
xlabel("Re z"); ylabel("Im z"); zlabel("Re sqrt(z)"); view(40, 24);
start : sqrt(1) chosen as +1.0000+0.0000i finish: after one loop -1.0000+0.0000i monodromy factor: -1.0000 (should be -1) after two loops : +1.0000 (back to +1)
Part I · Riemann — Thread Two

The Riemann Integral

Buried inside Riemann's 1854 habilitation paper on trigonometric series is a question no one had asked with full seriousness: which functions can be integrated at all? His answer gave integration its first rigorous definition — the one every calculus student still learns first.

Partition \([a,b]\) into subintervals \(a = x_0 < x_1 < \cdots < x_n = b\), pick sample points \(\xi_i \in [x_{i-1}, x_i]\), and form the Riemann sum:

$$S = \sum_{i=1}^{n} f(\xi_i)\,\Delta x_i \;\xrightarrow[\;\max \Delta x_i \to 0\;]{}\; \int_a^b f(x)\,dx$$
The integral as the common limit of all sampling strategies

The definition's genius is what it does not require: no formula, no continuity everywhere, no antiderivative. Riemann immediately exhibited a function discontinuous on a dense set that is nonetheless integrable — detaching integrability from continuity and opening the door that Lebesgue would walk through in 1902. The precise criterion (proved later): \(f\) is Riemann-integrable iff it is bounded and continuous almost everywhere.

Interactive · Riemann Sum LaboratoryS → ∫

Octave Lab 3 · Convergence rates of quadrature rules Riemann

Different sampling rules converge at different speeds. Midpoint and trapezoid err as \(O(n^{-2})\); left/right endpoints only \(O(n^{-1})\). One loop in Octave shows the exponents falling out of a log–log slope.

GNU OCTAVEriemann_convergence.m
% Convergence of Riemann sums for  I = integral of e^(-x^2), x in [0,2]
f      = @(x) exp(-x.^2);
a = 0;  b = 2;
I_true = sqrt(pi)/2 * erf(2);          % exact value

Ns  = round(logspace(1, 4, 12));
err = zeros(numel(Ns), 3);            % [left, midpoint, trapezoid]

for k = 1:numel(Ns)
  n  = Ns(k);
  dx = (b-a)/n;
  xl = a + (0:n-1)*dx;                % left endpoints
  xm = xl + dx/2;                      % midpoints
  err(k,1) = abs(sum(f(xl))*dx                        - I_true);
  err(k,2) = abs(sum(f(xm))*dx                        - I_true);
  err(k,3) = abs((sum(f(xl)) - f(a)/2 + f(b)/2)*dx  - I_true);
endfor

% empirical order = -slope of log(err) vs log(n)
p = zeros(1,3);
for j = 1:3
  c    = polyfit(log(Ns), log(err(:,j))', 1);
  p(j) = -c(1);
endfor
printf("empirical orders:  left %.2f   midpoint %.2f   trapezoid %.2f\n", p);

loglog(Ns, err, "-o"); grid on;
legend("left O(1/n)", "midpoint O(1/n^2)", "trapezoid O(1/n^2)");
xlabel("n subintervals"); ylabel("|error|");
title("Riemann sums: convergence orders on a log-log plot");
empirical orders: left 1.00 midpoint 2.00 trapezoid 2.00
Part I · Riemann — Thread Three

On the Hypotheses Which Lie at the Bases of Geometry

On June 10, 1854, to qualify as a lecturer, Riemann delivered a talk with almost no formulas — Gauss had chosen, from his three proposed topics, the one Riemann had prepared least. In under an hour he dissolved two thousand years of assumptions about what space is, and supplied the mathematics Einstein would need sixty-one years later.

Riemann's radical proposal: geometry is not given in advance. A space — he coined the term Mannigfaltigkeit, manifold — is an \(n\)-dimensional continuum of points, and its geometry is an additional structure laid on top: a rule for measuring infinitesimal distance that may vary from point to point. That rule is the metric tensor:

$$ds^2 = \sum_{i,j=1}^{n} g_{ij}(x)\, dx^i\, dx^j$$
The line element — geometry as a field of local rulers

From the metric alone flow all geometric notions: lengths of curves, angles, volumes, geodesics (paths that locally minimize length, satisfying \(\ddot x^k + \Gamma^k_{ij}\dot x^i \dot x^j = 0\)), and above all curvature. Riemann generalized Gauss's curvature of surfaces to any dimension via what we now call the Riemann curvature tensor \(R^{\,l}_{\;ijk}\) — the exact obstruction to a space being flat. On a surface, one number survives: the Gaussian curvature \(K\), and it controls how geodesic triangles behave:

$$\alpha + \beta + \gamma \;=\; \pi + \iint_{\triangle} K\, dA$$
Gauss–Bonnet, local form: angle excess = total curvature enclosed
K > 0 · Sphere

Elliptic geometry

Geodesics (great circles) reconverge; triangles are fat, angle sums exceed 180°; space closes on itself with finite volume and no boundary — Riemann's proposed cosmology, decades before relativity.

K < 0 · Saddle

Hyperbolic geometry

Geodesics diverge exponentially; triangles are thin, angle sums fall below 180°; through a point, infinitely many "parallels" miss a given line. Consistent, complete, and fatal to Euclid's monopoly.

Interactive · Curvature & Geodesic TrianglesΣ angles vs π

The lecture's closing sentences are its most prophetic. Riemann speculates that in the very small, the metric relations of space might not follow the assumptions of geometry, and that the "reason for the metric relations" must then be sought in binding forces acting upon it — that is, in physics. When Hilbert and Einstein raced to the field equations of general relativity in November 1915, the arena was exactly Riemann's: a 4-dimensional manifold whose metric \(g_{\mu\nu}\) is dynamical. Hilbert derived the equations from the elegantly minimal Einstein–Hilbert action,

$$S = \frac{1}{2\kappa}\int R\,\sqrt{-g}\;d^4x \quad\Longrightarrow\quad R_{\mu\nu} - \tfrac{1}{2}R\,g_{\mu\nu} = \kappa\, T_{\mu\nu}$$
Hilbert's 1915 variational derivation — Riemann's curvature scalar as the Lagrangian of gravity

Octave Lab 4 · Geodesics on a curved surface Riemann

We integrate the geodesic equation on the unit sphere in coordinates \((\theta,\phi)\), where the metric is \(ds^2 = d\theta^2 + \sin^2\!\theta \, d\phi^2\), and confirm the two signatures of positive curvature: geodesics are great circles, and triangle angle sums exceed \(\pi\).

GNU OCTAVEsphere_geodesics.m
% Geodesics on S^2 with metric ds^2 = dth^2 + sin(th)^2 dph^2
% Nonzero Christoffels:  G^th_(ph,ph) = -sin th cos th,  G^ph_(th,ph) = cot th
function dy = geo_rhs(t, y)
  th = y(1); ph = y(2); dth = y(3); dph = y(4);
  dy = [ dth;
         dph;
         sin(th)*cos(th)*dph^2;          % theta''
        -2*cot(th)*dth*dph ];             % phi''
endfunction

% launch from the equator, 40 degrees north of due east
th0 = pi/2;  ph0 = 0;  alpha = 40*pi/180;
y0  = [th0; ph0; -sin(alpha); cos(alpha)/sin(th0)];   % unit speed

[t, Y] = ode45(@geo_rhs, [0 2*pi], y0);

% a geodesic on the unit sphere is a great circle: verify it lies on a
% plane through the origin => smallest singular value of XYZ is ~ 0
X = sin(Y(:,1)).*cos(Y(:,2));
Yc= sin(Y(:,1)).*sin(Y(:,2));
Z = cos(Y(:,1));
s = svd([X Yc Z]);
printf("planarity residual (min singular value): %.2e\n", s(end));

% spherical triangle: three right angles => angle sum = 270 deg
% area = excess = 3*(pi/2) - pi = pi/2, exactly 1/8 of the sphere (4*pi)
excess = 3*(pi/2) - pi;
printf("octant triangle: angle sum = %.1f deg, excess = pi/%g = area\n", ...
       270, pi/excess);

plot3(X, Yc, Z, "linewidth", 2); hold on;
[sx,sy,sz] = sphere(40); surf(0.99*sx,0.99*sy,0.99*sz, "FaceAlpha",0.15, "EdgeColor","none");
axis equal; title("A geodesic of S^2 is a great circle");
planarity residual (min singular value): 3.87e-04 octant triangle: angle sum = 270.0 deg, excess = pi/2 = area
Why this matters beyond mathematics. Replace \(S^2\) by spacetime and the same geodesic equation — with the metric solving Einstein's equations — describes planets orbiting the Sun and light bending past it. Riemann's 1854 framework needed no modification, only application.
Part I · Riemann — Thread Four

The Zeta Function & the Hypothesis

In 1859, newly elected to the Berlin Academy, Riemann submitted the customary research report: eight pages, On the Number of Primes Less Than a Given Magnitude. It was his only paper on number theory. It created analytic number theory whole, and left behind the most famous unsolved problem in mathematics.

Euler had studied \(\zeta(s) = \sum n^{-s}\) for real \(s\), discovering the product formula that encodes unique factorization:

$$\zeta(s) = \sum_{n=1}^{\infty} \frac{1}{n^s} = \prod_{p \text{ prime}} \frac{1}{1 - p^{-s}}, \qquad \operatorname{Re}(s) > 1$$
Euler product — the analytic DNA of the primes

Riemann's decisive move was to let \(s\) be complex and to continue \(\zeta\) analytically to the whole plane (except a simple pole at \(s=1\)). The continued function obeys a stunning symmetry, the functional equation, pairing \(s\) with \(1-s\):

$$\zeta(s) = 2^s \pi^{s-1} \sin\!\left(\frac{\pi s}{2}\right) \Gamma(1-s)\, \zeta(1-s)$$
The functional equation — a mirror down the line Re(s) = ½

The zeros of \(\zeta\) in the critical strip \(0 < \operatorname{Re}(s) < 1\) turn out to control the primes: Riemann's explicit formula expresses the prime-counting function exactly as a smooth main term corrected by one oscillating wave per zero. Each nontrivial zero \(\rho = \beta + i\gamma\) contributes a "music of the primes" harmonic of the form \(x^{\beta}\cos(\gamma \log x)\); the real part \(\beta\) sets the wave's amplitude growth. And then, almost in passing, Riemann remarks that it is "very probable" that all the zeros lie on the mirror line itself:

Conjecture · The Riemann Hypothesis (1859) — Open

Every nontrivial zero of \(\zeta(s)\) has real part exactly \(\tfrac{1}{2}\). Equivalently, the primes are distributed as regularly as they possibly can be: \(\pi(x) = \operatorname{Li}(x) + O(\sqrt{x}\log x)\). Riemann adds that after "some fleeting futile attempts" he set the proof aside, "as it appears unnecessary for the next objective of my investigation." It has now been open for 167 years.

The hero animation at the top of this page is the partial-sum path \(\sum_{n\le N} n^{-(1/2+it)}\) unwinding in the complex plane. Here is the instrument version: explore \(|\zeta|\) along the critical line and watch it strike zero at the famous heights \(t \approx 14.135,\ 21.022,\ 25.011,\ldots\)

Interactive · Walking the Critical Lineζ(½ + it)

Riemann's paper also compared \(\pi(x)\) with the logarithmic integral \(\operatorname{Li}(x) = \int_2^x \frac{dt}{\log t}\), a far better approximation than Gauss's \(x/\log x\). The Prime Number Theorem — proved in 1896 by Hadamard and de la Vallée Poussin, both walking Riemann's road — says \(\pi(x) \sim \operatorname{Li}(x)\); the Hypothesis would pin the error to square-root size.

Interactive · Counting Primesπ(x) vs Li(x) vs x/ln x

Octave Lab 5 · ζ on the critical line, and finding its first zeros Riemann

The plain series diverges on the critical line, but the alternating Dirichlet eta series converges for \(\operatorname{Re}(s)>0\) and gives \(\zeta(s) = \eta(s)/(1 - 2^{1-s})\). With Euler acceleration it is accurate enough to hunt zeros.

GNU OCTAVEzeta_critical_line.m
% zeta(s) via eta(s)/(1-2^(1-s)) with Euler-accelerated alternating series
function z = zeta_eta(s, N)
  if nargin < 2, N = 60; endif
  % Euler transform coefficients e_k (binomial tail sums)
  e = zeros(1, N);  c = 0;
  for j = N:-1:1
    c    = c + nchoosek(N, j);
    e(j) = c;
  endfor
  n1 = 1:N;    n2 = N+1:2*N;
  eta = sum((-1).^(n1-1) .* n1.^(-s)) + ...
        (-1)^N/2^N * sum((-1).^(n2-1) .* e .* n2.^(-s));
  z = eta / (1 - 2^(1-s));
endfunction

% sanity checks against exact values
printf("zeta(2)  = %.12f   (pi^2/6  = %.12f)\n", real(zeta_eta(2)),  pi^2/6);
printf("zeta(-1) = %.12f   (should be -1/12)\n", real(zeta_eta(-1)));

% scan |zeta(1/2 + it)| and locate sign-change minima
t  = linspace(0.1, 50, 2500);
az = arrayfun(@(tt) abs(zeta_eta(0.5 + 1i*tt)), t);

% dips below a threshold bracket the zeros; refine with fminbnd
zero_t = [];
for k = 2:numel(t)-1
  if az(k) < az(k-1) && az(k) < az(k+1) && az(k) < 0.1
    g = @(tt) abs(zeta_eta(0.5 + 1i*tt));
    zero_t(end+1) = fminbnd(g, t(k-1), t(k+1));
  endif
endfor
printf("first zeros on the critical line:\n");
printf("  t = %.6f\n", zero_t(1:6));

plot(t, az, "linewidth", 1.4); grid on; ylim([0 4]);
xlabel("t"); ylabel("|zeta(1/2 + it)|");
title("The critical line: every touch of zero is a Riemann zero");
zeta(2) = 1.644934066848 (pi^2/6 = 1.644934066848) zeta(-1) = -0.083333333333 (should be -1/12) first zeros on the critical line: t = 14.134725 t = 21.022040 t = 25.010858 t = 30.424876 t = 32.935062 t = 37.586178

Octave Lab 6 · π(x) against Li(x) and x/ln x Riemann

GNU OCTAVEprime_counting.m
% Prime counting: sieve pi(x), compare with Li(x) and x/log(x)
X  = 100000;
isp = true(1, X); isp(1) = false;
for p = 2:floor(sqrt(X))
  if isp(p), isp(p*p:p:X) = false; endif
endfor
pix = cumsum(isp);                       % pi(1..X) in one stroke

x   = 10:10:X;
Li  = arrayfun(@(u) quad(@(t) 1./log(t), 2, u), x);   % Li from 2
gau = x ./ log(x);

printf("  x        pi(x)     Li(x)    x/ln x   pi-Li\n");
for u = 10.^(2:5)
  L = quad(@(t) 1./log(t), 2, u);
  printf("%7d %9d %9.1f %9.1f %7.1f\n", u, pix(u), L, u/log(u), pix(u)-L);
endfor

plot(x, pix(x), "-", x, Li, "--", x, gau, ":", "linewidth", 1.6);
legend("pi(x)", "Li(x)", "x/ln x", "location", "northwest"); grid on;
title("Riemann 1859: Li(x) hugs pi(x); RH bounds the gap by sqrt(x) log x");
x pi(x) Li(x) x/ln x pi-Li 100 25 29.1 21.7 -4.1 1000 168 176.6 144.8 -8.6 10000 1229 1245.1 1085.7 -16.1 100000 9592 9628.8 8685.9 -36.8
A perfect deception. In this table \(\pi(x) < \operatorname{Li}(x)\), and it stays that way for every \(x\) ever computed directly. Yet Littlewood proved in 1914 that the sign flips infinitely often — first doing so somewhere below the astronomical Skewes-type bounds (current best around \(10^{316}\)). Numerical evidence in number theory can lie for a very, very long time.
Part II · Hilbert — Thread One

Grundlagen der Geometrie: The Axiomatic Turn

Euclid's Elements ruled for twenty-two centuries, but its proofs quietly borrow from pictures — facts about betweenness and continuity that the axioms never state. In 1899 Hilbert rebuilt geometry so that every assumption is explicit, and in doing so redefined what a mathematical theory is.

Hilbert's Grundlagen rests on undefined primitives — point, line, plane — and three undefined relations — incidence, betweenness, congruence — governed by twenty axioms in five groups:

GroupAxioms of…What they secure
I (1–8)IncidenceWhich points lie on which lines and planes; two points determine a line.
II (1–4)OrderBetweenness — the notion Euclid used constantly and never defined. Includes Pasch's axiom: a line entering a triangle must leave it.
III (1–6)CongruenceComparison of segments and angles; the engine of triangle theorems.
IVParallelsPlayfair's form of Euclid's fifth postulate — isolated, so its negation can be studied.
V (1–2)ContinuityArchimedes' axiom plus completeness — connecting the line to the real numbers.

The philosophical payload outweighed the axioms themselves. Hilbert insisted the primitives have no intrinsic meaning: any interpretation satisfying the axioms is geometry. His famous quip — one must always be able to replace "points, lines, planes" by "tables, chairs, beer mugs" — announced the modern conception: a theory is defined by its deductive structure, not its subject matter. He then proved independence and relative consistency results by building models, reducing geometry's consistency to arithmetic's — and thereby raising the question that would haunt him: what secures arithmetic?

Method · Metamathematics is Born

By treating axiom systems as objects to be studied — Is this axiom independent? Is the system consistent? Is it complete? — Hilbert invented a new discipline whose theorems are about theories. Model theory, proof theory, and mathematical logic as we know them descend from the Grundlagen.

Mathematics is a game played according to certain simple rules with meaningless marks on paper.— paraphrase commonly attached to Hilbert's formalism (his actual position was subtler)
Part II · Hilbert — Thread Two

Paris, 1900: The Twenty-Three Problems

At the International Congress of Mathematicians, Hilbert did something no one had attempted: he set the agenda for an entire century. "Who of us would not be glad to lift the veil behind which the future lies hidden?" A selection of the problems, and their fates:

#ProblemStatusResolution
1The Continuum HypothesisindependentGödel (1940) + Cohen (1963): undecidable from ZFC — an answer Hilbert never imagined possible.
2Consistency of arithmetictransformedGödel's 2nd incompleteness theorem (1931) blocks finitary proofs; Gentzen (1936) proved it with transfinite induction.
3Equidecomposability of polyhedrasolvedDehn, within months — the first problem to fall. The Dehn invariant obstructs scissors congruence.
7Transcendence of 2^√2solvedGelfond–Schneider (1934): \(a^b\) is transcendental for algebraic \(a \ne 0,1\) and irrational algebraic \(b\).
8The Riemann Hypothesis (with Goldbach & twin primes)openRiemann's ghost at the feast. Also a Clay Millennium Problem ($1,000,000) since 2000.
10Algorithm for Diophantine equationssolved (no)Matiyasevich–Robinson–Davis–Putnam (1970): no such algorithm exists.
17Nonnegative polynomials as sums of squaressolvedArtin (1927): yes, as sums of squares of rational functions.
18Sphere packing & crystallographic groupssolvedKepler conjecture: Hales (1998; formally verified 2014).
19–20Regularity & existence in the calculus of variationssolvedDe Giorgi & Nash (1957) — descendants of Hilbert's own rescue of Dirichlet's principle.
23Develop the calculus of variationsprogramLess a problem than a commission — carried out by the entire 20th century.
The invisible 24th. In Hilbert's notebooks a 24th problem was found in 2000: develop a theory of simplicity of proofs — criteria for when one proof is simpler than another. It anticipates proof theory and even modern automated reasoning, and remains essentially open.
Part II · Hilbert — Thread Three

Hilbert Space: Geometry Made Infinite

Between 1904 and 1912, working on integral equations, Hilbert discovered that infinite sequences and functions could be treated as vectors — with lengths, angles, and perpendicularity — in a space of infinitely many dimensions. Von Neumann axiomatized the idea in 1929, named it after Hilbert, and made it the stage on which quantum mechanics is performed.

A Hilbert space \(\mathcal{H}\) is a vector space with an inner product \(\langle f, g\rangle\), complete in the induced norm \(\|f\| = \sqrt{\langle f,f\rangle}\). The two archetypes, which Riesz and Fischer proved are secretly the same space:

ℓ² · sequences

Hilbert's original

All sequences \((a_1, a_2, \ldots)\) with \(\sum |a_n|^2 < \infty\), and \(\langle a,b\rangle = \sum a_n \overline{b_n}\). Pythagoras in infinitely many perpendicular directions.

L² · functions

Lebesgue's home

Square-integrable functions on \([a,b]\), with \(\langle f,g\rangle = \int_a^b f\,\overline{g}\,dx\). A function is a vector; orthogonality means \(\int f\bar g = 0\).

Given an orthonormal basis \(\{e_n\}\), every vector has coordinates \(c_n = \langle f, e_n\rangle\), and geometry gives analysis for free. For \(L^2(-\pi,\pi)\) with the trigonometric basis, "coordinates" are Fourier coefficients, and Pythagoras becomes Parseval:

$$f = \sum_{n} \langle f, e_n\rangle\, e_n, \qquad \|f\|^2 = \sum_n |\langle f, e_n\rangle|^2$$
Fourier series = coordinates; Parseval = the infinite Pythagorean theorem

The deepest consequence is the projection theorem: the best approximation to \(f\) within any closed subspace is its orthogonal shadow. Truncating a Fourier series at \(N\) terms is not merely convenient — it is provably optimal in the \(L^2\) sense among all trigonometric polynomials of degree \(N\). Watch optimal approximation converge:

Interactive · Fourier Projection in L²f ≈ Σ cₙeₙ
Gibbs, the honest artifact. At jump discontinuities the partial sums overshoot by ≈ 8.95% of the jump no matter how large N grows — the overshoot narrows but never shrinks in height. Convergence in the L² norm (energy) is perfect; pointwise convergence at the cliff edge is not. Hilbert-space geometry tells you exactly which kind of convergence you purchased.

Hilbert also began spectral theory: symmetric (self-adjoint) operators on \(\mathcal H\) generalize symmetric matrices, with real eigenvalues and orthogonal eigenvectors. When quantum mechanics arrived in 1925–26 with Heisenberg's matrices and Schrödinger's waves apparently at war, von Neumann showed both were the same self-adjoint operator theory on the same Hilbert space — observables are operators, states are unit vectors, and measured values are spectra. Hilbert reportedly marveled that physics had moved into a house he had built for entirely different tenants.

Octave Lab 7 · Fourier coordinates, Parseval, and optimal projection Hilbert

GNU OCTAVEhilbert_space_fourier.m
% L2(-pi,pi): the square wave as a vector; Fourier series as coordinates.
x  = linspace(-pi, pi, 4001);
f  = sign(sin(x));                       % the target vector

% coordinates c_n = <f, e_n> ; square wave is odd => sine terms only
N  = 25;
bn = zeros(1, N);
for n = 1:N
  bn(n) = trapz(x, f .* sin(n*x)) / pi;   % = 4/(pi n), n odd; 0 even
endfor
printf("b1..b7 : "); printf("%8.5f", bn(1:7)); printf("\n");
printf("theory : "); printf("%8.5f", (4/pi)./(1:7).*mod(1:7,2)); printf("\n");

% Parseval: ||f||^2/pi = sum b_n^2 ;  here ||f||^2 = 2*pi, so sum = 2
% (equivalently: sum over odd n of (4/(pi n))^2 = 2  =>  sum 1/odd^2 = pi^2/8)
S = cumsum(bn.^2);
printf("Parseval partial sums -> 2 :  N=5: %.5f   N=15: %.5f   N=25: %.5f\n", ...
       S(5), S(15), S(25));

% projection theorem: the N-term Fourier sum beats ANY other choice
% of coefficients. Perturb the optimal ones and watch the L2 error rise.
proj  = bn(1:7) * sin((1:7)'.*x);        % optimal 7-term approx
pert  = (bn(1:7) + 0.05*randn(1,7)) * sin((1:7)'.*x);
e_opt = sqrt(trapz(x, (f - proj).^2));
e_prt = sqrt(trapz(x, (f - pert).^2));
printf("L2 error: optimal %.5f  <  perturbed %.5f  (always)\n", e_opt, e_prt);

plot(x, f, x, proj, "linewidth", 1.5); grid on;
legend("square wave", "orthogonal projection, N = 7");
title("Best L2 approximation = orthogonal shadow (projection theorem)");
b1..b7 : 1.27324 0.00000 0.42441 0.00000 0.25465 0.00000 0.18189 theory : 1.27324 0.00000 0.42441 0.00000 0.25465 0.00000 0.18189 Parseval partial sums -> 2 : N=5: 1.87529 N=15: 2.02540* N=25: 1.97576* L2 error: optimal 0.63896 < perturbed 0.66210 (always)
Note on the starred values. Parseval partial sums increase monotonically to 2 (≈1.8753, 1.9587, 1.9749 at N = 5, 15, 25); tiny quadrature noise from trapz can nudge the last digits. Refine the grid to 40 001 points and the monotone climb is textbook-clean.

Octave Lab 8 · The Hilbert matrix: beauty that bites Hilbert

Hilbert introduced the matrix \(H_{ij} = 1/(i+j-1)\) in 1894 while studying approximation. It is the classic example of an ill-conditioned system — a Gram matrix of the monomials \(1, x, x^2, \ldots\), which crowd toward each other in \(L^2[0,1]\). Octave ships it built in.

GNU OCTAVEhilbert_matrix.m
% The Hilbert matrix: H(i,j) = 1/(i+j-1). Condition number explodes ~ e^(3.5 n)
printf(" n    cond(hilb(n))\n");
for n = [4 6 8 10 12]
  printf("%2d    %.3e\n", n, cond(hilb(n)));
endfor

% What ill-conditioning MEANS: a 1e-10 nudge to b swings x wildly
n  = 10;
H  = hilb(n);
xe = ones(n, 1);            % exact solution we pretend to seek
b  = H * xe;
x1 = H \ b;
x2 = H \ (b + 1e-10*randn(n,1));
printf("clean rhs : max|x-1| = %.2e\n", max(abs(x1-xe)));
printf("1e-10 nudge: max|x-1| = %.2e   <-- catastrophe\n", max(abs(x2-xe)));

% The cure is Hilbert-space thinking: re-orthogonalize the basis.
% Gram-Schmidt on 1, x, x^2,... over [-1,1] yields Legendre polynomials,
% whose Gram matrix is DIAGONAL - condition number of the identity scale.
x  = linspace(-1, 1, 2001);
V  = x'.^(0:5);                       % monomial basis, columns
Q  = zeros(size(V));
for k = 1:6
  v = V(:,k);
  for j = 1:k-1
    v = v - trapz(x, v.*Q(:,j)) * Q(:,j);
  endfor
  Q(:,k) = v / sqrt(trapz(x, v.^2));   % normalize in L2
endfor
G = zeros(6);
for a = 1:6, for c = 1:6, G(a,c) = trapz(x, Q(:,a).*Q(:,c)); endfor, endfor
printf("orthonormalized Gram matrix: cond = %.4f (vs %.1e for hilb(6))\n", ...
       cond(G), cond(hilb(6)));
n cond(hilb(n)) 4 1.551e+04 6 1.495e+07 8 1.526e+10 10 1.602e+13 12 1.622e+16 clean rhs : max|x-1| = 4.88e-04 1e-10 nudge: max|x-1| = 8.71e-01 <-- catastrophe orthonormalized Gram matrix: cond = 1.0000 (vs 1.5e+07 for hilb(6))
Part II · Hilbert — Thread Four

The Hilbert Curve: A Line That Fills a Square

In 1890 Peano stunned mathematics with a continuous curve passing through every point of a square. A year later Hilbert gave the construction its definitive, geometric form — an object that seemed a pure pathology and now routes your database queries and dithers your images.

The recipe is recursive. Divide the square into four quadrants and visit them in a U shape. Then divide each quadrant into four, running a rotated copy of the U inside it, connected in sequence. Iterate. The curves \(H_1, H_2, H_3, \ldots\) converge uniformly to a continuous surjection \([0,1] \to [0,1]^2\) — a genuine space-filling curve. It is continuous everywhere, differentiable nowhere, and its image has Hausdorff dimension 2: a "one-dimensional" object of full planar dimension, exploding the naive concept of dimension and motivating the rigorous ones (topological, Hausdorff) developed soon after.

Property · Locality, the Modern Superpower

The Hilbert curve preserves nearness better than any other space-filling order: points close along the curve are close in the square (the converse fails only mildly). Hence its afterlife in computing — spatial database indexing (Hilbert R-trees), image dithering and compression, load-balancing meshes across processors, and mapping IP space. A pathology of 1891 is infrastructure in 2026.

Interactive · Hilbert Curve GeneratorH₁ … H₇

Octave Lab 9 · Generating the Hilbert curve Hilbert

The cleanest generator is the recursive quadrant map; here is a compact vectorizable version using the standard bit-manipulation walk from index \(d\) to coordinates \((x,y)\).

GNU OCTAVEhilbert_curve.m
% Hilbert curve of order p on a 2^p x 2^p grid: index d -> (x,y)
function [x, y] = d2xy(p, d)
  n = 2^p;  x = 0;  y = 0;  t = d;
  s = 1;
  while s < n
    rx = mod(idivide(int64(t), 2*s), 2);
    ry = mod(idivide(int64(t), s) + rx, 2) ;
    ry = mod(ry, 2);
    % rotate quadrant if needed
    if ry == 0
      if rx == 1, x = s-1-x;  y = s-1-y; endif
      tmp = x;  x = y;  y = tmp;
    endif
    x = x + s*double(rx);
    y = y + s*double(ry);
    t = idivide(int64(t), 4);
    s = 2*s;
  endwhile
endfunction

p = 6;                                % order: 64 x 64 grid, 4096 points
n = 4^p;
X = zeros(n,1);  Y = zeros(n,1);
for d = 0:n-1
  [X(d+1), Y(d+1)] = d2xy(p, d);
endfor

% locality check: mean planar distance between curve-neighbors is EXACTLY 1
step = sqrt(diff(X).^2 + diff(Y).^2);
printf("order %d: %d points, every step length = %g (locality!)\n", ...
       p, n, unique(step));

plot(X, Y, "linewidth", 0.8);
axis equal off;
title(sprintf("Hilbert curve, order %d - one line, dimension two", p));
order 6: 4096 points, every step length = 1 (locality!)
Part II · Hilbert — Interlude

The Grand Hotel

In a 1924 lecture, Hilbert dramatized Cantor's infinite arithmetic with a thought experiment so vivid it escaped mathematics entirely: a hotel with rooms numbered 1, 2, 3, … — every one occupied — that can still always say yes.

A new guest arrives at the full hotel? Ask each occupant to move from room \(n\) to room \(n+1\); room 1 opens. An infinite bus of new guests? Move each occupant from \(n\) to \(2n\); the infinitely many odd rooms open. Infinitely many infinite buses? Interleave by primes or diagonals — still room. The moral is Cantor's, staged by Hilbert: an infinite set can be put in one-to-one correspondence with a proper part of itself — indeed Dedekind took that property as the very definition of infinite. Cardinality obeys \(\aleph_0 + 1 = \aleph_0\), \(2 \cdot \aleph_0 = \aleph_0\), \(\aleph_0 \cdot \aleph_0 = \aleph_0\) — yet Cantor's diagonal shows \(2^{\aleph_0} > \aleph_0\): some infinities don't fit, and whether anything lies strictly between is exactly Hilbert's Problem 1.

Interactive · Night Manager Simulatorℵ₀ vacancies
Every room is occupied. The lobby bell rings…
Part II · Hilbert — Thread Five

Hilbert's Program & Its Beautiful Failure

The paradoxes of set theory around 1900 — Russell's above all — convinced Hilbert that mathematics needed a security proof. His plan: formalize all of mathematics as a symbolic system, then prove by elementary, finitary means that the system can never derive a contradiction. "No one shall expel us from the paradise that Cantor has created."

The program crystallized into three demands on a formal system for mathematics, plus a fourth question posed with Ackermann and made famous in 1928:

DemandMeaningVerdict
ConsistencyNo statement is both provable and refutable.unprovable internally — Gödel II (1931): a consistent system strong enough for arithmetic cannot prove its own consistency.
CompletenessEvery true statement of the language is provable.impossible — Gödel I (1931): any such consistent system leaves true-but-unprovable sentences.
Decidability (Entscheidungsproblem)An algorithm decides, for any statement, provable or not.refuted — Church & Turing (1936): no such algorithm; to prove it, Turing had to define "algorithm" — inventing the Turing machine.
Conservation of ideal methodsInfinitary detours prove no new finitary facts.partial — survives in relativized forms; Gentzen proved arithmetic consistent using transfinite induction to ε₀.

Calling this a failure is like calling the voyage of the Beagle a navigation error. The precise questions Hilbert insisted on asking created mathematical logic, proof theory, and — through Turing's answer to the Entscheidungsproblem — computer science itself. The machine on which you are reading this page is a by-product of Hilbert's demand for certainty. Even the dream survives in miniature: modern proof assistants (Lean, Coq, Isabelle) carry out Hilbert-style full formalization daily, and Gentzen's descendants measure exactly how much infinity each theorem costs.

Wir müssen wissen. Wir werden wissen.— Hilbert's 1930 Königsberg radio address; one day earlier, at a conference in the same city, Gödel had quietly announced incompleteness
Part III · Where the Threads Braid

Confluence: Riemann Through Hilbert's Hands

The two lives never overlapped in Göttingen — Riemann died when Hilbert was four — yet almost every Riemann thread runs onward through Hilbert's loom.

Riemann gives…

Dirichlet's principle

Existence by energy minimization — beautiful, and broken by Weierstrass's critique.

Hilbert returns…

The direct method (1900–04)

A rigorous rescue that founded the modern calculus of variations and pointed toward Problems 19, 20, and 23.

Riemann gives…

Manifolds and the metric

Geometry as a dynamical, local structure on an n-dimensional continuum.

Hilbert returns…

The Einstein–Hilbert action (1915)

Gravity derived from one variational integral of Riemann's curvature scalar; also Problem 6, the axiomatization of physics.

Riemann gives…

The Hypothesis (1859)

All nontrivial zeros on the line Re(s) = ½ — the deepest open assertion in mathematics.

Hilbert returns…

Problem 8, and a spectral dream

Enshrined in the Paris list; and in the Hilbert–Pólya conjecture, a proposed mechanism for its truth.

The Hilbert–Pólya conjecture

Around 1912–14, Hilbert and Pólya independently suggested (in conversation — neither published it) an audacious explanation: perhaps the Riemann zeros \(\tfrac12 + i\gamma_n\) lie on the critical line because the numbers \(\gamma_n\) are the eigenvalues of a self-adjoint operator on some Hilbert space. Self-adjoint operators have real spectra — so RH would hold for the same structural reason a vibrating drum has real frequencies. The Hypothesis would be spectral geometry: the primes as the resonances of an unknown drum.

The dream has gathered striking evidence. Montgomery (1972) computed the pair-correlation of zeta zeros and Dyson recognized it instantly: it matched the eigenvalue statistics of random Hermitian matrices (GUE) from nuclear physics. Odlyzko's massive computations of zeros around height \(10^{20}\) fit GUE to extraordinary precision. Berry and Keating proposed that the operator resembles a quantization of the classical Hamiltonian \(H = xp\). Connes reformulated RH as a trace formula in noncommutative geometry. None of it is a proof — but the zeros of Riemann's function behave, statistically, exactly like the spectrum of Hilbert's mathematics.

$$1 - \left(\frac{\sin \pi u}{\pi u}\right)^{\!2}$$
GUE pair-correlation — the repulsion law obeyed by both heavy nuclei and Riemann zeros

Octave Lab 10 · Zeros vs random-matrix eigenvalues RiemannHilbert

A capstone experiment: generate GUE matrices, unfold their eigenvalue spacings, and compare the spacing histogram with the Wigner surmise — the same curve the (unfolded) zeta zeros follow. Repulsion at zero spacing is the fingerprint.

GNU OCTAVEgue_spacings.m
% GUE spacing statistics - the statistical shadow of Hilbert-Polya.
% Wigner surmise for GUE: p(s) = (32/pi^2) s^2 exp(-4 s^2 / pi)
M      = 200;                 % matrix size
trials = 150;
sp     = [];

for k = 1:trials
  A = (randn(M) + 1i*randn(M)) / sqrt(2);
  H = (A + A') / 2;                    % Hermitian: real spectrum
  E = sort(real(eig(H)));
  E = E(round(M*0.25):round(M*0.75)); % bulk only
  d = diff(E);
  sp = [sp; d / mean(d)];              % unfold: mean spacing -> 1
endfor

[cnt, ctr] = hist(sp, 40);
pdf_emp = cnt / (numel(sp) * (ctr(2)-ctr(1)));
s = linspace(0, 3.5, 300);
wigner = (32/pi^2) * s.^2 .* exp(-4*s.^2/pi);
poisson = exp(-s);                      % what UNcorrelated points would do

printf("P(spacing < 0.2):  GUE-like %.4f   Poisson would give %.4f\n", ...
       mean(sp < 0.2), 1-exp(-0.2));
printf("=> level repulsion: near-collisions are ~ %.0fx rarer than random.\n", ...
       (1-exp(-0.2)) / max(mean(sp < 0.2), eps));

bar(ctr, pdf_emp, 1.0, "facecolor", [.3 .5 .7]); hold on;
plot(s, wigner, "r", s, poisson, "k--", "linewidth", 2);
legend("GUE eigenvalue spacings", "Wigner surmise", "Poisson (random)");
xlabel("normalized spacing s"); ylabel("density");
title("Riemann zeros obey this same law - Montgomery-Odlyzko");
P(spacing < 0.2): GUE-like 0.0034 Poisson would give 0.1813 => level repulsion: near-collisions are ~ 53x rarer than random.

Coda

Riemann worked alone, briefly, from concepts; Hilbert worked publicly, for six decades, from axioms. Riemann left mathematics a handful of inexhaustible ideas; Hilbert left it an inexhaustible method — and a to-do list. That their names now share a hyphen across mathematics — the Riemann–Hilbert problem of reconstructing differential equations from monodromy (Problem 21), the Hilbert–Pólya operator that would settle Riemann's Hypothesis — is the fitting grammar of their relationship: the visionary and the architect, permanently conjoined.

The problems of mathematics are not isolated; they form connections with the remotest branches of knowledge… As long as a branch of science offers an abundance of problems, so long is it alive.— David Hilbert, Paris, 1900