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.Proper
public import Physlib.Relativity.LorentzGroup.ToVector
public import Physlib.Relativity.Tensors.RealTensor.Velocity.BasicThe Orthochronous Lorentz Group
We define the give a series of lemmas related to the orthochronous property of lorentz matrices.
@[expose] public sectionTODO "Prove topological properties of the Orthochronous Lorentz Group."
A Lorentz transformation is orthochronous if its 0 0 element is non-negative.
def IsOrthochronous : Prop := 0 ≤ Λ.1 (Sum.inl 0) (Sum.inl 0)
A Lorentz transformation is orthochronous if and only if its first column is
future pointing.
lemma isOrthochronous_iff_toVector_timeComponet_nonneg :
IsOrthochronous Λ ↔ 0 ≤ (toVector Λ).timeComponent := d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous Λ ↔ 0 ≤ (toVector Λ).timeComponent
All goals completed! 🐙A Lorentz transformation is orthochronous if and only if its transpose is orthochronous.
lemma isOrthochronous_iff_transpose :
IsOrthochronous Λ ↔ IsOrthochronous (transpose Λ) := d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous Λ ↔ IsOrthochronous (transpose Λ) All goals completed! 🐙@[simp]
lemma isOrthochronous_inv_iff {Λ : LorentzGroup d} :
IsOrthochronous Λ⁻¹ ↔ IsOrthochronous Λ := d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous Λ⁻¹ ↔ IsOrthochronous Λ
All goals completed! 🐙
A Lorentz transformation is orthochronous if and only if its 0 0 element is greater
or equal to one.
d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ IsOrthochronous Λ ↔ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)
simp [IsOrthochronous] d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) ↔ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)
constructor mp d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) → 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) → 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) <;> mp d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) → 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) → 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) intro h mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) <;> mp d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h:0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) rcases h1 with h1 | h1 mpr.inl d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)mpr.inr d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h1:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) <;> mp.inl d:ℕΛ:↑(𝓛 d)h:0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)mp.inr d:ℕΛ:↑(𝓛 d)h:0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h1:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)mpr.inl d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)mpr.inr d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h1:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 0 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) linarith All goals completed! 🐙
The Lorentz.Velocity from Lorentz.toVector of a orthochronous lorentz
transformation.
def orthochronoustoVelocity {Λ : LorentzGroup d} (h : IsOrthochronous Λ) :
Lorentz.Velocity d := ⟨toVector Λ, by d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)h:IsOrthochronous Λ⊢ toVector Λ ∈ Lorentz.Velocity d
rw [isOrthochronous_iff_ge_one d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ toVector Λ ∈ Lorentz.Velocity d d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ toVector Λ ∈ Lorentz.Velocity d] at h d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ toVector Λ ∈ Lorentz.Velocity d
simp [Lorentz.Velocity.mem_iff] d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ 0 < ↑Λ (Sum.inl 0) (Sum.inl 0)
linarith All goals completed! 🐙⟩
A Lorentz transformation is not orthochronous if and only if its 0 0 element is less than
or equal to minus one.
lemma not_isOrthochronous_iff_le_neg_one :
¬ IsOrthochronous Λ ↔ Λ.1 (Sum.inl 0) (Sum.inl 0) ≤ -1 := by d:ℕΛ:↑(𝓛 d)⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1
have h1 := one_le_abs_timeComponent Λ d:ℕΛ:↑(𝓛 d)h1:1 ≤ |↑Λ (Sum.inl 0) (Sum.inl 0)|⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1
rw [le_abs' d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1] at h1 d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1
simp [IsOrthochronous] d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1
constructor mp d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 → ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 → ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 <;> mp d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 → ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 → ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 intro h mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 <;> mp d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h:↑Λ (Sum.inl 0) (Sum.inl 0) < 0⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 rcases h1 with h1 | h1 mpr.inl d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0mpr.inr d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1h1:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 <;> mp.inl d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) < 0h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1mp.inr d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) < 0h1:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1mpr.inl d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0mpr.inr d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1h1:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 linarith All goals completed! 🐙
lemma isOrthochronous_iff_not_neg :
IsOrthochronous Λ ↔ ¬ IsOrthochronous (- Λ) := by d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous Λ ↔ ¬IsOrthochronous (-Λ)
rw [not_isOrthochronous_iff_le_neg_one, d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous Λ ↔ ↑(-Λ) (Sum.inl 0) (Sum.inl 0) ≤ -1 d:ℕΛ:↑(𝓛 d)⊢ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) ↔ ↑(-Λ) (Sum.inl 0) (Sum.inl 0) ≤ -1 isOrthochronous_iff_ge_one d:ℕΛ:↑(𝓛 d)⊢ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) ↔ ↑(-Λ) (Sum.inl 0) (Sum.inl 0) ≤ -1 d:ℕΛ:↑(𝓛 d)⊢ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) ↔ ↑(-Λ) (Sum.inl 0) (Sum.inl 0) ≤ -1] d:ℕΛ:↑(𝓛 d)⊢ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) ↔ ↑(-Λ) (Sum.inl 0) (Sum.inl 0) ≤ -1
simp All goals completed! 🐙lemma neg_isOrthochronous_iff_not {Λ : LorentzGroup d} :
IsOrthochronous (- Λ) ↔ ¬ IsOrthochronous Λ := by d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous (-Λ) ↔ ¬IsOrthochronous Λ
conv_rhs => rw [isOrthochronous_iff_not_neg] d:ℕΛ:↑(𝓛 d)| ¬¬IsOrthochronous (-Λ)
simp All goals completed! 🐙
A Lorentz transformation is not orthochronous if and only if its 0 0 element is
non-positive.
lemma not_isOrthochronous_iff_le_zero : ¬ IsOrthochronous Λ ↔ Λ.1 (Sum.inl 0) (Sum.inl 0) ≤ 0 := by d:ℕΛ:↑(𝓛 d)⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0
have h1 := one_le_abs_timeComponent Λ d:ℕΛ:↑(𝓛 d)h1:1 ≤ |↑Λ (Sum.inl 0) (Sum.inl 0)|⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0
rw [le_abs' d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0 d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0] at h1 d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ¬IsOrthochronous Λ ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0
simp [IsOrthochronous] d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 ↔ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0
constructor mp d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 → ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0 → ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 <;> mp d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 → ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0 → ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 intro h mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 <;> mp d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h:↑Λ (Sum.inl 0) (Sum.inl 0) < 0⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0mpr d:ℕΛ:↑(𝓛 d)h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 ∨ 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 rcases h1 with h1 | h1 mpr.inl d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0mpr.inr d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0h1:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 <;> mp.inl d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) < 0h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0mp.inr d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) < 0h1:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0mpr.inl d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0h1:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0mpr.inr d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0h1:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) < 0 linarith All goals completed! 🐙
lemma not_isOrthochronous_iff_toVector_timeComponet_nonpos :
¬ IsOrthochronous Λ ↔ (toVector Λ).timeComponent ≤ 0:= by d:ℕΛ:↑(𝓛 d)⊢ ¬IsOrthochronous Λ ↔ (toVector Λ).timeComponent ≤ 0
rw [not_isOrthochronous_iff_le_zero d:ℕΛ:↑(𝓛 d)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0 ↔ (toVector Λ).timeComponent ≤ 0 d:ℕΛ:↑(𝓛 d)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0 ↔ (toVector Λ).timeComponent ≤ 0] d:ℕΛ:↑(𝓛 d)⊢ ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ 0 ↔ (toVector Λ).timeComponent ≤ 0
simp All goals completed! 🐙The identity Lorentz transformation is orthochronous.
lemma id_isOrthochronous : @IsOrthochronous d 1 := by d:ℕ⊢ IsOrthochronous 1
simp [IsOrthochronous] All goals completed! 🐙
The continuous map taking a Lorentz transformation to its 0 0 element.
def timeCompCont : C(LorentzGroup d, ℝ) := ⟨fun Λ => Λ.1 (Sum.inl 0) (Sum.inl 0),
Continuous.matrix_elem (continuous_iff_le_induced.mpr fun _ a => a) (Sum.inl 0) (Sum.inl 0)⟩
An auxiliary function used in the definition of orthchroMapReal.
This function takes all elements of ℝ less than -1 to -1,
all elements of R greater than 1 to 1 and preserves all other elements.
def stepFunction : ℝ → ℝ := fun t =>
if t ≤ -1 then -1 else
if 1 ≤ t then 1 else t
The stepFunction is continuous.
lemma stepFunction_continuous : Continuous stepFunction := by ⊢ Continuous stepFunction
apply Continuous.if ?_ continuous_const (Continuous.if ?_ continuous_const continuous_id) ⊢ ∀ a ∈ frontier {x | x ≤ -1}, -1 = if 1 ≤ a then 1 else id a⊢ ∀ a ∈ frontier {x | 1 ≤ x}, 1 = id a
<;> ⊢ ∀ a ∈ frontier {x | x ≤ -1}, -1 = if 1 ≤ a then 1 else id a⊢ ∀ a ∈ frontier {x | 1 ≤ x}, 1 = id a intro a ha a:ℝha:a ∈ frontier {x | 1 ≤ x}⊢ 1 = id a
· a:ℝha:a ∈ frontier {x | x ≤ -1}⊢ -1 = if 1 ≤ a then 1 else id a rw [@Set.Iic_def, a:ℝha:a ∈ frontier (Set.Iic (-1))⊢ -1 = if 1 ≤ a then 1 else id a a:ℝha:a = -1⊢ -1 = if 1 ≤ a then 1 else id a @frontier_Iic, a:ℝha:a ∈ {-1}⊢ -1 = if 1 ≤ a then 1 else id a a:ℝha:a = -1⊢ -1 = if 1 ≤ a then 1 else id a @Set.mem_singleton_iff a:ℝha:a = -1⊢ -1 = if 1 ≤ a then 1 else id a a:ℝha:a = -1⊢ -1 = if 1 ≤ a then 1 else id a] at ha a:ℝha:a = -1⊢ -1 = if 1 ≤ a then 1 else id a
simp [ha] All goals completed! 🐙
· a:ℝha:a ∈ frontier {x | 1 ≤ x}⊢ 1 = id a rw [Set.Ici_def, a:ℝha:a ∈ frontier (Set.Ici 1)⊢ 1 = id a a:ℝha:a = 1⊢ 1 = id a @frontier_Ici, a:ℝha:a ∈ {1}⊢ 1 = id a a:ℝha:a = 1⊢ 1 = id a @Set.mem_singleton_iff a:ℝha:a = 1⊢ 1 = id a a:ℝha:a = 1⊢ 1 = id a] at ha a:ℝha:a = 1⊢ 1 = id a
simp [ha] All goals completed! 🐙
The continuous map from lorentzGroup to ℝ wh
taking Orthochronous elements to 1 and non-orthochronous to -1.
def orthchroMapReal : C(LorentzGroup d, ℝ) := ContinuousMap.comp
⟨stepFunction, stepFunction_continuous⟩ timeCompCont
A Lorentz transformation which is orthochronous maps under orthchroMapReal to 1.
lemma orthchroMapReal_on_IsOrthochronous {Λ : LorentzGroup d} (h : IsOrthochronous Λ) :
orthchroMapReal Λ = 1 := by d:ℕΛ:↑(𝓛 d)h:IsOrthochronous Λ⊢ orthchroMapReal Λ = 1
rw [isOrthochronous_iff_ge_one d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ orthchroMapReal Λ = 1 d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ orthchroMapReal Λ = 1] at h d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ orthchroMapReal Λ = 1
change stepFunction (Λ.1 _ _) = 1 d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ stepFunction (↑Λ (Sum.inl 0) (Sum.inl 0)) = 1
rw [stepFunction, d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ (if ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 then -1
else if 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) then 1 else ↑Λ (Sum.inl 0) (Sum.inl 0)) =
1 All goals completed! 🐙 if_pos h, d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ (if ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 then -1 else 1) = 1 All goals completed! 🐙 if_neg (by d:ℕΛ:↑(𝓛 d)h:1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0)⊢ ¬↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 All goals completed! 🐙 linarith All goals completed! 🐙 All goals completed! 🐙)] All goals completed! 🐙
A Lorentz transformation which is not-orthochronous maps under orthchroMapReal to - 1.
lemma orthchroMapReal_on_not_IsOrthochronous {Λ : LorentzGroup d} (h : ¬ IsOrthochronous Λ) :
orthchroMapReal Λ = - 1 := by d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ orthchroMapReal Λ = -1
rw [not_isOrthochronous_iff_le_neg_one d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ orthchroMapReal Λ = -1 d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ orthchroMapReal Λ = -1] at h d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ orthchroMapReal Λ = -1
change stepFunction (Λ.1 _ _) = - 1 d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ stepFunction (↑Λ (Sum.inl 0) (Sum.inl 0)) = -1
rw [stepFunction, d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ (if ↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1 then -1
else if 1 ≤ ↑Λ (Sum.inl 0) (Sum.inl 0) then 1 else ↑Λ (Sum.inl 0) (Sum.inl 0)) =
-1 All goals completed! 🐙 if_pos h d:ℕΛ:↑(𝓛 d)h:↑Λ (Sum.inl 0) (Sum.inl 0) ≤ -1⊢ -1 = -1 All goals completed! 🐙] All goals completed! 🐙
Every Lorentz transformation maps under orthchroMapReal to either 1 or -1.
lemma orthchroMapReal_minus_one_or_one (Λ : LorentzGroup d) :
orthchroMapReal Λ = -1 ∨ orthchroMapReal Λ = 1 := by d:ℕΛ:↑(𝓛 d)⊢ orthchroMapReal Λ = -1 ∨ orthchroMapReal Λ = 1
by_cases h : IsOrthochronous Λ pos d:ℕΛ:↑(𝓛 d)h:IsOrthochronous Λ⊢ orthchroMapReal Λ = -1 ∨ orthchroMapReal Λ = 1neg d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ orthchroMapReal Λ = -1 ∨ orthchroMapReal Λ = 1
· pos d:ℕΛ:↑(𝓛 d)h:IsOrthochronous Λ⊢ orthchroMapReal Λ = -1 ∨ orthchroMapReal Λ = 1 exact Or.inr $ orthchroMapReal_on_IsOrthochronous h All goals completed! 🐙
· neg d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ orthchroMapReal Λ = -1 ∨ orthchroMapReal Λ = 1 exact Or.inl $ orthchroMapReal_on_not_IsOrthochronous h All goals completed! 🐙local notation "ℤ₂" => Multiplicative (ZMod 2)
A continuous map from lorentzGroup to ℤ₂ whose kernel are the Orthochronous elements.
def orthchroMap : C(LorentzGroup d, ℤ₂) :=
ContinuousMap.comp coeForℤ₂ {
toFun := fun Λ => ⟨orthchroMapReal Λ, orthchroMapReal_minus_one_or_one Λ⟩,
continuous_toFun := Continuous.subtype_mk (ContinuousMap.continuous orthchroMapReal) _}
A Lorentz transformation which is orthochronous maps under orthchroMap to 1
in ℤ₂ (the identity element).
lemma orthchroMap_IsOrthochronous {Λ : LorentzGroup d} (h : IsOrthochronous Λ) :
orthchroMap Λ = 1 := by d:ℕΛ:↑(𝓛 d)h:IsOrthochronous Λ⊢ orthchroMap Λ = 1
simp [orthchroMap, orthchroMapReal_on_IsOrthochronous h] All goals completed! 🐙
A Lorentz transformation which is not-orthochronous maps under orthchroMap to
the non-identity element of ℤ₂.
lemma orthchroMap_not_IsOrthochronous {Λ : LorentzGroup d} (h : ¬ IsOrthochronous Λ) :
orthchroMap Λ = Additive.toMul (1 : ZMod 2) := by d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ orthchroMap Λ = Additive.toMul 1
simp only [orthchroMap, ContinuousMap.comp_apply, ContinuousMap.coe_mk,
orthchroMapReal_on_not_IsOrthochronous h, coeForℤ₂_apply, Subtype.mk.injEq, Nat.reduceAdd] d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ (if -1 = 1 then 1 else Additive.toMul 1) = Additive.toMul 1
rw [if_neg (by d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ ¬-1 = 1 d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ Additive.toMul 1 = Additive.toMul 1 norm_num All goals completed! 🐙 d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ Additive.toMul 1 = Additive.toMul 1)] d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ Additive.toMul 1 = Additive.toMul 1
rfl All goals completed! 🐙The product of two orthochronous Lorentz transformations is orthochronous.
lemma isOrthochronous_mul {Λ Λ' : LorentzGroup d} (h : IsOrthochronous Λ)
(h' : IsOrthochronous Λ') : IsOrthochronous (Λ * Λ') := by d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ')
rw [isOrthochronous_iff_toVector_timeComponet_nonneg, d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ 0 ≤ (toVector (Λ * Λ')).timeComponent d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ 0 ≤ (minkowskiProduct (toVector Λ⁻¹)) (toVector Λ') toVector_mul, d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ 0 ≤ (Λ • toVector Λ').timeComponent d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ 0 ≤ (minkowskiProduct (toVector Λ⁻¹)) (toVector Λ')
smul_timeComponent_eq_toVector_minkowskiProduct d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ 0 ≤ (minkowskiProduct (toVector Λ⁻¹)) (toVector Λ') d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ 0 ≤ (minkowskiProduct (toVector Λ⁻¹)) (toVector Λ')] d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ 0 ≤ (minkowskiProduct (toVector Λ⁻¹)) (toVector Λ')
change _ ≤ ⟪orthochronoustoVelocity (isOrthochronous_inv_iff.mpr h),
(orthochronoustoVelocity h').1⟫ₘ d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ 0 ≤ (minkowskiProduct ↑(orthochronoustoVelocity ⋯)) ↑(orthochronoustoVelocity h')
exact Lorentz.Velocity.zero_le_minkowskiProduct _ _ All goals completed! 🐙
lemma isOrthochronous_mul_iff {Λ Λ' : LorentzGroup d} :
IsOrthochronous (Λ * Λ') ↔ (IsOrthochronous Λ = IsOrthochronous Λ') := by d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ'
by_cases h : IsOrthochronous Λ pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λ⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ'neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λ⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ' <;> pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λ⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ'neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λ⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ' by_cases h' : IsOrthochronous Λ' pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ'neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ'
<;> pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ'neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ'pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ'neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ') ↔ IsOrthochronous Λ = IsOrthochronous Λ' simp [h, h'] neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ')
· pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ') exact isOrthochronous_mul h h' All goals completed! 🐙
· neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ ¬IsOrthochronous (Λ * Λ') have hmn : (Λ * -Λ' : LorentzGroup d) = -(Λ * Λ') := Subtype.ext (by d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ ↑(Λ * -Λ') = ↑(-(Λ * Λ')) neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'hmn:Λ * -Λ' = -(Λ * Λ')⊢ ¬IsOrthochronous (Λ * Λ') simp All goals completed! 🐙 neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'hmn:Λ * -Λ' = -(Λ * Λ')⊢ ¬IsOrthochronous (Λ * Λ'))neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'hmn:Λ * -Λ' = -(Λ * Λ')⊢ ¬IsOrthochronous (Λ * Λ')
rw [← neg_isOrthochronous_iff_not, neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'hmn:Λ * -Λ' = -(Λ * Λ')⊢ IsOrthochronous (-(Λ * Λ')) neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'hmn:Λ * -Λ' = -(Λ * Λ')⊢ IsOrthochronous (Λ * -Λ') ← hmn neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'hmn:Λ * -Λ' = -(Λ * Λ')⊢ IsOrthochronous (Λ * -Λ')neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'hmn:Λ * -Λ' = -(Λ * Λ')⊢ IsOrthochronous (Λ * -Λ')]neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'hmn:Λ * -Λ' = -(Λ * Λ')⊢ IsOrthochronous (Λ * -Λ')
exact isOrthochronous_mul h (neg_isOrthochronous_iff_not.mpr h') All goals completed! 🐙
· pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'⊢ ¬IsOrthochronous (Λ * Λ') have hnm : (-Λ * Λ' : LorentzGroup d) = -(Λ * Λ') := Subtype.ext (by d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'⊢ ↑(-Λ * Λ') = ↑(-(Λ * Λ')) pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'hnm:-Λ * Λ' = -(Λ * Λ')⊢ ¬IsOrthochronous (Λ * Λ') simp All goals completed! 🐙pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'hnm:-Λ * Λ' = -(Λ * Λ')⊢ ¬IsOrthochronous (Λ * Λ'))pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'hnm:-Λ * Λ' = -(Λ * Λ')⊢ ¬IsOrthochronous (Λ * Λ')
rw [← neg_isOrthochronous_iff_not, pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'hnm:-Λ * Λ' = -(Λ * Λ')⊢ IsOrthochronous (-(Λ * Λ')) pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'hnm:-Λ * Λ' = -(Λ * Λ')⊢ IsOrthochronous (-Λ * Λ') ← hnm pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'hnm:-Λ * Λ' = -(Λ * Λ')⊢ IsOrthochronous (-Λ * Λ')pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'hnm:-Λ * Λ' = -(Λ * Λ')⊢ IsOrthochronous (-Λ * Λ')]pos d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'hnm:-Λ * Λ' = -(Λ * Λ')⊢ IsOrthochronous (-Λ * Λ')
exact isOrthochronous_mul (neg_isOrthochronous_iff_not.mpr h) h' All goals completed! 🐙
· neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ IsOrthochronous (Λ * Λ') have hnn : (-Λ * -Λ' : LorentzGroup d) = Λ * Λ' := Subtype.ext (by d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ ↑(-Λ * -Λ') = ↑(Λ * Λ') neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (Λ * Λ') simp All goals completed! 🐙neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (Λ * Λ'))neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (Λ * Λ')
rw [← hnn neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (-Λ * -Λ') neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (-Λ * -Λ')]neg d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (-Λ * -Λ')
refine isOrthochronous_mul ?_ ?_ neg.refine_1 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (-Λ)neg.refine_2 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (-Λ') <;> neg.refine_1 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (-Λ)neg.refine_2 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ IsOrthochronous (-Λ') rwa [neg_isOrthochronous_iff_not neg.refine_1 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ ¬IsOrthochronous Λ] neg.refine_2 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'⊢ ¬IsOrthochronous Λ'
The homomorphism from LorentzGroup to ℤ₂.
def orthchroRep : LorentzGroup d →* ℤ₂ where
toFun := orthchroMap
map_one' := orthchroMap_IsOrthochronous (by d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous 1 simp [IsOrthochronous] All goals completed! 🐙)
map_mul' Λ Λ' := by d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'
by_cases h : IsOrthochronous Λ pos d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λ⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'neg d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λ⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ' <;> pos d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λ⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'neg d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λ⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ' by_cases h' : IsOrthochronous Λ' pos d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'neg d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ' <;> pos d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'neg d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'pos d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'neg d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'
simp_all [orthchroMap_IsOrthochronous, orthchroMap_not_IsOrthochronous,
isOrthochronous_mul_iff] neg d:ℕΛ✝:↑(𝓛 d)Λ:↑(𝓛 d)Λ':↑(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'⊢ 1 = Additive.toMul 1 * Additive.toMul 1
rfl All goals completed! 🐙
The orthochronous Lorentz transformations form the kernel of the homomorphism from
LorentzGroup to ℤ₂.
set_option backward.isDefEq.respectTransparency false in
lemma IsOrthochronous.iff_in_orthchroRep_ker : IsOrthochronous Λ ↔ Λ ∈ orthchroRep.ker := by d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous Λ ↔ Λ ∈ orthchroRep.ker
constructor mp d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous Λ → Λ ∈ orthchroRep.kermpr d:ℕΛ:↑(𝓛 d)⊢ Λ ∈ orthchroRep.ker → IsOrthochronous Λ
· mp d:ℕΛ:↑(𝓛 d)⊢ IsOrthochronous Λ → Λ ∈ orthchroRep.ker exact orthchroMap_IsOrthochronous All goals completed! 🐙
· mpr d:ℕΛ:↑(𝓛 d)⊢ Λ ∈ orthchroRep.ker → IsOrthochronous Λ intro h mpr d:ℕΛ:↑(𝓛 d)h:Λ ∈ orthchroRep.ker⊢ IsOrthochronous Λ
contrapose! h mpr d:ℕΛ:↑(𝓛 d)h:¬IsOrthochronous Λ⊢ Λ ∉ orthchroRep.ker
apply orthchroMap_not_IsOrthochronous at h mpr d:ℕΛ:↑(𝓛 d)h:orthchroMap Λ = Additive.toMul 1⊢ Λ ∉ orthchroRep.ker
change orthchroRep Λ = _ at h mpr d:ℕΛ:↑(𝓛 d)h:orthchroRep Λ = Additive.toMul 1⊢ Λ ∉ orthchroRep.ker
rw [MonoidHom.mem_ker, mpr d:ℕΛ:↑(𝓛 d)h:orthchroRep Λ = Additive.toMul 1⊢ ¬orthchroRep Λ = 1 mpr d:ℕΛ:↑(𝓛 d)h:orthchroRep Λ = Additive.toMul 1⊢ ¬Additive.toMul 1 = 1 h mpr d:ℕΛ:↑(𝓛 d)h:orthchroRep Λ = Additive.toMul 1⊢ ¬Additive.toMul 1 = 1 mpr d:ℕΛ:↑(𝓛 d)h:orthchroRep Λ = Additive.toMul 1⊢ ¬Additive.toMul 1 = 1]mpr d:ℕΛ:↑(𝓛 d)h:orthchroRep Λ = Additive.toMul 1⊢ ¬Additive.toMul 1 = 1
trivial All goals completed! 🐙
The homomorphism from LorentzGroup to ℤ₂ assigns the same value to any Lorentz
transformation and its inverse.
lemma orthchroRep_inv_eq_self (Λ : LorentzGroup d) : orthchroRep Λ = orthchroRep Λ⁻¹ := by d:ℕΛ:↑(𝓛 d)⊢ orthchroRep Λ = orthchroRep Λ⁻¹
rw [map_inv d:ℕΛ:↑(𝓛 d)⊢ orthchroRep Λ = (orthchroRep Λ)⁻¹ d:ℕΛ:↑(𝓛 d)⊢ orthchroRep Λ = (orthchroRep Λ)⁻¹] d:ℕΛ:↑(𝓛 d)⊢ orthchroRep Λ = (orthchroRep Λ)⁻¹
generalize orthchroRep Λ = x d:ℕΛ:↑(𝓛 d)x:ℤ₂⊢ x = x⁻¹
revert x d:ℕΛ:↑(𝓛 d)⊢ ∀ (x : ℤ₂), x = x⁻¹
decide All goals completed! 🐙
Two Lorentz transformations are both orthochronous or both not orthochronous if they are mapped
to the same element via the homomorphism from LorentzGroup to ℤ₂.
lemma isOrthochronous_iff_of_orthchroMap_eq {Λ Λ' : LorentzGroup d}
(h : orthchroMap Λ = orthchroMap Λ') : IsOrthochronous Λ ↔ IsOrthochronous Λ' := by d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ'
rw [IsOrthochronous.iff_in_orthchroRep_ker, d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ Λ ∈ orthchroRep.ker ↔ IsOrthochronous Λ' d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ Λ ∈ orthchroRep.ker ↔ Λ' ∈ orthchroRep.ker IsOrthochronous.iff_in_orthchroRep_ker d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ Λ ∈ orthchroRep.ker ↔ Λ' ∈ orthchroRep.ker d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ Λ ∈ orthchroRep.ker ↔ Λ' ∈ orthchroRep.ker] d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ Λ ∈ orthchroRep.ker ↔ Λ' ∈ orthchroRep.ker
rw [MonoidHom.mem_ker, d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ orthchroRep Λ = 1 ↔ Λ' ∈ orthchroRep.ker d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ orthchroRep Λ = 1 ↔ orthchroRep Λ' = 1 MonoidHom.mem_ker d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ orthchroRep Λ = 1 ↔ orthchroRep Λ' = 1 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ orthchroRep Λ = 1 ↔ orthchroRep Λ' = 1] d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ orthchroRep Λ = 1 ↔ orthchroRep Λ' = 1
change orthchroMap Λ = 1 ↔ orthchroMap Λ' = 1 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ orthchroMap Λ = 1 ↔ orthchroMap Λ' = 1
rw [h d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:orthchroMap Λ = orthchroMap Λ'⊢ orthchroMap Λ' = 1 ↔ orthchroMap Λ' = 1 All goals completed! 🐙] All goals completed! 🐙Two Lorentz transformations which are in the same connected component are either both orthochronous or both not orthochronous.
lemma isOrthochronous_on_connected_component {Λ Λ' : LorentzGroup d}
(h : Λ' ∈ connectedComponent Λ) : IsOrthochronous Λ ↔ IsOrthochronous Λ' := by d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)h:Λ' ∈ connectedComponent Λ⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ'
obtain ⟨s, hs, hΛ'⟩ := h d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ s⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ'
let f : ContinuousMap s ℤ₂ := ContinuousMap.restrict s orthchroMap d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMap⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ'
haveI : PreconnectedSpace s := isPreconnected_iff_preconnectedSpace.mp hs.1 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑s⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ'
have h_eq : orthchroMap Λ = orthchroMap Λ' := by
apply IsPreconnected.subsingleton (isPreconnected_range f.continuous_toFun) x d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑s⊢ orthchroMap Λ ∈ Set.range f.toFunx d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑s⊢ orthchroMap Λ' ∈ Set.range f.toFun d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑sh_eq:orthchroMap Λ = orthchroMap Λ'⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ'
· x d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑s⊢ orthchroMap Λ ∈ Set.range f.toFun d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑sh_eq:orthchroMap Λ = orthchroMap Λ'⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ' exact Set.mem_range_self (⟨Λ, hs.2⟩ : {x : LorentzGroup d | x ∈ s}) All goals completed! 🐙 d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑sh_eq:orthchroMap Λ = orthchroMap Λ'⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ'
· x d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑s⊢ orthchroMap Λ' ∈ Set.range f.toFun d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑sh_eq:orthchroMap Λ = orthchroMap Λ'⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ' exact Set.mem_range_self (⟨Λ', hΛ'⟩ : {x : LorentzGroup d | x ∈ s}) d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑sh_eq:orthchroMap Λ = orthchroMap Λ'⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ' d:ℕΛ:↑(𝓛 d)Λ':↑(𝓛 d)s:Set ↑(𝓛 d)hs:s ∈ {s | IsPreconnected s ∧ Λ ∈ s}hΛ':Λ' ∈ sf:C(↑s, ℤ₂) := ContinuousMap.restrict s orthchroMapthis:PreconnectedSpace ↑sh_eq:orthchroMap Λ = orthchroMap Λ'⊢ IsOrthochronous Λ ↔ IsOrthochronous Λ'
exact isOrthochronous_iff_of_orthchroMap_eq h_eq All goals completed! 🐙