No-hair: coordinate Lorentzian geometry, Einstein–Maxwell equations, Kerr–Newman metric
DefinitionNoHair_coordinatesCoordinate-level Lorentzian geometry on and the Kerr–Newman family.
Points of coordinate space are ; index is time. The Minkowski metric is and units are geometrized Gaussian units (). For a matrix-valued function (metric components) and an antisymmetric matrix-valued function (electromagnetic field), with the ordinary partial derivative (Fréchet derivative applied to the -th basis vector) and the inverse matrix:
- Christoffel symbols ;
- Riemann tensor , Ricci tensor , scalar curvature , Einstein tensor ;
- the Einstein–Maxwell system at a point :
- the Hodge dual with the Levi-Civita symbol .
Kerr–Newman in Kerr–Schild coordinates. For parameters let and let be given by . With
the Kerr–Newman metric is , its potential is and its field is . Admissible black-hole parameters are , ; the outer horizon radius is and the Kerr–Newman domain of outer communications is .
These are the shared local objects of the mission: the field equations every spacetime in the mission must satisfy, and the explicit model family that the goal theorem asserts is the only possibility.
Formalization Note Coordinate space is EuclideanSpace ℝ (Fin 4); all objects are total functions, so formulas are only meaningful where denominators are nonzero (for Kerr–Newman: ).
import Mathlib
/-!
# No-hair mission: coordinate (local) Lorentzian geometry
Everything here is phrased for functions on coordinate space `ℝ⁴ = EuclideanSpace ℝ (Fin 4)`,
with coordinate `0` the time coordinate and the Minkowski metric `η = diag(-1, 1, 1, 1)`.
Units: geometrized Gaussian units `G = c = 1`, so the Einstein–Maxwell equations read
`G_{μν} = 2 (F_{μα} F_ν{}^α - ¼ g_{μν} F_{αβ} F^{αβ})` (i.e. `G = 8π T` with
`T = (1/4π)(…)`).
-/
noncomputable section
open scoped BigOperators
namespace NoHair
/-- Coordinate space `ℝ⁴`; coordinate `0` is time, coordinates `1,2,3` are `x, y, z`. -/
abbrev E4 := EuclideanSpace ℝ (Fin 4)
/-- The `μ`-th coordinate basis vector of `ℝ⁴`. -/
def coordBasis (μ : Fin 4) : E4 := EuclideanSpace.single μ 1
/-- Minkowski metric components `η = diag(-1, 1, 1, 1)`. -/
def minkowski : Matrix (Fin 4) (Fin 4) ℝ := Matrix.diagonal ![-1, 1, 1, 1]
/-- Partial derivative `∂_k f (y)` of a scalar function on coordinate space. -/
def coordPartial (f : E4 → ℝ) (k : Fin 4) (y : E4) : ℝ := fderiv ℝ f y (coordBasis k)
/-- Spatial radius `r = √(x² + y² + z²)` of a point of coordinate space. -/
def spatialRadius (y : E4) : ℝ := Real.sqrt (y 1 ^ 2 + y 2 ^ 2 + y 3 ^ 2)
/-- Inverse metric components `g^{μν}`. -/
def invMetric (G : E4 → Matrix (Fin 4) (Fin 4) ℝ) (y : E4) : Matrix (Fin 4) (Fin 4) ℝ :=
(G y)⁻¹
/-- Christoffel symbols `Γ^i_{jk} = ½ g^{il} (∂_j g_{lk} + ∂_k g_{lj} - ∂_l g_{jk})`. -/
def christoffel (G : E4 → Matrix (Fin 4) (Fin 4) ℝ) (y : E4) (i j k : Fin 4) : ℝ :=
∑ l, (1 / 2 : ℝ) * invMetric G y i l *
(coordPartial (fun z => G z l k) j y + coordPartial (fun z => G z l j) k y
- coordPartial (fun z => G z j k) l y)
/-- Riemann tensor `R^ρ_{σμν} = ∂_μ Γ^ρ_{νσ} - ∂_ν Γ^ρ_{μσ} + Γ^ρ_{μλ} Γ^λ_{νσ} - Γ^ρ_{νλ} Γ^λ_{μσ}`. -/
def riemann (G : E4 → Matrix (Fin 4) (Fin 4) ℝ) (y : E4) (ρ σ μ ν : Fin 4) : ℝ :=
coordPartial (fun z => christoffel G z ρ ν σ) μ y
- coordPartial (fun z => christoffel G z ρ μ σ) ν y
+ ∑ l, (christoffel G y ρ μ l * christoffel G y l ν σ
- christoffel G y ρ ν l * christoffel G y l μ σ)
/-- Ricci tensor `R_{σν} = R^ρ_{σρν}`. -/
def ricci (G : E4 → Matrix (Fin 4) (Fin 4) ℝ) (y : E4) (σ ν : Fin 4) : ℝ :=
∑ ρ, riemann G y ρ σ ρ ν
/-- Scalar curvature `R = g^{σν} R_{σν}`. -/
def scalarCurvature (G : E4 → Matrix (Fin 4) (Fin 4) ℝ) (y : E4) : ℝ :=
∑ σ, ∑ ν, invMetric G y σ ν * ricci G y σ ν
/-- Einstein tensor `G_{μν} = R_{μν} - ½ R g_{μν}`. -/
def einsteinTensor (G : E4 → Matrix (Fin 4) (Fin 4) ℝ) (y : E4) (μ ν : Fin 4) : ℝ :=
ricci G y μ ν - (1 / 2 : ℝ) * scalarCurvature G y * G y μ ν
/-- Contravariant field strength `F^{αβ} = g^{αμ} g^{βν} F_{μν}`. -/
def raiseBoth (G : E4 → Matrix (Fin 4) (Fin 4) ℝ) (F : E4 → Matrix (Fin 4) (Fin 4) ℝ)
(y : E4) (α β : Fin 4) : ℝ :=
∑ μ, ∑ ν, invMetric G y α μ * invMetric G y β ν * F y μ ν
/-- The (trace-adjusted) Maxwell stress tensor in geometrized Gaussian units, multiplied by `8π`:
`2 (F_{μα} F_ν{}^α - ¼ g_{μν} F_{αβ} F^{αβ})`. -/
def maxwellSource (G : E4 → Matrix (Fin 4) (Fin 4) ℝ) (F : E4 → Matrix (Fin 4) (Fin 4) ℝ)
(y : E4) (μ ν : Fin 4) : ℝ :=
2 * ((∑ α, ∑ β, F y μ α * invMetric G y α β * F y ν β)
- (1 / 4 : ℝ) * G y μ ν * ∑ α, ∑ β, F y α β * raiseBoth G F y α β)
/-- The Einstein–Maxwell system at a point of coordinate space, for metric components `G`
and electromagnetic field components `F` (a 2-form):
1. Einstein equation `G_{μν} = 2 (F_{μα} F_ν{}^α - ¼ g_{μν} F²)`;
2. source-free Maxwell equation `∂_μ (√|det g| F^{μν}) = 0`;
3. Bianchi identity (closedness) `∂_λ F_{μν} + ∂_μ F_{νλ} + ∂_ν F_{λμ} = 0`. -/
def EinsteinMaxwellAt (G : E4 → Matrix (Fin 4) (Fin 4) ℝ) (F : E4 → Matrix (Fin 4) (Fin 4) ℝ)
(y : E4) : Prop :=
(∀ μ ν, einsteinTensor G y μ ν = maxwellSource G F y μ ν) ∧
(∀ ν, ∑ μ, coordPartial
(fun z => Real.sqrt |(G z).det| * raiseBoth G F z μ ν) μ y = 0) ∧
(∀ l μ ν, coordPartial (fun z => F z μ ν) l y + coordPartial (fun z => F z ν l) μ y
+ coordPartial (fun z => F z l μ) ν y = 0)
/-- The Levi-Civita symbol `ε_{μναβ}` (sign of the permutation, `0` if an index repeats). -/
def leviCivita (μ ν α β : Fin 4) : ℝ :=
if h : Function.Bijective ![μ, ν, α, β] then
((Equiv.Perm.sign (Equiv.ofBijective _ h) : ℤ) : ℝ)
else 0
/-- Hodge dual of a 2-form with respect to the metric matrix `g` (at one point):
`(⋆F)_{μν} = ½ √|det g| ε_{μναβ} F^{αβ}`. -/
def hodgeDual (g F : Matrix (Fin 4) (Fin 4) ℝ) : Matrix (Fin 4) (Fin 4) ℝ :=
fun μ ν => (1 / 2 : ℝ) * Real.sqrt |g.det| *
∑ α, ∑ β, leviCivita μ ν α β * ∑ γ, ∑ δ, g⁻¹ α γ * g⁻¹ β δ * F γ δ
/-! ## The Kerr–Newman family in Kerr–Schild coordinates -/
/-- The Kerr–Schild radial function `r(x,y,z) ≥ 0` for rotation parameter `a`:
the nonnegative root of `(x² + y²)/(r² + a²) + z²/r² = 1`, i.e.
`r² = ½ (ρ² - a² + √((ρ² - a²)² + 4 a² z²))` with `ρ² = x² + y² + z²`. -/
def ksRadius (a : ℝ) (y : E4) : ℝ :=
let ρ2 := y 1 ^ 2 + y 2 ^ 2 + y 3 ^ 2
Real.sqrt ((ρ2 - a ^ 2 + Real.sqrt ((ρ2 - a ^ 2) ^ 2 + 4 * a ^ 2 * y 3 ^ 2)) / 2)
/-- The Kerr–Schild null covector
`k = (1, (r x + a y)/(r² + a²), (r y - a x)/(r² + a²), z / r)`. -/
def ksNull (a : ℝ) (y : E4) : Fin 4 → ℝ :=
let r := ksRadius a y
![1, (r * y 1 + a * y 2) / (r ^ 2 + a ^ 2), (r * y 2 - a * y 1) / (r ^ 2 + a ^ 2), y 3 / r]
/-- The Kerr–Schild profile `f = r² (2 m r - e²) / (r⁴ + a² z²)`. -/
def ksProfile (m a e : ℝ) (y : E4) : ℝ :=
let r := ksRadius a y
r ^ 2 * (2 * m * r - e ^ 2) / (r ^ 4 + a ^ 2 * y 3 ^ 2)
/-- Kerr–Newman metric components in Kerr–Schild coordinates:
`g_{μν} = η_{μν} + f k_μ k_ν` (mass `m`, rotation parameter `a`, charge `e`). -/
def kerrNewmanMetric (m a e : ℝ) (y : E4) : Matrix (Fin 4) (Fin 4) ℝ :=
fun μ ν => minkowski μ ν + ksProfile m a e y * ksNull a y μ * ksNull a y ν
/-- Kerr–Newman electromagnetic potential `A_μ = e r³ / (r⁴ + a² z²) · k_μ`. -/
def kerrNewmanPotential (a e : ℝ) (y : E4) : Fin 4 → ℝ :=
let r := ksRadius a y
fun μ => e * r ^ 3 / (r ^ 4 + a ^ 2 * y 3 ^ 2) * ksNull a y μ
/-- Kerr–Newman electromagnetic field `F_{μν} = ∂_μ A_ν - ∂_ν A_μ`. -/
def kerrNewmanField (a e : ℝ) (y : E4) : Matrix (Fin 4) (Fin 4) ℝ :=
fun μ ν => coordPartial (fun z => kerrNewmanPotential a e z ν) μ y
- coordPartial (fun z => kerrNewmanPotential a e z μ) ν y
/-- Admissible black-hole parameters: `m > 0` and `a² + e² ≤ m²`. -/
def IsKerrNewmanBlackHoleParams (m a e : ℝ) : Prop := 0 < m ∧ a ^ 2 + e ^ 2 ≤ m ^ 2
/-- Outer horizon radius `r₊ = m + √(m² - a² - e²)`. -/
def kerrNewmanOuterRadius (m a e : ℝ) : ℝ := m + Real.sqrt (m ^ 2 - a ^ 2 - e ^ 2)
/-- The Kerr–Newman domain of outer communications in Kerr–Schild coordinates: `r > r₊`. -/
def kerrNewmanDOC (m a e : ℝ) : Set E4 := {y | kerrNewmanOuterRadius m a e < ksRadius a y}
end NoHair
Read-back
What the Lean code literally says, in plain math · Aristotle (Harmonic) - same agent as the drafter; non-blind
Non-blind read-back. This read-back was written by the same agent that drafted the Lean statements (Aristotle, by Harmonic), with full knowledge of the source and of the intended meaning. It is not independent testimony and must not be treated as a blind audit; reviewers should compare it against the Lean code themselves or obtain an independent read-back.
The file fixes coordinate space (Euclidean space on four coordinates indexed ) and defines, for an arbitrary function from to real matrices and an arbitrary function of the same type:
- := the Fréchet derivative of at applied to the -th standard basis vector (this is wherever is not differentiable);
- := the matrix inverse of (Mathlib's inverse, which is the zero matrix when );
- Christoffel symbols, Riemann, Ricci, scalar curvature and Einstein tensor by exactly the classical index formulas , , , , ;
- and the source .
"Einstein–Maxwell at " is the conjunction of three conditions at the single point : (i) for all ; (ii) for every , ; (iii) at for all indices. Antisymmetry of is not part of this predicate.
The Levi-Civita symbol is the sign of the permutation when that map is bijective and otherwise. For matrices , .
Kerr–Newman objects, for real and : with (real square roots, which are on negative input); ; ; metric with ; potential (it does not depend on ); field . Lean division by zero returns , so at points with (and, when , at ) these expressions take junk values. "Admissible parameters" means and ; ; the Kerr–Newman domain of outer communications is the set of with (no condition on ). The spatial radius is .
Confirmed by the mission captain (proposal self-audit).
Confirmed by the moderator at approval.