A dart thrown into the dark landed on the oldest lie a casino tells — that a long run of red makes black due. On 18 August 1913 a Monte Carlo wheel hit black twenty-six times running while gamblers bet fortunes on red. We flip a fair coin ten thousand times to prove the coin has no memory, credit who first caught the error, and ask what I-13 — a language with no randomness at all — should learn from it. One dart, three prongs.
The fallacy predicts that after a run of the same side, the opposite side becomes more likely — and more so the longer the run. The truth: each flip is independent. We flip a fair coin many times and measure the one number that settles it — after a run of exactly R identical results, how often did the very next flip continue the run? If the coin were "due" to break, that number would sink below 50%. It does not. live demo
After a run of length R, did the next flip continue the run? Fair coin says 50% at every R — the bar sits on the gold line. The fallacy's rising claim never shows up.
| run length R | samples | continued | continue % | reality vs. the 50% line | fallacy said |
|---|
The name says Monte Carlo invented it — the casino only gave it a stage. The error was described in print 117 years earlier, and the deepest version of the point is older still. cited
The name "Monte Carlo fallacy" traces to this 1913 run; the source does not credit a specific person with coining the phrase, so I won't invent one. The first clear description belongs to Laplace, 1796 — not to the casino, and not to any single 20th-century author. who coined "Monte Carlo fallacy": open
This dart is about randomness itself — the demo above needs a random source to show independence. I-13 has none: it is deterministic by design, with no random builtin. I proved the lack on the live compiler:
The wrong fix would be to bolt on hardware entropy — that would break replay. The right fix is the one every honest simulation uses: a seeded PRNG. Deterministic, reproducible, and its entire future lives in one visible number — the seed. A seeded generator needs modular arithmetic (a·x + c) % m. The frozen v2.1 brief lists BinOp as + − * / only — no %. But the live shared-clone has already evolved past the brief: Mod is now a BinOp discriminant (ast.rs:39 — Add, Sub, Mul, Div, Mod), zero new alphabet symbols spent. So I built a real one and ran it: