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.Tensorial public import Physlib.Relativity.Tensors.RealTensor.Metrics.Basic

Minkowski product on Lorentz vectors

In this module we define and create an API around the Minkowski product on Lorentz vectors.

@[expose] public section

The minkowskiProduct

The Minkowski product of Lorentz vectors in the +--- convention..

def minkowskiProductMap {d : } (p q : Vector d) : := {η' d | μ ν p | μ q | ν}ᵀ.toField
All goals completed! 🐙) (d:p:Vector dq:Vector dx:Fin 1 Fin dx Finset.univ minkowskiMatrix x x * p x = 0 All goals completed! 🐙)] d:p:Vector dq:Vector dp (Sum.inl 0) * q (Sum.inl 0) + - x, p (Sum.inr x) * q (Sum.inr x) = p (Sum.inl 0) * q (Sum.inl 0) - i, p (Sum.inr i) * q (Sum.inr i) All goals completed! 🐙lemma minkowskiProductMap_symm {d : } (p q : Vector d) : minkowskiProductMap p q = minkowskiProductMap q p := d:p:Vector dq:Vector dp.minkowskiProductMap q = q.minkowskiProductMap p All goals completed! 🐙@[simp] lemma minkowskiProductMap_add_fst {d : } (p q r : Vector d) : minkowskiProductMap (p + q) r = minkowskiProductMap p r + minkowskiProductMap q r := d:p:Vector dq:Vector dr:Vector d(p + q).minkowskiProductMap r = p.minkowskiProductMap r + q.minkowskiProductMap r d:p:Vector dq:Vector dr:Vector dp (Sum.inl 0) * r (Sum.inl 0) + q (Sum.inl 0) * r (Sum.inl 0) - ( x, p (Sum.inr x) * r (Sum.inr x) + x, q (Sum.inr x) * r (Sum.inr x)) = p (Sum.inl 0) * r (Sum.inl 0) - x, p (Sum.inr x) * r (Sum.inr x) + (q (Sum.inl 0) * r (Sum.inl 0) - x, q (Sum.inr x) * r (Sum.inr x)) All goals completed! 🐙All goals completed! 🐙@[simp] lemma minkowskiProductMap_smul_fst {d : } (c : ) (p q : Vector d) : minkowskiProductMap (c p) q = c * minkowskiProductMap p q := d:c:p:Vector dq:Vector d(c p).minkowskiProductMap q = c * p.minkowskiProductMap q All goals completed! 🐙All goals completed! 🐙

The Minkowski product of two Lorentz vectors as a linear map.

d: (y : Vector d), Continuous fun x => { toFun := fun q => x.minkowskiProductMap q, map_add' := , map_smul' := , cont := } y d:q:Vector dContinuous fun x => { toFun := fun q => x.minkowskiProductMap q, map_add' := , map_smul' := , cont := } q d:q:Vector dContinuous fun x => x.minkowskiProductMap q d:q:Vector d| Continuous fun x => x.minkowskiProductMap q d:q:Vector dp:Vector d| p.minkowskiProductMap q d:q:Vector dp:Vector d| p (Sum.inl 0) * q (Sum.inl 0) - i, p (Sum.inr i) * q (Sum.inr i) All goals completed! 🐙
@[inherit_doc minkowskiProduct] scoped notation "⟪" p ", " q "⟫ₘ" => minkowskiProduct p qlemma minkowskiProduct_apply {d : } (p q : Vector d) : p, q⟫ₘ = minkowskiProductMap p q := rfld:p:Vector dq:Vector dq.minkowskiProductMap p = (minkowskiProduct q) p All goals completed! 🐙All goals completed! 🐙d:p:Vector dq:Vector dp (Sum.inl 0) * q (Sum.inl 0) - i, p (Sum.inr i) * q (Sum.inr i) = μ, minkowskiMatrix μ μ * p μ * q μ d:p:Vector dq:Vector dp (Sum.inl 0) * q (Sum.inl 0) - i, p (Sum.inr i) * q (Sum.inr i) = p (Sum.inl 0) * q (Sum.inl 0) + - x, p (Sum.inr x) * q (Sum.inr x) All goals completed! 🐙d:p:Vector dq:Vector dΛ:(LorentzGroup d)toField ((contrT 0 0 1 ) ((prodT ((contrT 1 0 2 ) ((prodT (coMetric d)) (Tensorial.toTensor p)))) (Tensorial.toTensor q))) = (minkowskiProduct p) q All goals completed! 🐙d:p:Vector dp.timeComponent * p.timeComponent = RCLike.re p.timeComponent * RCLike.re p.timeComponent + RCLike.im p.timeComponent * RCLike.im p.timeComponent All goals completed! 🐙 d:p:Vector dinner p.spatialPart p.spatialPart = p.spatialPart ^ 2 All goals completed! 🐙d:p:Vector dp.timeComponent ^ 2 - p.spatialPart ^ 2 p.timeComponent ^ 2 All goals completed! 🐙d:μ:Fin 1 Fin dp:Vector d μ_1, minkowskiMatrix μ_1 μ_1 * basis μ μ_1 * p μ_1 = minkowskiMatrix μ μ * p μ All goals completed! 🐙All goals completed! 🐙d:p:Vector dh: (q : Vector d), (minkowskiProduct p) q = 0μ:Fin 1 Fin d0 = minkowskiMatrix μ μ * 0 μ All goals completed! 🐙 d:p:Vector dp = 0 (q : Vector d), (minkowskiProduct p) q = 0 d:p:Vector dh:p = 0 (q : Vector d), (minkowskiProduct p) q = 0 d: (q : Vector d), (minkowskiProduct 0) q = 0 All goals completed! 🐙

The adjoint of a linear map

d:f:Vector d →ₗ[] Vector dh: (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) qp:Vector dh1: (q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) qh2:f p = pf p = p All goals completed! 🐙 d:f:Vector d →ₗ[] Vector df = LinearMap.id (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q d:f:Vector d →ₗ[] Vector dh:f = LinearMap.id (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q d: (p q : Vector d), (minkowskiProduct (LinearMap.id p)) q = (minkowskiProduct p) q All goals completed! 🐙

The adjoint of a linear map from Vector d to itself with respect to the minkowskiProduct.

def adjoint {d : } (f : Vector d →ₗ[] Vector d) : Vector d →ₗ[] Vector d := (LinearMap.toMatrix Vector.basis Vector.basis).symm <| minkowskiMatrix.dual <| LinearMap.toMatrix Vector.basis Vector.basis f
d:f:Vector d →ₗ[] Vector dp:Vector dq:Vector dμ:Fin 1 Fin dx✝¹:μ Finset.univν:Fin 1 Fin dx✝:ν Finset.univminkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν = minkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν * 1 All goals completed! 🐙All goals completed! 🐙

The property IsLorentz of linear maps

A linear map Vector d →ₗ[ℝ] Vector d satisfies IsLorentz if it preserves the minkowski product.

def IsLorentz {d : } (f : Vector d →ₗ[] Vector d) : Prop := p q : Vector d, f p, f q⟫ₘ = p, q⟫ₘ
lemma isLorentz_iff {d : } (f : Vector d →ₗ[] Vector d) : IsLorentz f p q : Vector d, f p, f q⟫ₘ = p, q⟫ₘ := d:f:Vector d →ₗ[] Vector dIsLorentz f (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q All goals completed! 🐙d:f:Vector d →ₗ[] Vector dh: (μ ν : Fin 1 Fin d), (minkowskiProduct (f (basis μ))) (f (basis ν)) = (minkowskiProduct (basis μ)) (basis ν)p:Vector dq:Vector dhp:p = μ, p μ basis μhq:q = ν, q ν basis ν(minkowskiProduct (f (∑ μ, p μ basis μ))) (f (∑ ν, q ν basis ν)) = (minkowskiProduct (∑ μ, p μ basis μ)) (∑ ν, q ν basis ν) All goals completed! 🐙All goals completed! 🐙d:f:Vector d →ₗ[] Vector d(LinearMap.toMatrix basis basis) (adjoint f) * (LinearMap.toMatrix basis basis) f = 1 minkowskiMatrix.dual ((LinearMap.toMatrix basis basis) f) * (LinearMap.toMatrix basis basis) f = 1 All goals completed! 🐙