Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
177 changes: 177 additions & 0 deletions notes/p681-cylinder-sector-bridge-20260912.md
Original file line number Diff line number Diff line change
@@ -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<p<1, T is nonnegative, irreducible and aperiodic. Its Perron eigenvalue is
lambda_+. The two LEADING coefficients in (2) are exactly one. Yet the finite
remainder is x^m+lambda_-^m. Equal leading coefficients therefore do NOT imply
M=lambda_+^m-lambda_c^m. This refutes the first note's O1 equivalence inside the
actual square-site model, not just with an abstract matrix counterexample.

## 3. Exact cylinder crossing and root displacement

Setting lambda_+=lambda_c gives

(p-1)(2p^3+2p^2-1)=0.

The unique interior solution q is the root of

2q^3+2q^2-1=0,
q = 0.56519771738363939643752801324703081609848397675955...

It agrees with Jacobsen (2015), Table 2, n=2 to the printed precision. This is
an explicit finite-width probability/spectrum bridge. We have not constructed
an all-width intertwiner with Jacobsen's augmented pTL representation, and do
not promote the numerical match alone to such an intertwiner or to novelty.

At q, lambda_-=q-lambda_c<0 and

|lambda_-|/x = q^2/(1-q^2) < 1.

Therefore M_{2,m}(q)=x^m+lambda_-^m>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.
28 changes: 28 additions & 0 deletions results/research-control-20260912/width2-cylinder-exact.json
Original file line number Diff line number Diff line change
@@ -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"}
}
}
143 changes: 143 additions & 0 deletions scripts/width2_cylinder_exact.py
Original file line number Diff line number Diff line change
@@ -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<<n): bern[mask.bit_count()] += ambient_rank(mask,m)-1
poly=[0]*(n+1)
for k,b in enumerate(bern):
for j in range(n-k+1): poly[k+j]+=b*comb(n-k,j)*(-1)**j
while len(poly)>1 and poly[-1]==0: poly.pop()
return poly,bern


def root_bracket(poly, steps=100):
lo,hi=Fraction(0),Fraction(1)
for _ in range(steps):
mid=(lo+hi)/2
if evaluate(poly,mid)<0: lo=mid
else: hi=mid
return [str(lo),str(hi)]


def report(max_check=6):
from mpmath import mp
with mp.workdps(70):
q=mp.findroot(lambda p:2*p**3+2*p**2-1,('0.55','0.58'))
x=q*(1-q); lc=1-q*q
lp_derivative=(lc+3*q*q-4*q**3)/(2*lc-q)
hprime=lp_derivative/lc+2*q/lc
checks={}
for m in range(2,max_check+1):
got,bern=enumerated_polynomial(m); expected=matching_polynomial(m)
if got!=expected: raise AssertionError(f'coefficient disagreement m={m}')
checks[str(m)]={'configurations':1<<(2*m),'coefficient_identity':True,
'power_coefficients':expected,'bernstein_counts':bern}
roots={}
for m in (2,3,4,6,8,12,20):
poly=matching_polynomial(m); bracket=root_bracket(poly)
lo,hi=map(Fraction,bracket)
root=(mp.mpf(lo.numerator)/lo.denominator+mp.mpf(hi.numerator)/hi.denominator)/2
predicted=-(x/lc)**m/(m*hprime)
roots[str(m)]={'exact_rational_bracket':bracket,'root_diagnostic':mp.nstr(root,28),
'root_minus_cylinder':mp.nstr(root-q,20),
'leading_shift':mp.nstr(predicted,20),
'shift_over_leading':mp.nstr((root-q)/predicted,15)}
return {'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':mp.nstr(q,60),
'cylinder_root_isolation':root_bracket([-1,0,2,2]),
'published_n2_agrees_within_1e_minus_40':bool(abs(q-mp.mpf('0.5651977173836393964375280132470308160984'))<mp.mpf('1e-40')),
'hprime_diagnostic':mp.nstr(hprime,30),
'decay_ratio_diagnostic':mp.nstr(x/lc,30),
'finite_m_defect_at_crossing':'[p(1-p)]^m + lambda_minus^m > 0',
'equal_leading_coefficients':True,'small_exact_checks':checks,'finite_roots':roots}


if __name__=='__main__':
ap=argparse.ArgumentParser();ap.add_argument('--out',type=Path);args=ap.parse_args()
text=json.dumps(report(),indent=2,allow_nan=False)+'\n'
if args.out:
args.out.parent.mkdir(parents=True,exist_ok=True)
with args.out.open('x') as f:f.write(text)
else: print(text,end='')
24 changes: 24 additions & 0 deletions tests/test_width2_cylinder_exact.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import sys
from pathlib import Path
from fractions import Fraction
import unittest
sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'scripts'))
import width2_cylinder_exact as w

class WidthTwo(unittest.TestCase):
def test_all_coefficients_from_independent_winding(self):
for m in (2,3,4,5):
self.assertEqual(w.matching_polynomial(m),w.enumerated_polynomial(m)[0])
def test_known_l2_control(self):
self.assertEqual(w.matching_polynomial(2),[-1,0,4,0,-2])
def test_probability_trace_at_half(self):
# At p=1/2, T=K/4. Check trace directly with integer powers.
k=[[1,0,1],[0,1,1],[1,1,1]]
a=[[int(i==j) for j in range(3)] for i in range(3)]
for m in range(1,8):
a=[[sum(a[i][l]*k[l][j] for l in range(3)) for j in range(3)] for i in range(3)]
if m>=2:
self.assertEqual(w.evaluate(w.matching_polynomial(m),Fraction(1,2)),
Fraction(sum(a[i][i] for i in range(3))-3**m,4**m))

if __name__=='__main__':unittest.main()
Loading