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.Tensors.ComplexTensor.OfRatUnit tensors for complex Lorentz tensors
@[expose] public sectionDefinitions.
The unit δᵢⁱ as a complex Lorentz tensor.
abbrev coContrUnit : ℂT[.down, .up] := complexLorentzTensor.unitTensor Color.up
The unit δⁱᵢ as a complex Lorentz tensor.
abbrev contrCoUnit : ℂT[.up, .down] := complexLorentzTensor.unitTensor Color.down
The unit δₐᵃ as a complex Lorentz tensor.
abbrev dualLeftLeftUnit : ℂT[.downL, .upL] := complexLorentzTensor.unitTensor Color.upL
The unit δᵃₐ as a complex Lorentz tensor.
abbrev leftDualLeftUnit : ℂT[.upL, .downL] := complexLorentzTensor.unitTensor Color.downL
The unit δ_{dot a}^{dot a} as a complex Lorentz tensor.
abbrev dualRightRightUnit : ℂT[.downR, .upR] := complexLorentzTensor.unitTensor Color.upR
The unit δ^{dot a}_{dot a} as a complex Lorentz tensor.
abbrev rightDualRightUnit : ℂT[.upR, .downR] := complexLorentzTensor.unitTensor Color.downRNotation
The unit δᵢⁱ as a complex Lorentz tensor.
scoped[complexLorentzTensor] notation "δ'" => coContrUnit
The unit δⁱᵢ as a complex Lorentz tensor.
scoped[complexLorentzTensor] notation "δ" => contrCoUnit
The unit δₐᵃ as a complex Lorentz tensor.
scoped[complexLorentzTensor] notation "δL'" => dualLeftLeftUnit
The unit δᵃₐ as a complex Lorentz tensor.
scoped[complexLorentzTensor] notation "δL" => leftDualLeftUnit
The unit δ_{dot a}^{dot a} as a complex Lorentz tensor.
scoped[complexLorentzTensor] notation "δR'" => dualRightRightUnit
The unit δ^{dot a}_{dot a} as a complex Lorentz tensor.
scoped[complexLorentzTensor] notation "δR" => rightDualRightUnitOther forms
fromConstPair
⊢ δ' =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • Lorentz.coContrUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }
rfl All goals completed! 🐙
lemma contrCoUnit_eq_fromConstPair : δ = fromConstPair Lorentz.contrCoUnit := by ⊢ δ = fromConstPair Lorentz.contrCoUnit
rw [Lorentz.contrCoUnit ⊢ δ =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • Lorentz.contrCoUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ } ⊢ δ =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • Lorentz.contrCoUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }] ⊢ δ =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • Lorentz.contrCoUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }
rfl All goals completed! 🐙
lemma dualLeftLeftUnit_eq_fromConstPair : δL' = fromConstPair Fermion.dualLeftLeftUnit := by ⊢ δL' = fromConstPair Fermion.dualLeftLeftUnit
rw [Fermion.dualLeftLeftUnit ⊢ δL' =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • dualLeftLeftUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ } ⊢ δL' =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • dualLeftLeftUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }] ⊢ δL' =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • dualLeftLeftUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }
rfl All goals completed! 🐙
lemma leftDualLeftUnit_eq_fromConstPair : δL = fromConstPair Fermion.leftDualLeftUnit := by ⊢ δL = fromConstPair Fermion.leftDualLeftUnit
rw [Fermion.leftDualLeftUnit ⊢ δL =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • leftDualLeftUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ } ⊢ δL =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • leftDualLeftUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }] ⊢ δL =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • leftDualLeftUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }
rfl All goals completed! 🐙
lemma dualRightRightUnit_eq_fromConstPair : δR' = fromConstPair Fermion.dualRightRightUnit := by ⊢ δR' = fromConstPair Fermion.dualRightRightUnit
rw [Fermion.dualRightRightUnit ⊢ δR' =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • dualRightRightUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ } ⊢ δR' =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • dualRightRightUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }] ⊢ δR' =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • dualRightRightUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }
rfl All goals completed! 🐙
lemma rightDualRightUnit_eq_fromConstPair : δR = fromConstPair Fermion.rightDualRightUnit := by ⊢ δR = fromConstPair Fermion.rightDualRightUnit
rw [Fermion.rightDualRightUnit ⊢ δR =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • rightDualRightUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ } ⊢ δR =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • rightDualRightUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }] ⊢ δR =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • rightDualRightUnitVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }
rfl All goals completed! 🐙fromPairT
lemma coContrUnit_eq_fromPairT : δ' = fromPairT (Lorentz.coContrUnitVal) := by ⊢ δ' = fromPairT Lorentz.coContrUnitVal
rw [coContrUnit_eq_fromConstPair, ⊢ fromConstPair Lorentz.coContrUnit = fromPairT Lorentz.coContrUnitVal ⊢ fromPairT (Lorentz.coContrUnit 1) = fromPairT Lorentz.coContrUnitVal fromConstPair ⊢ fromPairT (Lorentz.coContrUnit 1) = fromPairT Lorentz.coContrUnitVal ⊢ fromPairT (Lorentz.coContrUnit 1) = fromPairT Lorentz.coContrUnitVal] ⊢ fromPairT (Lorentz.coContrUnit 1) = fromPairT Lorentz.coContrUnitVal
congr 1 e_6 ⊢ Lorentz.coContrUnit 1 = Lorentz.coContrUnitVal
exact Lorentz.coContrUnit_apply_one All goals completed! 🐙
lemma contrCoUnit_eq_fromPairT : δ = fromPairT (Lorentz.contrCoUnitVal) := by ⊢ δ = fromPairT Lorentz.contrCoUnitVal
rw [contrCoUnit_eq_fromConstPair, ⊢ fromConstPair Lorentz.contrCoUnit = fromPairT Lorentz.contrCoUnitVal ⊢ fromPairT (Lorentz.contrCoUnit 1) = fromPairT Lorentz.contrCoUnitVal fromConstPair ⊢ fromPairT (Lorentz.contrCoUnit 1) = fromPairT Lorentz.contrCoUnitVal ⊢ fromPairT (Lorentz.contrCoUnit 1) = fromPairT Lorentz.contrCoUnitVal] ⊢ fromPairT (Lorentz.contrCoUnit 1) = fromPairT Lorentz.contrCoUnitVal
congr 1 e_6 ⊢ Lorentz.contrCoUnit 1 = Lorentz.contrCoUnitVal
exact Lorentz.contrCoUnit_apply_one All goals completed! 🐙
lemma dualLeftLeftUnit_eq_fromPairT : δL' = fromPairT (Fermion.dualLeftLeftUnitVal) := by ⊢ δL' = fromPairT dualLeftLeftUnitVal
rw [dualLeftLeftUnit_eq_fromConstPair, ⊢ fromConstPair Fermion.dualLeftLeftUnit = fromPairT dualLeftLeftUnitVal ⊢ fromPairT (Fermion.dualLeftLeftUnit 1) = fromPairT dualLeftLeftUnitVal fromConstPair ⊢ fromPairT (Fermion.dualLeftLeftUnit 1) = fromPairT dualLeftLeftUnitVal ⊢ fromPairT (Fermion.dualLeftLeftUnit 1) = fromPairT dualLeftLeftUnitVal] ⊢ fromPairT (Fermion.dualLeftLeftUnit 1) = fromPairT dualLeftLeftUnitVal
congr 1 e_6 ⊢ Fermion.dualLeftLeftUnit 1 = dualLeftLeftUnitVal
exact Fermion.dualLeftLeftUnit_apply_one All goals completed! 🐙
lemma leftDualLeftUnit_eq_fromPairT : δL = fromPairT (Fermion.leftDualLeftUnitVal) := by ⊢ δL = fromPairT leftDualLeftUnitVal
rw [leftDualLeftUnit_eq_fromConstPair, ⊢ fromConstPair Fermion.leftDualLeftUnit = fromPairT leftDualLeftUnitVal ⊢ fromPairT (Fermion.leftDualLeftUnit 1) = fromPairT leftDualLeftUnitVal fromConstPair ⊢ fromPairT (Fermion.leftDualLeftUnit 1) = fromPairT leftDualLeftUnitVal ⊢ fromPairT (Fermion.leftDualLeftUnit 1) = fromPairT leftDualLeftUnitVal] ⊢ fromPairT (Fermion.leftDualLeftUnit 1) = fromPairT leftDualLeftUnitVal
congr 1 e_6 ⊢ Fermion.leftDualLeftUnit 1 = leftDualLeftUnitVal
exact Fermion.leftDualLeftUnit_apply_one All goals completed! 🐙
lemma dualRightRightUnit_eq_fromPairT : δR' = fromPairT (Fermion.dualRightRightUnitVal) := by ⊢ δR' = fromPairT dualRightRightUnitVal
rw [dualRightRightUnit_eq_fromConstPair, ⊢ fromConstPair Fermion.dualRightRightUnit = fromPairT dualRightRightUnitVal ⊢ fromPairT (Fermion.dualRightRightUnit 1) = fromPairT dualRightRightUnitVal fromConstPair ⊢ fromPairT (Fermion.dualRightRightUnit 1) = fromPairT dualRightRightUnitVal ⊢ fromPairT (Fermion.dualRightRightUnit 1) = fromPairT dualRightRightUnitVal] ⊢ fromPairT (Fermion.dualRightRightUnit 1) = fromPairT dualRightRightUnitVal
congr 1 e_6 ⊢ Fermion.dualRightRightUnit 1 = dualRightRightUnitVal
exact Fermion.dualRightRightUnit_apply_one All goals completed! 🐙
lemma rightDualRightUnit_eq_fromPairT : δR = fromPairT (Fermion.rightDualRightUnitVal) := by ⊢ δR = fromPairT rightDualRightUnitVal
rw [rightDualRightUnit_eq_fromConstPair, ⊢ fromConstPair Fermion.rightDualRightUnit = fromPairT rightDualRightUnitVal ⊢ fromPairT (Fermion.rightDualRightUnit 1) = fromPairT rightDualRightUnitVal fromConstPair ⊢ fromPairT (Fermion.rightDualRightUnit 1) = fromPairT rightDualRightUnitVal ⊢ fromPairT (Fermion.rightDualRightUnit 1) = fromPairT rightDualRightUnitVal] ⊢ fromPairT (Fermion.rightDualRightUnit 1) = fromPairT rightDualRightUnitVal
congr 1 e_6 ⊢ Fermion.rightDualRightUnit 1 = rightDualRightUnitVal
exact Fermion.rightDualRightUnit_apply_one All goals completed! 🐙complexCoBasis etc.
basis
lemma coContrUnit_eq_basis : δ' =
∑ i, Tensor.basis (S := complexLorentzTensor)
![Color.down, Color.up] (fun | 0 => i | 1 => i) := by ⊢ δ' =
∑ i,
(Tensor.basis ![Color.down, Color.up]) fun x =>
match x with
| 0 => i
| 1 => i
rw [coContrUnit_eq_complexCoBasisFin4_complexContrBasisFin4 ⊢ ∑ i, fromPairT (Lorentz.complexCoBasisFin4 i ⊗ₜ[ℂ] Lorentz.complexContrBasisFin4 i) =
∑ i,
(Tensor.basis ![Color.down, Color.up]) fun x =>
match x with
| 0 => i
| 1 => i ⊢ ∑ i, fromPairT (Lorentz.complexCoBasisFin4 i ⊗ₜ[ℂ] Lorentz.complexContrBasisFin4 i) =
∑ i,
(Tensor.basis ![Color.down, Color.up]) fun x =>
match x with
| 0 => i
| 1 => i] ⊢ ∑ i, fromPairT (Lorentz.complexCoBasisFin4 i ⊗ₜ[ℂ] Lorentz.complexContrBasisFin4 i) =
∑ i,
(Tensor.basis ![Color.down, Color.up]) fun x =>
match x with
| 0 => i
| 1 => i
conv_lhs =>
enter [2, x] x:Fin 4| fromPairT (Lorentz.complexCoBasisFin4 x ⊗ₜ[ℂ] Lorentz.complexContrBasisFin4 x)
change fromPairT ((complexLorentzTensor.basis .down x) ⊗ₜ[ℂ]
(complexLorentzTensor.basis .up _)) x:Fin 4| fromPairT ((basis Color.down) x ⊗ₜ[ℂ] (basis Color.up) x)
rw [fromPairT_apply_basis_repr] x:Fin 4| (Tensor.basis ![Color.down, Color.up]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rfl All goals completed! 🐙
lemma contrCoUnit_eq_basis : δ =
∑ i, Tensor.basis (S := complexLorentzTensor)
![Color.up, Color.down] (fun | 0 => i | 1 => i) := by ⊢ δ =
∑ i,
(Tensor.basis ![Color.up, Color.down]) fun x =>
match x with
| 0 => i
| 1 => i
rw [contrCoUnit_eq_complexContrBasisFin4_complexCoBasisFin4 ⊢ ∑ i, fromPairT (Lorentz.complexContrBasisFin4 i ⊗ₜ[ℂ] Lorentz.complexCoBasisFin4 i) =
∑ i,
(Tensor.basis ![Color.up, Color.down]) fun x =>
match x with
| 0 => i
| 1 => i ⊢ ∑ i, fromPairT (Lorentz.complexContrBasisFin4 i ⊗ₜ[ℂ] Lorentz.complexCoBasisFin4 i) =
∑ i,
(Tensor.basis ![Color.up, Color.down]) fun x =>
match x with
| 0 => i
| 1 => i] ⊢ ∑ i, fromPairT (Lorentz.complexContrBasisFin4 i ⊗ₜ[ℂ] Lorentz.complexCoBasisFin4 i) =
∑ i,
(Tensor.basis ![Color.up, Color.down]) fun x =>
match x with
| 0 => i
| 1 => i
conv_lhs =>
enter [2, x] x:Fin 4| fromPairT (Lorentz.complexContrBasisFin4 x ⊗ₜ[ℂ] Lorentz.complexCoBasisFin4 x)
change fromPairT ((complexLorentzTensor.basis .up x) ⊗ₜ[ℂ]
(complexLorentzTensor.basis .down _)) x:Fin 4| fromPairT ((basis Color.up) x ⊗ₜ[ℂ] (basis Color.down) x)
rw [fromPairT_apply_basis_repr] x:Fin 4| (Tensor.basis ![Color.up, Color.down]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rfl All goals completed! 🐙
lemma dualLeftLeftUnit_eq_tensor_basis : δL' =
∑ i, Tensor.basis (S := complexLorentzTensor)
![Color.downL, Color.upL] (fun | 0 => i | 1 => i) := by ⊢ δL' =
∑ i,
(Tensor.basis ![Color.downL, Color.upL]) fun x =>
match x with
| 0 => i
| 1 => i
rw [dualLeftLeftUnit_eq_basis ⊢ ∑ i, fromPairT (DualLeftHandedWeyl.basis i ⊗ₜ[ℂ] LeftHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.downL, Color.upL]) fun x =>
match x with
| 0 => i
| 1 => i ⊢ ∑ i, fromPairT (DualLeftHandedWeyl.basis i ⊗ₜ[ℂ] LeftHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.downL, Color.upL]) fun x =>
match x with
| 0 => i
| 1 => i] ⊢ ∑ i, fromPairT (DualLeftHandedWeyl.basis i ⊗ₜ[ℂ] LeftHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.downL, Color.upL]) fun x =>
match x with
| 0 => i
| 1 => i
conv_lhs =>
enter [2, x] x:Fin 2| fromPairT (DualLeftHandedWeyl.basis x ⊗ₜ[ℂ] LeftHandedWeyl.basis x)
change fromPairT ((complexLorentzTensor.basis .downL x) ⊗ₜ[ℂ]
(complexLorentzTensor.basis .upL _)) x:Fin 2| fromPairT ((basis Color.downL) x ⊗ₜ[ℂ] (basis Color.upL) x)
rw [fromPairT_apply_basis_repr] x:Fin 2| (Tensor.basis ![Color.downL, Color.upL]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rfl All goals completed! 🐙
lemma leftDualLeftUnit_eq_tensor_basis : δL =
∑ i, Tensor.basis (S := complexLorentzTensor)
![Color.upL, Color.downL] (fun | 0 => i | 1 => i) := by ⊢ δL =
∑ i,
(Tensor.basis ![Color.upL, Color.downL]) fun x =>
match x with
| 0 => i
| 1 => i
rw [leftDualLeftUnit_eq_basis ⊢ ∑ i, fromPairT (LeftHandedWeyl.basis i ⊗ₜ[ℂ] DualLeftHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.upL, Color.downL]) fun x =>
match x with
| 0 => i
| 1 => i ⊢ ∑ i, fromPairT (LeftHandedWeyl.basis i ⊗ₜ[ℂ] DualLeftHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.upL, Color.downL]) fun x =>
match x with
| 0 => i
| 1 => i] ⊢ ∑ i, fromPairT (LeftHandedWeyl.basis i ⊗ₜ[ℂ] DualLeftHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.upL, Color.downL]) fun x =>
match x with
| 0 => i
| 1 => i
conv_lhs =>
enter [2, x] x:Fin 2| fromPairT (LeftHandedWeyl.basis x ⊗ₜ[ℂ] DualLeftHandedWeyl.basis x)
change fromPairT ((complexLorentzTensor.basis .upL x) ⊗ₜ[ℂ]
(complexLorentzTensor.basis .downL _)) x:Fin 2| fromPairT ((basis Color.upL) x ⊗ₜ[ℂ] (basis Color.downL) x)
rw [fromPairT_apply_basis_repr] x:Fin 2| (Tensor.basis ![Color.upL, Color.downL]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rfl All goals completed! 🐙
lemma dualRightRightUnit_eq_tensor_basis : δR' =
∑ i, Tensor.basis (S := complexLorentzTensor)
![Color.downR, Color.upR] (fun | 0 => i | 1 => i) := by ⊢ δR' =
∑ i,
(Tensor.basis ![Color.downR, Color.upR]) fun x =>
match x with
| 0 => i
| 1 => i
rw [dualRightRightUnit_eq_basis ⊢ ∑ i, fromPairT (DualRightHandedWeyl.basis i ⊗ₜ[ℂ] RightHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.downR, Color.upR]) fun x =>
match x with
| 0 => i
| 1 => i ⊢ ∑ i, fromPairT (DualRightHandedWeyl.basis i ⊗ₜ[ℂ] RightHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.downR, Color.upR]) fun x =>
match x with
| 0 => i
| 1 => i] ⊢ ∑ i, fromPairT (DualRightHandedWeyl.basis i ⊗ₜ[ℂ] RightHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.downR, Color.upR]) fun x =>
match x with
| 0 => i
| 1 => i
conv_lhs =>
enter [2, x] x:Fin 2| fromPairT (DualRightHandedWeyl.basis x ⊗ₜ[ℂ] RightHandedWeyl.basis x)
change fromPairT ((complexLorentzTensor.basis .downR x) ⊗ₜ[ℂ]
(complexLorentzTensor.basis .upR _)) x:Fin 2| fromPairT ((basis Color.downR) x ⊗ₜ[ℂ] (basis Color.upR) x)
rw [fromPairT_apply_basis_repr] x:Fin 2| (Tensor.basis ![Color.downR, Color.upR]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rfl All goals completed! 🐙
lemma rightDualRightUnit_eq_tensor_basis : δR =
∑ i, Tensor.basis (S := complexLorentzTensor)
![Color.upR, Color.downR] (fun | 0 => i | 1 => i) := by ⊢ δR =
∑ i,
(Tensor.basis ![Color.upR, Color.downR]) fun x =>
match x with
| 0 => i
| 1 => i
rw [rightDualRightUnit_eq_basis ⊢ ∑ i, fromPairT (RightHandedWeyl.basis i ⊗ₜ[ℂ] DualRightHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.upR, Color.downR]) fun x =>
match x with
| 0 => i
| 1 => i ⊢ ∑ i, fromPairT (RightHandedWeyl.basis i ⊗ₜ[ℂ] DualRightHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.upR, Color.downR]) fun x =>
match x with
| 0 => i
| 1 => i] ⊢ ∑ i, fromPairT (RightHandedWeyl.basis i ⊗ₜ[ℂ] DualRightHandedWeyl.basis i) =
∑ i,
(Tensor.basis ![Color.upR, Color.downR]) fun x =>
match x with
| 0 => i
| 1 => i
conv_lhs =>
enter [2, x] x:Fin 2| fromPairT (RightHandedWeyl.basis x ⊗ₜ[ℂ] DualRightHandedWeyl.basis x)
change fromPairT ((complexLorentzTensor.basis .upR x) ⊗ₜ[ℂ]
(complexLorentzTensor.basis .downR _)) x:Fin 2| fromPairT ((basis Color.upR) x ⊗ₜ[ℂ] (basis Color.downR) x)
rw [fromPairT_apply_basis_repr] x:Fin 2| (Tensor.basis ![Color.upR, Color.downR]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rfl All goals completed! 🐙ofRat
lemma coContrUnit_eq_ofRat : δ' = ofRat fun f =>
if f 0 = f 1 then 1 else 0 := by ⊢ δ' = ofRat fun f => if f 0 = f 1 then 1 else 0
rw [coContrUnit_eq_basis ⊢ (∑ i,
(Tensor.basis ![Color.down, Color.up]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ (∑ i,
(Tensor.basis ![Color.down, Color.up]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ (∑ i,
(Tensor.basis ![Color.down, Color.up]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0
conv_lhs =>
enter [2, x] x:Fin (repDim (![Color.down, Color.up] 0))| (Tensor.basis ![Color.down, Color.up]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rw [basis_eq_ofRat] x:Fin (repDim (![Color.down, Color.up] 0))| ofRat fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sum ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0
congr e_6 ⊢ (∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f => if f 0 = f 1 then 1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma contrCoUnit_eq_ofRat : δ = ofRat fun f =>
if f 0 = f 1 then 1 else 0 := by ⊢ δ = ofRat fun f => if f 0 = f 1 then 1 else 0
rw [contrCoUnit_eq_basis ⊢ (∑ i,
(Tensor.basis ![Color.up, Color.down]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ (∑ i,
(Tensor.basis ![Color.up, Color.down]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ (∑ i,
(Tensor.basis ![Color.up, Color.down]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0
conv_lhs =>
enter [2, x] x:Fin (repDim (![Color.up, Color.down] 0))| (Tensor.basis ![Color.up, Color.down]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rw [basis_eq_ofRat] x:Fin (repDim (![Color.up, Color.down] 0))| ofRat fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sum ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0
congr e_6 ⊢ (∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f => if f 0 = f 1 then 1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma dualLeftLeftUnit_eq_ofRat : δL' = ofRat fun f =>
if f 0 = f 1 then 1 else 0 := by ⊢ δL' = ofRat fun f => if f 0 = f 1 then 1 else 0
rw [dualLeftLeftUnit_eq_tensor_basis ⊢ (∑ i,
(Tensor.basis ![Color.downL, Color.upL]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ (∑ i,
(Tensor.basis ![Color.downL, Color.upL]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ (∑ i,
(Tensor.basis ![Color.downL, Color.upL]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0
conv_lhs =>
enter [2, x] x:Fin (repDim (![Color.downL, Color.upL] 0))| (Tensor.basis ![Color.downL, Color.upL]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rw [basis_eq_ofRat] x:Fin (repDim (![Color.downL, Color.upL] 0))| ofRat fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sum ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0
congr e_6 ⊢ (∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f => if f 0 = f 1 then 1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma leftDualLeftUnit_eq_ofRat : δL = ofRat fun f =>
if f 0 = f 1 then 1 else 0 := by ⊢ δL = ofRat fun f => if f 0 = f 1 then 1 else 0
rw [leftDualLeftUnit_eq_tensor_basis ⊢ (∑ i,
(Tensor.basis ![Color.upL, Color.downL]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ (∑ i,
(Tensor.basis ![Color.upL, Color.downL]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ (∑ i,
(Tensor.basis ![Color.upL, Color.downL]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0
conv_lhs =>
enter [2, x] x:Fin (repDim (![Color.upL, Color.downL] 0))| (Tensor.basis ![Color.upL, Color.downL]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rw [basis_eq_ofRat] x:Fin (repDim (![Color.upL, Color.downL] 0))| ofRat fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sum ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0
congr e_6 ⊢ (∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f => if f 0 = f 1 then 1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma dualRightRightUnit_eq_ofRat : δR' = ofRat fun f =>
if f 0 = f 1 then 1 else 0 := by ⊢ δR' = ofRat fun f => if f 0 = f 1 then 1 else 0
rw [dualRightRightUnit_eq_tensor_basis ⊢ (∑ i,
(Tensor.basis ![Color.downR, Color.upR]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ (∑ i,
(Tensor.basis ![Color.downR, Color.upR]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ (∑ i,
(Tensor.basis ![Color.downR, Color.upR]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0
conv_lhs =>
enter [2, x] x:Fin (repDim (![Color.downR, Color.upR] 0))| (Tensor.basis ![Color.downR, Color.upR]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rw [basis_eq_ofRat] x:Fin (repDim (![Color.downR, Color.upR] 0))| ofRat fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sum ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0
congr e_6 ⊢ (∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f => if f 0 = f 1 then 1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma rightDualRightUnit_eq_ofRat : δR = ofRat fun f =>
if f 0 = f 1 then 1 else 0 := by ⊢ δR = ofRat fun f => if f 0 = f 1 then 1 else 0
rw [rightDualRightUnit_eq_tensor_basis ⊢ (∑ i,
(Tensor.basis ![Color.upR, Color.downR]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ (∑ i,
(Tensor.basis ![Color.upR, Color.downR]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ (∑ i,
(Tensor.basis ![Color.upR, Color.downR]) fun x =>
match x with
| 0 => i
| 1 => i) =
ofRat fun f => if f 0 = f 1 then 1 else 0
conv_lhs =>
enter [2, x] x:Fin (repDim (![Color.upR, Color.downR] 0))| (Tensor.basis ![Color.upR, Color.downR]) fun x_1 =>
match x_1 with
| 0 => x
| 1 => x
rw [basis_eq_ofRat] x:Fin (repDim (![Color.upR, Color.downR] 0))| ofRat fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sum ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0 ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0] ⊢ ofRat
(∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = f 1 then 1 else 0
congr e_6 ⊢ (∑ x, fun b' =>
if
(fun x_1 =>
match x_1 with
| 0 => x
| 1 => x) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f => if f 0 = f 1 then 1 else 0
with_unfolding_all decide All goals completed! 🐙Group actions
The tensor coContrUnit is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_coContrUnit (g : SL(2,ℂ)) : g • δ' = δ' := by g:SL(2, ℂ)⊢ g • δ' = δ'
rw [unitTensor_invariant g:SL(2, ℂ)⊢ unitTensor Color.up = δ' All goals completed! 🐙] All goals completed! 🐙
The tensor contrCoUnit is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_contrCoUnit (g : SL(2,ℂ)) : g • δ = δ := by g:SL(2, ℂ)⊢ g • δ = δ
rw [unitTensor_invariant g:SL(2, ℂ)⊢ unitTensor Color.down = δ All goals completed! 🐙] All goals completed! 🐙
The tensor dualLeftLeftUnit is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_dualLeftLeftUnit (g : SL(2,ℂ)) : g • δL' = δL' := by g:SL(2, ℂ)⊢ g • δL' = δL'
rw [unitTensor_invariant g:SL(2, ℂ)⊢ unitTensor Color.upL = δL' All goals completed! 🐙] All goals completed! 🐙
The tensor leftDualLeftUnit is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_leftDualLeftUnit (g : SL(2,ℂ)) : g • δL = δL := by g:SL(2, ℂ)⊢ g • δL = δL
rw [unitTensor_invariant g:SL(2, ℂ)⊢ unitTensor Color.downL = δL All goals completed! 🐙] All goals completed! 🐙
The tensor dualRightRightUnit is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_dualRightRightUnit (g : SL(2,ℂ)) : g • δR' = δR' := by g:SL(2, ℂ)⊢ g • δR' = δR'
rw [unitTensor_invariant g:SL(2, ℂ)⊢ unitTensor Color.upR = δR' All goals completed! 🐙] All goals completed! 🐙
The tensor rightDualRightUnit is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_rightDualRightUnit (g : SL(2,ℂ)) : g • δR = δR := by g:SL(2, ℂ)⊢ g • δR = δR
rw [unitTensor_invariant g:SL(2, ℂ)⊢ unitTensor Color.downR = δR All goals completed! 🐙] All goals completed! 🐙