Hyperbolic PolyStep · Explainer 9 · Version 2, phase A

The 3D Decoder

Version 2 moves the search into three-dimensional hyperbolic space and binds two memory structures of three engines each through a coupler that turns frames, never positions. The decoder is the interface that makes this possible: it reads where a point is and nothing else, exactly, so no turn of a frame can change an answer.

The decoder, live in 3D Version 2 design The tree in H³ Live checks
live checks: running… parity: checking… 4 anchor sets · τ = ln 7 tree
Contents
  1. Where this sits
  2. Version 2 in one picture
  3. The anchor decoder
  4. Live in 3D
  5. D1–D5, proved
  6. The tree in H³
  7. The four problems in H³
  8. Live checks and parity
  9. What comes next
01

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.

02

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.

STRUCTURE 1 STRUCTURE 2 Three engines A B C own 24-frame clock and pumpown SHA-256 memory chain Three engines A B C own 24-frame clock and pumpown SHA-256 memory chain 3D decoder · this pagepositions → answers, exactly 3D decoder · this pagepositions → answers, exactly Coupler frames only · invisible to all six steercarry twist w → w⁻¹ h₁ · h₂ = 1, exactly checked like the pump, every zero point Solid: a twist leaves a structure. Dashed: its inverse arrives at the other. The decoders read positions only, so no frame change, steered or carried, can change any of the six calculations’ answers. steer: frames choose the next polytope rotation · carry: frames are transported and never fed back
The design settled for version 2: two structures times three engines, and a coupler with a steer/carry switch.
PhaseDeliversStatus
A · 3D decoderThis page: anchor decoders, the octahedral tree in H³, the four problems in H³, live checks, paritydone
B · Frame layerQuaternion frames carried exactly by transvections, with no square root; the twist of a move is a triangle’s areadone
C · CouplerThe mirror law with the steer/carry switch; the binding checked exactly at every zero point; carry bit-identical to no couplerdone
D · Two structuresTwo tri-channels in H³, each with its own memory chain, bound only through the coupler; the 3D simulationdone
E · Preregistered runsA new preregistration with controls: coupler off, carry only, a deliberately non-inverse transfer, gauge changes on one structure onlynext
03

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:

SetAnchorsAnswersSymmetry group \(G_A\)Used for
AXESe₁, e₂, e₃33 rotations (cyclic)B1, 3-colouring
TETRA(1,1,1), (1,−1,−1), (−1,1,−1), (−1,−1,1)412 (the tetrahedral group)4-colouring
OCTA±e₁, ±e₂, ±e₃624 (the octahedral group)B3, the six neighbours of a tree node
CUBE(±1, ±1, ±1)824B2, 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.

04

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.

The anchor decoder in H³
 
05

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.

06

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 octahedral tree in the Poincaré ball
 
07

The four problems in H³

ProblemStateDecoderHelix B
B1 · 3-colouringone point of H³ per vertexAXES: the colour is the axis with the largest coordinateexact count of monochromatic edges
B2 · MAX-3-SATone point of H³ per block of three variablesCUBE: the three truth values are the three signsexact count of unsatisfied clauses
B3 · tree addressone point of H³, held in an anchor node’s frameOCTA, greedily, down the octahedral tree (E2)quaternion norm and right-division (E3)
B4 · hard-threshold netan encoder into H³ and 8 prototypes in H³nearest prototype, a hard argminexact 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.

08

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.

D1–D5 and E1–E3 in this browser
PropertyTrials passedControl rejectedWhat is measured
Running…
 
Parity with the Python reference

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.

Loading the trace…
09

What comes next

The contract this phase fixes

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.

Not claimed here
  • 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.