Prove2Me
Navigate
DiscoverFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Boyer-Lindquist Kerr metric, closed-form inverse and regular coordinate domain

Definition
KerrBL_Kerr_Metric

by He Wang · Sep 9, 2026 · Mathlib 0df444a (Lean v4.33.1)

coordinate-geometrygeneral-relativitykerr-metrickerrbl-missionricci-flatness

Let M,a∈RM,a\in\mathbb RM,a∈R and write x=(t,r,θ,φ)x=(t,r,\theta,\varphi)x=(t,r,θ,φ), s=sin⁡θs=\sin\thetas=sinθ, c=cos⁡θc=\cos\thetac=cosθ,

Σ:=r2+a2c2,Δ:=r2−2Mr+a2.\Sigma := r^2+a^2c^2,\qquad \Delta := r^2-2Mr+a^2 .Σ:=r2+a2c2,Δ:=r2−2Mr+a2.

The bundle defines the Boyer-Lindquist Kerr metric ggg (signature (−,+,+,+)(-,+,+,+)(−,+,+,+), G=c=1G=c=1G=c=1) as a 4×44\times44×4 matrix of functions of xxx:

gtt=−(1−2MrΣ),grr=ΣΔ,gθθ=Σ,gφφ=(r2+a2+2Mra2s2Σ)s2,gtφ=gφt=−2Mars2Σ,g_{tt}=-\Big(1-\frac{2Mr}{\Sigma}\Big),\quad g_{rr}=\frac{\Sigma}{\Delta},\quad g_{\theta\theta}=\Sigma,\quad g_{\varphi\varphi}=\Big(r^2+a^2+\frac{2Mra^2s^2}{\Sigma}\Big)s^2,\quad g_{t\varphi}=g_{\varphi t}=-\frac{2Mars^2}{\Sigma},gtt​=−(1−Σ2Mr​),grr​=ΔΣ​,gθθ​=Σ,gφφ​=(r2+a2+Σ2Mra2s2​)s2,gtφ​=gφt​=−Σ2Mars2​,

with all other entries 000; the candidate inverse g^\hat gg^​:

g^tt=Δa2s2−(r2+a2)2ΣΔ,g^tφ=g^φt=−2MarΣΔ,g^rr=ΔΣ,g^θθ=1Σ,g^φφ=Δ−a2s2ΣΔs2;\hat g^{tt}=\frac{\Delta a^2s^2-(r^2+a^2)^2}{\Sigma\Delta},\quad \hat g^{t\varphi}=\hat g^{\varphi t}=-\frac{2Mar}{\Sigma\Delta},\quad \hat g^{rr}=\frac{\Delta}{\Sigma},\quad \hat g^{\theta\theta}=\frac{1}{\Sigma},\quad \hat g^{\varphi\varphi}=\frac{\Delta-a^2s^2}{\Sigma\Delta s^2};g^​tt=ΣΔΔa2s2−(r2+a2)2​,g^​tφ=g^​φt=−ΣΔ2Mar​,g^​rr=ΣΔ​,g^​θθ=Σ1​,g^​φφ=ΣΔs2Δ−a2s2​;

and the regular domain

RegM,a(x) :⟺ Σ≠0 ∧ Δ≠0 ∧ sin⁡θ≠0.\mathrm{Reg}_{M,a}(x)\ :\Longleftrightarrow\ \Sigma\neq0\ \wedge\ \Delta\neq0\ \wedge\ \sin\theta\neq0 .RegM,a​(x) :⟺ Σ=0 ∧ Δ=0 ∧ sinθ=0.

The parameters are arbitrary reals: the black-hole regime M>0M>0M>0, ∣a∣≤M|a|\le M∣a∣≤M is not assumed, negative rrr is allowed, and the axis sin⁡θ=0\sin\theta=0sinθ=0 is excluded because the inverse carries 1/sin⁡2θ1/\sin^2\theta1/sin2θ.

The five non-zero components are transcribed token-for-token from the parent project's canonical certificate EinsteinSolver/certificate/kerr/metric.json (sha256 d729883d...0be336); five source-lock lemmas gKerr_ij_src prove that the compact definitions equal those transcriptions. The remaining lemmas are rfl accessors for the 32 matrix entries.

Formalization Note Real division by zero is 000 in Lean, so the components take junk values off the regular domain; every theorem of the mission assumes RegM,a(x)\mathrm{Reg}_{M,a}(x)RegM,a​(x). Nothing about curvature or Ricci-flatness is part of this bundle.

Definition code
import Definitions.Def_KerrBL_CoordGeometry
import Mathlib.Analysis.SpecialFunctions.Trigonometric.Basic
import Mathlib.Tactic
set_option linter.unusedTactic false
set_option linter.unreachableTactic false
set_option linter.unusedSimpArgs false
set_option linter.unusedVariables false

/-! Layer I data for the Kerr metric (generated by mission_emit.py from
EinsteinSolver/certificate/kerr/metric.json sha256=d729883d95fd7d3cf84d9c971c6725f847155562cc4e88660535b8d0bd0be336). -/

namespace KerrBL

/-- Atom `Sig` = `a**2*c**2 + r**2` -/
noncomputable def Sig (a r c : ℝ) : ℝ := r^(2:ℕ) + a^(2:ℕ)*c^(2:ℕ)

/-- Atom `Del` = `-2*M*r + a**2 + r**2` -/
noncomputable def Del (M a r : ℝ) : ℝ := a^(2:ℕ) + r^(2:ℕ) - 2*M*r

/-- The Kerr metric components g_{ij} at a coordinate point (transcribed from metric.json). -/
noncomputable def gKerr (M a : ℝ) : Fin 4 → Fin 4 → Pt → ℝ
  | 0, 0 => fun x => (-1) + 2*M*(x 1)/Sig a (x 1) (Real.cos (x 2))
  | 0, 3 => fun x => ((-2))*M*a*(x 1)*Real.sin (x 2)^(2:ℕ)/Sig a (x 1) (Real.cos (x 2))
  | 1, 1 => fun x => Sig a (x 1) (Real.cos (x 2))/Del M a (x 1)
  | 2, 2 => fun x => Sig a (x 1) (Real.cos (x 2))
  | 3, 0 => fun x => ((-2))*M*a*(x 1)*Real.sin (x 2)^(2:ℕ)/Sig a (x 1) (Real.cos (x 2))
  | 3, 3 => fun x => Real.sin (x 2)^(2:ℕ)*(a^(2:ℕ) + (x 1)^(2:ℕ) + 2*M*(x 1)*a^(2:ℕ)*Real.sin (x 2)^(2:ℕ)/Sig a (x 1) (Real.cos (x 2)))
  | _, _ => fun _ => 0

/-- Closed-form candidate inverse g^{ij}; certified by `ginv_mul_g`. -/
noncomputable def giKerr (M a : ℝ) : Fin 4 → Fin 4 → Pt → ℝ
  | 0, 0 => fun x => (Del M a (x 1)*a^(2:ℕ)*Real.sin (x 2)^(2:ℕ) - (a^(2:ℕ) + (x 1)^(2:ℕ))^(2:ℕ))/((Sig a (x 1) (Real.cos (x 2))*Del M a (x 1)))
  | 0, 3 => fun x => ((-2))*M*a*(x 1)/((Sig a (x 1) (Real.cos (x 2))*Del M a (x 1)))
  | 1, 1 => fun x => Del M a (x 1)/Sig a (x 1) (Real.cos (x 2))
  | 2, 2 => fun x => 1/Sig a (x 1) (Real.cos (x 2))
  | 3, 0 => fun x => ((-2))*M*a*(x 1)/((Sig a (x 1) (Real.cos (x 2))*Del M a (x 1)))
  | 3, 3 => fun x => (Del M a (x 1) - a^(2:ℕ)*Real.sin (x 2)^(2:ℕ))/((Sig a (x 1) (Real.cos (x 2))*Del M a (x 1)*Real.sin (x 2)^(2:ℕ)))
  | _, _ => fun _ => 0

/-- Regular coordinate domain: every denominator of the metric, its inverse and the
Christoffel symbols is nonzero. -/
def RegKerr (M a : ℝ) (x : Pt) : Prop := Sig a (x 1) (Real.cos (x 2)) ≠ 0 ∧ Del M a (x 1) ≠ 0 ∧ Real.sin (x 2) ≠ 0

theorem gKerr_00 (M a : ℝ) (x : Pt) : gKerr M a 0 0 x = (-1) + 2*M*(x 1)/Sig a (x 1) (Real.cos (x 2)) := rfl
theorem gKerr_01 (M a : ℝ) (x : Pt) : gKerr M a 0 1 x = 0 := rfl
theorem gKerr_02 (M a : ℝ) (x : Pt) : gKerr M a 0 2 x = 0 := rfl
theorem gKerr_03 (M a : ℝ) (x : Pt) : gKerr M a 0 3 x = ((-2))*M*a*(x 1)*Real.sin (x 2)^(2:ℕ)/Sig a (x 1) (Real.cos (x 2)) := rfl
theorem gKerr_10 (M a : ℝ) (x : Pt) : gKerr M a 1 0 x = 0 := rfl
theorem gKerr_11 (M a : ℝ) (x : Pt) : gKerr M a 1 1 x = Sig a (x 1) (Real.cos (x 2))/Del M a (x 1) := rfl
theorem gKerr_12 (M a : ℝ) (x : Pt) : gKerr M a 1 2 x = 0 := rfl
theorem gKerr_13 (M a : ℝ) (x : Pt) : gKerr M a 1 3 x = 0 := rfl
theorem gKerr_20 (M a : ℝ) (x : Pt) : gKerr M a 2 0 x = 0 := rfl
theorem gKerr_21 (M a : ℝ) (x : Pt) : gKerr M a 2 1 x = 0 := rfl
theorem gKerr_22 (M a : ℝ) (x : Pt) : gKerr M a 2 2 x = Sig a (x 1) (Real.cos (x 2)) := rfl
theorem gKerr_23 (M a : ℝ) (x : Pt) : gKerr M a 2 3 x = 0 := rfl
theorem gKerr_30 (M a : ℝ) (x : Pt) : gKerr M a 3 0 x = ((-2))*M*a*(x 1)*Real.sin (x 2)^(2:ℕ)/Sig a (x 1) (Real.cos (x 2)) := rfl
theorem gKerr_31 (M a : ℝ) (x : Pt) : gKerr M a 3 1 x = 0 := rfl
theorem gKerr_32 (M a : ℝ) (x : Pt) : gKerr M a 3 2 x = 0 := rfl
theorem gKerr_33 (M a : ℝ) (x : Pt) : gKerr M a 3 3 x = Real.sin (x 2)^(2:ℕ)*(a^(2:ℕ) + (x 1)^(2:ℕ) + 2*M*(x 1)*a^(2:ℕ)*Real.sin (x 2)^(2:ℕ)/Sig a (x 1) (Real.cos (x 2))) := rfl
theorem giKerr_00 (M a : ℝ) (x : Pt) : giKerr M a 0 0 x = (Del M a (x 1)*a^(2:ℕ)*Real.sin (x 2)^(2:ℕ) - (a^(2:ℕ) + (x 1)^(2:ℕ))^(2:ℕ))/((Sig a (x 1) (Real.cos (x 2))*Del M a (x 1))) := rfl
theorem giKerr_01 (M a : ℝ) (x : Pt) : giKerr M a 0 1 x = 0 := rfl
theorem giKerr_02 (M a : ℝ) (x : Pt) : giKerr M a 0 2 x = 0 := rfl
theorem giKerr_03 (M a : ℝ) (x : Pt) : giKerr M a 0 3 x = ((-2))*M*a*(x 1)/((Sig a (x 1) (Real.cos (x 2))*Del M a (x 1))) := rfl
theorem giKerr_10 (M a : ℝ) (x : Pt) : giKerr M a 1 0 x = 0 := rfl
theorem giKerr_11 (M a : ℝ) (x : Pt) : giKerr M a 1 1 x = Del M a (x 1)/Sig a (x 1) (Real.cos (x 2)) := rfl
theorem giKerr_12 (M a : ℝ) (x : Pt) : giKerr M a 1 2 x = 0 := rfl
theorem giKerr_13 (M a : ℝ) (x : Pt) : giKerr M a 1 3 x = 0 := rfl
theorem giKerr_20 (M a : ℝ) (x : Pt) : giKerr M a 2 0 x = 0 := rfl
theorem giKerr_21 (M a : ℝ) (x : Pt) : giKerr M a 2 1 x = 0 := rfl
theorem giKerr_22 (M a : ℝ) (x : Pt) : giKerr M a 2 2 x = 1/Sig a (x 1) (Real.cos (x 2)) := rfl
theorem giKerr_23 (M a : ℝ) (x : Pt) : giKerr M a 2 3 x = 0 := rfl
theorem giKerr_30 (M a : ℝ) (x : Pt) : giKerr M a 3 0 x = ((-2))*M*a*(x 1)/((Sig a (x 1) (Real.cos (x 2))*Del M a (x 1))) := rfl
theorem giKerr_31 (M a : ℝ) (x : Pt) : giKerr M a 3 1 x = 0 := rfl
theorem giKerr_32 (M a : ℝ) (x : Pt) : giKerr M a 3 2 x = 0 := rfl
theorem giKerr_33 (M a : ℝ) (x : Pt) : giKerr M a 3 3 x = (Del M a (x 1) - a^(2:ℕ)*Real.sin (x 2)^(2:ℕ))/((Sig a (x 1) (Real.cos (x 2))*Del M a (x 1)*Real.sin (x 2)^(2:ℕ))) := rfl

/-! Source lock: each component equals the token-level transcription of the metric.json string. -/
theorem gKerr_00_src (M a : ℝ) (x : Pt) : gKerr M a 0 0 x = -(1 - 2*M*(x 1)/((x 1)^(2:ℕ) + a^(2:ℕ)*Real.cos (x 2)^(2:ℕ))) := by
  simp only [gKerr_00, Sig, Del]
  first | done | ring1
theorem gKerr_11_src (M a : ℝ) (x : Pt) : gKerr M a 1 1 x = ((x 1)^(2:ℕ) + a^(2:ℕ)*Real.cos (x 2)^(2:ℕ))/((x 1)^(2:ℕ) - 2*M*(x 1) + a^(2:ℕ)) := by
  simp only [gKerr_11, Sig, Del]
  first | done | ring1
theorem gKerr_22_src (M a : ℝ) (x : Pt) : gKerr M a 2 2 x = (x 1)^(2:ℕ) + a^(2:ℕ)*Real.cos (x 2)^(2:ℕ) := by
  simp only [gKerr_22, Sig, Del]
  first | done | ring1
theorem gKerr_33_src (M a : ℝ) (x : Pt) : gKerr M a 3 3 x = ((x 1)^(2:ℕ) + a^(2:ℕ) + 2*M*(x 1)*a^(2:ℕ)*Real.sin (x 2)^(2:ℕ)/((x 1)^(2:ℕ) + a^(2:ℕ)*Real.cos (x 2)^(2:ℕ)))*Real.sin (x 2)^(2:ℕ) := by
  simp only [gKerr_33, Sig, Del]
  first | done | ring1
theorem gKerr_03_src (M a : ℝ) (x : Pt) : gKerr M a 0 3 x = -2*M*a*(x 1)*Real.sin (x 2)^(2:ℕ)/((x 1)^(2:ℕ) + a^(2:ℕ)*Real.cos (x 2)^(2:ℕ)) := by
  simp only [gKerr_03, Sig, Del]
  first | done | ring1

end KerrBL
Source
R. P. Kerr, Gravitational field of a spinning mass as an example of algebraically special metrics, Phys. Rev. Lett. 11 (1963) 237-238, https://doi.org/10.1103/PhysRevLett.11.237; R. H. Boyer and R. W. Lindquist, Maximal analytic extension of the Kerr metric, J. Math. Phys. 8 (1967) 265-281, https://doi.org/10.1063/1.1705193, Sec. 2 (Boyer-Lindquist form of the Kerr line element); metric components transcribed token-for-token from the project certificate EinsteinSolver/certificate/kerr/metric.json (sha256 d729883d95fd7d3cf84d9c971c6725f847155562cc4e88660535b8d0bd0be336); design record LEAN/kerr-formalization/mission/DESIGN.md, definition bundle D2 (generated from metric.json, human-auditable)
Human review
  • Endorsed by Shuze Chen · Sep 14, 2026

  • Endorsed by He Wang · Sep 14, 2026

    Confirmed by the mission captain (proposal self-audit).

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me