Analytic Number Theory · Wessen Getachew · 2026
The Goldbach Diagonal
Strip Arithmetic I
c : r + M = g · d : r + M = E − g · E = 2(G+1)
E = 244 = 61 + 183
· r(E) = — pairs
· drag the gap slider ↓
Claim
On the G×G lattice, strip c is fully coprime exactly when g is prime, and strip d is fully coprime whenever s = E − g is prime. Above the threshold g > √E the second implication reverses as well — so both sum strips fully lit becomes exactly E = g + s is a Goldbach partition.
On the G×G lattice, strip c is fully coprime exactly when g is prime, and strip d is fully coprime whenever s = E − g is prime. Above the threshold g > √E the second implication reverses as well — so both sum strips fully lit becomes exactly E = g + s is a Goldbach partition.
Show work▶
Both directions reduce to a single gcd identity: along the sum strip r + M = g, gcd(r, M) = gcd(r, g − r) = gcd(r, g).
So strip c samples one full period of gcd(·, g) minus the point r = g, holding exactly φ(g) coprime cells; it is full
iff φ(g) = g − 1, i.e. iff g is prime. Strip d does the same against s, but only sees a window of g − 1 consecutive
residues of the longer period s — which is why it can come up full on a composite s below the threshold, and why the
leak closes above it. Worked through cell by cell in
the partition drawer ↓, and in full in
The claim ↓.
▸Reading the lattice
On a square lattice of side G, every cell (r, M) is coloured by whether gcd(r, M) = 1.
Fixing a value g slices out four straight lines through that lattice — two of constant difference
(a, b) and two of constant sum (c, d) — and asks whether each line is entirely
coprime, cell to cell. Sliding g sweeps every way the even number E splits into two parts,
g and s = E − g; the lattice itself proves when that split is a Goldbach pair — both parts prime.
Tap any term to light it up on the lattice — works in Grid, Ring and Cayley. Tap again (or press Esc) to clear. The glyph shows where the line sits in the square and which way it runs.
r1…194
the lattice's horizontal coordinate. One of the two numbers gcd() is taken of.
M1…121
the lattice's vertical coordinate, playing the role of "modulus" against r.
G121
the lattice's side length. Sets how far g can range and how large E gets.
g61
the gap: the constant sum or difference each of the four strips is built around.
s183
the partner: s = E − g, the other addend in the even split E = g + s.
E244
the even number being split: E = 2(G+1), fixed once G is chosen.
aM − r = g
difference strip, running down-right below the main diagonal.
br − M = g
difference strip; the transpose of a, so they agree cell for cell.
cr + M = g
sum strip, running up-right near the origin corner — fully coprime exactly when g is prime.
dr + M = E − g
sum strip, running up-right near the far corner — fully coprime whenever s is prime, exactly so once g > √E.
The lattice
0°
a M−r=g↘
b r−M=g↘
c r+M=g↗
d r+M=E−g↗
Figure 1. The G×G coprimality lattice with the four strips of gap g overlaid. Hover a cell (Grid view) for its
gcd reduction; click to jump the gap to the sum strip through that cell.
▸Instrument
Lattice
Grid G
Next N
Play +N is local: it anchors on whatever G you are on, steps up one grid at a time to G + N, then loops back to the anchor. Window: 194 → 204.
Gap g
Even E
390 = g + s
Sweep
Sliding g walks every additive partition E = g + s. The two sum strips carry those parts.
▸Magnifier
Zoom
Custom
× 1–500
Park
Press and hold a point on the lattice, drag to pan the lens, release to select there. With Pick on (the default) the release keeps only the strips running through that one point — every other pair on the plate is dropped — which is the whole reason to magnify: you hunted for one crossing, so you get that crossing alone. A plain click, by contrast, adds to what is already selected. With pick off, the release does the old thing and jumps the gap there.
Zoom is now the magnification you actually get, and the range runs to 500× because that is what a four-figure G needs: at G = 4096 a single cell is under a third of a canvas pixel, so 10× still shows you nothing. The presets go to 100× and the Custom box takes any value from 1 to 500. It used to size the window against the plate rather than the lens, so 3× was really 1.5× and 2× was a reduction — most of the old softness was the lens barely enlarging anything. The lens also takes the shape of the plate it is over — a square window on Grid, a disk on Ring and Cayley — so a square lattice no longer loses its corner cells to a round frame. Labels appear whenever the magnified cell clears about 7 px, so they arrive at roughly 4× at G = 194, 20× at G = 1024 and 100× at G = 4096 — the same readable type at every scale, just further in. In Grid the lens no longer photographs the plate either: cells, strips and labels are redrawn at the lens's own resolution, so type that is two pixels tall on the plate is typeset at full size here instead of being blown up.
auto keeps the lens above your finger and slides it sideways when it runs out of headroom — continuously, so it never jumps across the pointer the way it used to at mid-plate. Pin it to a corner if you would rather it never moved at all.
The crosshair marks the pointer; the glowing box (or ring, in Ring and Cayley) marks the lattice point that pointer actually resolves to, which at any real magnification is a different thing — the readout sits just outside the rim — white on black, and outside because a round lens was clipping the ends off it — and gives r,M, the gcd there, and — prefixed only — the gaps the release will leave standing, so you can see the selection before committing to it. It sits above the lens, which is the one band clear of both the lens and the finger holding it, and drops below only when the lens is already against the top of the plate.
The lens now centres on the true point everywhere, including the outermost row, column and all four corners. Past the lattice edge the view goes empty and the dashed gold line marks where the boundary falls — that emptiness is the edge, not a rendering fault.
Zoom is now the magnification you actually get, and the range runs to 500× because that is what a four-figure G needs: at G = 4096 a single cell is under a third of a canvas pixel, so 10× still shows you nothing. The presets go to 100× and the Custom box takes any value from 1 to 500. It used to size the window against the plate rather than the lens, so 3× was really 1.5× and 2× was a reduction — most of the old softness was the lens barely enlarging anything. The lens also takes the shape of the plate it is over — a square window on Grid, a disk on Ring and Cayley — so a square lattice no longer loses its corner cells to a round frame. Labels appear whenever the magnified cell clears about 7 px, so they arrive at roughly 4× at G = 194, 20× at G = 1024 and 100× at G = 4096 — the same readable type at every scale, just further in. In Grid the lens no longer photographs the plate either: cells, strips and labels are redrawn at the lens's own resolution, so type that is two pixels tall on the plate is typeset at full size here instead of being blown up.
auto keeps the lens above your finger and slides it sideways when it runs out of headroom — continuously, so it never jumps across the pointer the way it used to at mid-plate. Pin it to a corner if you would rather it never moved at all.
The crosshair marks the pointer; the glowing box (or ring, in Ring and Cayley) marks the lattice point that pointer actually resolves to, which at any real magnification is a different thing — the readout sits just outside the rim — white on black, and outside because a round lens was clipping the ends off it — and gives r,M, the gcd there, and — prefixed only — the gaps the release will leave standing, so you can see the selection before committing to it. It sits above the lens, which is the one band clear of both the lens and the finger holding it, and drops below only when the lens is already against the top of the plate.
The lens now centres on the true point everywhere, including the outermost row, column and all four corners. Past the lattice edge the view goes empty and the dashed gold line marks where the boundary falls — that emptiness is the edge, not a rendering fault.
▸Presets
Each preset fixes an even E and puts G = E/2 − 1, the grid whose corner frame carries that partition. Hover for why each one is here.
Compare 48 and 52: nearly the same size, 5 representations against 3. An E divisible by 6 can draw primes from both residue classes mod 3; one that is not divisible by 3 cannot, and lands in the sparse band. That split is the banding in Goldbach's comet.
Compare 48 and 52: nearly the same size, 5 representations against 3. An E divisible by 6 can draw primes from both residue classes mod 3; one that is not divisible by 3 cannot, and lands in the sparse band. That split is the banding in Goldbach's comet.
▸Strips
Dim off
40%
Off-gcd
40%
Strip thickness
110%
Everything not on a strip is washed back by Dim off, so the four lines read against the full coprimality field rather than replacing it.
Off-gcd is the other half of that: a strip point where gcd(r,M) ≠ 1 is a point the strip misses, and drawing it faintly used to make the line look continuous through cells it never occupies — c appearing to run straight through 2, 4, 6. At 0% those points are not drawn at all, so a break in the line is a real break and the coprime count in the readout matches what is on screen. Raise it to see the full geometric line, misses included.
Strip thickness used to be baked into each view separately — Ring/Cayley even sized a coprime strip point 15% larger than a missed one — so a strip at high point-size could blot out the lattice it sits on. One slider now scales all three views the same way, and 100% is calibrated to match the ordinary lattice dot radius exactly, so the strip becomes a colour, not a size, difference.
Off-gcd is the other half of that: a strip point where gcd(r,M) ≠ 1 is a point the strip misses, and drawing it faintly used to make the line look continuous through cells it never occupies — c appearing to run straight through 2, 4, 6. At 0% those points are not drawn at all, so a break in the line is a real break and the coprime count in the readout matches what is on screen. Raise it to see the full geometric line, misses included.
Strip thickness used to be baked into each view separately — Ring/Cayley even sized a coprime strip point 15% larger than a missed one — so a strip at high point-size could blot out the lattice it sits on. One slider now scales all three views the same way, and 100% is calibrated to match the ordinary lattice dot radius exactly, so the strip becomes a colour, not a size, difference.
▸Rendering
Colour
Labels
Size
1.00×
▸How labels work
Grid: labels draw only where a cell clears the pile-up gate (13 px at size 1×, scaled with the slider), so they never collide. Above roughly G = 320 the canvas switches to a one-pixel-per-cell buffer and scales it without smoothing.
r / M labels each cell with its fraction rather than a coordinate pair — the same number the ring angle θ = 2πr/M is built from, so a ring reads as a sequence of fractions directly. r / M decimal is that same quantity evaluated to two places: the fraction is the better label when you want to see which cells share a value (6/4 and 3/2 look different but land together), the decimal when you want to see the ordering along a ring at a glance (1.50 and 1.50 read as equal immediately). Ring and Cayley size their labels as a fraction of the canvas, so an export carries the same type it shows on screen at any resolution.
Ring / Cayley: labels come in three brightnesses, and the brightness is the information. Full white with a dark halo is a point on the current strip. Mid grey is an ordinary lattice point with gcd(r,M) = 1. Faintest is a lattice point with gcd(r,M) > 1 — the cells the coprimality field rules out. So the faint ones are not failed labels; they are the non-coprime background, and their faintness is the same statement the dim cells make in Grid.
Not every point gets one, by design — the strip is labelled first, then the rest of the lattice fills whatever space is left, each label claiming the rectangle it actually measures so nothing ever overlaps. A point goes unlabelled when its slot is already taken, when radius grading has shrunk its type below 4.5 px, or when it sits within a label's height of the plate edge. The background pass runs at all only when there is room for it — G ≤ 256, the zoom-in slider past 2×, or size at 0.7× or below — and is suspended while a sweep plays, since the winners would otherwise be reshuffled every frame. There is also a hard ceiling of 900 labels a frame.
Grade exists because crowding in the polar views is a function of radius, not a constant. At G = 20…30 every point has room and 0% — one size everywhere — is right. By G ≈ 200 the inner rings are a smear while the rim is still half empty; grading spends small type on the packed middle and full type on the open rim, which raises the number of readable labels instead of trading one zone off against the other.
r / M labels each cell with its fraction rather than a coordinate pair — the same number the ring angle θ = 2πr/M is built from, so a ring reads as a sequence of fractions directly. r / M decimal is that same quantity evaluated to two places: the fraction is the better label when you want to see which cells share a value (6/4 and 3/2 look different but land together), the decimal when you want to see the ordering along a ring at a glance (1.50 and 1.50 read as equal immediately). Ring and Cayley size their labels as a fraction of the canvas, so an export carries the same type it shows on screen at any resolution.
Ring / Cayley: labels come in three brightnesses, and the brightness is the information. Full white with a dark halo is a point on the current strip. Mid grey is an ordinary lattice point with gcd(r,M) = 1. Faintest is a lattice point with gcd(r,M) > 1 — the cells the coprimality field rules out. So the faint ones are not failed labels; they are the non-coprime background, and their faintness is the same statement the dim cells make in Grid.
Not every point gets one, by design — the strip is labelled first, then the rest of the lattice fills whatever space is left, each label claiming the rectangle it actually measures so nothing ever overlaps. A point goes unlabelled when its slot is already taken, when radius grading has shrunk its type below 4.5 px, or when it sits within a label's height of the plate edge. The background pass runs at all only when there is room for it — G ≤ 256, the zoom-in slider past 2×, or size at 0.7× or below — and is suspended while a sweep plays, since the winners would otherwise be reshuffled every frame. There is also a hard ceiling of 900 labels a frame.
Grade exists because crowding in the polar views is a function of radius, not a constant. At G = 20…30 every point has room and 0% — one size everywhere — is right. By G ≈ 200 the inner rings are a smear while the rim is still half empty; grading spends small type on the packed middle and full type on the open rim, which raises the number of readable labels instead of trading one zone off against the other.
▸Cross-page dynamics
Block n
0
C(n) filter
pair lock
▸Lift dynamics
spiral p
path n
1
arc α
30%
dot
1.0×
C(n) filter and Lift dynamics are the index page's own machinery, not new constructions. With block n on, the plate stops drawing every gcd(r,M)=1 point and draws only those clearing gcd(r,M+j)=1 for every j = 0…n — the exact condition C(n) is the density of. At n = 0 it changes nothing, because the block condition is then just coprimality.
lock to C(n) is the bridge between the two halves: a prime is skipped once C(n)'s local factor 1−min(n+1,p)/p² has already bottomed out on it at 1−1/p, which happens exactly when p ≤ n+1. So sweeping n walks the spiral forward through the primes C(n) has not yet saturated.
pair lock applies the same discipline to the partitions: the steppers and ▶ Play Goldbach pairs skip any partition the filter has removed. vs D(n) is the reading worth starting with — survival on a sum strip is only ~40% at n=1 and ~24% at n=2, so an absolute bar empties the list immediately, while survival measured in units of D(n) sits near 1.00 and actually separates the partitions.
lock to C(n) is the bridge between the two halves: a prime is skipped once C(n)'s local factor 1−min(n+1,p)/p² has already bottomed out on it at 1−1/p, which happens exactly when p ≤ n+1. So sweeping n walks the spiral forward through the primes C(n) has not yet saturated.
pair lock applies the same discipline to the partitions: the steppers and ▶ Play Goldbach pairs skip any partition the filter has removed. vs D(n) is the reading worth starting with — survival on a sum strip is only ~40% at n=1 and ~24% at n=2, so an absolute bar empties the list immediately, while survival measured in units of D(n) sits near 1.00 and actually separates the partitions.
These three read the rest of the site's own math into this page rather than adding new machinery of their own.
Block n extends every strip point's test from the plain gcd(r,g)=1 this page has always used to gcd(r,g+j)=1 for every j=0…n at once — literally the C(n) condition from the index page, walked along a sum/difference strip instead of averaged over the whole (r,M) lattice. At n=0 nothing changes; raise it and the partition table grows a block n column showing how much of each strip survives the stronger test, and the verdict line reports whether both strips are block-full.
Lift · saturation names the primes p ≤ n+1 that C(n)'s local factor 1−min(n+1,p)/p² has already pinned at its floor 1−1/p (every residue mod p is forbidden by some j, not just some) — the same "saturated primes" the index opener tracks — and shows them in the readout for whatever n is set here.
Gap-2n · blk is the same block-n lens turned on the de Polignac flag instead of the Goldbach one: a gap partner (g or s having a prime exactly 2n away) is marked gold when the strip that actually produced it — c for g, d for s — also clears gcd(r,M+j)=1 for every j=0…n, not just gcd(r,M)=1. It reuses the row's own cFullBlk/dFullBlk rather than testing the partner's strip separately, so it answers "does the evidence behind this gap pair hold up under the stronger condition," the same question block-n already asks of Goldbach pairs.
Sector S_s is Page 11's partition of the coprime pairs, applied to this plate. Page 11's object is the set of coprime (r,m) with 1 ≤ r ≤ m ≤ N bucketed by which Farey interval S_s = (1/(s+1), 1/s] the fraction r/m falls in — that bucket is s = ⌊m/r⌋ — and its count obeys F(s,N) ~ (3/π²)N²/(s(s+1)), with sector width 1/(s(s+1)). Every lattice point here is such a pair, so the sectors apply to the plate directly: each sector is drawn as a translucent band underneath the points — a region, not a line, so its width 1/(s(s+1)) is what you see — and the census table compares the exact count per sector against F(s,N) at N = G. Use isolate to show one sector at a time; past the first few the wedges are too narrow to separate all at once. The g-strip column is this page's own addition — of the points actually lying on the two sum strips of the partition on screen, how many fall in each sector. n*(N) is marked because past it the residual exact − F(s,N) is pinned positive and cannot change sign again.
Block n extends every strip point's test from the plain gcd(r,g)=1 this page has always used to gcd(r,g+j)=1 for every j=0…n at once — literally the C(n) condition from the index page, walked along a sum/difference strip instead of averaged over the whole (r,M) lattice. At n=0 nothing changes; raise it and the partition table grows a block n column showing how much of each strip survives the stronger test, and the verdict line reports whether both strips are block-full.
Lift · saturation names the primes p ≤ n+1 that C(n)'s local factor 1−min(n+1,p)/p² has already pinned at its floor 1−1/p (every residue mod p is forbidden by some j, not just some) — the same "saturated primes" the index opener tracks — and shows them in the readout for whatever n is set here.
Gap-2n · blk is the same block-n lens turned on the de Polignac flag instead of the Goldbach one: a gap partner (g or s having a prime exactly 2n away) is marked gold when the strip that actually produced it — c for g, d for s — also clears gcd(r,M+j)=1 for every j=0…n, not just gcd(r,M)=1. It reuses the row's own cFullBlk/dFullBlk rather than testing the partner's strip separately, so it answers "does the evidence behind this gap pair hold up under the stronger condition," the same question block-n already asks of Goldbach pairs.
Sector S_s is Page 11's partition of the coprime pairs, applied to this plate. Page 11's object is the set of coprime (r,m) with 1 ≤ r ≤ m ≤ N bucketed by which Farey interval S_s = (1/(s+1), 1/s] the fraction r/m falls in — that bucket is s = ⌊m/r⌋ — and its count obeys F(s,N) ~ (3/π²)N²/(s(s+1)), with sector width 1/(s(s+1)). Every lattice point here is such a pair, so the sectors apply to the plate directly: each sector is drawn as a translucent band underneath the points — a region, not a line, so its width 1/(s(s+1)) is what you see — and the census table compares the exact count per sector against F(s,N) at N = G. Use isolate to show one sector at a time; past the first few the wedges are too narrow to separate all at once. The g-strip column is this page's own addition — of the points actually lying on the two sum strips of the partition on screen, how many fall in each sector. n*(N) is marked because past it the residual exact − F(s,N) is pinned positive and cannot change sign again.
▸Export
Views
Plate
Checking one view downloads that view alone. Checking two, three, or four tiles them into a single PNG — side-by-side for two, a triangle for three, a 2×2 grid for four. The view you're currently looking at gets auto-checked when you switch.
▸Deep search — arbitrary E
E
A gap g is a Goldbach pair of E iff g and E−g are both prime — the a/b/c/d lines encode that, but never require it. This sieves once up to E and reads primality straight off, independent of the grid's 4096 render cap. E over ~8194 can be searched here but can't be opened on the Grid/Ring/Cayley plate.
▸Gap ladder — forward diagonals
Ladder
▸Constants & the lift function F(u)
Every value below is computed in the page from the prime zeta function P(s), not read off a stored digit string and not truncated at a prime bound. A partial product or partial sum cut at p < 50,000 and printed to twelve places is wrong from the sixth — the tail of ∑1/p² is far too fat for that — so these are assembled from P(s) = ∑n μ(n)/n · log ζ(ns) instead, which carries no truncation at all.
Settle
u
Jump to
Figure A. F(u) = ∏p(p²−u)/(p²−1) on [0, 4]. Strictly decreasing, because d/du log F = −∑p 1/(p²−u) is negative wherever every p² > u. Four landmarks: F(0) = ζ(2), F(1) = 1, F(2) = C, F(4) = 0 — the first zero, contributed by p = 2.
Figure B. The zero set of F, laid on the ladder's own axis. F(u) = 0 exactly at u = p², each zero simple, so plotting in √u puts the zeros on the primes — the same sequence the lit strips pick out on the plate, arrived at analytically instead of geometrically. Ticks are the zeros, bands are the gaps between them in the ladder's colours, and the strip along the bottom is sign F(u) = (−1)#{q : q² < u}, which flips at every zero. So the sign of F alternates once per rung: the ladder is the zero spectrum of F.
▸Multi-pair
Overlay
Partition drawer
Partition table
—
Filter
n (gap = 2n)
flags g/s with a prime partner 2n away · n=1 twin, n=2 cousin, n=3 sexy · with block n on, a gold ±2n·blk badge marks a gap partner whose own strip (c for g, d for s) also clears the stronger gcd(r,M+j)=1 test
Step by stepselect a row
Pick a row from the partition table, or move the gap slider.
The drawer walks each lattice point on the two sum strips and shows the gcd reduction that decides it.
The drawer walks each lattice point on the two sum strips and shows the gcd reduction that decides it.
How the three views are built
All three views draw the same set: the G² ordered pairs (r, M) with 1 ≤ r, M ≤ G, each carrying the
single bit gcd(r, M) = 1. Nothing is added, removed, or recomputed between them. What changes is only the
injection of that index set into the plate — one affine, one polar, one Möbius. Everything below is the
actual arithmetic the canvas runs, stated so the pictures can be checked rather than trusted.
1 · Grid — the identity injection▶
Grid is the trivial case: the index pair is used as a coordinate directly, scaled to the plate. With plate
side p and cell pitch δ = p/G, cell (r, M) has its centre at
(x, y) = ((r − ½)·δ, (M − ½)·δ), δ = p/G
The map is injective, affine, orientation-preserving in x and flipped in y only because the canvas puts y
downward. Because it is affine, straight lines stay straight — which is the whole reason the four
strips read as strips here. Constant difference M − r = g and constant sum r + M = g are lines of slope +1
and −1, so a, b, c, d appear as four straight segments and "fully coprime" is a property you can check by
running your eye along one of them. No other view has that property.
The cost is that Grid has no way to express the multiplicative structure of a pair. r = 7, M = 21 and
r = 1, M = 3 are the same reduced fraction and sit in unrelated corners of the square.
2 · Ring — residues as roots of unity▶
Ring sends M to a radius and r to an angle:
ρ = M/G ∈ (0, 1], θ = 2π·r/M ⟹ (x, y) = (c + R·ρ·cos θ, c − R·ρ·sin θ)
The angle is the point of the construction. θ = 2πr/M depends on r only through r mod M, so ring M is
the cyclic group ℤ/Mℤ drawn as M equally spaced marks, and the plotted point is the complex number
e2πir/M — an M-th root of unity. The coprimality bit then has an exact meaning in the picture:
e2πir/M is a primitive M-th root of unity ⟺ gcd(r, M) = 1
So the lit points of ring M are precisely its primitive roots — the generators of ℤ/Mℤ — and there are φ(M)
of them per turn. Summing that over the rings recovers the classical count, which is the same 6/π² that runs
through the rest of the suite:
ΣM ≤ G φ(M) = (3/π²)·G² + O(G log G) ⟹ density of coprime pairs in the square → 6/π² = 1/ζ(2)
What happens past one turn. r runs to G, not to M, so for M < G the angle formula runs past 2π and a
decision has to be made. The θ map control makes that decision explicit; all three are exact, and they differ
in what they throw away.
wrap θ = 2πr/M — surjective onto the M-th roots; each root receives ⌊G/M⌋ or ⌈G/M⌉ values of r
clamp θ = 2π·min(r/M, 1) — injective on r < M; the G − M + 1 values r ≥ M all collapse to the θ = 0 spoke
unit θ = 2πr/G — injective in r on every ring, but the roots are now G-th roots on every ring, not M-th
clamp θ = 2π·min(r/M, 1) — injective on r < M; the G − M + 1 values r ≥ M all collapse to the θ = 0 spoke
unit θ = 2πr/G — injective in r on every ring, but the roots are now G-th roots on every ring, not M-th
wrap keeps the root-of-unity meaning and loses injectivity: r and r + M land on the same pixel and
cannot be told apart. clamp keeps injectivity on the genuine fractions r/M ∈ (0, 1) — the Farey side —
and pays for it with a spoke whose thickness at ring M is exactly G − M + 1. unit keeps injectivity
everywhere and loses the arithmetic: the angle no longer knows what M is, so gcd(r, M) = 1 shows up as
radial spokes rather than as a per-ring pattern.
None of the three is the "right" one. wrap is right if you are looking at ℤ/Mℤ; clamp is right if you are looking at Farey fractions; unit is right if you want to compare the same r across rings.
3 · Cayley — the Möbius image, derived in full▶
Cayley takes the ring point as a complex number and applies a Möbius transformation. The radius is first
remapped by a fixed affine rule, then:
z = ρ·eiθ, ρ = ρ₀ + Δρ·(M/G), w = Γ(z) = (z − 1)/(z + 1)
ρ₀ and Δρ are the two controls on the Spacing panel; the view opens on 0.4 and 1.8, giving ρ ∈ [0.4, 2.2].
The derivation below holds for any pair.
Γ is a genuine Cayley transform — it carries the right half-plane Re z > 0 bijectively onto the unit disk,
and its inverse is z = (1 + w)/(1 − w), which is what the click hit-test inverts. To see what it does to the
rings, impose |z| = ρ on the inverse. Writing w = u + iv:
|z| = ρ ⟺ |1 + w| = ρ|1 − w| ⟺ (1+u)² + v² = ρ²[(1−u)² + v²]
Expanding and collecting gives (1 − ρ²)(u² + v²) + 2u(1 + ρ²) + (1 − ρ²) = 0, and for ρ ≠ 1 dividing by
(1 − ρ²) puts it in circle form:
centre −(1 + ρ²)/(1 − ρ²) on the real axis · radius 2ρ/|1 − ρ²|
These are the Apollonius circles of the point pair ±1: each is the locus where |z−1|/|z+1| is
constant. The rays θ = const map to the orthogonal family, arcs running from Γ(0) = −1 to Γ(∞) = +1. Adding
centre and radius gives the furthest point of each ring image, and it simplifies cleanly:
max |Γ| on ring ρ = (1 + ρ²)/|1 − ρ²| + 2ρ/|1 − ρ²| = (1 + ρ)²/|1 − ρ²| = (1 + ρ)/|1 − ρ|
One locus is not a circle: |z| = 1 forces |1 + w| = |1 − w|, whose solution set is the line u = 0. The unit
circle maps to the imaginary axis, which is unbounded. Equivalently |Γ(z)| = 1 ⟺ Re z = 0, so the
reference circle drawn on the Cayley plate is exactly the image of the two rays θ = ±π/2.
4 · The pole, and the two bounded alternatives▶
The formula (1 + ρ)/|1 − ρ| decides everything about Γ, and it diverges at ρ = 1. The view opens on
ρ ∈ [0.4, 2.2], which straddles that value. At the outer ring ρ = 2.2 the bound is 3.2/1.2 = 2.667 —
a comfortable finite number that describes one ring and not the image. Solving for the ring that carries the
singularity:
ρ₀ + Δρ·(M/G) = 1 ⟺ M = G·(1 − ρ₀)/Δρ — at the opening values, M = G/3
so the pole z = −1 sits on that ring at the angle θ = π, i.e. at r ≈ M/2. Measured over the full lattice the
largest image modulus lands there every time: 17.7 at G = 30, 402 at G = 121 (r = 20, M = 40), 852 at
G = 512 (r = 85, M = 170), 1708 at G = 1024 (r = 171, M = 342). Two consequences follow.
The picture is unbounded, so some of it is always missing. Whatever the zoom-out divisor is set to, it
draws a finite disk around a map with no finite maximum, and what lies beyond is clipped — not a random
selection, but one ring being discarded. The plate readout reports the measured maximum and the clipped
fraction for the settings that are live, rather than a figure fixed at one choice of constants.
The singular ring is arithmetically meaningless. M = G(1 − ρ₀)/Δρ is an artefact of the two spread
constants. Nothing about coprimality, Farey structure or the strips distinguishes that ring, and a different
pair puts the singularity somewhere else — or removes it, which is what the ρ₀ and Δρ controls are for. Push
ρ₀ above 1, or ρ₀ + Δρ below it, and the annulus no longer contains ρ = 1: Γ becomes bounded with the exact
ceiling (1 + ρ)/|1 − ρ| evaluated at whichever endpoint is nearer 1. The measured maximum then sits just
under that ceiling, because ρ₀ is approached and not attained — the innermost ring is M = 1, not M = 0 — and
the maximum on a ring requires θ = π to land on a lattice point.
The transformation itself is correct: Γ, its inverse and the complex division are exact, and the θ map is
irrelevant to the problem — the singularity survives wrap, clamp and unit alike, because it is a property of
the domain rather than of the angle. That leaves the choice of domain as the open question, and two
bounded maps answer it differently. Both are on the map selector.
B · the Blaschke automorphism. Put the ring where it already sits, z = (M/G)·eiθ, so the
lattice fills the closed unit disk and M = G is the unit circle. Then
φa(z) = (z − a)/(1 − āz), |a| < 1
maps the disk bijectively onto itself. Its only pole is at z = 1/ā, of modulus 1/|a| > 1, outside the disk —
so no lattice point can blow up, |φa| ≤ 1 holds everywhere, nothing is clipped, and the zoom-out
divisor has nothing to do. φa is an isometry of the Poincaré metric: setting a ≠ 0 is a hyperbolic
translation that re-centres the disk on a, magnifying its neighbourhood and compressing the far rim without
distorting a single hyperbolic distance. At a = 0 it is the identity and the plate reproduces Ring exactly,
so this map is a continuous deformation of the second view rather than an unrelated third one. The cost is
the name: φa is not a Cayley transform, and the plate caption reads Blaschke while it is
live.
C · the classical Cayley transform, on Ford coordinates. K(z) = (z − i)/(z + i) carries the upper
half-plane bijectively onto the disk, and its pole z = −i lies in the lower half, which the lattice never
reaches. The coordinates it is fed are the ones the modular group acts on:
z = r/M + i·y ∈ ℍ, y = gain·M−κ, κ = 1 giving the Ford height 1/M
The real part is the fraction r/M itself and the height is the Farey depth: larger denominators sit lower,
nearer the real line. This is the horocycle picture behind Ford circles — the circle tangent to ℝ at r/M with
radius 1/(2M²). Under K the real line maps to the boundary circle, so every reduced fraction lands on the rim
at a position given by its value, with the height controlling how far inside the rim it sits. At κ = 1 that
crushes almost the whole lattice against the boundary; lowering κ lifts the deep fractions inward and moves
no real part, so it distorts height alone. It is the one map of the three where gcd(r, M) = 1 has a direct
geometric meaning in the target picture.
Two things follow from C reading r/M as a position rather than an angle. The θ map has nothing to
choose between and is disabled while C is live, and the rotate control acts on the finished disk instead of
on a pre-image angle. The upper half of the plate is also structurally empty, since every r/M is positive and
K sends the positive reals to the lower half of the boundary circle. Mirror fills it with the branch
−r/M + iy, and
K(−x + iy) = conj K(x + iy) — exact, verified to 0 across the lattice
so the filled half is the reflection of the drawn one. That is symmetry, not information: every mirrored
point is a point already on the plate. It is drawn dimmer for that reason, and it is neither labelled nor
selectable.
The claim
1 · Why strip c is full exactly on primes▶
c is fully lit exactly when g is prime — it spans one whole period of gcd(·, g) minus the single
point r = g, so it holds precisely φ(g) coprime points.
gcd(r, M) on r + M = g = gcd(r, g − r) = gcd(r, g) → #coprime = φ(g), full ⟺ φ(g) = g − 1 ⟺ g prime
2 · Why strip d leaks below the threshold▶
d is fully lit whenever s is prime, but it samples only g−1 residues of the longer period s, so
below the threshold it can come up full on a composite s.
d spans r = 1 … g−1 against period s = E − g → a partial window, not a full period
3 · Why the leak closes above g > √E▶
For g > √E the leak closes: a composite s has a prime factor ≤ √s, which a window of g−1 consecutive
integers cannot miss. There, both strips full ⟺ g and s both prime.
g > √E ⟹ [c full ∧ d full] ⟺ E = g + s is a Goldbach partition
4 · Terminology note▶
The g + s = E line this page sweeps is the lattice's anti-diagonal (constant sum) — not the
main diagonal g = s (constant difference), which is a different, unrelated line on the same grid.
"Diagonal" is kept in the title and the exports only because that is the established, shorter public name
for the project.
5 · Historical foundations▶
Every construction on this page is original arrangement, not original mathematics — the underlying results
below are classical, and each is cited where the page uses it.
Euclid, Elements, Book VII (c. 300 BC) — the reduction gcd(r, M) = gcd(r, M − r) that every
strip on this page is built from.
Leonhard Euler, "De summis serierum reciprocarum" (1735) & Introductio in analysin
infinitorum (1748) — the Basel-sum identity 6/π² = 1/ζ(2) behind the density bar.
Leonhard Euler, "Theoremata arithmetica nova methodo demonstrata" (1763) — the totient
function itself (defined there in words, with no symbol yet) behind the φ(g) = g − 1 test used for
a full strip; the φ notation is Gauss's, introduced in the Disquisitiones below.
Carl Friedrich Gauss, Disquisitiones Arithmeticae (1801) — primitive M-th roots of unity
e^(2πir/M) and the cyclotomic structure the Ring view lights up.
John Farey (1816) and Augustin-Louis Cauchy's subsequent proof — the Farey sequence of
reduced fractions r/M ∈ (0,1) that the clamp mode exposes.
August Ferdinand Möbius, "Die Theorie der Kreisverwandtschaft in rein geometrischer
Darstellung" (1855) — the general fractional linear map (az+b)/(cz+d) that every map in the Cayley
view specializes.
Bernhard Riemann, "Über die Anzahl der Primzahlen..." (1859) — the zeta function ζ(s) underlying the
6/π² = 1/ζ(2) density constant.
Arthur Cayley (1846) — the Cayley transform Γ(z) = (z−1)/(z+1) and its Ford-coordinate cousin
K(z) = (z−i)/(z+i), connecting the upper half-plane to the disk.
Henri Poincaré, Théorie des groupes fuchsiens (1882) — the hyperbolic (Poincaré) metric that
φₐ preserves as an isometry.
Wilhelm Blaschke (early 20th c.) — the disk automorphism φₐ(z) = (z−a)/(1−āz) used in the Cayley
view's Blaschke mode.
G. H. Hardy & J. E. Littlewood, "Some problems of 'partitio numerorum' III" (1923) — the circle
method, the exponential sum S(α) = Σ e(2πiαp), and the singular series 𝔖(E) that the Circle view
implements for Goldbach partitions.
Ivan M. Vinogradov, "Some theorems concerning the theory of primes" (1937) — the proof that
every sufficiently large odd N is a sum of three primes, which the Corridor view's ternary-Goldbach
strands (N = p + q + r) are built around; the binary case the rest of this page is about remains open.
Lester R. Ford Sr., "Fractions" (1938) — the tangent-circle coordinates y = gain·M^(−κ), with κ = 1
giving the classical Ford height 1/M.
These are foundational references, not a claim of direct citation to a specific printed edition; page
numbers and modern reprints vary. See also
Page 5 — the Gap Diagonal
Identity for the C(n) block-coprime framework this page extends.
Part II of the C(n) block-coprime framework
·
grew out of Page 5 — the Gap Diagonal Identity
·
gcd(r, M) = gcd(r, M − r) = gcd(r, g)