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.SpeedOfLight public import Physlib.Relativity.Tensors.RealTensor.Vector.Tensorial public import Physlib.SpaceAndTime.Space.Integrals.Basic public import Physlib.SpaceAndTime.Time.Basic public import Physlib.Meta.Informal.Basic

Spacetime

i. Overview

In this file we define the type SpaceTime d which corresponds to d+1 dimensional spacetime. This is equipped with an instance of the action of a Lorentz group, corresponding to Minkowski-spacetime.

It is defined through Lorentz.Vector d, and carries the tensorial instance, allowing it to be used in tensorial expressions.

ii. Key results

    SpaceTime d : The type corresponding to d+1 dimensional spacetime.

    toTimeAndSpace : A continuous linear equivalence between SpaceTime d and Time × Space d.

iii. Table of contents

    A. The definition of SpaceTime d

    C. Continuous linear map to coordinates

    D. Measures on SpaceTime d

      D.1. Instance of a measurable space

      D.2. Instance of a borel space

      D.4. Instance of a measure space

      D.5. Volume measure is positive on non-empty open sets

      D.6. Volume measure is a finite measure on compact sets

      D.7. Volume measure is an additive Haar measure

    B. Maps to and from Space and Time

      B.1. Linear map to Space d

        B.1.1. Explicit expansion of map to space

        B.1.2. Equivariance of the to space under rotations

      B.2. Linear map to Time

        B.2.1. Explicit expansion of map to time in terms of coordinates

      B.3. toTimeAndSpace: Continuous linear equivalence to Time × Space d

        B.3.1. Derivative of toTimeAndSpace

        B.3.2. Derivative of the inverse of toTimeAndSpace

        B.3.3. toTimeAndSpace acting on spatial basis vectors

        B.3.4. toTimeAndSpace acting on the temporal basis vectors

      B.4. Time space basis

        B.4.1. Elements of the basis

        B.4.2. Equivalence adjusting time basis vector

        B.4.3. Determinant of the equivalence

        B.4.4. Time space basis expressed in terms of the Lorentz basis

        B.4.5. The additive Haar measure associated to the time space basis

      B.5. Integrals over SpaceTime d

        B.5.1. Measure preserving property of toTimeAndSpace.symm

        B.5.2. Integrals over SpaceTime d expressed as integrals over Time and Space d

iv. References

@[expose] public section

A. The definition of SpaceTime d

TODO "SpaceTime should be refactored into a structure, or similar, to prevent casting."

SpaceTime d corresponds to d+1 dimensional space-time. This is equipped with an instance of the action of a Lorentz group, corresponding to Minkowski-spacetime.

abbrev SpaceTime (d : := 3) := Lorentz.Vector d

C. Continuous linear map to coordinates

For a given μ : Fin (1 + d) coord μ p is the coordinate of p in the direction μ.

This is denoted 𝔁 μ p, where 𝔁 is typed with \MCx.

def coord {d : } (μ : Fin (1 + d)) : SpaceTime d →ₗ[] where toFun x := x (finSumFinEquiv.symm μ) map_add' x1 x2 := d:μ:Fin (1 + d)x1:SpaceTime dx2:SpaceTime d(x1 + x2) (finSumFinEquiv.symm μ) = x1 (finSumFinEquiv.symm μ) + x2 (finSumFinEquiv.symm μ) All goals completed! 🐙 map_smul' c x := d:μ:Fin (1 + d)c:x:SpaceTime d(c x) (finSumFinEquiv.symm μ) = (RingHom.id ) c x (finSumFinEquiv.symm μ) All goals completed! 🐙
@[inherit_doc coord] scoped notation "𝔁" => coordlemma coord_apply {d : } (μ : Fin (1 + d)) (y : SpaceTime d) : 𝔁 μ y = y (finSumFinEquiv.symm μ) := d:μ:Fin (1 + d)y:SpaceTime d(𝔁 μ) y = y (finSumFinEquiv.symm μ) All goals completed! 🐙

The continuous linear map from a point in space time to one of its coordinates.

def coordCLM (μ : Fin 1 Fin d) : SpaceTime d →L[] where toFun x := x μ map_add' x1 x2 := d:μ:Fin 1 Fin dx1:SpaceTime dx2:SpaceTime d(x1 + x2) μ = x1 μ + x2 μ All goals completed! 🐙 map_smul' c x := d:μ:Fin 1 Fin dc:x:SpaceTime d(c x) μ = (RingHom.id ) c x μ All goals completed! 🐙 cont := d:μ:Fin 1 Fin dContinuous fun x => x μ All goals completed! 🐙

D. Measures on SpaceTime d

D.1. Instance of a measurable space

instance {d : } : MeasurableSpace (SpaceTime d) := borel (SpaceTime d)

D.2. Instance of a borel space

instance {d : } : BorelSpace (SpaceTime d) where measurable_eq := d:instMeasurableSpace = borel (SpaceTime d) All goals completed! 🐙

D.4. Instance of a measure space

instance {d : } : MeasureSpace (SpaceTime d) where volume := Lorentz.Vector.basis.addHaar

D.5. Volume measure is positive on non-empty open sets

instance {d : } : (volume (α := SpaceTime d)).IsOpenPosMeasure := inferInstanceAs ((Lorentz.Vector.basis.addHaar).IsOpenPosMeasure)

D.6. Volume measure is a finite measure on compact sets

instance {d : } : IsFiniteMeasureOnCompacts (volume (α := SpaceTime d)) := inferInstanceAs (IsFiniteMeasureOnCompacts (Lorentz.Vector.basis.addHaar))

D.7. Volume measure is an additive Haar measure

instance {d : } : Measure.IsAddHaarMeasure (volume (α := SpaceTime d)) := inferInstanceAs (Measure.IsAddHaarMeasure (Lorentz.Vector.basis.addHaar))

B. Maps to and from Space and Time

B.1. Linear map to Space d

The space part of spacetime.

def space {d : } : SpaceTime d →L[] Space d where toFun x := Lorentz.Vector.spatialPart x map_add' x1 x2 := d:x1:SpaceTime dx2:SpaceTime d{ val := (Lorentz.Vector.spatialPart (x1 + x2)).ofLp } = { val := (Lorentz.Vector.spatialPart x1).ofLp } + { val := (Lorentz.Vector.spatialPart x2).ofLp } d:x1:SpaceTime dx2:SpaceTime di:Fin d{ val := (Lorentz.Vector.spatialPart (x1 + x2)).ofLp }.val i = ({ val := (Lorentz.Vector.spatialPart x1).ofLp } + { val := (Lorentz.Vector.spatialPart x2).ofLp }).val i All goals completed! 🐙 map_smul' c x := d:c:x:SpaceTime d{ val := (Lorentz.Vector.spatialPart (c x)).ofLp } = (RingHom.id ) c { val := (Lorentz.Vector.spatialPart x).ofLp } d:c:x:SpaceTime di:Fin d{ val := (Lorentz.Vector.spatialPart (c x)).ofLp }.val i = ((RingHom.id ) c { val := (Lorentz.Vector.spatialPart x).ofLp }).val i All goals completed! 🐙 cont := d:Continuous fun x => { val := (Lorentz.Vector.spatialPart x).ofLp } All goals completed! 🐙
B.1.1. Explicit expansion of map to space
lemma space_toCoord_symm {d : } (f : Fin 1 Fin d ) : space f = fun i => f (Sum.inr i) := d:f:Fin 1 Fin d (space f).val = fun i => f (Sum.inr i) d:f:Fin 1 Fin d i:Fin d(space f).val i = f (Sum.inr i) All goals completed! 🐙
B.1.2. Equivariance of the to space under rotations

The function space is equivariant with respect to rotations.

informal_lemma space_equivariant where deps := [``space] tag := "7MTYX"

B.2. Linear map to Time

The time part of spacetime.

def time {d : } (c : SpeedOfLight := 1) : SpaceTime d →ₗ[] Time where toFun x := Lorentz.Vector.timeComponent x / c map_add' x1 x2 := d:c:SpeedOfLightx1:SpaceTime dx2:SpaceTime d{ val := Lorentz.Vector.timeComponent (x1 + x2) / c.val } = { val := Lorentz.Vector.timeComponent x1 / c.val } + { val := Lorentz.Vector.timeComponent x2 / c.val } d:c:SpeedOfLightx1:SpaceTime dx2:SpaceTime d{ val := Lorentz.Vector.timeComponent (x1 + x2) / c.val }.val = ({ val := Lorentz.Vector.timeComponent x1 / c.val } + { val := Lorentz.Vector.timeComponent x2 / c.val }).val d:c:SpeedOfLightx1:SpaceTime dx2:SpaceTime d(x1 (Sum.inl 0) + x2 (Sum.inl 0)) / c.val = x1 (Sum.inl 0) / c.val + x2 (Sum.inl 0) / c.val All goals completed! 🐙 map_smul' c x := d:c✝:SpeedOfLightc:x:SpaceTime d{ val := Lorentz.Vector.timeComponent (c x) / c✝.val } = (RingHom.id ) c { val := Lorentz.Vector.timeComponent x / c✝.val } d:c✝:SpeedOfLightc:x:SpaceTime d{ val := Lorentz.Vector.timeComponent (c x) / c✝.val }.val = ((RingHom.id ) c { val := Lorentz.Vector.timeComponent x / c✝.val }).val d:c✝:SpeedOfLightc:x:SpaceTime dc * x (Sum.inl 0) / c✝.val = c * (x (Sum.inl 0) / c✝.val) All goals completed! 🐙
B.2.1. Explicit expansion of map to time in terms of coordinates
@[simp] lemma time_val_toCoord_symm {d : } (c : SpeedOfLight) (f : Fin 1 Fin d ) : (time c f).val = f (Sum.inl 0) / c := d:c:SpeedOfLightf:Fin 1 Fin d ((time c) f).val = f (Sum.inl 0) / c.val All goals completed! 🐙

B.3. toTimeAndSpace: Continuous linear equivalence to Time × Space d

A continuous linear equivalence between SpaceTime d and Time × Space d.

def toTimeAndSpace {d : } (c : SpeedOfLight := 1) : SpaceTime d ≃L[] Time × Space d := LinearEquiv.toContinuousLinearEquiv { toFun x := (x.time c, x.space) invFun tx := (fun i => match i with | Sum.inl _ => c * tx.1.val | Sum.inr i => tx.2 i) left_inv x := d:c:SpeedOfLightx:SpaceTime d(fun tx i => match i with | Sum.inl val => c.val * tx.1.val | Sum.inr i => tx.2.val i) ((fun x => ((time c) x, space x)) x) = x d:c:SpeedOfLightx:SpaceTime d(fun i => match i with | Sum.inl val => c.val * (Lorentz.Vector.timeComponent x / c.val) | Sum.inr i => ({ toFun := fun x => { val := fun i => x (Sum.inr i) }, map_add' := , map_smul' := , cont := } x).val i) = x d:c:SpeedOfLightx:SpaceTime di:Fin 1 Fin d(match i with | Sum.inl val => c.val * (Lorentz.Vector.timeComponent x / c.val) | Sum.inr i => ({ toFun := fun x => { val := fun i => x (Sum.inr i) }, map_add' := , map_smul' := , cont := } x).val i) = x i match i with d:c:SpeedOfLightx:SpaceTime di:Fin 1 Fin d(match Sum.inl 0 with | Sum.inl val => c.val * (Lorentz.Vector.timeComponent x / c.val) | Sum.inr i => ({ toFun := fun x => { val := fun i => x (Sum.inr i) }, map_add' := , map_smul' := , cont := } x).val i) = x (Sum.inl 0) d:c:SpeedOfLightx:SpaceTime di:Fin 1 Fin dc.val * (x (Sum.inl 0) / c.val) = x (Sum.inl 0) All goals completed! 🐙 d:c:SpeedOfLightx:SpaceTime di✝:Fin 1 Fin di:Fin d(match Sum.inr i with | Sum.inl val => c.val * (Lorentz.Vector.timeComponent x / c.val) | Sum.inr i => ({ toFun := fun x => { val := fun i => x (Sum.inr i) }, map_add' := , map_smul' := , cont := } x).val i) = x (Sum.inr i) All goals completed! 🐙 right_inv tx := d:c:SpeedOfLighttx:Time × Space d(fun x => ((time c) x, space x)) ((fun tx i => match i with | Sum.inl val => c.val * tx.1.val | Sum.inr i => tx.2.val i) tx) = tx All goals completed! 🐙 map_add' x y := d:c:SpeedOfLightx:SpaceTime dy:SpaceTime d((time c) (x + y), space (x + y)) = ((time c) x, space x) + ((time c) y, space y) d:c:SpeedOfLightx:SpaceTime dy:SpaceTime d(time c) (x + y) = (time c) x + (time c) y space (x + y) = space x + space y d:c:SpeedOfLightx:SpaceTime dy:SpaceTime d(time c) (x + y) = (time c) x + (time c) yd:c:SpeedOfLightx:SpaceTime dy:SpaceTime dspace (x + y) = space x + space y d:c:SpeedOfLightx:SpaceTime dy:SpaceTime d(time c) (x + y) = (time c) x + (time c) y d:c:SpeedOfLightx:SpaceTime dy:SpaceTime d((time c) (x + y)).val = ((time c) x + (time c) y).val All goals completed! 🐙 d:c:SpeedOfLightx:SpaceTime dy:SpaceTime di:Fin d(space (x + y)).val i = (space x + space y).val i All goals completed! 🐙 map_smul' := d:c:SpeedOfLight (m : ) (x : SpaceTime d), ((time c) (m x), space (m x)) = (RingHom.id ) m ((time c) x, space x) All goals completed! 🐙 }
@[simp] lemma toTimeAndSpace_symm_apply_time_space {d : } {c : SpeedOfLight} (x : SpaceTime d) : (toTimeAndSpace c).symm (x.time c, x.space) = x := (toTimeAndSpace c).left_inv x@[simp] lemma space_toTimeAndSpace_symm {d : } {c : SpeedOfLight} (t : Time) (s : Space d) : ((toTimeAndSpace c).symm (t, s)).space = s := d:c:SpeedOfLightt:Times:Space dspace ((toTimeAndSpace c).symm (t, s)) = s All goals completed! 🐙@[simp] lemma time_toTimeAndSpace_symm {d : } {c : SpeedOfLight} (t : Time) (s : Space d) : ((toTimeAndSpace c).symm (t, s)).time c = t := d:c:SpeedOfLightt:Times:Space d(time c) ((toTimeAndSpace c).symm (t, s)) = t All goals completed! 🐙@[simp] lemma toTimeAndSpace_symm_apply_inl {d : } {c : SpeedOfLight} (t : Time) (s : Space d) : (toTimeAndSpace c).symm (t, s) (Sum.inl 0) = c * t := d:c:SpeedOfLightt:Times:Space d(toTimeAndSpace c).symm (t, s) (Sum.inl 0) = c.val * t.val All goals completed! 🐙@[simp] lemma toTimeAndSpace_symm_apply_inr {d : } {c : SpeedOfLight} (t : Time) (x : Space d) (i : Fin d) : (toTimeAndSpace c).symm (t, x) (Sum.inr i) = x i := d:c:SpeedOfLightt:Timex:Space di:Fin d(toTimeAndSpace c).symm (t, x) (Sum.inr i) = x.val i All goals completed! 🐙
B.3.1. Derivative of toTimeAndSpace
All goals completed! 🐙
B.3.2. Derivative of the inverse of toTimeAndSpace
All goals completed! 🐙
B.3.3. toTimeAndSpace acting on spatial basis vectors
lemma toTimeAndSpace_basis_inr {d : } {c : SpeedOfLight} (i : Fin d) : toTimeAndSpace c (Lorentz.Vector.basis (Sum.inr i)) = (0, Space.basis i) := d:c:SpeedOfLighti:Fin d(toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inr i)) = (0, Space.basis i) d:c:SpeedOfLighti:Fin d((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inr i))).1 = (0, Space.basis i).1d:c:SpeedOfLighti:Fin d((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inr i))).2 = (0, Space.basis i).2 d:c:SpeedOfLighti:Fin d((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inr i))).1 = (0, Space.basis i).1 All goals completed! 🐙 d:c:SpeedOfLighti:Fin d((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inr i))).2 = (0, Space.basis i).2 d:c:SpeedOfLighti:Fin dj:Fin d((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inr i))).2.val j = (0, Space.basis i).2.val j All goals completed! 🐙
B.3.4. toTimeAndSpace acting on the temporal basis vectors
lemma toTimeAndSpace_basis_inl {d : } {c : SpeedOfLight} : toTimeAndSpace (d := d) c (Lorentz.Vector.basis (Sum.inl 0)) = (1/c.val, 0) := d:c:SpeedOfLight(toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inl 0)) = ({ val := 1 / c.val }, 0) d:c:SpeedOfLight((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inl 0))).1 = ({ val := 1 / c.val }, 0).1d:c:SpeedOfLight((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inl 0))).2 = ({ val := 1 / c.val }, 0).2 d:c:SpeedOfLight((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inl 0))).1 = ({ val := 1 / c.val }, 0).1 All goals completed! 🐙 d:c:SpeedOfLight((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inl 0))).2 = ({ val := 1 / c.val }, 0).2 d:c:SpeedOfLightj:Fin d((toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inl 0))).2.val j = ({ val := 1 / c.val }, 0).2.val j All goals completed! 🐙d:c:SpeedOfLight({ val := 1 / c.val }, 0) = (1 / c.val) (1, 0) All goals completed! 🐙

B.4. Time space basis

The basis of SpaceTime where the first component is (c, 0, 0, ...) instead of (1, 0, 0, ....).

def timeSpaceBasis {d : } (c : SpeedOfLight := 1) : Module.Basis (Fin 1 Fin d) (SpaceTime d) where repr := (toTimeAndSpace (d := d) c).toLinearEquiv.trans <| (Time.basis.toBasis.prod (Space.basis (d := d)).toBasis).repr
B.4.1. Elements of the basis
@[simp] lemma timeSpaceBasis_apply_inl {d : } (c : SpeedOfLight) : timeSpaceBasis (d := d) c (Sum.inl 0) = c.val Lorentz.Vector.basis (Sum.inl 0) := d:c:SpeedOfLight(timeSpaceBasis c) (Sum.inl 0) = c.val Lorentz.Vector.basis (Sum.inl 0) d:c:SpeedOfLight(toTimeAndSpace c).symm (1, 0) = c.val Lorentz.Vector.basis (Sum.inl 0) d:c:SpeedOfLight(toTimeAndSpace c) ((toTimeAndSpace c).symm (1, 0)) = (toTimeAndSpace c) (c.val Lorentz.Vector.basis (Sum.inl 0)) d:c:SpeedOfLight(1, 0) = c.val ({ val := 1 / c.val }, 0) d:c:SpeedOfLight(1, 0).1.val = (c.val ({ val := 1 / c.val }, 0)).1.vald:c:SpeedOfLighti✝:Fin d(1, 0).2.val i✝ = (c.val ({ val := 1 / c.val }, 0)).2.val i✝ d:c:SpeedOfLight(1, 0).1.val = (c.val ({ val := 1 / c.val }, 0)).1.vald:c:SpeedOfLighti✝:Fin d(1, 0).2.val i✝ = (c.val ({ val := 1 / c.val }, 0)).2.val i✝ All goals completed! 🐙@[simp] lemma timeSpaceBasis_apply_inr {d : } (c : SpeedOfLight) (i : Fin d) : timeSpaceBasis (d := d) c (Sum.inr i) = Lorentz.Vector.basis (Sum.inr i) := d:c:SpeedOfLighti:Fin d(timeSpaceBasis c) (Sum.inr i) = Lorentz.Vector.basis (Sum.inr i) d:c:SpeedOfLighti:Fin d(toTimeAndSpace c).symm (0, Space.basis i) = Lorentz.Vector.basis (Sum.inr i) d:c:SpeedOfLighti:Fin d(toTimeAndSpace c) ((toTimeAndSpace c).symm (0, Space.basis i)) = (toTimeAndSpace c) (Lorentz.Vector.basis (Sum.inr i)) All goals completed! 🐙
B.4.2. Equivalence adjusting time basis vector

The equivalence on of SpaceTime taking (1, 0, 0, ...) to of (c, 0, 0, ....) and keeping all other components the same.

def timeSpaceBasisEquiv {d : } (c : SpeedOfLight) : SpaceTime d ≃L[] SpaceTime d where toFun x := fun μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) invFun x := fun μ => match μ with | Sum.inl 0 => (1 / c.val) * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) left_inv x := d:c:SpeedOfLightx:SpaceTime d(fun x μ => match μ with | Sum.inl 0 => 1 / c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) ((fun x μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) x) = x d:c:SpeedOfLightx:SpaceTime dμ:Fin 1 Fin d(fun x μ => match μ with | Sum.inl 0 => 1 / c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) ((fun x μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) x) μ = x μ match μ with d:c:SpeedOfLightx:SpaceTime dμ:Fin 1 Fin d(fun x μ => match μ with | Sum.inl 0 => 1 / c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) ((fun x μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) x) (Sum.inl 0) = x (Sum.inl 0) All goals completed! 🐙 d:c:SpeedOfLightx:SpaceTime dμ:Fin 1 Fin di:Fin d(fun x μ => match μ with | Sum.inl 0 => 1 / c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) ((fun x μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) x) (Sum.inr i) = x (Sum.inr i) All goals completed! 🐙 right_inv x := d:c:SpeedOfLightx:SpaceTime d(fun x μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) ((fun x μ => match μ with | Sum.inl 0 => 1 / c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) x) = x d:c:SpeedOfLightx:SpaceTime dμ:Fin 1 Fin d(fun x μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) ((fun x μ => match μ with | Sum.inl 0 => 1 / c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) x) μ = x μ match μ with d:c:SpeedOfLightx:SpaceTime dμ:Fin 1 Fin d(fun x μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) ((fun x μ => match μ with | Sum.inl 0 => 1 / c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) x) (Sum.inl 0) = x (Sum.inl 0) All goals completed! 🐙 d:c:SpeedOfLightx:SpaceTime dμ:Fin 1 Fin di:Fin d(fun x μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) ((fun x μ => match μ with | Sum.inl 0 => 1 / c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) x) (Sum.inr i) = x (Sum.inr i) All goals completed! 🐙 map_add' x y := d:c:SpeedOfLightx:SpaceTime dy:SpaceTime d(fun μ => match μ with | Sum.inl 0 => c.val * (x + y) (Sum.inl 0) | Sum.inr i => (x + y) (Sum.inr i)) = (fun μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) + fun μ => match μ with | Sum.inl 0 => c.val * y (Sum.inl 0) | Sum.inr i => y (Sum.inr i) d:c:SpeedOfLightx:SpaceTime dy:SpaceTime dμ:Fin 1 Fin d(match μ with | Sum.inl 0 => c.val * (x + y) (Sum.inl 0) | Sum.inr i => (x + y) (Sum.inr i)) = ((fun μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) + fun μ => match μ with | Sum.inl 0 => c.val * y (Sum.inl 0) | Sum.inr i => y (Sum.inr i)) μ match μ with d:c:SpeedOfLightx:SpaceTime dy:SpaceTime dμ:Fin 1 Fin d(match Sum.inl 0 with | Sum.inl 0 => c.val * (x + y) (Sum.inl 0) | Sum.inr i => (x + y) (Sum.inr i)) = ((fun μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) + fun μ => match μ with | Sum.inl 0 => c.val * y (Sum.inl 0) | Sum.inr i => y (Sum.inr i)) (Sum.inl 0) d:c:SpeedOfLightx:SpaceTime dy:SpaceTime dμ:Fin 1 Fin dc.val * (x (Sum.inl 0) + y (Sum.inl 0)) = c.val * x (Sum.inl 0) + c.val * y (Sum.inl 0) All goals completed! 🐙 d:c:SpeedOfLightx:SpaceTime dy:SpaceTime dμ:Fin 1 Fin di:Fin d(match Sum.inr i with | Sum.inl 0 => c.val * (x + y) (Sum.inl 0) | Sum.inr i => (x + y) (Sum.inr i)) = ((fun μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) + fun μ => match μ with | Sum.inl 0 => c.val * y (Sum.inl 0) | Sum.inr i => y (Sum.inr i)) (Sum.inr i) All goals completed! 🐙 map_smul' c x := d:c✝:SpeedOfLightc:x:SpaceTime d(fun μ => match μ with | Sum.inl 0 => c✝.val * (c x) (Sum.inl 0) | Sum.inr i => (c x) (Sum.inr i)) = (RingHom.id ) c fun μ => match μ with | Sum.inl 0 => c✝.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c✝:SpeedOfLightc:x:SpaceTime dμ:Fin 1 Fin d(match μ with | Sum.inl 0 => c✝.val * (c x) (Sum.inl 0) | Sum.inr i => (c x) (Sum.inr i)) = ((RingHom.id ) c fun μ => match μ with | Sum.inl 0 => c✝.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) μ match μ with d:c✝:SpeedOfLightc:x:SpaceTime dμ:Fin 1 Fin d(match Sum.inl 0 with | Sum.inl 0 => c✝.val * (c x) (Sum.inl 0) | Sum.inr i => (c x) (Sum.inr i)) = ((RingHom.id ) c fun μ => match μ with | Sum.inl 0 => c✝.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) (Sum.inl 0) d:c✝:SpeedOfLightc:x:SpaceTime dμ:Fin 1 Fin dc✝.val * (c * x (Sum.inl 0)) = c * (c✝.val * x (Sum.inl 0)) All goals completed! 🐙 d:c✝:SpeedOfLightc:x:SpaceTime dμ:Fin 1 Fin di:Fin d(match Sum.inr i with | Sum.inl 0 => c✝.val * (c x) (Sum.inl 0) | Sum.inr i => (c x) (Sum.inr i)) = ((RingHom.id ) c fun μ => match μ with | Sum.inl 0 => c✝.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i)) (Sum.inr i) All goals completed! 🐙 continuous_invFun := d:c:SpeedOfLightContinuous fun x μ => match μ with | Sum.inl 0 => 1 / c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c:SpeedOfLightContinuous fun x μ => match μ with | Sum.inl 0 => c.val⁻¹ * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c:SpeedOfLight (i : Fin 1 Fin d), Continuous fun x => match i with | Sum.inl 0 => c.val⁻¹ * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c:SpeedOfLightμ:Fin 1 Fin dContinuous fun x => match μ with | Sum.inl 0 => c.val⁻¹ * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) match μ with d:c:SpeedOfLightμ:Fin 1 Fin dContinuous fun x => match Sum.inl 0 with | Sum.inl 0 => c.val⁻¹ * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c:SpeedOfLightμ:Fin 1 Fin dContinuous fun x => c.val⁻¹ * x (Sum.inl 0) All goals completed! 🐙 d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dContinuous fun x => match Sum.inr i with | Sum.inl 0 => c.val⁻¹ * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dContinuous fun x => x (Sum.inr i) All goals completed! 🐙 continuous_toFun := d:c:SpeedOfLightContinuous fun x μ => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c:SpeedOfLight (i : Fin 1 Fin d), Continuous fun x => match i with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c:SpeedOfLightμ:Fin 1 Fin dContinuous fun x => match μ with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) match μ with d:c:SpeedOfLightμ:Fin 1 Fin dContinuous fun x => match Sum.inl 0 with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c:SpeedOfLightμ:Fin 1 Fin dContinuous fun x => c.val * x (Sum.inl 0) All goals completed! 🐙 d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dContinuous fun x => match Sum.inr i with | Sum.inl 0 => c.val * x (Sum.inl 0) | Sum.inr i => x (Sum.inr i) d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dContinuous fun x => x (Sum.inr i) All goals completed! 🐙
B.4.3. Determinant of the equivalence
d:c:SpeedOfLighte:SpaceTime d ≃L[] Time × Space d := toTimeAndSpace ch1:e ∘ₗ (timeSpaceBasisEquiv c) ∘ₗ e.symm = (c.val LinearMap.id).prodMap LinearMap.idLinearMap.det (c.val LinearMap.id) * LinearMap.det LinearMap.id = c.val All goals completed! 🐙
B.4.4. Time space basis expressed in terms of the Lorentz basis
lemma timeSpaceBasis_eq_map_basis {d : } (c : SpeedOfLight) : timeSpaceBasis (d := d) c = Module.Basis.map (Lorentz.Vector.basis (d := d)) (timeSpaceBasisEquiv c).toLinearEquiv := d:c:SpeedOfLighttimeSpaceBasis c = Lorentz.Vector.basis.map (timeSpaceBasisEquiv c) d:c:SpeedOfLightμ:Fin 1 Fin d(timeSpaceBasis c) μ = (Lorentz.Vector.basis.map (timeSpaceBasisEquiv c)) μ match μ with d:c:SpeedOfLightμ:Fin 1 Fin d(timeSpaceBasis c) (Sum.inl 0) = (Lorentz.Vector.basis.map (timeSpaceBasisEquiv c)) (Sum.inl 0) d:c:SpeedOfLightμ:Fin 1 Fin dc.val Lorentz.Vector.basis (Sum.inl 0) = fun μ => match μ with | Sum.inl 0 => c.val | Sum.inr i => 0 d:c:SpeedOfLightμ:Fin 1 Fin dν:Fin 1 Fin d(c.val Lorentz.Vector.basis (Sum.inl 0)) ν = match ν with | Sum.inl 0 => c.val | Sum.inr i => 0 d:c:SpeedOfLightμ:Fin 1 Fin dval✝:Fin 1(c.val Lorentz.Vector.basis (Sum.inl 0)) (Sum.inl val✝) = match Sum.inl val✝ with | Sum.inl 0 => c.val | Sum.inr i => 0d:c:SpeedOfLightμ:Fin 1 Fin dj:Fin d(c.val Lorentz.Vector.basis (Sum.inl 0)) (Sum.inr j) = match Sum.inr j with | Sum.inl 0 => c.val | Sum.inr i => 0 d:c:SpeedOfLightμ:Fin 1 Fin dval✝:Fin 1(c.val Lorentz.Vector.basis (Sum.inl 0)) (Sum.inl val✝) = match Sum.inl val✝ with | Sum.inl 0 => c.val | Sum.inr i => 0d:c:SpeedOfLightμ:Fin 1 Fin dj:Fin d(c.val Lorentz.Vector.basis (Sum.inl 0)) (Sum.inr j) = match Sum.inr j with | Sum.inl 0 => c.val | Sum.inr i => 0 All goals completed! 🐙 d:c:SpeedOfLightμ:Fin 1 Fin di:Fin d(timeSpaceBasis c) (Sum.inr i) = (Lorentz.Vector.basis.map (timeSpaceBasisEquiv c)) (Sum.inr i) d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dLorentz.Vector.basis (Sum.inr i) = fun μ => match μ with | Sum.inl 0 => 0 | Sum.inr i_1 => if i = i_1 then 1 else 0 d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dν:Fin 1 Fin dLorentz.Vector.basis (Sum.inr i) ν = match ν with | Sum.inl 0 => 0 | Sum.inr i_1 => if i = i_1 then 1 else 0 d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dval✝:Fin 1Lorentz.Vector.basis (Sum.inr i) (Sum.inl val✝) = match Sum.inl val✝ with | Sum.inl 0 => 0 | Sum.inr i_1 => if i = i_1 then 1 else 0d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dj:Fin dLorentz.Vector.basis (Sum.inr i) (Sum.inr j) = match Sum.inr j with | Sum.inl 0 => 0 | Sum.inr i_1 => if i = i_1 then 1 else 0 d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dval✝:Fin 1Lorentz.Vector.basis (Sum.inr i) (Sum.inl val✝) = match Sum.inl val✝ with | Sum.inl 0 => 0 | Sum.inr i_1 => if i = i_1 then 1 else 0d:c:SpeedOfLightμ:Fin 1 Fin di:Fin dj:Fin dLorentz.Vector.basis (Sum.inr i) (Sum.inr j) = match Sum.inr j with | Sum.inl 0 => 0 | Sum.inr i_1 => if i = i_1 then 1 else 0 All goals completed! 🐙
B.4.5. The additive Haar measure associated to the time space basis
d:c:SpeedOfLighth1:Measure.map (⇑(timeSpaceBasisEquiv c)) Lorentz.Vector.basis.addHaar = ENNReal.ofReal |LinearMap.det (timeSpaceBasisEquiv c)|⁻¹ Lorentz.Vector.basis.addHaarENNReal.ofReal |LinearMap.det (timeSpaceBasisEquiv c)|⁻¹ Lorentz.Vector.basis.addHaar = ENNReal.ofReal c.val⁻¹ volume d:c:SpeedOfLighth1:Measure.map (⇑(timeSpaceBasisEquiv c)) Lorentz.Vector.basis.addHaar = ENNReal.ofReal |LinearMap.det (timeSpaceBasisEquiv c)|⁻¹ Lorentz.Vector.basis.addHaar(ENNReal.ofReal |c.val|)⁻¹ Lorentz.Vector.basis.addHaar = (ENNReal.ofReal c.val)⁻¹ volume d:c:SpeedOfLighth1:Measure.map (⇑(timeSpaceBasisEquiv c)) Lorentz.Vector.basis.addHaar = ENNReal.ofReal |LinearMap.det (timeSpaceBasisEquiv c)|⁻¹ Lorentz.Vector.basis.addHaar|c.val| = c.val All goals completed! 🐙

B.5. Integrals over SpaceTime d

B.5.1. Measure preserving property of toTimeAndSpace.symm
d:c:SpeedOfLight((Time.basis.toBasis.prod Space.basis.toBasis).map (toTimeAndSpace c).symm).addHaar = (timeSpaceBasis c).addHaar All goals completed! 🐙
B.5.2. Integrals over SpaceTime d expressed as integrals over Time and Space d
M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Md:c:SpeedOfLightf:SpaceTime d Mh1: (tx : Time × Space d), f ((toTimeAndSpace c).symm tx) volume.prod volume = (x : SpaceTime d), f x ENNReal.ofReal c.val⁻¹ volumec.val (x : SpaceTime d), f x ENNReal.ofReal c.val⁻¹ volume = (x : SpaceTime d), f x All goals completed! 🐙M:Type u_1inst✝:NormedAddCommGroup Md:c:SpeedOfLightf:SpaceTime d MENNReal.ofReal c.val⁻¹ 0M:Type u_1inst✝:NormedAddCommGroup Md:c:SpeedOfLightf:SpaceTime d MENNReal.ofReal c.val⁻¹ M:Type u_1inst✝:NormedAddCommGroup Md:c:SpeedOfLightf:SpaceTime d MENNReal.ofReal c.val⁻¹ 0 All goals completed! 🐙 M:Type u_1inst✝:NormedAddCommGroup Md:c:SpeedOfLightf:SpaceTime d MENNReal.ofReal c.val⁻¹ All goals completed! 🐙 M:Type u_1inst✝:NormedAddCommGroup Md:c:SpeedOfLightf:SpaceTime d MMeasurePreserving (⇑(toTimeAndSpace c).symm) (volume.prod volume) (ENNReal.ofReal c.val⁻¹ volume)M:Type u_1inst✝:NormedAddCommGroup Md:c:SpeedOfLightf:SpaceTime d MMeasurableEmbedding (toTimeAndSpace c).symm M:Type u_1inst✝:NormedAddCommGroup Md:c:SpeedOfLightf:SpaceTime d MMeasurePreserving (⇑(toTimeAndSpace c).symm) (volume.prod volume) (ENNReal.ofReal c.val⁻¹ volume) All goals completed! 🐙 M:Type u_1inst✝:NormedAddCommGroup Md:c:SpeedOfLightf:SpaceTime d MMeasurableEmbedding (toTimeAndSpace c).symm All goals completed! 🐙M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Md:c:SpeedOfLightf:SpaceTime d Mh:Integrable f volumeIntegrable (fun tx => f ((toTimeAndSpace c).symm tx)) (volume.prod volume) All goals completed! 🐙M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Md:c:SpeedOfLightf:SpaceTime d Mh:Integrable f volumeIntegrable (fun tx => f ((toTimeAndSpace c).symm tx)) (volume.prod volume) All goals completed! 🐙