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.LorentzGroup.Restricted.BasicGeneralized Boosts
This module defines a generalization of the traditional boosts.
They are define given two velocities u and v, as an input an take
the velocity u to the velocity v.
We show that these generalised boosts are Lorentz transformations, and furthermore sit in the restricted Lorentz group.
A boost is the special case of a generalised boost when u = basis 0.
References
The main argument follows: Guillem Cobos, The Lorentz Group, 2015: https://diposit.ub.edu/dspace/bitstream/2445/68763/2/memoria.pdf
@[expose] public sectionAuxiliary Linear Maps
An auxiliary linear map used in the definition of a generalised boost.
def genBoostAux₁ (u v : Velocity d) : Vector d →ₗ[ℝ] Vector d where
toFun x := (2 * ⟪x, u⟫ₘ) • v
map_add' x y := d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dy:Lorentz.Vector d⊢ (2 * (minkowskiProduct (x + y)) ↑u) • ↑v = (2 * (minkowskiProduct x) ↑u) • ↑v + (2 * (minkowskiProduct y) ↑u) • ↑v
All goals completed! 🐙
map_smul' c x := d:ℕu:↑(Velocity d)v:↑(Velocity d)c:ℝx:Lorentz.Vector d⊢ (2 * (minkowskiProduct (c • x)) ↑u) • ↑v = (RingHom.id ℝ) c • (2 * (minkowskiProduct x) ↑u) • ↑v
d:ℕu:↑(Velocity d)v:↑(Velocity d)c:ℝx:Lorentz.Vector d⊢ (2 * (c • minkowskiProduct x) ↑u) • ↑v = (c * (2 * (minkowskiProduct x) ↑u)) • ↑v
d:ℕu:↑(Velocity d)v:↑(Velocity d)c:ℝx:Lorentz.Vector d⊢ (2 * (c * (minkowskiProduct x) ↑u)) • ↑v = (c * (2 * (minkowskiProduct x) ↑u)) • ↑v
d:ℕu:↑(Velocity d)v:↑(Velocity d)c:ℝx:Lorentz.Vector d⊢ 2 * (c * (minkowskiProduct x) ↑u) = c * (2 * (minkowskiProduct x) ↑u)
All goals completed! 🐙An auxiliary linear map used in the definition of a generalised boost.
All goals completed! 🐙lemma genBoostAux₂_self (u : Velocity d) : genBoostAux₂ u u = - genBoostAux₁ u u := by d:ℕu:↑(Velocity d)⊢ genBoostAux₂ u u = -genBoostAux₁ u u
ext1 x d:ℕu:↑(Velocity d)x:Lorentz.Vector d⊢ (genBoostAux₂ u u) x = (-genBoostAux₁ u u) x
simp only [genBoostAux₂, LinearMap.coe_mk, AddHom.coe_mk, genBoostAux₁, LinearMap.neg_apply,
map_add, Velocity.minkowskiProduct_self_eq_one] d:ℕu:↑(Velocity d)x:Lorentz.Vector d⊢ -(((minkowskiProduct x) ↑u + (minkowskiProduct x) ↑u) / (1 + 1)) • (↑u + ↑u) = -((2 * (minkowskiProduct x) ↑u) • ↑u)
match_scalars d:ℕu:↑(Velocity d)x:Lorentz.Vector d⊢ -(((minkowskiProduct x) ↑u + (minkowskiProduct x) ↑u) / (1 + 1)) * (1 + 1) = -(2 * (minkowskiProduct x) ↑u * 1)
ring All goals completed! 🐙lemma genBoostAux₁_apply_basis (u v : Velocity d) (μ : Fin 1 ⊕ Fin d) :
(genBoostAux₁ u v) (Vector.basis μ) = (2 * η μ μ * u.1 μ) • v := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ (genBoostAux₁ u v) (basis μ) = (2 * η μ μ * ↑u μ) • ↑v
simp [genBoostAux₁] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ (2 * (η μ μ * ↑u μ)) • ↑v = (2 * η μ μ * ↑u μ) • ↑v
ring_nf All goals completed! 🐙lemma genBoostAux₂_apply_basis (u v : Velocity d) (μ : Fin 1 ⊕ Fin d) :
(genBoostAux₂ u v) (Vector.basis μ) =
- (η μ μ * (u.1 μ + v.1 μ) / (1 + ⟪u.1, v.1⟫ₘ)) • (u.1 + v.1) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ (genBoostAux₂ u v) (basis μ) = -(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)
simp [genBoostAux₂] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ -(((η μ μ * ↑u μ + η μ μ * ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • ↑u) +
-(((η μ μ * ↑u μ + η μ μ * ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • ↑v) =
-((η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • ↑u) +
-((η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • ↑v)
ring_nf All goals completed! 🐙lemma genBoostAux₁_basis_minkowskiProduct (u v : Velocity d) (μ ν : Fin 1 ⊕ Fin d) :
⟪genBoostAux₁ u v (Vector.basis μ), genBoostAux₁ u v (Vector.basis ν)⟫ₘ =
4 * η μ μ * η ν ν * u.1 μ * u.1 ν := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₁ u v) (basis ν)) = 4 * η μ μ * η ν ν * ↑u μ * ↑u ν
simp [genBoostAux₁] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ 2 * (η ν ν * ↑u ν) * (2 * (η μ μ * ↑u μ)) = 4 * η μ μ * η ν ν * ↑u μ * ↑u ν
ring All goals completed! 🐙
lemma genBoostAux₁_toMatrix_apply (u v : Velocity d) (μ ν : Fin 1 ⊕ Fin d) :
(LinearMap.toMatrix Vector.basis Vector.basis (genBoostAux₁ u v)) μ ν =
η ν ν * (2 * u.1 ν * v.1 μ) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₁ u v) μ ν = η ν ν * (2 * ↑u ν * ↑v μ)
rw [LinearMap.toMatrix_apply, d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (basis.repr ((genBoostAux₁ u v) (basis ν))) μ = η ν ν * (2 * ↑u ν * ↑v μ) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (genBoostAux₁ u v) (basis ν) μ = η ν ν * (2 * ↑u ν * ↑v μ) basis_repr_apply d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (genBoostAux₁ u v) (basis ν) μ = η ν ν * (2 * ↑u ν * ↑v μ) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (genBoostAux₁ u v) (basis ν) μ = η ν ν * (2 * ↑u ν * ↑v μ)] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (genBoostAux₁ u v) (basis ν) μ = η ν ν * (2 * ↑u ν * ↑v μ)
simp only [genBoostAux₁, LinearMap.coe_mk, AddHom.coe_mk, minkowskiProduct_basis_left, apply_smul] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ 2 * (η ν ν * ↑u ν) * ↑v μ = η ν ν * (2 * ↑u ν * ↑v μ)
ring All goals completed! 🐙
lemma genBoostAux₂_basis_minkowskiProduct (u v : Velocity d) (μ ν : Fin 1 ⊕ Fin d) :
⟪genBoostAux₂ u v (Vector.basis μ), genBoostAux₂ u v (Vector.basis ν)⟫ₘ =
2 * η μ μ * η ν ν * (u.1 μ + v.1 μ) * (u.1 ν + v.1 ν)
* (1 + ⟪u, v.1⟫ₘ)⁻¹ := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
rw [genBoostAux₂_apply_basis, d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)))
((genBoostAux₂ u v) (basis ν)) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)))
(-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ genBoostAux₂_apply_basis d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)))
(-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)))
(-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)))
(-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
rw [map_smul, d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(minkowskiProduct (-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v))) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ map_smul d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
have h1 : ⟪u.1 + v.1, u.1 + v.1⟫ₘ = 2 * (1 + ⟪u.1, v.1⟫ₘ) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
simp only [map_add, add_apply, Velocity.minkowskiProduct_self_eq_one] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ 1 + (minkowskiProduct ↑v) ↑u + ((minkowskiProduct ↑u) ↑v + 1) = 2 * (1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
rw [minkowskiProduct_symm d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ 1 + (minkowskiProduct ↑u) ↑v + ((minkowskiProduct ↑u) ↑v + 1) = 2 * (1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ 1 + (minkowskiProduct ↑u) ↑v + ((minkowskiProduct ↑u) ↑v + 1) = 2 * (1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ 1 + (minkowskiProduct ↑u) ↑v + ((minkowskiProduct ↑u) ↑v + 1) = 2 * (1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
ring d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) •
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
dsimp d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
have h2 : (1 + ⟪u.1, v.1⟫ₘ) ≠ 0 := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
exact Velocity.one_add_minkowskiProduct_ne_zero u v d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹
field_simp [h2] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -(η ν ν * (↑u ν + ↑v ν) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v)) =
η ν ν * (↑u ν + ↑v ν) * η μ μ * (↑u μ + ↑v μ) * 2
have h2 : (minkowskiProduct ↑v) u.1 = ⟪u.1, v.1⟫ₘ := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) =
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2✝:1 + (minkowskiProduct ↑u) ↑v ≠ 0h2:(minkowskiProduct ↑v) ↑u = (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v)) =
η ν ν * (↑u ν + ↑v ν) * η μ μ * (↑u μ + ↑v μ) * 2 rw [minkowskiProduct_symm d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (minkowskiProduct ↑u) ↑v = (minkowskiProduct ↑u) ↑v d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2✝:1 + (minkowskiProduct ↑u) ↑v ≠ 0h2:(minkowskiProduct ↑v) ↑u = (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v)) =
η ν ν * (↑u ν + ↑v ν) * η μ μ * (↑u μ + ↑v μ) * 2] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2✝:1 + (minkowskiProduct ↑u) ↑v ≠ 0h2:(minkowskiProduct ↑v) ↑u = (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v)) =
η ν ν * (↑u ν + ↑v ν) * η μ μ * (↑u μ + ↑v μ) * 2 d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2✝:1 + (minkowskiProduct ↑u) ↑v ≠ 0h2:(minkowskiProduct ↑v) ↑u = (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • minkowskiProduct (↑u + ↑v)) (↑u + ↑v)) =
η ν ν * (↑u ν + ↑v ν) * η μ μ * (↑u μ + ↑v μ) * 2
simp only [map_add, _root_.smul_add, _root_.neg_smul, add_apply, _root_.neg_apply, smul_apply,
Velocity.minkowskiProduct_self_eq_one, smul_eq_mul, h2] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2✝:1 + (minkowskiProduct ↑u) ↑v ≠ 0h2:(minkowskiProduct ↑v) ↑u = (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) *
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v) * 1) +
-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v) * (minkowskiProduct ↑u) ↑v) +
(-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v) * (minkowskiProduct ↑u) ↑v) +
-(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v) * 1)))) =
η ν ν * (↑u ν + ↑v ν) * η μ μ * (↑u μ + ↑v μ) * 2
field_simp d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct (↑u + ↑v)) (↑u + ↑v) = 2 * (1 + (minkowskiProduct ↑u) ↑v)h2✝:1 + (minkowskiProduct ↑u) ↑v ≠ 0h2:(minkowskiProduct ↑v) ↑u = (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) * η μ μ * (↑u μ + ↑v μ) * (-1 + -(minkowskiProduct ↑u) ↑v + (-(minkowskiProduct ↑u) ↑v + -1))) =
η ν ν * (↑u ν + ↑v ν) * η μ μ * (↑u μ + ↑v μ) * (1 + (minkowskiProduct ↑u) ↑v) * 2
ring All goals completed! 🐙
lemma genBoostAux₁_basis_genBoostAux₂_minkowskiProduct (u v : Velocity d) (μ ν : Fin 1 ⊕ Fin d) :
⟪genBoostAux₁ u v (Vector.basis μ), genBoostAux₂ u v (Vector.basis ν)⟫ₘ =
- 2 * η μ μ * η ν ν * u.1 μ * (u.1 ν + v.1 ν) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
rw [genBoostAux₁_apply_basis, d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((2 * η μ μ * ↑u μ) • ↑v)) ((genBoostAux₂ u v) (basis ν)) = -2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((2 * η μ μ * ↑u μ) • ↑v)) (-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) genBoostAux₂_apply_basis d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((2 * η μ μ * ↑u μ) • ↑v)) (-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((2 * η μ μ * ↑u μ) • ↑v)) (-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((2 * η μ μ * ↑u μ) • ↑v)) (-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
rw [map_smul, d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (minkowskiProduct ((2 * η μ μ * ↑u μ) • ↑v)) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) map_smul d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
have h1 : ⟪v.1, u.1 + v.1⟫ₘ = (1 + ⟪u.1, v.1⟫ₘ) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
simp only [map_add, Velocity.minkowskiProduct_self_eq_one] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ↑v) ↑u + 1 = 1 + (minkowskiProduct ↑u) ↑v d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
rw [minkowskiProduct_symm d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ↑u) ↑v + 1 = 1 + (minkowskiProduct ↑u) ↑v d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ↑u) ↑v + 1 = 1 + (minkowskiProduct ↑u) ↑v d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ↑u) ↑v + 1 = 1 + (minkowskiProduct ↑u) ↑v d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
ring d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑v⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • ((2 * η μ μ * ↑u μ) • minkowskiProduct ↑v) (↑u + ↑v) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
simp only [smul_apply, map_add, Velocity.minkowskiProduct_self_eq_one, smul_eq_mul, neg_mul,
neg_inj] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑v⊢ η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v) *
(2 * η μ μ * ↑u μ * (minkowskiProduct ↑v) ↑u + 2 * η μ μ * ↑u μ * 1) =
2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
have h2 : (1 + ⟪u.1, v.1⟫ₘ) ≠ 0 := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) =
-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑vh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v) *
(2 * η μ μ * ↑u μ * (minkowskiProduct ↑v) ↑u + 2 * η μ μ * ↑u μ * 1) =
2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
exact Velocity.one_add_minkowskiProduct_ne_zero u v d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑vh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v) *
(2 * η μ μ * ↑u μ * (minkowskiProduct ↑v) ↑u + 2 * η μ μ * ↑u μ * 1) =
2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑vh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v) *
(2 * η μ μ * ↑u μ * (minkowskiProduct ↑v) ↑u + 2 * η μ μ * ↑u μ * 1) =
2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν)
field_simp [h2] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑vh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ η ν ν * (↑u ν + ↑v ν) * η μ μ * ↑u μ * ((minkowskiProduct ↑v) ↑u + 1) =
η ν ν * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v) * η μ μ * ↑u μ
rw [minkowskiProduct_symm d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑vh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ η ν ν * (↑u ν + ↑v ν) * η μ μ * ↑u μ * ((minkowskiProduct ↑u) ↑v + 1) =
η ν ν * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v) * η μ μ * ↑u μ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑vh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ η ν ν * (↑u ν + ↑v ν) * η μ μ * ↑u μ * ((minkowskiProduct ↑u) ↑v + 1) =
η ν ν * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v) * η μ μ * ↑u μ] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:(minkowskiProduct ↑v) (↑u + ↑v) = 1 + (minkowskiProduct ↑u) ↑vh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ η ν ν * (↑u ν + ↑v ν) * η μ μ * ↑u μ * ((minkowskiProduct ↑u) ↑v + 1) =
η ν ν * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v) * η μ μ * ↑u μ
ring All goals completed! 🐙
lemma genBoostAux₂_toMatrix_apply (u v : Velocity d) (μ ν : Fin 1 ⊕ Fin d) :
(LinearMap.toMatrix Vector.basis Vector.basis (genBoostAux₂ u v)) μ ν =
η ν ν * (- (u.1 μ + v.1 μ) * (u.1 ν + v.1 ν)
/ (1 + ⟪u.1, v.1⟫ₘ)) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₂ u v) μ ν =
η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))
rw [LinearMap.toMatrix_apply, d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (basis.repr ((genBoostAux₂ u v) (basis ν))) μ =
η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (genBoostAux₂ u v) (basis ν) μ = η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) basis_repr_apply d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (genBoostAux₂ u v) (basis ν) μ = η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (genBoostAux₂ u v) (basis ν) μ = η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (genBoostAux₂ u v) (basis ν) μ = η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))
simp only [genBoostAux₂, LinearMap.coe_mk, AddHom.coe_mk, minkowskiProduct_basis_left] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (-(η ν ν * (↑u + ↑v) ν / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) μ =
η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))
have h1 := Velocity.one_add_minkowskiProduct_ne_zero u v d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (-(η ν ν * (↑u + ↑v) ν / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) μ =
η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))
simp only [apply_add, apply_smul, neg_mul, neg_add_rev] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v) * (↑u μ + ↑v μ)) =
η ν ν * ((-↑v μ + -↑u μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))
field_simp d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -(η ν ν * (↑u ν + ↑v ν) * (↑u μ + ↑v μ)) = η ν ν * (↑u ν + ↑v ν) * (-↑v μ + -↑u μ)
ring All goals completed! 🐙lemma genBoostAux₁_add_genBoostAux₂_minkowskiProduct (u v : Velocity d) (μ ν : Fin 1 ⊕ Fin d) :
⟪genBoostAux₁ u v (Vector.basis μ) + genBoostAux₂ u v (Vector.basis μ),
genBoostAux₁ u v (Vector.basis ν) + genBoostAux₂ u v (Vector.basis ν)⟫ₘ =
2 * η μ μ * η ν ν * (- u.1 μ * (u.1 ν + v.1 ν)
- u.1 ν * (u.1 μ + v.1 μ)
+ (u.1 μ + v.1 μ) * (u.1 ν + v.1 ν) * (1 + ⟪u, v.1⟫ₘ)⁻¹ +
2 * u.1 μ * u.1 ν) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ)))
((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν)) =
2 * η μ μ * η ν ν *
(-↑u μ * (↑u ν + ↑v ν) - ↑u ν * (↑u μ + ↑v μ) + (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ +
2 * ↑u μ * ↑u ν)
conv_lhs =>
simp only [map_add, add_apply] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₁ u v) (basis ν)) +
(minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₁ u v) (basis ν)) +
((minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) +
(minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)))
rw [genBoostAux₁_basis_minkowskiProduct, genBoostAux₂_basis_minkowskiProduct,
genBoostAux₁_basis_genBoostAux₂_minkowskiProduct,
minkowskiProduct_symm,
genBoostAux₁_basis_genBoostAux₂_minkowskiProduct] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| 4 * η μ μ * η ν ν * ↑u μ * ↑u ν + -2 * η ν ν * η μ μ * ↑u ν * (↑u μ + ↑v μ) +
(-2 * η μ μ * η ν ν * ↑u μ * (↑u ν + ↑v ν) +
2 * η μ μ * η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹)
ring All goals completed! 🐙
lemma basis_minkowskiProduct_genBoostAux₁_add_genBoostAux₂ (u v : Velocity d)
(μ ν : Fin 1 ⊕ Fin d) :
⟪Vector.basis μ, genBoostAux₁ u v (Vector.basis ν) + genBoostAux₂ u v (Vector.basis ν)⟫ₘ =
η μ μ * η ν ν * (2 * u.1 ν * v.1 μ
- (u.1 μ + v.1 μ) * (u.1 ν + v.1 ν) * (1 + ⟪u.1, v.1⟫ₘ)⁻¹) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (basis μ)) ((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν)) =
η μ μ * η ν ν * (2 * ↑u ν * ↑v μ - (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹)
conv_lhs =>
rw [map_add] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (minkowskiProduct (basis μ)) ((genBoostAux₁ u v) (basis ν)) +
(minkowskiProduct (basis μ)) ((genBoostAux₂ u v) (basis ν))
rw [genBoostAux₁_apply_basis, genBoostAux₂_apply_basis] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (minkowskiProduct (basis μ)) ((2 * η ν ν * ↑u ν) • ↑v) +
(minkowskiProduct (basis μ)) (-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v))
rw [map_smul, map_smul] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (2 * η ν ν * ↑u ν) • (minkowskiProduct (basis μ)) ↑v +
-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) • (minkowskiProduct (basis μ)) (↑u + ↑v)
simp d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| 2 * η ν ν * ↑u ν * (η μ μ * ↑v μ) + -(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v) * (η μ μ * (↑u μ + ↑v μ)))
have h2 : (1 + ⟪u.1, v.1⟫ₘ) ≠ 0 := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (basis μ)) ((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν)) =
η μ μ * η ν ν * (2 * ↑u ν * ↑v μ - (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 2 * η ν ν * ↑u ν * (η μ μ * ↑v μ) +
-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v) * (η μ μ * (↑u μ + ↑v μ))) =
η μ μ * η ν ν * (2 * ↑u ν * ↑v μ - (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹)
exact Velocity.one_add_minkowskiProduct_ne_zero u v d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 2 * η ν ν * ↑u ν * (η μ μ * ↑v μ) +
-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v) * (η μ μ * (↑u μ + ↑v μ))) =
η μ μ * η ν ν * (2 * ↑u ν * ↑v μ - (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 2 * η ν ν * ↑u ν * (η μ μ * ↑v μ) +
-(η ν ν * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v) * (η μ μ * (↑u μ + ↑v μ))) =
η μ μ * η ν ν * (2 * ↑u ν * ↑v μ - (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹)
field_simp d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh2:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ η ν ν * η μ μ * (2 * ↑u ν * ↑v μ * (1 + (minkowskiProduct ↑u) ↑v) + -((↑u ν + ↑v ν) * (↑u μ + ↑v μ))) =
η ν ν * η μ μ * (2 * ↑u ν * ↑v μ * (1 + (minkowskiProduct ↑u) ↑v) - (↑u ν + ↑v ν) * (↑u μ + ↑v μ))
ring All goals completed! 🐙Generalized Boosts
An generalised boost. This is a Lorentz transformation which takes the Lorentz velocity u
to v.
def generalizedBoost (u v : Velocity d) : LorentzGroup d :=
⟨LinearMap.toMatrix Vector.basis Vector.basis
(LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v), by d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (LinearMap.toMatrix basis basis) (LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) ∈ 𝓛 d
rw [← isLorentz_iff_toMatrix_mem_lorentzGroup d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ IsLorentz (LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ IsLorentz (LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v)] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ IsLorentz (LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v)
rw [isLorentz_iff_basis d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ ∀ (μ ν : Fin 1 ⊕ Fin d),
(minkowskiProduct ((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis μ)))
((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis ν)) =
(minkowskiProduct (basis μ)) (basis ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ ∀ (μ ν : Fin 1 ⊕ Fin d),
(minkowskiProduct ((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis μ)))
((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis ν)) =
(minkowskiProduct (basis μ)) (basis ν)] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ ∀ (μ ν : Fin 1 ⊕ Fin d),
(minkowskiProduct ((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis μ)))
((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis ν)) =
(minkowskiProduct (basis μ)) (basis ν)
intro μ ν d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis μ)))
((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis ν)) =
(minkowskiProduct (basis μ)) (basis ν)
trans ⟪(basis μ) + (genBoostAux₁ u v (basis μ) + genBoostAux₂ u v (basis μ)),
(basis ν) + (genBoostAux₁ u v (basis ν) + genBoostAux₂ u v (basis ν))⟫ₘ d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis μ)))
((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis ν)) =
(minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))))
(basis ν + ((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν)))d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))))
(basis ν + ((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν))) =
(minkowskiProduct (basis μ)) (basis ν)
· d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct ((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis μ)))
((LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v) (basis ν)) =
(minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))))
(basis ν + ((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν))) simp only [LinearMap.add_apply, LinearMap.id_coe, id_eq, map_add,
add_apply, minkowskiProduct_basis_right, basis_apply, mul_ite, mul_one,
MulZeroClass.mul_zero, minkowskiProduct_basis_left] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (if μ = ν then η ν ν else 0) + η ν ν * (genBoostAux₁ u v) (basis μ) ν + η ν ν * (genBoostAux₂ u v) (basis μ) ν +
(η μ μ * (genBoostAux₁ u v) (basis ν) μ +
(minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₁ u v) (basis ν)) +
(minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₁ u v) (basis ν))) +
(η μ μ * (genBoostAux₂ u v) (basis ν) μ +
(minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) +
(minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν))) =
(if μ = ν then η ν ν else 0) + (η ν ν * (genBoostAux₁ u v) (basis μ) ν + η ν ν * (genBoostAux₂ u v) (basis μ) ν) +
(η μ μ * (genBoostAux₁ u v) (basis ν) μ +
((minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₁ u v) (basis ν)) +
(minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₁ u v) (basis ν))) +
(η μ μ * (genBoostAux₂ u v) (basis ν) μ +
((minkowskiProduct ((genBoostAux₁ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)) +
(minkowskiProduct ((genBoostAux₂ u v) (basis μ))) ((genBoostAux₂ u v) (basis ν)))))
ring All goals completed! 🐙
rw [map_add d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ)))) (basis ν) +
(minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))))
((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν)) =
(minkowskiProduct (basis μ)) (basis ν) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ)))) (basis ν) +
(minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))))
((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν)) =
(minkowskiProduct (basis μ)) (basis ν)] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ)))) (basis ν) +
(minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))))
((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν)) =
(minkowskiProduct (basis μ)) (basis ν)
conv_lhs =>
enter [1] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ)))) (basis ν)
rw [map_add] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (minkowskiProduct (basis μ) + minkowskiProduct ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))) (basis ν)
simp only [add_apply] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (minkowskiProduct (basis μ)) (basis ν) +
(minkowskiProduct ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))) (basis ν)
enter [2] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (minkowskiProduct ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))) (basis ν)
rw [minkowskiProduct_symm, basis_minkowskiProduct_genBoostAux₁_add_genBoostAux₂] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| η ν ν * η μ μ * (2 * ↑u μ * ↑v ν - (↑u ν + ↑v ν) * (↑u μ + ↑v μ) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹)
conv_lhs =>
enter [2, 1] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| minkowskiProduct (basis μ + ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ)))
rw [map_add] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| minkowskiProduct (basis μ) + minkowskiProduct ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ))
conv_lhs =>
enter [2] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (minkowskiProduct (basis μ) + minkowskiProduct ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ)))
((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν))
simp only [add_apply] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| (minkowskiProduct (basis μ)) ((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν)) +
(minkowskiProduct ((genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ)))
((genBoostAux₁ u v) (basis ν) + (genBoostAux₂ u v) (basis ν))
rw [basis_minkowskiProduct_genBoostAux₁_add_genBoostAux₂,
genBoostAux₁_add_genBoostAux₂_minkowskiProduct] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| η μ μ * η ν ν * (2 * ↑u ν * ↑v μ - (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹) +
2 * η μ μ * η ν ν *
(-↑u μ * (↑u ν + ↑v ν) - ↑u ν * (↑u μ + ↑v μ) + (↑u μ + ↑v μ) * (↑u ν + ↑v ν) * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ +
2 * ↑u μ * ↑u ν)
ring All goals completed! 🐙⟩
lemma generalizedBoost_apply (u v : Velocity d) (x : Vector d) :
generalizedBoost u v • x = x + genBoostAux₁ u v x + genBoostAux₂ u v x:= by d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ generalizedBoost u v • x = x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x
rw [smul_eq_mulVec d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (↑(generalizedBoost u v)).mulVec x = x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (↑(generalizedBoost u v)).mulVec x = x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x] d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (↑(generalizedBoost u v)).mulVec x = x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x
simp [generalizedBoost] d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (LinearMap.toMatrix basis basis) (genBoostAux₁ u v) + (LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec
x =
x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x
rw [Matrix.add_mulVec, d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x +
((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x =
x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ Matrix.mulVec 1 x + ((LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x +
((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x =
x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x Matrix.add_mulVec d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ Matrix.mulVec 1 x + ((LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x +
((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x =
x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ Matrix.mulVec 1 x + ((LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x +
((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x =
x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x] d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ Matrix.mulVec 1 x + ((LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x +
((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x =
x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x
simp only [Matrix.one_mulVec] d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ x + ((LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x +
((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x =
x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x
congr e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x = (genBoostAux₁ u v) xe_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x = (genBoostAux₂ u v) x
· e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x = (genBoostAux₁ u v) x rw [map_apply_eq_basis_mulVec e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x =
((LinearMap.toMatrix basis basis) (genBoostAux₁ u v)).mulVec x All goals completed! 🐙] All goals completed! 🐙
· e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x = (genBoostAux₂ u v) x rw [map_apply_eq_basis_mulVec e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x =
((LinearMap.toMatrix basis basis) (genBoostAux₂ u v)).mulVec x All goals completed! 🐙] All goals completed! 🐙
lemma generalizedBoost_apply_mul_one_plus_contr (u v : Velocity d) (x : Vector d) :
(1 + ⟪u, v.1⟫ₘ) • generalizedBoost u v • x = (1 + ⟪u, v.1⟫ₘ) • x +
(2 * ⟪x, u⟫ₘ * (1 + ⟪u, v.1⟫ₘ)) • v - ⟪x, u + v⟫ₘ • (u + v) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • generalizedBoost u v • x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)
rw [generalizedBoost_apply, d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • (x + (genBoostAux₁ u v) x + (genBoostAux₂ u v) x) =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x +
(1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) _root_.smul_add, d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • (x + (genBoostAux₁ u v) x) + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x +
(1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) _root_.smul_add d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x +
(1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x +
(1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)] d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x +
(1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)
trans (1 + ⟪u, v.1⟫ₘ) • x + (2 * ⟪x, u⟫ₘ * (1 + ⟪u, v.1⟫ₘ)) • v
+ (- ⟪x, u + v⟫ₘ) • (u + v) d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x +
(1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v +
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v +
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)
· d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x +
(1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v +
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) congr 1 e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑ve_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x = -(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)
· e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v congr 1 e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₁ u v) x =
(2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v
rw [genBoostAux₁ e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) •
{ toFun := fun x => (2 * (minkowskiProduct x) ↑u) • ↑v, map_add' := ⋯, map_smul' := ⋯ } x =
(2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) •
{ toFun := fun x => (2 * (minkowskiProduct x) ↑u) • ↑v, map_add' := ⋯, map_smul' := ⋯ } x =
(2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v]e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) •
{ toFun := fun x => (2 * (minkowskiProduct x) ↑u) • ↑v, map_add' := ⋯, map_smul' := ⋯ } x =
(2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v
simp only [LinearMap.coe_mk, AddHom.coe_mk] e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • (2 * (minkowskiProduct x) ↑u) • ↑v =
(2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v
rw [smul_smul e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((1 + (minkowskiProduct ↑u) ↑v) * (2 * (minkowskiProduct x) ↑u)) • ↑v =
(2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((1 + (minkowskiProduct ↑u) ↑v) * (2 * (minkowskiProduct x) ↑u)) • ↑v =
(2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v]e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((1 + (minkowskiProduct ↑u) ↑v) * (2 * (minkowskiProduct x) ↑u)) • ↑v =
(2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v
congr 1 e_a.e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) * (2 * (minkowskiProduct x) ↑u) =
2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)
ring All goals completed! 🐙
· e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • (genBoostAux₂ u v) x = -(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) rw [genBoostAux₂ e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) •
{ toFun := fun x => -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v), map_add' := ⋯,
map_smul' := ⋯ }
x =
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) •
{ toFun := fun x => -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v), map_add' := ⋯,
map_smul' := ⋯ }
x =
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)]e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) •
{ toFun := fun x => -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v), map_add' := ⋯,
map_smul' := ⋯ }
x =
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)
simp only [LinearMap.coe_mk, AddHom.coe_mk] e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) =
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)
rw [smul_smul e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((1 + (minkowskiProduct ↑u) ↑v) * -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v))) • (↑u + ↑v) =
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((1 + (minkowskiProduct ↑u) ↑v) * -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v))) • (↑u + ↑v) =
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)]e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ ((1 + (minkowskiProduct ↑u) ↑v) * -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v))) • (↑u + ↑v) =
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)
congr e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) * -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(minkowskiProduct x) (↑u + ↑v)
have h1 := Velocity.one_add_minkowskiProduct_ne_zero u v e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) * -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(minkowskiProduct x) (↑u + ↑v)
field_simp All goals completed! 🐙
· d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v +
-(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) rw [_root_.neg_smul d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v +
-((minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)) =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v +
-((minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)) =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)] d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v +
-((minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)) =
(1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v)
rfl All goals completed! 🐙
lemma generalizedBoost_apply_expand (u v : Velocity d) (x : Vector d) :
generalizedBoost u v • x = x + (2 * ⟪x, u⟫ₘ) • v.1 -
(⟪x, u + v⟫ₘ / (1 + ⟪u, v.1⟫ₘ)) • (u.1 + v.1) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector d⊢ generalizedBoost u v • x =
x + (2 * (minkowskiProduct x) ↑u) • ↑v - ((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)
have h := Velocity.one_add_minkowskiProduct_ne_zero u v d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ generalizedBoost u v • x =
x + (2 * (minkowskiProduct x) ↑u) • ↑v - ((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)
apply (smul_right_inj h).mp d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) • generalizedBoost u v • x =
(1 + (minkowskiProduct ↑u) ↑v) •
(x + (2 * (minkowskiProduct x) ↑u) • ↑v -
((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v))
rw [generalizedBoost_apply_mul_one_plus_contr d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) •
(x + (2 * (minkowskiProduct x) ↑u) • ↑v -
((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)) d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) •
(x + (2 * (minkowskiProduct x) ↑u) • ↑v -
((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v))] d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) • x + (2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct x) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) •
(x + (2 * (minkowskiProduct x) ↑u) • ↑v -
((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v))
match_scalars d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) * 1 = (1 + (minkowskiProduct ↑u) ↑v) * 1d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v) * 1 - (minkowskiProduct x) (↑u + ↑v) * 1 =
(1 + (minkowskiProduct ↑u) ↑v) *
(2 * (minkowskiProduct x) ↑u * 1 - (minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v) * 1)d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -((minkowskiProduct x) (↑u + ↑v) * 1) =
(1 + (minkowskiProduct ↑u) ↑v) * -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v) * 1) <;> d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) * 1 = (1 + (minkowskiProduct ↑u) ↑v) * 1d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 2 * (minkowskiProduct x) ↑u * (1 + (minkowskiProduct ↑u) ↑v) * 1 - (minkowskiProduct x) (↑u + ↑v) * 1 =
(1 + (minkowskiProduct ↑u) ↑v) *
(2 * (minkowskiProduct x) ↑u * 1 - (minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v) * 1)d:ℕu:↑(Velocity d)v:↑(Velocity d)x:Lorentz.Vector dh:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -((minkowskiProduct x) (↑u + ↑v) * 1) =
(1 + (minkowskiProduct ↑u) ↑v) * -((minkowskiProduct x) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v) * 1) field_simp All goals completed! 🐙
@[simp]
lemma generalizedBoost_apply_fst (u v : Velocity d) :
generalizedBoost u v • u.1 = v.1 := by d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ generalizedBoost u v • ↑u = ↑v
apply (smul_right_inj (Velocity.one_add_minkowskiProduct_ne_zero u v)).mp d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • generalizedBoost u v • ↑u = (1 + (minkowskiProduct ↑u) ↑v) • ↑v
rw [generalizedBoost_apply_mul_one_plus_contr d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • ↑u + (2 * (minkowskiProduct ↑u) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct ↑u) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • ↑v d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • ↑u + (2 * (minkowskiProduct ↑u) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct ↑u) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • ↑v] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • ↑u + (2 * (minkowskiProduct ↑u) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct ↑u) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • ↑v
simp only [Velocity.minkowskiProduct_self_eq_one, map_add] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • ↑u + (2 * 1 * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(1 + (minkowskiProduct ↑u) ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • ↑v
match_scalars d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) * 1 - (1 + (minkowskiProduct ↑u) ↑v) * 1 = 0d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ 2 * 1 * (1 + (minkowskiProduct ↑u) ↑v) * 1 - (1 + (minkowskiProduct ↑u) ↑v) * 1 = (1 + (minkowskiProduct ↑u) ↑v) * 1 <;> d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) * 1 - (1 + (minkowskiProduct ↑u) ↑v) * 1 = 0d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ 2 * 1 * (1 + (minkowskiProduct ↑u) ↑v) * 1 - (1 + (minkowskiProduct ↑u) ↑v) * 1 = (1 + (minkowskiProduct ↑u) ↑v) * 1 ring All goals completed! 🐙
@[simp]
lemma generalizedBoost_apply_snd (u v : Velocity d) :
generalizedBoost u v • v.1 = (2 * ⟪u, v.1⟫ₘ) • ↑v - ↑u:= by d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ generalizedBoost u v • ↑v = (2 * (minkowskiProduct ↑u) ↑v) • ↑v - ↑u
apply (smul_right_inj (Velocity.one_add_minkowskiProduct_ne_zero u v)).mp d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • generalizedBoost u v • ↑v =
(1 + (minkowskiProduct ↑u) ↑v) • ((2 * (minkowskiProduct ↑u) ↑v) • ↑v - ↑u)
rw [generalizedBoost_apply_mul_one_plus_contr d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • ↑v + (2 * (minkowskiProduct ↑v) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct ↑v) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • ((2 * (minkowskiProduct ↑u) ↑v) • ↑v - ↑u) d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • ↑v + (2 * (minkowskiProduct ↑v) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct ↑v) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • ((2 * (minkowskiProduct ↑u) ↑v) • ↑v - ↑u)] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • ↑v + (2 * (minkowskiProduct ↑v) ↑u * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
(minkowskiProduct ↑v) (↑u + ↑v) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • ((2 * (minkowskiProduct ↑u) ↑v) • ↑v - ↑u)
simp only [map_add, Velocity.minkowskiProduct_self_eq_one,
minkowskiProduct_symm v.1 u.1] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) • ↑v + (2 * (minkowskiProduct ↑u) ↑v * (1 + (minkowskiProduct ↑u) ↑v)) • ↑v -
((minkowskiProduct ↑u) ↑v + 1) • (↑u + ↑v) =
(1 + (minkowskiProduct ↑u) ↑v) • ((2 * (minkowskiProduct ↑u) ↑v) • ↑v - ↑u)
match_scalars d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) * 1 + 2 * (minkowskiProduct ↑u) ↑v * (1 + (minkowskiProduct ↑u) ↑v) * 1 -
((minkowskiProduct ↑u) ↑v + 1) * 1 =
(1 + (minkowskiProduct ↑u) ↑v) * (2 * (minkowskiProduct ↑u) ↑v * 1)d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ -(((minkowskiProduct ↑u) ↑v + 1) * 1) = (1 + (minkowskiProduct ↑u) ↑v) * -1 <;> d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (1 + (minkowskiProduct ↑u) ↑v) * 1 + 2 * (minkowskiProduct ↑u) ↑v * (1 + (minkowskiProduct ↑u) ↑v) * 1 -
((minkowskiProduct ↑u) ↑v + 1) * 1 =
(1 + (minkowskiProduct ↑u) ↑v) * (2 * (minkowskiProduct ↑u) ↑v * 1)d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ -(((minkowskiProduct ↑u) ↑v + 1) * 1) = (1 + (minkowskiProduct ↑u) ↑v) * -1 ring All goals completed! 🐙
This lemma states that for a given four-velocity u, the general boost
transformation genBoost u u is equal to the identity linear map LinearMap.id.
@[simp]
lemma generalizedBoost_self (u : Velocity d) :
generalizedBoost u u = 1 := by d:ℕu:↑(Velocity d)⊢ generalizedBoost u u = 1
refine SetCoe.ext ?_ d:ℕu:↑(Velocity d)⊢ ↑(generalizedBoost u u) = ↑1
simp [generalizedBoost, genBoostAux₂_self] All goals completed! 🐙
lemma genearlizedBoost_apply_basis (u v : Velocity d) (μ : Fin 1 ⊕ Fin d) :
generalizedBoost u v • (Vector.basis μ) =
Vector.basis μ + (2 * η μ μ * u.1 μ) • v - (η μ μ * (u.1 μ + v.1 μ)
/ (1 + ⟪u.1, v.1⟫ₘ)) • (u.1 + v.1) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ generalizedBoost u v • basis μ =
basis μ + (2 * η μ μ * ↑u μ) • ↑v - (η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)
rw [generalizedBoost_apply, d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ basis μ + (genBoostAux₁ u v) (basis μ) + (genBoostAux₂ u v) (basis μ) =
basis μ + (2 * η μ μ * ↑u μ) • ↑v - (η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ basis μ + (2 * η μ μ * ↑u μ) • ↑v + -(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) =
basis μ + (2 * η μ μ * ↑u μ) • ↑v - (η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) genBoostAux₁_apply_basis, d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ basis μ + (2 * η μ μ * ↑u μ) • ↑v + (genBoostAux₂ u v) (basis μ) =
basis μ + (2 * η μ μ * ↑u μ) • ↑v - (η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ basis μ + (2 * η μ μ * ↑u μ) • ↑v + -(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) =
basis μ + (2 * η μ μ * ↑u μ) • ↑v - (η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) genBoostAux₂_apply_basis d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ basis μ + (2 * η μ μ * ↑u μ) • ↑v + -(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) =
basis μ + (2 * η μ μ * ↑u μ) • ↑v - (η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ basis μ + (2 * η μ μ * ↑u μ) • ↑v + -(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) =
basis μ + (2 * η μ μ * ↑u μ) • ↑v - (η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ basis μ + (2 * η μ μ * ↑u μ) • ↑v + -(η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) =
basis μ + (2 * η μ μ * ↑u μ) • ↑v - (η μ μ * (↑u μ + ↑v μ) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v)
module All goals completed! 🐙
lemma generalizedBoost_apply_eq_minkowskiProduct (u v : Velocity d) (μ ν : Fin 1 ⊕ Fin d) :
(generalizedBoost u v).1 μ ν = η μ μ * (⟪Vector.basis μ, Vector.basis ν⟫ₘ + 2 *
⟪Vector.basis ν, u⟫ₘ * ⟪Vector.basis μ, v.1⟫ₘ
- ⟪Vector.basis μ, u + v⟫ₘ * ⟪Vector.basis ν, u + v⟫ₘ / (1 + ⟪u.1, v⟫ₘ)) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ↑(generalizedBoost u v) μ ν =
η μ μ *
((minkowskiProduct (basis μ)) (basis ν) + 2 * (minkowskiProduct (basis ν)) ↑u * (minkowskiProduct (basis μ)) ↑v -
(minkowskiProduct (basis μ)) (↑u + ↑v) * (minkowskiProduct (basis ν)) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v))
conv_lhs =>
rw [generalizedBoost] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| ↑⟨(LinearMap.toMatrix basis basis) (LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v), ⋯⟩ μ ν
simp d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| 1 μ ν + (LinearMap.toMatrix basis basis) (genBoostAux₁ u v) μ ν +
(LinearMap.toMatrix basis basis) (genBoostAux₂ u v) μ ν
conv_rhs =>
rw [mul_sub, mul_add] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| η μ μ * (minkowskiProduct (basis μ)) (basis ν) +
η μ μ * (2 * (minkowskiProduct (basis ν)) ↑u * (minkowskiProduct (basis μ)) ↑v) -
η μ μ *
((minkowskiProduct (basis μ)) (↑u + ↑v) * (minkowskiProduct (basis ν)) (↑u + ↑v) / (1 + (minkowskiProduct ↑u) ↑v))
congr e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ 1 μ ν = η μ μ * (minkowskiProduct (basis μ)) (basis ν)e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₁ u v) μ ν =
η μ μ * (2 * (minkowskiProduct (basis ν)) ↑u * (minkowskiProduct (basis μ)) ↑v)e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₂ u v) μ ν =
-(η μ μ *
((minkowskiProduct (basis μ)) (↑u + ↑v) * (minkowskiProduct (basis ν)) (↑u + ↑v) /
(1 + (minkowskiProduct ↑u) ↑v)))
· e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ 1 μ ν = η μ μ * (minkowskiProduct (basis μ)) (basis ν) simp e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ 1 μ ν = if μ = ν then η μ μ * η ν ν else 0
by_cases h : μ = ν pos d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh:μ = ν⊢ 1 μ ν = if μ = ν then η μ μ * η ν ν else 0neg d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh:¬μ = ν⊢ 1 μ ν = if μ = ν then η μ μ * η ν ν else 0
· pos d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh:μ = ν⊢ 1 μ ν = if μ = ν then η μ μ * η ν ν else 0 subst h pos d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin d⊢ 1 μ μ = if μ = μ then η μ μ * η μ μ else 0
simp All goals completed! 🐙
· neg d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin dh:¬μ = ν⊢ 1 μ ν = if μ = ν then η μ μ * η ν ν else 0 simp [h] All goals completed! 🐙
· e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₁ u v) μ ν =
η μ μ * (2 * (minkowskiProduct (basis ν)) ↑u * (minkowskiProduct (basis μ)) ↑v) rw [genBoostAux₁_toMatrix_apply u v μ ν e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (2 * ↑u ν * ↑v μ) = η μ μ * (2 * (minkowskiProduct (basis ν)) ↑u * (minkowskiProduct (basis μ)) ↑v) e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (2 * ↑u ν * ↑v μ) = η μ μ * (2 * (minkowskiProduct (basis ν)) ↑u * (minkowskiProduct (basis μ)) ↑v)] e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (2 * ↑u ν * ↑v μ) = η μ μ * (2 * (minkowskiProduct (basis ν)) ↑u * (minkowskiProduct (basis μ)) ↑v)
simp only [minkowskiProduct_basis_left] e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (2 * ↑u ν * ↑v μ) = η μ μ * (2 * (η ν ν * ↑u ν) * (η μ μ * ↑v μ))
ring_nf e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * ↑u ν * ↑v μ * 2 = η ν ν * ↑u ν * ↑v μ * η μ μ ^ 2 * 2
simp All goals completed! 🐙
· e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₂ u v) μ ν =
-(η μ μ *
((minkowskiProduct (basis μ)) (↑u + ↑v) * (minkowskiProduct (basis ν)) (↑u + ↑v) /
(1 + (minkowskiProduct ↑u) ↑v))) rw [genBoostAux₂_toMatrix_apply u v μ ν e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(η μ μ *
((minkowskiProduct (basis μ)) (↑u + ↑v) * (minkowskiProduct (basis ν)) (↑u + ↑v) /
(1 + (minkowskiProduct ↑u) ↑v))) e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(η μ μ *
((minkowskiProduct (basis μ)) (↑u + ↑v) * (minkowskiProduct (basis ν)) (↑u + ↑v) /
(1 + (minkowskiProduct ↑u) ↑v)))]e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(η μ μ *
((minkowskiProduct (basis μ)) (↑u + ↑v) * (minkowskiProduct (basis ν)) (↑u + ↑v) /
(1 + (minkowskiProduct ↑u) ↑v)))
simp only [neg_add_rev, map_add, minkowskiProduct_basis_left] e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * ((-↑v μ + -↑u μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(η μ μ * ((η μ μ * ↑u μ + η μ μ * ↑v μ) * (η ν ν * ↑u ν + η ν ν * ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)))
ring_nf e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ -(η ν ν * ↑v μ * ↑u ν * (1 + (minkowskiProduct ↑u) ↑v)⁻¹) - η ν ν * ↑v μ * ↑v ν * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ -
η ν ν * ↑u μ * ↑u ν * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ -
η ν ν * ↑u μ * ↑v ν * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ =
-(η ν ν * ↑v μ * ↑u ν * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ * η μ μ ^ 2) -
η ν ν * ↑v μ * ↑v ν * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ * η μ μ ^ 2 -
η ν ν * ↑u μ * ↑u ν * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ * η μ μ ^ 2 -
η ν ν * ↑u μ * ↑v ν * (1 + (minkowskiProduct ↑u) ↑v)⁻¹ * η μ μ ^ 2
simp All goals completed! 🐙
lemma generalizedBoost_apply_eq_toCoord (u v : Velocity d) (μ ν : Fin 1 ⊕ Fin d) :
(generalizedBoost u v).1 μ ν = ((1 : Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ) μ ν +
2 * η ν ν * u.1 ν * v.1 μ
- η ν ν * (u.1 μ + v.1 μ) * (u.1 ν + v.1 ν) / (1 + ⟪u.1, v⟫ₘ)) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ ↑(generalizedBoost u v) μ ν =
1 μ ν + 2 * η ν ν * ↑u ν * ↑v μ - η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)
conv_lhs =>
rw [generalizedBoost] d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| ↑⟨(LinearMap.toMatrix basis basis) (LinearMap.id + genBoostAux₁ u v + genBoostAux₂ u v), ⋯⟩ μ ν
simp d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d| 1 μ ν + (LinearMap.toMatrix basis basis) (genBoostAux₁ u v) μ ν +
(LinearMap.toMatrix basis basis) (genBoostAux₂ u v) μ ν
congr e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₁ u v) μ ν = 2 * η ν ν * ↑u ν * ↑v μe_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₂ u v) μ ν =
-(η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))
· e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₁ u v) μ ν = 2 * η ν ν * ↑u ν * ↑v μ rw [genBoostAux₁_toMatrix_apply u v μ ν e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (2 * ↑u ν * ↑v μ) = 2 * η ν ν * ↑u ν * ↑v μ e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (2 * ↑u ν * ↑v μ) = 2 * η ν ν * ↑u ν * ↑v μ] e_a.e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (2 * ↑u ν * ↑v μ) = 2 * η ν ν * ↑u ν * ↑v μ
ring_nf All goals completed! 🐙
· e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix basis basis) (genBoostAux₂ u v) μ ν =
-(η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) rw [genBoostAux₂_toMatrix_apply u v μ ν e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))]e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * (-(↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))
simp only [neg_add_rev] e_a d:ℕu:↑(Velocity d)v:↑(Velocity d)μ:Fin 1 ⊕ Fin dν:Fin 1 ⊕ Fin d⊢ η ν ν * ((-↑v μ + -↑u μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v)) =
-(η ν ν * (↑u μ + ↑v μ) * (↑u ν + ↑v ν) / (1 + (minkowskiProduct ↑u) ↑v))
ring_nf All goals completed! 🐙
@[fun_prop]
lemma generalizedBoost_continuous_snd (u : Velocity d) : Continuous (generalizedBoost u) := by d:ℕu:↑(Velocity d)⊢ Continuous (generalizedBoost u)
have : Continuous (fun v => (generalizedBoost u v).1) := by
refine continuous_matrix ?_ d:ℕu:↑(Velocity d)⊢ ∀ (i j : Fin 1 ⊕ Fin d), Continuous fun a => ↑(generalizedBoost u a) i j d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost u v)⊢ Continuous (generalizedBoost u)
intro i j d:ℕu:↑(Velocity d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ Continuous fun a => ↑(generalizedBoost u a) i j d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost u v)⊢ Continuous (generalizedBoost u)
simp only [generalizedBoost_apply_eq_minkowskiProduct] d:ℕu:↑(Velocity d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ Continuous fun a =>
η i i *
((minkowskiProduct (basis i)) (basis j) + 2 * (minkowskiProduct (basis j)) ↑u * (minkowskiProduct (basis i)) ↑a -
(minkowskiProduct (basis i)) (↑u + ↑a) * (minkowskiProduct (basis j)) (↑u + ↑a) / (1 + (minkowskiProduct ↑u) ↑a)) d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost u v)⊢ Continuous (generalizedBoost u)
fun_prop (disch := exact fun x => Velocity.one_add_minkowskiProduct_ne_zero u x All goals completed! 🐙 d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost u v)⊢ Continuous (generalizedBoost u)) d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost u v)⊢ Continuous (generalizedBoost u)
refine Continuous.subtype_mk this _ All goals completed! 🐙
@[fun_prop]
lemma generalizedBoost_continuous_fst (u : Velocity d) : Continuous (generalizedBoost · u) := by d:ℕu:↑(Velocity d)⊢ Continuous fun x => generalizedBoost x u
have : Continuous (fun v => (generalizedBoost v u).1) := by
refine continuous_matrix ?_ d:ℕu:↑(Velocity d)⊢ ∀ (i j : Fin 1 ⊕ Fin d), Continuous fun a => ↑(generalizedBoost a u) i j d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost v u)⊢ Continuous fun x => generalizedBoost x u
intro i j d:ℕu:↑(Velocity d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ Continuous fun a => ↑(generalizedBoost a u) i j d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost v u)⊢ Continuous fun x => generalizedBoost x u
simp only [generalizedBoost_apply_eq_minkowskiProduct] d:ℕu:↑(Velocity d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ Continuous fun a =>
η i i *
((minkowskiProduct (basis i)) (basis j) + 2 * (minkowskiProduct (basis j)) ↑a * (minkowskiProduct (basis i)) ↑u -
(minkowskiProduct (basis i)) (↑a + ↑u) * (minkowskiProduct (basis j)) (↑a + ↑u) / (1 + (minkowskiProduct ↑a) ↑u)) d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost v u)⊢ Continuous fun x => generalizedBoost x u
fun_prop (disch := exact fun x => Velocity.one_add_minkowskiProduct_ne_zero x u All goals completed! 🐙 d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost v u)⊢ Continuous fun x => generalizedBoost x u) d:ℕu:↑(Velocity d)this:Continuous fun v => ↑(generalizedBoost v u)⊢ Continuous fun x => generalizedBoost x u
refine Continuous.subtype_mk this _ All goals completed! 🐙lemma id_joined_generalizedBoost (u v : Velocity d) : Joined 1 (generalizedBoost u v) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ Joined 1 (generalizedBoost u v)
obtain ⟨f, _⟩ := Velocity.isPathConnected.joinedIn u trivial v trivial d:ℕu:↑(Velocity d)v:↑(Velocity d)f:Path u vh✝:∀ (t : ↑unitInterval), f t ∈ Set.univ⊢ Joined 1 (generalizedBoost u v)
use ContinuousMap.comp ⟨generalizedBoost u, by d:ℕu:↑(Velocity d)v:↑(Velocity d)f:Path u vh✝:∀ (t : ↑unitInterval), f t ∈ Set.univ⊢ Continuous (generalizedBoost u) fun_prop All goals completed! 🐙⟩ f
· source' d:ℕu:↑(Velocity d)v:↑(Velocity d)f:Path u vh✝:∀ (t : ↑unitInterval), f t ∈ Set.univ⊢ ({ toFun := generalizedBoost u, continuous_toFun := ⋯ }.comp ↑f).toFun 0 = 1 simp All goals completed! 🐙
· target' d:ℕu:↑(Velocity d)v:↑(Velocity d)f:Path u vh✝:∀ (t : ↑unitInterval), f t ∈ Set.univ⊢ ({ toFun := generalizedBoost u, continuous_toFun := ⋯ }.comp ↑f).toFun 1 = generalizedBoost u v simp All goals completed! 🐙lemma generalizedBoost_in_connected_component_of_id (u v : Velocity d) :
generalizedBoost u v ∈ connectedComponent 1 :=
pathComponent_subset_component _ (id_joined_generalizedBoost u v)lemma generalizedBoost_isProper (u v : Velocity d) : IsProper (generalizedBoost u v) :=
(isProper_on_connected_component
(generalizedBoost_in_connected_component_of_id u v)).mp isProper_idlemma generalizedBoost_isOrthochronous (u v : Velocity d) :
IsOrthochronous (generalizedBoost u v) :=
(isOrthochronous_on_connected_component (generalizedBoost_in_connected_component_of_id u v)).mp
id_isOrthochronous
lemma generalizedBoost_mem_restricted (u v : Velocity d) :
generalizedBoost u v ∈ LorentzGroup.restricted d := by d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ generalizedBoost u v ∈ restricted d
rw [LorentzGroup.restricted d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ generalizedBoost u v ∈ { carrier := {Λ | IsProper Λ ∧ IsOrthochronous Λ}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ } d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ generalizedBoost u v ∈ { carrier := {Λ | IsProper Λ ∧ IsOrthochronous Λ}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ }] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ generalizedBoost u v ∈ { carrier := {Λ | IsProper Λ ∧ IsOrthochronous Λ}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ }
apply And.intro left d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ IsProper (generalizedBoost u v)right d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ IsOrthochronous (generalizedBoost u v)
· left d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ IsProper (generalizedBoost u v) exact generalizedBoost_isProper u v All goals completed! 🐙
· right d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ IsOrthochronous (generalizedBoost u v) exact generalizedBoost_isOrthochronous u v All goals completed! 🐙
lemma generalizedBoost_inv (u v : Velocity d) :
(generalizedBoost u v)⁻¹ = generalizedBoost v u := by d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ (generalizedBoost u v)⁻¹ = generalizedBoost v u
rw [← mul_eq_one_iff_inv_eq' d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ generalizedBoost v u * generalizedBoost u v = 1 d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ generalizedBoost v u * generalizedBoost u v = 1] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ generalizedBoost v u * generalizedBoost u v = 1
apply LorentzGroup.eq_of_action_vector_eq d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ ∀ (p : Lorentz.Vector d), (generalizedBoost v u * generalizedBoost u v) • p = 1 • p
intro p d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector d⊢ (generalizedBoost v u * generalizedBoost u v) • p = 1 • p
have h1 := Velocity.one_add_minkowskiProduct_ne_zero u v d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (generalizedBoost v u * generalizedBoost u v) • p = 1 • p
rw [SemigroupAction.mul_smul d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ generalizedBoost v u • generalizedBoost u v • p = 1 • p d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ generalizedBoost v u • generalizedBoost u v • p = 1 • p] d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ generalizedBoost v u • generalizedBoost u v • p = 1 • p
simp only [generalizedBoost_apply_expand, map_add, map_sub, map_smul, add_apply, sub_apply,
smul_apply, smul_eq_mul, Velocity.minkowskiProduct_self_eq_one, one_smul,
minkowskiProduct_symm v.1 u.1] d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ p + (2 * (minkowskiProduct p) ↑u) • ↑v -
(((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v)) • (↑u + ↑v) +
(2 *
((minkowskiProduct p) ↑v + 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct ↑u) ↑v + 1))) •
↑u -
(((minkowskiProduct p) ↑v + 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct ↑u) ↑v + 1) +
((minkowskiProduct p) ↑u + 2 * (minkowskiProduct p) ↑u * (minkowskiProduct ↑u) ↑v -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
(1 + (minkowskiProduct ↑u) ↑v))) /
(1 + (minkowskiProduct ↑u) ↑v)) •
(↑v + ↑u) =
p
match_scalars d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 = 1d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) * 1 -
((minkowskiProduct p) ↑v + 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct ↑u) ↑v + 1) +
((minkowskiProduct p) ↑u + 2 * (minkowskiProduct p) ↑u * (minkowskiProduct ↑u) ↑v -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
(1 + (minkowskiProduct ↑u) ↑v))) /
(1 + (minkowskiProduct ↑u) ↑v) *
1 =
0d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -(((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) * 1) +
2 *
((minkowskiProduct p) ↑v + 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct ↑u) ↑v + 1)) *
1 -
((minkowskiProduct p) ↑v + 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct ↑u) ↑v + 1) +
((minkowskiProduct p) ↑u + 2 * (minkowskiProduct p) ↑u * (minkowskiProduct ↑u) ↑v -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
(1 + (minkowskiProduct ↑u) ↑v))) /
(1 + (minkowskiProduct ↑u) ↑v) *
1 =
0 <;> d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 = 1d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) * 1 -
((minkowskiProduct p) ↑v + 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct ↑u) ↑v + 1) +
((minkowskiProduct p) ↑u + 2 * (minkowskiProduct p) ↑u * (minkowskiProduct ↑u) ↑v -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
(1 + (minkowskiProduct ↑u) ↑v))) /
(1 + (minkowskiProduct ↑u) ↑v) *
1 =
0d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ -(((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) * 1) +
2 *
((minkowskiProduct p) ↑v + 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct ↑u) ↑v + 1)) *
1 -
((minkowskiProduct p) ↑v + 2 * (minkowskiProduct p) ↑u * 1 -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct ↑u) ↑v + 1) +
((minkowskiProduct p) ↑u + 2 * (minkowskiProduct p) ↑u * (minkowskiProduct ↑u) ↑v -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) / (1 + (minkowskiProduct ↑u) ↑v) *
(1 + (minkowskiProduct ↑u) ↑v))) /
(1 + (minkowskiProduct ↑u) ↑v) *
1 =
0 field_simp d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) *
(-((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) +
2 *
((1 + (minkowskiProduct ↑u) ↑v) * ((minkowskiProduct p) ↑v + (minkowskiProduct p) ↑u * 2) -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) * ((minkowskiProduct ↑u) ↑v + 1))) -
((1 + (minkowskiProduct ↑u) ↑v) * ((minkowskiProduct p) ↑v + (minkowskiProduct p) ↑u * 2) -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) * ((minkowskiProduct ↑u) ↑v + 1) +
(1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct p) ↑u * (1 + (minkowskiProduct ↑u) ↑v * 2) -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v))) =
(1 + (minkowskiProduct ↑u) ↑v) ^ 2 * 0 <;> d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) *
(2 * (minkowskiProduct p) ↑u * (1 + (minkowskiProduct ↑u) ↑v) -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v)) -
((1 + (minkowskiProduct ↑u) ↑v) * ((minkowskiProduct p) ↑v + 2 * (minkowskiProduct p) ↑u) -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) * ((minkowskiProduct ↑u) ↑v + 1) +
(1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct p) ↑u * (1 + 2 * (minkowskiProduct ↑u) ↑v) -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v))) =
(1 + (minkowskiProduct ↑u) ↑v) ^ 2 * 0d:ℕu:↑(Velocity d)v:↑(Velocity d)p:Lorentz.Vector dh1:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ (1 + (minkowskiProduct ↑u) ↑v) *
(-((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) +
2 *
((1 + (minkowskiProduct ↑u) ↑v) * ((minkowskiProduct p) ↑v + (minkowskiProduct p) ↑u * 2) -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) * ((minkowskiProduct ↑u) ↑v + 1))) -
((1 + (minkowskiProduct ↑u) ↑v) * ((minkowskiProduct p) ↑v + (minkowskiProduct p) ↑u * 2) -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v) * ((minkowskiProduct ↑u) ↑v + 1) +
(1 + (minkowskiProduct ↑u) ↑v) *
((minkowskiProduct p) ↑u * (1 + (minkowskiProduct ↑u) ↑v * 2) -
((minkowskiProduct p) ↑u + (minkowskiProduct p) ↑v))) =
(1 + (minkowskiProduct ↑u) ↑v) ^ 2 * 0 ring All goals completed! 🐙The time component of a generalised boost.
A proof of this result can be found at the below link: https://leanprover.zulipchat.com/#narrow/channel/479953-Physlib/topic/Lorentz.20group/near/523249684
lemma generalizedBoost_timeComponent_eq (u v : Velocity d) :
(generalizedBoost u v).1 (Sum.inl 0) (Sum.inl 0) = 1 +
‖u.1.timeComponent • v.1.spatialPart -
v.1.timeComponent • u.1.spatialPart‖ ^ 2 / (1 + ⟪u.1, v.1⟫ₘ) := by d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ ↑(generalizedBoost u v) (Sum.inl 0) (Sum.inl 0) =
1 +
‖(↑u).timeComponent • (↑v).spatialPart - (↑v).timeComponent • (↑u).spatialPart‖ ^ 2 / (1 + (minkowskiProduct ↑u) ↑v)
rw [generalizedBoost_apply_eq_toCoord d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ 1 (Sum.inl 0) (Sum.inl 0) + 2 * η (Sum.inl 0) (Sum.inl 0) * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
η (Sum.inl 0) (Sum.inl 0) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) /
(1 + (minkowskiProduct ↑u) ↑v) =
1 +
‖(↑u).timeComponent • (↑v).spatialPart - (↑v).timeComponent • (↑u).spatialPart‖ ^ 2 / (1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ 1 (Sum.inl 0) (Sum.inl 0) + 2 * η (Sum.inl 0) (Sum.inl 0) * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
η (Sum.inl 0) (Sum.inl 0) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) /
(1 + (minkowskiProduct ↑u) ↑v) =
1 +
‖(↑u).timeComponent • (↑v).spatialPart - (↑v).timeComponent • (↑u).spatialPart‖ ^ 2 / (1 + (minkowskiProduct ↑u) ↑v)] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ 1 (Sum.inl 0) (Sum.inl 0) + 2 * η (Sum.inl 0) (Sum.inl 0) * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
η (Sum.inl 0) (Sum.inl 0) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) /
(1 + (minkowskiProduct ↑u) ↑v) =
1 +
‖(↑u).timeComponent • (↑v).spatialPart - (↑v).timeComponent • (↑u).spatialPart‖ ^ 2 / (1 + (minkowskiProduct ↑u) ↑v)
simp only [Matrix.one_apply_eq, inl_0_inl_0, one_mul] d:ℕu:↑(Velocity d)v:↑(Velocity d)⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
‖(↑u).timeComponent • (↑v).spatialPart - (↑v).timeComponent • (↑u).spatialPart‖ ^ 2 / (1 + (minkowskiProduct ↑u) ↑v)
have h := Velocity.one_add_minkowskiProduct_ne_zero u v d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
‖(↑u).timeComponent • (↑v).spatialPart - (↑v).timeComponent • (↑u).spatialPart‖ ^ 2 / (1 + (minkowskiProduct ↑u) ↑v)
rw [norm_sub_sq_real, d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(‖(↑u).timeComponent • (↑v).spatialPart‖ ^ 2 -
2 * inner ℝ ((↑u).timeComponent • (↑v).spatialPart) ((↑v).timeComponent • (↑u).spatialPart) +
‖(↑v).timeComponent • (↑u).spatialPart‖ ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) norm_smul, d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
((‖(↑u).timeComponent‖ * ‖(↑v).spatialPart‖) ^ 2 -
2 * inner ℝ ((↑u).timeComponent • (↑v).spatialPart) ((↑v).timeComponent • (↑u).spatialPart) +
‖(↑v).timeComponent • (↑u).spatialPart‖ ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) norm_smul, d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
((‖(↑u).timeComponent‖ * ‖(↑v).spatialPart‖) ^ 2 -
2 * inner ℝ ((↑u).timeComponent • (↑v).spatialPart) ((↑v).timeComponent • (↑u).spatialPart) +
(‖(↑v).timeComponent‖ * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) Real.norm_eq_abs, d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
((|(↑u).timeComponent| * ‖(↑v).spatialPart‖) ^ 2 -
2 * inner ℝ ((↑u).timeComponent • (↑v).spatialPart) ((↑v).timeComponent • (↑u).spatialPart) +
(‖(↑v).timeComponent‖ * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) Real.norm_eq_abs, d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
((|(↑u).timeComponent| * ‖(↑v).spatialPart‖) ^ 2 -
2 * inner ℝ ((↑u).timeComponent • (↑v).spatialPart) ((↑v).timeComponent • (↑u).spatialPart) +
(|(↑v).timeComponent| * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v)
Velocity.timeComponent_abs u, d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * inner ℝ ((↑u).timeComponent • (↑v).spatialPart) ((↑v).timeComponent • (↑u).spatialPart) +
(|(↑v).timeComponent| * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) Velocity.timeComponent_abs v, d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * inner ℝ ((↑u).timeComponent • (↑v).spatialPart) ((↑v).timeComponent • (↑u).spatialPart) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v)
real_inner_smul_left, d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * inner ℝ (↑v).spatialPart ((↑v).timeComponent • (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) real_inner_smul_right d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v) d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v)] d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (minkowskiProduct ↑u) ↑v ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) / (1 + (minkowskiProduct ↑u) ↑v) =
1 +
(((↑u).timeComponent * ‖(↑v).spatialPart‖) ^ 2 -
2 * ((↑u).timeComponent * ((↑v).timeComponent * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
((↑v).timeComponent * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (minkowskiProduct ↑u) ↑v)
simp only [timeComponent, minkowskiProduct_eq_timeComponent_spatialPart] at * d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (↑u (Sum.inl 0) * ↑v (Sum.inl 0) - inner ℝ (↑u).spatialPart (↑v).spatialPart) ≠ 0⊢ 1 + 2 * 1 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) * (↑u (Sum.inl 0) + ↑v (Sum.inl 0)) /
(1 + (↑u (Sum.inl 0) * ↑v (Sum.inl 0) - inner ℝ (↑u).spatialPart (↑v).spatialPart)) =
1 +
((↑u (Sum.inl 0) * ‖(↑v).spatialPart‖) ^ 2 -
2 * (↑u (Sum.inl 0) * (↑v (Sum.inl 0) * inner ℝ (↑v).spatialPart (↑u).spatialPart)) +
(↑v (Sum.inl 0) * ‖(↑u).spatialPart‖) ^ 2) /
(1 + (↑u (Sum.inl 0) * ↑v (Sum.inl 0) - inner ℝ (↑u).spatialPart (↑v).spatialPart))
field_simp [h] d:ℕu:↑(Velocity d)v:↑(Velocity d)h:1 + (↑u (Sum.inl 0) * ↑v (Sum.inl 0) - inner ℝ (↑u).spatialPart (↑v).spatialPart) ≠ 0⊢ (1 + 2 * ↑u (Sum.inl 0) * ↑v (Sum.inl 0)) *
(1 + (↑u (Sum.inl 0) * ↑v (Sum.inl 0) - inner ℝ (↑u).spatialPart (↑v).spatialPart)) -
(↑u (Sum.inl 0) + ↑v (Sum.inl 0)) ^ 2 =
1 + (↑u (Sum.inl 0) * ↑v (Sum.inl 0) - inner ℝ (↑u).spatialPart (↑v).spatialPart) +
(↑u (Sum.inl 0) *
(↑u (Sum.inl 0) * ‖(↑v).spatialPart‖ ^ 2 - 2 * ↑v (Sum.inl 0) * inner ℝ (↑v).spatialPart (↑u).spatialPart) +
↑v (Sum.inl 0) ^ 2 * ‖(↑u).spatialPart‖ ^ 2)
nlinarith [mul_pow (u.1 (Sum.inl 0)) (‖v.1.spatialPart‖) 2,
mul_pow (v.1 (Sum.inl 0)) (‖u.1.spatialPart‖) 2,
Velocity.norm_spatialPart_sq_eq u, Velocity.norm_spatialPart_sq_eq v,
real_inner_comm (u.1.spatialPart) (v.1.spatialPart)] All goals completed! 🐙