Can a trivial 8-bit local update rule generate a genuine fractal with an exact non-integer dimension — and is that dimension set by the rule's Boolean arithmetic rather than by the fact that it grows a triangle?
Units: dimensionless (fractal dimension D = log₂3 of the Sierpiński gasket / rule-90 spacetime; secondary knowns: rule 254 solid triangle D = 2 exact, rule 30 centre-column density → 1/2)
▶ Run this simulationRead how it works
A one-line 8-bit local rule paints an EXACT fractal, and which one is picked by the rule's Boolean arithmetic: Wolfram's rule 90 (new = left XOR right) grown from a single seed reproduces the Sierpiński triangle, and a plain log–log slope of live-cell mass vs rows returns D = 1.5849625007 vs log₂3 = 1.5849625007 — an exact recovery to 10 digits, because the generated M(2^k) = 3^k identically (no 3^k, no log₂3, no gasket formula anywhere in the generation); the same summing machinery on rule 254 (new = l OR c OR r, no cancellation) fills a SOLID triangle at D = 2.000000, 0.415 away, and on rule 250 (rule 90's own two-cell neighbourhood with XOR swapped for OR) the self-similar holes fill in to D = 1.939 — so the non-integer dimension is manufactured specifically by the XOR's cancellation, not by triangular growth; a dense-L windowed ensemble reads 1.57950 ± 0.00063 (−0.35% lacunarity bias, disclosed) and the exponent is scale-free (shallow band L 2..32 and deep band L 16..512 both return log₂3 to 1e-6); rule 30's centre column, Wolfram's random-number generator, has density 0.50098 → ½ and fills to D ≈ 2 — chaos, not a fractal: the rule, not the geometry, selects the Wolfram class
Generator = the elementary-CA step only: next[i] = bit (l·4+c·2+r) of the 8-bit rule number, with l/c/r the left/self/right cells and fixed-0 boundaries (the module's verbatim _step), grown from a single centred seed on a boundary-free grid of width 2T+3 (light cone never touches a wall). The fractal dimension is a plain OLS log–log slope of the cumulative live-cell mass M(L) in the first L rows versus L — no 3^k, no log₂3, no Sierpiński or dimension formula appears in the generation or the measurement; all known numbers (log₂3, 2, 1/2) are loaded from the reference ONLY to score. Gates: (A) HEADLINE — rule-90 dyadic mass-scaling D vs log₂3 to <1e-6 rel (an exact recovery: M(2^k)=3^k identically); (B) UNCERTAINTY — a 7-window dense-integer-L ensemble reports mean ± SE and the worst single window (rule 90 is deterministic — a single seed IS the whole input — so the ensemble is over fit windows and the residual bias is the gasket's log-periodic lacunarity, quantified not hidden); (C) PERTURBATION — scale-band invariance: shallow (L 2..32) and deep (L 16..512) dyadic bands each recover log₂3 and agree to 1e-6, i.e. a scale-free exponent with no crossover length; (D) RIVAL — the identical estimator on rule 254 (l OR c OR r, no cancellation) must return D = 2 (solid triangle) and separate from rule 90 by > 0.4; (E) MECHANISM — rule 250 (l OR r, rule 90's neighbourhood with only the Boolean operator changed) must read D ≈ 1.94 > rule 90, isolating XOR cancellation as the cause of the holes; (F) CHAOS — rule 30's centre-column density → 1/2 (Wolfram's RNG column); (G) SCORING SELF-TEST — hand-tampering known_value flips the score gates to FAIL with the recovered D byte-unchanged.
The Sierpiński gasket has Hausdorff = box-counting dimension D = log 3 / log 2 = 1.5849625… (self-similar under 3 half-scale copies). Rule 90 (new_i = row_{i-1} XOR row_{i+1}) from a single seed is Pascal's triangle mod 2, whose live cells ARE the gasket: M(2^k) = 3^k exactly (Kummer/Lucas: the odd-entry count of row n is 2^{popcount(n)}, summing to 3^k over the first 2^k rows), so M(L) ∝ L^{log₂3} with no free constant. Rule 254 fills every interior cell → M(L)=L^2, D=2. Rule 30 is chaotic (centre-column density → 1/2, Wolfram's RNG).
12/12 pass in ~0.5 s (science A–G + module-honesty certificate H–L); tampers all exit 1: known_value → 1.25 ⇒ A+B+C+K FAIL with recovered D byte-unchanged at 1.5849625007; certificate sha flip ⇒ only H; certified static grow_dt 0.07 → 0.05 ⇒ H+J (the execution gates are not vacuous)
The exact fractal dimension of the Sierpiński gasket, D = log 3 / log 2 = 1.5849625… (Sierpiński 1915; Falconer, 'Fractal Geometry' Ch. 9; Mandelbrot 1982), reached through rule 90 = Pascal's triangle mod 2 (Wolfram, 'A New Kind of Science' Ch. 3; odd-entry count 3^{popcount}, Kummer 1852 / Lucas 1878). Non-circular because the generator is the bare CA lookup next[i] = bit(l·4+c·2+r) of the rule byte from a single seed, and D is a plain log–log slope of counted mass vs rows: no 3^k, no log₂3, no gasket or dimension formula ever enters the generation or the measurement — the known value lives only in the scorer, proven by the tamper self-test (change it and the recovered D is byte-identical while the score gates flip). The recovery is sharper than 'the picture looks like a gasket' in two ways: it returns the dimension to 10 digits (M(2^k)=3^k is an identity, not a fit), and it demonstrates the CAUSE — the same estimator sends rule 254 (no cancellation) to the integer dimension 2 and the minimal XOR→OR twin rule 250 to 1.94, so the non-integer value is produced specifically by the XOR's annihilation of paired live neighbours, not by the triangular envelope every one-seed rule shares. Limits: 'exact' applies to the dyadic scales L=2^k where the odd-entry identity holds; a dense-L slope over arbitrary L reads 1.5795 (−0.35%) because the gasket has log-periodic lacunarity that shifts non-dyadic sample points off 3^k (disclosed, gated, and the reason box-counting — which biases ~8% low here at reachable sizes — was NOT used). Rule 30's density → 1/2 is empirical (Wolfram's conjecture, slow oscillating convergence: 0.479 at T=1024 rising to 0.505 at T=16384), gated at ±0.02, not claimed as a proven exact constant.
The on-screen CellularAutomataModule computes and displays the SAME headline the oracle gates: _dimMeasured is the OLS slope of ln M vs ln L over dyadic L = 2…512 (its _measure() verbatim), i.e. gate A's estimator, and it prints 'rule 90 FRACTAL D=1.585 = log₂3 (Sierpiński)' — the displayed 1.585 IS the exact oracle value, so the screen and the oracle agree at the digit level for the fractal dimension. Two disclosed screen-vs-oracle deltas, both finite-height: (1) the module measures rule 30's centre-column density at Tr = 1024, where the value is ≈0.48 and it displays 'density 0.48' — the asymptotic ½ (0.501) only appears by T ≈ 8192, so the on-screen 0.48 is a finite-height undershoot of a slowly, oscillatingly converging constant, not a discrepancy in the physics; the oracle gates the T=8192 value and states the convergence explicitly. (2) The module renders the live triangles on a 113×56 display grid (cosmetic) while the measurement runs on a separate boundary-free 1025×512 grid, so the painted panels never contaminate _dimMeasured. As of the honest-module certificate (derisk gates H–L, zero module edits), none of this is taken on trust: the derisk EXECUTES the shipped CellularAutomataModule.ts (sha256-pinned, mechanically TS-stripped via 29 exact pairs, run under new Function with Babylon/DOM recorder stubs) and proves (H) init() builds the real screen — 3 thin-instance panels, HUD, chart SVG, camera pose, statics === reference; (I) the executed _dimMeasured === the oracle's gate-A dyadic slope BIT-FOR-BIT, the executed _step regenerates the oracle's whole cum90 curve, and the executed rule-30 density (0.478515625) and block entropy (0.974627/bit) === replicas built only from the reference's generator description — the screen shows the oracle recovery itself, not a second number that happens to agree; (J) 1600 fl(1/120) engine ticks of the real fixedUpdate/render are bit-exact vs a statics-built replica at EVERY tick (state + all 3 instance counts; full Float32 buffer bytes on all 129 dirty ticks), with the display proven LIVE — two full grow(55 rows)→hold(2.2 s)→reseed wraps at the replica-predicted ticks 727 and 1454, final screen sha-pinned; (K) the HUD and chart strings === replicas built from the ORACLE's numbers (sha-pinned), and the two finite-height systematics obey DERIVED ceilings, not fitted tolerances — the on-screen density's gap from ½ (0.0215) is 1.37σ of the binomial fluctuation σ = ½/√1024 an RNG-grade column must show (ceiling 3σ = 0.0469), and the entropy deficit 0.0254/bit is 1.16× the Miller–Madow finite-sample bias (K−1)/(2N ln2)/8 = 0.0219 (gated to [0.5, 2]×), with >0 floors forbidding a pasted-perfect screen; (L) the executed recovery path (_measure + _step) contains no 1.58…/log(3)/3^k/D90 token (scanner proven live by a planted violation).
npm run derisk -- eca (scripts/eca-derisk.mjs)scripts/oracles/eca.reference.jsonS. Wolfram, 'Statistical mechanics of cellular automata', Rev. Mod. Phys. 55, 601 (1983); S. Wolfram, 'A New Kind of Science' (Wolfram Media, 2002) — rule 90 → Sierpiński, rule 30 as RNG (centre-column density ≈ 1/2), rule 254 solid growth, the four-class taxonomy. Gasket dimension log 3/log 2: W. Sierpiński (1915); K. Falconer, 'Fractal Geometry: Mathematical Foundations and Applications' (Wiley, 1990) Ch. 9; B. Mandelbrot, 'The Fractal Geometry of Nature' (Freeman, 1982). Pascal mod 2 = 3^{popcount}: E. Kummer (1852); É. Lucas (1878); S. Wolfram, 'Geometry of binomial coefficients', Amer. Math. Monthly 91, 566 (1984). Rule 110 Turing-completeness (context for the module's third panel): M. Cook, 'Universality in Elementary Cellular Automata', Complex Systems 15, 1 (2004).