Imports
/-
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Tooby-Smith
-/
module
public import Physlib.Relativity.LorentzGroup.Rotations
public import Physlib.Relativity.LorentzGroup.Boosts.GeneralizedThe construction of an element of the Lorentz group from a boost and a rotation
The main result of this module is the homeomorphism toBoostRotation
from the restricted Lorentz group to the product of Lorentz velocities and rotations.
The inverse of this homeomorphism writes elements of the restricted Lorentz group as a product of a generalized boost and a rotation.
@[expose] public section
The Lorentz velocity obtained from toVector Λ where Λ is an element
of the restricted Lorentz group.
d:ℕΛ:↥(restricted d)h:1 ≤ ↑↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 0 < ↑↑Λ (Sum.inl 0) (Sum.inl 0)
linarith All goals completed! 🐙⟩@[fun_prop]
lemma toVelocity_continuous {d} :
Continuous (toVelocity : LorentzGroup.restricted d → Lorentz.Velocity d) := by d:ℕ⊢ Continuous toVelocity
apply Continuous.subtype_mk d:ℕ⊢ Continuous fun x => toVector ↑x
fun_prop All goals completed! 🐙A map from the restricted Lorentz group to rotations.
def toRotation {d} (Λ : LorentzGroup.restricted d) : Rotations d :=
⟨(generalizedBoost 0 (toVelocity Λ))⁻¹ * Λ, by d:ℕΛ:↥(restricted d)⊢ (generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ ∈ Rotations d
constructor left d:ℕΛ:↥(restricted d)⊢ ↑((generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ) (Sum.inl 0) (Sum.inl 0) = 1right d:ℕΛ:↥(restricted d)⊢ IsProper ((generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ)
· left d:ℕΛ:↥(restricted d)⊢ ↑((generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ) (Sum.inl 0) (Sum.inl 0) = 1 rw [generalizedBoost_inv left d:ℕΛ:↥(restricted d)⊢ ↑(generalizedBoost (toVelocity Λ) 0 * ↑Λ) (Sum.inl 0) (Sum.inl 0) = 1 left d:ℕΛ:↥(restricted d)⊢ ↑(generalizedBoost (toVelocity Λ) 0 * ↑Λ) (Sum.inl 0) (Sum.inl 0) = 1] left d:ℕΛ:↥(restricted d)⊢ ↑(generalizedBoost (toVelocity Λ) 0 * ↑Λ) (Sum.inl 0) (Sum.inl 0) = 1
rw [← toVector_timeComponent left d:ℕΛ:↥(restricted d)⊢ (toVector (generalizedBoost (toVelocity Λ) 0 * ↑Λ)).timeComponent = 1 left d:ℕΛ:↥(restricted d)⊢ (toVector (generalizedBoost (toVelocity Λ) 0 * ↑Λ)).timeComponent = 1]left d:ℕΛ:↥(restricted d)⊢ (toVector (generalizedBoost (toVelocity Λ) 0 * ↑Λ)).timeComponent = 1
rw [toVector_mul left d:ℕΛ:↥(restricted d)⊢ (generalizedBoost (toVelocity Λ) 0 • toVector ↑Λ).timeComponent = 1 left d:ℕΛ:↥(restricted d)⊢ (generalizedBoost (toVelocity Λ) 0 • toVector ↑Λ).timeComponent = 1]left d:ℕΛ:↥(restricted d)⊢ (generalizedBoost (toVelocity Λ) 0 • toVector ↑Λ).timeComponent = 1
erw [generalizedBoost_apply_fst left d:ℕΛ:↥(restricted d)⊢ (↑0).timeComponent = 1] left d:ℕΛ:↥(restricted d)⊢ (↑0).timeComponent = 1
simp All goals completed! 🐙
· right d:ℕΛ:↥(restricted d)⊢ IsProper ((generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ) refine isProper_mul ?_ Λ.2.1 right d:ℕΛ:↥(restricted d)⊢ IsProper (generalizedBoost 0 (toVelocity Λ))⁻¹
rw [generalizedBoost_inv right d:ℕΛ:↥(restricted d)⊢ IsProper (generalizedBoost (toVelocity Λ) 0) right d:ℕΛ:↥(restricted d)⊢ IsProper (generalizedBoost (toVelocity Λ) 0)]right d:ℕΛ:↥(restricted d)⊢ IsProper (generalizedBoost (toVelocity Λ) 0)
exact generalizedBoost_isProper _ _ All goals completed! 🐙⟩@[fun_prop]
lemma toRotation_continuous {d} :
Continuous (toRotation : LorentzGroup.restricted d → Rotations d) := by d:ℕ⊢ Continuous toRotation
apply Continuous.subtype_mk d:ℕ⊢ Continuous fun x => (generalizedBoost 0 (toVelocity x))⁻¹ * ↑x
change Continuous (fun Λ => (generalizedBoost 0 (toVelocity Λ))⁻¹ * Λ) d:ℕ⊢ Continuous fun x => (generalizedBoost 0 (toVelocity x))⁻¹ * ↑x
fun_prop All goals completed! 🐙
The homeomorphism from the restricted Lorentz group to the product of
Lorentz.Velocity d and Matrix.specialOrthogonalGroup (Fin d) ℝ. The
inverse of this map writes an element of the restricted Lorentz group
as a product of a boost and a rotation.
def toBoostRotation {d} : LorentzGroup.restricted d ≃ₜ Lorentz.Velocity d ×
Matrix.specialOrthogonalGroup (Fin d) ℝ where
toFun Λ := (toVelocity Λ, ofSpecialOrthogonal.symm (toRotation Λ))
invFun p := ⟨generalizedBoost 0 p.1 * (ofSpecialOrthogonal p.2).1, by d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)⊢ generalizedBoost 0 p.1 * ↑(ofSpecialOrthogonal p.2) ∈ restricted d
refine (Subgroup.mul_mem_cancel_right (restricted d) ?_).mpr ?_ refine_1 d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)⊢ ↑(ofSpecialOrthogonal p.2) ∈ restricted drefine_2 d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)⊢ generalizedBoost 0 p.1 ∈ restricted d
· refine_1 d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)⊢ ↑(ofSpecialOrthogonal p.2) ∈ restricted d exact rotations_subset_restricted d (ofSpecialOrthogonal p.2).2 All goals completed! 🐙
· refine_2 d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)⊢ generalizedBoost 0 p.1 ∈ restricted d refine ⟨generalizedBoost_isProper 0 p.1, generalizedBoost_isOrthochronous 0 p.1⟩ All goals completed! 🐙⟩
left_inv Λ := by d:ℕΛ:↥(restricted d)⊢ (fun p => ⟨generalizedBoost 0 p.1 * ↑(ofSpecialOrthogonal p.2), ⋯⟩)
((fun Λ => (toVelocity Λ, ofSpecialOrthogonal.symm (toRotation Λ))) Λ) =
Λ
apply Subtype.ext d:ℕΛ:↥(restricted d)⊢ ↑((fun p => ⟨generalizedBoost 0 p.1 * ↑(ofSpecialOrthogonal p.2), ⋯⟩)
((fun Λ => (toVelocity Λ, ofSpecialOrthogonal.symm (toRotation Λ))) Λ)) =
↑Λ
simp only [toRotation, MulEquiv.apply_symm_apply] d:ℕΛ:↥(restricted d)⊢ generalizedBoost 0 (toVelocity Λ) * ((generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ) = ↑Λ
rw [mul_inv_cancel_left d:ℕΛ:↥(restricted d)⊢ ↑Λ = ↑Λ All goals completed! 🐙] All goals completed! 🐙
right_inv p := by d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)⊢ (fun Λ => (toVelocity Λ, ofSpecialOrthogonal.symm (toRotation Λ)))
((fun p => ⟨generalizedBoost 0 p.1 * ↑(ofSpecialOrthogonal p.2), ⋯⟩) p) =
p
simp only d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)⊢ (toVelocity ⟨generalizedBoost 0 p.1 * ↑(ofSpecialOrthogonal p.2), ⋯⟩,
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 p.1 * ↑(ofSpecialOrthogonal p.2), ⋯⟩)) =
p
match p with
| ⟨⟨v, hv⟩, R⟩ => d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)⊢ (toVelocity ⟨generalizedBoost 0 (⟨v, hv⟩, R).1 * ↑(ofSpecialOrthogonal (⟨v, hv⟩, R).2), ⋯⟩,
ofSpecialOrthogonal.symm
(toRotation ⟨generalizedBoost 0 (⟨v, hv⟩, R).1 * ↑(ofSpecialOrthogonal (⟨v, hv⟩, R).2), ⋯⟩)) =
(⟨v, hv⟩, R)
simp [toVelocity] d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)⊢ toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v ∧
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R
have h0 : toVector (generalizedBoost 0 ⟨v, hv⟩ * (ofSpecialOrthogonal R).1) = v := by d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)⊢ (fun Λ => (toVelocity Λ, ofSpecialOrthogonal.symm (toRotation Λ)))
((fun p => ⟨generalizedBoost 0 p.1 * ↑(ofSpecialOrthogonal p.2), ⋯⟩) p) =
p d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v ∧
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R
rw [toVector_mul d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)⊢ generalizedBoost 0 ⟨v, hv⟩ • toVector ↑(ofSpecialOrthogonal R) = v d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)⊢ generalizedBoost 0 ⟨v, hv⟩ • toVector ↑(ofSpecialOrthogonal R) = v d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v ∧
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R] d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)⊢ generalizedBoost 0 ⟨v, hv⟩ • toVector ↑(ofSpecialOrthogonal R) = v d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v ∧
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R
simp only [toVector_rotation, Fin.isValue] d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)⊢ generalizedBoost 0 ⟨v, hv⟩ • Lorentz.Vector.basis (Sum.inl 0) = v d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v ∧
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R
change generalizedBoost 0 ⟨v, hv⟩ • (0 : Lorentz.Velocity d).1 = _ d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)⊢ generalizedBoost 0 ⟨v, hv⟩ • ↑0 = v d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v ∧
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R
rw [generalizedBoost_apply_fst d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)⊢ ↑⟨v, hv⟩ = v d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v ∧
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R] d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v ∧
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v ∧
ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R
apply And.intro h0 d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ofSpecialOrthogonal.symm (toRotation ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = R
rw [toRotation d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ofSpecialOrthogonal.symm
⟨(generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
↑⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩,
⋯⟩ =
R d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ofSpecialOrthogonal.symm
⟨(generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
↑⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩,
⋯⟩ =
R] d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ofSpecialOrthogonal.symm
⟨(generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
↑⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩,
⋯⟩ =
R
apply ofSpecialOrthogonal.injective d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ofSpecialOrthogonal
(ofSpecialOrthogonal.symm
⟨(generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
↑⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩,
⋯⟩) =
ofSpecialOrthogonal R
rw [MulEquiv.apply_symm_apply d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ⟨(generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
↑⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩,
⋯⟩ =
ofSpecialOrthogonal R d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ⟨(generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
↑⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩,
⋯⟩ =
ofSpecialOrthogonal R] d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ⟨(generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
↑⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩,
⋯⟩ =
ofSpecialOrthogonal R
apply Subtype.ext d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ↑⟨(generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
↑⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩,
⋯⟩ =
↑(ofSpecialOrthogonal R)
simp only d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ (generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
(generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) =
↑(ofSpecialOrthogonal R)
trans (generalizedBoost 0 ⟨v, hv⟩)⁻¹
* ((generalizedBoost 0 ⟨v, hv⟩) * (ofSpecialOrthogonal R).1) d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ (generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
(generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) =
(generalizedBoost 0 ⟨v, hv⟩)⁻¹ * (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R))d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ (generalizedBoost 0 ⟨v, hv⟩)⁻¹ * (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = ↑(ofSpecialOrthogonal R)
· d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ (generalizedBoost 0 (toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩))⁻¹ *
(generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) =
(generalizedBoost 0 ⟨v, hv⟩)⁻¹ * (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) congr e_a.e_v d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩ = ⟨v, hv⟩
apply Subtype.ext e_a.e_v d:ℕp:↑(Lorentz.Velocity d) × ↥(specialOrthogonalGroup (Fin d) ℝ)v:Lorentz.Vector dhv:v ∈ Lorentz.Velocity dR:↥(specialOrthogonalGroup (Fin d) ℝ)h0:toVector (generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R)) = v⊢ ↑(toVelocity ⟨generalizedBoost 0 ⟨v, hv⟩ * ↑(ofSpecialOrthogonal R), ⋯⟩) = ↑⟨v, hv⟩
simp [toVelocity, h0] All goals completed! 🐙
group All goals completed! 🐙
continuous_toFun := by d:ℕ⊢ Continuous fun Λ => (toVelocity Λ, ofSpecialOrthogonal.symm (toRotation Λ)) fun_prop All goals completed! 🐙
continuous_invFun := by d:ℕ⊢ Continuous fun p => ⟨generalizedBoost 0 p.1 * ↑(ofSpecialOrthogonal p.2), ⋯⟩ fun_prop All goals completed! 🐙Every element of the restricted Lorentz group can be written as a product of a generalized boost and a rotation.
theorem exists_boost_mul_rotation {d} (Λ : LorentzGroup.restricted d) :
∃ (v : Lorentz.Velocity d) (R : Rotations d),
(Λ : LorentzGroup d) = generalizedBoost 0 v * (R : LorentzGroup d) := by d:ℕΛ:↥(restricted d)⊢ ∃ v R, ↑Λ = generalizedBoost 0 v * ↑R
have h : toRotation Λ = (generalizedBoost 0 (toVelocity Λ))⁻¹ * Λ := rfl d:ℕΛ:↥(restricted d)h:↑(toRotation Λ) = (generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ⊢ ∃ v R, ↑Λ = generalizedBoost 0 v * ↑R
exact ⟨toVelocity Λ, toRotation Λ, by d:ℕΛ:↥(restricted d)h:↑(toRotation Λ) = (generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ⊢ ↑Λ = generalizedBoost 0 (toVelocity Λ) * ↑(toRotation Λ) rw [h, d:ℕΛ:↥(restricted d)h:↑(toRotation Λ) = (generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ⊢ ↑Λ = generalizedBoost 0 (toVelocity Λ) * ((generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ) All goals completed! 🐙 mul_inv_cancel_left d:ℕΛ:↥(restricted d)h:↑(toRotation Λ) = (generalizedBoost 0 (toVelocity Λ))⁻¹ * ↑Λ⊢ ↑Λ = ↑Λ All goals completed! 🐙] All goals completed! 🐙⟩