Chapter 12: The Equivalence Principle
The equivalence principle is the cornerstone of general relativity. It states that gravitational and inertial mass are equivalent, and that locally, gravity is indistinguishable from acceleration. This insight led Einstein to describe gravity as spacetime curvature.
Three Forms
Weak Equivalence Principle (WEP)
All test particles fall with the same acceleration in a gravitational field, regardless of their composition.
\( m_{inertial} = m_{gravitational} \) (tested to 10-15 precision)
Einstein Equivalence Principle (EEP)
In a freely falling local reference frame, the laws of physics are those of special relativity.
Includes WEP + local Lorentz invariance + local position invariance
Strong Equivalence Principle (SEP)
EEP applies to all physics, including gravitational experiments. Self-gravitating bodies fall like test particles.
Only satisfied by general relativity (not scalar-tensor theories)
Einstein's Thought Experiments
The Elevator
An observer in a closed elevator cannot distinguish between:
⢠Resting on Earth's surface in gravity g
⢠Accelerating upward at g in empty space
Free Fall
An observer in free fall cannot distinguish between:
⢠Falling in a gravitational field
⢠Floating in empty space far from masses
Key Implication
Gravity can be "transformed away" locally by choosing a freely falling frame. This means gravity is not a force but a property of spacetime geometry!
Mathematical Formulation
At any point in spacetime, we can choose coordinates where the metric is locally Minkowski:
\( g_{\mu\nu}(P) = \eta_{\mu\nu}, \quad \Gamma^\rho_{\mu\nu}(P) = 0 \)
Local inertial frame (Riemann normal coordinates)
However, second derivatives (curvature) cannot be transformed away:\( R^\rho_{\;\sigma\mu\nu}(P) \neq 0 \) in general. This is the tidal effect that distinguishes true gravity from mere acceleration.
Python: Free Fall Simulation
#!/usr/bin/env python3
"""
equivalence_principle.py - Demonstrate equivalence of gravity and acceleration
Run: python3 equivalence_principle.py
"""
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle, Circle
def simulate_elevator(g, a_elevator, t_max=3.0, dt=0.01):
"""
Simulate a ball dropped in an elevator
g: gravitational acceleration (downward positive)
a_elevator: elevator acceleration (upward positive)
In the elevator frame, effective gravity is g_eff = g - a_elevator
"""
t = np.arange(0, t_max, dt)
# Ball starts at rest in elevator frame
g_eff = g - a_elevator
# Position in elevator frame
y_ball = -0.5 * g_eff * t**2
# Position of elevator floor in ground frame
y_elevator = 0.5 * a_elevator * t**2
# Ball position in ground frame
y_ball_ground = y_elevator + 2.0 + y_ball # Start 2m above floor
return t, y_ball, y_elevator, y_ball_ground
# Three scenarios
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
# Scenario 1: Stationary elevator in gravity
t1, y_ball1, _, _ = simulate_elevator(g=9.8, a_elevator=0)
axes[0].plot(t1, y_ball1, 'b-', linewidth=2)
axes[0].axhline(y=-2, color='brown', linewidth=3, label='Floor')
axes[0].set_xlabel('Time (s)')
axes[0].set_ylabel('Height above floor (m)')
axes[0].set_title('Stationary in Gravity (g=9.8 m/s²)')
axes[0].set_ylim(-2.5, 0.5)
axes[0].grid(True, alpha=0.3)
axes[0].legend()
# Scenario 2: Accelerating elevator in empty space
t2, y_ball2, _, _ = simulate_elevator(g=0, a_elevator=-9.8)
axes[1].plot(t2, y_ball2, 'r-', linewidth=2)
axes[1].axhline(y=-2, color='brown', linewidth=3, label='Floor')
axes[1].set_xlabel('Time (s)')
axes[1].set_ylabel('Height above floor (m)')
axes[1].set_title('Accelerating Upward (a=9.8 m/s², no gravity)')
axes[1].set_ylim(-2.5, 0.5)
axes[1].grid(True, alpha=0.3)
axes[1].legend()
# Scenario 3: Free falling elevator in gravity
t3, y_ball3, _, _ = simulate_elevator(g=9.8, a_elevator=9.8)
axes[2].plot(t3, y_ball3, 'g-', linewidth=2)
axes[2].axhline(y=-2, color='brown', linewidth=3, label='Floor')
axes[2].set_xlabel('Time (s)')
axes[2].set_ylabel('Height above floor (m)')
axes[2].set_title('Free Falling (a=g=9.8 m/s²)')
axes[2].set_ylim(-2.5, 0.5)
axes[2].grid(True, alpha=0.3)
axes[2].legend()
plt.tight_layout()
plt.savefig('equivalence_principle.png', dpi=150)
plt.show()
print("Equivalence Principle Demonstration")
print("="*60)
print("\nScenario 1: Ball dropped in stationary elevator on Earth")
print(" ā Ball falls with g = 9.8 m/s²")
print("\nScenario 2: Ball 'dropped' in elevator accelerating upward at 9.8 m/s²")
print(" ā Ball appears to fall with same acceleration!")
print(" ā Observer cannot distinguish from Scenario 1")
print("\nScenario 3: Ball in free-falling elevator")
print(" ā Ball floats (g_eff = g - a = 0)")
print(" ā Observer feels weightless, like in empty space")
print("\nThis is the Equivalence Principle:")
print(" Gravity ā Acceleration (locally indistinguishable)")
print("\nPlot saved as 'equivalence_principle.png'")To Run:
python3 equivalence_principle.py
Requires: numpy, matplotlib
Fortran: Tidal Forces
Click Run to execute the Python code
Code will be executed with Python 3 on the server