This SageMath notebook does arithmetic and algebra for the paper A theory of the dark matter.
The section numbering follows the paper. Equation numbers refer to equations in the paper.
Code for displaying equations.
%display latex
LE = lambda latex_string: LatexExpr(latex_string);
The numerical values of fundamental constants and basic physical quantities are stored in the dictionary value[].
Physical units such as 's' and 'GeV' are defined as algebraic variables.
The dictionary formula[] will contain the formulas for derived physical quantities. For example, formula[kappa] = 8*pi*G.
The function valof(x) substitutes in a formula x to obtain a numerical value.
The function print_values(x1,x2,...) prints formulas xn with their numerical values.
value = {}
formula={}
def valof(x):
SymRing = FractionField(PolynomialRing(RR,'s,GeV,J,m,kg,K,C'))
NumRing = FractionField(PolynomialRing(RDF,'s,GeV,J,m,kg,K,C'))
xval = SR(x)
for a in reversed(formula):
xval = xval.subs({a:formula[a]})
for key,val in value.items():
xval = xval.subs({key:val})
xval = NumRing(xval)
return xval
def print_values(*args):
print_list=[]
for arg in args:
if arg in formula:
print_list += [arg,'=',formula[arg],'=',valof(arg),LE(r'\qquad')]
else:
print_list += [arg,'=',valof(arg),LE(r'\qquad')]
print_list.pop()
pretty_print(*print_list)
declare units as variables
s = var('s', domain='positive',latex_name='\\mathrm{s}'); assume(s,'real');
GeV = var('GeV', domain='positive',latex_name='\\mathrm{GeV}'); assume(GeV,'real');
J = var('J', domain='positive',latex_name='\\mathrm{J}'); assume(J,'real');
m = var('m', domain='positive',latex_name='\\mathrm{m}'); assume(m,'real');
kg = var('kg', domain='positive',latex_name='\\mathrm{kg}\\,'); assume(kg,'real');
K = var('K', domain='positive',latex_name='\\mathrm{K}'); assume(K,'real');
C = var('C', domain='positive',latex_name='\\mathrm{C}'); assume(C,'real');
km = var('km', domain='positive',latex_name='\\mathrm{km}\\,'); assume(km,'real');
Mpc = var('Mpc', domain='positive',latex_name='\\mathrm{Mpc}\\,'); assume(Mpc,'real');
declare fundamental constants and physical parameters as variables
# fundamental constants
c = var('c',latex_name=r"c")
c_mps = var('c_mps',latex_name=r"c")
e_charge = var('e_charge',latex_name=r"e")
hbar = var('hbar',latex_name=r"\hbar")
kB = var('kB',latex_name=r"k_{B}")
G = var('G',latex_name=r"G")
kappa = var('kappa',latex_name=r"\kappa")
#
# numbered constants c_n for temporary use
# c_ = var('c_',n=20,latex_name=r"c")
#
# Standard Model
GFermi = var('GFermi',latex_name=r"G_{\mathrm{Fermi}}")
m_W = var('m_W',latex_name=r"m_{W}")
m_Higgs = var('m_Higgs',latex_name=r"m_{\mathrm{Higgs}}")
hbar_v = var('hbar_v',latex_name=r"\hbar v")
v = var('v',latex_name=r"v")
g = var('g',latex_name=r"g")
lambdaH = var('lambdaH',latex_name=r"\lambda")
#
# cosmological parameters
H0 = var('H0',latex_name=r"H_{0}")
Omega_curvature = var('Omega_curvature',latex_name=r"\Omega_{\mathrm{curvature}}")
Omega_Lambda = var('Omega_Lambda',latex_name=r"\Omega_{\Lambda}")
#
# time and energy scales
t_grav = var('t_grav',latex_name=r"t_{\mathrm{grav}}")
t_Higgs = var('t_Higgs',latex_name=r"t_{\mathrm{Higgs}}")
t_Hubble = var('t_Hubble',latex_name=r"t_{\mathrm{Hubble}}")
value[G] = 6.67430e-11*m^3*kg^(-1)* s^(-2)
value[e_charge] = 1.602176634e-19 * C
value[c]=c_mps = 2.99792458e8 * m * s^(-1)
value[hbar] = 1.054571817e-34*J*s
value[kB] = 1.380649e-23*J*K^(-1)
print_values(G,e_charge,c)
print('\n')
print_values(hbar,kB)
The constant $\kappa = 8 \pi G$.
formula[kappa] = 8*pi*G
print_values(kappa)
conv={}
conv[m] = c^(-1)*m
conv[kg] = J*s^2*m^(-2)
conv[J] = e_charge^(-1) * C * 1e-9 * GeV
for a,b in conv.items():
value[a]= a.subs(conv).subs(value)
#
print_values(c,J)
print('\n')
print_values(m,kg)
print('\n')
print_values(hbar,kB)
print('\n')
print_values(G,kappa)
measured quantities
value[GFermi] = 1.1663787e-5*GeV^(-2);
value[m_W] = 80.379*GeV;
value[m_Higgs] = 125.10*GeV;
#
print_values(GFermi,m_W,m_Higgs)
derived quantities
#
formula[hbar_v] = 2^(-1/4)*GFermi^(-1/2)
formula[v] = formula[hbar_v]/hbar
formula[g] = 2*m_W/hbar_v;
formula[lambdaH] = m_Higgs/hbar_v;
#
print_values(hbar_v,v)
print('\n')
print_values(g,g^2)
print('\n')
print_values(lambdaH,lambdaH^2)
units of distance
The value of 1 parsec in meters is taken from IAU 2015 Resolution B2, note 4 which references the definition as exactly 64000/$\pi$ au and the definition of au from IAU 2012 Resolution B2.
value[km] = 1e3 *m
value[Mpc] = 1e6 * 3.085677581 * 1e16 * m
print_values(km,Mpc)
From Particle Data Group 2020 Particle Physics Booklet
formula[H0] = 6.74e1 *km * s^(-1) * Mpc^(-1)
value[Omega_curvature] = 0.001
value[Omega_Lambda] = 0.685
#
print_values(H0,Omega_Lambda,Omega_curvature)
formula[t_grav] = sqrt(kappa*hbar)
formula[t_Higgs] = hbar/m_Higgs
formula[t_Hubble] = 1/H0
#
print_values(t_grav,hbar/t_grav)
print('\n')
print_values(t_Higgs,m_Higgs)
print('\n')
print_values(t_Hubble,hbar/t_Hubble)
elliptic parameter $k^{2}_{\mathrm{EW}}=\frac12$ and elliptic integral of first kind $K_{\mathrm{EW}}=K(k_{\mathrm{EW}})=K'(k_{\mathrm{EW}})$
# elliptic modulus and integrals
ksq_EW = var('ksq_EW',latex_name=r"k^2_{\mathrm{EW}}")
k_EW = var('k_EW',latex_name=r"k_{\mathrm{EW}}")
K_EW = var('K_EW',latex_name=r"K_{\mathrm{EW}}")
Kp_EW = var('Kp_EW',latex_name=r"K'_{\mathrm{EW}}")
#
value[ksq_EW]= 1/2
value[k_EW]= sqrt(1/2)
value[K_EW]= elliptic_kc(0.5)
value[Kp_EW]= elliptic_kc(0.5)
print_values(ksq_EW,K_EW,Kp_EW)
a_EW = var('a_EW',latex_name=r"a_{\mathrm{EW}}")
#
a_EW_coeff = (6*pi)^(1/2)/(4*K_EW)
formula[a_EW] = a_EW_coeff * t_Higgs
print_values(a_EW_coeff,a_EW)
ahat_EW = var('ahat_EW',latex_name=r"\hat a_{\mathrm{EW}}")
formula[ahat_EW] = a_EW/t_Higgs
print_values(ahat_EW)
asqHsq_EW = var('asqHsq_EW',\
latex_name=r"a_{\mathrm{EW}}^2 H_{\mathrm{EW}}^2+\epsilon^2")
formula[asqHsq_EW ] = (t_grav^2/t_Higgs^2) * ( (1/(24*lambdaH^2))\
* (a_EW^2/t_Higgs^2) +(1/(8*g^2))* (t_Higgs^2/a_EW^2) )
print_values(asqHsq_EW)
print('\n')
expr = (t_grav^2/t_Higgs^2)/(4*sqrt(3)*g*lambdaH)
print_values(expr)
PSR.<k> = PowerSeriesRing(SR)
K_ps = (pi/2)*(1+k^2/4 + 9*k^4/64)+O(k^6)
E_ps = (pi/2)*(1-k^2/4 - 3*k^4/64)+O(k^6)
alpha3 = (2*(1-k^2)*K_ps + 2*(2*k^2-1)*E_ps)/K_EW
pretty_print(LE(r"\alpha^3 = "),alpha3+ O(k^4))
alpha2_b2 = k^2 -1 +E_ps/K_ps; pretty_print(LE(r"\alpha^2 \langle b^2\rangle = "),alpha2_b2+O(k^4))
alpha2_mu2 = 1-2*k^2; pretty_print(LE(r"\alpha^2 \mu^2 = "),alpha2_mu2+O(k^2))
alpha4_E_CGF = k^2*(1-k^2)/2; pretty_print(LE(r"\alpha^4 E_{CGF} = "),alpha4_E_CGF+O(k^4))
alpha2_ahat2 = (3/2)* alpha2_b2 + (4*lambdaH^2/g^2)* alpha2_mu2
pretty_print(LE(r"\alpha^2 \hat a^2= "),alpha2_ahat2+O(k^2))
rhohat_CGF = (3*alpha4_E_CGF/g^2 +9*alpha2_b2^2/(32*lambdaH^2))/alpha2_ahat2^2
pretty_print(LE(r"\hat \rho_{CGF} = "),rhohat_CGF +O(k^4))
phat_CGF = ((alpha4_E_CGF-alpha2_mu2*alpha2_b2)/g^2 -9*alpha2_b2^2/(32*lambdaH^2))/alpha2_ahat2^2
pretty_print(LE(r"\hat p_{CGF} = "),phat_CGF +O(k^6))
k0sq = var('k0sq',latex_name=r"k_{0}^{2}")
expr = t_Higgs^4/(t_grav^2*t_Hubble^2)*(32*lambdaH^4/g^2)
formula[k0sq] = 0.315*expr
pretty_print(k0sq,LE('= 0.315'),expr,'=',valof(k0sq))
a0 = var('a0',latex_name=r"a_{0}")
expr= ((6*pi*lambdaH*g/K_EW)*t_Higgs/(t_grav^2*t_Hubble^2))^(-1/3)
formula[a0] = 0.315^(-1/3)*expr
pretty_print(a0,LE(r"= 0.315^{-\frac13}"),expr,'=',valof(a0))
print_values(a0/t_Higgs)
print_values(a0/a_EW)
print_values(t_Hubble^2/a0^2)
w_CGF = phat_CGF/rhohat_CGF
pretty_print(LE(r"w_{CGF} = "),w_CGF +O(k^4))
print_values(K_EW/(2*pi*g*lambdaH))
omega_W = var('omega_W',latex_name=r"\omega_W")
formula[omega_W] = g/(2*lambdaH*t_Higgs)
print_values(omega_W,m_W/hbar)
print_values(2*pi/omega_W)
k0 = var('k0',latex_name=r"k_{0}")
formula[k0]= sqrt(k0sq)
print_values(k0)
print('\n')
print_values(k0*omega_W,k0*m_W)
rho_b = var('rho_b ',latex_name=r"\rho_{b}")
formula[rho_b] = hbar/t_Higgs^4
pretty_print(rho_b," = ",formula[rho_b] ," = ", kg*valof(rho_b/kg)/c_mps^3)
rhohat_EW = var('rhohat_EW ',latex_name=r"\hat\rho_{EW}")
formula[rhohat_EW ] = 8 *K_EW^4/(3*pi^2*g^2) + 1/(8*lambdaH^2)
print_values(rhohat_EW)
c_b = var('c_b')
formula[c_b] = 1/(2*lambdaH^2*rhohat_EW)
print_values(c_b)
c_a = var('c_a')
formula[c_a] = 2*lambdaH^2*(8*lambdaH^2-g^2)/(2*g^2)
c_a_val = valof(c_a)
print_values(c_a)
print(c_a_val)
0.9924810876684255
y=var('y',latex_name=r"4K_{\mathrm{EW}}(a^2H^2+\epsilon^2)^{1/2}_{\mathrm{EW}}")
formula[y] = 4*K_EW*ahat_EW*sqrt((t_grav^2/t_Higgs^2)*rhohat_EW/3+ Omega_Lambda*(t_Higgs^2/t_Hubble^2))
print_values(y)
print_values((pi^2/(2*lambdaH^2))*(t_grav^2/t_Higgs^2),\
(16*pi^2*lambdaH^2/g^2)*Omega_Lambda*(t_Higgs^2/t_Hubble^2))
K0 = var('K0',latex_name=r"K_{0}")
formula[K0] = pi/2
alpha0 = var('alpha0',latex_name=r"\alpha_{0}")
formula[alpha0] = (3*pi*k0sq/(2*K_EW))^(1/3)
print_values(4*K0*alpha0*a0*H0,(2*pi*2*lambdaH/g)*(t_Higgs/t_Hubble))
binary_precision=668
Reals = RealField(binary_precision)
RealNumber = Reals
myR = Reals
Kp0 = var('Kp0',latex_name=r"K'_{0}")
value[Kp0]= elliptic_kc(1-myR(valof(k0sq)))
print_values(Kp0)
T_CGF0 = var('T_CGF0',latex_name=r"T_{\mathrm{CGF},0}")
formula[T_CGF0]=hbar/(kB*4*Kp0*alpha0*a0)
value
print_values(T_CGF0)
pretty_print("\n\n",T_CGF0," = ","%e"%(valof(T_CGF0/K))," K")
print_values(T_CGF0*kB)
print_values(hbar*g/(kB*8*lambdaH*t_Higgs))
print_values(hbar*g/(8*lambdaH*t_Higgs))
print_values(hbar*g/(kB*8*lambdaH*a0))
epsilon = var('epsilon',latex_name=r"\epsilon")
value[epsilon] =1e-27
print_values(2*pi^2*2*K_EW/(2*pi*epsilon^3*g^2))