PhysLean/HepLean/SpaceTime/LorentzVector/AsSelfAdjointMatrix.lean

108 lines
5 KiB
Text
Raw Normal View History

2024-07-02 10:13:52 -04:00
/-
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
2024-07-12 16:39:44 -04:00
Released under Apache 2.0 license as described in the file LICENSE.
2024-07-02 10:13:52 -04:00
Authors: Joseph Tooby-Smith
-/
import HepLean.SpaceTime.MinkowskiMetric
2024-10-16 10:39:11 +00:00
import HepLean.SpaceTime.PauliMatrices.SelfAdjoint
2024-07-02 10:13:52 -04:00
import Mathlib.LinearAlgebra.Matrix.SpecialLinearGroup
2024-10-16 10:39:11 +00:00
import Mathlib.Tactic.Polyrith
2024-07-02 10:13:52 -04:00
/-!
2024-07-18 08:36:56 -04:00
# Lorentz vector as a self-adjoint matrix
2024-07-02 10:13:52 -04:00
There is a linear equivalence between the vector space of space-time points
and the vector space of 2×2-complex self-adjoint matrices.
In this file we define this linear equivalence in `toSelfAdjointMatrix`.
-/
2024-07-10 07:55:42 -04:00
/-! TODO: Generalize rep of Lorentz vector as a self-adjoint matrix to arbitrary dimension. -/
2024-07-02 10:13:52 -04:00
namespace SpaceTime
open Matrix
open MatrixGroups
open Complex
2024-10-16 10:39:11 +00:00
noncomputable section
2024-07-02 10:13:52 -04:00
2024-10-16 10:39:11 +00:00
/-- The linear equivalence between the vector-space `spaceTime` and self-adjoint
`2×2`-complex matrices. -/
def toSelfAdjointMatrix : LorentzVector 3 ≃ₗ[] selfAdjoint (Matrix (Fin 2) (Fin 2) ) :=
(Finsupp.linearEquivFunOnFinite (Fin 1 ⊕ Fin 3)).symm ≪≫ₗ PauliMatrix.σSAL.repr.symm
2024-07-02 10:13:52 -04:00
2024-10-16 10:39:11 +00:00
lemma toSelfAdjointMatrix_apply (x : LorentzVector 3) : toSelfAdjointMatrix x =
x (Sum.inl 0) • ⟨PauliMatrix.σ0, PauliMatrix.σ0_selfAdjoint⟩
- x (Sum.inr 0) • ⟨PauliMatrix.σ1, PauliMatrix.σ1_selfAdjoint⟩
- x (Sum.inr 1) • ⟨PauliMatrix.σ2, PauliMatrix.σ2_selfAdjoint⟩
2024-10-16 10:57:46 +00:00
- x (Sum.inr 2) • ⟨PauliMatrix.σ3, PauliMatrix.σ3_selfAdjoint⟩ := by
2024-10-16 10:39:11 +00:00
simp only [toSelfAdjointMatrix, PauliMatrix.σSAL, LinearEquiv.trans_apply, Basis.repr_symm_apply,
Basis.coe_mk, Fin.isValue]
rw [Finsupp.linearCombination_apply_of_mem_supported (s := Finset.univ)]
2024-10-16 10:57:46 +00:00
· change (∑ i : Fin 1 ⊕ Fin 3, x i • PauliMatrix.σSAL' i) = _
2024-10-16 11:09:52 +00:00
simp only [PauliMatrix.σSAL', Fintype.sum_sum_type, Finset.univ_unique, Fin.default_eq_zero,
Fin.isValue, Finset.sum_singleton, Fin.sum_univ_three]
2024-10-16 10:39:11 +00:00
apply Subtype.ext
simp only [Fin.isValue, AddSubgroup.coe_add, selfAdjoint.val_smul, smul_neg,
AddSubgroupClass.coe_sub]
simp only [neg_add, add_assoc, sub_eq_add_neg]
· simp_all only [Finset.coe_univ, Finsupp.supported_univ, Submodule.mem_top]
2024-07-02 10:13:52 -04:00
2024-10-16 10:39:11 +00:00
lemma toSelfAdjointMatrix_apply_coe (x : LorentzVector 3) : (toSelfAdjointMatrix x).1 =
x (Sum.inl 0) • PauliMatrix.σ0
- x (Sum.inr 0) • PauliMatrix.σ1
- x (Sum.inr 1) • PauliMatrix.σ2
2024-10-16 10:57:46 +00:00
- x (Sum.inr 2) • PauliMatrix.σ3 := by
2024-10-16 10:39:11 +00:00
rw [toSelfAdjointMatrix_apply]
simp only [Fin.isValue, AddSubgroupClass.coe_sub, selfAdjoint.val_smul]
2024-07-02 10:13:52 -04:00
2024-10-16 10:39:11 +00:00
lemma toSelfAdjointMatrix_stdBasis (i : Fin 1 ⊕ Fin 3) :
toSelfAdjointMatrix (LorentzVector.stdBasis i) = PauliMatrix.σSAL i := by
rw [toSelfAdjointMatrix_apply]
2024-07-02 10:13:52 -04:00
match i with
2024-10-16 10:39:11 +00:00
| Sum.inl 0 =>
2024-10-16 11:09:52 +00:00
simp only [LorentzVector.stdBasis, Fin.isValue]
2024-10-16 10:39:11 +00:00
erw [Pi.basisFun_apply]
2024-10-16 10:57:46 +00:00
simp [PauliMatrix.σSAL, PauliMatrix.σSAL']
2024-10-16 10:39:11 +00:00
| Sum.inr 0 =>
2024-10-16 11:09:52 +00:00
simp only [LorentzVector.stdBasis, Fin.isValue]
2024-10-16 10:39:11 +00:00
erw [Pi.basisFun_apply]
2024-10-16 11:09:52 +00:00
simp only [Fin.isValue, ne_eq, reduceCtorEq, not_false_eq_true, Pi.single_eq_of_ne, zero_smul,
Pi.single_eq_same, one_smul, zero_sub, Sum.inr.injEq, one_ne_zero, sub_zero, Fin.reduceEq,
PauliMatrix.σSAL, Basis.coe_mk, PauliMatrix.σSAL']
2024-10-16 10:39:11 +00:00
refine Eq.symm (PauliMatrix.selfAdjoint_ext rfl rfl rfl rfl)
| Sum.inr 1 =>
2024-10-16 11:09:52 +00:00
simp only [LorentzVector.stdBasis, Fin.isValue]
2024-10-16 10:39:11 +00:00
erw [Pi.basisFun_apply]
2024-10-16 11:09:52 +00:00
simp only [Fin.isValue, ne_eq, reduceCtorEq, not_false_eq_true, Pi.single_eq_of_ne, zero_smul,
Sum.inr.injEq, zero_ne_one, sub_self, Pi.single_eq_same, one_smul, zero_sub, Fin.reduceEq,
sub_zero, PauliMatrix.σSAL, Basis.coe_mk, PauliMatrix.σSAL']
2024-10-16 10:39:11 +00:00
refine Eq.symm (PauliMatrix.selfAdjoint_ext rfl rfl rfl rfl)
| Sum.inr 2 =>
2024-10-16 11:09:52 +00:00
simp only [LorentzVector.stdBasis, Fin.isValue]
2024-10-16 10:39:11 +00:00
erw [Pi.basisFun_apply]
2024-10-16 11:09:52 +00:00
simp only [Fin.isValue, ne_eq, reduceCtorEq, not_false_eq_true, Pi.single_eq_of_ne, zero_smul,
Sum.inr.injEq, Fin.reduceEq, sub_self, Pi.single_eq_same, one_smul, zero_sub,
PauliMatrix.σSAL, Basis.coe_mk, PauliMatrix.σSAL']
2024-10-16 10:39:11 +00:00
refine Eq.symm (PauliMatrix.selfAdjoint_ext rfl rfl rfl rfl)
2024-07-02 10:13:52 -04:00
2024-10-16 10:39:11 +00:00
@[simp]
lemma toSelfAdjointMatrix_symm_basis (i : Fin 1 ⊕ Fin 3) :
toSelfAdjointMatrix.symm (PauliMatrix.σSAL i) = (LorentzVector.stdBasis i) := by
refine (LinearEquiv.symm_apply_eq toSelfAdjointMatrix).mpr ?_
rw [toSelfAdjointMatrix_stdBasis]
2024-07-02 10:13:52 -04:00
open minkowskiMetric in
lemma det_eq_ηLin (x : LorentzVector 3) : det (toSelfAdjointMatrix x).1 = ⟪x, x⟫ₘ := by
2024-10-16 10:39:11 +00:00
rw [toSelfAdjointMatrix_apply_coe]
simp only [Fin.isValue, eq_time_minus_inner_prod, LorentzVector.time, LorentzVector.space,
2024-07-02 10:13:52 -04:00
PiLp.inner_apply, Function.comp_apply, RCLike.inner_apply, conj_trivial, Fin.sum_univ_three,
ofReal_sub, ofReal_mul, ofReal_add]
2024-10-16 10:39:11 +00:00
simp only [Fin.isValue, PauliMatrix.σ0, smul_of, smul_cons, real_smul, mul_one, smul_zero,
smul_empty, PauliMatrix.σ1, of_sub_of, sub_cons, head_cons, sub_zero, tail_cons, zero_sub,
sub_self, zero_empty, PauliMatrix.σ2, smul_neg, sub_neg_eq_add, PauliMatrix.σ3, det_fin_two_of]
2024-07-02 10:13:52 -04:00
ring_nf
simp only [Fin.isValue, I_sq, mul_neg, mul_one]
ring
2024-10-16 10:39:11 +00:00
end
2024-07-02 10:13:52 -04:00
end SpaceTime