(******************************************************************************) (* :Title: Lorentz Group *) (* :Author: Jeff Olson *) (* :Summary: Extends the definitions in ClassicalGroups to include the Lorentz group. *) (* :Package Version: 1.0 *) (* :Copyright: *) (* :Context: JOlson`LorentzGroup` *) (* :Category: Group Theory and Algebra *) (* :History: *) (* :Keywords: *) (* :Sources: *) (* :Warnings: *) (* :Mathematica Version: 4.0 *) (* :Limitations: *) (* :Discussion: *) (* :Requirements: MatrixAlgebra, SpinMatrices, ClassicalGroups *) (* :Examples: *) (******************************************************************************) (******************************************************************************) BeginPackage["JOlson`LorentzGroup`", {"JOlson`MatrixAlgebra`", "JOlson`SpinMatrices`", "JOlson`ClassicalGroups`"} ] Unprotect[ MetricTensor, TimeReversal, SpaceReversal ] ClearAll[ MetricTensor, TimeReversal, SpaceReversal ] Through[{Unprotect, ClearAll}[ LorentzGroup, LorentzGroupQ, LorentzInverse, LorentzRotation, LorentzBoost, SpaceTimeInversion, SpinorMap ]] LorentzGroup::usage = "LorentzGroup represents the general, homogeneous Lorentz group. LorentzGroup[n, phi]. LorentzGroup[omega, zeta]." LorentzGroupQ::usage = "LorentzGroupQ[lambda] determines whether lambda is an element of the Lorentz group." LorentzInverse::usage = "LorentzInverse[lambda] gives the inverse transformation for lambda. LorentzInverse is more efficient than Inverse for Lorentz transformations." LorentzRotation::usage = "LorentzRotation gives an element of the rotation subgroup of the proper, orthochronus Lorentz group. LorentzRotation[rot] gives the rotation corresponding to the 3x3 rotation rot. LorentzRotation[n, phi] gives the rotation of phi about the nth axis. LorentzRotation[psi, theta, phi] gives the rotation for the given Euler angles." LorentzBoost::usage = "LorentzBoost[n, theta] gives a boost of theta along the nth axis. The boost parameter theta is given by ArcTanh[v/c]." MetricTensor::usage = "MetricTensor is the 4x4 metric tensor of Minkowski space. It has signature (- + + +)." SpaceTimeInversion::usage = "SpaceTimeInversion[n] gives the time reversal transformation for n = 0, and space inversions for n = 1, 2, 3." TimeReversal::usage = "TimeReversal is the time reversal transformation." SpaceReversal::usage = "SpaceReversal is the space reversal transformation." SpinorMap::usage = "SpinorMap is the 2 to 1 homomorphism from SL[2, \[DoubleStruckCapitalC]] to the proper, orthochronous Lorentz group." (******************************************************************************) (******************************************************************************) Begin["`Private`"] ClearAll[sindex, stindex, gindex, vec3, vec4, mat2, mat3, mat4, g, gi] (* patterns *) sindex = (1 | 2 | 3); stindex = (0 | 1 | 2 | 3); gindex = Alternatives@@Range[6]; vec3 = Table[Blank[], {3}]; vec4 = Table[Blank[], {4}]; mat2 = Table[Blank[], {2}, {2}]; mat3 = Table[Blank[], {3}, {3}]; mat4 = Table[Blank[], {4}, {4}]; LorentzMatrix[s_, v1:vec3, v2:vec3, m:mat3] := Prepend[Transpose[Prepend[Transpose[m], v2]], Prepend[v1, s]] GroupOrder[LorentzGroup] ^= 6; Generators[LorentzGroup] ^= Join[ Map[LorentzMatrix[0, {0, 0, 0}, {0, 0, 0}, #]&, Generators[SO3]], Map[LorentzMatrix[0, #, #, ZeroMatrix[3]]&, DiagonalMatrix[{I, I, I}]] ]; MetricTensor = DiagonalMatrix[{-1, 1, 1, 1}]; LorentzGroupQ[m:mat4] := Transpose[m].MetricTensor.m == MetricTensor LorentzInverse[m:mat4] := MetricTensor.Transpose[m].MetricTensor LorentzGroup[n:gindex, phi_] := ExpToTrig[ MatrixExp[I phi Generator[LorentzGroup, n]]] LorentzGroup[omega:vec3, zeta:vec3] := MatrixExp[I Join[omega,zeta].Generators[LorentzGroup]] LorentzRotation[n:sindex, phi_] := LorentzGroup[n, phi] LorentzRotation[m:mat3] := LorentzMatrix[1, {0, 0, 0}, {0, 0, 0}, m] LorentzRotation[args__] := LorentzRotation[SO3[args]] LorentzBoost[n:sindex, phi_] := LorentzGroup[n+3, phi] LorentzBoost[zeta:vec3] := LorentzGroup[{0, 0, 0}, zeta] SpaceTimeInversion[n:stindex] := DiagonalMatrix[RotateRight[{-1, 1, 1, 1}, n]] TimeReversal := MetricTensor SpaceReversal := -MetricTensor g = {{1, 0, 0, 1}, {0, 1, -I, 0}, {0, 1, I, 0}, {1, 0, 0, -1}}; gi = (1/2) Adjoint[g]; r[{{a_, b_}, {c_, d_}}] := { {a Conjugate[a], a Conjugate[b], b Conjugate[a], b Conjugate[b]}, {a Conjugate[c], a Conjugate[d], b Conjugate[c], b Conjugate[d]}, {c Conjugate[a], c Conjugate[b], d Conjugate[a], d Conjugate[b]}, {c Conjugate[c], c Conjugate[d], d Conjugate[c], d Conjugate[d]} }; SpinorMap[m:mat2] := gi.r[m].g End[ ] (******************************************************************************) (******************************************************************************) Protect[ LorentzGroup, LorentzGroupQ, LorentzInverse, LorentzRotation, LorentzBoost, MetricTensor, SpaceTimeInversion, TimeReversal, SpaceReversal, SpinorMap ] EndPackage[ ] (******************************************************************************) (******************************************************************************)