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.
v238_modular_lindblad_dynamics.py
verification/v238_modular_lindblad_dynamics.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.
Read the publication code on this page
The registered Python source is shown as text. Displaying it does not execute the code.
"""v238 -- the STATIC->DYNAMIC flip: modular flow (reversible) + the recovery
channel read as a Markov/Lindblad generator (irreversible), with the dissipative
gap EQUAL to the OS mass gap. Companion to v196/v198 (modular) and v221/v64
(recovery): those state the seam structure STATICALLY -- a commutator condition,
a per-step contraction bound, a mass-gap number. This module reads the SAME
objects DYNAMICALLY and shows the two are one.
The seam already owns (a) a modular Hamiltonian Lambda_Sigma = log Delta_omega on
the H^1 block (v196/v198) and (b) a recovery channel T with spectrum
{1, (2/3)^6, (1/3)^6} (v221). Treated statically they are a commutator and a
contraction bound. Treated dynamically:
* the modular flow sigma_t = e^{i t Lambda_Sigma} is the REVERSIBLE
(Hamiltonian) one-parameter group (Tomita-Takesaki). [rho, Lambda_Sigma] = 0
-- the v198 state-invariance -- IS the conservation of the mu4 charge along
that flow. So the STATIC v198 commutator is the conservation law of modular
time.
* the recovery generator L = log T is the IRREVERSIBLE (dissipative) generator
of a continuous doubly-stochastic / CPTP-classical semigroup e^{L tau}, with
e^{L*1} = T (it reproduces the v221 channel) and a unique stationary state
(the arrow of time, matching v64's T^n -> rank-1 projector).
* THE KEYSTONE IDENTITY: the dissipative spectral gap (the slowest relaxation
rate) = -log((2/3)^6) = 6 log(3/2) = the OS/RP mass gap Delta of v64. The
STATIC recovery bound (2/3)^6 (v221) and the DYNAMICAL mass gap 6 log(3/2)
(v64) are ONE number, one exponentiated -- exactly the point at which the
static compiler becomes a dynamics.
[E] 1. MODULAR FLOW = REVERSIBLE GENERATOR. sigma_t = e^{i t Lambda_Sigma} is a
unitary one-parameter group (sigma_s sigma_t = sigma_{s+t}, generator
d/dt|_0 = i Lambda_Sigma); the mu4 clock is conserved, rho sigma_t
rho^{-1} = sigma_t for all t <=> [rho, Lambda_Sigma] = 0 (the v198
state-invariance). NEG: a mu4-breaking off-diagonal Lambda breaks it.
[E] 2. RECOVERY = DISSIPATIVE GENERATOR. L = log T is real-symmetric with
off-diagonals >= 0 and zero row/column sums (a valid doubly-stochastic /
CPTP-classical Markov generator); e^{L*1} = T, and e^{L tau} -> the
rank-1 projector onto the stationary (democratic) mode (the arrow of
time).
[E] 3. KEYSTONE: dissipative gap = OS mass gap. -log((2/3)^6) = 6 log(3/2) =
Delta (v64). NEG: a free rate r != (2/3)^6 breaks the identity.
[E] 4. GKSL SPLIT. G = i Lambda_Sigma + L: reversible part anti-Hermitian
(purely imaginary spectrum, conserving) + dissipative part symmetric
(real spectrum <= 0, gap Delta) -- the canonical Hamiltonian + Lindbladian
split of a quantum dynamical semigroup; the arrow of time is the
dissipative (real) part.
[O] 5. THE RESIDUAL. What is NOT closed: (a) that sigma_t is the GEOMETRIC
modular flow on the FULL seam algebra (Connes-Rovelli 'thermal time =
physical time' = the Bisognano-Wichmann / QGEO.SYM.01 residual, v198), and
(b) that L's continuum embedding extends beyond the finite block. The
same single open premise as v196/v198 -- a target, not a closure.
Python-only (finite-block linear algebra; matrix exp/log via the symmetric
eigendecomposition, numpy only). The finite identities are exact; the
geometric-modular-flow premise is the open QGEO.SYM.01 residual (v198), [O].
"""
import numpy as np
from tfpt_constants import check, summary, reset
LAMBDA2 = (2 / 3) ** 6 # 64/729, the v221 recovery rate
LAMBDA3 = (1 / 3) ** 6
def _sym_funcm(M, f):
"""f(M) for a real-symmetric M via its eigendecomposition (numpy only)."""
w, V = np.linalg.eigh(M)
return (V * f(w)) @ V.T
def _expm_iH(H, t):
"""exp(i t H) for a Hermitian H via its eigendecomposition (numpy only)."""
w, V = np.linalg.eigh(H)
return (V * np.exp(1j * t * w)) @ V.conj().T
def run():
reset()
print("v238 static->dynamic flip: modular flow + recovery Markov generator; "
"dissipative gap = OS mass gap 6 log(3/2)")
# ---- the seam recovery channel T (exactly as v221) ---------------------
u2 = np.array([1.0, -1.0, 0.0]); u2 /= np.linalg.norm(u2)
u3 = np.array([1.0, 1.0, -2.0]); u3 /= np.linalg.norm(u3) # Nariai traceless anchor
J = np.ones((3, 3)) / 3.0
T = J + LAMBDA2 * np.outer(u2, u2) + LAMBDA3 * np.outer(u3, u3)
# ---- 1. modular flow = reversible (Hamiltonian) generator --------------
rho = np.diag([1j, -1.0 + 0j, -1j]) # the mu4 clock (v196/v198)
Lam = np.diag([1.0, 2.0, 3.0]).astype(complex) # Lambda_Sigma = log Delta_omega (any real diagonal)
ts = [0.3, 0.7, 1.1]
def sigma(t):
return _expm_iH(Lam, t)
grp = all(np.allclose(sigma(s) @ sigma(t), sigma(s + t)) for s in ts for t in ts)
unitary = all(np.allclose(sigma(t).conj().T @ sigma(t), np.eye(3)) for t in ts)
dt = 1e-6
gen_ok = np.allclose((sigma(dt) - np.eye(3)) / dt, 1j * Lam, atol=1e-4)
conserved = all(np.allclose(rho @ sigma(t) @ np.linalg.inv(rho), sigma(t)) for t in ts)
comm0 = np.allclose(rho @ Lam - Lam @ rho, 0)
check("MODULAR FLOW = REVERSIBLE GENERATOR [E]: sigma_t = e^{i t Lambda_Sigma} "
"is a unitary one-parameter group (sigma_s sigma_t = sigma_{s+t}, "
"d/dt|_0 = i Lambda_Sigma); the mu4 clock is CONSERVED -- rho sigma_t "
"rho^{-1} = sigma_t for all t <=> [rho,Lambda_Sigma]=0 -- so the STATIC "
"v198 state-invariance IS the conservation law of modular time",
grp and unitary and gen_ok and conserved and comm0)
# NEG: a mu4-breaking off-diagonal Lambda breaks the conservation law
Lam_b = Lam.copy(); Lam_b[0, 1] = 0.5; Lam_b[1, 0] = 0.5
sig_b = _expm_iH(Lam_b, 0.7)
broken = not np.allclose(rho @ sig_b @ np.linalg.inv(rho), sig_b)
comm_b = not np.allclose(rho @ Lam_b - Lam_b @ rho, 0)
check("NEG mu4-breaking [E]: an off-diagonal (mu4-breaking) Lambda_Sigma gives "
"[rho,Lambda]!=0, so rho sigma_t rho^{-1} != sigma_t -- the mu4 charge is "
"no longer conserved by modular time (cf. v196's E_fail perturbation)",
broken and comm_b)
# ---- 2. recovery = dissipative (Lindblad/Markov) generator -------------
L = _sym_funcm(T, np.log) # generator log T (T real-symmetric PD)
offdiag_nonneg = all(L[i, j] >= -1e-12 for i in range(3) for j in range(3) if i != j)
zero_sums = np.allclose(L.sum(axis=1), 0) and np.allclose(L.sum(axis=0), 0)
reproduces = np.allclose(_sym_funcm(L, np.exp), T) # e^{L*1} = T
big = _sym_funcm(50.0 * L, np.exp) # e^{L tau}, tau=50
arrow = np.allclose(big, J, atol=1e-6)
check("RECOVERY = DISSIPATIVE GENERATOR [E]: L = log T is a valid continuous "
"generator -- real-symmetric, off-diagonals >= 0, zero row/column sums "
"(a doubly-stochastic / CPTP-classical Markov generator); e^{L*1} = T "
"reproduces the v221 channel and e^{L tau} -> the rank-1 projector onto "
"the stationary (democratic) mode as tau->inf (the arrow of time, "
"matching v64's T^n -> projector)",
offdiag_nonneg and zero_sums and reproduces and arrow)
# ---- 3. KEYSTONE: dissipative gap = OS mass gap ------------------------
evL = sorted(np.linalg.eigvalsh(L)) # {-6 log 3, -6 log(3/2), 0}
diss_gap = -max(e for e in evL if e < -1e-9) # slowest non-zero rate = -log((2/3)^6)
Delta = 6 * np.log(1.5) # the OS/RP mass gap (v64)
check("KEYSTONE: DISSIPATIVE GAP = OS MASS GAP [E]: the slowest relaxation rate "
"of L = -log((2/3)^6) = 6 log(3/2) = %.6f = the OS/RP mass gap Delta (v64). "
"The STATIC recovery bound (2/3)^6 (v221) and the DYNAMICAL mass gap "
"6 log(3/2) (v64) are ONE number, one exponentiated -- the point where the "
"static compiler becomes a dynamics" % diss_gap,
abs(diss_gap - Delta) < 1e-9 and abs(diss_gap + np.log(LAMBDA2)) < 1e-9)
# NEG: a free recovery rate r != (2/3)^6 breaks the gap=mass-gap identity
r_free = 0.5
Tf = J + r_free * np.outer(u2, u2) + LAMBDA3 * np.outer(u3, u3)
Lf = _sym_funcm(Tf, np.log)
evLf = sorted(np.linalg.eigvalsh(Lf))
gap_f = -max(e for e in evLf if e < -1e-9)
check("NEG free rate [E]: replacing (2/3)^6 by r=0.5 gives dissipative gap "
"-log(0.5) = %.4f != 6 log(3/2) = %.4f -- the gap=mass-gap identity is NOT "
"generic (anti-numerology, cf. v221's free-ratio control)" % (gap_f, Delta),
abs(gap_f + np.log(r_free)) < 1e-9 and abs(gap_f - Delta) > 0.3)
# ---- 4. GKSL split: reversible (imaginary) + dissipative (real <= 0) ----
rev_spec = np.linalg.eigvals(1j * Lam)
rev_imag = np.allclose(rev_spec.real, 0)
sym = np.allclose(L, L.T)
check("GKSL SPLIT [E]: G = i Lambda_Sigma (reversible) + L (dissipative): the "
"reversible generator is anti-Hermitian (spectrum purely IMAGINARY, "
"unitary/conserving) and the dissipative generator is symmetric (spectrum "
"REAL and <= 0, gap Delta) -- the canonical Hamiltonian + Lindbladian split "
"of a quantum dynamical semigroup; the arrow of time is the dissipative "
"(real) part",
rev_imag and sym and max(evL) < 1e-9)
# ---- 5. the residual, honestly typed ----------------------------------
check("THE RESIDUAL [O] (honest, NOT a closure): this EXHIBITS the static->"
"dynamic flip on the finite block -- modular flow as the reversible "
"generator, log T as the dissipative one, dissipative gap = OS mass gap. "
"NOT closed: (a) that sigma_t is GEOMETRIC modular flow on the FULL seam "
"algebra (Connes-Rovelli 'thermal time = physical time' = the "
"Bisognano-Wichmann / QGEO.SYM.01 residual, v198), and (b) that L's "
"continuum embedding extends beyond the finite block. Same single open "
"premise as v196/v198 -- a target, not a closure", True)
return summary("v238 static->dynamic flip (modular flow + recovery Lindblad "
"generator; dissipative gap = OS mass gap)")
if __name__ == "__main__":
raise SystemExit(1 if run() else 0)
Recorded source fingerprint
7938425550d9ad7f199e875f22c52609f4eeeb25b9f51df9a49af508a3576645
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.