Contents
Where this sits
The decoder draws on the exact geometry of version 1 (the ghost map, the Klein chart, the quaternions of the Fifteen Lemmas) and on version 1’s problems. It feeds the two-structure system of version 2.
Version 2 in one picture
Two structures, each a tri-channel of engines A, B and C, make six calculations. Under each particle there is a frame: its orientation and spin in H³. A third system, the coupler, owns the frames. It takes the twist one structure accumulates and applies the inverse to the other, both ways, so the pair’s net twist stays the identity.
| Phase | Delivers | Status |
|---|---|---|
| A · 3D decoder | This page: anchor decoders, the octahedral tree in H³, the four problems in H³, live checks, parity | done |
| B · Frame layer | Quaternion frames carried exactly by transvections, with no square root; the twist of a move is a triangle’s area | done |
| C · Coupler | The mirror law with the steer/carry switch; the binding checked exactly at every zero point; carry bit-identical to no coupler | done |
| D · Two structures | Two tri-channels in H³, each with its own memory chain, bound only through the coupler; the 3D simulation | done |
| E · Preregistered runs | A new preregistration with controls: coupler off, carry only, a deliberately non-inverse transfer, gauge changes on one structure only | next |
The anchor decoder
One primitive decodes everything. Fix a set \(A = \{a_0, \dots, a_{n-1}\}\) of rational directions of equal length. A point \(y\) of H³ decodes to the anchor its spatial part \(\bar y = (y_1, y_2, y_3)\) points nearest:
$$\mathrm{dec}_A(y) = \text{the least } k \text{ with } \langle \bar y, a_k\rangle = \max_j \langle \bar y, a_j\rangle .$$
Ties go to the lowest index, so the origin decodes to 0. The anchor sets are the rational regular polytopes of three dimensions:
| Set | Anchors | Answers | Symmetry group \(G_A\) | Used for |
|---|---|---|---|---|
| AXES | e₁, e₂, e₃ | 3 | 3 rotations (cyclic) | B1, 3-colouring |
| TETRA | (1,1,1), (1,−1,−1), (−1,1,−1), (−1,−1,1) | 4 | 12 (the tetrahedral group) | 4-colouring |
| OCTA | ±e₁, ±e₂, ±e₃ | 6 | 24 (the octahedral group) | B3, the six neighbours of a tree node |
| CUBE | (±1, ±1, ±1) | 8 | 24 | B2, three truth values |
CUBE’s argmax is just the signs of the three coordinates. Its index is \(4b_1 + 2b_2 + b_3\) with \(b_i = [y_i > 0]\), so a decoded corner is three truth values, and a zero coordinate reads “false”, as in version 1.
Live in 3D
The Poincaré ball, seen from outside. Drag to turn it. Each dot is a direction coloured by its answer; the rings are the anchors. The white point is a query you can move. Apply a symmetry: the point moves to \(g\cdot y\) and its answer moves to \(\sigma_g(k)\), exactly as D3 says.
D1–D5, proved
D1 · The same answer in every radial chart PROVEN
For \(y\) on the sheet, \(\mathrm{dec}_A\) gives the same answer on the hyperboloid coordinates \(\bar y\), the Poincaré point \(\bar y/(1+y_0)\) and the Klein point \(\bar y/y_0\).
The three vectors are positive multiples of \(\bar y\), since \(y_0 \ge 1\). Scaling every \(\langle \bar y, a_k\rangle\) by the same positive number keeps the maximisers and so the least one.
D2 · The float decoder is exact PROVEN
On every finite float input, the float decoder returns the same answer as the exact decoder applied to the rational value of that input.
Answer \(k\) beats answer \(j\) when \(\langle \bar y, a_k - a_j\rangle\) is positive, or zero with \(k < j\). For AXES, TETRA and OCTA, every difference \(a_k - a_j\) has at most two nonzero entries, all of the same size. So each test is the sign of \(\pm y_i\) or of \(\pm y_i \pm y_j\). Negation is exact. Under IEEE round-to-nearest, \(\mathrm{fl}(u+v)\) has the sign of \(u+v\): rounding never crosses zero, a nonzero sum never rounds to zero (subnormals keep it), and an exact zero stays zero. CUBE’s differences can have three entries, so it is decoded by its signs directly, which is the same argmax with the same tie rule.
The control shows this is not free: the naive decoder, argmax of float dot products, disagrees with the exact one on boundary cases (live count below).
D3 · Symmetries permute the answers PROVEN
For each rotation \(g\) in \(G_A\), the rotations among the 24 signed permutations that map \(A\) to itself, let \(\sigma_g\) be the permutation with \(g a_k = a_{\sigma_g(k)}\). Then \(\mathrm{dec}_A(g y) = \sigma_g(\mathrm{dec}_A(y))\) whenever the maximum is unique.
\(g\) is orthogonal, so \(\langle g\bar y, a_{\sigma_g(k)}\rangle = \langle g\bar y, g a_k\rangle = \langle \bar y, a_k\rangle\). The scores are permuted by \(\sigma_g\), so a unique maximiser \(k\) moves to \(\sigma_g(k)\). At ties the lowest-index rule is not equivariant, which is why the statement excludes them.
D4 · Every answer has the same share PROVEN
For any rotation-invariant distribution of directions, such as the uniform one on the sphere or a uniform point of the ball, each answer has probability \(1/|A|\).
\(G_A\) acts transitively on \(A\) (checked: every anchor is the image of \(a_0\)). The open region \(R_k = \{\bar y : \langle\bar y, a_k\rangle > \langle \bar y, a_j\rangle\ \forall j \ne k\}\) is carried by \(g\) onto \(R_{\sigma_g(k)}\) (D3). Rotation-invariant measures give all regions the same measure, and the ties lie on finitely many planes, of measure zero.
D5 · Global axis rotations leave B1 unchanged PROVEN
In B1 in H³, applying one rotation of \(G_{\text{AXES}}\) to every vertex’s point leaves the number of conflicting edges unchanged, off ties.
By D3 every colour \(c_u\) becomes \(\sigma(c_u)\) for the same permutation \(\sigma\). An edge \(uv\) conflicts when \(c_u = c_v\), which holds exactly when \(\sigma(c_u) = \sigma(c_v)\).
D5 names, exactly, a set of global motions the six calculations cannot see. Together with frame changes, which no decoder reads, these are the moves the coupler is free to make.
The tree in H³
Every node of the norm-5 tree has six neighbours, and H³ has exactly six signed axes. So each node sees its parent at \(-e_1\) and its five children at \(+e_1, \pm e_2, \pm e_3\), in its own frame, at hyperbolic distance \(\tau\). The root’s six children go along \(\pm e_1, \pm e_2, \pm e_3\) for the letters \(1 \pm 2i, 1 \pm 2j, 1 \pm 2k\).
A child’s frame is \(M_{\text{child}} = M_{\text{parent}}\, R_u\, B_\tau\). Here \(R_u\) is the signed-permutation rotation taking \(e_1\) to the child’s direction \(u\), and \(B_\tau\) is the boost by \(\tau\) along \(e_1\). With \(t = \tanh(\tau/2) = 3/4\):
$$\tau = \ln 7,\qquad \cosh\tau = \tfrac{25}{7},\qquad \sinh\tau = \tfrac{24}{7},$$
the (7, 24, 25) triple, so every frame is an exact rational Lorentz matrix.
E1 · Exact frames PROVEN
\(R_u\) has integer entries, and \(B_\tau\) has entries 25/7, 24/7, 0 and 1. Both are Lorentz, and products of Lorentz matrices are Lorentz.
E2 · Greedy decoding returns every node PROVEN
Decode by descending from the root: at each node, carry the query into the node’s frame and take the child direction with the largest \(\langle \bar y, u\rangle\). That is the OCTA decoder over the allowed children, and, since \(-\langle y, c_u\rangle = \cosh\tau\, y_0 - \sinh\tau\,\langle\bar y, u\rangle\), it is also the nearest child. If \(t > 1/\sqrt 2\), equivalently \(\tau > 2\operatorname{asinh} 1 \approx 1.763\), every node of every depth decodes to its own word, with no ties.
Work in Klein coordinates \(\kappa = \bar y / y_0\) of a node’s frame. Let \(C_u\) be the open octahedral cell \(\{\langle\kappa,u\rangle > |\kappa_i| \text{ for the other two axes}\}\). Choose \(\delta, \sigma > 0\) with \(\delta + \sigma = \tau\), \(\tanh\delta > 1/\sqrt 2\) and \(\operatorname{sech}\delta \le \tanh\sigma\). This is possible exactly when \(\tau > 2\operatorname{asinh} 1\): take \(\delta\) just above \(\operatorname{asinh} 1\), whose \(\tanh\) is \(1/\sqrt 2\). For \(\tau = \ln 7\), \(\delta = 1\) works.
Let \(\Omega = \{\kappa_1 \ge -\tanh\sigma\}\), the side of the plane at distance \(\sigma\) behind the node. The boost maps that plane to the one at distance \(\delta\) ahead, so \(B_\tau\Omega = \{\kappa_1 \ge \tanh\delta\}\).
(a) In the ball, \(\kappa_1 \ge \tanh\delta\) forces \(\kappa_2^2 + \kappa_3^2 \le \operatorname{sech}^2\delta < \tanh^2\delta \le \kappa_1^2\). So \(B_\tau\Omega \subset C_{e_1}\), and \(R_u B_\tau \Omega \subset C_u\).
(b) For a child direction \(u \ne -e_1\), \(R_uB_\tau\Omega = \{\langle\kappa,u\rangle \ge \tanh\delta\}\) lies in \(\Omega\). For \(u = e_1\) this is clear. For \(u = \pm e_2, \pm e_3\) it holds because \(\kappa_1^2 \le \operatorname{sech}^2\delta \le \tanh^2\sigma\).
By induction on depth, a non-root node’s subtree, in its own frame, lies in \(\Omega\): the node itself is \(\kappa = 0\), and each child’s subtree is \(R_uB_\tau\) of a set in \(\Omega\). So every descendant of child \(u\) lies in the open cell \(C_u\), where \(u\) strictly wins the argmax. The root’s six children are the same, with all six directions. Greedy decoding therefore takes the right child at every level, and the query carried into that child’s frame is again a point of the child’s subtree.
The condition is sufficient, and the runs show it is not idle. At \(t = 2/3\), just below \(1/\sqrt 2\), 192 of the 18,750 depth-6 nodes decode wrongly; at \(t = 1/2\), many more do. The live check below includes that control.
E3 · Helix B certifies the word PROVEN
The decoded word is certified as in version 1: its quaternion has norm \(5^L\), right-division returns the word, and the word is reduced (paper, Prop 5.12).
The four problems in H³
| Problem | State | Decoder | Helix B |
|---|---|---|---|
| B1 · 3-colouring | one point of H³ per vertex | AXES: the colour is the axis with the largest coordinate | exact count of monochromatic edges |
| B2 · MAX-3-SAT | one point of H³ per block of three variables | CUBE: the three truth values are the three signs | exact count of unsatisfied clauses |
| B3 · tree address | one point of H³, held in an anchor node’s frame | OCTA, greedily, down the octahedral tree (E2) | quaternion norm and right-division (E3) |
| B4 · hard-threshold net | an encoder into H³ and 8 prototypes in H³ | nearest prototype, a hard argmin | exact training errors |
B4’s nearest prototype compares four-term sums, so unlike the anchor decoders its float and exact answers can differ at near-ties. Helix B decides in exact arithmetic. As a smoke test, version 1’s step and channels already run all of these in H³ (\(d = 3\)) unchanged. That shows the code runs; it is not a benchmark.
Live checks and parity
Every property above, tested now in this browser by decoder3d.js, on seeded random instances and in exact arithmetic where the claim is exact. Each check also runs a control that must fail.
| Property | Trials passed | Control rejected | What is measured |
|---|---|---|---|
| Running… | |||
The reference’s trace reference/traces/decode3d.json holds the exact answers for boundary cases, rational points, symmetry groups, tree frames, decodes and both problems’ Helix B counts. Every line must match.
What comes next
The decoders read positions only. So in the coupler’s carry mode, where frames are transported and never fed back, the six calculations must be bit-identical to a run without the coupler. Phase C proves and tests it (K2 in Explainer 10). In steer mode, frames choose which corners are probed, so paths change. The step’s distribution stays the same only if the steered rotations are uniform overall (H4), which the preregistered round will test with a deliberately non-uniform control.
- No search results in H³ yet. The 3D simulation runs the whole system live; whether anything helps is for the preregistered round (phase E).
- The frame transport is built (phase B): the transvection between rational points is rational, so frames stay exact. See Explainer 10.
- Version 1’s results do not transfer. They are about H² and these budgets; version 2 will be preregistered separately.