diff --git a/notes/p681-cylinder-sector-bridge-20260912.md b/notes/p681-cylinder-sector-bridge-20260912.md new file mode 100644 index 00000000..1a357ac5 --- /dev/null +++ b/notes/p681-cylinder-sector-bridge-20260912.md @@ -0,0 +1,177 @@ +# #681 reviewed: an exact width-two torus/cylinder bridge + +2026-09-12. Supersedes the first #705 retrieval note's proposed O1. Its useful +primary-source reading is retained below; the first version remains in Git +history. The missing small calculation is now completed, not a new task. + +## 1. Exact local object, not a tautological configuration-diagonal operator + +Take the axis square-site torus with periods (2,0),(0,m), m>=2. It has 2m sites; +every square has four distinct corners. Retain the two periodic edges between +the same two row vertices as different lifted edges, not a collapsed simple +edge. The occupied graph is NN, the complement matching graph NN+NNN. Use the +existing digital-Alexander observable M=P2-P0=E[r_black-1]. + +Put x=p(1-p), y=p^2. A row is empty, left-only, right-only or both, with weights +(1-p)^2,x,x,y. On the three NONEMPTY states (left,right,both), define + + K = [[1,0,1], [0,1,1], [1,1,1]], + T = K diag(x,x,y) = [[x,0,y], [0,x,y], [x,x,y]]. + +This is a local row transfer. tr(T^m) is the total Bernoulli weight of cyclic +nonempty row words with overlap between every pair of consecutive rows. + +**Lemma (event dictionary).** + + P2 = tr(T^m) - 2*x^m, + P0 = (1-p^2)^m - 2*x^m, + M_{2,m}(p) = tr(T^m) - (1-p^2)^m. (1) + +Proof. Without a fully occupied row there are no horizontal occupied edges. +A nonzero longitudinal cycle then exists only if every row is the same +singleton, left or right. Consequently no horizontal cycle and no longitudinal +cycle has weight [(1-p)^2+2x]^m-2x^m=(1-p^2)^m-2x^m. +If there is a both-occupied row, a transverse cycle is present. A longitudinal +cycle exists exactly when every interface has occupied overlap: an empty row +or adjacent opposite singletons is a cut; conversely overlapping interfaces can +be joined within each full row into a closed longitudinal walk. With no full +row, the two all-singleton words are rank one, so subtract 2x^m from tr(T^m). +The cycles coexist in a component (or directly use intersection), giving rank +2. This proves the configuration classification and hence (1), at every m>=2. +No census is used in the proof. + +For a fugacity convention v=p/(1-p), (1+v)^(2m) M is the corresponding signed +site-count polynomial. Do not confuse this site fugacity with an independent +FK bond variable or change the number of local cells without a geometry map. +The presentation uses normalized Bernoulli weights throughout. + +## 2. The complete spectrum settles the finite-length question + +The antisymmetric row vector has eigenvalue x. On the left/right-symmetric +subspace the transfer is [[x,y],[2x,y]], with characteristic equation + + lambda^2 - p*lambda - p^3(1-p) = 0. + +Thus + + lambda_± = p/2 [1 ± sqrt(1+4p-4p^2)], + M_{2,m} = lambda_+^m + lambda_-^m + x^m - lambda_c^m, + lambda_c = 1-p^2. (2) + +For 0
0 for EVERY m>=2. Since M is strictly
+increasing (the existing monotone-rank argument), its unique interior root
+p_{2,m} is strictly below q for every finite m. This gives a particularly clear
+failure of finite-root equality despite equal leading coefficients.
+
+Let h(p)=log(lambda_+/lambda_c), r=x(q)/lambda_c(q)=q/(1+q). Then h'(q)>0 and
+
+ p_{2,m}-q = - r^m/[m h'(q)]
+ * [1+(-q^2/(1-q^2))^m+O(r^m)]. (3)
+
+Here r=0.361103080528647... and h'(q)=3.353388815848793.... Divide (2) by
+lambda_c^m, expand e^(m h) around q, and use the two uniform subleading ratios
+strictly below one. The root displacement is O(r^m/m); differentiating the
+subleading terms and the leading exponential changes the relative remainder
+by O(r^m). This also proves convergence at fixed width without exchanging limits.
+
+Selected exact-root diagnostics (rational isolation intervals are in JSON):
+
+| m | p_{2,m} | (p_{2,m}-q) / [-r^m/(m h'(q))] |
+|---|---|---|
+| 2 | 0.5411961001461969844 | 1.23450 |
+| 4 | 0.5638649868188458323 | 1.05138 |
+| 8 | 0.5651869150079729083 | 1.00241 |
+| 12 | 0.5651975952151489695 | 1.000115 |
+| 20 | 0.5651977173624504152 | 1.00000027 |
+
+These are finite-width diagnostics, NOT estimates or bounds for the infinite
+square-site p_c. Fixed width violates the expanding-geometry hypothesis of
+#613; taking m->infinity here must not be confused with an all-directions limit.
+
+## 4. General conditional lemma: what coefficients actually do
+
+Suppose, at a fixed width near an isolated crossing p0,
+
+ Z_o=c_o(p) lambda_o(p)^m [1+epsilon_o,m(p)],
+ Z_c=c_c(p) lambda_c(p)^m [1+epsilon_c,m(p)],
+
+with c_o,c_c positive and C2, simple positive leading eigenvalues, a uniform
+spectral gap giving epsilon and its needed derivatives exponentially small,
+and h=log(lambda_o/lambda_c), h(p0)=0, h'(p0)!=0. The nearby balance root obeys
+
+ p_m-p0 = log[c_c(p0)/c_o(p0)]/[m h'(p0)]
+ + O(m^-2 + rho^m/m).
+
+Nonzero unequal coefficients can create a 1/m displacement without changing
+the limiting crossing. Equal coefficients AT the crossing remove that 1/m
+term; they do not remove subleading spectra. Width two is the explicit case
+where those remaining terms and their coefficient are now known. An all-m
+two-mode identity would require cancellation of EVERY other observable spectral
+mode (including Jordan-polynomial terms), not merely equality of two prefactors.
+
+No width-uniform estimate is established here. A general local bridge needs a
+specified closure and its full observable spectrum; an absent literature
+formula is not a no-go theorem. The fixed-width correction above does not
+supply any n^-4 or L^-4 outer-limit theorem.
+
+## 5. Primary reading retained, with corrections
+
+Jacobsen, J. Phys. A 48 (2015) 454003, arXiv:1507.03027v1:
+https://arxiv.org/html/1507.03027v1 — PRIMARY_TEXT_READ, §§2–4,6.1,8–9.
+Eqs. (4),(9),(11)–(13) describe the signed graph polynomial and the fixed-width
+cylinder eigenvalue method. Eq. (32) gives the square-site local loop operator.
+Table 2 supplies the n=2 comparison above. Eq. (50) is an OBSERVED convergence
+law: the text after (50) explicitly says more ingredients are needed to deduce
+it from (49). It is not a theorem supplied by that CFT argument.
+
+The spin-twist Eq. (55) is not a literal q=1 bridge: q=1 has only twist zero,
+and its factor (1-1/q) vanishes, leaving 0=0. Work in the FK/loop construction
+at q=1 unless an actual continuation is provided. Eq. (24)'s width-one Potts
+example is not by itself a theorem for all square-site local operators.
+
+Mertens–Ziff, PRE 94 (2016) 062152, arXiv:1603.07289v2:
+https://arxiv.org/html/1603.07289v2 — PRIMARY_TEXT_READ, §II, Eqs. (20)–(21).
+These give the finite matching/event identity and its all-equals-none relation;
+the quoted root exponent is empirical. Jacobsen 2024 Reply remains
+ABSTRACT_ONLY in the original retrieval; no claim here needs its unavailable body.
+
+## 6. Executed checks and decision
+
+`scripts/width2_cylinder_exact.py` derives integer coefficients by the trace
+recurrence. An independent lifted-homology traversal enumerated all 5456
+configurations across 2x2,...,2x6 and reproduced EVERY coefficient. It preserves
+parallel periodic edges; no row-compatibility code is used by that verifier.
+The 2x2 control is -1+4p^2-2p^4. A second integer matrix-power check at p=1/2
+agrees exactly. Three local tests passed. Finite roots carry 100-bisection exact
+rational brackets; spectral decimals are explicitly diagnostic.
+
+Result: `results/research-control-20260912/width2-cylinder-exact.json`.
+The suggested smallest #681 calculation is done and its premise corrected.
+Do not commission it again. This is a useful local theorem, not a reason to
+build a large transfer engine before defining an all-width scientific target.
diff --git a/results/research-control-20260912/width2-cylinder-exact.json b/results/research-control-20260912/width2-cylinder-exact.json
new file mode 100644
index 00000000..59c36bba
--- /dev/null
+++ b/results/research-control-20260912/width2-cylinder-exact.json
@@ -0,0 +1,28 @@
+{
+ "schema": "matching-one.width2-cylinder-exact.v1",
+ "scope": "axis square-site 2-by-m honest torus, m>=2; row transfer, not an all-width pTL intertwiner",
+ "cylinder_minimal_polynomial_low_first": [-1,0,2,2],
+ "cylinder_root_diagnostic": "0.565197717383639396437528013247030816098483976759553827555484",
+ "cylinder_root_isolation": ["716473225688995647843441073053/1267650600228229401496703205376","358236612844497823921720536527/633825300114114700748351602688"],
+ "published_n2_agrees_within_1e_minus_40": true,
+ "hprime_diagnostic": "3.35338881584879266732701434488",
+ "decay_ratio_diagnostic": "0.361103080528647377634646562159",
+ "finite_m_defect_at_crossing": "[p(1-p)]^m + lambda_minus^m > 0",
+ "equal_leading_coefficients": true,
+ "small_exact_checks": {
+ "2":{"configurations":16,"coefficient_identity":true,"power_coefficients":[-1,0,4,0,-2],"bernstein_counts":[-1,-4,-2,4,1]},
+ "3":{"configurations":64,"coefficient_identity":true,"power_coefficients":[-1,0,3,2,-3],"bernstein_counts":[-1,-6,-12,-6,6,6,1]},
+ "4":{"configurations":256,"coefficient_identity":true,"power_coefficients":[-1,0,4,0,-4,0,8,-8,2],"bernstein_counts":[-1,-8,-24,-32,-14,8,16,8,1]},
+ "5":{"configurations":1024,"coefficient_identity":true,"power_coefficients":[-1,0,5,0,-10,2,10,10,-25,10],"bernstein_counts":[-1,-10,-40,-80,-80,-30,10,30,30,10,1]},
+ "6":{"configurations":4096,"coefficient_identity":true,"power_coefficients":[-1,0,6,0,-15,0,22,0,3,-36,24,0,-2],"bernstein_counts":[-1,-12,-60,-160,-240,-192,-62,12,48,76,48,12,1]}
+ },
+ "finite_roots": {
+ "2":{"exact_rational_bracket":["686047561191503557021216148973/1267650600228229401496703205376","343023780595751778510608074487/633825300114114700748351602688"],"root_diagnostic":"0.5411961001461969843997232054","root_minus_cylinder":"-0.024001617237442412038","leading_shift":"-0.019442337576693110926","shift_over_leading":"1.23450264880777"},
+ "3":{"exact_rational_bracket":["355549303266821127964730592771/633825300114114700748351602688","711098606533642255929461185543/1267650600228229401496703205376"],"root_diagnostic":"0.5609578904515291298145210442","root_minus_cylinder":"-0.004239826932110266623","leading_shift":"-0.0046804586610811728968","shift_over_leading":"0.905857147583668"},
+ "4":{"exact_rational_bracket":["357391894494296289553025491317/633825300114114700748351602688","714783788988592579106050982635/1267650600228229401496703205376"],"root_diagnostic":"0.5638649868188458323132883434","root_minus_cylinder":"-0.0013327305647935641242","leading_shift":"-0.0012675960306025498953","shift_over_leading":"1.0513842995864"},
+ "6":{"exact_rational_bracket":["179082998271309469420869525275/316912650057057350374175801344","716331993085237877683478101101/1267650600228229401496703205376"],"root_diagnostic":"0.5650863045039923213956181244","root_minus_cylinder":"-0.00011141287964707504191","leading_shift":"-0.00011019249034646421821","shift_over_leading":"1.01107506779068"},
+ "8":{"exact_rational_bracket":["358229766025499066655359611415/633825300114114700748351602688","716459532050998133310719222831/1267650600228229401496703205376"],"root_diagnostic":"0.565186915007972908279837917","root_minus_cylinder":"-0.00001080237566648815769","leading_shift":"-0.000010776448265112279807","shift_over_leading":"1.00240593196738"},
+ "12":{"exact_rational_bracket":["716473070822035429147772801381/1267650600228229401496703205376","358236535411017714573886400691/633825300114114700748351602688"],"root_diagnostic":"0.5651975952151489694908387443","root_minus_cylinder":"-1.2216849042694668927e-7","leading_shift":"-1.221544134534600044e-7","shift_over_leading":"1.0001152391722"},
+ "20":{"exact_rational_bracket":["89559153207766927876597427951/158456325028528675187087900672","716473225662135423012779423609/1267650600228229401496703205376"],"root_diagnostic":"0.5651977173624504151631723659","root_minus_cylinder":"-2.1188981274355647314e-11","leading_shift":"-2.1188975555815298611e-11","shift_over_leading":"1.00000026988281"}
+ }
+}
diff --git a/scripts/width2_cylinder_exact.py b/scripts/width2_cylinder_exact.py
new file mode 100644
index 00000000..7f98f553
--- /dev/null
+++ b/scripts/width2_cylinder_exact.py
@@ -0,0 +1,143 @@
+#!/usr/bin/env python3
+"""Exact 2-by-m square-site torus probabilities and their cylinder limit.
+
+No new percolation production. Bernoulli-polynomial coefficients are integers.
+A width-two occupied row makes a transverse cycle; both periodic bonds must
+be retained even though their endpoint pairs coincide. m >= 2 is required.
+"""
+from __future__ import annotations
+import argparse
+from fractions import Fraction
+import json
+from math import comb
+from pathlib import Path
+
+
+def add(a, b):
+ out = [0] * max(len(a), len(b))
+ for i, v in enumerate(a): out[i] += v
+ for i, v in enumerate(b): out[i] += v
+ while len(out)>1 and out[-1]==0: out.pop()
+ return out
+
+
+def mul(a, b):
+ out = [0] * (len(a)+len(b)-1)
+ for i, u in enumerate(a):
+ for j, v in enumerate(b): out[i+j] += u*v
+ while len(out)>1 and out[-1]==0: out.pop()
+ return out
+
+
+def power(a, m):
+ out = [1]
+ for _ in range(m): out = mul(out,a)
+ return out
+
+
+def evaluate(a, p):
+ out = 0
+ for v in reversed(a): out = out*p+v
+ return out
+
+
+def matching_polynomial(m):
+ """Integer power coefficients, low degree first, from a 3-state trace."""
+ if m < 2: raise ValueError('honest two-by-m torus requires m >= 2')
+ # Symmetric 2-state block: trace=p, determinant=-p^3(1-p).
+ # tr(block^m)=p*tr(block^(m-1))+p^3(1-p)*tr(block^(m-2)).
+ previous, current = [2], [0,1]
+ for _ in range(2,m+1):
+ previous,current = current,add(mul([0,1],current),mul([0,0,0,1,-1],previous))
+ return add(add(current,power([0,1,-1],m)),[-x for x in power([1,0,-1],m)])
+
+
+def ambient_rank(mask, m):
+ """Independent lifted-edge graph traversal; not a row compatibility test."""
+ if m < 2: raise ValueError('m >= 2 required')
+ n = 2*m
+ positions, span = {}, []
+ for root in range(n):
+ if not (mask>>root)&1 or root in positions: continue
+ positions[root] = (0,0)
+ stack = [root]
+ while stack:
+ v=stack.pop(); x,y=v%2,v//2; px,py=positions[v]
+ for dx,dy in ((1,0),(-1,0),(0,1),(0,-1)):
+ u=((y+dy)%m)*2+(x+dx)%2
+ if not (mask>>u)&1: continue
+ proposed=(px+dx,py+dy)
+ if u not in positions:
+ positions[u]=proposed;stack.append(u)
+ else:
+ wx,wy=proposed[0]-positions[u][0],proposed[1]-positions[u][1]
+ if wx%2 or wy%m: raise AssertionError('nonperiodic cycle displacement')
+ wx,wy=wx//2,wy//m
+ if wx or wy:
+ if not span: span.append((wx,wy))
+ elif span[0][0]*wy-span[0][1]*wx: return 2
+ return len(span)
+
+
+def enumerated_polynomial(m):
+ """Tiny independent exact census, collapsed by occupation count."""
+ n=2*m; bern=[0]*(n+1)
+ for mask in range(1<