research/lab/py/kernel-waves
0 directories and 2 files in research/lab/py/kernel-waves.
Kernel Waves
- Asks whether the wavelength of a Larger-than-Life still is set by the mask or by the rule, and whether it is readable off the mask's Fourier transform alone.
- A design mask is the Kronecker power at level
levelof the odd-side base-2 tile a code names,side^levelcells across, centre popped, built here as the crate builds it: corneriof the tile carries residue((i / 2) mod 2, i mod 2), a tile cell is filled when its residue corner is a set bit of the code, andnp.krondeepens the tile; the side-3 tiles are code 7 the full block minus its centre, code 6 the von Neumann cross, code 9 the diagonals, and the study asserts the side-3 code-7 tile has 8 cells and its level-2 mask is9 x 9with 64 ones. - The box mask at radius
ris the(2r+1)^2block minus its centre,m = 120atr = 5and728atr = 13. - A rule is a birth interval and a survive interval as fractions of the mask budget
m: a dead cell withcount/min[b_lo, b_hi]is born, a live cell withcount/min[s_lo, s_hi]survives, the integer thresholds beingceil(lo m)andfloor(hi m); the count is the FFT convolution of the 0/1 grid by the mask on the torus. - The three named rules are Bugs
B[34/120, 45/120] S[34/120, 58/120], wide survive with Bugs birth andS[0.28, 0.60], and narrow birthB[0.30, 0.34]with Bugs survive; the rule grid is every product of birth lower{0.20, 0.30, 0.35}, birth upper{0.35, 0.40, 0.45, 0.50, 0.55}, survive lower{0.00, 0.30}and survive upper{0.45, 0.50, 0.55, 0.60, 0.70, 0.80}, 180 rules, run under two seeds. - The state after 64 steps is read through its power spectrum on integer rings
k = round|xi|,k = 1..128:k*is the ring of highest mean power, the wavelength is256/k*, the share is the ring's fraction of the power off DC, the gain is the ring's mean power over the mean of all rings, which a white soup holds near 1.3. - Classes: dead is density below 0.02, full above 0.98, active is any change at the last step, flat is a still of gain below 3, coarse is a still with
256/k*above twice the side, ring is every other still; the wavelength laws are tested on ring stills only and every exclusion is printed. - The mask alone is read through the ring mean
A(k)of|DFT|, withk_minits first minimum past DC,k_2the first maximum pastk_min,k_min2the next minimum and the lobe the rings between the minima holding at least half ofA(k_2); and through the ring meang(k)of the signed DFT, real because every mask here is centrally symmetric, withk_negits most negative ring and the negative band the run of negative rings aroundk_neg. - Riesz product. With
P(theta) = sum over tile cells e of exp(-2 pi i theta . e),ethe offset from the tile centre, the DFT of the popped mask at levelleveland frequencyxion anNtorus isprod over j = 0..level-1 of P(side^j xi / N)minus the tile's centre value. Proof: every cell of the Kronecker power issum over j of d_j side^jwith each digit celld_jranging independently over the tile's filled cells, and the mask centre is the same sum with every digit at the tile centre, so the offsets aresum over j of (d_j - c) side^j, the exponential sum over the product set factorises into the tile sums at the scaled frequenciesside^j xi, and popping the centre subtracts its own term, 1 when the tile fills its centre (code 9) and 0 when it does not (codes 7 and 6). The study checks it at codes 7, 6, 9 and levels 2, 3, 4 over all256 x 256frequencies to1e-9. - Laws, each printed Verified when it holds at every ring still and Refuted with its first witness and its failure count otherwise:
k*in the half-height lobe;k*nearerk_2thank_min;k*within one ring ofk_2;k*within one ring ofk_min;g(k*) < 0;k*within one ring ofk_neg;k*in the negative band; onek*per mask across the rules. A per-mask table repeats the three sharpest laws with the failingk*values.
RUN
uv run python research/lab/py/kernel-waves/waves.pyfrom the repo root- Domain: torus
256 x 256, soup density 0.5, seeds 20260 and 4093 printed, 64 steps, 7 masks, 3 named rules at the first seed and 180 grid rules at both seeds, 2520 grid runs; about 75 seconds, prints only, exits nonzero if the Riesz check fails.
WITNESSES
- automata.md the waves: the Riesz product holds to
2.5e-12at every one of the 9 code and level pairs, the largest error at code 9 level 4; the minus term is the tile centre, 1 for code 9 and 0 for codes 7 and 6. (Proved; Verified.) - automata.md the waves: under the three named rules from the density-0.5 soup no mask reaches a ring still, 21 of 21 cells; 11 die, 6 freeze as a flat soup at density 0.49 to 0.50, 4 stay active, the wide-survive rule on the masks of 512 ones or more freezes the soup unchanged. (Verified.)
- automata.md the waves: over the rule grid the census reads 176 ring stills of 2520 runs, 571 dead, 0 full, 950 active, 737 flat, 86 coarse. (Verified.)
- automata.md the waves:
k*sits within one ring ofk_minin 25 of 176 ring stills and 21 of those are on the under-resolved side-81 mask wherek_min = 3andk_2 = 5; the boxr = 5holds 25 ring stills atk* = 30..36againstk_min = 24andk_2 = 32, wavelength 7.1 to 8.5 cells against a mask width of 11. (Refuted fork* = k_min.) - automata.md the waves:
k*lies in the mask's negative band in 173 of 176 ring stills and in every one of the 130 on boxr = 5, code 7 levels 2 and 3, and code 9 level 3; the three witnesses are boxr = 13atk* = 10, itsk_min, code 7 level 4 atk* = 2, and code 6 level 3 atk* = 8. (Refuted as a universal law; Verified on those four masks.) - automata.md the waves:
k*/k_2runs 0.94 to 1.12 on boxr = 5, 0.71 to 1.07 on boxr = 13, 0.97 to 1.10 on code 7 level 2, 0.77 to 1.08 on level 3, 0.92 to 1.17 on code 9 level 3; one mask'sk*spreads across the rules, boxr = 5from 30 to 36. (Verified; Refuted for onek*per mask.) - automata.md the waves: the carpet family's median wavelength over side reads 0.729 at level 2 and 0.729 at level 3 against
256/k_2/side = 0.729at both, and 0.790 at level 4 against 0.632 where the torus holds only 3.2 mask widths. (Verified.)