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 Mathlib.Analysis.InnerProductSpace.PiL2 public import Mathlib.Geometry.Manifold.IsManifold.Basic

Lorentz co vectors

In this module we define Lorentz vectors as real Lorentz tensors with a single up index. We create an API around Lorentz vectors to make working with them as easy as possible.

@[expose] public section

Real contravariant Lorentz vector.

def CoVector (d : := 3) := Fin 1 Fin d
instance {d} : AddCommMonoid (CoVector d) := inferInstanceAs (AddCommMonoid (Fin 1 Fin d ))instance {d} : Module (CoVector d) := inferInstanceAs (Module (Fin 1 Fin d ))instance {d} : AddCommGroup (CoVector d) := inferInstanceAs (AddCommGroup (Fin 1 Fin d ))instance {d} : FiniteDimensional (CoVector d) := inferInstanceAs (FiniteDimensional (Fin 1 Fin d ))

The equivalence between CoVector d and EuclideanSpace ℝ (Fin 1 ⊕ Fin d).

def equivEuclid (d : ) : CoVector d ≃ₗ[] EuclideanSpace (Fin 1 Fin d) := (WithLp.linearEquiv _ _ _).symm
@[ext] lemma eq_of_apply_eq {d : } {v w : CoVector d} (h : i, v i = w i) : v = w := d:v:CoVector dw:CoVector dh: (i : Fin 1 Fin d), v i = w iv = w d:v:CoVector dw:CoVector dh: (i : Fin 1 Fin d), v i = w i(equivEuclid d) v = (equivEuclid d) w d:v:CoVector dw:CoVector dh: (i : Fin 1 Fin d), v i = w ii:Fin 1 Fin d((equivEuclid d) v).ofLp i = ((equivEuclid d) w).ofLp i All goals completed! 🐙instance (d : ) : Norm (CoVector d) where norm := fun v => equivEuclid d vlemma norm_eq_equivEuclid (d : ) (v : CoVector d) : v = equivEuclid d v := rflAll goals completed! 🐙instance isNormedSpace (d : ) : NormedSpace (CoVector d) where norm_smul_le c v := d:c:v:CoVector dc v c * v d:c:v:CoVector dc (equivEuclid d) v c * (equivEuclid d) v All goals completed! 🐙instance (d : ) : Inner (CoVector d) where inner := fun v w => equivEuclid d v, equivEuclid d w⟫_lemma inner_eq_equivEuclid (d : ) (v w : CoVector d) : v, w⟫_ = equivEuclid d v, equivEuclid d w⟫_ := rfl

The Euclidean inner product structure on CoVector.

instance innerProductSpace (d : ) : InnerProductSpace (CoVector d) where norm_sq_eq_re_inner v := d:v:CoVector dv ^ 2 = RCLike.re v, v⟫_ d:v:CoVector d(equivEuclid d) v ^ 2 = RCLike.re (equivEuclid d) v, (equivEuclid d) v⟫_ All goals completed! 🐙 conj_inner_symm x y := d:x:CoVector dy:CoVector d(starRingEnd ) y, x⟫_ = x, y⟫_ d:x:CoVector dy:CoVector d(starRingEnd ) (equivEuclid d) y, (equivEuclid d) x⟫_ = (equivEuclid d) x, (equivEuclid d) y⟫_ All goals completed! 🐙 add_left x y z := d:x:CoVector dy:CoVector dz:CoVector dx + y, z⟫_ = x, z⟫_ + y, z⟫_ d:x:CoVector dy:CoVector dz:CoVector d(equivEuclid d) x + (equivEuclid d) y, (equivEuclid d) z⟫_ = (equivEuclid d) x, (equivEuclid d) z⟫_ + (equivEuclid d) y, (equivEuclid d) z⟫_ All goals completed! 🐙 smul_left x y r := d:x:CoVector dy:CoVector dr:r x, y⟫_ = (starRingEnd ) r * x, y⟫_ d:x:CoVector dy:CoVector dr:r (equivEuclid d) x, (equivEuclid d) y⟫_ = (starRingEnd ) r * (equivEuclid d) x, (equivEuclid d) y⟫_ All goals completed! 🐙

The instance of a ChartedSpace on Vector d.

instance : ChartedSpace (CoVector d) (CoVector d) := chartedSpaceSelf (CoVector d)
instance {d} : CoeFun (CoVector d) (fun _ => Fin 1 Fin d ) where coe := fun v => v@[simp] lemma apply_smul {d : } (c : ) (v : CoVector d) (i : Fin 1 Fin d) : (c v) i = c * v i := rfl@[simp] lemma apply_add {d : } (v w : CoVector d) (i : Fin 1 Fin d) : (v + w) i = v i + w i := rfl@[simp] lemma apply_sub {d : } (v w : CoVector d) (i : Fin 1 Fin d) : (v - w) i = v i - w i := d:v:CoVector dw:CoVector di:Fin 1 Fin d(v - w) i = v i - w i All goals completed! 🐙@[simp] lemma apply_sum {d : } {ι : Type} [Fintype ι] (f : ι CoVector d) (i : Fin 1 Fin d) : ( j, f j) i = j, f j i := Finset.sum_apply i Finset.univ f@[simp] lemma neg_apply {d : } (v : CoVector d) (i : Fin 1 Fin d) : (-v) i = - v i := rfl@[simp] lemma zero_apply {d : } (i : Fin 1 Fin d) : (0 : CoVector d) i = 0 := rfl

Basis

The basis on Vector d indexed by Fin 1 ⊕ Fin d.

def basis {d : } : Basis (Fin 1 Fin d) (CoVector d) := Pi.basisFun _
@[simp] lemma basis_apply {d : } (μ ν : Fin 1 Fin d) : basis μ ν = if μ = ν then 1 else 0 := d:μ:Fin 1 Fin dν:Fin 1 Fin dbasis μ ν = if μ = ν then 1 else 0 d:μ:Fin 1 Fin dν:Fin 1 Fin d(Pi.basisFun (Fin 1 Fin d)) μ ν = if μ = ν then 1 else 0 erw [d:μ:Fin 1 Fin dν:Fin 1 Fin dPi.single μ 1 ν = if μ = ν then 1 else 0 d:μ:Fin 1 Fin dν:Fin 1 Fin d(if ν = μ then 1 else 0) = if μ = ν then 1 else 0d:μ:Fin 1 Fin dν:Fin 1 Fin d(if ν = μ then 1 else 0) = if μ = ν then 1 else 0 d:μ:Fin 1 Fin dν:Fin 1 Fin d(ν = μ) = (μ = ν) All goals completed! 🐙lemma basis_repr_apply {d : } (p : CoVector d) (μ : Fin 1 Fin d) : basis.repr p μ = p μ := d:p:CoVector dμ:Fin 1 Fin d(basis.repr p) μ = p μ d:p:CoVector dμ:Fin 1 Fin d((Pi.basisFun (Fin 1 Fin d)).repr p) μ = p μ erw [d:p:CoVector dμ:Fin 1 Fin dp μ = p μAll goals completed! 🐙lemma map_apply_eq_basis_mulVec {d : } (f : CoVector d →ₗ[] CoVector d) (p : CoVector d) : (f p) = (LinearMap.toMatrix basis basis) f *ᵥ p := d:f:CoVector d →ₗ[] CoVector dp:CoVector df p = (LinearMap.toMatrix basis basis) f *ᵥ p All goals completed! 🐙