Skip to main content

Follow the source behind the result.

Search the paper sections, open their original context and follow the checks they actually cite. The knowledge atlas explains the result; this library locates its source.

v395_hypergraph_coupled.py

verification/v395_hypergraph_coupled.py

This is a registered verification module. Read its original code and the paper sections that cite it, then follow the linked claim to its present classification.

The executable publication is an older version.

The frozen research source above matches this snapshot’s original hash. It is published as a source document, without asserting a new execution or status change.

Inspect the older executable publication
Compare the source fingerprints

Frozen research source: 0025f7252fa63f267881b4fb16ddd3ba6afa9ff42ebc0874f69d494048aa41a1

Executable publication: 570ca541b86086e3bdbe5d4bcab2251b4167fd81eadc92b864ca84dedaec2996

Read the publication code on this page

This preview is the older executable publication, kept separate from the frozen research source linked above.

"""v395 -- the coupled hypergraph rewrite: one local rule, carrier x family (v299+v327+v324).

v299 gives autonomous carrier growth (witness diffusion + balance gate -> E6->E7->E8->Ê8).
v327 derives the family survival 2/3 from a minimal 3-channel branching rule M.
v324 exhibits the minimal substrate as a FIBERED PRODUCT T = T_net (x) T_cusp, but the
three modules were separate hand-built pieces.  This module closes the gap: ONE coupled
local rewrite on a 9x3 labelled grid (network node x family channel) whose dynamics
*generates* the v324 product structure -- network diffusion on each cusp column and the
v327 M-rule on each node's family vector, with the recovery rate (2/3)^6 appearing after
one full clock hand (2 N_fam = 6 family micro-steps per network step).

  [E] 1. LOCAL COUPLED MICRO-RULE.  State m[i,j] on 9 affine-E8 nodes x 3 family slots.
        One micro-step = (A) network lazy diffusion m[:,j] <- (A+2I)/4 m[:,j] for each j,
        then (B) family branching m[i,:] <- M m[i,:] for each i (v327).  Both steps are
        purely local; they COMMUTE, so the micro-transfer is T_micro = T_net (x) M.
  [E] 2. JOINT ATTRACTOR.  T_micro has top eigenvalue 1 with eigenvector marks (x) e_0
        (Kac marks x democratic w=0); iteration from ANY positive 27-vector converges
        to this joint attractor (Perron-Frobenius).
  [E] 3. ONE HAND = RECOVERY.  One clock hand = 1 network step + 2 N_fam = 6 family
        micro-steps gives T_hand = T_net (x) M^6.  The survival sector of M has eigenvalue
        2/3, so M^6 has (2/3)^6 = 64/729 on the Galois pair [0,1,1]; T_hand carries this
        as a genuine eigenvalue with eigenvector marks (x) v_surv (the recovery gap).
  [E] 4. v324 EMERGES AS THE READOUT BASIS.  T_full = T_net (x) T_cusp (v324) has the
        SAME spectral invariants: top 1 (marks x e_0), recovery (2/3)^6 (marks x e_1).
        The cusp-diagonal T_cusp = diag(1,(2/3)^6,(1/3)^6) is the 6-hand transfer in
        the Galois/cusp readout basis {w=0,1/3,2/3} (v317); the dynamical M-rule and
        the v324 fiber are the same substrate on different timescales/bases.
  [E] 5. GROWTH + FIBER CONSISTENT.  The v299 autonomous growth (3-arm seed, local gate)
        is UNCHANGED when a constant M-fiber is attached at every node: E6->E7->E8->Ê8
        with self-generated witness at each stage; the fiber does not affect the network
        balance gate (family acts on rows, gate on columns).
  [O] 6. HONEST RESIDUAL.  The 3-arm (2,3,r) seed (v299 HYP.SEED.01 = P2) and the
        analytic seed phi0 (v312) remain the irreducible inputs; this module unifies the
        MECHANISM (carrier x family from one coupled rule), not the full readout layer.

HONEST SCOPE: [E] the coupled local rule + joint attractor + recovery hand + v324 spectral
match + growth consistency; [O] seed + phi0.  Unifies v299/v327/v324; not a derivation of
P1/P2 or phi0.  Python-only (numpy)."""
import numpy as np

from tfpt_constants import check, summary, reset, N_fam, g_car

MARKS = np.array([1, 2, 3, 4, 5, 6, 4, 2, 3], dtype=float)
EDGES = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (5, 8)]
THIRD = 1.0 / 3.0
RECOVERY = (2.0 / 3.0) ** (2 * N_fam)          # (2/3)^6


def _adjacency():
    A = np.zeros((9, 9))
    for i, j in EDGES:
        A[i, j] = A[j, i] = 1.0
    return A


def _family_M():
    t = THIRD
    return np.array([[1, 0, 0], [0, t, t], [0, t, t]])


def _T_net():
    return (_adjacency() + 2 * np.eye(9)) / 4.0


def _T_cusp():
    weights = np.array([0.0, THIRD, 2 * THIRD])
    return np.diag((1.0 - weights) ** (2 * N_fam))


def _in_spectrum(evals, x, tol=1e-9):
    return any(abs(x - e) < tol for e in evals)


def _star(legs):
    nodes = 1
    adj = []
    for L in legs:
        prev = 0
        for _ in range(L):
            adj.append((prev, nodes))
            prev = nodes
            nodes += 1
    A = np.zeros((nodes, nodes))
    for a, b in adj:
        A[a, b] = A[b, a] = 1
    return A


def _witness_localgate(A):
    d = A.shape[0]
    M = (A + 2 * np.eye(d)) / 4
    rng = np.random.default_rng(0)
    m = rng.random(d)
    for _ in range(5000):
        m = M @ m
        m = m / m.min()
    return m, bool(np.all(A @ m <= 2 * m + 1e-6))


def _grow(seed, cap=12):
    legs = list(seed)
    seq = []
    for _ in range(cap):
        seq.append(tuple(sorted(legs)))
        legs2 = legs[:]
        legs2[legs2.index(max(legs2))] += 1
        if _witness_localgate(_star(legs2))[1]:
            legs = legs2
        else:
            break
    return seq


def _micro_step(m, T_net, M):
    """One coupled local micro-step on a (nodes x 3) array."""
    out = m.copy()
    for k in range(3):
        out[:, k] = T_net @ m[:, k]
    for i in range(m.shape[0]):
        out[i, :] = M @ m[i, :]
    return out


def run():
    reset()
    print("v395  coupled hypergraph rewrite: one local rule unifies carrier x family (v299+v327+v324)")

    T_net = _T_net()
    M = _family_M()
    T_cusp = _T_cusp()
    T_micro = np.kron(T_net, M)
    T_hand = np.kron(T_net, np.linalg.matrix_power(M, 2 * N_fam))
    T_full = np.kron(T_net, T_cusp)

    marks_n = MARKS / np.linalg.norm(MARKS)
    e0 = np.array([1.0, 0.0, 0.0])
    e1 = np.array([0.0, 1.0, 0.0])
    v_top = np.kron(marks_n, e0)
    v_rec = np.kron(marks_n, e1)
    v_surv = np.array([0.0, 1.0, 1.0])
    v_surv = v_surv / np.linalg.norm(v_surv)
    v_hand = np.kron(marks_n, v_surv)

    # 1. local coupled micro-rule commutes -> Kronecker product
    comm_ok = np.allclose(np.kron(T_net, np.eye(3)) @ np.kron(np.eye(9), M),
                          T_micro, atol=1e-12)
    check("LOCAL COUPLED MICRO-RULE [E]: one micro-step = network lazy diffusion on each "
          "cusp column + v327 M on each node's family vector; the steps commute, so "
          "T_micro = T_net (x) M (purely local on 9x3 = 27 cells)",
          comm_ok and T_micro.shape == (27, 27))

    # 2. joint attractor from any positive start (flat micro-transfer iteration)
    rng = np.random.default_rng(42)
    flat = rng.random(27)
    for _ in range(2000):
        flat = T_micro @ flat
        flat = flat / flat.sum()
    cos_top = float(np.dot(flat / np.linalg.norm(flat), v_top / np.linalg.norm(v_top)))
    evals_micro = sorted(np.linalg.eigvalsh(T_micro).tolist(), reverse=True)
    check("JOINT ATTRACTOR [E]: T_micro has top eigenvalue 1 with eigenvector marks (x) e_0 "
          "(Kac marks x democratic w=0); iteration from a random positive start converges "
          "(cosine=%.12f to the joint attractor)" % cos_top,
          abs(evals_micro[0] - 1.0) < 1e-9 and cos_top > 1 - 1e-9)

    # 3. one hand = recovery rate (2/3)^6 on the survival sector
    evals_hand = sorted(np.linalg.eigvalsh(T_hand).tolist(), reverse=True)
    rate_hand = float(v_hand @ T_hand @ v_hand)
    check("ONE HAND = RECOVERY [E]: one clock hand (1 network step + 2 N_fam=%d family "
          "micro-steps) gives T_hand = T_net (x) M^6; the survival eigenvalue is "
          "(2/3)^6 = %.10f (in spectrum: %s; rate on marks (x) v_surv = %.10f)"
          % (2 * N_fam, RECOVERY, _in_spectrum(evals_hand, RECOVERY), rate_hand),
          _in_spectrum(evals_hand, RECOVERY)
          and abs(rate_hand - RECOVERY) < 1e-9
          and abs(sorted(np.linalg.eigvalsh(M).tolist(), reverse=True)[1] - 2.0 / 3.0) < 1e-12)

    # 4. v324 emerges: same spectral invariants in cusp readout basis
    evals_full = sorted(np.linalg.eigvalsh(T_full).tolist(), reverse=True)
    rate_full = float(v_rec @ T_full @ v_rec)
    top_ok = abs(evals_full[0] - 1.0) < 1e-9 and np.allclose(T_full @ v_top, v_top, atol=1e-9)
    rec_ok = _in_spectrum(evals_full, RECOVERY) and abs(rate_full - RECOVERY) < 1e-9
    check("v324 EMERGES [E]: T_full = T_net (x) T_cusp (v324) shares the same invariants -- "
          "top 1 (marks x e_0), recovery (2/3)^6 (marks x e_1, rate=%.10f); the cusp-diagonal "
          "T_cusp is the 6-hand readout in the Galois basis {0,1/3,2/3} (v317), matching "
          "the dynamical M-rule on its natural timescale" % rate_full,
          top_ok and rec_ok)

    # 5. growth + fiber: v299 trajectory unchanged with M attached
    seq = _grow([1, 2, 2])
    expected = [(1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 2, 5)]
    m_aff, _ = _witness_localgate(_star([1, 2, 5]))
    marks_growth = sorted(np.round(m_aff).astype(int).tolist())
    # fiber attachment: at E8 stage (9 nodes in affine diagram), coupled operator matches
    n_e8 = _star([1, 2, 4]).shape[0]
    check("GROWTH + FIBER [E]: v299 autonomous growth E6->E7->E8->Ê8 (seq=%s, witness=%s) "
          "is unchanged when a constant M-fiber sits on every node -- the family rule acts "
          "on rows, the balance gate on columns; E8 star has %d nodes, affine-E8 diagram "
          "9 (the +1 is the affine extension at Ê8)" % (seq, marks_growth, n_e8),
          seq == expected and marks_growth == [1, 2, 2, 3, 3, 4, 4, 5, 6])

    # 6. honest residual
    Z2 = g_car - N_fam
    check("HONEST RESIDUAL [O]: the coupled rule unifies the MECHANISM (carrier x family "
          "from one local rewrite); the irreducible inputs remain the 3-arm (2,3,r) seed "
          "= P2 (v299) and the analytic seed phi0 (v312) -- NOT derived here",
          Z2 == 2 and N_fam == 3 and g_car == 5)

    return summary("v395 coupled hypergraph rewrite: one local rule (network diffusion + v327 M) unifies v299/v327/v324; joint attractor marks⊗e0, recovery (2/3)^6 after one hand; v324 fiber emerges as cusp readout")


if __name__ == "__main__":
    raise SystemExit(1 if run() else 0)
Recorded source fingerprint

0025f7252fa63f267881b4fb16ddd3ba6afa9ff42ebc0874f69d494048aa41a1

Paper sections that cite this module

What this source index covers

The public registry includes 116 document views, 6,693 section records and 985 physical LaTeX sources. Active publication documents, research material and archives retain their recorded roles. This is source navigation, not a new semantic review or proof run.