The *p*-norm of a vector is defined to be the *p*th root of the sum of its *p*th powers.

Such norms occur frequently in application [1]. Yoshio Koide discovered in 1981 that if you take the masses of the **electron**, **muon**, and **tau** particles, the ratio of the 1 norm to the 1/2 norm is very nearly 2/3. Explicitly,

to **at least four decimal places**. Since the ratio is tantalizingly close to 2/3, some believe there’s something profound going on here and the value is exactly 2/3, but others believe it’s just a coincidence.

The value of 2/3 is interesting for two reasons. Obviously it’s a small integer ratio. But it’s also exactly the midpoint between the smallest and largest possible value. More on that below.

Is the value 2/3 within the measure error of the constants? We’ll investigate that with a little Python code.

## Python code

The masses of particles are available in the `physical_constants`

dictionary in `scipy.constants`

. For each constant, the dictionary contains the best estimate of the value, the units, and the uncertainty (standard deviation) in the measurement [2].

from scipy.constants import physical_constants as pc from scipy.stats import norm def pnorm(v, p): return sum([x**p for x in v])**(1/p) def f(v): return pnorm(v, 1) / pnorm(v, 0.5) m_e = pc["electron mass"] m_m = pc["muon mass"] m_t = pc["tau mass"] v0 = [m_e[0], m_m[0], m_t[0]] print(f(v0))

This says that the ratio of the 1 norm and 1/2 norm is 0.666658, slightly less than 2/3. Could the value be exactly 2/3 within the resolution of the measurements? How could we find out?

## Measurement uncertainty

The function *f* above is minimized when its arguments are all equal, and maximized when its arguments are maximally unequal. To see this, note that *f*(1, 1, 1) = 1/3 and *f*(1, 0, 0) = 1. You can prove that those are indeed the minimum and maximum values. To see if we can make *f* larger, we want to increase the largest value, the mass of tau, and decrease the others. If we move each value one standard deviation in the desired direction, we get

v1 = [m_e[0] - m_e[2], m_m[0] - m_m[2], m_t[0] + m_t[2]] print(f(v1))

which returns 0.6666674, just slightly bigger than 2/3. Since the value can be bigger than 2/3, and less than 2/3, the intermediate value theorem says there are values of the constants within one standard deviation of their mean for which we get exactly 2/3.

Now that we’ve shown that it’s *possible* to get a value above 2/3, how likely is it? We can do a simulation, assuming each measurement is normally distributed.

N = 1000 above = 0 for _ in range(N): r_e = norm(m_e[0], m_e[2]).rvs() r_m = norm(m_m[0], m_m[2]).rvs() r_t = norm(m_t[0], m_t[2]).rvs() t = f([r_e, r_m, r_t]) if t > 2/3: above += 1 print(above)

When we I ran this, I got 168 values above 2/3 and the rest below. So based solely on our calculations here, not taking into account any other information that may be important, it’s plausible that Koide’s ratio is exactly 2/3.

***

[1] Strictly speaking, we should take the absolute values of the vector components. Since we’re talking about masses here, I simplified slightly by assuming the components are non-negative.

Also, what I’m calling the *p* “norm” is only a norm if *p* is at least 1. Values of *p* less than 1 do occur in application, even though the functions they define are not norms. I’m pretty sure I’ve blogged about such an application, but I haven’t found the post.

[2] The SciPy library obtained its values for the constants and their uncertainties from the CODATA recommended values, published in 2014.

It was simulation of uncertainty like above for the use of error propagation in physics that cemented my computational focus in science.