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, Nikolai Kashcheev -/ module public import Physlib.Relativity.Tensors.ComplexTensor.Metrics.Pre public import Physlib.Relativity.Fermions.Weyl.Metric

Complex Lorentz tensors

@[expose] public section

The colors associated with complex representations of SL(2, ℂ) of interest to physics.

The color associated with Left handed fermions.

The color associated with dual-Left handed fermions.

The color associated with Right handed fermions.

The color associated with dual-Right handed fermions.

The color associated with contravariant Lorentz vectors.

The color associated with covariant Lorentz vectors.

inductive Color | upL : Color | downL : Color | upR : Color | downR : Color | up : Color | down : Color deriving Fintype

Color for complex Lorentz tensors is decidable.

instance : DecidableEq Color := fun x y => match x, y with | Color.upL, Color.upL => isTrue rfl | Color.downL, Color.downL => isTrue rfl | Color.upR, Color.upR => isTrue rfl | Color.downR, Color.downR => isTrue rfl | Color.up, Color.up => isTrue rfl | Color.down, Color.down => isTrue rfl /- The false -/ | Color.upL, Color.downL => isFalse fun h => Color.noConfusion h | Color.upL, Color.upR => isFalse fun h => Color.noConfusion h | Color.upL, Color.downR => isFalse fun h => Color.noConfusion h | Color.upL, Color.up => isFalse fun h => Color.noConfusion h | Color.upL, Color.down => isFalse fun h => Color.noConfusion h | Color.downL, Color.upL => isFalse fun h => Color.noConfusion h | Color.downL, Color.upR => isFalse fun h => Color.noConfusion h | Color.downL, Color.downR => isFalse fun h => Color.noConfusion h | Color.downL, Color.up => isFalse fun h => Color.noConfusion h | Color.downL, Color.down => isFalse fun h => Color.noConfusion h | Color.upR, Color.upL => isFalse fun h => Color.noConfusion h | Color.upR, Color.downL => isFalse fun h => Color.noConfusion h | Color.upR, Color.downR => isFalse fun h => Color.noConfusion h | Color.upR, Color.up => isFalse fun h => Color.noConfusion h | Color.upR, Color.down => isFalse fun h => Color.noConfusion h | Color.downR, Color.upL => isFalse fun h => Color.noConfusion h | Color.downR, Color.downL => isFalse fun h => Color.noConfusion h | Color.downR, Color.upR => isFalse fun h => Color.noConfusion h | Color.downR, Color.up => isFalse fun h => Color.noConfusion h | Color.downR, Color.down => isFalse fun h => Color.noConfusion h | Color.up, Color.upL => isFalse fun h => Color.noConfusion h | Color.up, Color.downL => isFalse fun h => Color.noConfusion h | Color.up, Color.upR => isFalse fun h => Color.noConfusion h | Color.up, Color.downR => isFalse fun h => Color.noConfusion h | Color.up, Color.down => isFalse fun h => Color.noConfusion h | Color.down, Color.upL => isFalse fun h => Color.noConfusion h | Color.down, Color.downL => isFalse fun h => Color.noConfusion h | Color.down, Color.upR => isFalse fun h => Color.noConfusion h | Color.down, Color.downR => isFalse fun h => Color.noConfusion h | Color.down, Color.up => isFalse fun h => Color.noConfusion h

The dimensions of each of the different types of complex Lorentz vector space.

abbrev repDim (c : Color) : := match c with | Color.upL => 2 | Color.downL => 2 | Color.upR => 2 | Color.downR => 2 | Color.up => 4 | Color.down => 4

The modules associated with each of the different types of complex Lorentz vector space.

instance modulesAddCommGroup : c, AddCommGroup (modules c) | Color.upL => inferInstance | Color.downL => inferInstance | Color.upR => inferInstance | Color.downR => inferInstance | Color.up => inferInstance | Color.down => inferInstance

Complex Lorentz tensor.

syntax (name := complexLorentzTensorSyntax) "ℂT[" term,* "]" : term

The basis associated with each of the different types of complex Lorentz vector space.

The reps associated with each of the different types of complex Lorentz vector space.

macro_rules | `(ℂT[$term:term, $terms:term,*]) => `(complexLorentzTensor.Tensor (vecCons $term ![$terms,*])) | `(ℂT[$term:term]) => `(complexLorentzTensor.Tensor (vecCons $term ![])) | `(ℂT[]) =>`(complexLorentzTensor.Tensor (vecEmpty))

Complex Lorentz tensor.

scoped[complexLorentzTensor] notation "ℂT(" c ")" => complexLorentzTensor.Tensor c
lemma basisIdxCongr_eq_cast {c1 c2 : complexLorentzTensor.Color} (h : c1 = c2) (i : Fin (repDim c1)) : TensorSpecies.basisIdxCongr (basisIdx := fun c => Fin (repDim c)) h i = Fin.cast (c1:Colorc2:Colorh:c1 = c2i:Fin (repDim c1)repDim c1 = repDim c2 All goals completed! 🐙) i := c1:Colorc2:Colorh:c1 = c2i:Fin (repDim c1)(basisIdxCongr h) i = Fin.cast i c1:Colori:Fin (repDim c1)(basisIdxCongr ) i = Fin.cast i All goals completed! 🐙lemma repDim_tau {c : complexLorentzTensor.Color} : repDim (complexLorentzTensor.τ c) = repDim c := c:ColorrepDim (complexLorentzTensor.τ c) = repDim c repDim (complexLorentzTensor.τ Color.upL) = repDim Color.upLrepDim (complexLorentzTensor.τ Color.downL) = repDim Color.downLrepDim (complexLorentzTensor.τ Color.upR) = repDim Color.upRrepDim (complexLorentzTensor.τ Color.downR) = repDim Color.downRrepDim (complexLorentzTensor.τ Color.up) = repDim Color.uprepDim (complexLorentzTensor.τ Color.down) = repDim Color.down repDim (complexLorentzTensor.τ Color.upL) = repDim Color.upLrepDim (complexLorentzTensor.τ Color.downL) = repDim Color.downLrepDim (complexLorentzTensor.τ Color.upR) = repDim Color.upRrepDim (complexLorentzTensor.τ Color.downR) = repDim Color.downRrepDim (complexLorentzTensor.τ Color.up) = repDim Color.uprepDim (complexLorentzTensor.τ Color.down) = repDim Color.down All goals completed! 🐙lemma contrPCoeff_basis {n : } {c : Fin n complexLorentzTensor.Color} (i j : Fin n) (hij : i j (complexLorentzTensor.τ (c i) = c j)) (b : ComponentIdx (S := complexLorentzTensor) c) : Pure.contrPCoeff i j hij (Pure.basisVector c b) = if b i = Fin.cast (n:c:Fin n Colori:Fin nj:Fin nhij:i j complexLorentzTensor.τ (c i) = c jb:ComponentIdx crepDim (c j) = repDim (c i) All goals completed! 🐙) (b j) then 1 else 0 := n:c:Fin n Colori:Fin nj:Fin nhij:i j complexLorentzTensor.τ (c i) = c jb:ComponentIdx cPure.contrPCoeff i j hij (Pure.basisVector c b) = if b i = Fin.cast (b j) then 1 else 0 n:c:Fin n Colori:Fin nj:Fin nhij:i j complexLorentzTensor.τ (c i) = c jb:ComponentIdx c(complexLorentzTensor.contr (c i)) ((match c i with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) (b i) ⊗ₜ[] (LinearEquiv.cast ) ((match c j with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) (b j))) = if b i = Fin.cast (b j) then 1 else 0 n:c:Fin n Colori:Fin nj:Fin nhij:i j complexLorentzTensor.τ (c i) = c jb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )h2:c j = complexLorentzTensor.τ (c i)pf✝:repDim (c j) = repDim (c i)(complexLorentzTensor.contr (c i)) ((match c i with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) (b i) ⊗ₜ[] (LinearEquiv.cast h2) ((match c j with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) (b j))) = if b i = Fin.cast pf✝ (b j) then 1 else 0 n:c:Fin n Colori:Fin nj:Fin nhij:i j complexLorentzTensor.τ (c i) = c jb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )h2:c j = complexLorentzTensor.τ (c i)pf✝:repDim (c j) = repDim (c i)b1:Fin (repDim (c i))(complexLorentzTensor.contr (c i)) ((match c i with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast h2) ((match c j with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) (b j))) = if b1 = Fin.cast pf✝ (b j) then 1 else 0 n:c:Fin n Colori:Fin nj:Fin nhij:i j complexLorentzTensor.τ (c i) = c jb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )h2:c j = complexLorentzTensor.τ (c i)pf✝:repDim (c j) = repDim (c i)b1:Fin (repDim (c i))b2:Fin (repDim (c j))(complexLorentzTensor.contr (c i)) ((match c i with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast h2) ((match c j with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b2:Fin (repDim (c j))ci:Colorhij:i j complexLorentzTensor.τ ci = c jh2:c j = complexLorentzTensor.τ cipf✝:repDim (c j) = repDim cib1:Fin (repDim ci)(complexLorentzTensor.contr ci) ((match ci with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast h2) ((match c j with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )ci:Colorb1:Fin (repDim ci)cj:Colorb2:Fin (repDim cj)hij:i j complexLorentzTensor.τ ci = cjh2:cj = complexLorentzTensor.τ cipf✝:repDim cj = repDim ci(complexLorentzTensor.contr ci) ((match ci with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast h2) ((match cj with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )ci:Colorb1:Fin (repDim ci)b2:Fin (repDim (complexLorentzTensor.τ ci))hij:i j complexLorentzTensor.τ ci = complexLorentzTensor.τ cipf✝:repDim (complexLorentzTensor.τ ci) = repDim ci(complexLorentzTensor.contr ci) ((match ci with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast ) ((match complexLorentzTensor.τ ci with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.upL)b2:Fin (repDim (complexLorentzTensor.τ Color.upL))hij:i j complexLorentzTensor.τ Color.upL = complexLorentzTensor.τ Color.upLpf✝:repDim (complexLorentzTensor.τ Color.upL) = repDim Color.upL(complexLorentzTensor.contr Color.upL) ((match Color.upL with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast ) ((match complexLorentzTensor.τ Color.upL with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.downL)b2:Fin (repDim (complexLorentzTensor.τ Color.downL))hij:i j complexLorentzTensor.τ Color.downL = complexLorentzTensor.τ Color.downLpf✝:repDim (complexLorentzTensor.τ Color.downL) = repDim Color.downL(complexLorentzTensor.contr Color.downL) ((match Color.downL with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast ) ((match complexLorentzTensor.τ Color.downL with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.upR)b2:Fin (repDim (complexLorentzTensor.τ Color.upR))hij:i j complexLorentzTensor.τ Color.upR = complexLorentzTensor.τ Color.upRpf✝:repDim (complexLorentzTensor.τ Color.upR) = repDim Color.upR(complexLorentzTensor.contr Color.upR) ((match Color.upR with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast ) ((match complexLorentzTensor.τ Color.upR with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.downR)b2:Fin (repDim (complexLorentzTensor.τ Color.downR))hij:i j complexLorentzTensor.τ Color.downR = complexLorentzTensor.τ Color.downRpf✝:repDim (complexLorentzTensor.τ Color.downR) = repDim Color.downR(complexLorentzTensor.contr Color.downR) ((match Color.downR with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast ) ((match complexLorentzTensor.τ Color.downR with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.up)b2:Fin (repDim (complexLorentzTensor.τ Color.up))hij:i j complexLorentzTensor.τ Color.up = complexLorentzTensor.τ Color.uppf✝:repDim (complexLorentzTensor.τ Color.up) = repDim Color.up(complexLorentzTensor.contr Color.up) ((match Color.up with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast ) ((match complexLorentzTensor.τ Color.up with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.down)b2:Fin (repDim (complexLorentzTensor.τ Color.down))hij:i j complexLorentzTensor.τ Color.down = complexLorentzTensor.τ Color.downpf✝:repDim (complexLorentzTensor.τ Color.down) = repDim Color.down(complexLorentzTensor.contr Color.down) ((match Color.down with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b1 ⊗ₜ[] (LinearEquiv.cast ) ((match complexLorentzTensor.τ Color.down with | Color.upL => Fermion.LeftHandedWeyl.basis | Color.downL => Fermion.DualLeftHandedWeyl.basis | Color.upR => Fermion.RightHandedWeyl.basis | Color.downR => Fermion.DualRightHandedWeyl.basis | Color.up => Lorentz.complexContrBasisFin4 | Color.down => Lorentz.complexCoBasisFin4) b2)) = if b1 = Fin.cast pf✝ b2 then 1 else 0 all_goals n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.down)b2:Fin (repDim (complexLorentzTensor.τ Color.down))hij:i j complexLorentzTensor.τ Color.down = complexLorentzTensor.τ Color.downpf✝:repDim (complexLorentzTensor.τ Color.down) = repDim Color.downLorentz.coContrContraction (Lorentz.complexCoBasisFin4 b1 ⊗ₜ[] (LinearEquiv.cast ) (Lorentz.complexContrBasisFin4 b2)) = if b1 = b2 then 1 else 0 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.upL)b2:Fin (repDim (complexLorentzTensor.τ Color.upL))hij:i j complexLorentzTensor.τ Color.upL = complexLorentzTensor.τ Color.upLpf✝:repDim (complexLorentzTensor.τ Color.upL) = repDim Color.upLFermion.leftDualContraction (Fermion.LeftHandedWeyl.basis b1 ⊗ₜ[] (LinearEquiv.cast ) (Fermion.DualLeftHandedWeyl.basis b2)) = if b1 = b2 then 1 else 0 erw [n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.upL)b2:Fin (repDim (complexLorentzTensor.τ Color.upL))hij:i j complexLorentzTensor.τ Color.upL = complexLorentzTensor.τ Color.upLpf✝:repDim (complexLorentzTensor.τ Color.upL) = repDim Color.upL(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.upL)b2:Fin (repDim (complexLorentzTensor.τ Color.upL))hij:i j complexLorentzTensor.τ Color.upL = complexLorentzTensor.τ Color.upLpf✝:repDim (complexLorentzTensor.τ Color.upL) = repDim Color.upL(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0 All goals completed! 🐙 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.downL)b2:Fin (repDim (complexLorentzTensor.τ Color.downL))hij:i j complexLorentzTensor.τ Color.downL = complexLorentzTensor.τ Color.downLpf✝:repDim (complexLorentzTensor.τ Color.downL) = repDim Color.downLFermion.dualLeftContraction (Fermion.DualLeftHandedWeyl.basis b1 ⊗ₜ[] (LinearEquiv.cast ) (Fermion.LeftHandedWeyl.basis b2)) = if b1 = b2 then 1 else 0 erw [n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.downL)b2:Fin (repDim (complexLorentzTensor.τ Color.downL))hij:i j complexLorentzTensor.τ Color.downL = complexLorentzTensor.τ Color.downLpf✝:repDim (complexLorentzTensor.τ Color.downL) = repDim Color.downL(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.downL)b2:Fin (repDim (complexLorentzTensor.τ Color.downL))hij:i j complexLorentzTensor.τ Color.downL = complexLorentzTensor.τ Color.downLpf✝:repDim (complexLorentzTensor.τ Color.downL) = repDim Color.downL(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0 All goals completed! 🐙 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.upR)b2:Fin (repDim (complexLorentzTensor.τ Color.upR))hij:i j complexLorentzTensor.τ Color.upR = complexLorentzTensor.τ Color.upRpf✝:repDim (complexLorentzTensor.τ Color.upR) = repDim Color.upRFermion.rightDualContraction (Fermion.RightHandedWeyl.basis b1 ⊗ₜ[] (LinearEquiv.cast ) (Fermion.DualRightHandedWeyl.basis b2)) = if b1 = b2 then 1 else 0 erw [n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.upR)b2:Fin (repDim (complexLorentzTensor.τ Color.upR))hij:i j complexLorentzTensor.τ Color.upR = complexLorentzTensor.τ Color.upRpf✝:repDim (complexLorentzTensor.τ Color.upR) = repDim Color.upR(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.upR)b2:Fin (repDim (complexLorentzTensor.τ Color.upR))hij:i j complexLorentzTensor.τ Color.upR = complexLorentzTensor.τ Color.upRpf✝:repDim (complexLorentzTensor.τ Color.upR) = repDim Color.upR(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0 All goals completed! 🐙 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.downR)b2:Fin (repDim (complexLorentzTensor.τ Color.downR))hij:i j complexLorentzTensor.τ Color.downR = complexLorentzTensor.τ Color.downRpf✝:repDim (complexLorentzTensor.τ Color.downR) = repDim Color.downRFermion.dualRightContraction (Fermion.DualRightHandedWeyl.basis b1 ⊗ₜ[] (LinearEquiv.cast ) (Fermion.RightHandedWeyl.basis b2)) = if b1 = b2 then 1 else 0 erw [n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.downR)b2:Fin (repDim (complexLorentzTensor.τ Color.downR))hij:i j complexLorentzTensor.τ Color.downR = complexLorentzTensor.τ Color.downRpf✝:repDim (complexLorentzTensor.τ Color.downR) = repDim Color.downR(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.downR)b2:Fin (repDim (complexLorentzTensor.τ Color.downR))hij:i j complexLorentzTensor.τ Color.downR = complexLorentzTensor.τ Color.downRpf✝:repDim (complexLorentzTensor.τ Color.downR) = repDim Color.downR(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0 All goals completed! 🐙 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.up)b2:Fin (repDim (complexLorentzTensor.τ Color.up))hij:i j complexLorentzTensor.τ Color.up = complexLorentzTensor.τ Color.uppf✝:repDim (complexLorentzTensor.τ Color.up) = repDim Color.upLorentz.contrCoContraction (Lorentz.complexContrBasisFin4 b1 ⊗ₜ[] (LinearEquiv.cast ) (Lorentz.complexCoBasisFin4 b2)) = if b1 = b2 then 1 else 0 erw [n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.up)b2:Fin (repDim (complexLorentzTensor.τ Color.up))hij:i j complexLorentzTensor.τ Color.up = complexLorentzTensor.τ Color.uppf✝:repDim (complexLorentzTensor.τ Color.up) = repDim Color.up(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.up)b2:Fin (repDim (complexLorentzTensor.τ Color.up))hij:i j complexLorentzTensor.τ Color.up = complexLorentzTensor.τ Color.uppf✝:repDim (complexLorentzTensor.τ Color.up) = repDim Color.up(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0 All goals completed! 🐙 n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.down)b2:Fin (repDim (complexLorentzTensor.τ Color.down))hij:i j complexLorentzTensor.τ Color.down = complexLorentzTensor.τ Color.downpf✝:repDim (complexLorentzTensor.τ Color.down) = repDim Color.downLorentz.coContrContraction (Lorentz.complexCoBasisFin4 b1 ⊗ₜ[] (LinearEquiv.cast ) (Lorentz.complexContrBasisFin4 b2)) = if b1 = b2 then 1 else 0 erw [n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.down)b2:Fin (repDim (complexLorentzTensor.τ Color.down))hij:i j complexLorentzTensor.τ Color.down = complexLorentzTensor.τ Color.downpf✝:repDim (complexLorentzTensor.τ Color.down) = repDim Color.down(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0n:c:Fin n Colori:Fin nj:Fin nb:ComponentIdx ch1:RingHomInvPair (RingHom.id ) (RingHom.id )b1:Fin (repDim Color.down)b2:Fin (repDim (complexLorentzTensor.τ Color.down))hij:i j complexLorentzTensor.τ Color.down = complexLorentzTensor.τ Color.downpf✝:repDim (complexLorentzTensor.τ Color.down) = repDim Color.down(if b1 = b2 then 1 else 0) = if b1 = b2 then 1 else 0 All goals completed! 🐙