research/lab/py/memory-zeta
0 directories and 4 files in research/lab/py/memory-zeta.
memory-zeta
- The Dirichlet series of a memory rule,
zeta_W(s) = sum_(n in S_W) n^(-s)over the positive integers whose minimal base-2 string the rule accepts, and the zeros of its matrix Lyndon cofactorZ_W(s) = det(I - 2^(-s) T) zeta_W(s). peel.pyis the arbitrary-precision control on the double-precision matrix ladder ofmrlynum::automaton;census.pyis the double-precision engine that carries the zero census and reads its own control back.- The peel: with
E_j(w)the vector whose entryusumsn^(-w)over the accepted words of exactlyjdigits ending in stateu, andG_P = sum_(j >= P) E_j, splitting a word on its last digit gives(I - 2^(-w) T) G_P(w) = E_P(w) + sum_(l >= 1) binom(-w,l) 2^(-w-l) Gamma_l G_P(w+l), andzeta_W(w) = 1^T D_(P-1)(w) + 1^T G_P(w)for the Dirichlet polynomial over the accepted words of at mostP-1digits. - The cofactor never divides by the vanishing determinant:
Z_W(s) = det(I - 2^(-s) T) D_(P-1)(s) + 1^T adj(I - 2^(-s) T) N(s)withNthe right side of that identity, so it reads on the wholem = 0pole comb, and the residue at a simple rootx_0of the determinant is that same lift over-x_0 log 2 det'(x_0). No eigenvector is solved for. det(I - x T)andadj(I - x T)are polynomials inxwith integer matrix coefficients, both taken by Faddeev-LeVerrier fromT, so the engine runs at any width with no eigen-decomposition anywhere in the loop.
THE CENSUS
Z_Wis meromorphic with one simple pole at each level-mtooth form >= 1and none on them = 0combs, which the determinant strips all at once, one factor for every eigenvalue. The census counts by the argument principle per cell and adds back the level-mpoles the cell holds, each named by its exact position, so every printed cell count is a zero count.- Each added-back pole is read and not assumed: its residue is a
48-point circle mean ofZ_Wat radius--ringand again at0.4of it, printed with the gap between the two radii, with(s - s_0) Z_Wat1e-5beside it to catch a double pole and a blank point on the same line as the null. - The clearance from every zero to the nearest outer box edge and to the nearest internal cell edge is printed; an internal edge is sampled at the same points and bisected the same way from both sides, so the two cells' phase contributions cancel and only the split between neighbours could move.
- The grid is derived and not chosen: the column edges are the midpoints of the comb and pole lines inside the box, subdivided so no column is wider than
0.75, and the row edges are the midpoints of the tooth and pole heights, so every cell holds at most one tooth. - The phase is accumulated on a contour seeded at step
0.05and bisected on any step above one radian, and the largest surviving step is printed beside the count. A count is resolved and not certified: nothing here boundsZ_W'/Z_Won the contour. - A box of winding one is split along its longer side until it is
0.01across, then polished by secant, and the largestabs(Z_W)at a located zero is printed. - Occupancy at a tooth is read at the radius
0.45oflab/py/zeta-family, with the distance from every tooth to the nearest located zero printed whatever the radius says. - The nonzero eigenvalues are read off the degree of
det(I - x T), whose coefficients are integers from the same Faddeev pass, and a root with a relative imaginary part below1e-9is snapped real. Reading them off the characteristic polynomial with a magnitude cutoff instead admits numerical debris: the full rule at width3hasdet = 1 - 2x, one eigenvalue and one comb, and the cutoff sold it three more near zero and a spurious tooth on the real axis. - The first-order tooth law is
u_1 = -r/R,rthe residue ofzeta_Wat the tooth andRthe regular part,Rtaken as the mean ofZ_W/deton a circle of radius0.3, which is exact for the Laurent tail and needs no fit. - Both verbs print two errors at every tooth and name each one: the modulus miss
abs(d - abs(u_1)), which is what the occupancy law is stated on, and the vector missabs(z - t - u_1), which tests the direction too. One word for two quantities is how the weaker of them gets published. - Occupancy is a per-tooth Boolean, so every tooth also prints the number of located zeros inside the radius. At width
3one tooth of the50holds two, and34occupied teeth hold35zeros. - The truncation bound is carried entrywise as a nonnegative vector through the majorant
sum_k abs(adj_k) abs(x)^k / abs(det)of the resolvent, which is the adjugate's own coefficients and needs no norm and no primitivity, plus a measured relative allowance of1e-14against the largest quantity the ladder carries. The majorant is not certified by a residual, which is the one step short of the crate's left-of-abscissa branch, and the control is what closes it. - The right edge is a proved zero-free wall and not a choice: the least element of
S_Wis1, the coefficients are nonnegative, andzeta_W(2) < 2, soabs(zeta_W(s) - 1) < 1onRe s >= 2and the determinant has no root right of the abscissa.
THE OCCUPANCY CENSUS
teethwalks the width-krule classes underG_(1,k)at dim 1, keeps the classes whose nonzero eigenvalues carry exactly two distinct moduli and no repeated root, and runs the zero census ofcensuson one box for all of them, printing one occupancy row per pole line.- A line is a distinct
abs(lambda)and not a distinct eigenvalue: a conjugate pair puts two combs on one line, offset by+-arg lambda / log base, and the line's teeth are their union. - The box is cut to fit the budget and the cut is printed:
-1.15 < Re s < 2,0.02 < Im s < 20, against the43.1of the single-rule census. The left edge holds every radius0.45disc of every second line at width3, the deepest reachingRe s = -1.144241913631, and the height holds two teeth of the first line and two or four of the second. - The left edge is chosen by the contour guard and not by the discs alone. The guard measures every level-
mpole of the rule against the contour, inside the box and outside it, since a pole just outside is never added back and is the worse neighbour; at-1.2codes54and62carry a pole line0.002842615688outside the contour and code223one0.011370462752inside it, and at-1.15every pole clears0.02. The floor is exactly0.02, the cutIm s > 0.02against the level-mpole on the real axis. Both boxes read the same occupancy on all nine rules. - Each row prints the rule, its class size,
abs(lambda_2)/rho, the arguments on the second line, the teeth on each line, the teeth occupied at radius0.45, every tooth-to-zero distance, the zeros lying off every tooth, and the zeros and poles within0.02of a contour with the least pole clearance. Each row is the argument-principle count ofcensus, cell by cell, with the level-mpoles added back, resolved and not certified. bridgeis the control on a new rule. The width-3rule55forbids exactly011,110and111, which bans an adjacent pair of ones inside every3-window, so it accepts the width-2rule7's set with the single integer3adjoined, the word11carrying no window. The verb checks that membership over1 .. 2^spanand then checksZ_55(s) = Z_7(s) + det(I - 2^(-s) T) 3^(-s)at seven points, each against the sum of the two bounds.- That identity crosses widths: the
4-state ladder, adjugate and peel meet the2-state ones that carrycontrol.json. It also says the pole data is the same on both rules at everym >= 0, orders and residues included, sincezeta_55 - zeta_7 = 3^(-s)is entire; the determinant vanishing at everym = 0tooth is how the census reads that back, and the zero sets are not the same.
THE DIAL
dialis the finite perturbation probe. For a finiteFof positive integers disjoint fromS_Wthe perturbed setS_W + Fhaszeta_(W+F) = zeta_W + P_FwithP_F(s) = sum_(n in F) n^(-s), so the engine carries it by addingFto the Dirichlet polynomial over the short words and changing nothing else: no new ladder level, no new truncation and no new majorant, which is why the perturbation needs no new control. The added term is a finite exact sum and travels inside the same relative allowance as the rest of the polynomial.- The perturbation is entire, so every pole, order and residue of
zeta_Wis shared byzeta_(W+F)and only the zero set can move. Two of the three probes that check it are blind by construction and the verb says so: a48-point circle mean annihilates every Taylor order below47, so an entire addition of any size passes the residue probe, and the determinant vanishes at a tooth, so the tooth probe prints its own floating-point residual. The probe that measures the added part is the identityZ_(W+F)(s) - Z_W(s) = det(I - base^(-s) A) P_F(s)read off the teeth, att + --rho, printed beside the modulus of the added part there. - Occupancy is read by the argument principle on the occupancy circle itself and not on a box: the winding of
Z_(W+F)on a40-point circle of radius--rhoabout the tooth, bisected on any step above one radian, plus the level-mpoles inside the circle, which are read from a pole list padded one unit past the box in both coordinates so that no pole a circle reaches is missed. The verb prints the deepest reach of any circle against the nearest pole line left of the box. - The
0.02edge rule of the census becomes an annulus: the count is taken at--rhominus the guard and again at plus it, and a cell whose two counts differ is printed as a seam, the reported occupancy being the inner one. Both baselines read no seam at all. On the perturbed grid a seam whose inner count is0is an undetermined occupancy, and a minimum over a tooth's candidate row is then convention-dependent even when the winning cell is itself off the seam, so each line prints its undetermined count and each tooth prints its smallest occupying singleton and its largest empty candidate on both readings. - The first-order law of the occupancy census moves under the knob through its constant term alone: the principal part is fixed,
RbecomesR + P_F(t), andu_1(F) = -r/(R + P_F(t)). The higher Taylor coefficients of the regular part move too, the linear one byP_F'(t), which the first-order law does not read. The verb prints the measured occupancy and that prediction as two bit strings over the printed candidate list, one row per tooth, with the mismatching candidates named. - The scoreboard is printed against a baseline and not alone: each line prints its cells, how many read occupied, how often the first-order law calls a cell right and how often the constant
occupiedpredictor does. A law that scores below the constant predictor on a line is not a selector on that line. --deepruns a greedy search for theFthat drivesabs(R + P_F(t))to zero at each occupied tooth, one candidate at a time, measuring the disc after every step, which is the attempt to empty a tooth rather than to fill one. A greedy chain is one path, so the verb also runs the exact meet-in-the-middle minimisation over every subset of size at most--deepwhenever the candidate list is24long or less, printing the minimiser, the minimum, the emptying thresholdabs(r)/rhoand the disc measured at the minimiser.
RUN
uv run python research/lab/py/memory-zeta/peel.py,3.2seconds, prints the control values.uv run python research/lab/py/memory-zeta/peel.py control,4.6seconds, writescontrol.json, the only arbitrary-precision run in the study; the rewrite is byte-identical to the stored file.uv run python research/lab/py/memory-zeta/census.py control,0.05seconds, readscontrol.jsonback through the double-precision engine.uv run python research/lab/py/memory-zeta/census.py census,8.3seconds, the golden rule, code7at width2.uv run python research/lab/py/memory-zeta/census.py census --width 3 --code 23 --left -0.75,16.3seconds, the supergolden rule.uv run python research/lab/py/memory-zeta/census.py census --left -1.2,8.3seconds, the widened box that holds every occupancy disc of the second comb and reads the same20zeros.uv run python research/lab/py/memory-zeta/census.py teeth --width 2 --left -1.2 --height 20.0,3.3seconds, the one two-line class at width2.uv run python research/lab/py/memory-zeta/census.py teeth --width 3 --left -1.15 --height 20.0,75.5seconds, the nine two-line classes of the88at width3, the occupancy table and the first-order law.uv run python research/lab/py/memory-zeta/census.py bridge,0.25seconds, the width-3rule55against the width-2rule7.uv run python research/lab/py/memory-zeta/census.py census --width 3 --code 55 --left -1.15 --height 20.0,7.6seconds, the four-state ladder's Laurent data against the two-state one.uv run python research/lab/py/memory-zeta/census.py dial --width 2 --code 7 --top 40 --height 43.1 --left -1.2 --deep 16,16.0seconds, the nine teeth of the golden rule against the22integers of2 .. 40outsideS_W.uv run python research/lab/py/memory-zeta/census.py dial --width 3 --code 23 --top 40 --height 43.1 --left -0.75 --deep 0,47.0seconds, the fourteen teeth of the supergolden rule against its27candidates.--seed,--rho,--eps,--hug,--ring,--span,--top,--guard,--deep,--peel,--shift,--cut,--left,--rightand--heightare the dials.- Halving the seed costs more and not less:
0.025raises the contour evaluations from11777to21599and the run from8.3to14.9seconds, doubling it to0.1drops them to7298and5.2, and the45cell rows and the20zero rows are identical at all three. - Prints only, writes nothing except under
peel.py control.
WITNESSES
- The page lines of beneath,
### The memory zeta. zeta_W(3) = 1.154012963277642016659466,zeta_W(2) = 1.415825532884777929125692,zeta_W(0.8) = 9.536379694275011510923898andzeta_W(1.2 + 9i) = 1.906409024243906069557735 - 0.453243424778265833646527i, each met bymrlynum::automatoninside its own bound, the largest gap3.0e-15against a bound of9.54e-13.- The six residues at
m = 0,j = 0, 1, 2on both combs. On the comb atRe s = log_2 phithe gaps against the crate are6.0e-16,2.6e-15and9.3e-16against bounds near1.3e-13; on the comb atRe s = -log_2 phi, where the crate reads through its left-of-abscissa branch and bounds near4.1e-9, the gaps are1.1e-12,3.7e-12and4.3e-12. - That second comb is the reason this study exists: every crate number on it is produced by one branch and is met here from outside it.
control.jsoncarries fourteen rows atdps 40, peel14, shift60, cut30, against the census engine at peel8, shift12, cut24: twozeta_Wvalues, tenZ_Wvalues including five located zeros and the census contour points-0.95 + 20iand30i, and two residues, one on each comb. The largest gap is1.134e-11, on the rowZat-0.95 + 20iagainst its bound7.348e-11, and no row falls outside its printed bound.- Five of those rows evaluate
Z_Wat a located zero printed to twelve decimals and readabs(Z_W)below9.81e-12in the other lane. Both lanes run the same peel, the same Faddeev adjugate and the samel-cut, so this is a precision control and not a second method; the independent lane is the crate. - The new rule's control is
bridge:3is the only integer of1 .. 262143on which the width-3rule55and the width-2rule7disagree, andZ_55 - Z_7 - det(I - 2^(-s) T) 3^(-s)reads at most1.168e-13over seven points including three teeth and one located zero, every point inside its bound. - The occupancy table at width
3reads9two-line classes of88,50teeth,34occupied at radius0.45holding35zeros, every zero located on every rule, largest residual3.236e-11, largest phase step0.999909radians, largest bound9.110e-09, and no pole within0.02of a contour. Two zeros are,-1.134547677+3.580553251ion code127and-1.143621954+17.814806003ion code63; the box at-1.2reads the same occupancy with the failure on the poles instead. - The first-order law at width
3reads largest modulus miss0.739013203and largest vector miss1.287895060, both at code63, line1,Im s = 13.597080,abs(u_1) = 0.520202113against a nearest zero at1.259215316. - The dial's baseline is the census read back through a different contour: the circle probe reads
4of4and0of5on code7and3of4and7of10on code23, the same occupancy the cell census prints, with no seam on either baseline and the deepest circle reachingRe s = -1.164241913631on code7against a nearest excluded pole line at-1.305758086369. - The falsification that measures something: the off-tooth identity misses by at most
2.384e-15at code7and4.003e-16at code23against an added part of up to1.912203and1.708983in modulus, over three probes. The residue and tooth probes beside it read1.776e-15and1.332e-15over the4level-one poles of each box and1.250e-13and1.789e-14over the teeth, and both are blind: a48-point circle mean annihilates an entire addition, and the determinant vanishes at a tooth, so those two numbers are an aliasing floor and a determinant residual and would print at that magnitude however the addition were implemented. - The dial meets the one cross-width control that exists:
S_7 + {3}isS_55, and the dial's grid row for the added element3reads the second comb occupied atIm s = 4.532360and empty at13.597080, which is the1of2the four-state ladder prints for code55. - The same control measures the Laurent shift on a four-state ladder against a two-state one: at
Im s = 9.064720code55readsr = 0.210170579-0.581938843i, digit for digit code7's, andR = 1.313430833+1.119663028iagainst1.714940435+0.882338583i, a difference of-0.401509602+0.237324445i, which meets3^(-t) = -0.401509601+0.237324445iup to one unit in the last place of the two nine-decimal prints it is read from. - Every empty tooth of code
7is occupied by one added integer,{3},{6},{7},{11},{11}atIm s = 4.532360,13.597080,22.661801,31.726521,40.791241, and on code23the empty teeth are occupied by{7},{5},{7},{15}while two occupied teeth are emptied,Im s = 2.678332by{6}and42.645269by{6}and by{7}. - Those least singletons are read on the inner convention and two of each list move on the outer one: code
7reads{3},{6},{3},{11},{6}and code23reads{6}at9.064720and{11}at38.937214. What does not move is the bound,11at code7on both readings, the four fillings and the two emptyings, both emptied teeth printing an empty seam list, and so the count6of14. - Occupancy under the knob is undetermined on
9of the110cells of code7's second comb,10of the108of code23's abscissa comb and9of the270of its second line, each a cell whose inner count is0and outer count positive. - The exact minimum of
abs(R + P_F)over all4158861subsets of size at most16of the22candidates is1.095277075,0.784350607,1.295268436and1.662786204at code7's four abscissa-comb teeth, the greedy chain attains every one of them, and the disc at each exact minimiser keeps its zero off the seam,1/1,2/2,1/1,1/1, the one atIm s = 18.129441gaining a second. - That search bounds the first-order proxy and not the occupancy, and at
Im s = 9.064720the two part company: the minimum1.095277075falls below the emptying thresholdabs(r)/rho = 1.374951382, the law predictsabs(u_1) = 0.564905571and an empty disc, and the disc reads1/1with no seam. - The scoreboard: code
7line1holds110cells,77occupied, the first-order law right75times against the constant predictor's77; code23line1holds270cells,222occupied, the law right218against222; code23line0holds108cells,84occupied, the law right105against84; code7line0is88of88on both. - On the outer reading of the seam the subdominant deficits widen and the abscissa-comb margin does not survive: code
7line1reads80against86, code23line1219against231, and code23line095against94, three of whose four teeth are27of27occupied and score alike, so the whole margin sits on the one tooth carrying10undetermined cells. - The four level-one poles of code
7read residues-1.990368154340-0.795661945868i,-0.350975872907-0.436714265460i,-3.135030562964-2.032376530959iand-1.028888122837+2.036528502776i, the two radii agreeing to7.3e-14or better, each simple to5.1e-05against(s - s_0) Z_Wat1e-5, with a blank point on the same line at4.6e-16.
- census.py44.3 kB
- control.json2.2 kB
- peel.py3.9 kB
- README.md20.8 kB