feat: Causality for Lorentz vectors

Co-Authored-By: Matteo Cipollina <188064818+or4nge19@users.noreply.github.com>
This commit is contained in:
jstoobysmith 2025-03-18 10:59:00 +00:00
parent 198d939c0d
commit 27da280847
3 changed files with 121 additions and 0 deletions

View file

@ -196,6 +196,7 @@ import PhysLean.Relativity.Lorentz.RealTensor.Metrics.Basic
import PhysLean.Relativity.Lorentz.RealTensor.Metrics.Pre
import PhysLean.Relativity.Lorentz.RealTensor.Units.Pre
import PhysLean.Relativity.Lorentz.RealTensor.Vector.Basic
import PhysLean.Relativity.Lorentz.RealTensor.Vector.Causality
import PhysLean.Relativity.Lorentz.RealTensor.Vector.Pre.Basic
import PhysLean.Relativity.Lorentz.RealTensor.Vector.Pre.Contraction
import PhysLean.Relativity.Lorentz.RealTensor.Vector.Pre.Modules

View file

@ -123,6 +123,18 @@ lemma innerProduct_toCoord {d : } (p q : Vector d) :
simp
· simp
@[simp]
lemma innerProduct_zero_left {d : } (q : Vector d) :
⟪0, q⟫ₘ = 0 := by
rw [innerProduct_toCoord]
simp [toCoord]
@[simp]
lemma innerProduct_zero_right {d : } (p : Vector d) :
⟪p, 0⟫ₘ = 0 := by
rw [innerProduct_toCoord]
simp [toCoord]
end Vector
end Lorentz

View file

@ -0,0 +1,108 @@
/-
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Matteo Cipollina, Joseph Tooby-Smith
-/
import PhysLean.Relativity.Lorentz.RealTensor.Vector.Basic
/-!
## Causality of Lorentz vectors
-/
open IndexNotation
open CategoryTheory
open MonoidalCategory
open Matrix
open MatrixGroups
open Complex
open TensorProduct
open IndexNotation
open CategoryTheory
open TensorTree
open OverColor.Discrete
noncomputable section
namespace Lorentz
open realLorentzTensor
namespace Vector
/-- Classification of lorentz vectors based on their causal character. -/
inductive CausalCharacter
| timeLike
| lightLike
| spaceLike
deriving DecidableEq
/-- A Lorentz vector `p` is
- `lightLike` if `⟪p, p⟫ₘ = 0`.
- `timeLike` if `0 < ⟪p, p⟫ₘ`.
- `spaceLike` if `⟪p, p⟫ₘ < 0`.
Note that `⟪p, p⟫ₘ` is defined in the +--- convention.
-/
def causalCharacter {d : } (p : Vector d) : CausalCharacter :=
let v0 := ⟪p, p⟫ₘ
if v0 = 0 then CausalCharacter.lightLike
else if 0 < v0 then CausalCharacter.timeLike
else CausalCharacter.spaceLike
/-- The Lorentz vector `p` and `-p` have the same causalCharacter -/
lemma neg_causalCharacter_eq_self {d : } (p : Vector d) :
causalCharacter (-p) = causalCharacter p := by
have h : ⟪-p, -p⟫ₘ = ⟪p, p⟫ₘ := by
simp [innerProduct_toCoord, toCoord]
simp [causalCharacter, h]
/-- The future light cone of a Lorentz vector `p` is defined as those
vectors `q` such that
- `causalCharacter (q - p)` is `timeLike` and
- `(q - p) (Sum.inl 0)` is positive. -/
def interiorFutureLightCone {d : } (p : Vector d) : Set (Vector d) :=
{q | causalCharacter (q - p) = .timeLike ∧ 0 < (q - p) (Sum.inl 0)}
/-- The backward light cone of a Lorentz vector `p` is defined as those
vectors `q` such that
- `causalCharacter (q - p)` is `timeLike` and
- `(q - p) (Sum.inl 0)` is negative. -/
def interiorPastLightCone {d : } (p : Vector d) : Set (Vector d) :=
{q | causalCharacter (q - p) = .timeLike ∧ (q - p) (Sum.inl 0) < 0}
/-- The light cone boundary (null surface) of a spacetime point `p`. -/
def lightConeBoundary {d : } (p : Vector d) : Set (Vector d) :=
{q | causalCharacter (q - p) = .lightLike}
/-- The future light cone boundary (null surface) of a spacetime point `p`. -/
def futureLightConeBoundary {d : } (p : Vector d) : Set (Vector d) :=
{q | causalCharacter (q - p) = .lightLike ∧ 0 ≤ (q - p) (Sum.inl 0)}
/-- The past light cone boundary (null surface) of a spacetime point `p`. -/
def pastLightConeBoundary {d : } (p : Vector d) : Set (Vector d) :=
{q | causalCharacter (q - p) = .lightLike ∧ (q - p) (Sum.inl 0) ≤ 0}
lemma self_mem_lightConeBoundary {d : } (p : Vector d) : p ∈ lightConeBoundary p := by
simp [lightConeBoundary, causalCharacter]
/-- A proposition which is true if `q` is in the causal future of event `p`. -/
def causallyFollows {d : } (p q : Vector d) : Prop :=
q ∈ interiorFutureLightCone p q ∈ futureLightConeBoundary p
/-- A proposition which is true if `q` is in the causal past of event `p`. -/
def causallyPrecedes {d : } (p q : Vector d) : Prop :=
q ∈ interiorPastLightCone p q ∈ pastLightConeBoundary p
/-- Events `p` and `q` are causally related. -/
def causallyRelated {d : } (p q : Vector d) : Prop :=
causallyFollows p q causallyFollows q p
/-- Events p and q are causally unrelated (spacelike separated). -/
def causallyUnrelated {d : } (p q : Vector d) : Prop :=
causalCharacter (p - q) = CausalCharacter.spaceLike
/-- The causal diamond between events p and q, where p is assumed to causally precede q. -/
def causalDiamond {d : } (p q : Vector d) : Set (Vector d) :=
{r | causallyFollows p r ∧ causallyFollows r q}
end Vector
end Lorentz