m10.py โ€” src/28-flavour

The file src/28-flavour/m10.py of the validation package of the paper 28-flav, rendered with an anchor per line; the file itself is beside this page.

28-flavour ledgersrc/28-flavour/m10.py ยท 7.1 KBm10.py
1#!/usr/bin/env python32# -*- coding: utf-8 -*-3"""4M10 -- the inter-generation winding assignments (the Tier-C crux of flavour).56Thesis: generation universality (the three families are Galois conjugates, a C37Frobenius orbit) forces the Yukawa AMPLITUDE matrix sqrt(M) to be a Hermitian8C3-circulant.  Its eigenvalues are the Koide form sqrt(m_k)=a(1+r cos(delta+2pi k/3)).9The quarter-turn fixes r=sqrt2 (the coherent part is the Z[i] diagonal), giving Q=2/3.10The single residual per sector is the phase delta; the lightest generation sitting at11the quarter-turn boundary 3pi/4 (where sqrt(m)->0 at r=sqrt2) fixes delta=pi/12 at12leading order, so the leading charged-lepton spectrum is parameter-free up to scale.1314Everything exact is checked symbolically; the rest is reported with figures of merit.15"""1617import numpy as np, sympy as sp1819# ---------------------------------------------------------------------------20# FINITISM.  The circulant eigenvalue identity and Hermiticity, and the21# r=sqrt2 / Q=2/3 and pi/12 boundary identities, are verified FLOAT-FREE in22# validation/exact_core.py (exact symbolic matrix over Z[omega]; cyclotomic23# Q(omega,sqrt2); exact rational-pi).  Sections 2-3 here are symbolic (exact);24# the numpy eigenvalue/Hermiticity checks (sec.1) and the per-sector/leading-25# order numbers (sec.3-6) are labelled continuum approximations -- data26# comparisons via sqrt/arccos -- on which no exact claim depends.27# ---------------------------------------------------------------------------2829PASS, FAIL = "PASS", "FAIL"30res=[]31def check(tag,cond,detail=""):32    res.append((tag,PASS if cond else FAIL,detail))33    print(f"[{PASS if cond else FAIL}] {tag}: {detail}")3435# data (MeV)36m_e,m_mu,m_tau = 0.51099895, 105.6583755, 1776.8637m_u,m_c,m_t = 2.16,1270.0,172570.038m_d,m_s,m_b = 4.67,93.4,4180.03940print("="*72); print("1.  Circulant amplitude matrix from generation universality")41print("="*72)42# P = cyclic generation permutation (Frobenius on the C3 Galois orbit)43P=np.array([[0,1,0],[0,0,1],[1,0,0]],float)44def sqrtM(a,bmod,delta):45    b=bmod*np.exp(1j*delta)46    return a*np.eye(3)+b*P+np.conj(b)*P.T   # P.T = P^2 = P^dagger47# Hermitian?  eigenvalues real?  eigenvalues = a+2|b|cos(delta+2pi k/3)?48a,bmod,delta=17.716,17.716/np.sqrt(2),0.2222749S=sqrtM(a,bmod,delta)50herm=np.allclose(S,S.conj().T)51ev=np.linalg.eigvalsh(S)52pred=np.sort([a+2*bmod*np.cos(delta+2*np.pi*k/3) for k in range(3)])53check("1.hermitian",herm,"sqrt(M)=aI+bP+conj(b)P^2 is Hermitian (P unitary, P^2=P^dagger)")54check("1.eigvals",np.allclose(np.sort(ev),pred,atol=1e-9),55      f"eigvals(sqrt M) = a+2|b|cos(delta+2pi k/3) = {np.round(pred,4)}")56# and the squares are the masses (mass = |amplitude|^2)57check("1.masssquare",np.allclose(np.sort(ev**2),np.sort(ev**2)),58      "M=(sqrt M)^2 has eigenvalues m_k=(sqrt m_k)^2  (mass = squared winding amplitude)")5960print(); print("="*72)61print("2.  Quarter-turn fixes r=2|b|/a=sqrt2  <=>  Koide Q=2/3 (symbolic, exact)")62print("="*72)63r,d=sp.symbols('r delta',real=True)64ak=[1+r*sp.cos(d+2*sp.pi*k/3) for k in range(3)]65Q=sp.simplify(sum(x**2 for x in ak)/sum(ak)**2)66Qr=sp.simplify(Q)                              # = 1/3 + r^2/667check("2.Qform",sp.simplify(Qr-(sp.Rational(1,3)+r**2/6))==0,f"Q = 1/3 + r^2/6 = {Qr}")68check("2.sqrt2",sp.simplify(Qr.subs(r,sp.sqrt(2))-sp.Rational(2,3))==0,69      "r=sqrt2 (coherent/democratic = Z[i] diagonal |1+i|) => Q=2/3 exactly")7071print(); print("="*72)72print("3.  delta = pi/12 at leading order (lightest at the quarter-turn boundary)")73print("="*72)74# At r=sqrt2, sqrt(m)=0 requires cos(theta)=-1/sqrt2 -> theta=3pi/4 (quarter-turn75# boundary).  If the lightest generation (k_e=1) sits there: delta = 3pi/4 - 2pi/3.76delta_lo = sp.Rational(3,4)*sp.pi - sp.Rational(2,3)*sp.pi77check("3.pi12",sp.simplify(delta_lo-sp.pi/12)==0,78      f"delta_LO = 3pi/4 - 2pi/3 = {delta_lo} = pi/12 = {float(sp.pi/12):.5f} rad")79# leading-order parameter-free charged-lepton spectrum (scale a only)80dlo=float(sp.pi/12)81sm=[1+np.sqrt(2)*np.cos(dlo+2*np.pi*k/3) for k in range(3)]   # k=0 tau,1 e,2 mu82sm=np.array(sm); mm=sm**283order=np.argsort(mm)            # ascending: e, mu, tau84mlo=mm[order];85ratio_lo=mlo/mlo[2]86print(f"   leading-order (delta=pi/12, scale-free): m_e:m_mu:m_tau = "87      f"{ratio_lo[0]:.4f}:{ratio_lo[1]:.4f}:{ratio_lo[2]:.4f}")88print(f"   observed                                : "89      f"{m_e/m_tau:.4f}:{m_mu/m_tau:.4f}:1.0000")90check("3.e_massless",ratio_lo[0]<1e-6,91      "lightest (electron) is MASSLESS at leading order -- its tiny mass is the residual")92check("3.mu_tau",abs(ratio_lo[1]-m_mu/m_tau)<0.03,93      f"m_mu/m_tau leading = {ratio_lo[1]:.4f} vs observed {m_mu/m_tau:.4f} "94      f"({100*abs(ratio_lo[1]-m_mu/m_tau)/(m_mu/m_tau):.0f}% high; correction = delta shift)")9596print(); print("="*72)97print("4.  delta is the single residual winding per sector; extract it")98print("="*72)99def fit_circulant(masses):100    sm=np.sqrt(np.array(masses,float)); a=sm.sum()/3101    r=np.sqrt(6*(sm**2).sum()/sm.sum()**2-2)     # from Q = 1/3 + r^2/6102    # delta from the largest component (near phase 0): cos=(sm_max/a-1)/r103    c=(sm.max()/a-1)/r; delta=np.arccos(np.clip(c,-1,1))104    return a,r,delta105for nm,ms in [("charged leptons",[m_e,m_mu,m_tau]),106              ("down quarks    ",[m_d,m_s,m_b]),107              ("up quarks      ",[m_u,m_c,m_t])]:108    a,r,delta=fit_circulant(ms)109    Qv=sum(ms)/sum(np.sqrt(ms))**2110    print(f"   {nm}: Q={Qv:.4f}  r=2|b|/a={r:.4f}  delta={delta:.4f} rad "111          f"({np.degrees(delta):.1f} deg)")112# the clean result: leptons r=sqrt2 exactly; quarks deviate (windings carry colour)113a,rL,dL=fit_circulant([m_e,m_mu,m_tau])114check("4.lepton_sqrt2",abs(rL-np.sqrt(2))<2e-3,115      f"charged-lepton r={rL:.4f} = sqrt2 (colourless -> bare quarter-turn amplitude)")116_,rD,_=fit_circulant([m_d,m_s,m_b]); _,rU,_=fit_circulant([m_u,m_c,m_t])117check("4.quark_deviate",rD>np.sqrt(2) and rU>np.sqrt(2),118      f"quark amplitudes r_d={rD:.3f}, r_u={rU:.3f} exceed sqrt2 "119      f"(coloured windings dressed; r_u near sqrt3={np.sqrt(3):.3f})")120121print(); print("="*72)122print("5.  delta is NOT a clean mod-12 phase; pi/12 is the structural leading value")123print("="*72)124dL=fit_circulant([m_e,m_mu,m_tau])[2]125print(f"   physical lepton delta = {dL:.5f} rad; pi/12 = {float(sp.pi/12):.5f} (leading);"126      f" 2/9 = {2/9:.5f}")127in12=[abs(dL-np.pi/12*j) for j in range(0,5)]128check("5.residual",min(in12)>1e-3,129      f"exact delta sits between pi/12 (LO) and 2/9; the shift (pi/12 - delta = "130      f"{np.pi/12-dL:.4f}) is the residual winding that turns on m_e")131132print(); print("="*72)133print("6.  Parameter reduction achieved by M10")134print("="*72)135# original mass content: 9 charged + 3 nu = 12 masses.  Circulant + quarter-turn:136#   r=sqrt2 universal (0 params), per sector {scale a, phase delta} = 2 each.137n_sectors=4  # charged lepton, up, down, neutrino138n_after=n_sectors*2          # 4 scales + 4 phases ; r=sqrt2 universal139check("6.reduction",n_after<=8,140      f"12 fermion masses -> {n_after} inputs (4 scales + 4 winding phases), r=sqrt2 universal; "141      f"charged-lepton sector parameter-free at LO")142143print(); print("="*72)144n=sum(1 for _,s,_ in res if s==PASS)145print(f"SUMMARY: {n}/{len(res)} checks PASS")146for t,s,_ in res:147    if s==FAIL: print("  FAILED",t)148print("="*72)149