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.BasicMinkowski product on Lorentz vectors
In this module we define and create an API around the Minkowski product on Lorentz vectors.
@[expose] public sectionThe minkowskiProduct
The Minkowski product of Lorentz vectors in the +--- convention..
All goals completed! 🐙) (by d:ℕp:Vector dq:Vector dx:Fin 1 ⊕ Fin d⊢ x ∉ Finset.univ → minkowskiMatrix x x * p x = 0 simp All goals completed! 🐙)]
simp only [Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero,
Finset.sum_singleton, minkowskiMatrix.inl_0_inl_0, one_mul, minkowskiMatrix.inr_i_inr_i,
neg_mul, Finset.sum_neg_distrib] d:ℕp:Vector dq:Vector d⊢ p (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)
ring All goals completed! 🐙lemma minkowskiProductMap_symm {d : ℕ} (p q : Vector d) :
minkowskiProductMap p q = minkowskiProductMap q p := by d:ℕp:Vector dq:Vector d⊢ p.minkowskiProductMap q = q.minkowskiProductMap p
simp only [minkowskiProductMap_toCoord, mul_comm] All goals completed! 🐙@[simp]
lemma minkowskiProductMap_add_fst {d : ℕ} (p q r : Vector d) :
minkowskiProductMap (p + q) r = minkowskiProductMap p r + minkowskiProductMap q r := by d:ℕp:Vector dq:Vector dr:Vector d⊢ (p + q).minkowskiProductMap r = p.minkowskiProductMap r + q.minkowskiProductMap r
simp only [minkowskiProductMap_toCoord, apply_add, add_mul, Finset.sum_add_distrib] d:ℕp:Vector dq:Vector dr:Vector d⊢ p (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))
ring All goals completed! 🐙
@[simp]
lemma minkowskiProductMap_add_snd {d : ℕ} (p q r : Vector d) :
minkowskiProductMap p (q + r) = minkowskiProductMap p q + minkowskiProductMap p r := by d:ℕp:Vector dq:Vector dr:Vector d⊢ p.minkowskiProductMap (q + r) = p.minkowskiProductMap q + p.minkowskiProductMap r
rw [minkowskiProductMap_symm, d:ℕp:Vector dq:Vector dr:Vector d⊢ (q + r).minkowskiProductMap p = p.minkowskiProductMap q + p.minkowskiProductMap r d:ℕp:Vector dq:Vector dr:Vector d⊢ q.minkowskiProductMap p + r.minkowskiProductMap p = p.minkowskiProductMap q + p.minkowskiProductMap r minkowskiProductMap_add_fst d:ℕp:Vector dq:Vector dr:Vector d⊢ q.minkowskiProductMap p + r.minkowskiProductMap p = p.minkowskiProductMap q + p.minkowskiProductMap r d:ℕp:Vector dq:Vector dr:Vector d⊢ q.minkowskiProductMap p + r.minkowskiProductMap p = p.minkowskiProductMap q + p.minkowskiProductMap r] d:ℕp:Vector dq:Vector dr:Vector d⊢ q.minkowskiProductMap p + r.minkowskiProductMap p = p.minkowskiProductMap q + p.minkowskiProductMap r
rw [minkowskiProductMap_symm q p, d:ℕp:Vector dq:Vector dr:Vector d⊢ p.minkowskiProductMap q + r.minkowskiProductMap p = p.minkowskiProductMap q + p.minkowskiProductMap r All goals completed! 🐙 minkowskiProductMap_symm r p d:ℕp:Vector dq:Vector dr:Vector d⊢ p.minkowskiProductMap q + p.minkowskiProductMap r = p.minkowskiProductMap q + p.minkowskiProductMap r 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 := by d:ℕc:ℝp:Vector dq:Vector d⊢ (c • p).minkowskiProductMap q = c * p.minkowskiProductMap q
simp only [minkowskiProductMap_toCoord, apply_smul, mul_sub, Finset.mul_sum, mul_assoc] All goals completed! 🐙
@[simp]
lemma minkowskiProductMap_smul_snd {d : ℕ} (c : ℝ) (p q : Vector d) :
minkowskiProductMap p (c • q) = c * minkowskiProductMap p q := by d:ℕc:ℝp:Vector dq:Vector d⊢ p.minkowskiProductMap (c • q) = c * p.minkowskiProductMap q
rw [minkowskiProductMap_symm, d:ℕc:ℝp:Vector dq:Vector d⊢ (c • q).minkowskiProductMap p = c * p.minkowskiProductMap q All goals completed! 🐙 minkowskiProductMap_smul_fst, d:ℕc:ℝp:Vector dq:Vector d⊢ c * q.minkowskiProductMap p = c * p.minkowskiProductMap q All goals completed! 🐙 minkowskiProductMap_symm q p 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.
def minkowskiProduct {d : ℕ} : Vector d →L[ℝ] Vector d →L[ℝ] ℝ where
toFun p := {
toFun := fun q => minkowskiProductMap p q
map_add' := fun q r => by d:ℕp:Vector dq:Vector dr:Vector d⊢ p.minkowskiProductMap (q + r) = p.minkowskiProductMap q + p.minkowskiProductMap r
simp All goals completed! 🐙
map_smul' := fun c q => by d:ℕp:Vector dc:ℝq:Vector d⊢ p.minkowskiProductMap (c • q) = (RingHom.id ℝ) c • p.minkowskiProductMap q
simp All goals completed! 🐙
cont := by d:ℕp:Vector d⊢ Continuous fun q => p.minkowskiProductMap q
conv => d:ℕp:Vector d| Continuous fun q => p.minkowskiProductMap q
enter [1, q] d:ℕp:Vector dq:Vector d| p.minkowskiProductMap q
rw [minkowskiProductMap_toCoord] d:ℕp:Vector dq:Vector d| p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i)
fun_prop All goals completed! 🐙
}
map_add' := fun p r => by d:ℕp:Vector dr:Vector d⊢ { toFun := fun q => (p + r).minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } =
{ toFun := fun q => p.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } +
{ toFun := fun q => r.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ }
apply ContinuousLinearMap.ext d:ℕp:Vector dr:Vector d⊢ ∀ (x : Vector d),
{ toFun := fun q => (p + r).minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } x =
({ toFun := fun q => p.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } +
{ toFun := fun q => r.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ })
x
intro x d:ℕp:Vector dr:Vector dx:Vector d⊢ { toFun := fun q => (p + r).minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } x =
({ toFun := fun q => p.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } +
{ toFun := fun q => r.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ })
x
simp All goals completed! 🐙
map_smul' := fun c p => by d:ℕc:ℝp:Vector d⊢ { toFun := fun q => (c • p).minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } =
(RingHom.id ℝ) c • { toFun := fun q => p.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ }
apply ContinuousLinearMap.ext d:ℕc:ℝp:Vector d⊢ ∀ (x : Vector d),
{ toFun := fun q => (c • p).minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } x =
((RingHom.id ℝ) c • { toFun := fun q => p.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ }) x
intro x d:ℕc:ℝp:Vector dx:Vector d⊢ { toFun := fun q => (c • p).minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } x =
((RingHom.id ℝ) c • { toFun := fun q => p.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ }) x
simp All goals completed! 🐙
cont := by d:ℕ⊢ Continuous fun p => { toFun := fun q => p.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ }
rw [continuous_clm_apply d:ℕ⊢ ∀ (y : Vector d),
Continuous fun x => { toFun := fun q => x.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } y d:ℕ⊢ ∀ (y : Vector d),
Continuous fun x => { toFun := fun q => x.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } y] d:ℕ⊢ ∀ (y : Vector d),
Continuous fun x => { toFun := fun q => x.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } y
intro q d:ℕq:Vector d⊢ Continuous fun x => { toFun := fun q => x.minkowskiProductMap q, map_add' := ⋯, map_smul' := ⋯, cont := ⋯ } q
simp only [ContinuousLinearMap.coe_mk', LinearMap.coe_mk, AddHom.coe_mk] d:ℕq:Vector d⊢ Continuous fun x => x.minkowskiProductMap q
conv => d:ℕq:Vector d| Continuous fun x => x.minkowskiProductMap q
enter [1, p] d:ℕq:Vector dp:Vector d| p.minkowskiProductMap q
rw [minkowskiProductMap_toCoord] d:ℕq:Vector dp:Vector d| p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i)
fun_prop 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 := rfl
lemma minkowskiProduct_symm {d : ℕ} (p q : Vector d) :
⟪p, q⟫ₘ = ⟪q, p⟫ₘ := by d:ℕp:Vector dq:Vector d⊢ (minkowskiProduct p) q = (minkowskiProduct q) p
rw [minkowskiProduct_apply, d:ℕp:Vector dq:Vector d⊢ p.minkowskiProductMap q = (minkowskiProduct q) p d:ℕp:Vector dq:Vector d⊢ q.minkowskiProductMap p = (minkowskiProduct q) p minkowskiProductMap_symm d:ℕp:Vector dq:Vector d⊢ q.minkowskiProductMap p = (minkowskiProduct q) p d:ℕp:Vector dq:Vector d⊢ q.minkowskiProductMap p = (minkowskiProduct q) p] d:ℕp:Vector dq:Vector d⊢ q.minkowskiProductMap p = (minkowskiProduct q) p
rfl All goals completed! 🐙
lemma minkowskiProduct_toCoord {d : ℕ} (p q : Vector d) :
⟪p, q⟫ₘ = p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i) := by d:ℕp:Vector dq:Vector d⊢ (minkowskiProduct p) q = p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i)
rw [minkowskiProduct_apply, d:ℕp:Vector dq:Vector d⊢ p.minkowskiProductMap q = p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i) All goals completed! 🐙 minkowskiProductMap_toCoord d:ℕp:Vector dq:Vector d⊢ p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i) =
p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i) All goals completed! 🐙] All goals completed! 🐙
lemma minkowskiProduct_toCoord_minkowskiMatrix {d : ℕ} (p q : Vector d) :
⟪p, q⟫ₘ = ∑ μ, minkowskiMatrix μ μ * p μ * q μ := by d:ℕp:Vector dq:Vector d⊢ (minkowskiProduct p) q = ∑ μ, minkowskiMatrix μ μ * p μ * q μ
rw [minkowskiProduct_toCoord d:ℕp:Vector dq:Vector d⊢ p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i) = ∑ μ, minkowskiMatrix μ μ * p μ * q μ d:ℕp:Vector dq:Vector d⊢ p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i) = ∑ μ, minkowskiMatrix μ μ * p μ * q μ] d:ℕp:Vector dq:Vector d⊢ p (Sum.inl 0) * q (Sum.inl 0) - ∑ i, p (Sum.inr i) * q (Sum.inr i) = ∑ μ, minkowskiMatrix μ μ * p μ * q μ
simp only [Fin.isValue, Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero,
Finset.sum_singleton, minkowskiMatrix.inl_0_inl_0, one_mul, minkowskiMatrix.inr_i_inr_i,
neg_mul, Finset.sum_neg_distrib] d:ℕp:Vector dq:Vector d⊢ p (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)
rfl All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
@[simp]
lemma minkowskiProduct_invariant {d : ℕ} (p q : Vector d) (Λ : LorentzGroup d) :
⟪Λ • p, Λ • q⟫ₘ = ⟪p, q⟫ₘ := by d:ℕp:Vector dq:Vector dΛ:↑(LorentzGroup d)⊢ (minkowskiProduct (Λ • p)) (Λ • q) = (minkowskiProduct p) q
rw [minkowskiProduct_apply, d:ℕp:Vector dq:Vector dΛ:↑(LorentzGroup d)⊢ (Λ • p).minkowskiProductMap (Λ • q) = (minkowskiProduct p) q 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 minkowskiProductMap, 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 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 ← actionT_coMetric Λ 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 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] 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
simp only [Tensorial.toTensor_smul] 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
rw [prodT_equivariant, 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 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 contrT_equivariant, 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 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 prodT_equivariant, 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 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 contrT_equivariant, 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 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
toField_equivariant 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 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] 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
rfl All goals completed! 🐙
lemma minkowskiProduct_self_eq_timeComponent_spatialPart {d : ℕ} (p : Vector d) :
⟪p, p⟫ₘ = ‖p.timeComponent‖ ^ 2 - ‖p.spatialPart‖ ^ 2 := by d:ℕp:Vector d⊢ (minkowskiProduct p) p = ‖p.timeComponent‖ ^ 2 - ‖p.spatialPart‖ ^ 2
rw [minkowskiProduct_eq_timeComponent_spatialPart d:ℕp:Vector d⊢ p.timeComponent * p.timeComponent - inner ℝ p.spatialPart p.spatialPart = ‖p.timeComponent‖ ^ 2 - ‖p.spatialPart‖ ^ 2 d:ℕp:Vector d⊢ p.timeComponent * p.timeComponent - inner ℝ p.spatialPart p.spatialPart = ‖p.timeComponent‖ ^ 2 - ‖p.spatialPart‖ ^ 2] d:ℕp:Vector d⊢ p.timeComponent * p.timeComponent - inner ℝ p.spatialPart p.spatialPart = ‖p.timeComponent‖ ^ 2 - ‖p.spatialPart‖ ^ 2
congr 1 e_a d:ℕp:Vector d⊢ p.timeComponent * p.timeComponent = ‖p.timeComponent‖ ^ 2e_a d:ℕp:Vector d⊢ inner ℝ p.spatialPart p.spatialPart = ‖p.spatialPart‖ ^ 2
· e_a d:ℕp:Vector d⊢ p.timeComponent * p.timeComponent = ‖p.timeComponent‖ ^ 2 rw [@RCLike.norm_sq_eq_def_ax e_a d:ℕp:Vector d⊢ p.timeComponent * p.timeComponent =
RCLike.re p.timeComponent * RCLike.re p.timeComponent + RCLike.im p.timeComponent * RCLike.im p.timeComponent e_a d:ℕp:Vector d⊢ p.timeComponent * p.timeComponent =
RCLike.re p.timeComponent * RCLike.re p.timeComponent + RCLike.im p.timeComponent * RCLike.im p.timeComponent]e_a d:ℕp:Vector d⊢ p.timeComponent * p.timeComponent =
RCLike.re p.timeComponent * RCLike.re p.timeComponent + RCLike.im p.timeComponent * RCLike.im p.timeComponent
simp All goals completed! 🐙
· e_a d:ℕp:Vector d⊢ inner ℝ p.spatialPart p.spatialPart = ‖p.spatialPart‖ ^ 2 exact real_inner_self_eq_norm_sq p.spatialPart All goals completed! 🐙
lemma minkowskiProduct_self_le_timeComponent_sq {d : ℕ} (p : Vector d) :
⟪p, p⟫ₘ ≤ p.timeComponent ^ 2 := by d:ℕp:Vector d⊢ (minkowskiProduct p) p ≤ p.timeComponent ^ 2
rw [minkowskiProduct_self_eq_timeComponent_spatialPart d:ℕp:Vector d⊢ ‖p.timeComponent‖ ^ 2 - ‖p.spatialPart‖ ^ 2 ≤ p.timeComponent ^ 2 d:ℕp:Vector d⊢ ‖p.timeComponent‖ ^ 2 - ‖p.spatialPart‖ ^ 2 ≤ p.timeComponent ^ 2] d:ℕp:Vector d⊢ ‖p.timeComponent‖ ^ 2 - ‖p.spatialPart‖ ^ 2 ≤ p.timeComponent ^ 2
simp All goals completed! 🐙
@[simp]
lemma minkowskiProduct_basis_left {d : ℕ} (μ : Fin 1 ⊕ Fin d) (p : Vector d) :
⟪basis μ, p⟫ₘ = minkowskiMatrix μ μ * p μ := by d:ℕμ:Fin 1 ⊕ Fin dp:Vector d⊢ (minkowskiProduct (basis μ)) p = minkowskiMatrix μ μ * p μ
rw [minkowskiProduct_toCoord_minkowskiMatrix d:ℕμ:Fin 1 ⊕ Fin dp:Vector d⊢ ∑ μ_1, minkowskiMatrix μ_1 μ_1 * basis μ μ_1 * p μ_1 = minkowskiMatrix μ μ * p μ d:ℕμ:Fin 1 ⊕ Fin dp:Vector d⊢ ∑ μ_1, minkowskiMatrix μ_1 μ_1 * basis μ μ_1 * p μ_1 = minkowskiMatrix μ μ * p μ] d:ℕμ:Fin 1 ⊕ Fin dp:Vector d⊢ ∑ μ_1, minkowskiMatrix μ_1 μ_1 * basis μ μ_1 * p μ_1 = minkowskiMatrix μ μ * p μ
simp All goals completed! 🐙
@[simp]
lemma minkowskiProduct_basis_right {d : ℕ} (μ : Fin 1 ⊕ Fin d) (p : Vector d) :
⟪p, basis μ⟫ₘ = minkowskiMatrix μ μ * p μ := by d:ℕμ:Fin 1 ⊕ Fin dp:Vector d⊢ (minkowskiProduct p) (basis μ) = minkowskiMatrix μ μ * p μ
rw [minkowskiProduct_symm, d:ℕμ:Fin 1 ⊕ Fin dp:Vector d⊢ (minkowskiProduct (basis μ)) p = minkowskiMatrix μ μ * p μ All goals completed! 🐙 minkowskiProduct_basis_left d:ℕμ:Fin 1 ⊕ Fin dp:Vector d⊢ minkowskiMatrix μ μ * p μ = minkowskiMatrix μ μ * p μ All goals completed! 🐙] All goals completed! 🐙
@[simp]
lemma minkowskiProduct_eq_zero_forall_iff {d : ℕ} (p : Vector d) :
(∀ q : Vector d, ⟪p, q⟫ₘ = 0) ↔ p = 0 := by d:ℕp:Vector d⊢ (∀ (q : Vector d), (minkowskiProduct p) q = 0) ↔ p = 0
constructor mp d:ℕp:Vector d⊢ (∀ (q : Vector d), (minkowskiProduct p) q = 0) → p = 0mpr d:ℕp:Vector d⊢ p = 0 → ∀ (q : Vector d), (minkowskiProduct p) q = 0
· mp d:ℕp:Vector d⊢ (∀ (q : Vector d), (minkowskiProduct p) q = 0) → p = 0 intro h mp d:ℕp:Vector dh:∀ (q : Vector d), (minkowskiProduct p) q = 0⊢ p = 0
funext μ mp d:ℕp:Vector dh:∀ (q : Vector d), (minkowskiProduct p) q = 0μ:Fin 1 ⊕ Fin d⊢ p μ = 0 μ
rw [← minkowskiMatrix.mul_η_diag_eq_iff (μ := μ), mp d:ℕp:Vector dh:∀ (q : Vector d), (minkowskiProduct p) q = 0μ:Fin 1 ⊕ Fin d⊢ minkowskiMatrix μ μ * p μ = minkowskiMatrix μ μ * 0 μ mp d:ℕp:Vector dh:∀ (q : Vector d), (minkowskiProduct p) q = 0μ:Fin 1 ⊕ Fin d⊢ 0 = minkowskiMatrix μ μ * 0 μ ← minkowskiProduct_basis_right, mp d:ℕp:Vector dh:∀ (q : Vector d), (minkowskiProduct p) q = 0μ:Fin 1 ⊕ Fin d⊢ (minkowskiProduct p) (basis μ) = minkowskiMatrix μ μ * 0 μ mp d:ℕp:Vector dh:∀ (q : Vector d), (minkowskiProduct p) q = 0μ:Fin 1 ⊕ Fin d⊢ 0 = minkowskiMatrix μ μ * 0 μ h (basis μ) mp d:ℕp:Vector dh:∀ (q : Vector d), (minkowskiProduct p) q = 0μ:Fin 1 ⊕ Fin d⊢ 0 = minkowskiMatrix μ μ * 0 μmp d:ℕp:Vector dh:∀ (q : Vector d), (minkowskiProduct p) q = 0μ:Fin 1 ⊕ Fin d⊢ 0 = minkowskiMatrix μ μ * 0 μ]mp d:ℕp:Vector dh:∀ (q : Vector d), (minkowskiProduct p) q = 0μ:Fin 1 ⊕ Fin d⊢ 0 = minkowskiMatrix μ μ * 0 μ
simp All goals completed! 🐙
· mpr d:ℕp:Vector d⊢ p = 0 → ∀ (q : Vector d), (minkowskiProduct p) q = 0 intro h mpr d:ℕp:Vector dh:p = 0⊢ ∀ (q : Vector d), (minkowskiProduct p) q = 0
subst h mpr d:ℕ⊢ ∀ (q : Vector d), (minkowskiProduct 0) q = 0
simp All goals completed! 🐙The adjoint of a linear map
lemma map_minkowskiProduct_eq_self_forall_iff {d : ℕ} (f : Vector d →ₗ[ℝ] Vector d) :
(∀ p q : Vector d, ⟪f p, q⟫ₘ = ⟪p, q⟫ₘ) ↔ f = LinearMap.id := by d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q) ↔ f = LinearMap.id
constructor mp d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q) → f = LinearMap.idmpr d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ f = LinearMap.id → ∀ (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q
· mp d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q) → f = LinearMap.id intro h mp d:ℕf:Vector d →ₗ[ℝ] Vector dh:∀ (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q⊢ f = LinearMap.id
ext1 p mp d:ℕf:Vector d →ₗ[ℝ] Vector dh:∀ (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) qp:Vector d⊢ f p = LinearMap.id p
have h1 := h p mp 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) q⊢ f p = LinearMap.id p
have h2 : ∀ q, ⟪f p - p, q⟫ₘ = 0 := by d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q) ↔ f = LinearMap.id mp 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:∀ (q : Vector d), (minkowskiProduct (f p - p)) q = 0⊢ f p = LinearMap.id p
intro q 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) qq:Vector d⊢ (minkowskiProduct (f p - p)) q = 0 mp 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:∀ (q : Vector d), (minkowskiProduct (f p - p)) q = 0⊢ f p = LinearMap.id p
simp [h1 q]mp 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:∀ (q : Vector d), (minkowskiProduct (f p - p)) q = 0⊢ f p = LinearMap.id pmp 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:∀ (q : Vector d), (minkowskiProduct (f p - p)) q = 0⊢ f p = LinearMap.id p
rw [minkowskiProduct_eq_zero_forall_iff mp 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 - p = 0⊢ f p = LinearMap.id p mp 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 - p = 0⊢ f p = LinearMap.id p] at h2mp 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 - p = 0⊢ f p = LinearMap.id p
simp only [LinearMap.id_coe, id_eq] mp 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 - p = 0⊢ f p = p
rw [sub_eq_zero mp 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 = p⊢ f p = p mp 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 = p⊢ f p = p] at h2mp 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 = p⊢ f p = p
exact h2 All goals completed! 🐙
· mpr d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ f = LinearMap.id → ∀ (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q intro h mpr d:ℕf:Vector d →ₗ[ℝ] Vector dh:f = LinearMap.id⊢ ∀ (p q : Vector d), (minkowskiProduct (f p)) q = (minkowskiProduct p) q
subst h mpr d:ℕ⊢ ∀ (p q : Vector d), (minkowskiProduct (LinearMap.id p)) q = (minkowskiProduct p) q
simp 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
lemma map_minkowskiProduct_eq_adjoint {d : ℕ} (f : Vector d →ₗ[ℝ] Vector d) (p q : Vector d) :
⟪f p, q⟫ₘ = ⟪p, adjoint f q⟫ₘ := by d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ (minkowskiProduct (f p)) q = (minkowskiProduct p) ((adjoint f) q)
rw [minkowskiProduct_toCoord_minkowskiMatrix, d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ ∑ μ, minkowskiMatrix μ μ * f p μ * q μ = (minkowskiProduct p) ((adjoint f) q) d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ ∑ μ, minkowskiMatrix μ μ * f p μ * q μ = ∑ μ, minkowskiMatrix μ μ * p μ * (adjoint f) q μ minkowskiProduct_toCoord_minkowskiMatrix d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ ∑ μ, minkowskiMatrix μ μ * f p μ * q μ = ∑ μ, minkowskiMatrix μ μ * p μ * (adjoint f) q μ d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ ∑ μ, minkowskiMatrix μ μ * f p μ * q μ = ∑ μ, minkowskiMatrix μ μ * p μ * (adjoint f) q μ] d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ ∑ μ, minkowskiMatrix μ μ * f p μ * q μ = ∑ μ, minkowskiMatrix μ μ * p μ * (adjoint f) q μ
simp only [map_apply_eq_basis_mulVec, adjoint, LinearMap.toMatrix_symm,
LinearMap.toMatrix_toLin, mulVec_eq_sum, op_smul_eq_smul, Finset.sum_apply, Pi.smul_apply,
transpose_apply, smul_eq_mul, minkowskiMatrix.dual_apply, Finset.mul_sum, Finset.sum_mul] d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ ∑ x, ∑ i, minkowskiMatrix x x * (p i * (LinearMap.toMatrix basis basis) f x i) * q x =
∑ x,
∑ i,
minkowskiMatrix x x * p x *
(q i * (minkowskiMatrix x x * (LinearMap.toMatrix basis basis) f i x * minkowskiMatrix i i))
rw [Finset.sum_comm d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ ∑ y, ∑ x, minkowskiMatrix x x * (p y * (LinearMap.toMatrix basis basis) f x y) * q x =
∑ x,
∑ i,
minkowskiMatrix x x * p x *
(q i * (minkowskiMatrix x x * (LinearMap.toMatrix basis basis) f i x * minkowskiMatrix i i)) d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ ∑ y, ∑ x, minkowskiMatrix x x * (p y * (LinearMap.toMatrix basis basis) f x y) * q x =
∑ x,
∑ i,
minkowskiMatrix x x * p x *
(q i * (minkowskiMatrix x x * (LinearMap.toMatrix basis basis) f i x * minkowskiMatrix i i))] d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ ∑ y, ∑ x, minkowskiMatrix x x * (p y * (LinearMap.toMatrix basis basis) f x y) * q x =
∑ x,
∑ i,
minkowskiMatrix x x * p x *
(q i * (minkowskiMatrix x x * (LinearMap.toMatrix basis basis) f i x * minkowskiMatrix i i))
refine Finset.sum_congr rfl fun μ _ => Finset.sum_congr rfl fun ν _ => ?_ d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector dμ:Fin 1 ⊕ Fin dx✝¹:μ ∈ Finset.univν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ minkowskiMatrix ν ν * (p μ * (LinearMap.toMatrix basis basis) f ν μ) * q ν =
minkowskiMatrix μ μ * p μ *
(q ν * (minkowskiMatrix μ μ * (LinearMap.toMatrix basis basis) f ν μ * minkowskiMatrix ν ν))
ring_nf d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector dμ:Fin 1 ⊕ Fin dx✝¹:μ ∈ Finset.univν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ minkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν =
minkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν * minkowskiMatrix μ μ ^ 2
rw [minkowskiMatrix.η_apply_sq_eq_one d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector dμ:Fin 1 ⊕ Fin dx✝¹:μ ∈ Finset.univν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ minkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν =
minkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν * 1 d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector dμ:Fin 1 ⊕ Fin dx✝¹:μ ∈ Finset.univν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ minkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν =
minkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν * 1] d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector dμ:Fin 1 ⊕ Fin dx✝¹:μ ∈ Finset.univν:Fin 1 ⊕ Fin dx✝:ν ∈ Finset.univ⊢ minkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν =
minkowskiMatrix ν ν * p μ * (LinearMap.toMatrix basis basis) f ν μ * q ν * 1
ring All goals completed! 🐙
lemma minkowskiProduct_map_eq_adjoint {d : ℕ} (f : Vector d →ₗ[ℝ] Vector d) (p q : Vector d) :
⟪p, f q⟫ₘ = ⟪adjoint f p, q⟫ₘ := by d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ (minkowskiProduct p) (f q) = (minkowskiProduct ((adjoint f) p)) q
rw [minkowskiProduct_symm, d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ (minkowskiProduct (f q)) p = (minkowskiProduct ((adjoint f) p)) q All goals completed! 🐙 map_minkowskiProduct_eq_adjoint f q p, d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ (minkowskiProduct q) ((adjoint f) p) = (minkowskiProduct ((adjoint f) p)) q All goals completed! 🐙
minkowskiProduct_symm d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d⊢ (minkowskiProduct ((adjoint f) p)) q = (minkowskiProduct ((adjoint f) p)) q 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⟫ₘ := by d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ IsLorentz f ↔ ∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q
rfl All goals completed! 🐙
lemma isLorentz_iff_basis {d : ℕ} (f : Vector d →ₗ[ℝ] Vector d) :
IsLorentz f ↔ ∀ μ ν : Fin 1 ⊕ Fin d, ⟪f (basis μ), f (basis ν)⟫ₘ = ⟪basis μ, basis ν⟫ₘ := by d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ IsLorentz f ↔
∀ (μ ν : Fin 1 ⊕ Fin d), (minkowskiProduct (f (basis μ))) (f (basis ν)) = (minkowskiProduct (basis μ)) (basis ν)
rw [isLorentz_iff d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q) ↔
∀ (μ ν : Fin 1 ⊕ Fin d), (minkowskiProduct (f (basis μ))) (f (basis ν)) = (minkowskiProduct (basis μ)) (basis ν) d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q) ↔
∀ (μ ν : Fin 1 ⊕ Fin d), (minkowskiProduct (f (basis μ))) (f (basis ν)) = (minkowskiProduct (basis μ)) (basis ν)] d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q) ↔
∀ (μ ν : Fin 1 ⊕ Fin d), (minkowskiProduct (f (basis μ))) (f (basis ν)) = (minkowskiProduct (basis μ)) (basis ν)
constructor mp d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q) →
∀ (μ ν : Fin 1 ⊕ Fin d), (minkowskiProduct (f (basis μ))) (f (basis ν)) = (minkowskiProduct (basis μ)) (basis ν)mpr d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (μ ν : Fin 1 ⊕ Fin d), (minkowskiProduct (f (basis μ))) (f (basis ν)) = (minkowskiProduct (basis μ)) (basis ν)) →
∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q
· mp d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q) →
∀ (μ ν : Fin 1 ⊕ Fin d), (minkowskiProduct (f (basis μ))) (f (basis ν)) = (minkowskiProduct (basis μ)) (basis ν) exact fun a μ ν => a (basis μ) (basis ν) All goals completed! 🐙
intro h p q mpr d:ℕf:Vector d →ₗ[ℝ] Vector dh:∀ (μ ν : Fin 1 ⊕ Fin d), (minkowskiProduct (f (basis μ))) (f (basis ν)) = (minkowskiProduct (basis μ)) (basis ν)p:Vector dq:Vector d⊢ (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q
have hp : p = ∑ μ, p μ • basis μ := (Basis.sum_repr basis p).symm mpr 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 μ⊢ (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q
have hq : q = ∑ ν, q ν • basis ν := (Basis.sum_repr basis q).symm mpr 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)) (f q) = (minkowskiProduct p) q
rw [hp, mpr 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) = (minkowskiProduct (∑ μ, p μ • basis μ)) q mpr 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 ν) hq mpr 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 ν)mpr 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 ν)]mpr 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 ν)
simp [- Fintype.sum_sum_type, h] All goals completed! 🐙
lemma isLorentz_iff_comp_adjoint_eq_id {d : ℕ} (f : Vector d →ₗ[ℝ] Vector d) :
IsLorentz f ↔ adjoint f ∘ₗ f = LinearMap.id := by d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ IsLorentz f ↔ adjoint f ∘ₗ f = LinearMap.id
rw [isLorentz_iff d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q) ↔ adjoint f ∘ₗ f = LinearMap.id d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q) ↔ adjoint f ∘ₗ f = LinearMap.id] d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q) ↔ adjoint f ∘ₗ f = LinearMap.id
conv_lhs =>
enter [p, q] d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d| (minkowskiProduct (f p)) (f q) = (minkowskiProduct p) q
rw [minkowskiProduct_map_eq_adjoint] d:ℕf:Vector d →ₗ[ℝ] Vector dp:Vector dq:Vector d| (minkowskiProduct ((adjoint f) (f p))) q = (minkowskiProduct p) q
change (∀ (p q : Vector d), (minkowskiProduct ((adjoint f ∘ₗ f) p)) q =
(minkowskiProduct p) q) ↔ _ d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (∀ (p q : Vector d), (minkowskiProduct ((adjoint f ∘ₗ f) p)) q = (minkowskiProduct p) q) ↔ adjoint f ∘ₗ f = LinearMap.id
rw [map_minkowskiProduct_eq_self_forall_iff d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ adjoint f ∘ₗ f = LinearMap.id ↔ adjoint f ∘ₗ f = LinearMap.id All goals completed! 🐙] All goals completed! 🐙
lemma isLorentz_iff_toMatrix_mem_lorentzGroup {d : ℕ} (f : Vector d →ₗ[ℝ] Vector d) :
IsLorentz f ↔ LinearMap.toMatrix Vector.basis Vector.basis f ∈ LorentzGroup d := by d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ IsLorentz f ↔ (LinearMap.toMatrix basis basis) f ∈ LorentzGroup d
rw [isLorentz_iff_comp_adjoint_eq_id d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ adjoint f ∘ₗ f = LinearMap.id ↔ (LinearMap.toMatrix basis basis) f ∈ LorentzGroup d d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ adjoint f ∘ₗ f = LinearMap.id ↔ (LinearMap.toMatrix basis basis) f ∈ LorentzGroup d] d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ adjoint f ∘ₗ f = LinearMap.id ↔ (LinearMap.toMatrix basis basis) f ∈ LorentzGroup d
rw [LorentzGroup.mem_iff_dual_mul_self d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ adjoint f ∘ₗ f = LinearMap.id ↔
minkowskiMatrix.dual ((LinearMap.toMatrix basis basis) f) * (LinearMap.toMatrix basis basis) f = 1 d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ adjoint f ∘ₗ f = LinearMap.id ↔
minkowskiMatrix.dual ((LinearMap.toMatrix basis basis) f) * (LinearMap.toMatrix basis basis) f = 1] d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ adjoint f ∘ₗ f = LinearMap.id ↔
minkowskiMatrix.dual ((LinearMap.toMatrix basis basis) f) * (LinearMap.toMatrix basis basis) f = 1
trans LinearMap.toMatrix Vector.basis Vector.basis (adjoint f ∘ₗ f) =
LinearMap.toMatrix Vector.basis Vector.basis (LinearMap.id : Vector d →ₗ[ℝ] Vector d) d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ adjoint f ∘ₗ f = LinearMap.id ↔
(LinearMap.toMatrix basis basis) (adjoint f ∘ₗ f) = (LinearMap.toMatrix basis basis) LinearMap.idd:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (LinearMap.toMatrix basis basis) (adjoint f ∘ₗ f) = (LinearMap.toMatrix basis basis) LinearMap.id ↔
minkowskiMatrix.dual ((LinearMap.toMatrix basis basis) f) * (LinearMap.toMatrix basis basis) f = 1
· d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ adjoint f ∘ₗ f = LinearMap.id ↔
(LinearMap.toMatrix basis basis) (adjoint f ∘ₗ f) = (LinearMap.toMatrix basis basis) LinearMap.id exact Iff.symm (EmbeddingLike.apply_eq_iff_eq (LinearMap.toMatrix basis basis)) All goals completed! 🐙
simp only [LinearMap.toMatrix_id_eq_basis_toMatrix, Basis.toMatrix_self] d:ℕf:Vector d →ₗ[ℝ] Vector d⊢ (LinearMap.toMatrix basis basis) (adjoint f ∘ₗ f) = 1 ↔
minkowskiMatrix.dual ((LinearMap.toMatrix basis basis) f) * (LinearMap.toMatrix basis basis) f = 1
rw [LinearMap.toMatrix_comp Vector.basis Vector.basis 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 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] 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
simp [adjoint] All goals completed! 🐙