The file src/27-fields/qcd.py of the validation package of the paper 27-fld, rendered with an anchor per line; the file itself is beside this page.
1# framed-rational status: MIXED -- exact framed-rational core; continuum constructs are confined to clearly-labelled [approx] / degenerate-idealisation comparisons (Tier 2/3/5 or measured-data), never to an exact claim.2"""3Strong sector: QCD-1 (confinement) and QCD-2 (the SU(3) rank-three frame).45QCD-1. Confinement is the area law of the Wilson loop in the strong-coupling6 (saturated) regime of the COMPACT finite gauge group. We compute the7 strong-coupling string tension sigma(beta) for compact U(1) and for Z_N8 and exhibit the linear potential V(r)=sigma*r, with the crossover to the9 weak-coupling Coulomb phase. The finite gauge group is compact, so the10 confined phase exists; non-abelian asymptotic freedom puts the IR there.1112QCD-2. SU(3) is the special unitary group of a Hermitian 3-form over the13 quadratic extension K=F_{q^2} (the spinor channel) with Frobenius14 conjugation. Built exactly for q=2 (F_4): order 216, centre Z_315 (colour triality), controlled by the cube-root structure 3 | q+1.16"""17import numpy as np18import itertools19from fractions import Fraction as Fr20import math2122# =====================================================================23# QCD-1 : strong-coupling string tension and the linear potential24# =====================================================================25def besselratio(beta, kmax=60):26 """I1(beta)/I0(beta) by series -- the U(1) single-plaquette character coeff."""27 I0 = sum((beta/2)**(2*k) / (math.factorial(k)**2) for k in range(kmax))28 I1 = sum((beta/2)**(2*k+1) / (math.factorial(k)*math.factorial(k+1))29 for k in range(kmax))30 return I1 / I03132def sigma_U1(beta): # string tension, strong-coupling leading order33 return -math.log(besselratio(beta))3435def sigma_ZN(beta, N):36 """Z_N gauge: single-plaquette character coeff c1 = <cos th e^{b cos th}>/<...>."""37 ths = [2*math.pi*k/N for k in range(N)]38 Z = sum(math.exp(beta*math.cos(t)) for t in ths)39 c1 = sum(math.cos(t)*math.exp(beta*math.cos(t)) for t in ths) / Z40 return -math.log(c1)4142def qcd1():43 print("QCD-1 confinement = area law in the saturated (strong-coupling) regime")44 print(" string tension sigma(beta) = -ln(plaquette character coeff):")45 print(" beta sigma_U(1) sigma_Z2 sigma_Z3 phase")46 for beta in (0.2, 0.5, 1.0, 2.0, 4.0):47 sU = sigma_U1(beta); s2 = sigma_ZN(beta, 2); s3 = sigma_ZN(beta, 3)48 phase = "confined (linear V)" if sU > 0.3 else "-> Coulomb (deconfined)"49 print(f" {beta:4.1f} {sU:8.4f} {s2:8.4f} {s3:8.4f} {phase}")50 # linear potential: V(r) = -lim_T (1/T) ln <W(r,T)> = sigma * r (area law)51 beta = 0.5; s = sigma_U1(beta)52 print(f"\n linear potential at beta={beta} (sigma={s:.4f}): V(r) from area law")53 print(" r : " + " ".join(f"{r}" for r in range(1, 7)))54 print(" V(r): " + " ".join(f"{s*r:.3f}" for r in range(1, 7))55 + " (V/r constant => linear => confining)")56 print(" capacity link: small beta = low channel capacity = saturated;")57 print(" sigma ~ ln(1/beta) is the string tension; sqrt(sigma) sets Lambda_QCD.\n")585960# =====================================================================61# QCD-2 : SU(3, F_q) as the special unitary group of a Hermitian 3-form62# over K = F_{q^2}. Exact construction for q=2 (K=F_4).63# =====================================================================64# F_4 = {0,1,2=w,3=w^2}, char 2. Frobenius conjugation x -> x^2.65ADD = np.array([[0,1,2,3],[1,0,3,2],[2,3,0,1],[3,2,1,0]])66MUL = np.array([[0,0,0,0],[0,1,2,3],[0,2,3,1],[0,3,1,2]])67CONJ = np.array([0,1,3,2]) # x -> x^q = x^2 (Frobenius over F_2)6869def f4_matmul(A, B):70 """batched 3x3 matmul over F_4. A,B: (...,3,3) int arrays."""71 C = np.zeros(A.shape[:-2] + (3, 3), dtype=np.int64)72 for i in range(3):73 for j in range(3):74 acc = np.zeros(A.shape[:-2], dtype=np.int64)75 for k in range(3):76 acc = ADD[acc, MUL[A[..., i, k], B[..., k, j]]]77 C[..., i, j] = acc78 return C7980def f4_det(M):81 a,b,c = M[...,0,0],M[...,0,1],M[...,0,2]82 d,e,f = M[...,1,0],M[...,1,1],M[...,1,2]83 g,h,i = M[...,2,0],M[...,2,1],M[...,2,2]84 def m(x,y): return MUL[x,y]85 t1 = m(a, ADD[m(e,i), m(f,h)])86 t2 = m(b, ADD[m(d,i), m(f,g)])87 t3 = m(c, ADD[m(d,h), m(e,g)])88 return ADD[ADD[t1, t2], t3]8990def qcd2():91 print("QCD-2 SU(3,2): special unitary group of a Hermitian 3-form over F_4")92 # all 3x3 matrices over F_493 N = 4**994 digits = np.array(np.unravel_index(np.arange(N), (4,)*9)).T # (N,9)95 M = digits.reshape(N, 3, 3)96 # conjugate-transpose M^dagger = conj(M)^T97 Mdag = CONJ[M].transpose(0, 2, 1)98 # Hermitian form H = identity: unitary <=> M^dag M = I99 prod = f4_matmul(Mdag, M)100 I3 = np.eye(3, dtype=np.int64)101 unitary = np.all(prod == I3, axis=(1, 2))102 det1 = (f4_det(M) == 1)103 su3 = unitary & det1104 order = int(su3.sum())105 formula = 2**3 * (2**2 - 1) * (2**3 + 1) # q^3 (q^2-1)(q^3+1)106 print(f" |SU(3,2)| enumerated = {order} formula q^3(q^2-1)(q^3+1) = {formula}"107 f" match: {order == formula}")108 # centre: scalar matrices xI with x^3=1 and norm(x)=1109 centre = []110 for x in range(4):111 S = (x * I3) # not F_4 scalar mult; build xI by hand112 S = np.zeros((3,3), dtype=np.int64)113 for j in range(3): S[j,j] = x114 Sd = CONJ[S].T115 if np.all(f4_matmul(Sd[None], S[None])[0] == I3) and f4_det(S[None])[0] == 1:116 centre.append(x)117 print(f" centre = scalar cube-roots of unity {{x I : x in {centre}}} -> Z_{len(centre)}"118 f" (colour triality)")119 print(f" cube roots of unity in F_4^x = C_3 present (3 | q^2-1); centre Z_3 since 3 | q+1.")120 print(f" the defining 3-module over K is the colour triplet.\n")121 return order, formula, len(centre)122123124if __name__ == "__main__":125 print("=" * 70)126 print("STRONG SECTOR (QCD-1 confinement, QCD-2 the SU(3) rank-three frame)")127 print("=" * 70 + "\n")128 qcd1()129 qcd2()130 print("=" * 70)131