rOGUEgRINGO's picture
Theory V&V: 6 checks including the chi=0 tautology demonstration
fbe1a20 verified
Raw
History Blame Contribute Delete
4.63 kB
"""Theory verification. Offline, ~10 s, NumPy only.
Six checks. Two of them exist to demonstrate that claims from an earlier draft
were tautological or scope-violating, which is why they test against
adversarial inputs rather than confirming ones.
"""
import numpy as np
np.set_printoptions(precision=6, suppress=True)
def rot(t):
return np.array([[np.cos(t), -np.sin(t)], [np.sin(t), np.cos(t)]])
def d0_cycle(N, theta, c=None):
"""Cellular sheaf coboundary on cycle C_N with R^2 stalks.
c: optional per-vertex stiffness weight."""
if c is None: c = np.ones(N)
D = np.zeros((2*N, 2*N)); I = np.eye(2)
for i in range(N-1):
D[2*i:2*i+2, 2*i:2*i+2] = -np.sqrt(c[i])*I
D[2*i:2*i+2, 2*(i+1):2*(i+1)+2] = np.sqrt(c[i+1])*I
e = N-1
D[2*e:2*e+2, 2*(N-1):2*(N-1)+2] = -np.sqrt(c[N-1])*I
D[2*e:2*e+2, 0:2] = np.sqrt(c[0])*rot(theta)
return D
def d0_path(N, theta):
"""Open chain (tree). N-1 edges, no loop-closing bond."""
D = np.zeros((2*(N-1), 2*N)); I = np.eye(2)
for i in range(N-1):
D[2*i:2*i+2, 2*i:2*i+2] = -I
D[2*i:2*i+2, 2*(i+1):2*(i+1)+2] = rot(theta) if i == 0 else I
return D
print("=" * 72)
print("CHECK 1 closed form lambda_k^pm = 2 - 2cos((2*pi*k +- theta)/N)")
print("=" * 72)
worst = 0.0
for N in [5, 6, 8, 12]:
for th in [0.0, 0.3, np.pi/4, np.pi/2, 2.0, np.pi, 4.5]:
D = d0_cycle(N, th)
num = np.sort(np.linalg.eigvalsh(D.T @ D))
ana = np.sort(np.concatenate([
[2 - 2*np.cos((2*np.pi*k + th)/N) for k in range(N)],
[2 - 2*np.cos((2*np.pi*k - th)/N) for k in range(N)]]))
worst = max(worst, np.max(np.abs(num - ana)))
print(f" max |numeric - closed form|, N in 5..12, 7 angles : {worst:.3e}")
print(f" VERDICT: {'EXACT' if worst < 1e-9 else 'MISMATCH'}")
print("\n" + "=" * 72)
print("CHECK 2 strain floor lambda_min = 2 - 2cos(theta/N) -> theta^2/N^2")
print("=" * 72)
print(f" {'N':>3} {'theta':>7} {'lambda_min':>12} {'2-2cos(th/N)':>14} {'th^2/N^2':>12}")
for N in [5, 10, 20]:
for th in [0.1, 0.5, np.pi/2]:
lm = np.sort(np.linalg.eigvalsh(d0_cycle(N, th).T @ d0_cycle(N, th)))[0]
print(f" {N:>3} {th:>7.4f} {lm:>12.7f} {2-2*np.cos(th/N):>14.7f} {th**2/N**2:>12.7f}")
print("\n" + "=" * 72)
print("CHECK 3 residue stiffness does NOT change Betti numbers")
print("=" * 72)
for name, c in {"AAAAA": [1,1,1,1,1], "APPPA": [1,4,4,4,1],
"AGGGA": [1,.15,.15,.15,1], "random": [0.31,2.7,0.08,5.2,1.9]}.items():
c = np.array(c, float); row = []
for th in [0.0, 0.4, np.pi/2, np.pi]:
D = d0_cycle(5, th, c)
row.append((10 - np.linalg.matrix_rank(D, tol=1e-9),
np.sort(np.linalg.eigvalsh(D.T @ D))[0]))
print(f" {name:>7} h0 = {[x[0] for x in row]} lambda_min = "
+ " ".join(f"{x[1]:.4f}" for x in row))
print(" h0 identical across sequences. Only the energy scale moves.")
print("\n" + "=" * 72)
print("CHECK 4 chi = h0 - h1 = 0 is rank-nullity, not a conservation law")
print("=" * 72)
rng = np.random.default_rng(7); bad = 0
for _ in range(2000):
N = rng.integers(3, 9)
D = rng.normal(size=(2*N, 2*N)) # arbitrary, no sheaf, no biology
if rng.random() < 0.3: D[:, rng.integers(0, 2*N)] = 0
r = np.linalg.matrix_rank(D, tol=1e-9)
if (2*N - r) - (2*N - r) != 0: bad += 1
print(f" chi != 0 in {bad} / 2000 random square coboundaries.")
print(" Holds for ANY square d0. Carries zero information about the peptide.")
print("\n" + "=" * 72)
print("CHECK 5 open backbones cannot frustrate (scope limit)")
print("=" * 72)
for th in [0.0, 0.7, np.pi/2, np.pi, 3.0]:
D = d0_path(6, th); r = np.linalg.matrix_rank(D, tol=1e-9)
print(f" theta={th:6.3f} rank={r:2d} h0={12-r} "
f"lambda_min={np.sort(np.linalg.eigvalsh(D.T@D))[0]:.2e}")
print(" h0=2 always. The mechanism REQUIRES the ring-closing bond.")
print("\n" + "=" * 72)
print("CHECK 6 sqrt(c) in restriction maps breaks the kernel interpretation")
print("=" * 72)
c = np.array([1, 4, 4, 4, 1], float)
D = d0_cycle(5, 0.0, c)
ns = np.linalg.svd(D)[2][np.linalg.matrix_rank(D, tol=1e-9):].T
s = ns[:, 0].reshape(5, 2)
print(" kernel section at theta=0, APPPA stiffness:")
for i, r in enumerate(s):
print(f" v{i}: ({r[0]:+.4f}, {r[1]:+.4f}) "
f"norm*sqrt(c) = {np.linalg.norm(r)*np.sqrt(c[i]):.4f}")
print(" Residues do not share a dihedral vector. The kernel means 'equal after")
print(" rescaling', which is not a conformation. Use edge weights instead:")
print(" Delta = d0^T W d0 with d0 isometric.")