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.Basic public import Mathlib.Topology.Connected.PathConnected public import Mathlib.Tactic.Cases

The Proper Lorentz Group

The proper Lorentz group is the subgroup of the Lorentz group with determinant 1.

We define the give a series of lemmas related to the determinant of the Lorentz group.

@[expose] public section

The determinant of a member of the Lorentz group is 1 or -1.

lemma det_eq_one_or_neg_one (Λ : 𝓛 d) : Λ.1.det = 1 Λ.1.det = -1 := d:Λ:(𝓛 d)(↑Λ).det = 1 (↑Λ).det = -1 d:Λ:(𝓛 d)(↑Λ).det * (↑Λ).det = 1 All goals completed! 🐙

The group ℤ₂.

local notation "ℤ₂" => Multiplicative (ZMod 2)

The instance of a topological space on ℤ₂ corresponding to the discrete topology.

instance : TopologicalSpace ℤ₂ := instTopologicalSpaceFin

The topological space defined by ℤ₂ is discrete.

instance : DiscreteTopology ℤ₂ := d:DiscreteTopology ℤ₂ All goals completed! 🐙

The instance of a topological group on ℤ₂ defined via the discrete topology.

instance : IsTopologicalGroup ℤ₂ := IsTopologicalGroup.mk

A continuous function from ({-1, 1} : Set ℝ) to ℤ₂.

@[simps!] def coeForℤ₂ : C(({-1, 1} : Set ), ℤ₂) where toFun x := if x = 1, Set.mem_insert_of_mem (-1) rfl then Additive.toMul 0 else Additive.toMul (1 : ZMod 2) continuous_toFun := continuous_of_discreteTopology

The continuous map taking a Lorentz matrix to its determinant.

def detContinuous : C(𝓛 d, ℤ₂) := ContinuousMap.comp coeForℤ₂ { toFun := fun Λ => Λ.1.det, Or.symm (LorentzGroup.det_eq_one_or_neg_one _), continuous_toFun := d:Continuous fun Λ => (↑Λ).det, d:Continuous fun Λ => (↑Λ).det All goals completed! 🐙 }
lemma detContinuous_eq_one (Λ : LorentzGroup d) : detContinuous Λ = Additive.toMul 0 Λ.1.det = 1 := d:Λ:(𝓛 d)detContinuous Λ = Additive.toMul 0 (↑Λ).det = 1 d:Λ:(𝓛 d)(if (↑Λ).det = 1 then 1 else Additive.toMul 1) = Additive.toMul 0 (↑Λ).det = 1 d:Λ:(𝓛 d)¬(↑Λ).det = 1 1 = 0 (↑Λ).det = 1 d:Λ:(𝓛 d)h:¬(↑Λ).det = 1 1 = 0(↑Λ).det = 1d:Λ:(𝓛 d)h:(↑Λ).det = 1¬(↑Λ).det = 1 1 = 0 d:Λ:(𝓛 d)h:¬(↑Λ).det = 1 1 = 0(↑Λ).det = 1 d:Λ:(𝓛 d)h:¬(↑Λ).det = 1 1 = 0hn:¬(↑Λ).det = 1False d:Λ:(𝓛 d)h:¬(↑Λ).det = 1 1 = 0hn:¬(↑Λ).det = 1h':1 = 0False d:Λ:(𝓛 d)h:¬(↑Λ).det = 1 1 = 0hn:¬(↑Λ).det = 1h':1 = 0False All goals completed! 🐙 d:Λ:(𝓛 d)h:(↑Λ).det = 1¬(↑Λ).det = 1 1 = 0 d:Λ:(𝓛 d)h:(↑Λ).det = 1h':¬(↑Λ).det = 11 = 0 All goals completed! 🐙d:Λ:(𝓛 d)h:(↑Λ).det = -1h2:(↑Λ).det = 1¬-1 = 1 All goals completed! 🐙 d:Λ:(𝓛 d)h:(↑Λ).det = -1h2:(↑Λ).det = -1¬(↑Λ).det = 1 All goals completed! 🐙d:Λ:(𝓛 d)Λ':(𝓛 d)h1:(↑Λ).det = -1h2:(↑Λ').det = 1Additive.toMul 1 = Additive.toMul 0 -1 = 1 d:Λ:(𝓛 d)Λ':(𝓛 d)h1:(↑Λ).det = -1h2:(↑Λ').det = 11 = 0 -1 = 1 d:Λ:(𝓛 d)Λ':(𝓛 d)h1:(↑Λ).det = -1h2:(↑Λ').det = 1¬-1 = 1 All goals completed! 🐙

The representation taking a Lorentz matrix to its determinant.

d:Λ1:(𝓛 d)Λ2:(𝓛 d)h1:(↑Λ1).det = -1h2:(↑Λ2).det = -1detContinuous (Λ1 * Λ2) = Additive.toMul 1 * Additive.toMul 1 d:Λ1:(𝓛 d)Λ2:(𝓛 d)h1:(↑Λ1).det = -1h2:(↑Λ2).det = -1(↑(Λ1 * Λ2)).det = 1 All goals completed! 🐙

The representation of the Lorentz group defined by taking the determinant detRep is continuous.

lemma detRep_continuous : Continuous (@detRep d) := detContinuous.2

Two Lorentz transformations which are in the same connected component have the same determinant.

lemma det_on_connected_component {Λ Λ' : LorentzGroup d} (h : Λ' connectedComponent Λ) : Λ.1.det = Λ'.1.det := d:Λ:(𝓛 d)Λ':(𝓛 d)h:Λ' connectedComponent Λ(↑Λ).det = (↑Λ').det d:Λ:(𝓛 d)Λ':(𝓛 d)s:Set (𝓛 d)hs:s {s | IsPreconnected s Λ s}hΛ':Λ' s(↑Λ).det = (↑Λ').det d:Λ:(𝓛 d)Λ':(𝓛 d)s:Set (𝓛 d)hs:s {s | IsPreconnected s Λ s}hΛ':Λ' sf:C(s, ℤ₂) := ContinuousMap.restrict s detContinuous(↑Λ).det = (↑Λ').det d:Λ:(𝓛 d)Λ':(𝓛 d)s:Set (𝓛 d)hs:s {s | IsPreconnected s Λ s}hΛ':Λ' sf:C(s, ℤ₂) := ContinuousMap.restrict s detContinuousthis:PreconnectedSpace s(↑Λ).det = (↑Λ').det All goals completed! 🐙

Two Lorentz transformations which are in the same connected component have the same image under detRep, the determinant representation.

All goals completed! 🐙

Two Lorentz transformations which are joined by a path have the same determinant.

lemma det_of_joined {Λ Λ' : LorentzGroup d} (h : Joined Λ Λ') : Λ.1.det = Λ'.1.det := det_on_connected_component $ pathComponent_subset_component _ h

A Lorentz Matrix is proper if its determinant is 1.

@[simp] def IsProper (Λ : LorentzGroup d) : Prop := Λ.1.det = 1

The predicate IsProper is decidable.

instance : DecidablePred (@IsProper d) := d:DecidablePred IsProper d:Λ:(𝓛 d)Decidable (IsProper Λ) All goals completed! 🐙

The product of two proper Lorentz transformations is proper.

All goals completed! 🐙

A Lorentz transformation is proper if its image under the det-representation detRep is 1.

d:Λ:(𝓛 d)IsProper Λ (↑Λ).det = (↑1).det All goals completed! 🐙

The identity Lorentz transformation is proper.

lemma isProper_id : @IsProper d 1 := d:IsProper 1 All goals completed! 🐙

If two Lorentz transformations are in the same connected component, and one is proper then the other is also proper.

All goals completed! 🐙