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
179 changes: 179 additions & 0 deletions notes/exact-foundations-correction-20260912.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
# Exact foundations: corrected topology, shape, and hidden criticality

Date: 2026-09-12. Base read: `main@8b5bc840e4c499e3bfa31f61bfd6f2a713b2e1d5`.
This note supersedes the affected arguments, not the historical measurements, in
PRs #675, #690, #693, #666 and #688. No percolation production, threshold
estimation, or large census is performed. New proofs below are mathematical
consequences/constructions, not claims of literature novelty.

## 1. All-size wrapping label map: no directional conjecture is needed

Use exactly the scope of `notes/digital-alexander-duality-proof.md`: an honest
periodic square-cell torus, with the NN black graph and complementary NN+NNN
white graph. In a common homology basis let their rational ambient images be
A,C in H_1(T^2;Q). The existing embedded-reduction and subsurface lemma gives
C=A^perp for the intersection pairing omega((a,b),(x,y))=ay-bx.

**Elementary correction.** If A=span(a,b) is a nonzero line, then

A^perp = {(x,y): ay-bx=0} = A.

In particular span(1,0)^perp=span(1,0), NOT span(0,1). PR #690 confused
symplectic orthogonality with Euclidean orthogonality; the same mistake entered
its reviews and #693. No extra face-parity or 90-degree argument is required.

**Theorem (allowed joint labels).** In the stated scope, the only possible pairs
of the rank-refined labels none, x, y, spiral, cross are

(none,cross), (cross,none), (x,x), (y,y), (spiral,spiral).

Proof. The rank-sum theorem permits (0,2),(2,0),(1,1) only. At rank one,
C=A, so both sides have the same rational winding line. This forces the same
single-axis label or the same both-coordinate spiral label. Distinct components
of either embedded graph have zero intersection pairing. They cannot contribute
two independent homology lines on a torus; if the total image has rank two, one
component therefore carries it. The white embedded reduction preserves both
connectivity and ambient classes by the facewise replacements in the existing
proof. Thus rank two is a cross, not two disjoint transverse clusters. This
also proves the both-two label is empty. QED.

This is an **allowed-support** theorem, not a statement that every allowed cell
has positive mass at every size. It equates rational lines and labels, not the
integer subgroup, cluster counts, or a literal colour-flip operation. Degenerate
periodic quotients outside the original proof remain outside this result.

Consequences: the black-spiral and white-spiral events are the SAME configuration
set at every size in scope; their cancellation is pointwise, not an involution
between distinct configurations. Directional equality holds in the (1,1) case,
not for all configurations (all-black already refutes that unqualified wording).
For any probability measure on these configurations,

D = 1{r_b>0}-1{r_w>0} = r_b-1,
M = E[D] = P_2-P_0,
F := E[r_b]/2 = (1+M)/2.

These need neither Bernoulli independence nor a census. Under the Bernoulli
family F is strictly increasing, so its median parameter is the unique matching
root: p*_N=Q_N(1/2). This says nothing about rates or a closed form for p_c.

## 2. What the finite-operator objection actually establishes

PR #675's probability/eigenvalue distinction is important but is not a general
impossibility theorem. For example, on the space indexed by configurations,
let W_p be diagonal with the Bernoulli weights and P_j the diagonal projector
onto r_b=j. Then M=tr((P_2-P_0)W_p) is an exact single-operator representation.
This is an exponentially large tautological representation, not an efficient
row transfer, not pTL, and not a leading-eigenvalue identity.

The useful unresolved question is therefore restricted: specify local weighted
propagation, closure, the sector maps and the cylinder limit before comparing
with Jacobsen's criterion. A finite probability difference need not equal a
leading-eigenvalue difference. That does NOT imply that no operator can encode
it. The black-only identity above also defeats a blanket claim that both graph
connectivities must always be stored. #636 receives no automatic large-compute
release from this correction; #681 should own the precise cylinder bridge.

## 3. Shape symmetry is not reflection about the raw parameter 1/2

PR #666 proposes C3: sup_{p in K}|M_N(p)+M_N(1-p)| -> 0 for every compact
K in (0,1), and identifies it with normalized shape symmetry. Under the
repository's location conclusion F_N(p)->0 below c and ->1 above c, this C3
forces c=1/2: if c>1/2, M_N(1/2)->-1; if c<1/2 it tends to +1. Either way,
for c!=1/2 the absolute sum at 1/2 tends to 2, not zero. Thus C3 cannot be
used as the shape hypothesis for a differently centred transition.

With symmetric anchors a,1-a and W_N=Q_N(1-a)-Q_N(a)>0, the correct diagnostic is

A_N(u) = [Q_N(u)+Q_N(1-u)-Q_N(a)-Q_N(1-a)]/W_N
= Z_N(u)+Z_N(1-u)-1.

Its convergence to zero is a shape question independent of the limiting centre.
It remains OPEN for the relevant percolation families. Self-duality constrains
shape but does not select a unique symmetric profile. Two exact tiny sizes,
a bond control and one site production are not a within-model asymptotic ladder.

There is a second elementary correction to #622/#624 and their descendants.
For an increasing affine map phi(p)=alpha*p+beta, ordinary pushforward gives
F_phi=F composed with phi^{-1}, hence Q_phi=phi composed with Q. These actions
DO intertwine. On a fixed [0,1] support one must track the transformed support;
forcing both endpoints fixed leaves only the identity. A nonlinear kink is
not an affine map and cannot distinguish two alleged Aff(1) actions.
The valid location-without-shape constructions are unaffected by this correction.

## 4. An irreducible exact no-go replacing the direct-sum overclaim

The old `notes/bounded-task-rank-threshold-no-go-20260907.md` conflates Markov
irreducibility and reducibility of a real linear representation. Already
G=[[-1,1],[1,-1]] is an irreducible generator commuting with the nontrivial
state swap R. Its even and odd eigenspaces are not disconnected Markov classes.
Also, a direct sum of irreducible generators is not irreducible as a chain.

**Theorem (product-chain repair).** For c in {1/2,1/3}, p in [0,1], L>=2,
let H_L(p-c) be the reflecting nearest-neighbour walk with right rate
exp(p-c), left rate exp(c-p). Set V=[[-2,2],[2,-2]] and

G_{L,c}=V tensor I_L + I_2 tensor H_L(p-c).

Every finite chain is connected, irreducible, reversible, entrywise analytic,
and local on a two-layer ladder (maximum degree three, uniformly bounded
positive rates). Let e0=(1,0)^T, B=e0 tensor 1_L, and
C=e0^T tensor (1_L^T/L), common to both families. Since H_L*1_L=0,

C exp(t G_{L,c}) B = e0^T exp(t V) e0 = (1+exp(-4t))/2

for all L,p,t. The exact task order INCLUDING the stationary constant is two;
the decaying contrast alone has order one. Yet the full-chain gap is

gamma_{L,c}(p)=2*cosh(p-c)-2*cos(pi/L),
gamma_{infinity,c}(p)=4*sinh((p-c)/2)^2.

To verify the gap formula, similarity by the square root of the birth-death
stationary weights makes each hidden off-diagonal equal sqrt(ab)=1; its
nonzero eigenvalues are -(a+b)+2*sqrt(ab)*cos(k*pi/L), k=1,...,L-1.
The product-chain rates are sums with 0 and 4. For the stated c,p,L,
the smallest hidden rate is at most 2*cosh(2/3)<4, so it is also the full gap.
Only p=c closes in the limit. QED.

Thus exact task equality can coexist with different gap-closing locations
EVEN FOR OVERALL IRREDUCIBLE CHAINS. This is an abstract spectral-threshold
counterexample, not percolation, not a universality claim, and not robustness
to arbitrary interactions that destroy the product structure. The construction
is presented without a novelty claim. The accompanying mpmath check is a
numerical diagnostic of the formula, not the proof.

A related correction: a mode's response residue is (C v)(w^T B). It vanishes
if either factor vanishes, not only when both do. In systems with repeated
modes/couplings, use the minimal realization/Kalman decomposition rather than
an unsupported if-and-only-if assertion about an arbitrary invariant subspace.

## 5. The nonnegative-rank separation survives with logarithmic growth

`notes/positive-vs-signed-slack-separation-20260906.md` and #688 state that a
regular n-gon's slack matrix has nonnegative rank n. This is false. Its ordinary
rank is three and its nonnegative rank is Theta(log n). The unbounded-versus-
bounded separation remains valid; the claimed linear growth does not.

PRIMARY_TEXT_READ, 2026-09-12: Fiorini, Rothvoss, Tiwary, *Extended formulations
for polygons*, arXiv:1107.0371v2, sections 1-3 (HTML):
https://arxiv.org/html/1107.0371v2
Theorem 1 identifies extension complexity with slack nonnegative rank;
Theorem 2 gives O(log n) for regular polygons; section 1 gives the matching
Omega(log n) bound. No polygon-to-native-cut-network realization is proved here.

## 6. Consequence for further work

Do not commission larger wrapping censuses to prove the directional label map;
it follows already. Do not test #666's raw-p C3 as though it were shape symmetry.
Do not infer a universal one-operator no-go from #675, or a percolation threshold
from the product-chain construction. Retain the valid exact data, location
lemma, finite non-scalar failures and original-U identifiability problem.

The next empirical target should be the corrected within-model shape diagnostic
and full-vector residual on existing histograms, not another fitted exponent.
P3 needs an explicit covariance-support policy before singular scores are used;
its missing N580 covariance should first be recovered from committed `_deleted`
arrays, not bought by another production.

Validation: `python -m unittest discover -s tests -p 'test_research_control_exact.py'`.
Five checks pass locally, including 54 product-chain response checks at 40 digits.
No full repository test suite was run in this connector-only checkout.
11 changes: 11 additions & 0 deletions results/research-control-20260912/irreducible-product.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"scope": "Abstract irreducible Markov control; not percolation",
"response_checks": 54,
"precision_decimal_digits": 40,
"max_response_error_diagnostic": "2.2958874e-41",
"exact_response": "(1+exp(-4*t))/2",
"finite_gap": "2*cosh(p-c)-2*cos(pi/L), L>=2, c=1/2 or 1/3",
"limiting_gap": "4*sinh((p-c)/2)^2",
"exact_task_order_including_constant_mode": 2,
"all_checked_graphs_connected": true
}
68 changes: 68 additions & 0 deletions scripts/theory/irreducible_hidden_threshold.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/env python3
"""An irreducible product-chain no-go, not a percolation simulation.

Row generators act on terminal observables. B=e0 tensor 1; C=e0^T tensor
uniform initial law. Algebra proves the response; small mpmath checks are
numerical diagnostics, never the evidence for an all-L theorem.
"""
from __future__ import annotations
import json
from mpmath import mp


def generator(length, p, center):
if length < 2:
raise ValueError("length must be at least two")
a, b = mp.exp(p-center), mp.exp(center-p)
g = mp.zeros(2*length)
for hand in range(2):
for i in range(length):
row = hand*length+i
g[row, (1-hand)*length+i] = 2
if i+1 < length:
g[row, row+1] = a
if i:
g[row, row-1] = b
g[row, row] = -mp.fsum(g[row, j] for j in range(2*length) if j != row)
return g


def check():
with mp.workdps(40):
error = mp.mpf(0)
count = 0
for length in (2, 3, 5):
B = mp.matrix([1]*length+[0]*length)
C = mp.matrix([[mp.mpf(1)/length]*length+[0]*length])
for p in (mp.mpf(0), mp.mpf('0.5'), mp.mpf(1)):
for center in (mp.mpf(1)/2, mp.mpf(1)/3):
g = generator(length, p, center)
assert mp.norm(g*mp.ones(2*length, 1)) < mp.mpf('1e-35')
# All rails in both directions and every rung are positive.
for hand in range(2):
for i in range(length-1):
j = hand*length+i
assert g[j, j+1] > 0 and g[j+1, j] > 0
for i in range(length):
assert g[i, i+length] == g[i+length, i] == 2
for t in (mp.mpf(0), mp.mpf('0.2'), mp.mpf(1)):
got = (C*mp.expm(t*g)*B)[0]
want = (1+mp.exp(-4*t))/2
error = max(error, abs(got-want))
count += 1
assert error < mp.mpf('1e-35')
return {
'scope': 'Abstract irreducible Markov control; not percolation',
'response_checks': count,
'precision_decimal_digits': 40,
'max_response_error_diagnostic': mp.nstr(error, 8),
'exact_response': '(1+exp(-4*t))/2',
'finite_gap': '2*cosh(p-c)-2*cos(pi/L), L>=2, c=1/2 or 1/3',
'limiting_gap': '4*sinh((p-c)/2)^2',
'exact_task_order_including_constant_mode': 2,
'all_checked_graphs_connected': True,
}


if __name__ == '__main__':
print(json.dumps(check(), indent=2, allow_nan=False))
54 changes: 54 additions & 0 deletions tests/test_research_control_exact.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
"""Checks for concrete mathematical mistakes, not manuscript wording."""
from fractions import Fraction as F
from pathlib import Path
import sys
import unittest
sys.path.insert(0, str(Path(__file__).resolve().parents[1]/'scripts'/'theory'))
from irreducible_hidden_threshold import check


class ExactControlTests(unittest.TestCase):
def test_symplectic_line_is_its_own_orthogonal(self):
# In a symplectic plane annihilator of (a,b) is ay-bx=0.
for a,b in ((1,0),(0,1),(1,1),(2,-3)):
for x in range(-5,6):
for y in range(-5,6):
self.assertEqual(a*y-b*x == 0, F(a)*y == F(b)*x)
self.assertEqual(1*0-0*1, 0) # (1,0) lies in its own annihilator.
self.assertNotEqual(1*1-0*0, 0) # (0,1) does not.

def test_rank_identity_needs_no_direction_conjecture(self):
for r in range(3):
white = 2-r
d = int(r>0)-int(white>0)
self.assertEqual(d, r-1)
self.assertEqual(F(1+d,2), F(r,2))

def test_affine_pushforward_intertwines_inverse(self):
# F(p)=p^2, Q(u)=sqrt(u); exact rational points avoid roundoff.
alpha,beta = F(3,2),F(-1,7)
for q in (F(1,5),F(1,2),F(4,5)):
x = alpha*q+beta
self.assertEqual(((x-beta)/alpha)**2, q*q)

def test_shape_symmetry_does_not_force_center_half(self):
center,a,b = F(3,5), F(1,4), F(3,4)
for n in (10,20,100):
width,eps = F(1,n),F(1,n*n)
lower = center-width/2
def Q(u):
return (u+(1-eps)*lower/width)/((1-eps)/width+eps)
def Z(u):
return (Q(u)-Q(a))/(Q(b)-Q(a))
for i in range(1,10):
u=F(i,10)
self.assertEqual(Z(u)+Z(1-u),1)
# At 1/2 only the uniform background contributes to the CDF.
self.assertEqual(2*(2*eps*F(1,2)-1), -2+2*eps)

def test_irreducible_product_chain(self):
self.assertEqual(check()['response_checks'],54)


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