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.Basic

The 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) 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) 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)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) 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)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) 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) 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)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) d:Λ:(𝓛 d)h:1 Λ (Sum.inl 0) (Sum.inl 0)h1:Λ (Sum.inl 0) (Sum.inl 0) -10 Λ (Sum.inl 0) (Sum.inl 0)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) d:Λ:(𝓛 d)h:0 Λ (Sum.inl 0) (Sum.inl 0)h1:Λ (Sum.inl 0) (Sum.inl 0) -11 Λ (Sum.inl 0) (Sum.inl 0)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)d:Λ:(𝓛 d)h:1 Λ (Sum.inl 0) (Sum.inl 0)h1:Λ (Sum.inl 0) (Sum.inl 0) -10 Λ (Sum.inl 0) (Sum.inl 0)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) All goals completed! 🐙

The Lorentz.Velocity from Lorentz.toVector of a orthochronous lorentz transformation.

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)0 < Λ (Sum.inl 0) (Sum.inl 0) 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.

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)Λ (Sum.inl 0) (Sum.inl 0) < 0 Λ (Sum.inl 0) (Sum.inl 0) -1 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) -1d:Λ:(𝓛 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 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) -1d:Λ:(𝓛 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 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 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) -1d:Λ:(𝓛 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 d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) -1h1:Λ (Sum.inl 0) (Sum.inl 0) -1Λ (Sum.inl 0) (Sum.inl 0) < 0d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) -1h1:1 Λ (Sum.inl 0) (Sum.inl 0)Λ (Sum.inl 0) (Sum.inl 0) < 0 d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) < 0h1:Λ (Sum.inl 0) (Sum.inl 0) -1Λ (Sum.inl 0) (Sum.inl 0) -1d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) < 0h1:1 Λ (Sum.inl 0) (Sum.inl 0)Λ (Sum.inl 0) (Sum.inl 0) -1d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) -1h1:Λ (Sum.inl 0) (Sum.inl 0) -1Λ (Sum.inl 0) (Sum.inl 0) < 0d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) -1h1:1 Λ (Sum.inl 0) (Sum.inl 0)Λ (Sum.inl 0) (Sum.inl 0) < 0 All goals completed! 🐙
d:Λ:(𝓛 d)1 Λ (Sum.inl 0) (Sum.inl 0) (-Λ) (Sum.inl 0) (Sum.inl 0) -1 All goals completed! 🐙lemma neg_isOrthochronous_iff_not {Λ : LorentzGroup d} : IsOrthochronous (- Λ) ¬ IsOrthochronous Λ := d:Λ:(𝓛 d)IsOrthochronous (-Λ) ¬IsOrthochronous Λ conv_rhs => d:Λ:(𝓛 d)| ¬¬IsOrthochronous (-Λ) All goals completed! 🐙

A Lorentz transformation is not orthochronous if and only if its 0 0 element is non-positive.

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)Λ (Sum.inl 0) (Sum.inl 0) < 0 Λ (Sum.inl 0) (Sum.inl 0) 0 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) 0d:Λ:(𝓛 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 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) 0d:Λ:(𝓛 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 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 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) 0d:Λ:(𝓛 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 d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) 0h1:Λ (Sum.inl 0) (Sum.inl 0) -1Λ (Sum.inl 0) (Sum.inl 0) < 0d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) 0h1:1 Λ (Sum.inl 0) (Sum.inl 0)Λ (Sum.inl 0) (Sum.inl 0) < 0 d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) < 0h1:Λ (Sum.inl 0) (Sum.inl 0) -1Λ (Sum.inl 0) (Sum.inl 0) 0d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) < 0h1:1 Λ (Sum.inl 0) (Sum.inl 0)Λ (Sum.inl 0) (Sum.inl 0) 0d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) 0h1:Λ (Sum.inl 0) (Sum.inl 0) -1Λ (Sum.inl 0) (Sum.inl 0) < 0d:Λ:(𝓛 d)h:Λ (Sum.inl 0) (Sum.inl 0) 0h1:1 Λ (Sum.inl 0) (Sum.inl 0)Λ (Sum.inl 0) (Sum.inl 0) < 0 All goals completed! 🐙
d:Λ:(𝓛 d)Λ (Sum.inl 0) (Sum.inl 0) 0 (toVector Λ).timeComponent 0 All goals completed! 🐙

The identity Lorentz transformation is orthochronous.

lemma id_isOrthochronous : @IsOrthochronous d 1 := d:IsOrthochronous 1 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.

a:ha:a = 11 = id a 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.

All goals completed! 🐙

A Lorentz transformation which is not-orthochronous maps under orthchroMapReal to - 1.

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 := d:Λ:(𝓛 d)orthchroMapReal Λ = -1 orthchroMapReal Λ = 1 d:Λ:(𝓛 d)h:IsOrthochronous ΛorthchroMapReal Λ = -1 orthchroMapReal Λ = 1d:Λ:(𝓛 d)h:¬IsOrthochronous ΛorthchroMapReal Λ = -1 orthchroMapReal Λ = 1 d:Λ:(𝓛 d)h:IsOrthochronous ΛorthchroMapReal Λ = -1 orthchroMapReal Λ = 1 All goals completed! 🐙 d:Λ:(𝓛 d)h:¬IsOrthochronous ΛorthchroMapReal Λ = -1 orthchroMapReal Λ = 1 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 := d:Λ:(𝓛 d)h:IsOrthochronous ΛorthchroMap Λ = 1 All goals completed! 🐙

A Lorentz transformation which is not-orthochronous maps under orthchroMap to the non-identity element of ℤ₂.

d:Λ:(𝓛 d)h:¬IsOrthochronous ΛAdditive.toMul 1 = Additive.toMul 1 All goals completed! 🐙

The product of two orthochronous Lorentz transformations is orthochronous.

d:Λ:(𝓛 d)Λ':(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'0 (minkowskiProduct (toVector Λ⁻¹)) (toVector Λ') d:Λ:(𝓛 d)Λ':(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'0 (minkowskiProduct (orthochronoustoVelocity )) (orthochronoustoVelocity h') All goals completed! 🐙
d:Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'IsOrthochronous (-Λ * -Λ') d:Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'IsOrthochronous (-Λ)d:Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'IsOrthochronous (-Λ') d:Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'IsOrthochronous (-Λ)d:Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'IsOrthochronous (-Λ') rwa [d:Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'hnn:-Λ * -Λ' = Λ * Λ'¬IsOrthochronous Λ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 (d:Λ:(𝓛 d)IsOrthochronous 1 All goals completed! 🐙) map_mul' Λ Λ' := d:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ' d:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:IsOrthochronous ΛorthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'd:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous ΛorthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ' d:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:IsOrthochronous ΛorthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'd:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous ΛorthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ' d:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'd:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ' d:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:IsOrthochronous Λh':IsOrthochronous Λ'orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'd:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:IsOrthochronous Λh':¬IsOrthochronous Λ'orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'd:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':IsOrthochronous Λ'orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ'd:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'orthchroMap (Λ * Λ') = orthchroMap Λ * orthchroMap Λ' d:Λ✝:(𝓛 d)Λ:(𝓛 d)Λ':(𝓛 d)h:¬IsOrthochronous Λh':¬IsOrthochronous Λ'1 = Additive.toMul 1 * Additive.toMul 1 All goals completed! 🐙

The orthochronous Lorentz transformations form the kernel of the homomorphism from LorentzGroup to ℤ₂.

set_option backward.isDefEq.respectTransparency false ind:Λ:(𝓛 d)h:orthchroRep Λ = Additive.toMul 1¬Additive.toMul 1 = 1 All goals completed! 🐙

The homomorphism from LorentzGroup to ℤ₂ assigns the same value to any Lorentz transformation and its inverse.

d:Λ:(𝓛 d)orthchroRep Λ = (orthchroRep Λ)⁻¹ d:Λ:(𝓛 d)x:ℤ₂x = x⁻¹ d:Λ:(𝓛 d) (x : ℤ₂), x = x⁻¹ 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 ℤ₂.

All goals completed! 🐙

Two Lorentz transformations which are in the same connected component are either both orthochronous or both not orthochronous.

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 Λ' All goals completed! 🐙