Math Mapgenerated 2026-10-25 · a354234
PUBLIC BUILD

run 103Settled

For each census pattern with stored widths at 81, 729 and 6561, the stored drift is d = s(81, 729) − s(729, 6561), where s(L₁, L₂) = −[ln w(L₂) − ln w(L₁)] / ln(L₂/L₁) is the local slope of the 20th–80th percentile width w of the per-sample crossing threshold. A new width at 2187 gives the curvature c = s(729, 2187) − s(2187, 6561) = [ln w(729) + ln w(6561) − 2 ln w(2187)] / ln 3, which needs no exponent. If the drift is a single power-law correction with exponent ω, then c/d = 2·9^(−ω)/(1 + 3^(−ω))², which is 0.50 as ω → 0, 0.42 at ω = 0.15, 0.35 at 0.3, 0.27 at 0.5, 0.20 at 0.7 and 0.125 at 1 — no single power law gives more than 0.5. If the drift has died out above 729, c is zero whatever d was. Over the census, does c follow d at a power-law rate, and is its aggregate sign the drift's?

slug
census-curvature-at-2187
state
run
created
2026-10-06
sealed
2026-10-06
builds_on
[080, 071, 068, 051]
concepts
[fractal-dimension]
programme
PG-01
from
PG-01's census (runs 068, 071, 080 and the fibre and twin runs after them) measured every pattern's crossing-threshold width at L = 81, 729 and 6561 and never at 2187; its pair slopes fall from (81, 729) to (729, 6561) on most carpets (OPS's rule that every quoted 1/ν carries its last local slopes comes from that). PG-03 found on H that the fall continues as a power-law correction with exponent near 0.3 (run 100, scored 2026-10-05). The owner chose a cloud run on 2026-10-05, the census at 729 and 2187. This run asks the census the question H answered: does the fall continue past 729 at the rate a power-law correction gives, pattern by pattern aggregated, or has the drift stopped
statistic
R27_tree_groups/carpet_perc/. Stage zero, on the M5 (the lab database lives there and is not in the clone), written and committed before any graph is built or sample drawn anywhere: from the lab database's carpet grain (lab/db/carpet.sqlite, read only, never rebuilt), every pattern of census068.json's 63 (1-based index) that has a sample_set row with sealed_for null at each of L = 81, 729 and 6561 from a scored run, with stat rows w and p_med at each (graphs named cen<i>_<g>, g = 2, 3, 4; a pattern measured under a letter name, as #17 is as H, under that family's names); for each such pattern stage zero records the index, the removed cells, the three stored (w, err) and (p_med, err) with their sample_set md5s, runs and sample counts, the stored drift d = s(81, 729) − s(729, 6561) with σ_d = √((err₈₁/w₈₁)² + 4(err₇₂₉/w₇₂₉)² + (err₆₅₆₁/w₆₅₆₁)²) / ln 9, and the pattern's one-block p* from census068.json. Where a pattern has more than one stored set at a size, the one from the census run that measured its exponent (census068.json or census080.json's measured_as) is used and recorded; a pattern this rule does not resolve is listed and left out. Stage zero also records the seed scan (below) and gen.py's and perc.c's md5s. The set is fixed at stage zero; a pattern whose graph build or draw exits non-zero in the container, or whose rebuilt 729 graph's md5 differs from the census's recorded one, is dropped before its draw with the reason logged and the count reported, and the control (i) bound is recomputed by its formula for the final count. The container: a cloud Claude Code session with the repository cloned (as runs 081, 086, 092, 095); perc.c unchanged (md5 e341b2c86677a0ce71cc9a6e3de5982d), compiled there; graphs built with gen.py unchanged, python3 gen.py write <name>, one per pattern at 729 (cen<i>_3; a 729 graph already in graphs/ with its census md5 is used as it is) and one at 2187 (cen<i>_5, as H7 was built), every graph's md5 written to graphs103.log and committed before the first draw. Draws, one smoke draw first — pattern index 1 at 2187, 1,000 samples, perc seed 8001, timed, then moved to discarded103/ and never read — then for each pattern of the set ./perc graphs/<name>_5.bin 48000 <seed> <threads> samples103/<name>_5.txt with perc seed 8100 + index and ./perc graphs/<name>_3.bin 16000 <seed> <threads> samples103/<name>_3.txt with perc seed 8200 + index, threads the container's count (perc's output is a function of seed and index alone; a draw that stops writes no file, and is made again by the same command). Seeds 8001, 8101–8163 and 8201–8263, and bootstrap seeds 541001–541100, are unused if a scan by seedscan100.py's method, made on the M5 at stage zero and recorded in pre103.json, finds none of them used or named as a seed outside this run's own files (this run file, census103.py, pre103.json, the scan's script); a digit string that is not a seed is listed and does not count. Per new file: x = column 0 / M of its graph; p_med and w from the 20th, 50th and 80th percentiles of x (census068.py's est); errors the standard deviation (ddof 0) of 1,000 bootstrap replicates, each resampling the file's samples with replacement by index, from one generator per pattern, numpy default_rng(541001 + index), drawn sequentially over the 1,000 replicates of the 729 file and then the 1,000 of the 2187 file (census080.py's scheme), recorded. Per pattern the curvature uses the two new widths and the stored 6561 one: c = [ln w_new(729) + ln w_stored(6561) − 2 ln w_new(2187)] / ln 3, σ_c = √((err/w)²_new 729 + 4(err/w)²_new 2187 + (err/w)²_stored 6561) / ln 3, so that c and d share one stored width (6561) and nothing else. Scored quantities, over the whole set — A: the inverse-variance weighted mean c̄ = Σ c/σ_c² ÷ Σ 1/σ_c², with σ_c̄ = (Σ 1/σ_c²)^(−1/2); the clause is on c̄/σ_c̄. B: r = c̄/d̄, d̄ the mean of d over the set with the same weights 1/σ_c²; its error from 10,000 resamples (numpy default_rng(541100)) in which every width that enters — the stored 81, 729 and 6561 and the new 729 and 2187 of every pattern — is drawn once from a normal with its recorded error, and c, d, c̄, d̄ and r are recomputed, so the covariance through the shared 6561 width is carried; recorded as the 16th and 84th percentiles and the share of resamples below 0.10 and above 0.60. Controls, all written before the scored quantities — (i) the 729 replication, for w and for p_med separately: z = (new − stored) / √(err_new² + err_stored²) over the set; Σ z² at most the upper 0.5% point of χ² on |set| degrees of freedom (scipy.stats.chi2.ppf(0.995, |set|), the number written at stage zero and recomputed if the count changes) and |mean z| at most 3/√|set|, so a coherent offset of the pipeline is caught as well as scatter; (ii) the record: 16,000 lines per 729 file and 48,000 per 2187 file, every x in (0, 1), perc.c's md5 as sealed, every graph's md5 as graphs103.log records, the seed scan's verdict unused, no perc seed used twice, the smoke file in discarded103/ and absent from samples103/, and each sample file's md5 recorded in times103.txt when it completes and the same when read; (iii) each 2187 file's 24 consecutive blocks of 2,000: the SD (ddof 1) of the block widths over √24, divided by the bootstrap error of w; the mean of the ratio over the set in 0.90 to 1.10 (per pattern the ratio has a spread near 0.15; over forty-odd patterns near 0.025)
script
R27_tree_groups/carpet_perc/census103.py, R27_tree_groups/carpet_perc/seedscan103.py (stage zero and the seed scan only, as the lab left them; the graph builds, draws and later stages were never run)
artifacts
[R27_tree_groups/carpet_perc/census103.json, R27_tree_groups/carpet_perc/pre103.json (RESULTS103.md, census103.log, graphs103.log, times103.txt, samples103/ and discarded103/ were named in the seal and were never written)]
expects
in the cloud container, graphs in minutes; 16,000 samples at 729 in a few minutes a pattern and 48,000 at 2187 in one to two hours a pattern at the container's threads (the M5 drew 2187 at 30 samples a second on 9 threads; the container has been slower per thread; the smoke draw gives the real number before the set is drawn and is reported, and the owner is told before the set is drawn if the whole run would exceed four days); about 42 patterns with three stored sizes at the time of sealing (the database shows 42 census bases with w at 81, 729 and 6561; stage zero fixes the number), so two to three days of wall time, with sidecars and times103.txt committed pattern by pattern as files complete; under an hour of analysis
outcome
withdrawn
outcome_note
before any graph or draw; the sealed perc seeds were already used (runs 080–083, 092); resealed as run 104, which was itself withdrawn before any draw (its 2187 graphs do not exist; see its file)
source
../lab/runs/103-census-curvature-at-2187.md

PredictionTwo clauses, each scored by itself. A — the drift continues past 729 on the census: c̄ > 0 and c̄/σ_c̄ ≥ 2.5. B — at a power-law rate: r between 0.20 and 0.48 (ω between about 0.04 and 0.7 if the correction is one power).

FalsifierA — falsified if c̄/σ_c̄ ≤ 1 (the drift measured between 81 and 6561 is not seen to continue above 729 — which this census cannot tell from a continuation at ω near 1, whose expected c̄/σ_c̄ is about 1.2); between 1 and 2.5, unanticipated. B — falsified if r ≤ 0.10 or r ≥ 0.60 (below, the drift dies above 729 faster than a power law with ω near 1.1; above, it runs faster than any single power law can, whose ceiling is 0.5); between 0.10 and 0.20 or 0.48 and 0.60, unanticipated; the band edges belong to the inner outcome. Withdrawn if control (ii) fails; reported and not scored if (i) or (iii) fails, whenever the failure is seen; a run not scored is not redrawn under this seal. Readings fixed now — the stored 6561 width at 8,000 samples is the floor of σ_c (0.011 of the 0.016 per pattern), so σ_c̄ is about 0.0025 over forty-odd patterns and the expected c̄ at ω = 0.3 is 0.35 × d̄ ≈ 0.008: A's expected c̄/σ_c̄ is about 3.2 and B's expected r is 0.35 ± 0.11; the bars are set to that power and the seal says so. A confirm of A says the census's local slopes are still moving at 2187 as a set; it does not say any single pattern's slope is, since per-pattern σ_c ≈ 0.016 against d of −0.04 to +0.06, and the per-pattern table is reported, not scored. A confirm of B says the census's drift is consistent with one correction decaying like a power with ω between 0.04 and 0.7 — or like a logarithm, since 1/ln L gives r = 0.29 and ln ln L gives 0.35, which B does not separate from a power; it does not measure ω per pattern and does not say the exponent is common to the census; a second correction acting at 81 moves d and not c and would read as "dies" or "too fast". A falsify of A says the slopes have stopped moving above 729 as a set, and reopens what the (81, 729) → (729, 6561) fall was. Reported, not scored: per pattern c, d, c/d and their errors; c̄ and r by cut class (C₁ = 2, 3, 4, 5, census068.json's classes) and over the patterns with d > 2σ_d and with d ≤ 2σ_d separately; the order check — among pairs of patterns whose stored p_med at 6561 differ by more than 4 combined errors (in quadrature), the share the new p_med at 2187 orders the same way; the new p_med(2187) against the one-block p* (L8's gap at a fourth size), per pattern and in aggregate, and the five wall-bound cut-2 patterns' gaps separately; w(2187) against the single-power interpolation from the stored (729, 6561) pair; the container's rate at 729 and 2187 and the smoke draw's timing

Withdrawn 2026-10-06, 10:30, before any graph was built or sample drawn (codifier). The lab's stage-zero seed scan (pre103.json, uncommitted) found the sealed perc seeds already used — 8001 by run 080, 8101–8104 by runs 081 and 083, 8102 again by run 092, 8201–8206 by runs 082 and 083 — and the bootstrap range under rung084.py's arithmetic block. The seeds were sealed without a scan. Resealed as run 104 (104-census-curvature-at-2187-resealed.md) with scanned ranges and one widening of the set rule; nothing else changed. The lab's stage zero on this run (38 patterns) is reused there. The text below is as sealed.

Sealed 2026-10-06, before any new sample exists (codifier). No number in the clauses was computed before the seal beyond the ratio formula c/d = 2·9^(−ω)/(1 + 3^(−ω)), which is arithmetic on a single power-law correction and is checked by the second reader below. The stored widths, p_med and drifts that the clauses use are read from the lab database at stage zero by the lab and committed before any draw. The codifier read the database once for sizing (2026-10-06, after the second reader): 42 census bases carry w at 81, 729 and 6561, all at 8,000 samples with relative errors near 1.2%; the plain mean of d over them is 0.024 and the 1/σ²-weighted mean 0.023, with σ_d near 0.0135 per pattern (23 of 42 above 2σ_d, 8 negative, from −0.043 to +0.061). Those figures set the bars and are not the sealed numbers; stage zero's are.

Why this run

The census's exponents were quoted with their last local slopes because the slopes fall with L on most carpets and nothing said where the fall ends. PG-03 answered that for one pattern: on H the fall is a power-law correction with ω near 0.30, and a one-term form with ω = 1/ν fails (run 100). The census has never been measured at 2187, so the fall above 729 has never been seen on it. One new size per pattern gives the curvature of ln w at (729, 2187, 6561) with no exponent in it, and the curvature's size against the stored drift is a rate test: one power law gives c/d = 2q²/(1 + q)² with q = 3^(−ω), 0.35 at H's ω and never above 0.5.

Power, stated. The stored 6561 width (8,000 samples, 1.2%) enters c with coefficient one and cannot be redrawn in the cloud at this scale (eight times 2187's cost per sample), so it floors σ_c at 0.011 per pattern whatever the new draws do; 16,000 at 729 and 48,000 at 2187 bring σ_c to 0.016, and the aggregate over 42 patterns to σ_c̄ ≈ 0.0025 against an expected c̄ ≈ 0.008. So A is expected near 3.2σ and B's r near 0.35 ± 0.11: the bars (2.5 and 1 for A; 0.20–0.48, 0.10 and 0.60 for B) are set so that the predicted outcome confirms about four times in five if it is true, and a dead drift (c̄ ≈ 0) falsifies A outright. More samples at 2187 would not change this much; a 6561 redraw would, and that is the Mac Studio's.

What it is not: a measurement of ω on the census (that needs 2187 sharper by an order of magnitude, run 102's scale on one pattern), not a separation of a power-law correction from a logarithmic one, and not a test of the conjecture's boundary state. The 729 redraw replicates the stored pipeline (control (i)) and gives the new pair (729, 2187) a common source; it is not scored on its own.

Readers

Second reader, frontmatter alone (an agent given the frontmatter and nothing else), on the first draft. Three findings changed the design. (1) The first draft scored A and B over a "drifting set" D selected on d > 2σ_d, and took c from the stored 729 width: because c and d then shared two stored widths, selecting on d biased c̄ and r through their noise (regression to the mean, with a sign set by the stored errors) and the resample error on r ignored the covariance. Now the whole set is scored, c is built from the two new widths and the stored 6561 alone, and r's error resamples every width so the one shared term is carried. (2) "B is scored only if A is confirmed" removed B's lower falsifier (a confirmed A forces r ≥ 2.5σ_c̄/d̄ ≈ 0.27): the gate is gone and each clause is scored by itself. (3) Control (i)'s Σz² was blind to a coherent pipeline offset, which at 2187 would move every c by six σ_c̄: a mean-z bound is added. Also fixed: the stage-zero ordering (the database is on the M5, not in the clone; graph md5s now go to graphs103.log before the first draw); the χ² tail named; the order check (97% of pairs) could void a clean run on a real finite-size shift of p_med and is now reported, not a control; the block control's window was ±10σ and is now ±4σ and on w, the scored input; 541100 added to the scan; the index base stated; "r undefined" struck; the band edges assigned; the ratio formula and its table confirmed by the reader's own derivation (exact for the one-power form, not only linearised); the logarithmic corrections that land inside B's band named in the readings. The reader's power estimate (A near 3.3σ under its own hypothesis) led to the sizing paragraph above and to A's bar at 2.5.

Sighted pass with the disk (codifier). lab/db/carpet.sqlite is not tracked (stage zero therefore on the M5); census068.json's index is 1-based (index 1 exists, pattern names cen<i>_<g>); 42 census bases with w at all three sizes, every one at 8,000 samples, relative errors 1.1–1.4%; gen.py writes graphs by name (gen.py write <name>); graphs/H7.bin is the 2187 graph of pattern #17 (H), md5 3e547c823b9a3ca26a1662b3def8b74b; perc.c's md5 as sealed; perc writes once at the end in index order; seedscan100.py exists and lists its exempt paths.

The codifier’s lead is kept for the private site.

generated 2026-10-25the lab index