The mascot

It does not animate. It obeys laws that can name themselves.

The small creature that follows you around this site is not playing a canned loop. Every move it makes is a real equation, solved in your browser as it happens — and it can tell you which equation, and with what numbers. This is its page: watch the laws one at a time, ask it why, and check the figures against the mathematics yourself. Click the creature itself, wherever it is, and it answers.

Ask it why

Drive a law, then read what it just did

These buttons run the very same functions the mascot runs on its own — not a separate demo. After each one, it records the law it used with the actual constants, and that record is what appears below. Clicking the creature in the corner does the same thing: it is the only floating control on the site, because a law that can state its own name did not need a button bolted on beside it.

Give it a push, or click the creature, and it will explain itself here — with the numbers, not adjectives.

Nothing here is random. The same button gives the same kind of motion every time, because there is no random number anywhere in the rule — only the equation and the constants it carries.

The laws of motion

Eight equations, each one measured before it was believed

Every law here is checked, not asserted: an automated test takes the same pure function the mascot uses and measures the property that names it — the period, the Lyapunov exponent, the spiral’s constant angle — against the equation, before any deploy. The site does not move the creature in a way it has not verified.

Damped harmonic motion

m ẍ = −kx − c ẋ

The restoring force underneath everything: after any excursion it is pulled home by a spring with drag. The damping ratio is below 1, so it overshoots and settles rather than sliding flatly in — that small bounce on arrival is a consequence of the number, not an added effect. Its natural period, 2π√(m/k), is its temperament: stiffer means quicker.

Ballistic arc

y = y₀ + v₀t − ½ g t²

One constant force downward, and nothing steering it after the push. It peaks at t = v₀/g and the way down mirrors the way up. Fit a parabola blind to the path it draws and the quadratic coefficient comes back as −g/(2vₓ²) to eleven decimals — the curve really is a degree-two polynomial, not a shape that resembles one.

Deterministic chaos — Lorenz

ẋ = σ(y−x),  ẏ = x(ρ−z)−y,  ż = xy − βz

It drifts along the Lorenz attractor, and there is no random number in any of it. Two creatures starting a millionth of a unit apart end up in different places, because the error grows like e0.9t. The measured Lyapunov exponent is about 0.9 per unit of time, matching the classic value — sensitivity to initial conditions, not chance.

Logarithmic (equiangular) spiral

r = a ebθ

The angle between the radius and the curve is the same at every single point — near the centre or far from it — and that constancy is its theorem. It is why zooming into one gives you the same spiral back, the same self-similarity the whole descent behind this site is built on. The checker measures that angle at twenty points and it does not budge.

Lissajous figure

x = A sin(at + δ),  y = B sin(bt)

Two perpendicular oscillations, and the ratio of their frequencies decides the entire shape. A rational ratio closes into a fixed figure; an irrational one never closes and fills the rectangle without ever repeating. You can even read the ratio off the drawing: it touches the side a times and the top edge b.

Chemotaxis, up a real field

v⃗ ∝ ∇V

The one law that does not depend on the creature alone. In the Approach section of the homepage a Gray-Scott reaction-diffusion field (coloured per-pixel in the Oklab space of Björn Ottosson) runs on your graphics card; there, the mascot reads the gradient of that field at the cell it is standing on and walks uphill, its step proportional to the measured gradient — what a bacterium does in a nutrient gradient. It only fires where the field runs, and says nothing where it does not, because a move that claims to depend on a measurement cannot happen where there is no measurement to read.

Fourier series — its own outline

z(t) = ∑|k|≤N ck e2πikt

Press Draw its outline and the mascot traces the KodamaSEC gem — its own silhouette — as a sum of N circles turning at whole-number speeds, which is a Fourier series. With ten circles the trace lands within 0.3 px (root-mean-square) of the real outline; add more and the error falls toward zero — that is convergence, not a fudge. The checker recomputes the discrete transform and measures the error dropping as circles are added, and that the curve closes exactly because the series is periodic.

Collatz hops — its own orbit, jumped

T(n) = n/2 (even), 3n+1 (odd)

Press Hop its Collatz orbit and the mascot jumps along the very orbit its metabolism is walking (the seed is this page, measured): one hop for every climb, 3n+1, with the height of each landing set by log2 of the value against the orbit’s own peak, and the last landing at 1, height zero. Nothing is chosen: the number fixes the orbit, the orbit fixes the hops. It also does this on its own: each time its metabolism falls into 4 → 2 → 1, it jumps the orbit it has just walked. The record it leaves counts the steps, the peak, and how many halvings followed each climb — the histogram of 2-adic valuations that our first Collatz paper measures (about half the climbs are followed by one halving, a quarter by two, and so on). An automated check recomputes the orbit of 27 (111 steps, peak 9,232), 97, 871 and 6,171, and checks that geometric law over the first five thousand seeds. Whether every orbit reaches 1 is the open conjecture; a hop that ends at 1 is not evidence about it, and the record says so.

What runs without a button

Four more things it is doing right now, and had never said

The laws above are the ones you can drive. Underneath them the creature runs four more pieces of mathematics that this page did not mention until 19 September 2026 — not because they were hidden, but because nobody had written them down here. Each card reads the live state from the same script that runs it; where a number is fixed, it is the number in the code, and automated checks recompute it before any deploy.

Metabolism — a Collatz orbit as its heartbeat

Its mood is not a mood picker. On arrival it measures this page — elements in the DOM, characters of text, pixels scrolled — sums them into a seed n₀, and then walks the Collatz map from there, one step every ~0.9 s: an odd value becomes 3n+1 (a surge: it brightens), an even one halves (a descent: the excitement decays by a factor of φ). Its size and glow read log n / log peak, the height of the current value against this orbit’s own high-water mark. Every tested orbit falls into 4 → 2 → 1, and there it breathes until you scroll or move the pointer, whose measured size becomes the next seed. Seeds are capped at 200,000, where every value an orbit can reach is still an exact integer in a double. This is a finite orbit used as a clock, and it is not evidence about the Collatz conjecture in either direction.

Reading the orbit…

Navigation — Poisson disc, then A*

Where it walks to is not a random dart. Each move samples the free area of your viewport with Bridson’s Poisson-disc algorithm (no two candidates closer than max(0.9×its width, 120) px, twelve attempts per point, a deterministic mulberry32 stream so the same seed gives the same set), picks a candidate, and then finds the path on a 64 px grid with A*: eight neighbours, cost 1 orthogonally and √2 diagonally, a Euclidean heuristic that never overestimates — so the path it takes is a minimum-cost path, the same one Dijkstra would find, explored only towards the goal. Cells that would cover your text are marked impassable, and it never cuts a corner between two of them. An automated check compares its cost with an independent Dijkstra on every deploy.

Reading the last route…

Skin — the site’s own cellular automaton, or Turing spots

The texture on its face is computed, not painted. Half the time it runs the KodamaSEC rule B37/S2378 — born with 3 or 7 neighbours, survives with 2, 3, 7 or 8 — the automaton found by exhaustive search over all 262,144 life-like rules because it keeps a population alive from a random soup where Conway’s settles into sparse, static debris (soup density 0.122 against 0.052); it is the same rule that runs in the background of every page and in the Factory (until 19 September 2026 the skin still ran Conway’s B3/S23 while the rest of the site had moved on: the checker now cross-checks the two). The other half it runs Gray–Scott reaction–diffusion at F = 0.035, k = 0.065, the regime that forms stable Turing spots — literally the mathematics of an animal’s coat — with the same discretisation as the field on the front page. Reduced motion gets a single seeded frame that never evolves.

Reading the skin…

Branch — an L-system that grows

The sprig on the gem is a Lindenmayer system: axiom X, rules X → F−[[X]+X]+F[+FX]−X and F → FF, three rewrites, then a turtle that draws a segment for every F, turns 22.5° on + and −, and pushes and pops a branch on the brackets. The string is exact and the count of segments is a theorem of the rewriting, not a drawing decision; the line below recomputes it from the same two functions the mascot exposes.

Recomputing the plant…

The researcher’s notebook

It investigates, and writes down what happened

Everything above is a law the creature obeys. This is the part where it does what the software behind it does for a living: it takes a claim, tests it on numbers it did not choose, and records a verdict it cannot flatter. There are two verdicts and neither is “proved” — the same letters the findings registry on /challenges uses, minus the one only Lean’s kernel can award. V — held means every input tried passed, and the entry says exactly which inputs those were: a window is a window, and the claim stays open. X — refuted means one counterexample was found, and it is written down with the numbers so you can check it by hand. Some claims in the catalogue are true as far as anyone knows, some are famous mistakes, one is a theorem proved with Lean’s kernel, one nobody here knew the answer to before this ran, and one is about this site’s own instruments; the notebook does not know which is which. The test decides.

The inputs come from a seed — the number the creature’s metabolism reads off this page, or the page’s size where the creature is not running — so the same seed replays the same investigation. One investigation runs on each visit; the button runs another, and you can choose the seed yourself. The notebook is yours: it is kept in this browser (ksec_notebook, at most 40 entries) and nowhere else, and nothing is sent.

A seed is a whole number from 1 to 4,294,967,295. The same seed runs the same test on the same numbers, here or in anyone else’s browser, and /mascot?seed=27 replays it from the address bar; which claim it lands on depends on how many entries this notebook already holds.

Reading the notebook…

The catalogue, so nothing is hidden: whether every number in a window of a thousand reaches 1 under Collatz; whether one halving follows a climb about half the time; whether the steps to 1 never decrease from n to n+1; whether an orbit’s peak stays below n²; whether 2p − 1 is prime for prime p; whether n²+n+41 is always prime; whether every even number in a window of two thousand is a sum of two primes; whether a random soup under the site’s rule B37/S2378 is still alive after 500 generations; whether such a soup ever fills more than 60% of its torus; one that is a theorem — the Noether–Lefschetz window C(d−1, 3) − (d−3) equals A005581(d−3), proved for every d and registered in the Lax Lean Archive, so a V is the exact computation agreeing with the proof and an X would be a bug on this page, which is what a proof buys; and one about the site itself — whether every object in the shared Life catalogue, as the server measured it, respects the rule’s speed limit (nothing moves more than one cell per generation) and has at least three cells. That one reads the shared catalogue at the moment it runs; an X there would mean the server’s detector is wrong, which is the kind of thing a notebook is for. Two more watch the plumbing: whether the Mathlib feed behind /publications and the Kaggle standing on /challenges were refreshed by their scheduled jobs within the last 24 hours and are whole — a job can die quietly and a page will keep serving its last value with a straight face, so the feeds carry their own timestamps and the notebook reads them. An automated check runs the same catalogue under Node on fixed seeds and pins what each one must find.

What it is not

Deterministic mathematics, not a trained model

Every one of these is a closed-form equation or an exact integrator, seeded the same way each time. There is no neural network behind the creature, no training data, nothing learned — which is precisely why it can always tell you the rule it just followed, to the constant. That is also why it is honest to say so plainly under the EU AI Act: it is a gcd, a primality test, a 2-adic valuation and a handful of differential equations, rendered as motion, and nothing more.