Classical structure
Two structures sit on every rung, and nothing in the
first computes the period of the second: a geometry that reads how big
each channel is, and a dynamics that reads the multiplicative structure
of each channel minus one. Knots, curvature and shells belong to the first,
the orbit length to the second — and the frequency response is the one
place they meet.
A rung of the tower is Z/N with
N = pk# the product of the first k primes,
read as one channel per prime — the residue mod p, a
reduction at one finite place (The Object). The
Chinese remainder theorem makes the rung a discrete torus: an
element is its tuple of residues, one point on each of k circles, and
addition rotates the circles independently. Two quantities run through
everything below. φ(N) = ∏(p−1) is the number of
units, and λ(k) = lcm(p1−1, …,
pk−1) is the universal period of the power maps
(the transparency
criterion). A new prime is transparent when it leaves
λ unchanged; its rung is then a plateau, and otherwise a
jump.
The torus carries two metrics, and they disagree about which channel
matters. Hamming distance counts the channels in which two
elements differ; the neighbour graph it induces — one edge per single
channel change — has degree ∑(p−1), which is 51 on the
seven-channel rung Z/510510. Chord distance embeds each
circle in the plane and adds squared straight-line distances,
∑ 4sin²(πr/p), so it is dominated by the largest circle
where Hamming distance is dominated by the smallest — and its
gap, the smallest distance it puts between two distinct
elements, is therefore 4sin²(π/pk), set by the
largest channel alone. Figures below are
computed on that rung — channels 2, 3, 5, 7, 11, 13, 17 — unless a
range of rungs is named.
The two structures
The
geometry/dynamics split rule
The split is not one of domain. The primes determine the shifted
primes and the shifted primes determine the primes, so every quantity
named below is a function of the same prime set and saying one
"depends on {pi}" rather than on
{pi−1} says nothing. What the split says is that no
geometric quantity which VARIES along the tower factors through
λ. Geometric:
curvature, the degree, the chord gap, the shell distribution, and the
time a random walk on the neighbour graph takes to mix — each reads a
channel's SIZE. Dynamical: λ, orbit lengths, the orders
an element can have, transparency itself — each reads the
multiplicative structure of p − 1, which the size of p
does not determine.
The witness is on the trajectory and needs no designed tower. The
primes 31, 37, 41 and 43 are all transparent, so λ stands at
55,440 across k = 10 through k = 14 — five rungs — while the degree
runs 119 to 267 and every geometric quantity above moves with it. No
function of λ can do that, so none of them is one.
The word varies is load-bearing, and what it excludes is a
triviality rather than a result. The Hamming gap — the smallest Hamming
distance between two distinct elements — is 1 on every rung by
construction, since changing one channel is always available. A
constant is a function of anything, so that is the one geometric
quantity no constant-λ witness can separate, and there is
nothing in it to separate.
What the tower buys with it is a two-speed growth: capacity at
every rung — a dimension, degree, φ — and complexity only at
jumps, which thin out as the
transparency
density approaches 1.
Scope. Each quantity's dependence is by
construction; the separating witness is computed rung by rung for
k = 3..14, and it separates only the quantities named.
verifier:
explore_tower_geometry.py
Curvature approaches
one rule
Give the neighbour graph its Ollivier–Ricci curvature — the coarse
curvature that measures how far a step from one point can be
transported onto a step from its neighbour. Each channel contributes
κi = (pi − 2)/degree, so the
total is
The 2-channel is exactly flat — a two-point circle has no room to
curve — the largest channel is the most curved at 5/17, and the
k = 7 total is 44/51. The degree grows like
k² ln k / 2 while the subtracted term's numerator is
only k, so the curvature climbs toward 1, reaching 0.948 by
k = 14: the torus gets rounder as it grows.
Curvature therefore runs opposite to the chord gap, which shrinks
as the largest circle grows. The rounder the rung, the less its
elements are separated by
the metric that embeds them — one fact read twice, since a large
prime is a large circle, which is locally flat and finely
divided.
The Gauss–Bonnet count of the same object,
χ = N(1 − k + ∑1/pi), is not
a new invariant: −χ is the integer whose prime divisors are
the absent primes a sub-ring
names. The naming thread and
the curvature thread are counting the same Euler characteristic.
Scope. The per-channel formula and the k = 7
figures are verified exhaustively; the totals are computed
k = 3..14, and the limit follows from
pk → ∞.
verifier:
explore_tower_geometry.py
The shell
distribution rule
Fix a point and call the elements at Hamming distance d
from it the shell at d. The channels are independent,
so the generating function of the shell sizes factors,
and the coefficient of xd is the number of
elements at distance d. Two coefficients are already familiar:
e1 is the degree, and ek — the
elements differing in every channel — is φ(N), the
units. The distribution is not centred. Its mean distance is
k − ∑1/pi, growing as
k − O(log log k), and the largest shell is the
next-to-last: 39% of Z/510510 sits at distance 6 of a possible
7.
So the torus is almost uniformly far from any reference point. The
fraction of elements at distance k/2 or more passes 97% at
k = 6, 99% at k = 8 and 99.9% at k = 10.
Scope. The factorization is exact on every
squarefree rung; the concentration figures are computed
k = 3..14.
verifier:
explore_tower_geometry.py
The Betti numbers
count the idempotents rule
The j-th Betti number of the torus — the rank of its
j-th homology, counting independent j-dimensional holes
— is βj(Tk) =
C(k, j), one for each way of choosing j of the
k circles. The rung's idempotents — the elements with
e² = e — are indexed the same way, since idempotence is
decided channel by channel and each channel is a field: one
idempotent per subset of channels. So βj counts the
idempotents whose subset has size j, and the Betti numbers sum
to 2k, the number of idempotents. At k = 7 they run
(1, 7, 21, 35, 35, 21, 7, 1) and sum to 128.
Poincaré duality, C(k, j) = C(k,
k−j), is then the complement involution on channel
subsets: an idempotent e and its complement 1 − e sit at
dual Betti numbers. Both structures are graded by the same lattice of
channel subsets, and the grading is the one the CRT decomposition
already fixes.
Scope. Both counts are C(k,
j) by construction, computed k = 3..14. What is claimed is the
shared index set and nothing more: no map between homology and the
ring is asserted, and a reader who finds the coincidence forced —
both families are indexed by subsets of a k-set — is reading it
correctly.
verifier:
explore_tower_geometry.py
Knots on the torus
A torus knot T(p, q) is the curve that winds
p times one way and q times the other around a
two-dimensional torus; it is a knot exactly when p and q
are coprime. Tower primes are pairwise coprime by construction, so
every pair of channels carries one — the path traced by repeatedly
adding 1, read in those two coordinates alone. Its signature is an integer
invariant read off the intersection form of a surface the knot bounds;
here it comes from a lattice-point count over the rectangle
[1, p−1] × [1, q−1].
Three channels give a higher-dimensional object. For pairwise
coprime p, q, r the Brieskorn variety
xp + yq + zr = 0
meets the 5-sphere in an integral homology 3-sphere Σ(p,
q, r) — a manifold homology alone cannot tell from the
3-sphere. The singularity's Milnor fiber, the nearby smooth
level set, is a four-manifold bounded by Σ, and it is that fiber's
intersection form whose signature is quoted below. The Casson
invariant is a single integer that does distinguish such a sphere
from the 3-sphere.
Torus knots and
Brieskorn spheres over the channels
rule
Through k = 9 — channels up to 23 — the 36 channel pairs carry 36
torus knots and all 36 signatures are negative: in this orientation
the tower is left-handed throughout. The values are small and highly
degenerate, T(3,5) and T(3,7) both landing on −8, the signature of
the E8 lattice.
The 84 channel triples carry 84 Brieskorn homology spheres. Every
one of the 84 Milnor-fiber signatures is negative and divisible by 8
— the fiber is spin with unimodular intersection form — so by
Neumann–Wahl each triple has an integer Casson invariant
σ/8. Those run from −1, the Poincaré sphere Σ(2, 3, 5), to
−308 at Σ(17, 19, 23), and their totals by rung k = 3..9 are
−1, −8, −47, −187, −615, −1625, −3873.
Channel 2 is the suspension coordinate — the one whose exponent
turns a pair's singularity into a triple's — and it costs the
construction nothing: σ(2, q,
r) = σ(T(q, r)) exactly, since a squared
third variable is how a knot signature arises from a Milnor fiber at
all. A triple containing 2 therefore adds no signature and no Casson
data beyond its own pair, and the genuinely new three-dimensional
objects are the 56 odd triples. The 2-channel behaving as a
degenerate direction is the shape the naming thread reports too,
where 2 is never named by a
sub-ring that omits it.
One numerical coincidence does not survive. The crossing numbers
of the pairs sum, over the rungs k = 2..9, to 3, 18, 67, 210, 509,
1104, 2073 and 3660, and the 210 at rung 5 is the modulus of rung 4
— but no later total equals any earlier modulus.
Scope. Exhaustive over the primes through
23, so k ≤ 9. Signatures are the standard Brieskorn–Hirzebruch
lattice counts, anchored two ways: σ(T(2,3)) = −2 at the
trefoil, and the three-variable count reproducing the knot
signature at r = 2 for all 28 odd pairs. Divisibility by 8
and the Casson identification are known background, verified here
rather than proved; the crossing-total statement is asserted over
the same range.
verifier:
explore_torus_knots.py
The frequency response
Everything above reads channel sizes. The frequency response is where
the two structures make contact: its gates are fixed by those sizes, and
then it is read along a range λ sets. The response at frequency
n is the average of
cos(2πnx/N) over the units — the Ramanujan sum
cN(n) divided by φ(N) — and it
factors channel by channel.
The channel
gates property
Write F(n) =
cN(n)/φ(N). For squarefree
N it is a product of independent binary gates, one per
channel:
A channel is on when it divides the frequency and
off otherwise, with contrast ratio (p−1) : 1, so larger
channels gate more sharply. The extremes are the whole dynamic range:
a frequency coprime to N gives 1/φ, about
10−5 at k = 7, and a multiple of N gives 1.
The off-value is not an artifact of the normalization. It is
exactly the inclusion–exclusion weight of the prime p, so the
frequency response of the rung is the Möbius function of the sieve —
the same identification as
the sieve identity, read in the
frequency domain.
Scope. Proved for every squarefree modulus;
the identification with the sieve is term-by-term.
verifier:
explore_moment_resonance.py
Static blindness,
dynamical sight observation
Read statically, the response is transparency-blind: the gate
−1/(p−1) is fixed by the channel alone and never by whether
(p−1) divides λ, so the static response cannot report
whether the prime the rung just gained was transparent. That is
precisely the geometric side of the split.
Read dynamically it is not blind. Evaluate F at the
frequencies n = 1..λ — one full period of the power
maps — and collect the distinct values, the rung's spectrum.
A jump extends that range, admitting frequencies that did not exist
below, and many new values arrive; a plateau leaves the range fixed
and few do. Jumps widen the spectrum and plateaus refine it, and both
raise its entropy, the jumps by about three times as much.
Scope. The static half is immediate from the
gate formula. The dynamical half is computed k = 3..22, with the
entropy comparison over k ≤ 10; what a plateau gains is the subject
of the two claims below.
verifier:
explore_resonance_transparency.py
The plateau
decomposition criterion
Call the gate set of a frequency n the set S
of channels dividing it — the gates that are on. Three exact pieces
settle what a plateau gains.
Which gate sets occur. The set S is realized among
n = 1..λ if and only if ∏S ≤ λ: the
product itself realizes it, and any frequency with that gate set is
a multiple of the product. So a gate set costs the product of its
channels and λ is the budget it must fit under. This
replaces a sweep over λ frequencies with a pruned enumeration
of subsets, which is what puts rungs far past k = 14 in reach —
k = 22 takes seconds.
What the spectrum becomes. At a plateau λ does not
move, so the gate sets available below are unchanged and each
frequency either is or is not divisible by the new prime. Writing
Vk for the spectrum at rung k and
c = −1/(pk−1) for the new off-gate,
where the window W is the old spectrum seen through
the multiples of pk — the gate sets that fit the
reduced budget λ/pk. Rescaling by c
is injective and contributes nothing new, so the gain is exactly the
part of the window the rescaled old spectrum fails to cover.
Which window values die. A window value collides with a
rescaled old one if and only if there are disjoint sets A,
B of older channels with |A| + |B| odd, each
side realized by a gate set inside the budget, and
Collisions are therefore multiplicative relations among the
shifted primes — the same objects that decide transparency in the
first place. A transparent prime can be redundant twice over:
dynamically, because its orbit already embeds, and spectrally,
because its values do. At k = 11..14 the windows are nearly the same
size — 133, 135, 135 and 139 values — so the gains 60, 20, 41 and 70
are almost entirely collision rate: 55%, 85%, 70% and 50% of the
window dies.
Scope. All three pieces are proved; the
decomposition and the collision criterion are verified at k = 6,
11..14 and 18..22. The k = 6 plateau gains exactly zero, its
three-value window being covered entire.
verifier:
explore_plateau_collisions.py
The collision rate
without the spectrum rule
The criterion above says which values die; it does not say how
many, and answering that by enumeration costs a spectrum. It can be
had from the divisor structure of pk − 1 instead. A
window gate set S dies via the relation (A, B)
exactly when B ⊆ S, A is disjoint from
S, and ∏S ≤ λ·∏B/∏A, so the
collision set is a union of explicit sets over the relations of
pk − 1. Fix an on/off assignment of the channels
appearing in any relation — a cell — and within it those
thresholds nest, collapsing to one. The rate over gate sets is then a
closed sum of subset counts, one term per cell, with no spectrum
enumerated at all, and it matches the measured gate-set rate exactly
at every k ≤ 22.
The prime 2 is the trap in enumerating those relations. It
contributes a factor 1 to either side and so looks like a free parity
toggle, but it still costs 2 in the budget, and the budget can refuse
it — first at k = 11, where fixing the parity needs a gate set of
product 102,102 against a λ of 55,440.
Against distinct values the cell sum is one-sided rather
than exact. Collided values carry more representing gate sets than
survivors do, so it over-predicts, by 0.00 to 0.24 across the 18
plateau rungs from k = 6 to k = 37. That is still enough to forecast:
at k = 37 a cell sum of 0.98 predicted a value rate between 0.74 and
0.98 before any k = 37 spectrum had been computed, and the measured
rate was 0.92.
What carries the rate is the whole budget-weighted union of those
sets and not any single relation. Rungs 31, 34 and 36 admit no relation with
B empty at all — no way to write pk − 1 as a
product of shifted primes outright — and still collide 83%, 64% and
84%, because a rich window is full of gate sets that already carry a
nonempty B.
Scope. The condition under which a relation
kills a gate set is proved. The rate formula is exact over gate sets
and verified k ≤ 22; the over-prediction against values is an
observation over the 18-rung census, with the rungs past k = 30
computed at a cap of 300 relations, under which that over-prediction
can only widen.
verifier:
explore_plateau_rate.py