Imports
/- 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 -/ module public import Physlib.Relativity.Tensors.RealTensor.Vector.MinkowskiProduct

Lorentz Velocities

In this module we define Lorentz velocities to be Lorentz vectors which have norm equal to one and which are future-directed.

@[expose] public section

A Lorentz Velocity is a Lorentz vector which has norm equal to one and which is future-directed.

def Velocity (d : := 3) : Set (Vector d) := fun v => v, v⟫ₘ = (1 : ) 0 < v.timeComponent
@[ext] lemma ext {v w : Velocity d} (h : v.1 = w.1) : v = w := d:v:(Velocity d)w:(Velocity d)h:v = wv = w All goals completed! 🐙lemma mem_iff {v : Vector d} : v Velocity d v, v⟫ₘ = (1 : ) 0 < v.timeComponent := d:v:Vector dv Velocity d (minkowskiProduct v) v = 1 0 < v.timeComponent All goals completed! 🐙@[simp] lemma minkowskiProduct_self_eq_one (v : Velocity d) : v.1, v.1⟫ₘ = (1 : ) := v.2.1@[simp] lemma timeComponent_pos (v : Velocity d) : 0 < v.1.timeComponent := v.2.2@[simp] lemma timeComponent_nonneg (v : Velocity d) : 0 v.1.timeComponent := d:v:(Velocity d)0 (↑v).timeComponent All goals completed! 🐙@[simp] lemma timeComponent_abs (v : Velocity d) : |v.1.timeComponent| = v.1.timeComponent := d:v:(Velocity d)|(↑v).timeComponent| = (↑v).timeComponent All goals completed! 🐙d:v:(Velocity d)(↑v).timeComponent ^ 2 - (↑v).spatialPart ^ 2 + (↑v).spatialPart ^ 2 (↑v).timeComponent ^ 2 All goals completed! 🐙d:v:(Velocity d)(↑v).spatialPart ^ 2 = v (Sum.inl 0) ^ 2 - ((↑v).timeComponent ^ 2 - (↑v).spatialPart ^ 2) All goals completed! 🐙d:u:(Velocity d)v:(Velocity d)(↑u).timeComponent * (↑v).timeComponent - (↑u).spatialPart * (↑v).spatialPart (↑u).timeComponent * (↑v).timeComponent - inner (↑u).spatialPart (↑v).spatialPart d:u:(Velocity d)v:(Velocity d)(↑u).timeComponent * (↑v).timeComponent (↑u).timeComponent * (↑v).timeComponentd:u:(Velocity d)v:(Velocity d)inner (↑u).spatialPart (↑v).spatialPart (↑u).spatialPart * (↑v).spatialPart d:u:(Velocity d)v:(Velocity d)(↑u).timeComponent * (↑v).timeComponent (↑u).timeComponent * (↑v).timeComponent All goals completed! 🐙 d:u:(Velocity d)v:(Velocity d)inner (↑u).spatialPart (↑v).spatialPart (↑u).spatialPart * (↑v).spatialPart All goals completed! 🐙lemma one_add_minkowskiProduct_ne_zero (u v : Velocity d) : 1 + u.1, v.1⟫ₘ 0 := d:u:(Velocity d)v:(Velocity d)1 + (minkowskiProduct u) v 0 All goals completed! 🐙lemma minkowskiProduct_continuous_snd (u : Vector d) : Continuous fun (x : Velocity d) => u, x.1⟫ₘ := d:u:Vector dContinuous fun x => (minkowskiProduct u) x All goals completed! 🐙d:u:Vector dh1:(fun x => (minkowskiProduct x) u) = fun x => (minkowskiProduct u) xContinuous fun x => (minkowskiProduct u) x All goals completed! 🐙

Zero

@[simp] lemma zero_timeComponent : (0 : Velocity d).1.timeComponent = 1 := d:(↑0).timeComponent = 1 d:(basis (Sum.inl 0)).timeComponent = 1 All goals completed! 🐙

Topology

lemma isPathConnected : IsPathConnected (@Set.univ (Velocity d)) := d:IsPathConnected Set.univ d:zero Set.univ y : (Velocity d)⦄, y Set.univ JoinedIn Set.univ zero y d: y : (Velocity d)⦄, y Set.univ JoinedIn Set.univ zero y d:y:(Velocity d)a:y Set.univJoinedIn Set.univ zero y d:y:(Velocity d)a:y Set.univ (t : unitInterval), (pathFromZero y) t Set.univ All goals completed! 🐙