feat: Complex Lorentz vector & Monoidal struct

This commit is contained in:
jstoobysmith 2024-10-03 11:21:44 +00:00
parent 37a6a23d1e
commit f555bc6722
5 changed files with 291 additions and 18 deletions

View file

@ -21,7 +21,7 @@ open Matrix
open MatrixGroups
open Complex
/-- A 2×2-complex matrix formed from a space-time point. -/
/-- A 2×2-complex matrix formed from a Lorentz vector point. -/
@[simp]
def toMatrix (x : LorentzVector 3) : Matrix (Fin 2) (Fin 2) :=
!![x.time + x.space 2, x.space 0 - x.space 1 * I; x.space 0 + x.space 1 * I, x.time - x.space 2]
@ -34,12 +34,12 @@ lemma toMatrix_isSelfAdjoint (x : LorentzVector 3) : IsSelfAdjoint (toMatrix x)
simp [toMatrix, conj_ofReal]
rfl
/-- A self-adjoint matrix formed from a space-time point. -/
/-- A self-adjoint matrix formed from a Lorentz vector point. -/
@[simps!]
def toSelfAdjointMatrix' (x : LorentzVector 3) : selfAdjoint (Matrix (Fin 2) (Fin 2) ) :=
⟨toMatrix x, toMatrix_isSelfAdjoint x⟩
/-- A self-adjoint matrix formed from a space-time point. -/
/-- A self-adjoint matrix formed from a Lorentz vector point. -/
@[simp]
noncomputable def fromSelfAdjointMatrix' (x : selfAdjoint (Matrix (Fin 2) (Fin 2) )) :
LorentzVector 3 := fun i =>

View file

@ -0,0 +1,39 @@
/-
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
-/
import Mathlib.Data.Complex.Exponential
import Mathlib.Analysis.InnerProductSpace.PiL2
import HepLean.SpaceTime.SL2C.Basic
import HepLean.SpaceTime.LorentzVector.Modules
import HepLean.Meta.Informal
import Mathlib.RepresentationTheory.Rep
import HepLean.Tensors.Basic
/-!
# Complex Lorentz vectors
We define complex Lorentz vectors in 4d space-time as representations of SL(2, C).
-/
noncomputable section
open Matrix
open MatrixGroups
open Complex
open TensorProduct
namespace Lorentz
/-- The representation of `SL(2, )` on complex vectors corresponding to contravariant
Lorentz vectors. -/
def complexContr : Rep SL(2, ) := Rep.of ContrModule.SL2CRep
/-- The representation of `SL(2, )` on complex vectors corresponding to contravariant
Lorentz vectors. -/
def complexCo : Rep SL(2, ) := Rep.of CoModule.SL2CRep
end Lorentz
end

View file

@ -0,0 +1,158 @@
/-
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
-/
import HepLean.Meta.Informal
import HepLean.SpaceTime.SL2C.Basic
import Mathlib.RepresentationTheory.Rep
import HepLean.Tensors.Basic
import Mathlib.Logic.Equiv.TransferInstance
/-!
## Modules associated with Lorentz vectors
These have not yet been fully-implmented.
We define these modules to prevent casting between different types of Lorentz vectors.
-/
namespace Lorentz
noncomputable section
open Matrix
open MatrixGroups
open Complex
structure ContrModule where
val : Fin 1 ⊕ Fin 3 →
namespace ContrModule
/-- The equivalence between `ContrModule` and `Fin 1 ⊕ Fin 3 → `. -/
def toFin13Fun : ContrModule ≃ (Fin 1 ⊕ Fin 3 → ) where
toFun v := v.val
invFun f := ⟨f⟩
left_inv _ := rfl
right_inv _ := rfl
/-- The instance of `AddCommMonoid` on `ContrModule` defined via its equivalence
with `Fin 1 ⊕ Fin 3 → `. -/
instance : AddCommMonoid ContrModule := Equiv.addCommMonoid toFin13Fun
/-- The instance of `AddCommGroup` on `ContrModule` defined via its equivalence
with `Fin 1 ⊕ Fin 3 → `. -/
instance : AddCommGroup ContrModule := Equiv.addCommGroup toFin13Fun
/-- The instance of `Module` on `ContrModule` defined via its equivalence
with `Fin 1 ⊕ Fin 3 → `. -/
instance : Module ContrModule := Equiv.module toFin13Fun
/-- The linear equivalence between `ContrModule` and `(Fin 1 ⊕ Fin 3 → )`. -/
@[simps!]
def toFin13Equiv : ContrModule ≃ₗ[] (Fin 1 ⊕ Fin 3 → ) where
toFun := toFin13Fun
map_add' := fun _ _ => rfl
map_smul' := fun _ _ => rfl
invFun := toFin13Fun.symm
left_inv := fun _ => rfl
right_inv := fun _ => rfl
/-- The underlying element of `Fin 1 ⊕ Fin 3 → ` of a element in `ContrModule` defined
through the linear equivalence `toFin13Equiv`. -/
abbrev toFin13 (ψ : ContrModule) := toFin13Equiv ψ
/-- The representation of the Lorentz group on `ContrModule`. -/
def lorentzGroupRep : Representation (LorentzGroup 3) ContrModule where
toFun M := {
toFun := fun v => toFin13Equiv.symm ((M.1.map ofReal) *ᵥ v.toFin13),
map_add' := by
intro ψ ψ'
simp [mulVec_add]
map_smul' := by
intro r ψ
simp [mulVec_smul]}
map_one' := by
ext i
simp
map_mul' M N := by
ext i
simp
/-- The representation of the SL(2, ) on `ContrModule` induced by the representation of the
Lorentz group. -/
def SL2CRep : Representation SL(2, ) ContrModule :=
MonoidHom.comp lorentzGroupRep SpaceTime.SL2C.toLorentzGroup
end ContrModule
structure CoModule where
val : Fin 1 ⊕ Fin 3 →
namespace CoModule
/-- The equivalence between `CoModule` and `Fin 1 ⊕ Fin 3 → `. -/
def toFin13Fun : CoModule ≃ (Fin 1 ⊕ Fin 3 → ) where
toFun v := v.val
invFun f := ⟨f⟩
left_inv _ := rfl
right_inv _ := rfl
/-- The instance of `AddCommMonoid` on `CoModule` defined via its equivalence
with `Fin 1 ⊕ Fin 3 → `. -/
instance : AddCommMonoid CoModule := Equiv.addCommMonoid toFin13Fun
/-- The instance of `AddCommGroup` on `CoModule` defined via its equivalence
with `Fin 1 ⊕ Fin 3 → `. -/
instance : AddCommGroup CoModule := Equiv.addCommGroup toFin13Fun
/-- The instance of `Module` on `CoModule` defined via its equivalence
with `Fin 1 ⊕ Fin 3 → `. -/
instance : Module CoModule := Equiv.module toFin13Fun
/-- The linear equivalence between `CoModule` and `(Fin 1 ⊕ Fin 3 → )`. -/
@[simps!]
def toFin13Equiv : CoModule ≃ₗ[] (Fin 1 ⊕ Fin 3 → ) where
toFun := toFin13Fun
map_add' := fun _ _ => rfl
map_smul' := fun _ _ => rfl
invFun := toFin13Fun.symm
left_inv := fun _ => rfl
right_inv := fun _ => rfl
/-- The underlying element of `Fin 1 ⊕ Fin 3 → ` of a element in `CoModule` defined
through the linear equivalence `toFin13Equiv`. -/
abbrev toFin13 (ψ : CoModule) := toFin13Equiv ψ
/-- The representation of the Lorentz group on `CoModule`. -/
def lorentzGroupRep : Representation (LorentzGroup 3) CoModule where
toFun M := {
toFun := fun v => toFin13Equiv.symm ((M.1.map ofReal)⁻¹ᵀ *ᵥ v.toFin13),
map_add' := by
intro ψ ψ'
simp [mulVec_add]
map_smul' := by
intro r ψ
simp [mulVec_smul]}
map_one' := by
ext i
simp
map_mul' M N := by
ext1 x
simp only [SpecialLinearGroup.coe_mul, LinearMap.coe_mk, AddHom.coe_mk, LinearMap.mul_apply,
LinearEquiv.apply_symm_apply, mulVec_mulVec, EmbeddingLike.apply_eq_iff_eq]
refine (congrFun (congrArg _ ?_) _)
simp only [lorentzGroupIsGroup_mul_coe, Matrix.map_mul]
rw [Matrix.mul_inv_rev]
exact transpose_mul _ _
/-- The representation of the SL(2, ) on `ContrModule` induced by the representation of the
Lorentz group. -/
def SL2CRep : Representation SL(2, ) CoModule :=
MonoidHom.comp lorentzGroupRep SpaceTime.SL2C.toLorentzGroup
end CoModule
end
end Lorentz