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.Metrics.Basic
public import Physlib.Relativity.PauliMatrices.AsTensor
public import Physlib.Relativity.Tensors.ComplexTensor.Metrics.BasicPauli matrices as a tensor
@[expose] public sectionTensorial structure
The tensorial structure on the type
Fin 1 ⊕ Fin 3 → Matrix (Fin 2) (Fin 2) ℂ
and properties thereof.
The equivalence between the type of indices of a [.up, .upL, .upR] tensor and
(Fin 1 ⊕ Fin 3) × Fin 2 × Fin 2.
def indexEquiv : ComponentIdx (S := complexLorentzTensor) ![.up, .upL, .upR] ≃
(Fin 1 ⊕ Fin 3) × Fin 2 × Fin 2 where
toFun v := (finSumFinEquiv.symm (v 0 : Fin 4), v 1, v 2)
invFun v := fun | 0 => finSumFinEquiv v.1 | 1 => v.2.1 | 2 => v.2.2
left_inv v := v:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ (fun v x =>
match x with
| 0 => finSumFinEquiv v.1
| 1 => v.2.1
| 2 => v.2.2)
((fun v => (finSumFinEquiv.symm (v 0), v 1, v 2)) v) =
v
v:ComponentIdx ![Color.up, Color.upL, Color.upR]x:Fin (Nat.succ 0).succ.succ⊢ (fun v x =>
match x with
| 0 => finSumFinEquiv v.1
| 1 => v.2.1
| 2 => v.2.2)
((fun v => (finSumFinEquiv.symm (v 0), v 1, v 2)) v) x =
v x
v:ComponentIdx ![Color.up, Color.upL, Color.upR]x:Fin (Nat.succ 0).succ.succ⊢ (match x with
| 0 => v 0
| 1 => v 1
| 2 => v 2) =
v x
v:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ (match (fun i => i) ⟨0, ⋯⟩ with
| 0 => v 0
| 1 => v 1
| 2 => v 2) =
v ((fun i => i) ⟨0, ⋯⟩)v:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ (match (fun i => i) ⟨1, ⋯⟩ with
| 0 => v 0
| 1 => v 1
| 2 => v 2) =
v ((fun i => i) ⟨1, ⋯⟩)v:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ (match (fun i => i) ⟨2, ⋯⟩ with
| 0 => v 0
| 1 => v 1
| 2 => v 2) =
v ((fun i => i) ⟨2, ⋯⟩)
v:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ (match (fun i => i) ⟨0, ⋯⟩ with
| 0 => v 0
| 1 => v 1
| 2 => v 2) =
v ((fun i => i) ⟨0, ⋯⟩)v:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ (match (fun i => i) ⟨1, ⋯⟩ with
| 0 => v 0
| 1 => v 1
| 2 => v 2) =
v ((fun i => i) ⟨1, ⋯⟩)v:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ (match (fun i => i) ⟨2, ⋯⟩ with
| 0 => v 0
| 1 => v 1
| 2 => v 2) =
v ((fun i => i) ⟨2, ⋯⟩) All goals completed! 🐙
right_inv v := v:(Fin 1 ⊕ Fin 3) × Fin 2 × Fin 2⊢ (fun v => (finSumFinEquiv.symm (v 0), v 1, v 2))
((fun v x =>
match x with
| 0 => finSumFinEquiv v.1
| 1 => v.2.1
| 2 => v.2.2)
v) =
v
All goals completed! 🐙instance tensorial : TensorSpecies.Tensorial complexLorentzTensor
![.up, .upL, .upR] (Fin 1 ⊕ Fin 3 → Matrix (Fin 2) (Fin 2) ℂ) where
toTensor := LinearEquiv.symm <|
Equiv.toLinearEquiv
((Tensor.basis (S := complexLorentzTensor) ![.up, .upL, .upR]).repr.toEquiv.trans <|
Finsupp.equivFunOnFinite.trans <|
(Equiv.piCongrLeft' _ indexEquiv).trans <|
(Equiv.curry _ _ _).trans <|
Equiv.piCongrRight fun _ => Equiv.curry _ _ _)
{ map_add := fun x y => x:complexLorentzTensor.Tensor ![Color.up, Color.upL, Color.upR]y:complexLorentzTensor.Tensor ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr.toEquiv.trans
(Finsupp.equivFunOnFinite.trans
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv).trans
((Equiv.curry (Fin 1 ⊕ Fin 3) (Fin 2 × Fin 2) ℂ).trans
(Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)))))
(x + y) =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr.toEquiv.trans
(Finsupp.equivFunOnFinite.trans
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv).trans
((Equiv.curry (Fin 1 ⊕ Fin 3) (Fin 2 × Fin 2) ℂ).trans
(Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)))))
x +
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr.toEquiv.trans
(Finsupp.equivFunOnFinite.trans
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv).trans
((Equiv.curry (Fin 1 ⊕ Fin 3) (Fin 2 × Fin 2) ℂ).trans
(Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)))))
y
x:complexLorentzTensor.Tensor ![Color.up, Color.upL, Color.upR]y:complexLorentzTensor.Tensor ![Color.up, Color.upL, Color.upR]⊢ (Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)
(Function.curry
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv)
(Finsupp.equivFunOnFinite
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr x +
(Tensor.basis ![Color.up, Color.upL, Color.upR]).repr y)))) =
(Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)
(Function.curry
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv)
(Finsupp.equivFunOnFinite ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr x)))) +
(Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)
(Function.curry
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv)
(Finsupp.equivFunOnFinite ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr y))))
All goals completed! 🐙
map_smul := fun c x => c:ℂx:complexLorentzTensor.Tensor ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr.toEquiv.trans
(Finsupp.equivFunOnFinite.trans
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv).trans
((Equiv.curry (Fin 1 ⊕ Fin 3) (Fin 2 × Fin 2) ℂ).trans
(Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)))))
(c • x) =
c •
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr.toEquiv.trans
(Finsupp.equivFunOnFinite.trans
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv).trans
((Equiv.curry (Fin 1 ⊕ Fin 3) (Fin 2 × Fin 2) ℂ).trans
(Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)))))
x
c:ℂx:complexLorentzTensor.Tensor ![Color.up, Color.upL, Color.upR]⊢ (Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)
(Function.curry
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv)
(Finsupp.equivFunOnFinite (c • (Tensor.basis ![Color.up, Color.upL, Color.upR]).repr x)))) =
c •
(Equiv.piCongrRight fun x => Equiv.curry (Fin 2) (Fin 2) ℂ)
(Function.curry
((Equiv.piCongrLeft' (fun a => ℂ) indexEquiv)
(Finsupp.equivFunOnFinite ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr x))))
All goals completed! 🐙}lemma toTensor_symm_apply (p : ℂT[.up, .upL, .upR]) :
(toTensor (self := tensorial)).symm p =
((Equiv.piCongrRight fun _ => Equiv.curry _ _ _) <|
(Equiv.curry _ _ _) <|
Equiv.piCongrLeft' _ indexEquiv <|
Finsupp.equivFunOnFinite <|
(Tensor.basis (S := complexLorentzTensor) _).repr p) := rflb:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2⊢ (if indexEquiv.symm (μ, α, β) = b then 1 else 0) = if b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β then 1 else 0
congr e_c b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2⊢ (indexEquiv.symm (μ, α, β) = b) = (b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β)
simp [indexEquiv] e_c b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2⊢ (fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b ↔
b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β
constructor e_c.mp b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2⊢ (fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b →
b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = βe_c.mpr b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2⊢ b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β →
(fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b
· e_c.mp b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2⊢ (fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b →
b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β intro h e_c.mp b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2h:(fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b⊢ b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β
subst h e_c.mp μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2⊢ (fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β)
0 =
finSumFinEquiv μ ∧
(fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β)
1 =
α ∧
(fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β)
2 =
β
simp All goals completed! 🐙
· e_c.mpr b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2⊢ b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β →
(fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b intro h e_c.mpr b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2h:b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β⊢ (fun x =>
match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b
funext x e_c.mpr b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2h:b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = βx:Fin 3⊢ (match x with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b x
fin_cases x e_c.mpr.«0» b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2h:b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β⊢ (match (fun i => i) ⟨0, ⋯⟩ with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b ((fun i => i) ⟨0, ⋯⟩)e_c.mpr.«1» b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2h:b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β⊢ (match (fun i => i) ⟨1, ⋯⟩ with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b ((fun i => i) ⟨1, ⋯⟩)e_c.mpr.«2» b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2h:b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β⊢ (match (fun i => i) ⟨2, ⋯⟩ with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b ((fun i => i) ⟨2, ⋯⟩)
· e_c.mpr.«0» b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2h:b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β⊢ (match (fun i => i) ⟨0, ⋯⟩ with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b ((fun i => i) ⟨0, ⋯⟩) simp [h.1] All goals completed! 🐙
· e_c.mpr.«1» b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2h:b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β⊢ (match (fun i => i) ⟨1, ⋯⟩ with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b ((fun i => i) ⟨1, ⋯⟩) simp [h.2.1] All goals completed! 🐙
· e_c.mpr.«2» b:(x : Fin (Nat.succ 0).succ.succ) → Fin (repDim (![Color.up, Color.upL, Color.upR] x))μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2h:b 0 = finSumFinEquiv μ ∧ b 1 = α ∧ b 2 = β⊢ (match (fun i => i) ⟨2, ⋯⟩ with
| 0 => finSumFinEquiv μ
| 1 => α
| 2 => β) =
b ((fun i => i) ⟨2, ⋯⟩) simp [h.2.2] All goals completed! 🐙Pauli matrices as a tensor
The Pauli matrices as a tensor toTensor pauliMatrix in ℂT[.up, .upL, .upR].
scoped[PauliMatrix] notation "σ^^^" => toTensor pauliMatrix
set_option backward.isDefEq.respectTransparency false in
lemma toTensor_basis_expand : σ^^^ =
Tensor.basis ![Color.up, Color.upL, Color.upR]
(fun | 0 => (0 : Fin 4) | 1 => (0 : Fin 2) | 2 => (0 : Fin 2))
+ Tensor.basis ![Color.up, Color.upL, Color.upR]
(fun | 0 => (0 : Fin 4) | 1 => (1 : Fin 2) | 2 => (1 : Fin 2))
+ Tensor.basis ![Color.up, Color.upL, Color.upR]
(fun | 0 => (1 : Fin 4) | 1 => (0 : Fin 2) | 2 => (1 : Fin 2))
+ Tensor.basis ![Color.up, Color.upL, Color.upR]
(fun | 0 => (1 : Fin 4) | 1 => (1 : Fin 2) | 2 => (0 : Fin 2))
- I • Tensor.basis ![Color.up, Color.upL, Color.upR]
(fun | 0 => (2 : Fin 4) | 1 => (0 : Fin 2) | 2 => (1 : Fin 2))
+ I • Tensor.basis ![Color.up, Color.upL, Color.upR]
(fun | 0 => (2 : Fin 4) | 1 => (1 : Fin 2) | 2 => (0 : Fin 2))
+ Tensor.basis ![Color.up, Color.upL, Color.upR]
(fun | 0 => (3 : Fin 4) | 1 => (0 : Fin 2) | 2 => (0 : Fin 2))
- Tensor.basis ![Color.up, Color.upL, Color.upR]
(fun | 0 => (3 : Fin 4) | 1 => (1 : Fin 2) | 2 => (1 : Fin 2)) := by ⊢ toTensor σ =
((((((((Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) -
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) +
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) -
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1
apply toTensor (self := tensorial).symm.injective ⊢ toTensor.symm (toTensor σ) =
toTensor.symm
(((((((((Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) -
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) +
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) -
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1)
simp [toTensor_symm_basis] ⊢ σ =
(((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0
funext μ α β μ:Fin 1 ⊕ Fin 3α:Fin 2β:Fin 2⊢ σ μ α β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
μ α β
fin_cases μ «0» α:Fin 2β:Fin 2⊢ σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) α β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inl ((fun i => i) ⟨0, ⋯⟩)) α β«1» α:Fin 2β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) α β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨0, ⋯⟩)) α β«2» α:Fin 2β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) α β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨1, ⋯⟩)) α β«3» α:Fin 2β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) α β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨2, ⋯⟩)) α β <;> «0» α:Fin 2β:Fin 2⊢ σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) α β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inl ((fun i => i) ⟨0, ⋯⟩)) α β«1» α:Fin 2β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) α β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨0, ⋯⟩)) α β«2» α:Fin 2β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) α β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨1, ⋯⟩)) α β«3» α:Fin 2β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) α β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨2, ⋯⟩)) α β fin_cases α «3».«0» β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β«3».«1» β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β <;> «0».«0» β:Fin 2⊢ σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inl ((fun i => i) ⟨0, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β«0».«1» β:Fin 2⊢ σ (Sum.inl ((fun i => i) ⟨0, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inl ((fun i => i) ⟨0, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β«1».«0» β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨0, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β«1».«1» β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨0, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨0, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β«2».«0» β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨1, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β«2».«1» β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨1, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨1, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β«3».«0» β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨0, ⋯⟩) β«3».«1» β:Fin 2⊢ σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) β fin_cases β «3».«1».«0» ⊢ σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩) =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨0, ⋯⟩)«3».«1».«1» ⊢ σ (Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩) =
((((((((fun μ α β => if 0 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) + fun μ α β =>
if 0 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
fun μ α β => if 1 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) -
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 0 = α ∧ 1 = β then 1 else 0) +
I • fun μ α β => if 2 = finSumFinEquiv μ ∧ 1 = α ∧ 0 = β then 1 else 0) +
fun μ α β => if 3 = finSumFinEquiv μ ∧ 0 = α ∧ 0 = β then 1 else 0) -
fun μ α β => if 3 = finSumFinEquiv μ ∧ 1 = α ∧ 1 = β then 1 else 0)
(Sum.inr ((fun i => i) ⟨2, ⋯⟩)) ((fun i => i) ⟨1, ⋯⟩) ((fun i => i) ⟨1, ⋯⟩)
all_goals
simp «3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = (if 0 = finSumFinEquiv (Sum.inr 2) then 1 else 0) - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0
all_goals
try rw [if_pos (by ⊢ 0 = finSumFinEquiv (Sum.inr 2) «3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = (if 0 = finSumFinEquiv (Sum.inr 2) then 1 else 0) - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0 decide ⊢ 0 = finSumFinEquiv (Sum.inr 2) «3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = (if 0 = finSumFinEquiv (Sum.inr 2) then 1 else 0) - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0)] «1».«1».«0» ⊢ σ (Sum.inr 0) 1 0 = 1 + if 2 = finSumFinEquiv (Sum.inr 0) then I else 0«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = (if 0 = finSumFinEquiv (Sum.inr 2) then 1 else 0) - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = (if 0 = finSumFinEquiv (Sum.inr 2) then 1 else 0) - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0
try rw [if_neg (by ⊢ ¬0 = finSumFinEquiv (Sum.inr 2) «3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0 decide All goals completed! 🐙«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0)] «3».«1».«0» ⊢ σ (Sum.inr 2) 1 0 = 0 + if 2 = finSumFinEquiv (Sum.inr 2) then I else 0«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0
try rw [if_neg (by ⊢ ¬3 = finSumFinEquiv (Sum.inr 2) «3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0 decide ⊢ ¬3 = finSumFinEquiv (Sum.inr 2)«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0)] «3».«1».«0» ⊢ σ (Sum.inr 2) 1 0 = 0 + 0«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - if 3 = finSumFinEquiv (Sum.inr 2) then 1 else 0
try rw [if_pos (by ⊢ 3 = finSumFinEquiv (Sum.inr 2) «3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - 1 decide All goals completed! 🐙«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - 1)] «3».«0».«0» ⊢ σ (Sum.inr 2) 0 0 = 0 + 1«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - 1«3».«1».«1» ⊢ σ (Sum.inr 2) 1 1 = 0 - 1
simp [pauliMatrix] All goals completed! 🐙
lemma toTensor_eq_ofRat : σ^^^ = ofRat (fun b =>
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 4 = repDim (![Color.up, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (0 : Fin 4) ∧ b 1 = b 2 then ⟨1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 4 = repDim (![Color.up, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (1 : Fin 4) ∧ b 1 ≠ b 2 then ⟨1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 4 = repDim (![Color.up, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (2 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 2 = repDim (![Color.up, Color.upL, Color.upR] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 2 = repDim (![Color.up, Color.upL, Color.upR] 2) rfl All goals completed! 🐙) (1 : Fin 2) then ⟨0, -1⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 4 = repDim (![Color.up, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (2 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 2 = repDim (![Color.up, Color.upL, Color.upR] 1) rfl All goals completed! 🐙) (1 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 2 = repDim (![Color.up, Color.upL, Color.upR] 2) rfl All goals completed! 🐙) (0 : Fin 2) then ⟨0, 1⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 4 = repDim (![Color.up, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (3 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 2 = repDim (![Color.up, Color.upL, Color.upR] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 2 = repDim (![Color.up, Color.upL, Color.upR] 2) rfl All goals completed! 🐙) (0 : Fin 2) then ⟨1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 4 = repDim (![Color.up, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (3 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 2 = repDim (![Color.up, Color.upL, Color.upR] 1) rfl All goals completed! 🐙) (1 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ 2 = repDim (![Color.up, Color.upL, Color.upR] 2) rfl All goals completed! 🐙) (1 : Fin 2) then ⟨-1, 0⟩ else 0) := by ⊢ toTensor σ =
ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0
apply (Tensor.basis _).repr.injective ⊢ (Tensor.basis ![Color.up, Color.upL, Color.upR]).repr (toTensor σ) =
(Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0)
ext b b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr (toTensor σ)) b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b
rw [toTensor_basis_expand b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(((((((((Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) -
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) +
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) -
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1))
b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(((((((((Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) -
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) +
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) -
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1))
b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b] b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(((((((((Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) -
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) +
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) -
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1))
b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Fin.isValue, cons_val_zero, cons_val_one] b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(((((((((Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) -
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) +
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) -
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1))
b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b
repeat rw [basis_eq_ofRat b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
((((((((ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) -
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) +
I •
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) +
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) -
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1))
b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
((((((((ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
I •
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
I •
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b] b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
((((((((ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
I •
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
I •
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
(Tensor.basis ![Color.up, Color.upL, Color.upR]) fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1))
b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
((((((((ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
I •
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
I •
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
((((((((ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
I •
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
I •
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b =
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0))
b
simp only [Fin.isValue, map_sub, map_add, _root_.map_smul, Finsupp.coe_sub, Finsupp.coe_add,
Finsupp.coe_smul, Pi.sub_apply, Pi.add_apply, ofRat_basis_repr_apply, Pi.smul_apply,
smul_eq_mul, Physlib.RatComplexNum.I_mul_toComplexNum, mul_ite, ne_eq, cons_val_two,
Nat.succ_eq_add_one, Nat.reduceAdd] b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ Physlib.RatComplexNum.toComplexNum
(if
(fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
Physlib.RatComplexNum.toComplexNum
(if
(fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
Physlib.RatComplexNum.toComplexNum
(if
(fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
Physlib.RatComplexNum.toComplexNum
(if
(fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
Physlib.RatComplexNum.toComplexNum
(if
(fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) =
b then
{ fst := 0, snd := 1 } * { fst := 1, snd := 0 }
else { fst := 0, snd := 1 } * { fst := 0, snd := 0 }) +
Physlib.RatComplexNum.toComplexNum
(if
(fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) =
b then
{ fst := 0, snd := 1 } * { fst := 1, snd := 0 }
else { fst := 0, snd := 1 } * { fst := 0, snd := 0 }) +
Physlib.RatComplexNum.toComplexNum
(if
(fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
Physlib.RatComplexNum.toComplexNum
(if
(fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ ¬b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0)
simp only [Fin.isValue, ← map_add, ← map_sub] b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ Physlib.RatComplexNum.toComplexNum
((((((((if
(fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
if
(fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) =
b then
{ fst := 0, snd := 1 } * { fst := 1, snd := 0 }
else { fst := 0, snd := 1 } * { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) =
b then
{ fst := 0, snd := 1 } * { fst := 1, snd := 0 }
else { fst := 0, snd := 1 } * { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
if
(fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ ¬b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0)
apply (Function.Injective.eq_iff Physlib.RatComplexNum.toComplexNum_injective).mpr b:ComponentIdx ![Color.up, Color.upL, Color.upR]⊢ ((((((((if
(fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
if
(fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) =
b then
{ fst := 0, snd := 1 } * { fst := 1, snd := 0 }
else { fst := 0, snd := 1 } * { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) =
b then
{ fst := 0, snd := 1 } * { fst := 1, snd := 0 }
else { fst := 0, snd := 1 } * { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
if
(fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ ¬b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0
revert b ⊢ ∀ (b : ComponentIdx ![Color.up, Color.upL, Color.upR]),
((((((((if
(fun x =>
match x with
| 0 => 0
| 1 => 0
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 0
| 1 => 1
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 1
| 1 => 0
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 1
| 1 => 1
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
if
(fun x =>
match x with
| 0 => 2
| 1 => 0
| 2 => 1) =
b then
{ fst := 0, snd := 1 } * { fst := 1, snd := 0 }
else { fst := 0, snd := 1 } * { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 2
| 1 => 1
| 2 => 0) =
b then
{ fst := 0, snd := 1 } * { fst := 1, snd := 0 }
else { fst := 0, snd := 1 } * { fst := 0, snd := 0 }) +
if
(fun x =>
match x with
| 0 => 3
| 1 => 0
| 2 => 0) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
if
(fun x =>
match x with
| 0 => 3
| 1 => 1
| 2 => 1) =
b then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ ¬b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 } else 0
decide +kernel All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
@[simp]
lemma smul_eq_self (Λ : SL(2,ℂ)) : Λ • pauliMatrix = pauliMatrix := by Λ:SL(2, ℂ)⊢ Λ • σ = σ
rw [smul_eq, Λ:SL(2, ℂ)⊢ toTensor.symm (Λ • toTensor σ) = σ Λ:SL(2, ℂ)⊢ toTensor.symm (toTensor σ) = σ toTensor_eq_asConsTensor, Λ:SL(2, ℂ)⊢ toTensor.symm (Λ • fromConstTriple asConsTensor) = σ Λ:SL(2, ℂ)⊢ toTensor.symm (toTensor σ) = σ actionT_fromConstTriple, Λ:SL(2, ℂ)⊢ toTensor.symm (fromConstTriple asConsTensor) = σ Λ:SL(2, ℂ)⊢ toTensor.symm (toTensor σ) = σ ← toTensor_eq_asConsTensor Λ:SL(2, ℂ)⊢ toTensor.symm (toTensor σ) = σ Λ:SL(2, ℂ)⊢ toTensor.symm (toTensor σ) = σ] Λ:SL(2, ℂ)⊢ toTensor.symm (toTensor σ) = σ
simp All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
@[simp]
lemma toTensor_smul_eq_self (Λ : SL(2,ℂ)) : Λ • σ^^^ = σ^^^ := by Λ:SL(2, ℂ)⊢ Λ • toTensor σ = toTensor σ
rw [toTensor_eq_asConsTensor Λ:SL(2, ℂ)⊢ Λ • fromConstTriple asConsTensor = fromConstTriple asConsTensor Λ:SL(2, ℂ)⊢ Λ • fromConstTriple asConsTensor = fromConstTriple asConsTensor] Λ:SL(2, ℂ)⊢ Λ • fromConstTriple asConsTensor = fromConstTriple asConsTensor
simp All goals completed! 🐙Variations of the pauli tensor
The Pauli matrices as the complex Lorentz tensor σ_μ^α^{dot β}.
@[inherit_doc pauliCo]
scoped[PauliMatrix] notation "σ_^^" => PauliMatrix.pauliCo
The Pauli matrices as the complex Lorentz tensor σ_μ_{dot β}_α.
abbrev pauliCoDown : ℂT[.down, .downR, .downL] :=
permT id (IsReindexing.auto) {σ_^^ | μ α β ⊗ εR' | β β' ⊗ εL' | α α' }ᵀ@[inherit_doc pauliCoDown]
scoped[PauliMatrix] notation "σ___" => PauliMatrix.pauliCoDown
The Pauli matrices as the complex Lorentz tensor σ^μ_{dot β}_α.
abbrev pauliContrDown : ℂT[.up, .downR, .downL] :=
permT id (IsReindexing.auto) {σ^^^ | μ α β ⊗ εR' | β β' ⊗ εL' | α α'}ᵀ@[inherit_doc pauliContrDown]
scoped[PauliMatrix] notation "σ^__" => PauliMatrix.pauliContrDownDifferent forms
lemma pauliCo_eq_ofRat : pauliCo = ofRat (fun b =>
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 4 = repDim (![Color.down, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (0 : Fin 4) ∧ b 1 = b 2 then ⟨1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 4 = repDim (![Color.down, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (1 : Fin 4) ∧ b 1 ≠ b 2 then ⟨-1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 4 = repDim (![Color.down, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (2 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 2 = repDim (![Color.down, Color.upL, Color.upR] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 2 = repDim (![Color.down, Color.upL, Color.upR] 2) rfl All goals completed! 🐙) (1 : Fin 2) then ⟨0, 1⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 4 = repDim (![Color.down, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (2 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 2 = repDim (![Color.down, Color.upL, Color.upR] 1) rfl All goals completed! 🐙) (1 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 2 = repDim (![Color.down, Color.upL, Color.upR] 2) rfl All goals completed! 🐙) (0 : Fin 2) then ⟨0, -1⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 4 = repDim (![Color.down, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (3 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 2 = repDim (![Color.down, Color.upL, Color.upR] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 2 = repDim (![Color.down, Color.upL, Color.upR] 2) rfl All goals completed! 🐙) (0 : Fin 2) then ⟨-1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 4 = repDim (![Color.down, Color.upL, Color.upR] 0) rfl All goals completed! 🐙) (3 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 2 = repDim (![Color.down, Color.upL, Color.upR] 1) rfl All goals completed! 🐙) (1 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ 2 = repDim (![Color.down, Color.upL, Color.upR] 2) rfl All goals completed! 🐙) (1 : Fin 2) then ⟨1, 0⟩ else ⟨0, 0⟩) := by ⊢ σ_^^ =
ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
apply (Tensor.basis _).repr.injective ⊢ (Tensor.basis ![Color.down, Color.upL, Color.upR]).repr σ_^^ =
(Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 })
ext b b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr σ_^^) b =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
rw [pauliCo b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
((permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT η') (toTensor σ)))))
b =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
((permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT η') (toTensor σ)))))
b =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b] b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ ((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
((permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT η') (toTensor σ)))))
b =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
rw [permT_basis_repr_symm_apply b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ (((Tensor.basis (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] ∘ Fin.succSuccAbove 1 2)).repr
((contrT 3 1 2 pauliCo._proof_3) ((prodT η') (toTensor σ))))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCo._proof_2 i))) =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ (((Tensor.basis (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] ∘ Fin.succSuccAbove 1 2)).repr
((contrT 3 1 2 pauliCo._proof_3) ((prodT η') (toTensor σ))))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCo._proof_2 i))) =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b] b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ (((Tensor.basis (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] ∘ Fin.succSuccAbove 1 2)).repr
((contrT 3 1 2 pauliCo._proof_3) ((prodT η') (toTensor σ))))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCo._proof_2 i))) =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
rw [contrT_basis_repr_apply b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ ∑ b',
((Tensor.basis (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR])).repr
((prodT η') (toTensor σ)))
↑b' *
(complexLorentzTensor.contr (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1))
((match Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 1) ⊗ₜ[ℂ]
(match complexLorentzTensor.τ (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 2))) =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ ∑ b',
((Tensor.basis (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR])).repr
((prodT η') (toTensor σ)))
↑b' *
(complexLorentzTensor.contr (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1))
((match Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 1) ⊗ₜ[ℂ]
(match complexLorentzTensor.τ (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 2))) =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b] b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ ∑ b',
((Tensor.basis (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR])).repr
((prodT η') (toTensor σ)))
↑b' *
(complexLorentzTensor.contr (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1))
((match Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 1) ⊗ₜ[ℂ]
(match complexLorentzTensor.τ (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 2))) =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
conv_lhs =>
enter [2, x] b:ComponentIdx ![Color.down, Color.upL, Color.upR]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCo._proof_2 i)))| ((Tensor.basis (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR])).repr ((prodT η') (toTensor σ)))
↑x *
(complexLorentzTensor.contr (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1))
((match Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑x 1) ⊗ₜ[ℂ]
(match complexLorentzTensor.τ (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑x 2)))
rw [contr_basis_ratComplexNum] b:ComponentIdx ![Color.down, Color.upL, Color.upR]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCo._proof_2 i)))| ((Tensor.basis (Fin.append ![Color.down, Color.down] ![Color.up, Color.upL, Color.upR])).repr ((prodT η') (toTensor σ)))
↑x *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0)
rw [prodT_basis_repr_apply] b:ComponentIdx ![Color.down, Color.upL, Color.upR]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCo._proof_2 i)))| ((Tensor.basis ![Color.down, Color.down]).repr η') (ComponentIdx.prod ↑x).1 *
((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr (toTensor σ)) (ComponentIdx.prod ↑x).2 *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0)
simp only [coMetric_eq_ofRat, ofRat_basis_repr_apply, toTensor_eq_ofRat] b:ComponentIdx ![Color.down, Color.upL, Color.upR]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCo._proof_2 i)))| Physlib.RatComplexNum.toComplexNum
(if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
Physlib.RatComplexNum.toComplexNum
(if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.down, Color.upL, Color.upR]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCo._proof_2 i)))| Physlib.RatComplexNum.toComplexNum
((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.down, Color.upL, Color.upR]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCo._proof_2 i)))| Physlib.RatComplexNum.toComplexNum
(((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0)
rw [← map_sum Physlib.RatComplexNum.toComplexNum b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0) =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0) =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b] b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0) =
((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
rw [ofRat_basis_repr_apply b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 })] b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 })
apply (Function.Injective.eq_iff Physlib.RatComplexNum.toComplexNum_injective).mpr b:ComponentIdx ![Color.down, Color.upL, Color.upR]⊢ (∑ x,
((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0) =
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
revert b ⊢ ∀ (b : ComponentIdx ![Color.down, Color.upL, Color.upR]),
(∑ x,
((if
(ComponentIdx.prod ↑x).1 0 = Fin.cast coMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).1 1 = Fin.cast coMetric_eq_ofRat._proof_2 0 then
1
else if (ComponentIdx.prod ↑x).1 0 = (ComponentIdx.prod ↑x).1 1 then -1 else 0) *
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 1 = (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 1 ≠ (ComponentIdx.prod ↑x).2 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x).2 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 2)) then 1 else 0) =
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
decide +kernel All goals completed! 🐙
lemma pauliCoDown_eq_ofRat : pauliCoDown = ofRat (fun b =>
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 4 = repDim (![Color.down, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (0 : Fin 4) ∧ b 1 = b 2 then ⟨1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 4 = repDim (![Color.down, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (1 : Fin 4) ∧ b 1 ≠ b 2 then ⟨1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 4 = repDim (![Color.down, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (2 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 2 = repDim (![Color.down, Color.downR, Color.downL] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 2 = repDim (![Color.down, Color.downR, Color.downL] 2) rfl All goals completed! 🐙) (1 : Fin 2) then ⟨0, -1⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 4 = repDim (![Color.down, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (2 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 2 = repDim (![Color.down, Color.downR, Color.downL] 1) rfl All goals completed! 🐙) (1 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 2 = repDim (![Color.down, Color.downR, Color.downL] 2) rfl All goals completed! 🐙) (0 : Fin 2) then ⟨0, 1⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 4 = repDim (![Color.down, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (3 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 2 = repDim (![Color.down, Color.downR, Color.downL] 1) rfl All goals completed! 🐙) (1 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 2 = repDim (![Color.down, Color.downR, Color.downL] 2) rfl All goals completed! 🐙) (1 : Fin 2) then ⟨-1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 4 = repDim (![Color.down, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (3 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 2 = repDim (![Color.down, Color.downR, Color.downL] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ 2 = repDim (![Color.down, Color.downR, Color.downL] 2) rfl All goals completed! 🐙) (0 : Fin 2) then ⟨1, 0⟩ else ⟨0, 0⟩) := by ⊢ σ___ =
ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
apply (Tensor.basis _).repr.injective ⊢ (Tensor.basis ![Color.down, Color.downR, Color.downL]).repr σ___ =
(Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 })
ext b b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ ((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr σ___) b =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
rw [pauliCoDown b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ ((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
((permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2) ((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL'))))
b =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ ((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
((permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2) ((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL'))))
b =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b] b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ ((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
((permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2) ((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL'))))
b =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
rw [permT_basis_repr_symm_apply b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ (((Tensor.basis
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] ∘
Fin.succSuccAbove 1 3)).repr
((contrT 3 1 3 pauliCoDown._proof_2) ((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL')))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i))) =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ (((Tensor.basis
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] ∘
Fin.succSuccAbove 1 3)).repr
((contrT 3 1 3 pauliCoDown._proof_2) ((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL')))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i))) =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b] b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ (((Tensor.basis
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] ∘
Fin.succSuccAbove 1 3)).repr
((contrT 3 1 3 pauliCoDown._proof_2) ((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL')))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i))) =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
rw [contrT_basis_repr_apply b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ ∑ b',
((Tensor.basis
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL'))
↑b' *
(complexLorentzTensor.contr
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1))
((match
Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 1) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3))) =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ ∑ b',
((Tensor.basis
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL'))
↑b' *
(complexLorentzTensor.contr
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1))
((match
Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 1) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3))) =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b] b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ ∑ b',
((Tensor.basis
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL'))
↑b' *
(complexLorentzTensor.contr
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1))
((match
Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 1) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3))) =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
conv_lhs =>
enter [2, x] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))| ((Tensor.basis
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL'))
↑x *
(complexLorentzTensor.contr
(Fin.append (Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1))
((match
Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑x 1) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑x 3)))
rw [contr_basis_ratComplexNum] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))| ((Tensor.basis
(Fin.append
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL'))
↑x *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [prodT_basis_repr_apply] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))| ((Tensor.basis
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)).repr
((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR')))
(ComponentIdx.prod ↑x).1 *
((Tensor.basis ![Color.downL, Color.downL]).repr εL') (ComponentIdx.prod ↑x).2 *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [contrT_basis_repr_apply] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))| (∑ b',
((Tensor.basis (Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR])).repr
((prodT σ_^^) εR'))
↑b' *
(complexLorentzTensor.contr (Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] 2))
((match Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] 2 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 2) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] 2) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3)))) *
((Tensor.basis ![Color.downL, Color.downL]).repr εL') (ComponentIdx.prod ↑x).2 *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
simp only [coMetric_eq_ofRat, ofRat_basis_repr_apply,
dualLeftMetric_eq_ofRat] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))| (∑ b',
((Tensor.basis (Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR])).repr
((prodT σ_^^) εR'))
↑b' *
(complexLorentzTensor.contr (Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] 2))
((match Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] 2 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 2) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] 2) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3)))) *
Physlib.RatComplexNum.toComplexNum
(if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
enter [1, 1, 2, y] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| ((Tensor.basis (Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR])).repr ((prodT σ_^^) εR'))
↑y *
(complexLorentzTensor.contr (Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] 2))
((match Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] 2 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑y 2) ⊗ₜ[ℂ]
(match complexLorentzTensor.τ (Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR] 2) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑y 3)))
rw [contr_basis_ratComplexNum] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| ((Tensor.basis (Fin.append ![Color.down, Color.upL, Color.upR] ![Color.downR, Color.downR])).repr ((prodT σ_^^) εR'))
↑y *
Physlib.RatComplexNum.toComplexNum (if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
rw [prodT_basis_repr_apply] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| ((Tensor.basis ![Color.down, Color.upL, Color.upR]).repr σ_^^) (ComponentIdx.prod ↑y).1 *
((Tensor.basis ![Color.downR, Color.downR]).repr εR') (ComponentIdx.prod ↑y).2 *
Physlib.RatComplexNum.toComplexNum (if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
simp only [coMetric_eq_ofRat, ofRat_basis_repr_apply, pauliCo_eq_ofRat,
dualRightMetric_eq_ofRat] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| Physlib.RatComplexNum.toComplexNum
(if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 1 = (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 1 ≠ (ComponentIdx.prod ↑y).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
Physlib.RatComplexNum.toComplexNum
(if
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| Physlib.RatComplexNum.toComplexNum
((if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 1 = (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 1 ≠ (ComponentIdx.prod ↑y).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| Physlib.RatComplexNum.toComplexNum
(((if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 1 = (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 1 ≠ (ComponentIdx.prod ↑y).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
conv_lhs =>
enter [2, x] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))| (∑ y,
Physlib.RatComplexNum.toComplexNum
(((if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 1 = (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑y).1 1 ≠ (ComponentIdx.prod ↑y).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)) *
Physlib.RatComplexNum.toComplexNum
(if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [← map_sum Physlib.RatComplexNum.toComplexNum] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))| Physlib.RatComplexNum.toComplexNum
(∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
Physlib.RatComplexNum.toComplexNum
(if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))| Physlib.RatComplexNum.toComplexNum
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.down, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliCoDown._proof_1 i)))| Physlib.RatComplexNum.toComplexNum
(((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [← map_sum Physlib.RatComplexNum.toComplexNum b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b] b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
((Tensor.basis ![Color.down, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }))
b
rw [ofRat_basis_repr_apply b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 })] b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 })
apply (Function.Injective.eq_iff Physlib.RatComplexNum.toComplexNum_injective).mpr b:ComponentIdx ![Color.down, Color.downR, Color.downL]⊢ (∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
revert b ⊢ ∀ (b : ComponentIdx ![Color.down, Color.downR, Color.downL]),
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := -1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
decide +kernel All goals completed! 🐙
lemma pauliContrDown_ofRat : pauliContrDown = ofRat (fun b =>
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 4 = repDim (![Color.up, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (0 : Fin 4) ∧ b 1 = b 2 then ⟨1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 4 = repDim (![Color.up, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (1 : Fin 4) ∧ b 1 ≠ b 2 then ⟨-1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 4 = repDim (![Color.up, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (2 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 2 = repDim (![Color.up, Color.downR, Color.downL] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 2 = repDim (![Color.up, Color.downR, Color.downL] 2) rfl All goals completed! 🐙) (1 : Fin 2) then ⟨0, 1⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 4 = repDim (![Color.up, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (2 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 2 = repDim (![Color.up, Color.downR, Color.downL] 1) rfl All goals completed! 🐙) (1 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 2 = repDim (![Color.up, Color.downR, Color.downL] 2) rfl All goals completed! 🐙) (0 : Fin 2) then ⟨0, -1⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 4 = repDim (![Color.up, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (3 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 2 = repDim (![Color.up, Color.downR, Color.downL] 1) rfl All goals completed! 🐙) (1 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 2 = repDim (![Color.up, Color.downR, Color.downL] 2) rfl All goals completed! 🐙) (1 : Fin 2) then ⟨1, 0⟩ else
if b 0 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 4 = repDim (![Color.up, Color.downR, Color.downL] 0) rfl All goals completed! 🐙) (3 : Fin 4) ∧ b 1 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 2 = repDim (![Color.up, Color.downR, Color.downL] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧
b 2 = Fin.cast (by b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ 2 = repDim (![Color.up, Color.downR, Color.downL] 2) rfl All goals completed! 🐙) (0 : Fin 2) then ⟨-1, 0⟩ else 0) := by ⊢ σ^__ =
ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0
apply (Tensor.basis _).repr.injective ⊢ (Tensor.basis ![Color.up, Color.downR, Color.downL]).repr σ^__ =
(Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0)
ext b b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ ((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr σ^__) b =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b
rw [pauliContrDown b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ ((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
((permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL'))))
b =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ ((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
((permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL'))))
b =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b] b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ ((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
((permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL'))))
b =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b
rw [permT_basis_repr_symm_apply b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ (((Tensor.basis
(Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] ∘
Fin.succSuccAbove 1 3)).repr
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL')))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i))) =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ (((Tensor.basis
(Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] ∘
Fin.succSuccAbove 1 3)).repr
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL')))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i))) =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b] b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ (((Tensor.basis
(Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] ∘
Fin.succSuccAbove 1 3)).repr
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL')))
fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i))) =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b
rw [contrT_basis_repr_apply b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ ∑ b',
((Tensor.basis
(Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL'))
↑b' *
(complexLorentzTensor.contr
(Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1))
((match
Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 1) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3))) =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ ∑ b',
((Tensor.basis
(Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL'))
↑b' *
(complexLorentzTensor.contr
(Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1))
((match
Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 1) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3))) =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b] b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ ∑ b',
((Tensor.basis
(Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL'))
↑b' *
(complexLorentzTensor.contr
(Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1))
((match
Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 1) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3))) =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b
conv_lhs =>
enter [2, x] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))| ((Tensor.basis
(Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL'))
↑x *
(complexLorentzTensor.contr
(Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1))
((match
Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑x 1) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ
(Fin.append
(Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL] 1) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑x 3)))
rw [contr_basis_ratComplexNum] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))| ((Tensor.basis
(Fin.append (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)
![Color.downL, Color.downL])).repr
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL'))
↑x *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [prodT_basis_repr_apply] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))| ((Tensor.basis (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] ∘ Fin.succSuccAbove 2 3)).repr
((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR')))
(ComponentIdx.prod ↑x).1 *
((Tensor.basis ![Color.downL, Color.downL]).repr εL') (ComponentIdx.prod ↑x).2 *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [contrT_basis_repr_apply] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))| (∑ b',
((Tensor.basis (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR])).repr
((prodT (toTensor σ)) εR'))
↑b' *
(complexLorentzTensor.contr (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] 2))
((match Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] 2 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 2) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] 2) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3)))) *
((Tensor.basis ![Color.downL, Color.downL]).repr εL') (ComponentIdx.prod ↑x).2 *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
simp only [coMetric_eq_ofRat, ofRat_basis_repr_apply,
dualLeftMetric_eq_ofRat] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))| (∑ b',
((Tensor.basis (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR])).repr
((prodT (toTensor σ)) εR'))
↑b' *
(complexLorentzTensor.contr (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] 2))
((match Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] 2 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑b' 2) ⊗ₜ[ℂ]
(match
complexLorentzTensor.τ (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] 2) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑b' 3)))) *
Physlib.RatComplexNum.toComplexNum
(if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
enter [1, 1, 2, y] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| ((Tensor.basis (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR])).repr
((prodT (toTensor σ)) εR'))
↑y *
(complexLorentzTensor.contr (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] 2))
((match Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] 2 with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
(↑y 2) ⊗ₜ[ℂ]
(match complexLorentzTensor.τ (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR] 2) with
| Color.upL => LeftHandedWeyl.basis
| Color.downL => DualLeftHandedWeyl.basis
| Color.upR => RightHandedWeyl.basis
| Color.downR => DualRightHandedWeyl.basis
| Color.up => complexContrBasisFin4
| Color.down => complexCoBasisFin4)
((basisIdxCongr ⋯) (↑y 3)))
rw [contr_basis_ratComplexNum] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| ((Tensor.basis (Fin.append ![Color.up, Color.upL, Color.upR] ![Color.downR, Color.downR])).repr
((prodT (toTensor σ)) εR'))
↑y *
Physlib.RatComplexNum.toComplexNum (if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
rw [prodT_basis_repr_apply] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| ((Tensor.basis ![Color.up, Color.upL, Color.upR]).repr (toTensor σ)) (ComponentIdx.prod ↑y).1 *
((Tensor.basis ![Color.downR, Color.downR]).repr εR') (ComponentIdx.prod ↑y).2 *
Physlib.RatComplexNum.toComplexNum (if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
simp only [coMetric_eq_ofRat,ofRat_basis_repr_apply, toTensor_eq_ofRat,
dualRightMetric_eq_ofRat] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| Physlib.RatComplexNum.toComplexNum
(if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 1 = (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 1 ≠ (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
Physlib.RatComplexNum.toComplexNum
(if
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| Physlib.RatComplexNum.toComplexNum
((if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 1 = (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 1 ≠ (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))y:↥(ComponentIdx.prod ↑x).1.DropPairSection| Physlib.RatComplexNum.toComplexNum
(((if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 1 = (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 1 ≠ (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)
conv_lhs =>
enter [2, x] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))| (∑ y,
Physlib.RatComplexNum.toComplexNum
(((if (ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 1 = (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑y).1 1 ≠ (ComponentIdx.prod ↑y).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑y).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑y).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑y).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑y).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑y).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑y 2) = ↑((basisIdxCongr ⋯) (↑y 3)) then 1 else 0)) *
Physlib.RatComplexNum.toComplexNum
(if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [← map_sum Physlib.RatComplexNum.toComplexNum] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))| Physlib.RatComplexNum.toComplexNum
(∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
Physlib.RatComplexNum.toComplexNum
(if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))| Physlib.RatComplexNum.toComplexNum
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
Physlib.RatComplexNum.toComplexNum (if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [← Physlib.RatComplexNum.toComplexNum.map_mul] b:ComponentIdx ![Color.up, Color.downR, Color.downL]x:↥(ComponentIdx.DropPairSection fun i => (basisIdxCongr ⋯) (b (IsReindexing.inv id pauliContrDown._proof_1 i)))| Physlib.RatComplexNum.toComplexNum
(((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0)
rw [← map_sum Physlib.RatComplexNum.toComplexNum b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b] b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
((Tensor.basis ![Color.up, Color.downR, Color.downL]).repr
(ofRat fun b =>
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0))
b
rw [ofRat_basis_repr_apply b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0) b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0)] b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ Physlib.RatComplexNum.toComplexNum
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
Physlib.RatComplexNum.toComplexNum
(if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0)
apply (Function.Injective.eq_iff Physlib.RatComplexNum.toComplexNum_injective).mpr b:ComponentIdx ![Color.up, Color.downR, Color.downL]⊢ (∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0
revert b ⊢ ∀ (b : ComponentIdx ![Color.up, Color.downR, Color.downL]),
(∑ x,
((∑ x_1,
((if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 1 = (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 1 ≠ (ComponentIdx.prod ↑x_1).1 2 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧ (ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := 0, snd := -1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 2 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 0, snd := 1 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 0 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 0 then
{ fst := 1, snd := 0 }
else
if
(ComponentIdx.prod ↑x_1).1 0 = Fin.cast ⋯ 3 ∧
(ComponentIdx.prod ↑x_1).1 1 = Fin.cast ⋯ 1 ∧
(ComponentIdx.prod ↑x_1).1 2 = Fin.cast ⋯ 1 then
{ fst := -1, snd := 0 }
else 0) *
if
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x_1).2 1 = Fin.cast dualRightMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x_1).2 0 = Fin.cast dualRightMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x_1 2) = ↑((basisIdxCongr ⋯) (↑x_1 3)) then 1 else 0) *
if
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 0 ∧
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 1 then
1
else
if
(ComponentIdx.prod ↑x).2 1 = Fin.cast dualLeftMetric_eq_ofRat._proof_2 0 ∧
(ComponentIdx.prod ↑x).2 0 = Fin.cast dualLeftMetric_eq_ofRat._proof_1 1 then
-1
else 0) *
if ↑(↑x 1) = ↑((basisIdxCongr ⋯) (↑x 3)) then 1 else 0) =
if b 0 = Fin.cast ⋯ 0 ∧ b 1 = b 2 then { fst := 1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 1 ∧ b 1 ≠ b 2 then { fst := -1, snd := 0 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 0, snd := 1 }
else
if b 0 = Fin.cast ⋯ 2 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 0 then { fst := 0, snd := -1 }
else
if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 1 ∧ b 2 = Fin.cast ⋯ 1 then { fst := 1, snd := 0 }
else if b 0 = Fin.cast ⋯ 3 ∧ b 1 = Fin.cast ⋯ 0 ∧ b 2 = Fin.cast ⋯ 0 then { fst := -1, snd := 0 } else 0
decide +kernel All goals completed! 🐙Group actions
The tensor pauliCo is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma smul_pauliCo (g : SL(2,ℂ)) : g • pauliCo = pauliCo := by g:SL(2, ℂ)⊢ g • σ_^^ = σ_^^
rw [← permT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliCo._proof_2) (g • (contrT 3 1 2 pauliCo._proof_3) ((prodT η') (toTensor σ))) = σ_^^ g:SL(2, ℂ)⊢ (permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT (g • η')) (g • toTensor σ))) = σ_^^ ← contrT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) (g • (prodT η') (toTensor σ))) = σ_^^ g:SL(2, ℂ)⊢ (permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT (g • η')) (g • toTensor σ))) = σ_^^ ← prodT_equivariant g:SL(2, ℂ)⊢ (permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT (g • η')) (g • toTensor σ))) = σ_^^ g:SL(2, ℂ)⊢ (permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT (g • η')) (g • toTensor σ))) = σ_^^] g:SL(2, ℂ)⊢ (permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT (g • η')) (g • toTensor σ))) = σ_^^
rw [toTensor_smul_eq_self, g:SL(2, ℂ)⊢ (permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT (g • η')) (toTensor σ))) = σ_^^ All goals completed! 🐙 actionT_coMetric g:SL(2, ℂ)⊢ (permT id pauliCo._proof_2) ((contrT 3 1 2 pauliCo._proof_3) ((prodT η') (toTensor σ))) = σ_^^ All goals completed! 🐙] All goals completed! 🐙
The tensor pauliCoDown is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
set_option maxRecDepth 2000 in
lemma smul_pauliCoDown (g : SL(2,ℂ)) : g • pauliCoDown = pauliCoDown := by g:SL(2, ℂ)⊢ g • σ___ = σ___
rw [← permT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
(g • (contrT 3 1 3 pauliCoDown._proof_2) ((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL')) =
σ___ g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT (g • σ_^^)) (g • εR')))) (g • εL'))) =
σ___ ← contrT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2) (g • (prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL')) =
σ___ g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT (g • σ_^^)) (g • εR')))) (g • εL'))) =
σ___ ← prodT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT (g • (contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) (g • εL'))) =
σ___ g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT (g • σ_^^)) (g • εR')))) (g • εL'))) =
σ___
← contrT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) (g • (prodT σ_^^) εR'))) (g • εL'))) =
σ___ g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT (g • σ_^^)) (g • εR')))) (g • εL'))) =
σ___ ← prodT_equivariant g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT (g • σ_^^)) (g • εR')))) (g • εL'))) =
σ___ g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT (g • σ_^^)) (g • εR')))) (g • εL'))) =
σ___] g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT (g • σ_^^)) (g • εR')))) (g • εL'))) =
σ___
rw [smul_pauliCo, g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2)
((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) (g • εR')))) (g • εL'))) =
σ___ All goals completed! 🐙 actionT_dualLeftMetric, g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2) ((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) (g • εR')))) εL')) =
σ___ All goals completed! 🐙 actionT_dualRightMetric g:SL(2, ℂ)⊢ (permT id pauliCoDown._proof_1)
((contrT 3 1 3 pauliCoDown._proof_2) ((prodT ((contrT 3 2 3 pauliCoDown._proof_4) ((prodT σ_^^) εR'))) εL')) =
σ___ All goals completed! 🐙] All goals completed! 🐙
The tensor pauliContrDown is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma smul_pauliContrDown (g : SL(2,ℂ)) : g • pauliContrDown = pauliContrDown := by g:SL(2, ℂ)⊢ g • σ^__ = σ^__
rw [← permT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
(g •
(contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL')) =
σ^__ g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (g • toTensor σ)) (g • εR')))) (g • εL'))) =
σ^__ ← contrT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
(g • (prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL')) =
σ^__ g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (g • toTensor σ)) (g • εR')))) (g • εL'))) =
σ^__ ← prodT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT (g • (contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) (g • εL'))) =
σ^__ g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (g • toTensor σ)) (g • εR')))) (g • εL'))) =
σ^__
← contrT_equivariant, g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) (g • (prodT (toTensor σ)) εR'))) (g • εL'))) =
σ^__ g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (g • toTensor σ)) (g • εR')))) (g • εL'))) =
σ^__ ← prodT_equivariant g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (g • toTensor σ)) (g • εR')))) (g • εL'))) =
σ^__ g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (g • toTensor σ)) (g • εR')))) (g • εL'))) =
σ^__] g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (g • toTensor σ)) (g • εR')))) (g • εL'))) =
σ^__
rw [toTensor_smul_eq_self, g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) (g • εR')))) (g • εL'))) =
σ^__ All goals completed! 🐙 actionT_dualLeftMetric, g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) (g • εR')))) εL')) =
σ^__ All goals completed! 🐙 actionT_dualRightMetric g:SL(2, ℂ)⊢ (permT id pauliContrDown._proof_1)
((contrT 3 1 3 pauliContrDown._proof_2)
((prodT ((contrT 3 2 3 pauliContrDown._proof_4) ((prodT (toTensor σ)) εR'))) εL')) =
σ^__ All goals completed! 🐙] All goals completed! 🐙