← All experiments

Field notes / Experiment guide

Is the split between slow and compact growers arbitrary?

The census separates very slow rules from a broad compact-growth peak. Does the headline exponent depend on exactly where we draw the cut?

New to these ants? Start here.

An ant moves on a grid of coloured squares. Each colour tells it to turn left (L) or right (R). It advances that square to the next colour, then steps forward. A rule such as RLR is the list of turns, starting at colour zero. On a blank grid the same rule always makes the same trajectory.

Territory means every cell visited so far. Its boundary consists of visited cells with an unvisited neighbour. A highway is a repeating pattern of motion that carries the ant away. A tether means repeated returns to a small home region.

Growing like the cube root of time means taking eight times as many steps to double a linear size. The rotor walker is a comparison model that follows and rotates arrows stored on cells. A seed makes a random starting pattern reproducible; the ant itself can still move deterministically.

We distinguish c, the chance of discovering a cell per boundary step, from kappa (κ), time at the boundary normalized by perimeter divided by area. Explaining their values is harder than using them to account for growth.

A closer look

The distribution of fitted growth exponents and checks of the cut between slow and compact growers.
The cut separates a slow-growth population from the compact-growth peak. Moving it changes the central estimate little, but not little enough to pass the strict registered tolerance. A statistical trough is not proof of a phase boundary. Figure source and recipe ↗

The idea under test

If the compact-growth peak is robust, reasonable cut changes should leave its centre nearly unchanged.

What we learned

The central compact-growth estimate moves little across tested cuts, but the strict registered tolerance fails. The density trough is not exactly at the original cut.

What this leaves open

Robustness of a summary does not establish a sharp physical phase transition.

Read the evidence and reproduction recipe ↗

Inside the experiment

Methods, registered predictions, exact commands and saved analysis. These are the working research documents; expand them for the detail behind the introduction.

Methods and original experiment record

alpha-gap: is the log/blob cut at alpha = 0.15 objective?

Registered 2026-10-15 23:32 +13:00, before any code was written (reviewer response, complaint 2).

Question

The paper calls a rule log-growing if its census width exponent alpha < 0.15, "chosen by eye from the gap in the exponent histogram". Is there an objective gap, and does the blob median depend on the cut?

Registered tests and predictions (census.csv, probe_summary.csv only)

  1. Hartigan dip test on the raw alpha distribution. Prediction: p < 0.05.
  2. Cut sensitivity at 0.05, 0.10, 0.15, 0.20, 0.25: N, median blob alpha_w, IQR. Prediction: median changes by < 0.001 for any cut in [0.10, 0.25].
  3. Two-component Gaussian mixture on raw alpha. Prediction: low component mean < 0.12.
  4. Histogram with the cut marked.

Command

uv run experiments/2026-10-15-alpha-gap/scripts/gap_robustness.py (seed 20261015; adds diptest, scikit-learn to pyproject). Outputs: results/gap_robustness.json, results/alpha_gap.pdf|png.

Results (appended after the run; predictions above are unchanged)

Population: 3512 census rules; 3208 non-builders (571 log, 2637 blob). Builder alpha is on a different regime and is excluded from the distribution tests (the dip test on all 3512 gives the same answer).

Prediction Outcome
Dip p < 0.05 Met, dip = 0.047, p < 0.001 (n = 3208). Weak evidence: it only rejects unimodality, and a long left tail would do that.
Median moves < 0.001 for cuts in [0.10, 0.25] Not met. Medians 0.3312 (cut 0.10), 0.3326 (0.15), 0.3328 (0.20), 0.3329 (0.25): spread 0.0017, max deviation from the 0.15 cut 0.0014 (all from the 0.10 cut). For cuts 0.15–0.25 the spread is 0.0003. At cut 0.05 the median is 0.3293.
GMM low mean < 0.12 Met: components at 0.094 (sd 0.031, weight 0.19) and 0.334 (sd 0.025, weight 0.81).

Unregistered but important: the histogram does not show an empty gap at 0.15. The log-growers' density falls off across 0.10–0.17 (20, 29, 20, 8 rules per 0.01 bin at 0.12–0.16; 16 rules in [0.145, 0.155)), and the true trough is at 0.17–0.26 (0 to 4 rules per bin), above the cut. So 0.15 sits on the flank of the log-grower peak, not inside a gap; 0.2 would be a more defensible midpoint of the empty region. The conclusion that matters (median 0.333 insensitive to the cut) holds to within 0.0003 for any cut in the trough region.

Analysis notebook: notebook.ipynb

No saved outputs. This render shows the saved narrative and code; cells have not been executed for publication. Download notebook

alpha-gap: is the log/blob cut objective?

Reads only committed results/gap_robustness.json. Question, registered predictions and caveats: see README.md. Provenance: commit and seed are stored in the JSON.

Code
In [ ]:
import json, pathlib
r = json.loads((pathlib.Path('results')/'gap_robustness.json').read_text())
print('commit', r['commit'], 'seed', r['seed'], 'n', r['n_nonbuilder'])
print('dip', r['dip_nonbuilder'])
for row in r['cut_sensitivity']: print(row)
print('gmm', r['gmm2_nonbuilder'])
print('trough', r['trough_in_0.05_0.30'])

Shows: blob median 0.331-0.333 for cuts 0.10-0.25 (spread 0.0017; the registered <0.001 prediction failed); GMM low component 0.094; density trough at 0.17-0.26, not at 0.15.

Does not show: that the log/blob boundary is a sharp phase transition; the dip test only rejects unimodality.

Next: none planned.

Read the dated lab log

Lab notebook: alpha-gap

Append-only. Newest entry last. Tags: intent, assumption, observation, interpretation, surprise, decision, dead-end, question, deviation.

2026-10-15 23:32 (+13:00) · 07a0951 · intent

Test whether the log/blob cut at alpha = 0.15 is objective (reviewer complaint 2). Tests and predictions are in README.md, registered before code.

2026-10-15 23:50 (+13:00) · 07a0951 · observation

gap_robustness.py run. Dip p < 0.001; GMM low component 0.094; blob median 0.3312/0.3326/0.3328/0.3329 for cuts 0.10/0.15/0.20/0.25 (0.3293 at 0.05). Histogram trough is 0.17-0.26, not at 0.15. Details in results/gap_robustness.json.

2026-10-15 23:50 (+13:00) · 07a0951 · surprise

Registered prediction 2 (change < 0.001 for cuts in [0.10, 0.25]) failed: spread 0.0017, driven by the 0.10 cut admitting ~200 slow rules. Predictions 1 and 3 held.

2026-10-15 23:50 (+13:00) · 07a0951 · interpretation

The paper's phrase "chosen by eye from the gap" overstated: there is a density trough, but at 0.17-0.26. The cut should be described as an operational boundary on the flank of the log-grower peak; results are insensitive for cuts >= 0.15. The dip test is weak evidence (rejects unimodality only). Alternative not excluded: alpha for log-growers is itself a poor estimator when growth is logarithmic (fit over 6 octaves), so the left tail's shape is partly estimator noise.

2026-10-15 23:50 (+13:00) · 07a0951 · decision

Report the failed prediction and the trough location in the paper; keep cut 0.15 for continuity with all earlier numbers, and show the sensitivity table.

2026-10-15-alpha-gap · Source revision ba38590b33e3

Original source ↗ · Input hashes

Introductions summarize the evidence; the expandable record preserves the original predictions, methods and caveats. Figures and notebooks are published as saved. Publication runs no simulations or notebook cells.