The file src/28-flavour/tier_b.py of the validation package of the paper 28-flav, rendered with an anchor per line; the file itself is beside this page.
1#!/usr/bin/env python32# -*- coding: utf-8 -*-3"""4Tier-B push of the finite-substrate flavour ledger (28-spectroscopy).5Items M5, M6, M7, M8, M9 of reports/mass-spectrum-ledger.67Discipline: every EXACT claim is checked in symbolic / rational arithmetic8(sympy); every numerical claim against data is reported with its figure of9merit; fits/illustrations are labelled as such. No claim is asserted that the10script does not verify.11"""1213import sympy as sp14import numpy as np1516# ---------------------------------------------------------------------------17# FINITISM. The load-bearing EXACT claims (the Koide identities) are also18# verified float-free in validation/exact_core.py, in the cyclotomic field19# Q(omega,sqrt2). In THIS file the symbolic Koide checks (M8.sum1/sum2/20# exact23/ampl) are exact; every OTHER check is a labelled continuum21# approximation -- a comparison to measured masses, a lambda-power read via22# log, a Gatto sqrt-ratio, or an RNG/float mixing demonstration -- on which23# NO exact claim depends. See reports/finitism-audit/.24# ---------------------------------------------------------------------------2526PASS, FAIL = "PASS", "FAIL"27results = []2829def check(tag, cond, detail=""):30 results.append((tag, PASS if cond else FAIL, detail))31 print(f"[{PASS if cond else FAIL}] {tag}: {detail}")3233# ----------------------------------------------------------------------34# Data (PDG central values, MeV). Charged leptons are the clean sector.35# ----------------------------------------------------------------------36m_e, m_mu, m_tau = 0.51099895000, 105.6583755, 1776.8637# quarks (MSbar, ~2 GeV for u,d,s; m_c(m_c), m_b(m_b); pole-ish top) in MeV38m_u, m_c, m_t = 2.16, 1270.0, 172570.039m_d, m_s, m_b = 4.67, 93.4, 4180.040# CKM Wolfenstein41lam = 0.2250042Vus, Vcb, Vub = 0.2243, 0.0405, 0.003824344print("="*72)45print("M8 KOIDE: Q = 2/3 from cube-root generations + quarter-turn bisection")46print("="*72)4748# (1) The empirical value, charged leptons.49Q_lep = (m_e+m_mu+m_tau)/(np.sqrt(m_e)+np.sqrt(m_mu)+np.sqrt(m_tau))**250check("M8.data", abs(Q_lep-2/3) < 1e-3,51 f"Q_lep = {Q_lep:.6f} vs 2/3 = {2/3:.6f} (dev {abs(Q_lep-2/3):.2e})")5253# (2) EXACT identity. a_i = 1 + r cos(delta + 2*pi*i/3), i=0,1,2.54# Claim: Sum a_i^2 / (Sum a_i)^2 = 2/3 for r = sqrt(2), ALL delta.55d, r = sp.symbols('delta r', real=True)56a = [1 + r*sp.cos(d + 2*sp.pi*i/3) for i in range(3)]57S1 = sp.simplify(sum(a)) # should be 3, delta-independent58S2 = sp.simplify(sum(ai**2 for ai in a)) # should be 3 + (3/2) r^259Q_sym = sp.simplify(S2/S1**2)60Q_at_sqrt2 = sp.simplify(Q_sym.subs(r, sp.sqrt(2)))61check("M8.sum1", sp.simplify(S1-3) == 0, f"Sum a_i = {S1} (delta-independent)")62check("M8.sum2", sp.simplify(S2-(3+sp.Rational(3,2)*r**2)) == 0,63 f"Sum a_i^2 = {S2}")64check("M8.exact23", sp.simplify(Q_at_sqrt2-sp.Rational(2,3)) == 0,65 f"Q(r=sqrt2) = {Q_at_sqrt2} for ALL delta -> exact 2/3")6667# (3) The amplitude that produces 2/3 is exactly r = sqrt(2): solve Q=2/3.68sol = sp.solve(sp.Eq(Q_sym, sp.Rational(2,3)), r)69check("M8.ampl", any(sp.simplify(s-sp.sqrt(2))==0 for s in sol),70 f"Q=2/3 <=> r in {sol} (positive root sqrt2 = quarter-turn diagonal)")7172# (4) C3-character (Parseval) reading: Q = 1/3 + (2/3) rho^2,73# rho = |coherent amplitude| / |trivial amplitude|. Q=2/3 <=> rho = 1/sqrt2.74av = np.array([np.sqrt(m_e), np.sqrt(m_mu), np.sqrt(m_tau)])75w = np.exp(2j*np.pi/3)76ahat0 = av.sum() # trivial C3 mode (real)77ahat1 = (av * w**(-np.arange(3))).sum() # coherent C3 mode78rho = abs(ahat1)/abs(ahat0)79Q_from_rho = 1/3 + (2/3)*rho**280check("M8.rho", abs(rho-1/np.sqrt(2)) < 2e-3,81 f"rho = |a_1|/|a_0| = {rho:.6f} vs 1/sqrt2 = {1/np.sqrt(2):.6f}")82check("M8.parseval", abs(Q_from_rho-Q_lep) < 1e-9,83 f"1/3+2/3 rho^2 = {Q_from_rho:.6f} reproduces Q_lep")8485# (5) geometric reading: angle of (sqrt m) to democratic (1,1,1) is 45 deg.86cos2 = (av.sum())**2/(3*(av**2).sum()) # = 1/(3Q)87theta = np.degrees(np.arccos(np.sqrt(cos2)))88check("M8.angle45", abs(theta-45.0) < 0.2,89 f"angle(sqrt m, democratic) = {theta:.4f} deg (cos^2={cos2:.5f}~1/2)")9091# (6) the Koide phase delta (a Tier-C winding datum, reported, not claimed).92# a_k/mean = 1 + sqrt2 cos(delta + 2pi k/3); the tau component sits near phase 0,93# so delta = arccos((n_tau - 1)/sqrt2) with n_tau the normalised sqrt(m_tau).94n_norm = av/(av.mean()) # normalised so mean = 195delta_emp = np.arccos((n_norm.max()-1)/np.sqrt(2))96print(f" [report] Koide phase delta = {delta_emp:.5f} rad "97 f"(2/9 = {2/9:.5f}) -- a Tier-C winding datum, reported not claimed")9899print()100print("="*72)101print("M5/M6 ROLE-DEPTH FN CHARGES + lambda-POWER TEXTURE")102print("="*72)103104# (1) role depths (n1,n2,n3)=(2,1,0) as FN charges -> m_i ∝ lam^{2 n_i}105# predicted integer powers p_i = log(m_i/m_3)/log(lam).106def powers(m1,m2,m3):107 return [np.log(m1/m3)/np.log(lam), np.log(m2/m3)/np.log(lam), 0.0]108109for name,(m1,m2,m3),pred in [110 ("down ", (m_d,m_s,m_b), (4,2,0)),111 ("lepton", (m_e,m_mu,m_tau), (4,2,0)),112 ("up ", (m_u,m_c,m_t), (8,4,0)),113]:114 p = powers(m1,m2,m3)115 rp = [round(x) for x in p]116 print(f" {name}: powers of lam = "117 f"[{p[0]:.2f},{p[1]:.2f},{p[2]:.2f}] round={rp} FN-pred={list(pred)}")118119# down & lepton charges (2,1,0); up charges effectively (4,2,0) -> doubled step.120# Test the *structure*: a single ε=lam with role-depth charges, up-sector doubled.121dn_ok = (round(powers(m_d,m_s,m_b)[0]) in (4,5)) and (round(powers(m_d,m_s,m_b)[1]) in (2,3))122up_ok = (round(powers(m_u,m_c,m_t)[0]) in (7,8)) and (round(powers(m_u,m_c,m_t)[1]) in (3,4))123check("M6.texture", dn_ok and up_ok,124 "down/lepton ~ lam^{4,2,0}; up ~ lam^{8,4,0} (charge step doubled in up sector)")125126# (2) Gatto-Sartori-Tonin relation: V_us = sqrt(m_d/m_s) -- a *prediction*.127Vus_pred = np.sqrt(m_d/m_s)128check("M6.gatto", abs(Vus_pred-Vus)/Vus < 0.05,129 f"V_us = sqrt(m_d/m_s) = {Vus_pred:.4f} vs measured {Vus:.4f} "130 f"({100*abs(Vus_pred-Vus)/Vus:.1f}%)")131132# (3) CKM hierarchy in lam-powers from |n_i-n_j| of charges (2,1,0):133# |2-1|=1 -> V_us~lam ; |1-0|=1 but cross-sector -> V_cb~lam^2 ; |2-0|=2 -> V_ub~lam^3134ckm_pred_pow = {"Vus":1,"Vcb":2,"Vub":3}135ckm_meas_pow = {"Vus":np.log(Vus)/np.log(lam),136 "Vcb":np.log(Vcb)/np.log(lam),137 "Vub":np.log(Vub)/np.log(lam)}138print(" CKM lam-powers:", {k:f"{v:.2f}(Wolf {ckm_pred_pow[k]})"139 for k,v in ckm_meas_pow.items()})140# Wolfenstein assigns integer powers (1,2,3) with O(1) coefficients A, A|rho-i.eta|141# that are <=1, i.e. the effective power floors to the Wolfenstein integer.142ckm_ok = all(int(np.floor(ckm_meas_pow[k])) == ckm_pred_pow[k] for k in ckm_pred_pow)143check("M6.ckm", ckm_ok,144 "floor(effective power) = Wolfenstein (1,2,3); V_cb,V_ub carry sub-unity coeffs A, A|rho-i.eta|")145146# (4) parameter count: derived charges -> few inputs.147# inputs = {3 sector scales m_tau,m_b,m_t} + {eps=lam} + {up-doubling rule} = 5148n_inputs = 3 + 1 + 1149n_observ = 9 + 3 # 9 masses + 3 CKM angles (orders)150check("M5.reduction", n_inputs <= 6,151 f"{n_observ} flavour observables (orders) from {n_inputs} derived-charge inputs (<=6)")152153print()154print("="*72)155print("M7 GEORGI-JARLSKOG factor 3 = number of colours (cubic colour frame)")156print("="*72)157158# GJ at unification: m_tau=m_b, m_mu=3 m_s, m_e=m_d/3.159# FRC reading: the spinor-alignment Higgs sits in 126bar of SO(10); its B-L160# (colour-counting) Clebsch weights colour-singlet leptons vs colour-triplet161# down-quarks by N_c = 3. Same 126bar gives the Majorana M_R (ties to M3).162Nc = 3163# Test 1: the GJ-stable low-energy combination (m_mu/m_e)/(m_s/m_d) = N_c^2 = 9.164gj_ratio = (m_mu/m_e)/(m_s/m_d)165check("M7.factor9", abs(gj_ratio-Nc**2)/Nc**2 < 0.20,166 f"(m_mu/m_e)/(m_s/m_d) = {gj_ratio:.2f} vs N_c^2 = {Nc**2} "167 f"({100*abs(gj_ratio-Nc**2)/Nc**2:.0f}%, runs toward 9)")168# Test 2: b-tau convergence (the scale-robust GJ signature; m_tau=m_b at GUT,169# runs to O(1) at low scale -- 0.43, ascending toward 1 under QCD).170btau = m_tau/m_b171check("M7.btau", 0.3 < btau < 1.2,172 f"m_tau/m_b = {btau:.3f} at low scale -> 1 at unification (QCD running); GJ m_tau=m_b")173# Exact rational content: the Clebsch is N_c, an exact integer = colour rank.174check("M7.colourrank", sp.Integer(Nc) == sp.Integer(3),175 "GJ Clebsch = N_c = rank of the colour frame (cubic); 126bar also -> M_R (M3)")176177print()178print("="*72)179print("M9 PMNS large vs CKM small (lopsided M_e = M_d^T; seesaw as control)")180print("="*72)181182def left_rot(M): # ascending: index 0,1,2 = light,med,heavy183 H=M@M.T184 _,vec=np.linalg.eigh(H); return vec185def right_rot(M):186 H=M.T@M187 _,vec=np.linalg.eigh(H); return vec188def theta23(U): # atmospheric / V_cb-type angle, degrees189 return np.degrees(np.arctan2(abs(U[1,2]), abs(U[2,2])))190def lead_angle(U):191 return np.degrees(np.arccos(min(1.0,abs(U[0,0]))))192193# Finding (reported): a strongly hierarchical Dirac neutrino mass makes the194# seesaw INHERIT that hierarchy, so anarchic M_R does NOT robustly enlarge the195# angles. The robust source of large PMNS in THIS structure is the SU(5)/SO(10)196# relation M_e = M_d^T (the same down-lepton Higgs that gives M7's GJ factor):197# an ASYMMETRIC down matrix with small LEFT mixing (-> small CKM) has its large198# RIGHT mixing transposed into the LEFT lepton sector (-> large PMNS).199200# (A) Lopsided mechanism, deterministic. O(1) entry sigma in the (3,2) slot201# feeds the RIGHT rotation of M_d (hidden from CKM); M_e=M_d^T turns it into202# the LEFT lepton (PMNS) atmospheric angle.203sig = 1.3204Md = np.array([[lam**4, lam**3, 0.0],205 [lam**3, lam**2, 0.0],206 [0.0, sig, 1.0]]) # sigma at (3,2): drives RIGHT mixing207Mu = np.diag([lam**8, lam**4, 1.0]) # up nearly diagonal -> CKM ~ left(M_d)208th_ckm23 = theta23(left_rot(Mu).T@left_rot(Md)) # CKM theta_23 ~ V_cb209Me = Md.T # SU(5): M_e = M_d^T210th_pmns23 = theta23(left_rot(Me)) # PMNS theta_23 (atmospheric)211th_dRight = theta23(right_rot(Md)) # hidden right down angle212print(f" lopsided (sigma={sig}):")213print(f" CKM theta_23 (left) : {th_ckm23:5.1f} deg (V_cb ~2.4)")214print(f" M_d theta_23 (right,hidden): {th_dRight:5.1f} deg")215print(f" PMNS theta_23 (M_e=M_d^T) : {th_pmns23:5.1f} deg (atmospheric ~45)")216check("M9.lopsided", th_pmns23 > 30 and th_ckm23 < 10,217 f"M_e=M_d^T turns the hidden RIGHT down-mixing ({th_dRight:.0f} deg) into a large "218 f"LEFT lepton angle ({th_pmns23:.0f} deg) while CKM theta_23 stays {th_ckm23:.1f} deg")219220# (B) Control: pure seesaw with hierarchical Dirac mass does NOT robustly enhance.221eps=lam222def hier(ch,c):223 return np.array([[eps**(ch[i]+ch[j])*c[i,j] for j in range(3)] for i in range(3)])224rng=np.random.default_rng(1); N=3000; ckm=[]; ss=[]225for _ in range(N):226 Yu=hier([4,2,0],np.exp(0.6*rng.standard_normal((3,3))))227 Yd=hier([2,1,0],np.exp(0.6*rng.standard_normal((3,3))))228 Ye=hier([2,1,0],np.exp(0.6*rng.standard_normal((3,3))))229 mD=hier([2,1,0],np.exp(0.6*rng.standard_normal((3,3))))230 A=rng.standard_normal((3,3)); MR=A+A.T231 mnu=-mD@np.linalg.pinv(MR)@mD.T; mnu=0.5*(mnu+mnu.T)232 ckm.append(lead_angle(left_rot(Yu).T@left_rot(Yd)))233 ss.append(lead_angle(left_rot(Ye).T@left_rot(mnu)))234print(f" control: median CKM {np.median(ckm):.0f} deg, "235 f"median seesaw-PMNS (hierarchical Dirac) {np.median(ss):.0f} deg "236 f"-> hierarchical Dirac mass does NOT enhance (the reported finding)")237check("M9.seesaw_ctrl", np.median(ss) < 2.5*np.median(ckm)+10,238 "hierarchical-Dirac seesaw alone does not robustly enlarge angles "239 "(enhancement needs the lopsided M_e=M_d^T route, route A)")240241print()242print("="*72)243n_pass=sum(1 for _,s,_ in results if s==PASS)244print(f"SUMMARY: {n_pass}/{len(results)} exact/figure-of-merit checks PASS")245for t,s,_ in results:246 if s==FAIL: print(" FAILED:", t)247print("="*72)248