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.Fermions.Weyl.Unit

Metrics of Weyl fermions

We define the metrics for Weyl fermions, often denoted ε in the literature. These allow us to go from left-handed to dual-left-handed Weyl fermions and back, and from right-handed to dual-right-handed Weyl fermions and back.

@[expose] public section

The raw 2x2 matrix corresponding to the metric for fermions.

def metricRaw : Matrix (Fin 2) (Fin 2) := !![0, 1; -1, 0]

Multiplying an element of SL(2, ℂ) on the left with the metric 𝓔 is equivalent to multiplying the inverse-transpose of that element on the right with the metric.

M:SL(2, )!![M 0 0 * 0 + M 0 1 * -1, M 0 0 * 1 + M 0 1 * 0; M 1 0 * 0 + M 1 1 * -1, M 1 0 * 1 + M 1 1 * 0] = !![0, 1; -1, 0] * !![!![M 1 1, -M 0 1; -M 1 0, M 0 0] 0 0, !![M 1 1, -M 0 1; -M 1 0, M 0 0] 0 1; !![M 1 1, -M 0 1; -M 1 0, M 0 0] 1 0, !![M 1 1, -M 0 1; -M 1 0, M 0 0] 1 1] All goals completed! 🐙
M:SL(2, )!![0 * M 0 0 + 1 * M 1 0, 0 * M 0 1 + 1 * M 1 1; -1 * M 0 0 + 0 * M 1 0, -1 * M 0 1 + 0 * M 1 1] = !![!![M 1 1, -M 0 1; -M 1 0, M 0 0] 0 0, !![M 1 1, -M 0 1; -M 1 0, M 0 0] 0 1; !![M 1 1, -M 0 1; -M 1 0, M 0 0] 1 0, !![M 1 1, -M 0 1; -M 1 0, M 0 0] 1 1] * !![0, 1; -1, 0] All goals completed! 🐙M:SL(2, )!![!![M 0 0, M 0 1; M 1 0, M 1 1].map star 0 0, !![M 0 0, M 0 1; M 1 0, M 1 1].map star 0 1; !![M 0 0, M 0 1; M 1 0, M 1 1].map star 1 0, !![M 0 0, M 0 1; M 1 0, M 1 1].map star 1 1] * !![0, 1; -1, 0] = !![0, 1; -1, 0] * !![!![M 1 1, -M 0 1; -M 1 0, M 0 0] 0 0, !![M 1 1, -M 0 1; -M 1 0, M 0 0] 0 1; !![M 1 1, -M 0 1; -M 1 0, M 0 0] 1 0, !![M 1 1, -M 0 1; -M 1 0, M 0 0] 1 1] All goals completed! 🐙M:SL(2, )!![0, 1; -1, 0] * !![!![M 0 0, M 0 1; M 1 0, M 1 1].map star 0 0, !![M 0 0, M 0 1; M 1 0, M 1 1].map star 0 1; !![M 0 0, M 0 1; M 1 0, M 1 1].map star 1 0, !![M 0 0, M 0 1; M 1 0, M 1 1].map star 1 1] = !![!![M 1 1, -M 0 1; -M 1 0, M 0 0] 0 0, !![M 1 1, -M 0 1; -M 1 0, M 0 0] 0 1; !![M 1 1, -M 0 1; -M 1 0, M 0 0] 1 0, !![M 1 1, -M 0 1; -M 1 0, M 0 0] 1 1] * !![0, 1; -1, 0] All goals completed! 🐙

The metric εᵃᵃ as an element of (leftHanded ⊗ leftHanded).V.

def leftMetricVal : LeftHandedWeyl ⊗[] LeftHandedWeyl := leftLeftToMatrix.symm (- metricRaw)

Expansion of leftMetricVal into the left basis.

set_option backward.isDefEq.respectTransparency false in i, j, (-metricRaw) i j LeftHandedWeyl.basis i ⊗ₜ[] LeftHandedWeyl.basis j = -LeftHandedWeyl.basis 0 ⊗ₜ[] LeftHandedWeyl.basis 1 + LeftHandedWeyl.basis 1 ⊗ₜ[] LeftHandedWeyl.basis 0 -1 LeftHandedWeyl.basis 0 ⊗ₜ[] LeftHandedWeyl.basis 1 = -LeftHandedWeyl.basis 0 ⊗ₜ[] LeftHandedWeyl.basis 1 All goals completed! 🐙

The metric εᵃᵃ as a morphism 𝟙_ (Rep ℂ SL(2,ℂ)) ⟶ leftHanded ⊗ leftHanded, making manifest its invariance under the action of SL(2,ℂ).

M:SL(2, )x:metricRaw = metricRaw * (M * (↑M)⁻¹) All goals completed! 🐙
lemma leftMetric_apply_one : leftMetric (1 : ) = leftMetricVal := leftMetric 1 = leftMetricVal 1 leftMetricVal = leftMetricVal All goals completed! 🐙

The metric εₐₐ as an element of (dualLeftHanded ⊗ dualLeftHanded).V.

def dualLeftMetricVal : (DualLeftHandedWeyl ⊗[] DualLeftHandedWeyl) := dualLeftdualLeftToMatrix.symm metricRaw

Expansion of dualLeftMetricVal into the left basis.

set_option backward.isDefEq.respectTransparency false in i, j, metricRaw i j DualLeftHandedWeyl.basis i ⊗ₜ[] DualLeftHandedWeyl.basis j = DualLeftHandedWeyl.basis 0 ⊗ₜ[] DualLeftHandedWeyl.basis 1 - DualLeftHandedWeyl.basis 1 ⊗ₜ[] DualLeftHandedWeyl.basis 0 DualLeftHandedWeyl.basis 0 ⊗ₜ[] DualLeftHandedWeyl.basis 1 + -1 DualLeftHandedWeyl.basis 1 ⊗ₜ[] DualLeftHandedWeyl.basis 0 = DualLeftHandedWeyl.basis 0 ⊗ₜ[] DualLeftHandedWeyl.basis 1 - DualLeftHandedWeyl.basis 1 ⊗ₜ[] DualLeftHandedWeyl.basis 0 All goals completed! 🐙

The metric εₐₐ as a morphism 𝟙_ (Rep ℂ SL(2,ℂ)) ⟶ dualLeftHanded ⊗ dualLeftHanded, making manifest its invariance under the action of SL(2,ℂ).

M:SL(2, )x:metricRaw = metricRaw * (M * (↑M)⁻¹) All goals completed! 🐙
lemma dualLeftMetric_apply_one : dualLeftMetric (1 : ) = dualLeftMetricVal := dualLeftMetric 1 = dualLeftMetricVal 1 dualLeftMetricVal = dualLeftMetricVal All goals completed! 🐙

The metric ε^{dot a}^{dot a} as an element of (rightHanded ⊗ rightHanded).V.

def rightMetricVal : (RightHandedWeyl ⊗[] RightHandedWeyl) := rightRightToMatrix.symm (- metricRaw)

Expansion of rightMetricVal into the left basis.

set_option backward.isDefEq.respectTransparency false in i, j, (-metricRaw) i j RightHandedWeyl.basis i ⊗ₜ[] RightHandedWeyl.basis j = -RightHandedWeyl.basis 0 ⊗ₜ[] RightHandedWeyl.basis 1 + RightHandedWeyl.basis 1 ⊗ₜ[] RightHandedWeyl.basis 0 -1 RightHandedWeyl.basis 0 ⊗ₜ[] RightHandedWeyl.basis 1 = -RightHandedWeyl.basis 0 ⊗ₜ[] RightHandedWeyl.basis 1 All goals completed! 🐙

The metric ε^{dot a}^{dot a} as a morphism 𝟙_ (Rep ℂ SL(2,ℂ)) ⟶ rightHanded ⊗ rightHanded, making manifest its invariance under the action of SL(2,ℂ).

All goals completed! 🐙
lemma rightMetric_apply_one : rightMetric (1 : ) = rightMetricVal := rightMetric 1 = rightMetricVal 1 rightMetricVal = rightMetricVal All goals completed! 🐙

The metric ε_{dot a}_{dot a} as an element of (dualRightHanded ⊗ dualRightHanded).V.

Expansion of rightMetricVal into the left basis.

set_option backward.isDefEq.respectTransparency false in i, j, metricRaw i j DualRightHandedWeyl.basis i ⊗ₜ[] DualRightHandedWeyl.basis j = DualRightHandedWeyl.basis 0 ⊗ₜ[] DualRightHandedWeyl.basis 1 - DualRightHandedWeyl.basis 1 ⊗ₜ[] DualRightHandedWeyl.basis 0 DualRightHandedWeyl.basis 0 ⊗ₜ[] DualRightHandedWeyl.basis 1 + -1 DualRightHandedWeyl.basis 1 ⊗ₜ[] DualRightHandedWeyl.basis 0 = DualRightHandedWeyl.basis 0 ⊗ₜ[] DualRightHandedWeyl.basis 1 - DualRightHandedWeyl.basis 1 ⊗ₜ[] DualRightHandedWeyl.basis 0 All goals completed! 🐙

The metric ε_{dot a}_{dot a} as a morphism 𝟙_ (Rep ℂ SL(2,ℂ)) ⟶ dualRightHanded ⊗ dualRightHanded, making manifest its invariance under the action of SL(2,ℂ).

M:SL(2, )x:(TensorProduct.map (DualRightHandedWeyl.rep M) (DualRightHandedWeyl.rep M)) (dualRightDualRightToMatrix.symm metricRaw) = (TensorProduct.map (DualRightHandedWeyl.rep M) (DualRightHandedWeyl.rep M)) dualRightMetricVal All goals completed! 🐙
lemma dualRightMetric_apply_one : dualRightMetric (1 : ) = dualRightMetricVal := dualRightMetric 1 = dualRightMetricVal 1 dualRightMetricVal = dualRightMetricVal All goals completed! 🐙

Contraction of metrics

DualLeftHandedWeyl.basis 1 ⊗ₜ[] LeftHandedWeyl.basis 1 - 0 DualLeftHandedWeyl.basis 1 ⊗ₜ[] LeftHandedWeyl.basis 0 - (0 DualLeftHandedWeyl.basis 0 ⊗ₜ[] LeftHandedWeyl.basis 1 - DualLeftHandedWeyl.basis 0 ⊗ₜ[] LeftHandedWeyl.basis 0) = DualLeftHandedWeyl.basis 1 ⊗ₜ[] LeftHandedWeyl.basis 1 + DualLeftHandedWeyl.basis 0 ⊗ₜ[] LeftHandedWeyl.basis 0 All goals completed! 🐙All goals completed! 🐙DualRightHandedWeyl.basis 1 ⊗ₜ[] RightHandedWeyl.basis 1 - 0 DualRightHandedWeyl.basis 1 ⊗ₜ[] RightHandedWeyl.basis 0 - (0 DualRightHandedWeyl.basis 0 ⊗ₜ[] RightHandedWeyl.basis 1 - DualRightHandedWeyl.basis 0 ⊗ₜ[] RightHandedWeyl.basis 0) = DualRightHandedWeyl.basis 1 ⊗ₜ[] RightHandedWeyl.basis 1 + DualRightHandedWeyl.basis 0 ⊗ₜ[] RightHandedWeyl.basis 0 All goals completed! 🐙All goals completed! 🐙