The file src/28-flavour/up_doubling.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"""4up_doubling.py -- the up-sector charge doubling as the 10.10 structure.56Claim: the up Yukawa is 10.10.5_H (the charge-carrying matter multiplet self-paired),7the down/lepton Yukawa is 10.5bar.5bar_H. Locate the flavour charge (role depth = winding8index) in the 10, with the 5bar flat. Then on the diagonal9 down/lepton ~ eps^{a_i} (10 . 5bar, charge once)10 up ~ eps^{2 a_i} (10 . 10, charge twice)11so the up FN exponent is exactly TWICE the down/lepton exponent -- the doubling. The SAME12input (charge in 10, 5bar flat) forces down=lepton (both 10.5bar) and the lopsided M_e=M_d^T.1314Verifications:15 A empirical effective FN powers from PDG masses: down~(4,2), lepton~(4,2), up~(8,4);16 up exponents = 2 x down exponents at the integer level.17 B structural map: charge a=(4,2,0) in the 10, 5bar flat => down=eps^a, up=eps^{2a};18 reproduces (4,2,0) and (8,4,0); down=lepton; up = (down)^2 in spurion units.19 C the winding reading: 10.10 sums the winding index with itself (a_i+a_i=2a_i) = doubled20 frequency; 10.5bar pairs winding with flat (a_i+0). [continuum/data: labelled approx.]21"""22import math2324PASS=[]25def check(name, cond):26 PASS.append(bool(cond)); print(f" [{'OK' if cond else 'XX'}] {name}")2728lam = 0.22529# PDG-ish masses (GeV); common-scale values, the integer pattern is robust to the scale choice30m = {31 'u':2.2e-3, 'c':1.27, 't':173.0,32 'd':4.7e-3, 's':93e-3, 'b':4.18,33 'e':0.511e-3,'mu':105.7e-3,'tau':1.777,34}35def powers(m1,m2,m3):36 "effective FN powers n_i = log(m_i/m_3)/log(lambda) for the two light gens"37 return (math.log(m1/m3)/math.log(lam), math.log(m2/m3)/math.log(lam))3839print("A empirical effective FN powers n_i = log(m_i/m3)/log(lambda), lambda=%.3f"%lam)40du = powers(m['u'],m['c'],m['t']); print(f" up (u,c)/t : ({du[0]:.1f},{du[1]:.1f}) -> integer (8,4)")41dd = powers(m['d'],m['s'],m['b']); print(f" down (d,s)/b : ({dd[0]:.1f},{dd[1]:.1f}) -> integer (4,2)")42dl = powers(m['e'],m['mu'],m['tau']); print(f" lept (e,mu)/tau:({dl[0]:.1f},{dl[1]:.1f}) -> integer (4,2) (e = GJ outlier)")43# integer pattern by nearest-even (the FN charges are 2 n_i)44def nearest_even(x): return 2*round(x/2)45up_int = (nearest_even(du[0]), nearest_even(du[1]))46down_int = (nearest_even(dd[0]), nearest_even(dd[1]))47print(f" integer up={up_int}, down={down_int}")48check("up integer exponents = (8,4)", up_int==(8,4))49check("down integer exponents = (4,2)", down_int==(4,2))50check("UP = 2 x DOWN at the integer level (the doubling)",51 up_int==(2*down_int[0], 2*down_int[1]))52check("down ~ lepton at 2nd gen (mu/tau ~ s/b, both ->2); electron = GJ outlier (sec.GJ)",53 nearest_even(dd[1])==nearest_even(dl[1])==2)5455print("\nB structural map: charge a in the 10, 5bar flat")56a = (4,2,0) # 10-charges (= role depth in lambda units)57down_exp = a # 10 . 5bar : charge once58up_exp = tuple(2*ai for ai in a) # 10 . 10 : charge twice59lep_exp = a # 10 . 5bar (transpose) : same as down60print(f" 10-charge a={a}, 5bar flat")61print(f" down = eps^a = lambda^{down_exp}")62print(f" lept = eps^a = lambda^{lep_exp} (M_e = M_d^T, lopsided)")63print(f" up = eps^2a = lambda^{up_exp}")64check("down exponents reproduce (4,2,0)", down_exp==(4,2,0))65check("up exponents reproduce (8,4,0) = 2a", up_exp==(8,4,0))66check("down = lepton (both 10.5bar, same a) -> degeneracy + lopsided", down_exp==lep_exp)67check("up = (down)^2 in spurion units (exponents doubled)",68 up_exp==tuple(2*x for x in down_exp))69# the same single input gives all three:70print(" => one input (charge in 10, 5bar flat) forces: down=lepton, lopsided M_e=M_d^T, up-doubling")7172print("\nC winding reading: 10.10 = winding self-paired = doubled frequency")73# FN exponent = winding index a_i; 10.10 -> a_i + a_j (diagonal 2a_i), 10.5bar -> a_i + 074for ai in a:75 check(f" winding a={ai}: up self-pair {ai}+{ai}={2*ai}, down pair {ai}+0={ai} (ratio 2)",76 (ai+ai)==2*ai and (ai+0)==ai)7778# bonus: 10.10 is symmetric -> up Yukawa symmetric (a forced structural consequence)79print("\n bonus: 10.10 is symmetric in the two 10's => up Yukawa matrix is symmetric (SU(5))")8081print("\n"+"="*68)82print(f"up_doubling: {sum(PASS)}/{len(PASS)} checks pass "83 f"(structural integer; empirical data labelled approx)")84print("="*68)85assert all(PASS), "a check failed"86