Imports
/-
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
-/
module
public import Physlib.Relativity.Tensors.RealTensor.Vector.Causality.BasicProperties of time like vectors
@[expose] public sectionFor timelike vectors with negative time components, their time components multiply to give a positive number
@[simp]
lemma timelike_neg_time_component_product {d : ℕ} (v w : Vector d)
(hv_neg : v (Sum.inl 0) < 0) (hw_neg : w (Sum.inl 0) < 0) :
v (Sum.inl 0) * w (Sum.inl 0) > 0 := d:ℕv:Vector dw:Vector dhv_neg:v (Sum.inl 0) < 0hw_neg:w (Sum.inl 0) < 0⊢ v (Sum.inl 0) * w (Sum.inl 0) > 0
All goals completed! 🐙For timelike vectors, the Minkowski inner product is positive
lemma timeLike_iff_norm_sq_pos {d : ℕ} (p : Vector d) :
causalCharacter p = CausalCharacter.timeLike ↔ 0 < ⟪p, p⟫ₘ := d:ℕp:Vector d⊢ p.causalCharacter = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) p
d:ℕp:Vector d⊢ (if (minkowskiProduct p) p = 0 then CausalCharacter.lightLike
else if 0 < (minkowskiProduct p) p then CausalCharacter.timeLike else CausalCharacter.spaceLike) =
CausalCharacter.timeLike ↔
0 < (minkowskiProduct p) p
d:ℕp:Vector dh✝:(minkowskiProduct p) p = 0⊢ CausalCharacter.lightLike = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) pd:ℕp:Vector dh✝:¬(minkowskiProduct p) p = 0⊢ (if 0 < (minkowskiProduct p) p then CausalCharacter.timeLike else CausalCharacter.spaceLike) =
CausalCharacter.timeLike ↔
0 < (minkowskiProduct p) p
d:ℕp:Vector dh✝:(minkowskiProduct p) p = 0⊢ CausalCharacter.lightLike = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) p d:ℕp:Vector dh:(minkowskiProduct p) p = 0⊢ CausalCharacter.lightLike = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) p
All goals completed! 🐙
d:ℕp:Vector dh✝:¬(minkowskiProduct p) p = 0⊢ (if 0 < (minkowskiProduct p) p then CausalCharacter.timeLike else CausalCharacter.spaceLike) =
CausalCharacter.timeLike ↔
0 < (minkowskiProduct p) p d:ℕp:Vector dh✝¹:¬(minkowskiProduct p) p = 0h✝:0 < (minkowskiProduct p) p⊢ CausalCharacter.timeLike = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) pd:ℕp:Vector dh✝¹:¬(minkowskiProduct p) p = 0h✝:¬0 < (minkowskiProduct p) p⊢ CausalCharacter.spaceLike = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) p
d:ℕp:Vector dh✝¹:¬(minkowskiProduct p) p = 0h✝:0 < (minkowskiProduct p) p⊢ CausalCharacter.timeLike = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) p d:ℕp:Vector dh✝:¬(minkowskiProduct p) p = 0h:0 < (minkowskiProduct p) p⊢ CausalCharacter.timeLike = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) p
All goals completed! 🐙
d:ℕp:Vector dh✝¹:¬(minkowskiProduct p) p = 0h✝:¬0 < (minkowskiProduct p) p⊢ CausalCharacter.spaceLike = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) p d:ℕp:Vector dh✝:¬(minkowskiProduct p) p = 0h:¬0 < (minkowskiProduct p) p⊢ CausalCharacter.spaceLike = CausalCharacter.timeLike ↔ 0 < (minkowskiProduct p) p
All goals completed! 🐙For timeLike vectors in Minkowski space, the inner product of the spatial part is less than the square of the time component
d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)h_spatial_sum:∑ x, v.spatialPart.ofLp x * v.spatialPart.ofLp x = ∑ i, v (Sum.inr i) * v (Sum.inr i)h_time:v.timeComponent = v (Sum.inl 0)h_norm_pos:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)h:∑ i, v (Sum.inr i) * v (Sum.inr i) < v (Sum.inl 0) * v (Sum.inl 0)⊢ ∑ i, v (Sum.inr i) * v (Sum.inr i) < v (Sum.inl 0) * v (Sum.inl 0)
exact h All goals completed! 🐙For nonzero timelike vectors, the time component is nonzero
@[simp]
lemma time_component_ne_zero_of_timelike {d : ℕ} {v : Vector d}
(hv : causalCharacter v = .timeLike) :
v (Sum.inl 0) ≠ 0 := by d:ℕv:Vector dhv:v.causalCharacter = CausalCharacter.timeLike⊢ v (Sum.inl 0) ≠ 0
by_contra h d:ℕv:Vector dhv:v.causalCharacter = CausalCharacter.timeLikeh:v (Sum.inl 0) = 0⊢ False
rw [timeLike_iff_norm_sq_pos d:ℕv:Vector dhv:0 < (minkowskiProduct v) vh:v (Sum.inl 0) = 0⊢ False d:ℕv:Vector dhv:0 < (minkowskiProduct v) vh:v (Sum.inl 0) = 0⊢ False] at hv d:ℕv:Vector dhv:0 < (minkowskiProduct v) vh:v (Sum.inl 0) = 0⊢ False
rw [minkowskiProduct_toCoord d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)h:v (Sum.inl 0) = 0⊢ False d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)h:v (Sum.inl 0) = 0⊢ False] at hv d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)h:v (Sum.inl 0) = 0⊢ False
simp at hv d:ℕv:Vector dh:v (Sum.inl 0) = 0hv:∑ i, v (Sum.inr i) * v (Sum.inr i) < v (Sum.inl 0) * v (Sum.inl 0)⊢ False
rw [h d:ℕv:Vector dh:v (Sum.inl 0) = 0hv:∑ i, v (Sum.inr i) * v (Sum.inr i) < 0 * 0⊢ False d:ℕv:Vector dh:v (Sum.inl 0) = 0hv:∑ i, v (Sum.inr i) * v (Sum.inr i) < 0 * 0⊢ False] at hv d:ℕv:Vector dh:v (Sum.inl 0) = 0hv:∑ i, v (Sum.inr i) * v (Sum.inr i) < 0 * 0⊢ False
simp at hv d:ℕv:Vector dh:v (Sum.inl 0) = 0hv:∑ i, v (Sum.inr i) * v (Sum.inr i) < 0⊢ False
have h_spatial_nonneg : 0 ≤ ∑ i, v (Sum.inr i) * v (Sum.inr i) :=
Finset.sum_nonneg (fun i _ => mul_self_nonneg (v (Sum.inr i))) d:ℕv:Vector dh:v (Sum.inl 0) = 0hv:∑ i, v (Sum.inr i) * v (Sum.inr i) < 0h_spatial_nonneg:0 ≤ ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ False
exact lt_irrefl 0 (h_spatial_nonneg.trans_lt hv) All goals completed! 🐙For timelike vectors, the time component is nonzero
lemma timelike_time_component_ne_zero {d : ℕ} {v : Vector d}
(hv : causalCharacter v = .timeLike) :
timeComponent v ≠ 0 := time_component_ne_zero_of_timelike hvA vector is timelike if and only if its time component squared is less than the sum of its spatial components squared
lemma timeLike_iff_time_lt_space {d : ℕ} {v : Vector d} :
causalCharacter v = .timeLike ↔
⟪spatialPart v, spatialPart v⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0) := by d:ℕv:Vector d⊢ v.causalCharacter = CausalCharacter.timeLike ↔ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)
constructor mp d:ℕv:Vector d⊢ v.causalCharacter = CausalCharacter.timeLike → ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)mpr d:ℕv:Vector d⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0) → v.causalCharacter = CausalCharacter.timeLike
· mp d:ℕv:Vector d⊢ v.causalCharacter = CausalCharacter.timeLike → ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0) intro h_timelike mp d:ℕv:Vector dh_timelike:v.causalCharacter = CausalCharacter.timeLike⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)
rw [timeLike_iff_norm_sq_pos, mp d:ℕv:Vector dh_timelike:0 < (minkowskiProduct v) v⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0) mp d:ℕv:Vector dh_timelike:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0) minkowskiProduct_toCoord mp d:ℕv:Vector dh_timelike:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0) mp d:ℕv:Vector dh_timelike:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)] at h_timelikemp d:ℕv:Vector dh_timelike:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)
simp only [Fin.isValue, sub_pos] at h_timelike mp d:ℕv:Vector dh_timelike:∑ i, v (Sum.inr i) * v (Sum.inr i) < v (Sum.inl 0) * v (Sum.inl 0)⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0); exact h_timelike All goals completed! 🐙
· mpr d:ℕv:Vector d⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0) → v.causalCharacter = CausalCharacter.timeLike intro h_time_lt_space mpr d:ℕv:Vector dh_time_lt_space:⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)⊢ v.causalCharacter = CausalCharacter.timeLike
rw [timeLike_iff_norm_sq_pos, mpr d:ℕv:Vector dh_time_lt_space:⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)⊢ 0 < (minkowskiProduct v) v mpr d:ℕv:Vector dh_time_lt_space:⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)⊢ 0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i) minkowskiProduct_toCoord mpr d:ℕv:Vector dh_time_lt_space:⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)⊢ 0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)mpr d:ℕv:Vector dh_time_lt_space:⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)⊢ 0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)]mpr d:ℕv:Vector dh_time_lt_space:⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)⊢ 0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)
simp only [Fin.isValue, sub_pos] mpr d:ℕv:Vector dh_time_lt_space:⟪v.spatialPart, v.spatialPart⟫_ℝ < v (Sum.inl 0) * v (Sum.inl 0)⊢ ∑ i, v (Sum.inr i) * v (Sum.inr i) < v (Sum.inl 0) * v (Sum.inl 0)
exact h_time_lt_space All goals completed! 🐙Time component squared is positive for timelike vectors
@[simp]
lemma timeComponent_squared_pos_of_timelike {d : ℕ} {v : Vector d}
(hv : causalCharacter v = .timeLike) :
0 < (timeComponent v)^2 := by d:ℕv:Vector dhv:v.causalCharacter = CausalCharacter.timeLike⊢ 0 < v.timeComponent ^ 2
exact pow_two_pos_of_ne_zero (time_component_ne_zero_of_timelike hv) All goals completed! 🐙For timelike vectors, the spatial norm squared is strictly less than the time component squared
lemma timelike_spatial_lt_time_squared {d : ℕ} {v : Vector d}
(hv : causalCharacter v = .timeLike) :
⟪spatialPart v, spatialPart v⟫_ℝ < (timeComponent v)^2 := by d:ℕv:Vector dhv:v.causalCharacter = CausalCharacter.timeLike⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v.timeComponent ^ 2
rw [timeLike_iff_norm_sq_pos, d:ℕv:Vector dhv:0 < (minkowskiProduct v) v⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v.timeComponent ^ 2 d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v.timeComponent ^ 2 minkowskiProduct_toCoord d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v.timeComponent ^ 2 d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v.timeComponent ^ 2] at hv d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ⟪v.spatialPart, v.spatialPart⟫_ℝ < v.timeComponent ^ 2
simp only [PiLp.inner_apply] d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ∑ x, ⟪v (Sum.inr x), v (Sum.inr x)⟫_ℝ < v.timeComponent ^ 2
have h_time : timeComponent v = v (Sum.inl 0) := rfl d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)h_time:v.timeComponent = v (Sum.inl 0)⊢ ∑ x, ⟪v (Sum.inr x), v (Sum.inr x)⟫_ℝ < v.timeComponent ^ 2
simp [h_time, pow_two] d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)h_time:v.timeComponent = v (Sum.inl 0)⊢ ∑ x, v (Sum.inr x) * v (Sum.inr x) < v (Sum.inl 0) * v (Sum.inl 0)
have h_norm_pos : 0 < v (Sum.inl 0) * v (Sum.inl 0) -
∑ i, v (Sum.inr i) * v (Sum.inr i) := hv d:ℕv:Vector dhv:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)h_time:v.timeComponent = v (Sum.inl 0)h_norm_pos:0 < v (Sum.inl 0) * v (Sum.inl 0) - ∑ i, v (Sum.inr i) * v (Sum.inr i)⊢ ∑ x, v (Sum.inr x) * v (Sum.inr x) < v (Sum.inl 0) * v (Sum.inl 0)
exact lt_of_sub_pos h_norm_pos All goals completed! 🐙