One-ring winding logic holds under a slower integrator, but its full coverage needed an instruction we do not have
A ring of 16 coupled phase oscillators has stable twisted states, labelled by an integer winding number q. Used as a register, three input bits each choose one of two instructions — a localised erase kick or a phase-ramp write — and the output is read from the final q. The question is which of the 256 three-input Boolean functions one ring can compute.
The integrator is not the story
Every result was re-run with the slow reference build (step 0.02 instead of 0.50, library sin instead of a polynomial, no early-exit lock test).
| fast build | reference build | |
|---|---|---|
| functions, any readout, lens 0.05–0.65 | identical | identical |
| noise-robust functions (32/32 trials, σ = 0.15), no lens / lens ≥ 0.15 | 240 / 248 | 240 / 248 |
| 400 random 3-step words under σ = 0.15, robust entries only, no lens / lens 0.50 | 399 / 399 | 398 / 399 |
The only disagreement is 8 of 455 table entries: a write from the marginal state |q| = 3. The fast build folds the ring back to q = ±1; the reference build finds no valid state. The reference build is right — the fast step size is too coarse at the edge of stability.
The coverage depended on the sign of the write
The first run of this experiment used a write that could add or subtract one twist. The machine's own instruction set — the virtual processor and the assembler — defines write as +1 only. Swapping in the real definition:
| write instruction | functions, any readout (best lens) | late-selector multiplexers |
|---|---|---|
| ±1 ramp, 8 sites (first run) | 256 / 256 | 8 / 8 |
| the instruction set's own ramp shape, 8 sites, with a −1 mirror added for comparison | 256 / 256 | 8 / 8 |
| the instruction set's own ramp, +1 only | 232 / 256 | 0 / 8 |
Ramp shape changes nothing; the sign changes everything. With the real instruction set, 24 functions are unreachable even before any noise filter — among them every multiplexer whose selector bit arrives last.
A caution on the robust counts
"Robust" here means an entry passed 32 of 32 noisy trials. Entries with a true pass rate near 97% pass or fail that test by chance. Re-drawing the noise seven times left the any-readout counts unchanged, but one readout's count at lens 0.50 came out 182 in five draws and 94 in two. Quote such counts with their spread.
Measured on an Intel Core 3 100U laptop CPU (8 threads, no GPU), gcc 15.3, -O3. Instruments: fork_logic.c and fork_lens.c, built on the published ring_furnace.c; raw outputs and full results in research/forks.
