2024-05-17 11:52:16 -04:00
|
|
|
|
/-
|
|
|
|
|
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
|
|
|
|
|
Released under Apache 2.0 license.
|
|
|
|
|
Authors: Joseph Tooby-Smith
|
|
|
|
|
-/
|
|
|
|
|
import HepLean.SpaceTime.Metric
|
2024-06-13 10:57:25 -04:00
|
|
|
|
import HepLean.SpaceTime.AsSelfAdjointMatrix
|
2024-05-17 11:52:16 -04:00
|
|
|
|
/-!
|
|
|
|
|
# The Lorentz Group
|
|
|
|
|
|
|
|
|
|
We define the Lorentz group.
|
|
|
|
|
|
|
|
|
|
## TODO
|
|
|
|
|
|
|
|
|
|
- Show that the Lorentz is a Lie group.
|
|
|
|
|
- Prove that the restricted Lorentz group is equivalent to the connected component of the
|
|
|
|
|
identity.
|
|
|
|
|
- Define the continuous maps from `ℝ³` to `restrictedLorentzGroup` defining boosts.
|
|
|
|
|
|
|
|
|
|
## References
|
|
|
|
|
|
|
|
|
|
- http://home.ku.edu.tr/~amostafazadeh/phys517_518/phys517_2016f/Handouts/A_Jaffi_Lorentz_Group.pdf
|
|
|
|
|
|
|
|
|
|
-/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
noncomputable section
|
|
|
|
|
|
2024-06-26 11:54:02 -04:00
|
|
|
|
namespace SpaceTime
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
|
|
|
|
open Manifold
|
|
|
|
|
open Matrix
|
|
|
|
|
open Complex
|
|
|
|
|
open ComplexConjugate
|
|
|
|
|
|
2024-06-15 17:08:08 -04:00
|
|
|
|
/-!
|
|
|
|
|
## Matrices which preserve `ηLin`
|
|
|
|
|
|
|
|
|
|
We start studying the properties of matrices which preserve `ηLin`.
|
|
|
|
|
These matrices form the Lorentz group, which we will define in the next section at `lorentzGroup`.
|
|
|
|
|
|
|
|
|
|
-/
|
|
|
|
|
|
2024-05-17 11:52:16 -04:00
|
|
|
|
/-- We say a matrix `Λ` preserves `ηLin` if for all `x` and `y`,
|
|
|
|
|
`ηLin (Λ *ᵥ x) (Λ *ᵥ y) = ηLin x y`. -/
|
|
|
|
|
def PreservesηLin (Λ : Matrix (Fin 4) (Fin 4) ℝ) : Prop :=
|
2024-06-26 11:54:02 -04:00
|
|
|
|
∀ (x y : SpaceTime), ηLin (Λ *ᵥ x) (Λ *ᵥ y) = ηLin x y
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
|
|
|
|
namespace PreservesηLin
|
|
|
|
|
|
|
|
|
|
variable (Λ : Matrix (Fin 4) (Fin 4) ℝ)
|
|
|
|
|
|
2024-06-13 10:57:25 -04:00
|
|
|
|
lemma iff_norm : PreservesηLin Λ ↔
|
2024-06-26 11:54:02 -04:00
|
|
|
|
∀ (x : SpaceTime), ηLin (Λ *ᵥ x) (Λ *ᵥ x) = ηLin x x := by
|
2024-06-13 10:57:25 -04:00
|
|
|
|
refine Iff.intro (fun h x => h x x) (fun h x y => ?_)
|
|
|
|
|
have hp := h (x + y)
|
|
|
|
|
have hn := h (x - y)
|
|
|
|
|
rw [mulVec_add] at hp
|
|
|
|
|
rw [mulVec_sub] at hn
|
|
|
|
|
simp only [map_add, LinearMap.add_apply, map_sub, LinearMap.sub_apply] at hp hn
|
|
|
|
|
rw [ηLin_symm (Λ *ᵥ y) (Λ *ᵥ x), ηLin_symm y x] at hp hn
|
|
|
|
|
linear_combination hp / 4 + -1 * hn / 4
|
|
|
|
|
|
|
|
|
|
lemma iff_det_selfAdjoint : PreservesηLin Λ ↔
|
|
|
|
|
∀ (x : selfAdjoint (Matrix (Fin 2) (Fin 2) ℂ)),
|
|
|
|
|
det ((toSelfAdjointMatrix ∘ toLin stdBasis stdBasis Λ ∘ toSelfAdjointMatrix.symm) x).1
|
|
|
|
|
= det x.1 := by
|
|
|
|
|
rw [iff_norm]
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
intro h x
|
|
|
|
|
have h1 := congrArg ofReal $ h (toSelfAdjointMatrix.symm x)
|
|
|
|
|
simpa [← det_eq_ηLin] using h1
|
|
|
|
|
intro h x
|
|
|
|
|
have h1 := h (toSelfAdjointMatrix x)
|
|
|
|
|
simpa [det_eq_ηLin] using h1
|
|
|
|
|
|
2024-05-17 11:52:16 -04:00
|
|
|
|
lemma iff_on_right : PreservesηLin Λ ↔
|
2024-06-26 11:54:02 -04:00
|
|
|
|
∀ (x y : SpaceTime), ηLin x ((η * Λᵀ * η * Λ) *ᵥ y) = ηLin x y := by
|
2024-05-17 11:52:16 -04:00
|
|
|
|
apply Iff.intro
|
2024-06-13 08:10:08 -04:00
|
|
|
|
intro h x y
|
2024-05-17 11:52:16 -04:00
|
|
|
|
have h1 := h x y
|
|
|
|
|
rw [ηLin_mulVec_left, mulVec_mulVec] at h1
|
|
|
|
|
exact h1
|
2024-06-13 08:10:08 -04:00
|
|
|
|
intro h x y
|
2024-05-17 11:52:16 -04:00
|
|
|
|
rw [ηLin_mulVec_left, mulVec_mulVec]
|
|
|
|
|
exact h x y
|
|
|
|
|
|
|
|
|
|
lemma iff_matrix : PreservesηLin Λ ↔ η * Λᵀ * η * Λ = 1 := by
|
|
|
|
|
rw [iff_on_right, ηLin_matrix_eq_identity_iff (η * Λᵀ * η * Λ)]
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· simp_all [ηLin, implies_true, iff_true, one_mulVec]
|
2024-06-13 08:10:08 -04:00
|
|
|
|
· exact fun a x y => Eq.symm (Real.ext_cauchy (congrArg Real.cauchy (a x y)))
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
|
|
|
|
lemma iff_matrix' : PreservesηLin Λ ↔ Λ * (η * Λᵀ * η) = 1 := by
|
|
|
|
|
rw [iff_matrix]
|
2024-06-13 08:10:08 -04:00
|
|
|
|
exact mul_eq_one_comm
|
|
|
|
|
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
|
|
|
|
lemma iff_transpose : PreservesηLin Λ ↔ PreservesηLin Λᵀ := by
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
intro h
|
|
|
|
|
have h1 := congrArg transpose ((iff_matrix Λ).mp h)
|
|
|
|
|
rw [transpose_mul, transpose_mul, transpose_mul, η_transpose,
|
|
|
|
|
← mul_assoc, transpose_one] at h1
|
|
|
|
|
rw [iff_matrix' Λ.transpose, ← h1]
|
2024-06-13 10:57:25 -04:00
|
|
|
|
noncomm_ring
|
2024-05-17 11:52:16 -04:00
|
|
|
|
intro h
|
|
|
|
|
have h1 := congrArg transpose ((iff_matrix Λ.transpose).mp h)
|
|
|
|
|
rw [transpose_mul, transpose_mul, transpose_mul, η_transpose,
|
|
|
|
|
← mul_assoc, transpose_one, transpose_transpose] at h1
|
|
|
|
|
rw [iff_matrix', ← h1]
|
2024-06-13 10:57:25 -04:00
|
|
|
|
noncomm_ring
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
|
|
|
|
/-- The lift of a matrix which preserves `ηLin` to an invertible matrix. -/
|
|
|
|
|
def liftGL {Λ : Matrix (Fin 4) (Fin 4) ℝ} (h : PreservesηLin Λ) : GL (Fin 4) ℝ :=
|
|
|
|
|
⟨Λ, η * Λᵀ * η , (iff_matrix' Λ).mp h , (iff_matrix Λ).mp h⟩
|
|
|
|
|
|
2024-05-22 13:34:53 -04:00
|
|
|
|
lemma mul {Λ Λ' : Matrix (Fin 4) (Fin 4) ℝ} (h : PreservesηLin Λ) (h' : PreservesηLin Λ') :
|
|
|
|
|
PreservesηLin (Λ * Λ') := by
|
|
|
|
|
intro x y
|
|
|
|
|
rw [← mulVec_mulVec, ← mulVec_mulVec, h, h']
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
2024-05-22 13:34:53 -04:00
|
|
|
|
lemma one : PreservesηLin 1 := by
|
|
|
|
|
intro x y
|
|
|
|
|
simp
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
2024-05-22 13:34:53 -04:00
|
|
|
|
lemma η : PreservesηLin η := by
|
|
|
|
|
simp [iff_matrix, η_transpose, η_sq]
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
2024-05-22 13:34:53 -04:00
|
|
|
|
end PreservesηLin
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
2024-06-15 17:08:08 -04:00
|
|
|
|
/-!
|
|
|
|
|
## The Lorentz group
|
|
|
|
|
|
|
|
|
|
We define the Lorentz group as the set of matrices which preserve `ηLin`.
|
|
|
|
|
We show that the Lorentz group is indeed a group.
|
|
|
|
|
|
|
|
|
|
-/
|
|
|
|
|
|
2024-05-22 13:34:53 -04:00
|
|
|
|
/-- The Lorentz group is the subset of matrices which preserve ηLin. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
def LorentzGroup : Type := {Λ : Matrix (Fin 4) (Fin 4) ℝ // PreservesηLin Λ}
|
2024-05-22 13:34:53 -04:00
|
|
|
|
|
|
|
|
|
@[simps mul_coe one_coe inv div]
|
2024-06-26 11:54:02 -04:00
|
|
|
|
instance lorentzGroupIsGroup : Group LorentzGroup where
|
2024-05-22 13:34:53 -04:00
|
|
|
|
mul A B := ⟨A.1 * B.1, PreservesηLin.mul A.2 B.2⟩
|
|
|
|
|
mul_assoc A B C := by
|
|
|
|
|
apply Subtype.eq
|
|
|
|
|
exact Matrix.mul_assoc A.1 B.1 C.1
|
|
|
|
|
one := ⟨1, PreservesηLin.one⟩
|
|
|
|
|
one_mul A := by
|
|
|
|
|
apply Subtype.eq
|
|
|
|
|
exact Matrix.one_mul A.1
|
|
|
|
|
mul_one A := by
|
|
|
|
|
apply Subtype.eq
|
|
|
|
|
exact Matrix.mul_one A.1
|
|
|
|
|
inv A := ⟨η * A.1ᵀ * η , PreservesηLin.mul (PreservesηLin.mul PreservesηLin.η
|
|
|
|
|
((PreservesηLin.iff_transpose A.1).mp A.2)) PreservesηLin.η⟩
|
|
|
|
|
mul_left_inv A := by
|
|
|
|
|
apply Subtype.eq
|
|
|
|
|
exact (PreservesηLin.iff_matrix A.1).mp A.2
|
|
|
|
|
|
|
|
|
|
/-- Notation for the Lorentz group. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
scoped[SpaceTime] notation (name := lorentzGroup_notation) "𝓛" => LorentzGroup
|
2024-05-22 13:34:53 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/-- `lorentzGroup` has the subtype topology. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
instance : TopologicalSpace LorentzGroup := instTopologicalSpaceSubtype
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
2024-06-26 11:54:02 -04:00
|
|
|
|
namespace LorentzGroup
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
2024-06-26 11:54:02 -04:00
|
|
|
|
lemma coe_inv (A : LorentzGroup) : (A⁻¹).1 = A.1⁻¹:= by
|
2024-05-22 13:34:53 -04:00
|
|
|
|
refine (inv_eq_left_inv ?h).symm
|
|
|
|
|
exact (PreservesηLin.iff_matrix A.1).mp A.2
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
2024-06-15 17:08:08 -04:00
|
|
|
|
/-- The transpose of an matrix in the Lorentz group is an element of the Lorentz group. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
def transpose (Λ : LorentzGroup) : LorentzGroup := ⟨Λ.1ᵀ, (PreservesηLin.iff_transpose Λ.1).mp Λ.2⟩
|
2024-06-15 17:08:08 -04:00
|
|
|
|
|
|
|
|
|
/-!
|
|
|
|
|
|
|
|
|
|
## Lorentz group as a topological group
|
|
|
|
|
|
|
|
|
|
We now show that the Lorentz group is a topological group.
|
|
|
|
|
We do this by showing that the natrual map from the Lorentz group to `GL (Fin 4) ℝ` is an
|
|
|
|
|
embedding.
|
|
|
|
|
|
|
|
|
|
-/
|
|
|
|
|
|
2024-05-22 13:34:53 -04:00
|
|
|
|
/-- The homomorphism of the Lorentz group into `GL (Fin 4) ℝ`. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
def toGL : LorentzGroup →* GL (Fin 4) ℝ where
|
2024-05-22 13:34:53 -04:00
|
|
|
|
toFun A := ⟨A.1, (A⁻¹).1, mul_eq_one_comm.mpr $ (PreservesηLin.iff_matrix A.1).mp A.2,
|
|
|
|
|
(PreservesηLin.iff_matrix A.1).mp A.2⟩
|
|
|
|
|
map_one' := by
|
|
|
|
|
simp
|
|
|
|
|
rfl
|
|
|
|
|
map_mul' x y := by
|
|
|
|
|
simp only [lorentzGroupIsGroup, _root_.mul_inv_rev, coe_inv]
|
|
|
|
|
ext
|
|
|
|
|
rfl
|
|
|
|
|
|
|
|
|
|
lemma toGL_injective : Function.Injective toGL := by
|
|
|
|
|
intro A B h
|
|
|
|
|
apply Subtype.eq
|
|
|
|
|
rw [@Units.ext_iff] at h
|
2024-06-13 08:10:08 -04:00
|
|
|
|
exact h
|
2024-05-22 13:34:53 -04:00
|
|
|
|
|
|
|
|
|
/-- The homomorphism from the Lorentz Group into the monoid of matrices times the opposite of
|
|
|
|
|
the monoid of matrices. -/
|
|
|
|
|
@[simps!]
|
2024-06-26 11:54:02 -04:00
|
|
|
|
def toProd : LorentzGroup →* (Matrix (Fin 4) (Fin 4) ℝ) × (Matrix (Fin 4) (Fin 4) ℝ)ᵐᵒᵖ :=
|
2024-05-22 13:34:53 -04:00
|
|
|
|
MonoidHom.comp (Units.embedProduct _) toGL
|
|
|
|
|
|
|
|
|
|
lemma toProd_eq_transpose_η : toProd A = (A.1, ⟨η * A.1ᵀ * η⟩) := rfl
|
|
|
|
|
|
|
|
|
|
lemma toProd_injective : Function.Injective toProd := by
|
|
|
|
|
intro A B h
|
|
|
|
|
rw [toProd_eq_transpose_η, toProd_eq_transpose_η] at h
|
|
|
|
|
rw [@Prod.mk.inj_iff] at h
|
|
|
|
|
apply Subtype.eq
|
|
|
|
|
exact h.1
|
|
|
|
|
|
|
|
|
|
lemma toProd_continuous : Continuous toProd := by
|
|
|
|
|
change Continuous (fun A => (A.1, ⟨η * A.1ᵀ * η⟩))
|
|
|
|
|
refine continuous_prod_mk.mpr (And.intro ?_ ?_)
|
|
|
|
|
exact continuous_iff_le_induced.mpr fun U a => a
|
|
|
|
|
refine Continuous.comp' ?_ ?_
|
|
|
|
|
exact MulOpposite.continuous_op
|
|
|
|
|
refine Continuous.matrix_mul (Continuous.matrix_mul continuous_const ?_) continuous_const
|
|
|
|
|
refine Continuous.matrix_transpose ?_
|
|
|
|
|
exact continuous_iff_le_induced.mpr fun U a => a
|
|
|
|
|
|
|
|
|
|
/-- The embedding from the Lorentz Group into the monoid of matrices times the opposite of
|
|
|
|
|
the monoid of matrices. -/
|
|
|
|
|
lemma toProd_embedding : Embedding toProd where
|
|
|
|
|
inj := toProd_injective
|
|
|
|
|
induced := by
|
|
|
|
|
refine (inducing_iff ⇑toProd).mp ?_
|
|
|
|
|
refine inducing_of_inducing_compose toProd_continuous continuous_fst ?hgf
|
|
|
|
|
exact (inducing_iff (Prod.fst ∘ ⇑toProd)).mpr rfl
|
|
|
|
|
|
|
|
|
|
/-- The embedding from the Lorentz Group into `GL (Fin 4) ℝ`. -/
|
|
|
|
|
lemma toGL_embedding : Embedding toGL.toFun where
|
|
|
|
|
inj := toGL_injective
|
|
|
|
|
induced := by
|
|
|
|
|
refine ((fun {X} {t t'} => TopologicalSpace.ext_iff.mpr) ?_).symm
|
|
|
|
|
intro s
|
|
|
|
|
rw [TopologicalSpace.ext_iff.mp toProd_embedding.induced s ]
|
|
|
|
|
rw [isOpen_induced_iff, isOpen_induced_iff]
|
2024-06-13 08:10:08 -04:00
|
|
|
|
exact exists_exists_and_eq_and
|
|
|
|
|
|
2024-05-22 13:34:53 -04:00
|
|
|
|
|
2024-06-26 11:54:02 -04:00
|
|
|
|
instance : TopologicalGroup LorentzGroup := Inducing.topologicalGroup toGL toGL_embedding.toInducing
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-26 11:54:02 -04:00
|
|
|
|
end LorentzGroup
|
2024-05-17 11:52:16 -04:00
|
|
|
|
|
2024-05-22 13:34:53 -04:00
|
|
|
|
|
2024-06-26 11:54:02 -04:00
|
|
|
|
end SpaceTime
|