Moving visuals on this page — measured at 0.26% brightness change per frame and zero flashes per second; your reduce motion setting stops them. What moves, and how it was measured

A landscape built from the Mertens function, a live Game of Life layer, and a skyline that grows from real computation. It runs continuously while on screen, and it pauses on its own whenever it scrolls out of view.

We measured it rather than guessing: the largest frame-to-frame change in average brightness is 0.26%, and it produces zero flashes per second against the threshold of three set by WCAG 2.3.1. That is well under the limit, and it is not a promise about any individual: if moving images are a problem for you, you should not have to assess ours.

Everything animated on this site honours your system’s reduce motion setting — turn it on in your operating system or browser and these pages stop moving, with nothing else lost. All the mathematics is in the text and the still figures.

The same engine, full screen

The factory that runs quietly in every footer, given the whole page.

Everywhere else on this site this is a 110px strip at the foot of the page. Here it gets the whole scene. The landscape is the Mertens function M(n), the running sum of the Möbius function μ(k), computed exactly: no floating point and no noise generator. Underneath it runs a live field of our own Game of Life rule, and on top a city grows from real computation (primality tests, gcd, 2-adic valuations). The corner readout says which integers you are looking at, and the walk moves one integer per tick.

How far M(n) can wander is exactly the content of the Riemann hypothesis, and it is also our own subject: the weighted Redheffer determinant identity we published is about det(An) = M(n). The classical identity under it, that the Redheffer matrix over any commutative ring has determinant M(n), is submitted to Mathlib as a pull request — a submission, not an accepted result; Publications shows where it stands.

Click the scene to toggle a cell. The rule is our own, B37/S2378, the same as in every footer: we found it by searching all 262,144 life-like rules for one that keeps a field alive where Conway’s settles into sparse debris, and then measured it with a census of every 4×4 seed, Conway’s rule as the control (deposited with a DOI, and drawn side by side on the Game of Life page). The mascot works here too: now and then it solves a real gcd or primality problem, and the number it gets decides which district is built up. The same idea as The Notebook, built as a city.

Every note is triggered by a real event in the scene, not a soundtrack: deliveries pick their pitch from the actual district they land in, primes always ring the same note as everywhere else on the site, and the mascot's own work gets the top of the scale, held longer.

The factory

The growth layer here is a dense field of 3px cells, stepped on every tick by the same WebAssembly module as the background of every page (checked bit for bit against the JavaScript rule), and coloured by age: bright cells were just born, dim ones have stood for a while. Click to toggle a cell, or tab to the canvas and use the arrow keys (Shift moves ten) plus Enter/Space. The skyline, terrain, and data pulses keep running on their own regardless — this page doesn't pause anything, it just gives it room. Watch the mascot: every time it notices something (its most frequent behaviour) it plants a real glider directly into the growth layer, on top of whatever you've drawn there yourself — two independent things editing the same live grid.

?

Math: the same Game of Life rule as every footer on this site (our own B37/S2378, not Conway), a terrain that is not generated at all but computed — column x is M(n0+x), the Mertens function, summed from μ(k) by the same trial-division Möbius implementation the ledger verifier exposes, in exact integer arithmetic; this used to be cosine-interpolated value noise, which looked identical and meant nothing, and on a site arguing that nothing here is decorative that was the softest target on the page. Plus real number theory (trial-division primality, Euclid's gcd, 2-adic valuation) driving what gets built — trial division, not Miller–Rabin, since the numbers tested here never exceed 400 and don't need a probabilistic test; the dedicated Miller–Rabin visualizer is where that actually runs, on numbers up to 400 digits, and Methodology is where "checked, not just asserted" is explained for the whole site, not just this page. Dev: this is the literal same script (factory.js) that runs in every footer on this site — not a separate reimplementation — just given a full-size canvas and one extra behaviour (click-to-toggle) that only activates on this page.

The living layer — a shared world

Programs found by chance, kept only if they work

Below is a population of small programs, each twelve instructions long, for a machine with eight operations and three registers. Any string of instructions is a valid program, so a random one runs. They start as noise, breed by mutation, and the ones that get more test cases right leave more children. Every visitor opens the same world: it is computed from one seed in your browser, not stored anywhere.

This is not a trained model. Nothing here fits a parameter to data or generalises beyond the cases it was checked on. It is a search through about 1028 short programs, and the only test is whether a program returns the right integer.

The open question is how far blind mutation gets. The functions on the ladder are easy to write by hand, which is why we can check them. The table measures two different things: 200 random draws of an opening population (was a solution already there?) and 20 independent runs of population 300 for up to 6,000 generations (did the search find one?). Four rungs turn up in at least a quarter of the draws, so they are luck rather than search. Three turn up in fewer than one draw in twenty and every run finds them. Two are never drawn and only some runs cross them. Two were not crossed once, and those empty rows are the result.

We first got this table wrong. The random-draw column was measured with 20 seeds instead of 200, came out zero for three rungs, and we published “never appears by chance”. With 200 draws they appear 2–4.5% of the time, and zero out of twenty is what you would expect at that rate. The check that reruns the draw before every deploy caught it.

Nothing starts until you press the button, and it stops when this panel scrolls away or the tab goes to the background. It runs inside the animation frame the page draws anyway, with a fixed budget per frame: no worker thread, no polling, one request at the start and one per discovery.

“Passed” means passed its declared cases. It does not mean it computes the function. The first entry in this ledger showed it. A genome from a visitor’s browser passes all seven cases of Triangular (the largest is n = 10), agrees with the triangular numbers up to n = 11, and returns nothing from 12 on. That is structural: its loop runs n times and the machine halts everything at 64 steps, so no genome here can ever get further. Each entry now shows how far it really agrees, worked out when it is read. It is the same gap, between checked cases and the truth, that our registry keeps a certainty level for.

When a program passes every case, your browser sends it and the server runs it again. It is stored only if it passes there too. Entries are chained, each one hashing the one before, so nobody, us included, can remove an entry or backdate one later.

No name is attached to anything. The ledger records the discovery, not who made it: a name box would be personal data, and this site collects none.

?

Math: a register machine with eight operations, three registers and a conditional jump that goes both forwards and backwards. The backward jump is what makes loops possible at all, and it was missing from the first version — which is how a rung whose description said “needs a working loop” came to be advertised as merely hard when it was impossible. A measured run caught it: that rung scored 0 out of 5 while a supposedly harder one scored 5 out of 5. With the jump fixed it is crossed 3 times in 20. Method: the search column is 20 independent runs, population 300, up to 6,000 generations each — 140 million program runs; the draw column is 200 independent opening populations. Nothing on this page is an estimate, and where an estimate slipped in it is written up above rather than quietly corrected. Dev: this site has no bundler, so the virtual machine exists three times: as a module the Worker imports, as a plain script in your browser, and — since August 2026 — as a 533-byte WebAssembly binary compiled from a hand-written text-format source, which your browser uses when it can and quietly skips when it cannot. If any copy ever disagreed with another, this page would submit programs the server refuses. an automated check runs the two JavaScript machines against each other before every deploy, and another runs the binary against the browser copy on thousands of random genomes plus the exact arithmetic boundaries — the multiplication-overflow edge included, where a careless port would wrap where JavaScript saturates. Three machines, one behaviour, and none of it taken on trust.