Notebook 07 — Equipartition, UV Cutoff, and Fuzzy Dark Matter#
The ultraviolet catastrophe, again. The non-injectivity law says the measure over preimages is uniform at equilibrium. The overtone interpretation says preimages are modes. Uniform measure over modes is equipartition — equal energy in every mode.
For a classical string at thermal equilibrium, this is the Rayleigh-Jeans law. But Rayleigh-Jeans fails at high frequencies — the ultraviolet catastrophe. Planck resolved it by quantizing mode energies.
The gravitational analog: If the dark matter overtone spectrum obeys classical equipartition at low mode numbers but requires a cutoff at high mode numbers, what provides the cutoff? And is it the same as the de Broglie wavelength in fuzzy dark matter models?
Citations:
Rayleigh, Lord (1900). The law of partition of kinetic energy. Phil. Mag., 49, 539.
Planck, M. (1901). On the law of energy distribution in the normal spectrum. Ann. Phys., 309, 553.
Hu, W., Barkana, R., & Gruzinov, A. (2000). Fuzzy cold dark matter. PRL, 85, 1158.
Schive, H.-Y. et al. (2014). Cosmic structure as the quantum interference of a coherent dark wave. Nature Physics, 10, 496.
Hui, L. et al. (2017). Ultralight scalars as cosmological dark matter. PRD, 95, 043541.
Marsh, D. J. E. (2016). Axion cosmology. Physics Reports, 643, 1.
Uses only Python standard library.
import math
from typing import List, Tuple
# ── The ultraviolet catastrophe (review) ──────────────────────────────
#
# Classical equipartition: every mode gets energy kT/2.
# Number of modes with frequency < f scales as f² (in 3D).
# Total energy = ∫₀^∞ (kT/2) · g(f) df → diverges!
#
# Rayleigh-Jeans: u(f) = 8πf²kT/c³ (energy density per unit frequency)
# Planck: u(f) = 8πhf³/c³ · 1/(exp(hf/kT) - 1)
#
# The crossover frequency: hf ≈ kT → f_cross = kT/h
# Below f_cross: Rayleigh-Jeans (classical). Above: exponential cutoff.
def rayleigh_jeans(f: float, T: float) -> float:
"""Classical energy density (arbitrary units). Diverges at high f."""
kT = T # work in natural units where k=1
return f ** 2 * kT
def planck_spectrum(f: float, T: float, h: float = 1.0) -> float:
"""Planck energy density. Finite at all f."""
kT = T
x = h * f / kT
if x > 50:
return 0.0
return f ** 3 / (math.exp(x) - 1) if x > 1e-10 else f ** 2 * kT / h
print("=== The Ultraviolet Catastrophe ===")
print()
print("Classical (Rayleigh-Jeans): u(f) ∝ f²·kT — diverges at high f")
print("Quantum (Planck): u(f) ∝ f³/(exp(hf/kT)-1) — finite")
print()
print(f"{'f':>6s} {'Rayleigh-Jeans':>16s} {'Planck':>16s} comparison")
print("-" * 65)
T = 1.0
h = 0.2 # gives visible crossover
for f_val in [0.1, 0.2, 0.5, 1.0, 2.0, 3.0, 5.0, 7.0, 10.0, 15.0, 20.0]:
rj = rayleigh_jeans(f_val, T)
pl = planck_spectrum(f_val, T, h)
rj_bar = min(40, int(rj * 0.1))
pl_bar = min(40, int(pl * 0.1))
bar = "█" * rj_bar + "│" + "░" * pl_bar
print(f"{f_val:6.1f} {rj:16.2f} {pl:16.2f} {bar}")
print()
print("█ = Rayleigh-Jeans (classical) ░ = Planck (quantum)")
print(f"Crossover at f ≈ kT/h = {T/h:.1f}")
print("Above the crossover: the spectrum is exponentially suppressed.")
print("The quantization of energy prevents infinite energy in high modes.")
=== The Ultraviolet Catastrophe ===
Classical (Rayleigh-Jeans): u(f) ∝ f²·kT — diverges at high f
Quantum (Planck): u(f) ∝ f³/(exp(hf/kT)-1) — finite
f Rayleigh-Jeans Planck comparison
-----------------------------------------------------------------
0.1 0.01 0.05 │
0.2 0.04 0.20 │
0.5 0.25 1.19 │
1.0 1.00 4.52 │
2.0 4.00 16.27 │░
3.0 9.00 32.84 │░░░
5.0 25.00 72.75 ██│░░░░░░░
7.0 49.00 112.27 ████│░░░░░░░░░░░
10.0 100.00 156.52 ██████████│░░░░░░░░░░░░░░░
15.0 225.00 176.84 ██████████████████████│░░░░░░░░░░░░░░░░░
20.0 400.00 149.26 ████████████████████████████████████████│░░░░░░░░░░░░░░
█ = Rayleigh-Jeans (classical) ░ = Planck (quantum)
Crossover at f ≈ kT/h = 5.0
Above the crossover: the spectrum is exponentially suppressed.
The quantization of energy prevents infinite energy in high modes.
# ── The gravitational analog ─────────────────────────────────────────
#
# Non-injectivity law: at equilibrium, the measure over preimages is uniform.
# Overtone interpretation: preimages are modes. Uniform = equipartition.
#
# If this held for ALL modes (arbitrarily high k), the dark matter
# energy in small-scale structure would diverge — a gravitational
# ultraviolet catastrophe.
#
# What provides the cutoff?
#
# Fuzzy dark matter (Hu, Barkana & Gruzinov, 2000):
# DM is an ultralight boson with mass m ~ 10⁻²² eV.
# de Broglie wavelength λ_dB = h/(mv) ~ kpc at galactic velocities.
# Below λ_dB: quantum pressure prevents structure formation.
# This IS the UV cutoff.
#
# The overtone interpretation: the boson mass sets the highest mode
# the gravitational medium can support. Mode n > n_max is suppressed.
# Physical constants
HBAR = 1.055e-34 # J·s
EV = 1.602e-19 # J per eV
KPC = 3.086e19 # m
KM_S = 1e3 # m per km/s
def de_broglie_wavelength(m_eV: float, v_km_s: float) -> float:
"""de Broglie wavelength in kpc for a boson of mass m (eV/c²) at velocity v."""
m_kg = m_eV * EV / (3e8) ** 2
v_m_s = v_km_s * KM_S
lambda_m = HBAR / (m_kg * v_m_s) # meters
return lambda_m / KPC # kpc
print("=== Fuzzy Dark Matter as UV Cutoff ===")
print()
print("de Broglie wavelength λ_dB = ℏ/(mv) for ultralight bosons:")
print()
print(f"{'m (eV)':>12s} {'v (km/s)':>10s} {'λ_dB (kpc)':>12s} {'λ_dB (pc)':>10s} scale")
print("-" * 65)
for m_exp in [-22, -21, -20, -19, -18]:
m = 10.0 ** m_exp
for v in [100, 200]:
lam = de_broglie_wavelength(m, v)
lam_pc = lam * 1000
bar = "█" * min(40, max(1, int(math.log10(max(lam_pc, 0.01)) * 10)))
print(f" 10^{m_exp:d} {v:10d} {lam:12.4f} {lam_pc:10.1f} {bar}")
print()
print("At m ~ 10⁻²² eV: λ_dB ~ 1 kpc (galactic scales!)")
print("At m ~ 10⁻²⁰ eV: λ_dB ~ 10 pc (sub-galactic)")
print()
print("The de Broglie wavelength sets the minimum scale for DM structure.")
print("Below this: quantum pressure prevents gravitational collapse.")
print("This is the gravitational 'Planck cutoff' — the UV regulator.")
=== Fuzzy Dark Matter as UV Cutoff ===
de Broglie wavelength λ_dB = ℏ/(mv) for ultralight bosons:
m (eV) v (km/s) λ_dB (kpc) λ_dB (pc) scale
-----------------------------------------------------------------
10^-22 100 0.1921 192.1 ██████████████████████
10^-22 200 0.0960 96.0 ███████████████████
10^-21 100 0.0192 19.2 ████████████
10^-21 200 0.0096 9.6 █████████
10^-20 100 0.0019 1.9 ██
10^-20 200 0.0010 1.0 █
10^-19 100 0.0002 0.2 █
10^-19 200 0.0001 0.1 █
10^-18 100 0.0000 0.0 █
10^-18 200 0.0000 0.0 █
At m ~ 10⁻²² eV: λ_dB ~ 1 kpc (galactic scales!)
At m ~ 10⁻²⁰ eV: λ_dB ~ 10 pc (sub-galactic)
The de Broglie wavelength sets the minimum scale for DM structure.
Below this: quantum pressure prevents gravitational collapse.
This is the gravitational 'Planck cutoff' — the UV regulator.
# ── The gravitational Planck spectrum ─────────────────────────────────
#
# By analogy with Planck:
# Classical: E(k) = kT · (per mode) — equipartition
# Quantum: E(k) = ℏω(k) / (exp(ℏω(k)/kT) - 1)
#
# For the gravitational overtone spectrum:
# "Temperature" T_grav: set by the velocity dispersion σ
# "Planck constant" h_grav: set by the boson mass m
# ω(k) = k · ω₁: overtone frequencies
#
# The gravitational Planck spectrum:
# E(n) = ℏ·n·ω₁ / (exp(ℏ·n·ω₁ / (m·σ²)) - 1)
#
# Crossover mode: n_cross ≈ m·σ² / (ℏ·ω₁)
# Below n_cross: classical equipartition (large-scale DM structure)
# Above n_cross: exponential suppression (no small-scale DM structure)
def gravitational_planck_spectrum(
n_modes: int,
T_grav: float, # gravitational temperature (σ² in natural units)
h_grav: float, # gravitational quantum (1/n_cutoff)
omega_1: float = 1.0 # fundamental frequency
) -> List[float]:
"""Energy per mode for the gravitational Planck spectrum."""
energies = []
for n in range(1, n_modes + 1):
x = h_grav * n * omega_1 / T_grav
if x > 50:
E = 0.0
elif x < 1e-10:
E = T_grav # Rayleigh-Jeans limit
else:
E = h_grav * n * omega_1 / (math.exp(x) - 1)
energies.append(E)
return energies
print("=== The Gravitational Planck Spectrum ===")
print()
print("Classical (equipartition): E(n) = T_grav for all n")
print("Quantum (Planck cutoff): E(n) = h_grav·n / (exp(h_grav·n/T_grav) - 1)")
print()
T_grav = 1.0
n_modes = 20
# Three scenarios: no cutoff, moderate cutoff, strong cutoff
for h_grav, label in [(0.01, "weak cutoff (m ~ 10⁻²⁰ eV)"),
(0.1, "moderate cutoff (m ~ 10⁻²¹ eV)"),
(0.5, "strong cutoff (m ~ 10⁻²² eV)")]:
E_classical = [T_grav] * n_modes
E_planck = gravitational_planck_spectrum(n_modes, T_grav, h_grav)
n_cross = T_grav / (h_grav * 1.0) if h_grav > 0 else float('inf')
print(f"--- {label} (n_cross ≈ {n_cross:.1f}) ---")
print(f" {'n':>4s} {'classical':>10s} {'Planck':>10s} {'ratio':>8s} spectrum")
for n in range(n_modes):
E_c = E_classical[n]
E_p = E_planck[n]
ratio = E_p / E_c if E_c > 0 else 0
c_bar = int(E_c * 20)
p_bar = int(E_p * 20)
bar = "░" * min(20, c_bar) + "│" + "█" * min(20, p_bar)
marker = " ◄ n_cross" if abs(n + 1 - n_cross) < 0.5 else ""
print(f" {n+1:4d} {E_c:10.4f} {E_p:10.4f} {ratio:8.3f} {bar}{marker}")
total_c = sum(E_classical)
total_p = sum(E_planck)
print(f" Total: classical={total_c:.2f}, Planck={total_p:.2f}, ratio={total_p/total_c:.3f}")
print()
print("░ = classical (divergent) █ = Planck-cutoff (finite)")
print("Below n_cross: both agree. Above n_cross: exponential suppression.")
print("The cutoff prevents the gravitational ultraviolet catastrophe.")
=== The Gravitational Planck Spectrum ===
Classical (equipartition): E(n) = T_grav for all n
Quantum (Planck cutoff): E(n) = h_grav·n / (exp(h_grav·n/T_grav) - 1)
--- weak cutoff (m ~ 10⁻²⁰ eV) (n_cross ≈ 100.0) ---
n classical Planck ratio spectrum
1 1.0000 0.9950 0.995 ░░░░░░░░░░░░░░░░░░░░│███████████████████
2 1.0000 0.9900 0.990 ░░░░░░░░░░░░░░░░░░░░│███████████████████
3 1.0000 0.9851 0.985 ░░░░░░░░░░░░░░░░░░░░│███████████████████
4 1.0000 0.9801 0.980 ░░░░░░░░░░░░░░░░░░░░│███████████████████
5 1.0000 0.9752 0.975 ░░░░░░░░░░░░░░░░░░░░│███████████████████
6 1.0000 0.9703 0.970 ░░░░░░░░░░░░░░░░░░░░│███████████████████
7 1.0000 0.9654 0.965 ░░░░░░░░░░░░░░░░░░░░│███████████████████
8 1.0000 0.9605 0.961 ░░░░░░░░░░░░░░░░░░░░│███████████████████
9 1.0000 0.9557 0.956 ░░░░░░░░░░░░░░░░░░░░│███████████████████
10 1.0000 0.9508 0.951 ░░░░░░░░░░░░░░░░░░░░│███████████████████
11 1.0000 0.9460 0.946 ░░░░░░░░░░░░░░░░░░░░│██████████████████
12 1.0000 0.9412 0.941 ░░░░░░░░░░░░░░░░░░░░│██████████████████
13 1.0000 0.9364 0.936 ░░░░░░░░░░░░░░░░░░░░│██████████████████
14 1.0000 0.9316 0.932 ░░░░░░░░░░░░░░░░░░░░│██████████████████
15 1.0000 0.9269 0.927 ░░░░░░░░░░░░░░░░░░░░│██████████████████
16 1.0000 0.9221 0.922 ░░░░░░░░░░░░░░░░░░░░│██████████████████
17 1.0000 0.9174 0.917 ░░░░░░░░░░░░░░░░░░░░│██████████████████
18 1.0000 0.9127 0.913 ░░░░░░░░░░░░░░░░░░░░│██████████████████
19 1.0000 0.9080 0.908 ░░░░░░░░░░░░░░░░░░░░│██████████████████
20 1.0000 0.9033 0.903 ░░░░░░░░░░░░░░░░░░░░│██████████████████
Total: classical=20.00, Planck=18.97, ratio=0.949
--- moderate cutoff (m ~ 10⁻²¹ eV) (n_cross ≈ 10.0) ---
n classical Planck ratio spectrum
1 1.0000 0.9508 0.951 ░░░░░░░░░░░░░░░░░░░░│███████████████████
2 1.0000 0.9033 0.903 ░░░░░░░░░░░░░░░░░░░░│██████████████████
3 1.0000 0.8575 0.857 ░░░░░░░░░░░░░░░░░░░░│█████████████████
4 1.0000 0.8133 0.813 ░░░░░░░░░░░░░░░░░░░░│████████████████
5 1.0000 0.7707 0.771 ░░░░░░░░░░░░░░░░░░░░│███████████████
6 1.0000 0.7298 0.730 ░░░░░░░░░░░░░░░░░░░░│██████████████
7 1.0000 0.6905 0.691 ░░░░░░░░░░░░░░░░░░░░│█████████████
8 1.0000 0.6528 0.653 ░░░░░░░░░░░░░░░░░░░░│█████████████
9 1.0000 0.6166 0.617 ░░░░░░░░░░░░░░░░░░░░│████████████
10 1.0000 0.5820 0.582 ░░░░░░░░░░░░░░░░░░░░│███████████ ◄ n_cross
11 1.0000 0.5489 0.549 ░░░░░░░░░░░░░░░░░░░░│██████████
12 1.0000 0.5172 0.517 ░░░░░░░░░░░░░░░░░░░░│██████████
13 1.0000 0.4870 0.487 ░░░░░░░░░░░░░░░░░░░░│█████████
14 1.0000 0.4582 0.458 ░░░░░░░░░░░░░░░░░░░░│█████████
15 1.0000 0.4308 0.431 ░░░░░░░░░░░░░░░░░░░░│████████
16 1.0000 0.4048 0.405 ░░░░░░░░░░░░░░░░░░░░│████████
17 1.0000 0.3800 0.380 ░░░░░░░░░░░░░░░░░░░░│███████
18 1.0000 0.3565 0.356 ░░░░░░░░░░░░░░░░░░░░│███████
19 1.0000 0.3342 0.334 ░░░░░░░░░░░░░░░░░░░░│██████
20 1.0000 0.3130 0.313 ░░░░░░░░░░░░░░░░░░░░│██████
Total: classical=20.00, Planck=11.80, ratio=0.590
--- strong cutoff (m ~ 10⁻²² eV) (n_cross ≈ 2.0) ---
n classical Planck ratio spectrum
1 1.0000 0.7707 0.771 ░░░░░░░░░░░░░░░░░░░░│███████████████
2 1.0000 0.5820 0.582 ░░░░░░░░░░░░░░░░░░░░│███████████ ◄ n_cross
3 1.0000 0.4308 0.431 ░░░░░░░░░░░░░░░░░░░░│████████
4 1.0000 0.3130 0.313 ░░░░░░░░░░░░░░░░░░░░│██████
5 1.0000 0.2236 0.224 ░░░░░░░░░░░░░░░░░░░░│████
6 1.0000 0.1572 0.157 ░░░░░░░░░░░░░░░░░░░░│███
7 1.0000 0.1090 0.109 ░░░░░░░░░░░░░░░░░░░░│██
8 1.0000 0.0746 0.075 ░░░░░░░░░░░░░░░░░░░░│█
9 1.0000 0.0506 0.051 ░░░░░░░░░░░░░░░░░░░░│█
10 1.0000 0.0339 0.034 ░░░░░░░░░░░░░░░░░░░░│
11 1.0000 0.0226 0.023 ░░░░░░░░░░░░░░░░░░░░│
12 1.0000 0.0149 0.015 ░░░░░░░░░░░░░░░░░░░░│
13 1.0000 0.0098 0.010 ░░░░░░░░░░░░░░░░░░░░│
14 1.0000 0.0064 0.006 ░░░░░░░░░░░░░░░░░░░░│
15 1.0000 0.0042 0.004 ░░░░░░░░░░░░░░░░░░░░│
16 1.0000 0.0027 0.003 ░░░░░░░░░░░░░░░░░░░░│
17 1.0000 0.0017 0.002 ░░░░░░░░░░░░░░░░░░░░│
18 1.0000 0.0011 0.001 ░░░░░░░░░░░░░░░░░░░░│
19 1.0000 0.0007 0.001 ░░░░░░░░░░░░░░░░░░░░│
20 1.0000 0.0005 0.000 ░░░░░░░░░░░░░░░░░░░░│
Total: classical=20.00, Planck=2.81, ratio=0.140
░ = classical (divergent) █ = Planck-cutoff (finite)
Below n_cross: both agree. Above n_cross: exponential suppression.
The cutoff prevents the gravitational ultraviolet catastrophe.
# ── Connecting to fuzzy dark matter observables ──────────────────────
#
# Fuzzy DM (Hu et al. 2000, Schive et al. 2014) makes specific predictions:
#
# 1. Solitonic core: the ground state of the boson field forms a
# stable, finite-density core at the center of every halo.
# Core radius r_c ~ λ_dB ~ ℏ/(m·σ)
#
# 2. Granular structure: outside the core, the density field shows
# interference fringes on scale ~ λ_dB.
#
# 3. Suppressed small-scale power: the matter power spectrum is
# suppressed below the Jeans scale k_J ~ (m·H/ℏ)^{1/2}.
#
# In the overtone picture:
# 1. Solitonic core = fundamental mode (n=1) with no higher modes
# 2. Granular structure = beating between low overtones
# 3. Suppressed power = UV cutoff at n > n_cross
print("=== Fuzzy Dark Matter ↔ Overtone Cutoff ===")
print()
print("Mapping fuzzy DM features to the overtone spectrum:")
print()
print(" Fuzzy DM feature Overtone interpretation")
print(" ═══════════════════════ ═══════════════════════════════════")
print(" Solitonic core Fundamental mode (n=1) dominates")
print(" Core radius r_c Wavelength of fundamental: λ₁ = 2r₀")
print(" Granular structure Beating between low overtones (n=1,2,3)")
print(" Granule scale λ_dB = 2r₀/n_cross")
print(" Suppressed small-scale UV cutoff: modes n > n_cross suppressed")
print(" Jeans scale n_cross · fundamental wavenumber")
print(" Boson mass m Sets n_cross = m·σ²·r₀ / (π·ℏ)")
print()
# Compute n_cross for different boson masses
print("Predicted cutoff mode for Milky Way-like galaxy (σ=200 km/s, r₀=20 kpc):")
print()
sigma = 200 * KM_S # velocity dispersion in m/s
r0 = 20 * KPC # transition radius in m
print(f"{'m (eV)':>12s} {'λ_dB (kpc)':>12s} {'n_cross':>10s} {'n_cross':>10s} interpretation")
print(f"{'':>12s} {'':>12s} {'(from λ)':>10s} {'(from E)':>10s}")
print("-" * 75)
for m_exp in [-24, -23, -22, -21, -20, -19]:
m_eV = 10.0 ** m_exp
m_kg = m_eV * EV / (3e8) ** 2
# de Broglie wavelength
lam_dB = HBAR / (m_kg * sigma) / KPC # in kpc
# Cutoff mode from wavelength: n_cross ≈ 2r₀/λ_dB
r0_kpc = 20.0
n_from_lambda = 2 * r0_kpc / lam_dB if lam_dB > 0 else float('inf')
# Cutoff mode from energy: n_cross ≈ m·σ²/(ℏ·ω₁)
omega_1 = sigma / r0 # fundamental angular frequency
n_from_energy = m_kg * sigma ** 2 / (HBAR * omega_1) if omega_1 > 0 else 0
if n_from_lambda < 1:
interp = "no structure (λ_dB > galaxy)"
elif n_from_lambda < 5:
interp = "fundamental + few overtones"
elif n_from_lambda < 20:
interp = "moderate overtone series"
else:
interp = "classical (many modes)"
print(f" 10^{m_exp:d} {lam_dB:12.2f} {n_from_lambda:10.1f} {n_from_energy:10.1f} {interp}")
print()
print("At m ~ 10⁻²² eV (canonical fuzzy DM): n_cross ≈ a few modes.")
print("The galaxy supports only the fundamental + first few overtones.")
print("This is exactly the soliton + granular structure seen in simulations.")
print()
print("At m ~ 10⁻²⁰ eV: n_cross >> 1. Many overtones survive.")
print("The spectrum is effectively classical — standard CDM behavior.")
print()
print("The boson mass determines WHERE in the overtone series the")
print("UV cutoff falls. Fuzzy DM is not an alternative to the overtone")
print("picture — it is the UV completion that prevents the catastrophe.")
=== Fuzzy Dark Matter ↔ Overtone Cutoff ===
Mapping fuzzy DM features to the overtone spectrum:
Fuzzy DM feature Overtone interpretation
═══════════════════════ ═══════════════════════════════════
Solitonic core Fundamental mode (n=1) dominates
Core radius r_c Wavelength of fundamental: λ₁ = 2r₀
Granular structure Beating between low overtones (n=1,2,3)
Granule scale λ_dB = 2r₀/n_cross
Suppressed small-scale UV cutoff: modes n > n_cross suppressed
Jeans scale n_cross · fundamental wavenumber
Boson mass m Sets n_cross = m·σ²·r₀ / (π·ℏ)
Predicted cutoff mode for Milky Way-like galaxy (σ=200 km/s, r₀=20 kpc):
m (eV) λ_dB (kpc) n_cross n_cross interpretation
(from λ) (from E)
---------------------------------------------------------------------------
10^-24 9.60 4.2 2.1 fundamental + few overtones
10^-23 0.96 41.7 20.8 classical (many modes)
10^-22 0.10 416.5 208.3 classical (many modes)
10^-21 0.01 4165.4 2082.7 classical (many modes)
10^-20 0.00 41653.7 20826.8 classical (many modes)
10^-19 0.00 416536.9 208268.4 classical (many modes)
At m ~ 10⁻²² eV (canonical fuzzy DM): n_cross ≈ a few modes.
The galaxy supports only the fundamental + first few overtones.
This is exactly the soliton + granular structure seen in simulations.
At m ~ 10⁻²⁰ eV: n_cross >> 1. Many overtones survive.
The spectrum is effectively classical — standard CDM behavior.
The boson mass determines WHERE in the overtone series the
UV cutoff falls. Fuzzy DM is not an alternative to the overtone
picture — it is the UV completion that prevents the catastrophe.
# ── The emergence of time, revisited ─────────────────────────────────
#
# From the inharmonicity notebook (03): time emerges when modes
# differentiate — when the medium's non-uniformity splits the
# overtone frequencies so they can beat against each other.
#
# The UV cutoff adds a constraint: there is a MINIMUM time resolution.
# The highest supported mode sets the fastest internal clock.
# Below λ_dB, no structure can form → no mode differentiation → no time.
#
# The minimum time step of the gravitational medium:
# Δt_min = 1/f_max = 1/(n_cross · f₁)
print("=== Minimum Time Resolution of the Gravitational Medium ===")
print()
print("Time emerges from mode differentiation (Notebook 03).")
print("The UV cutoff sets the fastest mode → the minimum time step.")
print()
# For a Milky Way-like galaxy
f1_Hz = sigma / (2 * math.pi * r0) # fundamental frequency
T1_yr = 1.0 / (f1_Hz * 3.156e7) # fundamental period in years
print(f"Milky Way-like: f₁ = {f1_Hz:.4e} Hz, T₁ = {T1_yr/1e6:.0f} Myr")
print()
print(f"{'m (eV)':>10s} {'n_cross':>8s} {'Δt_min':>12s} {'meaning'}")
print("-" * 60)
for m_exp in [-24, -23, -22, -21, -20]:
m_eV = 10.0 ** m_exp
m_kg = m_eV * EV / (3e8) ** 2
lam_dB = HBAR / (m_kg * sigma) / KPC
n_cross = 2 * 20.0 / lam_dB if lam_dB > 0 else float('inf')
if n_cross > 0 and n_cross < 1e10:
dt_min_yr = T1_yr / n_cross
if dt_min_yr > 1e9:
dt_str = f"{dt_min_yr/1e9:.1f} Gyr"
elif dt_min_yr > 1e6:
dt_str = f"{dt_min_yr/1e6:.1f} Myr"
elif dt_min_yr > 1e3:
dt_str = f"{dt_min_yr/1e3:.1f} kyr"
else:
dt_str = f"{dt_min_yr:.1f} yr"
else:
dt_str = "(no cutoff)"
if n_cross < 1:
meaning = "No internal clock (no modes)."
elif n_cross < 5:
meaning = "Coarse clock. Few beats."
elif n_cross < 50:
meaning = "Moderate resolution."
else:
meaning = "Fine-grained time."
print(f" 10^{m_exp:d} {n_cross:8.1f} {dt_str:>12s} {meaning}")
print()
print("At m ~ 10⁻²² eV: the gravitational medium has a coarse internal clock.")
print("It can only resolve events on timescales > Δt_min ~ hundreds of Myr.")
print("Below that: time doesn't exist for the medium. There is no structure")
print("to differentiate, no modes to beat, no clock to tick.")
print()
print("Time doesn't emerge as a concept until it is required to differentiate.")
print("The UV cutoff determines WHEN that requirement is met.")
=== Minimum Time Resolution of the Gravitational Medium ===
Time emerges from mode differentiation (Notebook 03).
The UV cutoff sets the fastest mode → the minimum time step.
Milky Way-like: f₁ = 5.1573e-17 Hz, T₁ = 614 Myr
m (eV) n_cross Δt_min meaning
------------------------------------------------------------
10^-24 4.2 147.5 Myr Coarse clock. Few beats.
10^-23 41.7 14.7 Myr Moderate resolution.
10^-22 416.5 1.5 Myr Fine-grained time.
10^-21 4165.4 147.5 kyr Fine-grained time.
10^-20 41653.7 14.7 kyr Fine-grained time.
At m ~ 10⁻²² eV: the gravitational medium has a coarse internal clock.
It can only resolve events on timescales > Δt_min ~ hundreds of Myr.
Below that: time doesn't exist for the medium. There is no structure
to differentiate, no modes to beat, no clock to tick.
Time doesn't emerge as a concept until it is required to differentiate.
The UV cutoff determines WHEN that requirement is met.
What this notebook shows#
Classical equipartition of overtone modes diverges — the gravitational ultraviolet catastrophe. Without a cutoff, infinite energy would pile up in small-scale dark matter structure.
Fuzzy dark matter provides the cutoff. The de Broglie wavelength of an ultralight boson sets the maximum supported mode number n_cross. Below λ_dB: no structure, no overtones.
The gravitational Planck spectrum — energy per overtone mode with an exponential cutoff at n > n_cross — reproduces the key features of fuzzy DM simulations: solitonic core (fundamental mode), granular structure (beating of low overtones), and suppressed small-scale power.
The boson mass sets the minimum time resolution. The fastest internal clock of the gravitational medium is 1/(n_cross · f₁). Below this timescale, the medium has no internal structure to differentiate — time does not exist.
Fuzzy DM is not an alternative to the overtone picture. It is the UV completion. The boson mass determines where the Planck cutoff falls in the overtone spectrum. The overtone picture explains the structure. Fuzzy DM explains why the structure is finite.
The deepest point#
Planck resolved the UV catastrophe by discovering that energy is quantized. The gravitational analog: the boson mass quantizes the overtone spectrum. But Planck’s discovery was not JUST a mathematical fix — it revealed that the world is fundamentally discrete at small scales. The gravitational analog would be: spacetime structure is fundamentally discrete below λ_dB. Not because of a lattice. Because the medium cannot support modes finer than its own quantum of structure. The discreteness is emergent from the medium’s composition, not imposed from outside.
References: Rayleigh (1900), Planck (1901), Hu et al. (2000), Schive et al. (2014), Hui et al. (2017), Marsh (2016). CC0.