272 lines
12 KiB
Text
272 lines
12 KiB
Text
![]() |
/-
|
|||
|
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
|
|||
|
-/
|
|||
|
import HepLean.SpaceTime.LorentzVector.Complex.Basic
|
|||
|
import Mathlib.LinearAlgebra.TensorProduct.Matrix
|
|||
|
/-!
|
|||
|
|
|||
|
# Tensor products of two complex Lorentz vectors
|
|||
|
|
|||
|
-/
|
|||
|
noncomputable section
|
|||
|
|
|||
|
open Matrix
|
|||
|
open MatrixGroups
|
|||
|
open Complex
|
|||
|
open TensorProduct
|
|||
|
open SpaceTime
|
|||
|
open CategoryTheory.MonoidalCategory
|
|||
|
namespace Lorentz
|
|||
|
|
|||
|
/-- Equivalence of `complexContr ⊗ complexContr` to `4 x 4` complex matrices. -/
|
|||
|
def contrContrToMatrix : (complexContr ⊗ complexContr).V ≃ₗ[ℂ]
|
|||
|
Matrix (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3) ℂ :=
|
|||
|
(Basis.tensorProduct complexContrBasis complexContrBasis).repr ≪≫ₗ
|
|||
|
Finsupp.linearEquivFunOnFinite ℂ ℂ ((Fin 1 ⊕ Fin 3) × (Fin 1 ⊕ Fin 3)) ≪≫ₗ
|
|||
|
LinearEquiv.curry ℂ ℂ (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3)
|
|||
|
|
|||
|
/-- Equivalence of `complexCo ⊗ complexCo` to `4 x 4` complex matrices. -/
|
|||
|
def coCoToMatrix : (complexCo ⊗ complexCo).V ≃ₗ[ℂ]
|
|||
|
Matrix (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3) ℂ :=
|
|||
|
(Basis.tensorProduct complexCoBasis complexCoBasis).repr ≪≫ₗ
|
|||
|
Finsupp.linearEquivFunOnFinite ℂ ℂ ((Fin 1 ⊕ Fin 3) × (Fin 1 ⊕ Fin 3)) ≪≫ₗ
|
|||
|
LinearEquiv.curry ℂ ℂ (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3)
|
|||
|
|
|||
|
/-- Equivalence of `complexContr ⊗ complexCo` to `4 x 4` complex matrices. -/
|
|||
|
def contrCoToMatrix : (complexContr ⊗ complexCo).V ≃ₗ[ℂ]
|
|||
|
Matrix (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3) ℂ :=
|
|||
|
(Basis.tensorProduct complexContrBasis complexCoBasis).repr ≪≫ₗ
|
|||
|
Finsupp.linearEquivFunOnFinite ℂ ℂ ((Fin 1 ⊕ Fin 3) × (Fin 1 ⊕ Fin 3)) ≪≫ₗ
|
|||
|
LinearEquiv.curry ℂ ℂ (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3)
|
|||
|
|
|||
|
/-- Equivalence of `complexCo ⊗ complexContr` to `4 x 4` complex matrices. -/
|
|||
|
def coContrToMatrix : (complexCo ⊗ complexContr).V ≃ₗ[ℂ]
|
|||
|
Matrix (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3) ℂ :=
|
|||
|
(Basis.tensorProduct complexCoBasis complexContrBasis).repr ≪≫ₗ
|
|||
|
Finsupp.linearEquivFunOnFinite ℂ ℂ ((Fin 1 ⊕ Fin 3) × (Fin 1 ⊕ Fin 3)) ≪≫ₗ
|
|||
|
LinearEquiv.curry ℂ ℂ (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3)
|
|||
|
|
|||
|
/-!
|
|||
|
|
|||
|
## Group actions
|
|||
|
|
|||
|
-/
|
|||
|
|
|||
|
lemma contrContrToMatrix_ρ (v : (complexContr ⊗ complexContr).V) (M : SL(2,ℂ)) :
|
|||
|
contrContrToMatrix (TensorProduct.map (complexContr.ρ M) (complexContr.ρ M) v) =
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M)) * contrContrToMatrix v *
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))ᵀ := by
|
|||
|
nth_rewrite 1 [contrContrToMatrix]
|
|||
|
simp only [Action.instMonoidalCategory_tensorObj_V, LinearEquiv.trans_apply]
|
|||
|
trans (LinearEquiv.curry ℂ ℂ (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3)) ((LinearMap.toMatrix
|
|||
|
(complexContrBasis.tensorProduct complexContrBasis)
|
|||
|
(complexContrBasis.tensorProduct complexContrBasis)
|
|||
|
(TensorProduct.map (complexContr.ρ M) (complexContr.ρ M)))
|
|||
|
*ᵥ ((Finsupp.linearEquivFunOnFinite ℂ ℂ ((Fin 1 ⊕ Fin 3) × (Fin 1 ⊕ Fin 3)))
|
|||
|
((complexContrBasis.tensorProduct complexContrBasis).repr v)))
|
|||
|
· apply congrArg
|
|||
|
have h1 := (LinearMap.toMatrix_mulVec_repr (complexContrBasis.tensorProduct complexContrBasis)
|
|||
|
(complexContrBasis.tensorProduct complexContrBasis)
|
|||
|
(TensorProduct.map (complexContr.ρ M) (complexContr.ρ M)) v)
|
|||
|
erw [h1]
|
|||
|
rfl
|
|||
|
rw [TensorProduct.toMatrix_map]
|
|||
|
funext i j
|
|||
|
change ∑ k, ((kroneckerMap (fun x1 x2 => x1 * x2)
|
|||
|
((LinearMap.toMatrix complexContrBasis complexContrBasis) (complexContr.ρ M))
|
|||
|
((LinearMap.toMatrix complexContrBasis complexContrBasis) (complexContr.ρ M)) (i, j) k)
|
|||
|
* contrContrToMatrix v k.1 k.2) = _
|
|||
|
erw [Finset.sum_product]
|
|||
|
simp_rw [kroneckerMap_apply, Matrix.mul_apply, Matrix.transpose_apply]
|
|||
|
have h1 : ∑ x, (∑ x1 , LorentzGroup.toComplex (SL2C.toLorentzGroup M) i x1 *
|
|||
|
contrContrToMatrix v x1 x) * LorentzGroup.toComplex (SL2C.toLorentzGroup M) j x
|
|||
|
= ∑ x , ∑ x1 , (LorentzGroup.toComplex (SL2C.toLorentzGroup M) i x1
|
|||
|
* contrContrToMatrix v x1 x) * LorentzGroup.toComplex (SL2C.toLorentzGroup M) j x := by
|
|||
|
congr
|
|||
|
funext x
|
|||
|
rw [Finset.sum_mul]
|
|||
|
erw [h1]
|
|||
|
rw [Finset.sum_comm]
|
|||
|
congr
|
|||
|
funext x
|
|||
|
congr
|
|||
|
funext x1
|
|||
|
simp only [complexContrBasis_ρ_apply, transpose_apply, Action.instMonoidalCategory_tensorObj_V]
|
|||
|
ring
|
|||
|
|
|||
|
lemma coCoToMatrix_ρ (v : (complexCo ⊗ complexCo).V) (M : SL(2,ℂ)) :
|
|||
|
coCoToMatrix (TensorProduct.map (complexCo.ρ M) (complexCo.ρ M) v) =
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ᵀ * coCoToMatrix v *
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ := by
|
|||
|
nth_rewrite 1 [coCoToMatrix]
|
|||
|
simp only [Action.instMonoidalCategory_tensorObj_V, LinearEquiv.trans_apply]
|
|||
|
trans (LinearEquiv.curry ℂ ℂ (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3)) ((LinearMap.toMatrix
|
|||
|
(complexCoBasis.tensorProduct complexCoBasis)
|
|||
|
(complexCoBasis.tensorProduct complexCoBasis)
|
|||
|
(TensorProduct.map (complexCo.ρ M) (complexCo.ρ M))
|
|||
|
*ᵥ ((Finsupp.linearEquivFunOnFinite ℂ ℂ ((Fin 1 ⊕ Fin 3) × (Fin 1 ⊕ Fin 3)))
|
|||
|
((complexCoBasis.tensorProduct complexCoBasis).repr v))))
|
|||
|
· apply congrArg
|
|||
|
have h1 := (LinearMap.toMatrix_mulVec_repr (complexCoBasis.tensorProduct complexCoBasis)
|
|||
|
(complexCoBasis.tensorProduct complexCoBasis)
|
|||
|
(TensorProduct.map (complexCo.ρ M) (complexCo.ρ M)) v)
|
|||
|
erw [h1]
|
|||
|
rfl
|
|||
|
rw [TensorProduct.toMatrix_map]
|
|||
|
funext i j
|
|||
|
change ∑ k, ((kroneckerMap (fun x1 x2 => x1 * x2)
|
|||
|
((LinearMap.toMatrix complexCoBasis complexCoBasis) (complexCo.ρ M))
|
|||
|
((LinearMap.toMatrix complexCoBasis complexCoBasis) (complexCo.ρ M)) (i, j) k)
|
|||
|
* coCoToMatrix v k.1 k.2) = _
|
|||
|
erw [Finset.sum_product]
|
|||
|
simp_rw [kroneckerMap_apply, Matrix.mul_apply, Matrix.transpose_apply]
|
|||
|
have h1 : ∑ x, (∑ x1 , (LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ x1 i *
|
|||
|
coCoToMatrix v x1 x) * (LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ x j
|
|||
|
= ∑ x , ∑ x1 , ((LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ x1 i
|
|||
|
* coCoToMatrix v x1 x) * (LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ x j := by
|
|||
|
congr
|
|||
|
funext x
|
|||
|
rw [Finset.sum_mul]
|
|||
|
erw [h1]
|
|||
|
rw [Finset.sum_comm]
|
|||
|
congr
|
|||
|
funext x
|
|||
|
congr
|
|||
|
funext x1
|
|||
|
simp only [complexCoBasis_ρ_apply, transpose_apply, Action.instMonoidalCategory_tensorObj_V]
|
|||
|
ring
|
|||
|
|
|||
|
lemma contrCoToMatrix_ρ (v : (complexContr ⊗ complexCo).V) (M : SL(2,ℂ)) :
|
|||
|
contrCoToMatrix (TensorProduct.map (complexContr.ρ M) (complexCo.ρ M) v) =
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M)) * contrCoToMatrix v *
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ := by
|
|||
|
nth_rewrite 1 [contrCoToMatrix]
|
|||
|
simp only [Action.instMonoidalCategory_tensorObj_V, LinearEquiv.trans_apply]
|
|||
|
trans (LinearEquiv.curry ℂ ℂ (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3)) ((LinearMap.toMatrix
|
|||
|
(complexContrBasis.tensorProduct complexCoBasis)
|
|||
|
(complexContrBasis.tensorProduct complexCoBasis)
|
|||
|
(TensorProduct.map (complexContr.ρ M) (complexCo.ρ M))
|
|||
|
*ᵥ ((Finsupp.linearEquivFunOnFinite ℂ ℂ ((Fin 1 ⊕ Fin 3) × (Fin 1 ⊕ Fin 3)))
|
|||
|
((complexContrBasis.tensorProduct complexCoBasis).repr v))))
|
|||
|
· apply congrArg
|
|||
|
have h1 := (LinearMap.toMatrix_mulVec_repr (complexContrBasis.tensorProduct complexCoBasis)
|
|||
|
(complexContrBasis.tensorProduct complexCoBasis)
|
|||
|
(TensorProduct.map (complexContr.ρ M) (complexCo.ρ M)) v)
|
|||
|
erw [h1]
|
|||
|
rfl
|
|||
|
rw [TensorProduct.toMatrix_map]
|
|||
|
funext i j
|
|||
|
change ∑ k, ((kroneckerMap (fun x1 x2 => x1 * x2)
|
|||
|
((LinearMap.toMatrix complexContrBasis complexContrBasis) (complexContr.ρ M))
|
|||
|
((LinearMap.toMatrix complexCoBasis complexCoBasis) (complexCo.ρ M)) (i, j) k)
|
|||
|
* contrCoToMatrix v k.1 k.2) = _
|
|||
|
erw [Finset.sum_product]
|
|||
|
simp_rw [kroneckerMap_apply, Matrix.mul_apply]
|
|||
|
have h1 : ∑ x, (∑ x1 , LorentzGroup.toComplex (SL2C.toLorentzGroup M) i x1 *
|
|||
|
contrCoToMatrix v x1 x) * (LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ x j
|
|||
|
= ∑ x , ∑ x1 , (LorentzGroup.toComplex (SL2C.toLorentzGroup M) i x1
|
|||
|
* contrCoToMatrix v x1 x) * (LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ x j := by
|
|||
|
congr
|
|||
|
funext x
|
|||
|
rw [Finset.sum_mul]
|
|||
|
erw [h1]
|
|||
|
rw [Finset.sum_comm]
|
|||
|
congr
|
|||
|
funext x
|
|||
|
congr
|
|||
|
funext x1
|
|||
|
simp only [complexContrBasis_ρ_apply, complexCoBasis_ρ_apply, transpose_apply,
|
|||
|
Action.instMonoidalCategory_tensorObj_V]
|
|||
|
ring
|
|||
|
|
|||
|
lemma coContrToMatrix_ρ (v : (complexCo ⊗ complexContr).V) (M : SL(2,ℂ)) :
|
|||
|
coContrToMatrix (TensorProduct.map (complexCo.ρ M) (complexContr.ρ M) v) =
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ᵀ * coContrToMatrix v *
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))ᵀ := by
|
|||
|
nth_rewrite 1 [coContrToMatrix]
|
|||
|
simp only [Action.instMonoidalCategory_tensorObj_V, LinearEquiv.trans_apply]
|
|||
|
trans (LinearEquiv.curry ℂ ℂ (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3)) ((LinearMap.toMatrix
|
|||
|
(complexCoBasis.tensorProduct complexContrBasis)
|
|||
|
(complexCoBasis.tensorProduct complexContrBasis)
|
|||
|
(TensorProduct.map (complexCo.ρ M) (complexContr.ρ M))
|
|||
|
*ᵥ ((Finsupp.linearEquivFunOnFinite ℂ ℂ ((Fin 1 ⊕ Fin 3) × (Fin 1 ⊕ Fin 3)))
|
|||
|
((complexCoBasis.tensorProduct complexContrBasis).repr v))))
|
|||
|
· apply congrArg
|
|||
|
have h1 := (LinearMap.toMatrix_mulVec_repr (complexCoBasis.tensorProduct complexContrBasis)
|
|||
|
(complexCoBasis.tensorProduct complexContrBasis)
|
|||
|
(TensorProduct.map (complexCo.ρ M) (complexContr.ρ M)) v)
|
|||
|
erw [h1]
|
|||
|
rfl
|
|||
|
rw [TensorProduct.toMatrix_map]
|
|||
|
funext i j
|
|||
|
change ∑ k, ((kroneckerMap (fun x1 x2 => x1 * x2)
|
|||
|
((LinearMap.toMatrix complexCoBasis complexCoBasis) (complexCo.ρ M))
|
|||
|
((LinearMap.toMatrix complexContrBasis complexContrBasis) (complexContr.ρ M)) (i, j) k)
|
|||
|
* coContrToMatrix v k.1 k.2) = _
|
|||
|
erw [Finset.sum_product]
|
|||
|
simp_rw [kroneckerMap_apply, Matrix.mul_apply, Matrix.transpose_apply]
|
|||
|
have h1 : ∑ x, (∑ x1 , (LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ x1 i *
|
|||
|
coContrToMatrix v x1 x) * (LorentzGroup.toComplex (SL2C.toLorentzGroup M)) j x
|
|||
|
= ∑ x , ∑ x1 , ((LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ x1 i
|
|||
|
* coContrToMatrix v x1 x) * (LorentzGroup.toComplex (SL2C.toLorentzGroup M)) j x := by
|
|||
|
congr
|
|||
|
funext x
|
|||
|
rw [Finset.sum_mul]
|
|||
|
erw [h1]
|
|||
|
rw [Finset.sum_comm]
|
|||
|
congr
|
|||
|
funext x
|
|||
|
congr
|
|||
|
funext x1
|
|||
|
simp only [complexCoBasis_ρ_apply, complexContrBasis_ρ_apply, transpose_apply,
|
|||
|
Action.instMonoidalCategory_tensorObj_V]
|
|||
|
ring
|
|||
|
|
|||
|
/-!
|
|||
|
|
|||
|
## The symm version of the group actions.
|
|||
|
|
|||
|
|
|||
|
-/
|
|||
|
|
|||
|
lemma contrContrToMatrix_ρ_symm (v : Matrix (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3) ℂ) (M : SL(2,ℂ)) :
|
|||
|
TensorProduct.map (complexContr.ρ M) (complexContr.ρ M) (contrContrToMatrix.symm v) =
|
|||
|
contrContrToMatrix.symm ((LorentzGroup.toComplex (SL2C.toLorentzGroup M)) * v *
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))ᵀ) := by
|
|||
|
have h1 := contrContrToMatrix_ρ (contrContrToMatrix.symm v) M
|
|||
|
simp only [Action.instMonoidalCategory_tensorObj_V, LinearEquiv.apply_symm_apply] at h1
|
|||
|
rw [← h1]
|
|||
|
simp
|
|||
|
|
|||
|
lemma coCoToMatrix_ρ_symm (v : Matrix (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3) ℂ) (M : SL(2,ℂ)) :
|
|||
|
TensorProduct.map (complexCo.ρ M) (complexCo.ρ M) (coCoToMatrix.symm v) =
|
|||
|
coCoToMatrix.symm ((LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ᵀ * v *
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹) := by
|
|||
|
have h1 := coCoToMatrix_ρ (coCoToMatrix.symm v) M
|
|||
|
simp only [Action.instMonoidalCategory_tensorObj_V, LinearEquiv.apply_symm_apply] at h1
|
|||
|
rw [← h1]
|
|||
|
simp
|
|||
|
|
|||
|
lemma contrCoToMatrix_ρ_symm (v : Matrix (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3) ℂ) (M : SL(2,ℂ)) :
|
|||
|
TensorProduct.map (complexContr.ρ M) (complexCo.ρ M) (contrCoToMatrix.symm v) =
|
|||
|
contrCoToMatrix.symm ((LorentzGroup.toComplex (SL2C.toLorentzGroup M)) * v *
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹) := by
|
|||
|
have h1 := contrCoToMatrix_ρ (contrCoToMatrix.symm v) M
|
|||
|
simp only [Action.instMonoidalCategory_tensorObj_V, LinearEquiv.apply_symm_apply] at h1
|
|||
|
rw [← h1]
|
|||
|
simp
|
|||
|
|
|||
|
lemma coContrToMatrix_ρ_symm (v : Matrix (Fin 1 ⊕ Fin 3) (Fin 1 ⊕ Fin 3) ℂ) (M : SL(2,ℂ)) :
|
|||
|
TensorProduct.map (complexCo.ρ M) (complexContr.ρ M) (coContrToMatrix.symm v) =
|
|||
|
coContrToMatrix.symm ((LorentzGroup.toComplex (SL2C.toLorentzGroup M))⁻¹ᵀ * v *
|
|||
|
(LorentzGroup.toComplex (SL2C.toLorentzGroup M))ᵀ) := by
|
|||
|
have h1 := coContrToMatrix_ρ (coContrToMatrix.symm v) M
|
|||
|
simp only [Action.instMonoidalCategory_tensorObj_V, LinearEquiv.apply_symm_apply] at h1
|
|||
|
rw [← h1]
|
|||
|
simp
|
|||
|
|
|||
|
end Lorentz
|
|||
|
end
|