ORT: Gravity Basics#
Chapter 12, part 1 | §12.1–12.14 | Formulas 23–39
This notebook covers the basic gravitational effects in ORT. The core idea: near mass, part of the velocity budget \(c\) goes toward the mass (\(v_{grav}\), the escape velocity), reducing the local spacetime speed: \(c_{local}^2 = c^2 - v_{grav}^2\). From this single extension follow gravitational time dilation, redshift, light deflection, orbital precession, and the full Schwarzschild metric.
import sys, pathlib
sys.path.insert(0, str(pathlib.Path().resolve().parent / 'shared'))
from ort_core import *
from ort_plots import (c_local_profile, c_local_profile_interactive, spacetime_embedding_3d,
orbital_precession_plot, light_deflection_diagram, photon_sphere_shadow, einstein_ring_plot, comparison_table)
import matplotlib.pyplot as plt
import math
import numpy as np
%matplotlib inline
§12.1 — The Principle: the three-component velocity budget#
In SRT everything moves at \(c\) through spacetime. The velocity budget has two components:
Near mass a third component appears: the gravitational velocity \(v_{grav}\). This is the velocity component directed toward the central mass, with magnitude equal to the escape velocity (known from Newton):
The total velocity budget becomes:
What remains for space and time is the local spacetime speed:
Define \(r_s = 2GM/c^2\). This is the distance where \(c_{local} = 0\), where the entire velocity budget is consumed by \(v_{grav}\):
The core idea: near mass, part of your velocity budget \(c\) goes toward the mass (\(v_{grav}\)), leaving less for motion through space and time (\(c_{local}\)).
The same pattern as in flat spacetime:
Flat spacetime: constant \(c\) → time dilation, length contraction, \(E = mc^2\)
Gravity: varying \(c_{local}\) → gravitational time dilation, redshift, event horizon
# c_local profile for the Sun and the Earth
fig = c_local_profile([SUN, EARTH], ['Sun', 'Earth'], lang='en')
plt.show()
# Interactive: adjust the mass and view the c_local profile
c_local_profile_interactive(lang='en')
Interactive version — download the notebook to use the slider.
The gradient of \(c_{local}\) is gravity#
The derivative of \(c_{local}\) with respect to \(r\) reveals a direct connection to the gravitational acceleration \(g\):
The proper acceleration of a stationary observer at distance \(r\) (from the Schwarzschild metric):
The relation is therefore:
In the weak field (\(r \gg r_s\)) this simplifies to:
Interpretation: the gradient of the \(c_{local}\) field is gravity, scaled by \(1/c\). Where \(c_{local}\) changes rapidly with distance, gravity is strong. At the event horizon (\(r = r_s\)), \(dc_{local}/dr\) diverges — infinite proper acceleration, exactly as in GRT.
In ORT, gravity is therefore not a force, but the slope of the local velocity field.
# Verification: dc_local/dr = g_proper / c
print("=== Gradient of c_local = gravity ===")
print()
# Earth
print("--- Earth (surface) ---")
dc_dr_earth = EARTH.dc_local_dr(R_EARTH)
g_earth = EARTH.proper_acceleration(R_EARTH)
print(f" dc_local/dr = {dc_dr_earth:.6e} [1/s]")
print(f" g_proper = {g_earth:.4f} m/s²")
print(f" g_proper / c = {g_earth / C:.6e} [1/s]")
print(f" Ratio = {dc_dr_earth / (g_earth / C):.15f} (should be 1)")
print()
# Sun
print("--- Sun (surface) ---")
dc_dr_sun = SUN.dc_local_dr(R_SUN)
g_sun = SUN.proper_acceleration(R_SUN)
print(f" dc_local/dr = {dc_dr_sun:.6e} [1/s]")
print(f" g_proper = {g_sun:.4f} m/s²")
print(f" g_proper / c = {g_sun / C:.6e} [1/s]")
print(f" Ratio = {dc_dr_sun / (g_sun / C):.15f}")
print()
# Black hole (10 M☉) — strong field
BH = GravityModel(10 * M_SUN)
print("--- Black hole 10 M☉ (r = 1.1 r_s) ---")
r_bh = 1.1 * BH.rs
dc_dr_bh = BH.dc_local_dr(r_bh)
g_bh = BH.proper_acceleration(r_bh)
print(f" dc_local/dr = {dc_dr_bh:.6e} [1/s]")
print(f" g_proper = {g_bh:.6e} m/s²")
print(f" g_proper / c = {dc_dr_bh:.6e} [1/s]")
print(f" Ratio = {dc_dr_bh / (g_bh / C):.15f}")
print()
print("The relation dc_local/dr = g/c holds EXACTLY, from weak to strong field.")
=== Gradient of c_local = gravity ===
--- Earth (surface) ---
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[4], line 7
5 # Earth
6 print("--- Earth (surface) ---")
----> 7 dc_dr_earth = EARTH.dc_local_dr(R_EARTH)
8 g_earth = EARTH.proper_acceleration(R_EARTH)
9 print(f" dc_local/dr = {dc_dr_earth:.6e} [1/s]")
AttributeError: 'GravityModel' object has no attribute 'dc_local_dr'
For comparison: derivation of \(g_{proper}\) via GRT#
The proper acceleration \(g_{proper} = \frac{GM}{r^2 \sqrt{1 - r_s/r}}\) was introduced above as a result from the Schwarzschild metric. Below is the full GRT derivation via Christoffel symbols, making clear how complex the standard route is versus ORT’s one-step formula \(g = c \cdot dc_{local}/dr\).
Step 1 — Schwarzschild metric
Step 2 — Four-velocity of a stationary observer
An observer who remains at fixed \(r\) (\(dr = d\theta = d\varphi = 0\)) has four-velocity:
since \(ds^2 = -f \cdot c^2 \cdot dt^2 = -c^2 \cdot d\tau^2\), so \(dt/d\tau = 1/\sqrt{f}\).
Step 3 — Christoffel symbol \(\Gamma^r_{tt}\)
From the metric follows the relevant Christoffel symbol:
Step 4 — Coordinate acceleration (geodesic equation)
The geodesic equation \(\frac{d^2 x^r}{d\tau^2} + \Gamma^r_{\mu\nu}\,u^\mu\,u^\nu = 0\) gives for the stationary observer:
The factor \(f\) cancels — the coordinate acceleration is Newtonian.
Step 5 — From coordinate to proper acceleration
The local (physical) acceleration measured by the observer requires projection onto the local frame via \(\sqrt{g_{rr}}\):
Conclusion: five steps — metric, four-velocity, Christoffel symbols, geodesic equation, frame projection — to arrive at the same result that ORT gives in one step:
The mathematical machinery of GRT (differential geometry, Christoffel symbols, geodesic equations) is powerful and general, but obscures the physical insight: gravity is the slope of the local velocity field.
§12.2 — Gravitational Time Dilation#
A clock at distance \(r\) from a mass experiences \(c_{local} < c\). If the clock is at rest, all \(c_{local}\) goes to motion through time:
This is exactly the Schwarzschild time dilation from GRT.
# Time dilation at Earth's surface, GPS orbit, ISS orbit
print("=== Gravitational Time Dilation (Earth) ===")
print(f"Schwarzschild radius Earth: r_s = {EARTH.rs:.4e} m = {EARTH.rs*1000:.4f} mm")
print()
locations = [
("Earth surface", R_EARTH),
("ISS (408 km)", R_ISS),
("GPS (20,200 km)", R_GPS),
]
for name, r in locations:
td = EARTH.time_dilation_factor(r)
diff_per_day = (1 - td) * 86400e6 # microseconds per day
print(f"{name:25s}: τ/t∞ = {td:.15f} (offset: {diff_per_day:.3f} µs/day)")
=== Gravitational Time Dilation (Earth) ===
Schwarzschild radius Earth: r_s = 8.8698e-03 m = 8.8698 mm
Earth surface : τ/t∞ = 0.999999999303892 (offset: 60.144 µs/day)
ISS (408 km) : τ/t∞ = 0.999999999345788 (offset: 56.524 µs/day)
GPS (20,200 km) : τ/t∞ = 0.999999999833092 (offset: 14.421 µs/day)
# Newton vs ORT: time dilation at GPS altitude
# Newton has NO time dilation — time is absolute!
r_gps = R_EARTH + 20_200_000 # GPS altitude ~20,200 km
td_ort = EARTH.time_dilation_factor(r_gps)
drift_per_day_us = (1 - td_ort) * 86400 * 1e6 # µs per day
print("=== Newton vs ORT: gravitational time dilation ===")
print(f"Clock at GPS altitude ({20200} km):")
print(f" Newton: Δt = 0 µs/day (time is absolute!)")
print(f" ORT: Δt = {drift_per_day_us:+.2f} µs/day (clock runs FASTER)")
print()
print(f"Without correction: GPS would drift {abs(drift_per_day_us) * C * 1e-6:.0f} m after 1 day!")
print(f"After 1 week: {abs(drift_per_day_us) * 7 * C * 1e-6:.0f} m — navigation useless.")
=== Newton vs ORT: gravitational time dilation ===
Clock at GPS altitude (20200 km):
Newton: Δt = 0 µs/day (time is absolute!)
ORT: Δt = +14.42 µs/day (clock runs FASTER)
Without correction: GPS would drift 4323 m after 1 day!
After 1 week: 30263 m — navigation useless.
§12.3 — Gravitational Redshift#
Light escaping a gravitational field loses frequency:
When the observer is farther from the mass: \(f_{obs} < f_{emit}\) → redshift.
# Pound-Rebka experiment (1959): 22.5 m height difference
h = 22.5 # meters
r_bottom = R_EARTH
r_top = R_EARTH + h
z = EARTH.gravitational_redshift(r_bottom, r_top)
delta_f_over_f = -z # redshift = negative
# Approximation: Δf/f ≈ g·h/c²
g = G * M_EARTH / R_EARTH**2
approx = g * h / C**2
print("=== Pound-Rebka Experiment ===")
print(f"Height: {h} m")
print(f"Redshift z = {z:.6e}")
print(f"|Δf/f| = {abs(delta_f_over_f):.6e}")
print(f"Approximation g·h/c² = {approx:.6e}")
print(f"Measured (1959) = (2.57 ± 0.26) ·10⁻¹⁵")
=== Pound-Rebka Experiment ===
Height: 22.5 m
Redshift z = 2.442491e-15
|Δf/f| = 2.442491e-15
Approximation g·h/c² = 2.458394e-15
Measured (1959) = (2.57 ± 0.26) ·10⁻¹⁵
§12.4 — GPS Full Correction (SRT + Gravity)#
GPS combines both effects in a single formula:
Component |
Cause |
Effect |
|---|---|---|
SRT |
Satellite velocity (3870 m/s) |
−7 µs/day (slower) |
Gravity |
Lower g at GPS altitude |
+45 µs/day (faster) |
Net |
Combined |
+38 µs/day (faster) |
# GPS correction: combined SRT + gravity
v_gps = 3870 # m/s (GPS satellite velocity)
# Earth surface (at rest)
td_surface = EARTH.combined_time_dilation(R_EARTH, 0)
# GPS satellite (moving at altitude)
td_gps = EARTH.combined_time_dilation(R_GPS, v_gps)
# Difference in microseconds per day
diff_us_per_day = (td_gps - td_surface) * 86400 * 1e6
# Individual components
grav_only = (EARTH.time_dilation_factor(R_GPS) - EARTH.time_dilation_factor(R_EARTH)) * 86400 * 1e6
srt_only = (math.sqrt(1 - (v_gps/C)**2) - 1) * 86400 * 1e6
print("=== GPS Correction ===")
print(f"Gravity only: {grav_only:+.2f} µs/day")
print(f"SRT only (velocity): {srt_only:+.2f} µs/day")
print(f"Combined (formula): {diff_us_per_day:+.2f} µs/day")
print(f"\nExpected net: +38 µs/day")
=== GPS Correction ===
Gravity only: +45.72 µs/day
SRT only (velocity): -7.20 µs/day
Combined (formula): +38.52 µs/day
Expected net: +38 µs/day
§12.5 — The Event Horizon (\(c_{local} = 0\))#
At \(r = r_s\), \(c_{local} = 0\). The consequences:
Nothing can move — neither through space nor through time
Clocks stop — \(\tau/t_\infty = 0\)
Light cannot escape — there is no local spacetime velocity left
# Black hole of 10 solar masses
BH_10 = GravityModel(10 * M_SUN)
print(f"=== Black hole of 10 M☉ ===")
print(f"r_s = {BH_10.rs:.3e} m = {BH_10.rs/1000:.2f} km")
print()
# c_local at various distances from the horizon
factors = [10.0, 5.0, 2.0, 1.5, 1.1, 1.01, 1.001, 1.0]
print(f"{'r/r_s':>8s} {'c_local/c':>12s} {'c_local (m/s)':>15s}")
print("-" * 40)
for f in factors:
r = f * BH_10.rs
cl = BH_10.c_local(r)
print(f"{f:8.3f} {cl/C:12.6f} {cl:15.0f}")
=== Black hole of 10 M☉ ===
r_s = 2.954e+04 m = 29.54 km
r/r_s c_local/c c_local (m/s)
----------------------------------------
10.000 0.948683 284408098
5.000 0.894427 268142526
2.000 0.707107 211985280
1.500 0.577350 173085256
1.100 0.301511 90390827
1.010 0.099504 29830465
1.001 0.031607 9475533
1.000 0.000000 0
§12.6 — Gravity Velocity \(v_{grav}\)#
Near a mass, part of your total velocity \(c\) goes towards that mass:
This is exactly the escape velocity \(v_{esc} = \sqrt{2GM/r}\).
For a moving object, the three-component budget applies:
# v_grav at various distances
print("=== Velocity budget near 10 M☉ black hole ===")
print(f"{'r/r_s':>8s} {'v_grav/c':>10s} {'c_local/c':>10s} {'check v²+c²':>12s}")
print("-" * 46)
for f in [10.0, 5.0, 2.0, 1.5, 1.1, 1.01, 1.0]:
r = f * BH_10.rs
vg = BH_10.v_grav(r)
cl = BH_10.c_local(r)
check = math.sqrt(vg**2 + cl**2) / C
print(f"{f:8.3f} {vg/C:10.6f} {cl/C:10.6f} {check:12.9f}")
=== Velocity budget near 10 M☉ black hole ===
r/r_s v_grav/c c_local/c check v²+c²
----------------------------------------------
10.000 0.316228 0.948683 1.000000000
5.000 0.447214 0.894427 1.000000000
2.000 0.707107 0.707107 1.000000000
1.500 0.816497 0.577350 1.000000000
1.100 0.953463 0.301511 1.000000000
1.010 0.995037 0.099504 1.000000000
1.000 1.000000 0.000000 1.000000000
§12.7 — Spatial Stretching#
A coordinate distance \(dr\) corresponds to a larger physical distance \(dl\):
This is the spatial component of the Schwarzschild metric:
Together with \(g_{tt} = (c_{local}/c)^2\), ORT now matches both diagonal components.
# Spatial stretching near the Sun and a 10 M☉ black hole
print("=== Spatial Stretching ===")
print()
print("--- Sun (surface) ---")
stretch_sun = SUN.spatial_stretching(R_SUN)
print(f"Stretching factor: {stretch_sun:.10f}")
print(f"Extra length per km: {(stretch_sun - 1) * 1000:.6f} m")
print()
print("--- 10 M☉ black hole ---")
for f in [10.0, 3.0, 1.5, 1.1, 1.01]:
r = f * BH_10.rs
s = BH_10.spatial_stretching(r)
print(f" r = {f:.2f} r_s: stretching = {s:.6f} (1 km → {s:.6f} km)")
=== Spatial Stretching ===
--- Sun (surface) ---
Stretching factor: 1.0000021231
Extra length per km: 0.002123 m
--- 10 M☉ black hole ---
r = 10.00 r_s: stretching = 1.054093 (1 km → 1.054093 km)
r = 3.00 r_s: stretching = 1.224745 (1 km → 1.224745 km)
r = 1.50 r_s: stretching = 1.732051 (1 km → 1.732051 km)
r = 1.10 r_s: stretching = 3.316625 (1 km → 3.316625 km)
r = 1.01 r_s: stretching = 10.049876 (1 km → 10.049876 km)
3D Flamm’s Paraboloid#
The spatial stretching can be visualized as Flamm’s paraboloid: a 2D embedding of the spatial geometry around a mass.
# 3D embedding of the spatial geometry
fig = spacetime_embedding_3d(lang='en')
if fig is not None:
fig.show()
§12.8 — Light Deflection#
Light grazing a mass is deflected by two equal contributions:
Temporal (refractive index): \(n_{time} = c/c_{local}\)
Spatial (stretching): \(n_{space} = c/c_{local}\)
Combined: the effective refractive index:
The total deflection angle:
This is exactly the GRT result (Einstein 1915: 1.75”). Soldner (1801) and Einstein (1911) found half: only the temporal effect.
# Light deflection diagram
fig = light_deflection_diagram(lang='en')
plt.show()
# Light deflection by the Sun (b = R_sun)
alpha_arcsec = SUN.light_deflection_arcsec(R_SUN)
alpha_half = SUN.half_light_deflection(R_SUN) * (180/math.pi) * 3600
print("=== Light Deflection by the Sun ===")
print(f"Impact parameter b = R_sun = {R_SUN:.3e} m")
print(f"Soldner/Einstein 1911 (half value): {alpha_half:.4f}\"")
print(f"ORT / GRT (full): {alpha_arcsec:.4f}\"")
print(f"Measured (Eddington 1919): 1.75 ± 0.06\"")
=== Light Deflection by the Sun ===
Impact parameter b = R_sun = 6.957e+08 m
Soldner/Einstein 1911 (half value): 0.8759"
ORT / GRT (full): 1.7517"
Measured (Eddington 1919): 1.75 ± 0.06"
# Newton vs ORT: light deflection by the Sun
# Newton/Soldner (1801) predicts HALF the correct answer!
alpha_newton = SUN.half_light_deflection(R_SUN) * (180 / math.pi) * 3600
alpha_ort = SUN.light_deflection_arcsec(R_SUN)
print("=== Newton vs ORT: light deflection by the Sun ===")
print(f" Newton/Soldner (1801): {alpha_newton:.4f}\" (time curvature only)")
print(f" ORT/Einstein (1915): {alpha_ort:.4f}\" (time + space curvature)")
print(f" Eddington (1919): 1.75 ± 0.06\" (measured!)")
print()
print(f"Newton predicts exactly HALF: {alpha_newton/alpha_ort:.3f}×")
print(f"The missing half comes from spatial curvature — something Newton lacks.")
=== Newton vs ORT: light deflection by the Sun ===
Newton/Soldner (1801): 0.8759" (time curvature only)
ORT/Einstein (1915): 1.7517" (time + space curvature)
Eddington (1919): 1.75 ± 0.06" (measured!)
Newton predicts exactly HALF: 0.500×
The missing half comes from spatial curvature — something Newton lacks.
§12.9 — Orbital Precession — the effective potential#
In Newtonian mechanics, the gravitational potential and angular momentum together yield an effective potential that describes a closed elliptical orbit:
where \(L\) is the specific angular momentum. This orbit closes exactly — there is no precession.
In GRT (and in ORT) an extra term appears:
The extra term \(-GML^2/(r^3c^2)\) is always negative and grows stronger as \(r\) decreases. At perihelion (closest to the Sun) the effect is largest. This opens the ellipse: after each orbit the perihelion has shifted slightly — perihelion precession.
Two equal contributions — the same 50/50 pattern#
Just as with light deflection, the extra term arises from the interplay of two effects:
Temporal (\(g_{tt}\)): the varying clock rate affects the effective orbital velocity → contribution \((3/2)\pi r_s / (a(1-e^2))\) per orbit
Spatial (\(g_{rr}\)): the stretching of radial distance affects the effective potential → equally large contribution \((3/2)\pi r_s / (a(1-e^2))\)
Combined:
Mercury — the classical test#
For Mercury (\(a = 5.791 \cdot 10^{10}\) m, \(e = 0.20563\)):
\(\Delta\varphi\) per orbit = 0.1035 arcseconds
Orbits per century = 415.2
\(\Delta\varphi\) per century = 42.98 arcseconds — exactly the observed value
Planet |
Δφ/orbit (“) |
Orbits/century |
Δφ/century (“) |
Observed (“) |
|---|---|---|---|---|
Mercury |
0.1035 |
415.2 |
42.98 |
43.0 |
Venus |
0.0053 |
162.5 |
0.86 |
8.6* |
Earth |
0.0038 |
100.0 |
0.38 |
3.8* |
Mars |
0.0013 |
53.1 |
0.07 |
1.4* |
* The observed values for Venus, Earth, and Mars also include gravitational influences from other planets; the relativistic contribution is smallest for these planets.
Historical perspective#
Le Verrier (1859): discovered the anomalous precession of Mercury — 43 arcseconds per century unaccounted for by Newton
Einstein (1915): GRT predicts exactly 42.98”/century — with no free parameters. This was one of the first confirmations of GRT.
ORT: the same formula \(\Delta\varphi = 3\pi r_s/(a(1-e^2))\) — exactly the same result
# Orbital precession of Mercury
prec_per_orbit = SUN.orbital_precession_arcsec(A_MERCURY, E_MERCURY)
prec_per_century = SUN.orbital_precession_arcsec_century(A_MERCURY, E_MERCURY, T_MERCURY)
print("=== Orbital Precession of Mercury ===")
print(f"Semi-major axis a = {A_MERCURY:.4e} m")
print(f"Eccentricity e = {E_MERCURY}")
print(f"Orbital period = {T_MERCURY/86400:.3f} days")
print(f"\nΔφ per orbit = {prec_per_orbit:.4f}\"")
print(f"Δφ per century = {prec_per_century:.2f}\"")
print(f"Observed = 43.0\"")
=== Orbital Precession of Mercury ===
Semi-major axis a = 5.7909e+10 m
Eccentricity e = 0.20563
Orbital period = 87.969 days
Δφ per orbit = 0.1035"
Δφ per century = 42.99"
Observed = 43.0"
# Newton vs ORT: orbital precession of Mercury
# Newton predicts closed ellipses — 0 extra precession!
prec_ort = SUN.orbital_precession_arcsec(A_MERCURY, E_MERCURY)
prec_per_century = prec_ort * (100 * 365.25 * 86400) / T_MERCURY
print("=== Newton vs ORT: orbital precession of Mercury ===")
print(f" Newton: 0.00\"/century (ellipse closes exactly!)")
print(f" ORT/Einstein: {prec_per_century:.2f}\"/century")
print(f" Observed: 43.0 ± 0.1\"/century (Le Verrier, 1859)")
print()
print(f"This unexplained discrepancy was a mystery for 56 years.")
print(f"Einstein solved it in 1915 — his first confirmation of GRT.")
=== Newton vs ORT: orbital precession of Mercury ===
Newton: 0.00"/century (ellipse closes exactly!)
ORT/Einstein: 42.99"/century
Observed: 43.0 ± 0.1"/century (Le Verrier, 1859)
This unexplained discrepancy was a mystery for 56 years.
Einstein solved it in 1915 — his first confirmation of GRT.
# Precession plot for Mercury
fig = orbital_precession_plot(SUN, A_MERCURY, E_MERCURY, n_orbits=5, lang='en')
plt.show()
§12.10 — What looks like curved spacetime#
In GRT, gravitational effects are described as curvature of spacetime: mass bends spacetime, and objects follow geodesics (straight paths in curved space).
In ORT there is an alternative description: the spacetime velocity \(c_{local}\) varies from place to place. Objects still move at their local \(c_{local}\) through spacetime, but because \(c_{local}\) depends on position, the “rules” change from point to point.
A varying \(c_{local}\) produces the same effects as spacetime curvature:
Clocks run slower where \(c_{local}\) is lower → time dilation
Space stretches radially → distances become larger near mass
Light deflects due to the combined refractive index \(n_{eff} = (c/c_{local})^2\)
Light loses frequency when climbing → redshift
At \(c_{local} = 0\) everything stops → event horizon
With \(v_{grav}\) and the spatial stretching we now also understand the spatial component: the varying \(c_{local}\) affects not only the flow of time, but also the distance measure. What in GRT looks like four-dimensional curved spacetime, is in ORT a varying local velocity structure.
§12.11 — The Schwarzschild Connection#
The Schwarzschild metric for a spherically symmetric mass:
ORT now reproduces both diagonal components:
Time component: $\(g_{tt} = 1 - \frac{r_s}{r} = \left(\frac{c_{local}}{c}\right)^2 \qquad (36)\)$
The time dilation: \(\sqrt{g_{tt}} = c_{local}/c\) — exactly formula (23).
Spatial component: $\(g_{rr} = \left(1 - \frac{r_s}{r}\right)^{-1} = \left(\frac{c}{c_{local}}\right)^2 \qquad (37)\)$
The spatial stretching: \(\sqrt{g_{rr}} = c/c_{local}\) — exactly formula (30).
The agreement is not approximate — it is an exact equality for both diagonal components. This means that ORT, with a single principle (varying \(c_{local}\)), reproduces both the temporal and spatial effects of the Schwarzschild solution.
The off-diagonal components (which arise for rotating masses, Kerr metric) are treated in §12.27 (notebook 03).
# Numerical verification: g_tt and g_rr from Schwarzschild vs from c_local/c
print("=== Schwarzschild verification: g_tt and g_rr from c_local ===")
print()
print(f"{'r/r_s':>8s} {'g_tt (Schw)':>12s} {'(c_l/c)²':>12s} {'g_rr (Schw)':>12s} {'(c/c_l)²':>12s} {'match':>6s}")
print("-" * 70)
for f in [100.0, 10.0, 5.0, 3.0, 2.0, 1.5, 1.1, 1.01]:
r = f * BH_10.rs
# Schwarzschild metric components
g_tt_schw = 1 - BH_10.rs / r
g_rr_schw = 1 / (1 - BH_10.rs / r)
# ORT: from c_local
cl = BH_10.c_local(r)
g_tt_ort = (cl / C) ** 2
g_rr_ort = (C / cl) ** 2
match = "✓" if abs(g_tt_schw - g_tt_ort) < 1e-12 and abs(g_rr_schw - g_rr_ort) < 1e-10 else "✗"
print(f"{f:8.2f} {g_tt_schw:12.8f} {g_tt_ort:12.8f} {g_rr_schw:12.8f} {g_rr_ort:12.8f} {match:>6s}")
print()
print("One principle (varying c_local) → both Schwarzschild components: EXACT.")
§12.12 — The pattern: constant c → SRT, varying c_local → gravity#
ORT reveals an elegant pattern:
Regime |
Spacetime velocity |
What follows |
|---|---|---|
No mass |
\(c\) (constant) |
SRT: time dilation, \(E=mc^2\), Lorentz |
Near mass |
\(c_{local} < c\) |
Gravitational time dilation, redshift |
Near mass |
\(v_{grav} > 0\) |
Light deflection, spatial stretching |
Near mass |
\(g_{tt} \cdot g_{rr}\) |
Orbital precession (50/50 temporal + spatial) |
Event horizon |
\(c_{local} = 0\) |
Nothing moves, Being = 0 |
Far from mass |
\(c_{local} \to c\) |
Return to flat spacetime |
One principle — “everything moves at the local spacetime velocity” — describes both special relativity and the main gravitational effects. The velocity sphere gains a third component:
§12.13 — What this extension describes and what it does not#
The model now describes both the temporal and spatial effects of static, spherically symmetric gravity.
Described in this notebook (§12.1–12.14):
Time dilation, redshift, light deflection, orbital precession
Shapiro delay, geodetic precession, event horizon
Charged mass (Reissner-Nordström, see §12.15)
All four classical tests of GRT (§12.16), plus geodetic precession as a fifth test (§12.17)
Also described (notebooks 03–05):
Black hole interior (\(r < r_s\)): analytic continuation \(c_{interior} = c \cdot \sqrt{r_s/r - 1}\), based on the Oppenheimer-Snyder solution (§12.23)
Gravitational waves: dynamic \(c_{local}(r,t)\) — fully described in §12.26 (inspiral, merger, ringdown)
Cosmology: our universe as the interior of a black hole (§12.22–12.25, hypothesis + speculative)
Rotating masses (Kerr metric): \(c_{local}(r,\theta)\) + frame-dragging field \(\omega(r,\theta)\), Lense-Thirring precession, Kerr ISCO (§12.27)
Not yet described (future work):
Rotating charged masses (Kerr-Newman): the combination of rotation and charge — the most general black hole solution
Interpretive note:
\(c_{local}\) is a coordinate velocity: in GRT a local observer always measures the speed of light as \(c\) (equivalence principle); \(c_{local}\) corresponds to the coordinate velocity \(dr/dt\) from the external perspective — an interpretive difference that must be clearly stated
§12.14 — Invariance of Being in a Gravitational Field#
In SRT: \(\text{Being} = m_0 \cdot c\). Near mass:
Consequences:
Mass does NOT increase in gravity — it is \(c_{local}\) that decreases, not \(m_0\) that increases
Near other beings your Being decreases — anti-holistic principle
Event horizon: Being = 0 — \(c_{local} = 0 \Rightarrow m_0 \cdot 0 = 0\)
Gravitational binding energy:
# Being near the Earth and a black hole
m0 = 1.0 # kg reference mass
print("=== Invariance of Being ===")
print(f"In flat spacetime: Being = m₀ · c = {m0 * C:.6e} kg·m/s")
print()
print("--- Near the Earth ---")
cl_earth = EARTH.c_local(R_EARTH)
being_earth = m0 * cl_earth
print(f"c_local(R_earth) = {cl_earth:.6f} m/s")
print(f"Being(R_earth) = {being_earth:.6e} kg·m/s")
print(f"Being/Being_∞ = {cl_earth/C:.15f}")
print()
print("--- Near 10 M☉ black hole ---")
for f in [10.0, 2.0, 1.1, 1.01]:
r = f * BH_10.rs
cl = BH_10.c_local(r)
print(f" r = {f:.2f} r_s: Being = {m0 * cl:.6e} kg·m/s ({cl/C:.6f} c)")
print()
# Binding energy
E_bind = m0 * C**2 * (1 - EARTH.time_dilation_factor(R_EARTH))
print(f"Binding energy 1 kg at Earth surface: {E_bind:.6e} J")
=== Invariance of Being ===
In flat spacetime: Being = m₀ · c = 2.997925e+08 kg·m/s
--- Near the Earth ---
c_local(R_earth) = 299792457.791312 m/s
Being(R_earth) = 2.997925e+08 kg·m/s
Being/Being_∞ = 0.999999999303892
--- Near 10 M☉ black hole ---
r = 10.00 r_s: Being = 2.844081e+08 kg·m/s (0.948683 c)
r = 2.00 r_s: Being = 2.119853e+08 kg·m/s (0.707107 c)
r = 1.10 r_s: Being = 9.039083e+07 kg·m/s (0.301511 c)
r = 1.01 r_s: Being = 2.983046e+07 kg·m/s (0.099504 c)
Binding energy 1 kg at Earth surface: 6.256305e+07 J
Summary#
All basic gravitational effects follow from a single extension:
Effect |
Formula |
Confirmation |
|---|---|---|
Gradient = gravity |
\(dc_{local}/dr = g/c\) |
Formula (23b/23c) |
Time dilation |
\(\tau/t = \sqrt{1-r_s/r}\) |
GPS, atomic clocks |
Redshift |
\(f_{obs}/f_{emit} = c_{local,e}/c_{local,o}\) |
Pound-Rebka |
GPS correction |
\(v_{time} = \sqrt{c_{local}^2 - v^2}/c\) |
Daily verification |
Event horizon |
\(c_{local} = 0\) at \(r = r_s\) |
EHT M87*, Sgr A* |
Light deflection |
\(\alpha = 4GM/(bc^2)\) |
Eddington 1919 |
Orbital precession |
\(\Delta\varphi = 3\pi r_s/(a(1-e^2))\) |
Mercury 42.98”/century |
Schwarzschild metric |
\(g_{tt} = (c_{local}/c)^2\), \(g_{rr} = (c/c_{local})^2\) |
Exact — formula (36)/(37) |
Being in gravity |
\(S = m_0 \cdot c_{local}\) |
Conservation law |
Scope |
§12.1–12.14: all basic effects |
§12.15+: RN, Shapiro, Kerr, GW, cosmology |
Next: Notebook 03 covers advanced topics (RN, Shapiro, geodetic precession, photon sphere, GW, Kerr).