A 600 KB model that answers by looping a single block in latent space instead of writing out its reasoning. Turn the depth knob up and it thinks longer — you'll never see a single token of that thinking, only the loop counter ticking and the final digits landing. That's not a UI choice: the architecture has no chain-of-thought channel to expose.
Two numbers up to 5 digits each. The model never sees an intermediate carry, a scratchpad, or a reasoning token — only the input digits and, after r loops, the output digits.
Loading 153K trained parameters…
Exact-match accuracy on held-out problems, by loop count and by how many digits the problem has. Trained only up to depth 8 (dashed) — past that the model is extrapolating, and you can see exactly where it stops paying off.
Harder (longer) problems need more loops before they saturate; easy ones peak almost immediately.
The prelude embeds the input once. The core
block then re-reads its own previous state r times — the
original embedding is re-injected at every pass so the state doesn't drift as
r grows, the trick that lets one set of weights work at any test-time
depth. Only the coda's single pass is ever turned into logits. There is no
step in between where a token could leak out, because no step in between
produces tokens at all — the answer is predicted all at once, not
word-by-word.