PhysLean/HepLean/Lorentz/ComplexTensor/PauliMatrices/Basic.lean

254 lines
9.3 KiB
Text
Raw Normal View History

2024-10-28 15:02:22 +00:00
/-
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.Tensors.Tree.NodeIdentities.ProdAssoc
2024-10-29 10:37:18 +00:00
import HepLean.Tensors.Tree.NodeIdentities.ProdComm
2024-10-28 15:02:22 +00:00
import HepLean.Tensors.Tree.NodeIdentities.ProdContr
2024-10-29 10:37:18 +00:00
import HepLean.Tensors.Tree.NodeIdentities.ContrContr
import HepLean.Tensors.Tree.NodeIdentities.ContrSwap
import HepLean.Tensors.Tree.NodeIdentities.PermContr
2024-10-28 15:02:22 +00:00
import HepLean.Tensors.Tree.NodeIdentities.Congr
2024-11-09 17:46:52 +00:00
import HepLean.Lorentz.ComplexTensor.Metrics.Lemmas
2024-10-28 15:02:22 +00:00
/-!
## Pauli matrices as complex Lorentz tensors
-/
open IndexNotation
open CategoryTheory
open MonoidalCategory
open Matrix
open MatrixGroups
open Complex
open TensorProduct
open IndexNotation
open CategoryTheory
open TensorTree
open OverColor.Discrete
noncomputable section
namespace complexLorentzTensor
open Fermion
/-!
## Definitions.
-/
2024-10-29 11:32:04 +00:00
/-- The Pauli matrices as the complex Lorentz tensor `σ^μ^α^{dot β}`. -/
2024-10-28 15:02:22 +00:00
def pauliContr := {PauliMatrix.asConsTensor | ν α β}ᵀ.tensor
2024-10-28 15:29:58 +00:00
/-- The Pauli matrices as the complex Lorentz tensor `σ_μ^α^{dot β}`. -/
def pauliCo := {η' | μ ν ⊗ pauliContr | ν α β}ᵀ.tensor
2024-10-28 15:02:22 +00:00
2024-10-28 15:29:58 +00:00
/-- The Pauli matrices as the complex Lorentz tensor `σ_μ_α_{dot β}`. -/
def pauliCoDown := {pauliCo | μ α β ⊗ εL' | α α' ⊗ εR' | β β'}ᵀ.tensor
2024-10-28 15:02:22 +00:00
2024-10-28 15:29:58 +00:00
/-- The Pauli matrices as the complex Lorentz tensor `σ^μ_α_{dot β}`. -/
def pauliContrDown := {pauliContr | μ α β ⊗ εL' | α α' ⊗ εR' | β β'}ᵀ.tensor
2024-10-28 15:02:22 +00:00
/-!
## Tensor nodes.
-/
/-- The definitional tensor node relation for `pauliContr`. -/
lemma tensorNode_pauliContr : {pauliContr | μ α β}ᵀ.tensor =
{PauliMatrix.asConsTensor | ν α β}ᵀ.tensor := by
rfl
/-- The definitional tensor node relation for `pauliCo`. -/
2024-10-29 11:23:08 +00:00
lemma tensorNode_pauliCo : {pauliCo | μ α β}ᵀ.tensor =
2024-11-03 08:41:55 +00:00
{η' | μ ν ⊗ pauliContr | ν α β}ᵀ.tensor := by
rw [pauliCo, tensorNode_tensor]
2024-10-28 15:02:22 +00:00
/-- The definitional tensor node relation for `pauliCoDown`. -/
lemma tensorNode_pauliCoDown : {pauliCoDown | μ α β}ᵀ.tensor =
{pauliCo | μ α β ⊗ εL' | α α' ⊗ εR' | β β'}ᵀ.tensor := by
2024-11-03 08:41:55 +00:00
rw [pauliCoDown, tensorNode_tensor]
2024-10-28 15:02:22 +00:00
/-- The definitional tensor node relation for `pauliContrDown`. -/
lemma tensorNode_pauliContrDown : {pauliContrDown | μ α β}ᵀ.tensor =
{pauliContr | μ α β ⊗ εL' | α α' ⊗ εR' | β β'}ᵀ.tensor := by
2024-11-03 08:41:55 +00:00
rw [pauliContr, tensorNode_tensor]
2024-10-28 15:02:22 +00:00
rfl
2024-10-29 10:37:18 +00:00
/-!
## Basic equalities
-/
set_option maxRecDepth 5000 in
/-- A rearanging of `pauliCoDown` to place the pauli matrices on the right. -/
lemma pauliCoDown_eq_metric_mul_pauliCo :
{pauliCoDown | μ α' β' = εL' | α α' ⊗ εR' | β β' ⊗ pauliCo | μ α β}ᵀ := by
2024-10-29 10:37:18 +00:00
conv =>
lhs
rw [tensorNode_pauliCoDown]
rw [contr_tensor_eq <| contr_prod _ _ _]
rw [perm_contr]
erw [perm_tensor_eq <| contr_tensor_eq <| contr_tensor_eq <| perm_eq_id _ rfl _]
rw [perm_tensor_eq <| contr_congr 1 2]
rw [perm_perm]
rw [perm_tensor_eq <| contr_tensor_eq <| contr_congr 1 2]
rw [perm_tensor_eq <| perm_contr _ _]
rw [perm_perm]
rw [perm_tensor_eq <| contr_congr 1 2]
rw [perm_perm]
rw [perm_tensor_eq <| contr_tensor_eq <| contr_tensor_eq <| prod_assoc' _ _ _ _ _ _]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_contr _ _]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_tensor_eq <| contr_congr 1 2]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_perm _ _ _]
rw [perm_tensor_eq <| perm_contr _ _]
rw [perm_perm]
rw [perm_tensor_eq <| contr_congr 1 2]
rw [perm_perm]
2024-10-29 11:23:08 +00:00
rw [perm_tensor_eq <| contr_tensor_eq <| contr_tensor_eq <| prod_comm _ _ _ _]
2024-10-29 10:37:18 +00:00
rw [perm_tensor_eq <| contr_tensor_eq <| perm_contr _ _]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_tensor_eq <| contr_congr 5 0]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_perm _ _ _]
rw [perm_tensor_eq <| perm_contr _ _]
rw [perm_perm]
rw [perm_tensor_eq <| contr_congr 4 1]
rw [perm_perm]
conv =>
rhs
rw [perm_tensor_eq <| contr_swap _ _]
rw [perm_perm]
erw [perm_tensor_eq <| contr_congr 4 1]
rw [perm_perm]
rw [perm_tensor_eq <| contr_tensor_eq <| contr_swap _ _]
erw [perm_tensor_eq <| contr_tensor_eq <| perm_tensor_eq <| contr_congr 5 0]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_perm _ _ _]
rw [perm_tensor_eq <| perm_contr _ _]
rw [perm_perm]
rw [perm_tensor_eq <| contr_congr 4 1]
rw [perm_perm]
apply perm_congr _ rfl
decide
set_option maxRecDepth 5000 in
/-- A rearanging of `pauliContrDown` to place the pauli matrices on the right. -/
lemma pauliContrDown_eq_metric_mul_pauliContr :
{pauliContrDown | μ α' β' = εL' | α α' ⊗
εR' | β β' ⊗ pauliContr | μ α β}ᵀ := by
conv =>
lhs
rw [tensorNode_pauliContrDown]
rw [contr_tensor_eq <| contr_prod _ _ _]
rw [perm_contr]
erw [perm_tensor_eq <| contr_tensor_eq <| contr_tensor_eq <| perm_eq_id _ rfl _]
rw [perm_tensor_eq <| contr_congr 1 2]
rw [perm_perm]
rw [perm_tensor_eq <| contr_tensor_eq <| contr_congr 1 2]
rw [perm_tensor_eq <| perm_contr _ _]
rw [perm_perm]
rw [perm_tensor_eq <| contr_congr 1 2]
rw [perm_perm]
rw [perm_tensor_eq <| contr_tensor_eq <| contr_tensor_eq <| prod_assoc' _ _ _ _ _ _]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_contr _ _]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_tensor_eq <| contr_congr 1 2]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_perm _ _ _]
rw [perm_tensor_eq <| perm_contr _ _]
rw [perm_perm]
rw [perm_tensor_eq <| contr_congr 1 2]
rw [perm_perm]
2024-10-29 11:23:08 +00:00
rw [perm_tensor_eq <| contr_tensor_eq <| contr_tensor_eq <| prod_comm _ _ _ _]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_contr _ _]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_tensor_eq <| contr_congr 5 0]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_perm _ _ _]
rw [perm_tensor_eq <| perm_contr _ _]
rw [perm_perm]
rw [perm_tensor_eq <| contr_congr 4 1]
rw [perm_perm]
conv =>
rhs
rw [perm_tensor_eq <| contr_swap _ _]
rw [perm_perm]
erw [perm_tensor_eq <| contr_congr 4 1]
rw [perm_perm]
rw [perm_tensor_eq <| contr_tensor_eq <| contr_swap _ _]
erw [perm_tensor_eq <| contr_tensor_eq <| perm_tensor_eq <| contr_congr 5 0]
rw [perm_tensor_eq <| contr_tensor_eq <| perm_perm _ _ _]
rw [perm_tensor_eq <| perm_contr _ _]
rw [perm_perm]
rw [perm_tensor_eq <| contr_congr 4 1]
rw [perm_perm]
apply perm_congr _ rfl
decide
2024-10-29 10:37:18 +00:00
2024-10-29 12:32:33 +00:00
/-!
## Group actions
-/
/-- The tensor `pauliContr` is invariant under the action of `SL(2,)`. -/
lemma action_pauliContr (g : SL(2,)) : {g •ₐ pauliContr | μ α β}ᵀ.tensor =
{pauliContr | μ α β}ᵀ.tensor := by
rw [tensorNode_pauliContr, constThreeNodeE]
rw [← action_constThreeNode _ g]
rfl
/-- The tensor `pauliCo` is invariant under the action of `SL(2,)`. -/
lemma action_pauliCo (g : SL(2,)) : {g •ₐ pauliCo | μ α β}ᵀ.tensor =
{pauliCo | μ α β}ᵀ.tensor := by
conv =>
lhs
rw [action_tensor_eq <| tensorNode_pauliCo]
2024-11-03 08:41:55 +00:00
rw [action_tensor_eq <| contr_tensor_eq <| prod_tensor_eq_snd <| tensorNode_pauliContr]
2024-10-29 12:32:33 +00:00
rw [(contr_action _ _).symm]
rw [contr_tensor_eq <| (prod_action _ _ _).symm]
rw [contr_tensor_eq <| prod_tensor_eq_fst <| action_constTwoNode _ _]
rw [contr_tensor_eq <| prod_tensor_eq_snd <| action_constThreeNode _ _]
2024-11-03 08:41:55 +00:00
conv =>
rhs
rw [tensorNode_pauliCo]
rw [contr_tensor_eq <| prod_tensor_eq_snd <| tensorNode_pauliContr]
2024-10-29 12:32:33 +00:00
rfl
/-- The tensor `pauliCoDown` is invariant under the action of `SL(2,)`. -/
lemma action_pauliCoDown (g : SL(2,)) : {g •ₐ pauliCoDown | μ α β}ᵀ.tensor =
{pauliCoDown | μ α β}ᵀ.tensor := by
conv =>
lhs
rw [action_tensor_eq <| tensorNode_pauliCoDown]
rw [(contr_action _ _).symm]
rw [contr_tensor_eq <| (prod_action _ _ _).symm]
rw [contr_tensor_eq <| prod_tensor_eq_fst <| (contr_action _ _).symm]
rw [contr_tensor_eq <| prod_tensor_eq_fst <| contr_tensor_eq <| (prod_action _ _ _).symm]
rw [contr_tensor_eq <| prod_tensor_eq_fst <| contr_tensor_eq <| prod_tensor_eq_fst <|
action_pauliCo _]
rw [contr_tensor_eq <| prod_tensor_eq_fst <| contr_tensor_eq <| prod_tensor_eq_snd <|
2024-11-03 08:41:55 +00:00
action_altLeftMetric _]
rw [contr_tensor_eq <| prod_tensor_eq_snd <| action_altRightMetric _]
conv =>
rhs
rw [tensorNode_pauliCoDown]
2024-10-29 12:32:33 +00:00
/-- The tensor `pauliContrDown` is invariant under the action of `SL(2,)`. -/
lemma action_pauliContrDown (g : SL(2,)) : {g •ₐ pauliContrDown | μ α β}ᵀ.tensor =
{pauliContrDown | μ α β}ᵀ.tensor := by
conv =>
lhs
rw [action_tensor_eq <| tensorNode_pauliContrDown]
rw [(contr_action _ _).symm]
rw [contr_tensor_eq <| (prod_action _ _ _).symm]
rw [contr_tensor_eq <| prod_tensor_eq_fst <| (contr_action _ _).symm]
rw [contr_tensor_eq <| prod_tensor_eq_fst <| contr_tensor_eq <| (prod_action _ _ _).symm]
rw [contr_tensor_eq <| prod_tensor_eq_fst <| contr_tensor_eq <| prod_tensor_eq_fst <|
action_pauliContr _]
rw [contr_tensor_eq <| prod_tensor_eq_fst <| contr_tensor_eq <| prod_tensor_eq_snd <|
2024-11-03 08:41:55 +00:00
action_altLeftMetric _]
erw [contr_tensor_eq <| prod_tensor_eq_snd <| action_altRightMetric _]
conv =>
rhs
rw [tensorNode_pauliContrDown]
2024-10-29 12:32:33 +00:00
2024-10-28 15:02:22 +00:00
end complexLorentzTensor