Does one purely local constraint — a walker that may never revisit a site, the minimal model of a polymer that cannot pass through itself — change the walk's GLOBAL geometry, i.e. swell ⟨R²⟩ ∝ N^{2ν} from the diffusive ν = 1/2 to a genuinely new universal exponent?
Units: dimensionless (Flory exponent ν, ⟨R²⟩ ∝ N^{2ν}, 2-D square-lattice SAW; secondary knowns: RW ν = 1/2 exact, 3-D SAW ν = 0.587597(7))
▶ Run this simulationRead how it works
One local rule — never step on yourself — moves a walk to a new universality class: with the generator coding ONLY nearest-neighbour steps, a visited-site hash, and the lattice's own symmetries as pivot moves (no exponent, no power law anywhere), the uniform SAW ensemble returns the Flory exponent ν = 0.74939 ± 0.00331 vs Nienhuis' EXACT 2-D value 3/4 (0.2 SE, rel 0.08%); the identical machinery with the constraint off gives ν = 0.50031 ± 0.00028 (diffusion, exact 1/2) — the rival 'a walk is a walk, only the prefactor changes' is rejected by 880σ, an exponent gap no prefactor can bridge (⟨R²⟩ ratio already 19.5× at N = 566 and diverging); the dimension sweep tracks excluded-volume theory (cubic lattice ν = 0.59412 ± 0.00176 vs Clisby 0.587597, +1.1% disclosed corrections floor); and the biased kinetic-growth sampler reads 0.640, 120σ low — uniform-ensemble sampling (Rosenbluth's 1955 point) is load-bearing
Generator = the pivot algorithm (Madras–Sokal 1988) coded from local ingredients only: a fixed-N walk starts as a straight rod; each move picks a random interior site and applies a random non-identity lattice point-group symmetry (7 elements in 2-D, 47 signed permutations in 3-D) to the tail, accepting iff the result never revisits a site (hash-set check). This Markov chain samples the UNIFORM fixed-N SAW ensemble. ⟨R²⟩ is the sample mean of the squared end-to-end distance at N ∈ {25…566} (geometric grid), 12 seeds × 3000 samples per N, thermalized 2N accepted pivots. ν is the lnN-coefficient of the fit ln⟨R²⟩ = c + 2ν lnN + b/N — the 1/N term is the standard ANALYTIC finite-chain correction, justified in 2-D because the leading non-analytic correction exponent Δ₁ = 3/2 is subleading to 1/N; without it the plain slope reads 0.7458 ± 0.0010, a −0.6% corrections floor (measured, disclosed). Gates: (A) 2-D ν = 3/4 (tol 1.2% ≈ 3.5 SE); (B) RW control ν = 1/2 exact, constraint switched off, same machinery; (C) rival falsified ≥ 50σ both directions; (D) unweighted kinetic-growth sampling reads ν ≥ 20σ below 3/4 (estimator honesty); (E) dimension sweep — cubic lattice ν vs Clisby 0.587597 within the disclosed +1% effective-exponent floor, ordered ½ < ν₃ < ν₂; (F) ⟨R²⟩_SAW/⟨R²⟩_RW rises monotonically (relevant perturbation, not prefactor); (G) module mirror — exact replication of the on-screen Rosenbluth computation for pinned seeds, displayed digits scrape-verified; (H) scoring self-test. 3/4, 1/2 and 0.587597 are loaded from the reference ONLY to score.
Nienhuis (1982), Coulomb-gas solution of the O(n→0) model: the 2-D self-avoiding walk has ν = 3/4 EXACTLY (Flory's mean-field 3/(d+2) happens to be exact in d = 2). The unconstrained walk has ⟨R²⟩ = N exactly (ν = 1/2). In 3-D the same constraint gives ν = 0.587597(7) (Clisby 2010; Flory's 3/5 is close but not exact).
8/8 pass in 18.1 s; tamper (known_value → 0.6) ⇒ gate A FAIL with recovered ν = 0.74939 unchanged, exit 1
The exactly-solved 2-D self-avoiding-walk critical exponent ν = 3/4 (Nienhuis 1982, Coulomb-gas / O(n→0)) and its excluded-volume dimension dependence (Clisby 2010 in 3-D; Flory 1953 mean-field), sampled by the Madras–Sokal pivot algorithm. Non-circular because the generator codes ONLY the local step set, the self-avoidance hash, and lattice symmetries as pivot moves: no exponent, no ⟨R²⟩ ∝ N^{2ν} law, and no polymer theory enters generation or measurement — ν is a plain regression coefficient and every known value lives exclusively in the scorer. The recovery is sharper than a 'the coil looks bigger' demo: it pins the exponent to 0.08% of an EXACTLY known nontrivial critical exponent (one of very few in physics), separates it from the diffusive class by hundreds of SE under identical machinery, and shows the exponent tracks dimensionality. Two disclosed estimator facts, both measured rather than hidden: (1) the plain log-log slope at N ≤ 566 carries a −0.6% analytic finite-chain correction, absorbed by the theoretically-justified 1/N fit term (2-D's non-analytic Δ₁ = 3/2 is subleading); (2) the module's on-screen Rosenbluth estimator at N ≤ 60 reads ν ≈ 0.71–0.73 (−2 to −4% vs the oracle) from short-chain corrections plus the Rosenbluth ratio estimator's fat-tail undersampling bias — which is also why the oracle uses the pivot sampler rather than inheriting the module's estimator. Limits: the 3-D gate has a +1.1% effective-exponent floor at N ≤ 400 (leading correction N^{-0.528}) and cannot distinguish Flory-3D 0.6 from the exact 0.5876; the connective constant μ and the enumeration exponent γ are not measured here; the kinetic-growth walk's own asymptotic class is not resolved (it is gated only as a biased SAMPLER of the equilibrium ensemble at N ≤ 60, ν_eff ≈ 0.64).
The on-screen SelfAvoidingWalkModule measures the SAME observable (⟨R²⟩(N) log-log slope) but with the Rosenbluth-weighted growth estimator at N ≤ 60 (13000/11000/13000 walks, fit window [10,60]) — historically apt (it is the 1955 polymer-MC estimator) but doubly biased at these settings: short-chain corrections plus the fat-tail undersampling of the Rosenbluth ratio ⟨WR²⟩/⟨W⟩ read the 2-D exponent −2 to −4% low. The derisk QUANTIFIES this instead of hiding it: gate G replicates the module's computation exactly (same mulberry32 chain seeded seed^(0x9e3779b9·(s+1)), same constants) for pinned seeds 7/3/11, predicting displayed ν_2D = 0.731/0.719/0.713 (band [0.70, 0.76]), ν_RW = 0.506/0.498/0.502 (band [0.48, 0.52]) — and the seed-7 prediction was scrape-verified against the live page (npx vite preview + playwright ?world=saw&seed=7: on-screen '0.731 / 0.599 / 0.506' matches the mirror digit-for-digit). The module itself already discloses the sampling-bias story on screen: it prints the unweighted kinetic-growth contrast (seed-7 display 0.642, mirroring the oracle's 0.640 rival gate) next to its Rosenbluth value, showing the viewer that HOW you sample changes the exponent you read. No module code was changed this run — the world climbs no-oracle → validated; tightening the on-screen estimator toward the pivot value (longer chains or a corrected fit in the module, rung 6 honest-module work) is left as the next refinement.
npm run derisk -- saw (scripts/saw-derisk.mjs)scripts/oracles/saw.reference.jsonB. Nienhuis, Phys. Rev. Lett. 49, 1062 (1982); P. J. Flory, 'Principles of Polymer Chemistry' (Cornell, 1953); N. Madras & A. D. Sokal, J. Stat. Phys. 50, 109 (1988); N. Clisby, Phys. Rev. Lett. 104, 055702 (2010); M. N. Rosenbluth & A. W. Rosenbluth, J. Chem. Phys. 23, 356 (1955).