ew1.py โ€” src/27-fields

The file src/27-fields/ew1.py of the validation package of the paper 27-fld, rendered with an anchor per line; the file itself is beside this page.

27-fields ledgersrc/27-fields/ew1.py ยท 7.3 KBew1.py
1# framed-rational status: EXACT -- integer / modular-F_p / cyclotomic arithmetic; no float in any asserted check (float, if present, only formats an exact rational for display).2"""3EW-1: electroweak symmetry breaking as drive / torus misalignment.45  A. The breaking mechanism, exact over F_p:6     the drive (a split-torus element) acts by conjugation on the gauge Lie7     algebra sl2(F_p); it fixes its own Cartan (eigenvalue 1 = unbroken U(1)_EM,8     drive-invariant, hence massless) and rotates the off-diagonal generators9     (eigenvalues t^{+-2} != 1 = the charged, gapped W^pm).  Its centraliser is10     the split torus = U(1), order p-1.  The non-split torus (weak SU(2)) is NOT11     centralised by the drive -> the source of the breaking.12  B. Neutral mixing: the (W3,B) mass matrix -> massless photon + massive Z,13     tan(theta_W)=g'/g, and a doublet Higgs gives rho = M_W^2/(M_Z^2 cos^2)=1.14  C. The Weinberg angle reduces to the charge spectrum:15     sin^2(theta_W) = Tr(T3^2)/Tr(Q^2) = 3/8 for a complete generation (exact),16     1/2 for a lone lepton doublet -> the number is set by the fermion content.1718Finitism: part A is exact arithmetic in F_p; part C is exact rationals; part B19is exact symbolic algebra.  No RNG, FFT, or floating point in the derivations.20"""21from fractions import Fraction as Fr22import sympy as sp23import itertools2425# ======================================================================26# A. breaking mechanism, exact in F_p   (p = 13, symmetry-complete 4t+1)27# ======================================================================28def partA(p=13, g=2):29    # matrices over F_p as tuples (a,b,c,d) for [[a,b],[c,d]]30    def mul(X, Y):31        a, b, c, d = X; e, f, h, k = Y32        return ((a*e + b*h) % p, (a*f + b*k) % p,33                (c*e + d*h) % p, (c*f + d*k) % p)34    def inv_scalar(t): return pow(t, p - 2, p)3536    t = g; ti = inv_scalar(t)                     # drive = diag(t, t^-1)37    drive = (t, 0, 0, ti)38    drive_inv = (ti, 0, 0, t)3940    # Ad_drive on the sl2 basis H=[[1,0],[0,-1]], E=[[0,1],[0,0]], F=[[0,0],[1,0]]41    H = (1, 0, 0, p - 1); E = (0, 1, 0, 0); Fm = (0, 0, 1, 0)42    eig = {}43    for name, Xb in [('H', H), ('E', E), ('F', Fm)]:44        Y = mul(mul(drive, Xb), drive_inv)45        # Y should be lambda * Xb; read lambda off the nonzero component46        comp = next(i for i in range(4) if Xb[i] % p)47        lam = (Y[comp] * inv_scalar(Xb[comp] if Xb[comp] != p-1 else p-1)) % p48        # simpler: lambda = Y[comp]/Xb[comp]49        lam = (Y[comp] * inv_scalar(Xb[comp] % p)) % p50        eig[name] = lam5152    # centraliser of the drive in SL2(F_p): brute force53    cent = 054    for a in range(p):55        for b in range(p):56            for c in range(p):57                for d in range(p):58                    if (a*d - b*c) % p != 1:59                        continue60                    M = (a, b, c, d)61                    if mul(M, drive) == mul(drive, M):62                        cent += 16364    # non-split torus: norm-1 elements of F_p[sqrt(nu)], nu a nonsquare.65    squares = {(x*x) % p for x in range(p)}66    nu = next(x for x in range(2, p) if x not in squares)67    # element [[a, nu*b],[b, a]] has determinant a^2 - nu b^2 (the norm)68    nonsplit_gen = None69    for a in range(p):70        for b in range(p):71            if (a*a - nu*b*b) % p == 1 and not (b == 0 and a == 1):72                nonsplit_gen = (a, (nu*b) % p, b, a); break73        if nonsplit_gen: break74    commutes = mul(nonsplit_gen, drive) == mul(drive, nonsplit_gen)75    return eig, cent, p - 1, nu, commutes767778# ======================================================================79# B. neutral mixing, photon/Z, rho = 1   (exact symbolic)80# ======================================================================81def partB():82    g, gp, v = sp.symbols('g g_prime v', positive=True)83    # neutral gauge mass^2 matrix in (W3, B) basis from a doublet Higgs vev v84    M2 = sp.Rational(1, 4) * v**2 * sp.Matrix([[g**2, -g*gp], [-g*gp, gp**2]])85    eigs = sp.simplify(sp.Matrix(M2).eigenvals())     # {0: photon, (g^2+g'^2)v^2/4: Z}86    MW2 = sp.Rational(1, 4) * g**2 * v**2             # charged W mass^287    MZ2 = sp.Rational(1, 4) * (g**2 + gp**2) * v**288    cos2 = g**2 / (g**2 + gp**2)                      # cos^2(theta_W)89    rho = sp.simplify(MW2 / (MZ2 * cos2))             # custodial rho parameter90    tan = gp / g                                      # tan(theta_W)91    return eigs, sp.simplify(rho), tan929394# ======================================================================95# C. Weinberg angle from the charge spectrum  (exact rationals)96#    sin^2(theta_W) = Tr(T3^2) / Tr(Q^2)97# ======================================================================98def sin2_from_content(fermions):99    """fermions: list of (T3, Q, multiplicity)."""100    trT3 = sum(Fr(T3)**2 * m for T3, Q, m in fermions)101    trQ = sum(Fr(Q)**2 * m for T3, Q, m in fermions)102    return trT3 / trQ, trT3, trQ103104def partC():105    # lone left-handed lepton doublet (nu, e)106    lepton = [(Fr(1, 2), 0, 1), (Fr(-1, 2), -1, 1)]107    # complete SM generation: 15 left-handed Weyl fermions108    #   (T3 nonzero only for LH SU(2) doublets; Q for all)109    gen = [110        (Fr(1, 2),  0,    1),   (Fr(-1, 2), -1,   1),    # lepton doublet111        (0,         1,    1),                            # e^c (positron)112        (Fr(1, 2),  Fr(2, 3), 3), (Fr(-1, 2), Fr(-1, 3), 3),  # quark doublet x3 colour113        (0,         Fr(-2, 3), 3),                       # u^c x3114        (0,         Fr(1, 3),  3),                       # d^c x3115    ]116    s_lep, *_ = sin2_from_content(lepton)117    s_gen, trT3, trQ = sin2_from_content(gen)118    return s_lep, s_gen, trT3, trQ119120121if __name__ == "__main__":122    print("=" * 68)123    print("EW-1  electroweak breaking as drive / torus misalignment")124    print("=" * 68)125126    eig, cent, torus, nu, commutes = partA(13, 2)127    print("\n[A] breaking mechanism, exact in F_13 (drive = diag(2, 2^-1))")128    print(f"    Ad_drive eigenvalues on sl2:  H -> {eig['H']},  E -> {eig['E']},"129          f"  F -> {eig['F']}   (mod 13)")130    print(f"    H is drive-invariant (eigenvalue 1)  => unbroken U(1)_EM, MASSLESS photon")131    print(f"    E,F have eigenvalues != 1            => charged W^pm, GAPPED (massive)")132    print(f"    centraliser of the drive in SL2(F_13) = {cent}  = p-1 = {torus}"133          f"  (the split torus = U(1))")134    print(f"    non-split torus (weak SU(2), nu={nu}) commutes with drive: {commutes}"135          f"   => drive misaligns SU(2): the source of breaking")136137    eigs, rho, tan = partB()138    print("\n[B] neutral mixing (exact symbolic)")139    print(f"    (W3,B) mass^2 eigenvalues: {dict(eigs)}")140    print(f"      -> one ZERO eigenvalue (photon) + one massive (Z)")141    print(f"    tan(theta_W) = g'/g ;  custodial rho = M_W^2/(M_Z^2 cos^2 theta_W) = {rho}"142          f"   (doublet Higgs => rho = 1 exactly)")143144    s_lep, s_gen, trT3, trQ = partC()145    print("\n[C] Weinberg angle from the charge spectrum (exact rationals)")146    print(f"    sin^2(theta_W) = Tr(T3^2)/Tr(Q^2)")147    print(f"      lone lepton doublet        : {s_lep}  = {float(s_lep):.4f}")148    print(f"      complete SM generation     : Tr(T3^2)={trT3}, Tr(Q^2)={trQ}"149          f"  ->  sin^2 = {s_gen} = {float(s_gen):.4f}")150    print(f"    => the ANGLE reduces to the fermion content; a complete generation")151    print(f"       gives the standard unification value 3/8 (runs to ~0.231 at M_Z).")152    print("=" * 68)153