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.OfRatMetrics as complex Lorentz tensors
@[expose] public sectionDefinitions.
The metric ηᵢᵢ as a complex Lorentz tensor.
abbrev coMetric : ℂT[.down, .down] := complexLorentzTensor.metricTensor Color.down
The metric ηⁱⁱ as a complex Lorentz tensor.
abbrev contrMetric : ℂT[.up, .up] := complexLorentzTensor.metricTensor Color.up
The metric εᵃᵃ as a complex Lorentz tensor.
abbrev leftMetric : ℂT[.upL, .upL] := complexLorentzTensor.metricTensor Color.upL
The metric ε^{dot a}^{dot a} as a complex Lorentz tensor.
abbrev rightMetric : ℂT[.upR, .upR] := complexLorentzTensor.metricTensor Color.upR
The metric εₐₐ as a complex Lorentz tensor.
abbrev dualLeftMetric : ℂT[.downL, .downL] := complexLorentzTensor.metricTensor Color.downL
The metric ε_{dot a}_{dot a} as a complex Lorentz tensor.
abbrev dualRightMetric : ℂT[.downR, .downR] := complexLorentzTensor.metricTensor Color.downRNotation
The metric ηᵢᵢ as a complex Lorentz tensors.
scoped[complexLorentzTensor] notation "η'" => coMetric
The metric ηⁱⁱ as a complex Lorentz tensors.
scoped[complexLorentzTensor] notation "η" => contrMetric
The metric εᵃᵃ as a complex Lorentz tensors.
scoped[complexLorentzTensor] notation "εL" => leftMetric
The metric ε^{dot a}^{dot a} as a complex Lorentz tensors.
scoped[complexLorentzTensor] notation "εR" => rightMetric
The metric εₐₐ as a complex Lorentz tensors.
scoped[complexLorentzTensor] notation "εL'" => dualLeftMetric
The metric ε_{dot a}_{dot a} as a complex Lorentz tensors.
scoped[complexLorentzTensor] notation "εR'" => dualRightMetricOther forms
fromConstPair
⊢ η' =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • Lorentz.coMetricVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }
rfl All goals completed! 🐙
lemma contrMetric_eq_fromConstPair : η = fromConstPair (S := complexLorentzTensor)
(c1 := .up) (c2 := .up) Lorentz.contrMetric := by ⊢ η = fromConstPair Lorentz.contrMetric
rw [Lorentz.contrMetric ⊢ η =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • Lorentz.contrMetricVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ } ⊢ η =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • Lorentz.contrMetricVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }] ⊢ η =
fromConstPair
{
toFun := fun a =>
have a' := a;
a' • Lorentz.contrMetricVal,
map_add' := ⋯, map_smul' := ⋯, isIntertwining' := ⋯ }
rfl All goals completed! 🐙lemma leftMetric_eq_fromConstPair : εL = fromConstPair Fermion.leftMetric := rfllemma rightMetric_eq_fromConstPair : εR = fromConstPair Fermion.rightMetric := rfllemma dualLeftMetric_eq_fromConstPair : εL' = fromConstPair Fermion.dualLeftMetric := rfllemma dualRightMetric_eq_fromConstPair : εR' = fromConstPair Fermion.dualRightMetric := rflfromPairT
lemma coMetric_eq_fromPairT : η' = fromPairT (Lorentz.coMetricVal) := by ⊢ η' = fromPairT Lorentz.coMetricVal
rw [coMetric_eq_fromConstPair, ⊢ fromConstPair Lorentz.coMetric = fromPairT Lorentz.coMetricVal ⊢ fromPairT (Lorentz.coMetric 1) = fromPairT Lorentz.coMetricVal fromConstPair ⊢ fromPairT (Lorentz.coMetric 1) = fromPairT Lorentz.coMetricVal ⊢ fromPairT (Lorentz.coMetric 1) = fromPairT Lorentz.coMetricVal] ⊢ fromPairT (Lorentz.coMetric 1) = fromPairT Lorentz.coMetricVal
congr 1 e_6 ⊢ Lorentz.coMetric 1 = Lorentz.coMetricVal
exact Lorentz.coMetric_apply_one All goals completed! 🐙
lemma contrMetric_eq_fromPairT : η = fromPairT (Lorentz.contrMetricVal) := by ⊢ η = fromPairT Lorentz.contrMetricVal
rw [contrMetric_eq_fromConstPair, ⊢ fromConstPair Lorentz.contrMetric = fromPairT Lorentz.contrMetricVal ⊢ fromPairT (Lorentz.contrMetric 1) = fromPairT Lorentz.contrMetricVal fromConstPair ⊢ fromPairT (Lorentz.contrMetric 1) = fromPairT Lorentz.contrMetricVal ⊢ fromPairT (Lorentz.contrMetric 1) = fromPairT Lorentz.contrMetricVal] ⊢ fromPairT (Lorentz.contrMetric 1) = fromPairT Lorentz.contrMetricVal
congr 1 e_6 ⊢ Lorentz.contrMetric 1 = Lorentz.contrMetricVal
exact Lorentz.contrMetric_apply_one All goals completed! 🐙
lemma leftMetric_eq_fromPairT : εL = fromPairT (Fermion.leftMetricVal) := by ⊢ εL = fromPairT leftMetricVal
rw [leftMetric_eq_fromConstPair, ⊢ fromConstPair Fermion.leftMetric = fromPairT leftMetricVal ⊢ fromPairT (Fermion.leftMetric 1) = fromPairT leftMetricVal fromConstPair ⊢ fromPairT (Fermion.leftMetric 1) = fromPairT leftMetricVal ⊢ fromPairT (Fermion.leftMetric 1) = fromPairT leftMetricVal] ⊢ fromPairT (Fermion.leftMetric 1) = fromPairT leftMetricVal
congr 1 e_6 ⊢ Fermion.leftMetric 1 = leftMetricVal
exact Fermion.leftMetric_apply_one All goals completed! 🐙
lemma rightMetric_eq_fromPairT : εR = fromPairT (Fermion.rightMetricVal) := by ⊢ εR = fromPairT rightMetricVal
rw [rightMetric_eq_fromConstPair, ⊢ fromConstPair Fermion.rightMetric = fromPairT rightMetricVal ⊢ fromPairT (Fermion.rightMetric 1) = fromPairT rightMetricVal fromConstPair ⊢ fromPairT (Fermion.rightMetric 1) = fromPairT rightMetricVal ⊢ fromPairT (Fermion.rightMetric 1) = fromPairT rightMetricVal] ⊢ fromPairT (Fermion.rightMetric 1) = fromPairT rightMetricVal
congr 1 e_6 ⊢ Fermion.rightMetric 1 = rightMetricVal
exact Fermion.rightMetric_apply_one All goals completed! 🐙
lemma dualLeftMetric_eq_fromPairT : εL' = fromPairT (Fermion.dualLeftMetricVal) := by ⊢ εL' = fromPairT dualLeftMetricVal
rw [dualLeftMetric_eq_fromConstPair, ⊢ fromConstPair Fermion.dualLeftMetric = fromPairT dualLeftMetricVal ⊢ fromPairT (Fermion.dualLeftMetric 1) = fromPairT dualLeftMetricVal fromConstPair ⊢ fromPairT (Fermion.dualLeftMetric 1) = fromPairT dualLeftMetricVal ⊢ fromPairT (Fermion.dualLeftMetric 1) = fromPairT dualLeftMetricVal] ⊢ fromPairT (Fermion.dualLeftMetric 1) = fromPairT dualLeftMetricVal
congr 1 e_6 ⊢ Fermion.dualLeftMetric 1 = dualLeftMetricVal
exact Fermion.dualLeftMetric_apply_one All goals completed! 🐙
lemma dualRightMetric_eq_fromPairT : εR' = fromPairT (Fermion.dualRightMetricVal) := by ⊢ εR' = fromPairT dualRightMetricVal
rw [dualRightMetric_eq_fromConstPair, ⊢ fromConstPair Fermion.dualRightMetric = fromPairT dualRightMetricVal ⊢ fromPairT (Fermion.dualRightMetric 1) = fromPairT dualRightMetricVal fromConstPair ⊢ fromPairT (Fermion.dualRightMetric 1) = fromPairT dualRightMetricVal ⊢ fromPairT (Fermion.dualRightMetric 1) = fromPairT dualRightMetricVal] ⊢ fromPairT (Fermion.dualRightMetric 1) = fromPairT dualRightMetricVal
congr 1 e_6 ⊢ Fermion.dualRightMetric 1 = dualRightMetricVal
exact Fermion.dualRightMetric_apply_one All goals completed! 🐙complexCoBasis etc.
basis
ofRat
lemma coMetric_eq_ofRat : η' = ofRat fun f =>
if f 0 = Fin.cast (by f:ComponentIdx ![Color.down, Color.down]⊢ 4 = repDim (![Color.down, Color.down] 0) rfl All goals completed! 🐙) (0 : Fin 4) ∧ f 1 = Fin.cast (by f:ComponentIdx ![Color.down, Color.down]⊢ 4 = repDim (![Color.down, Color.down] 1) rfl All goals completed! 🐙) (0 : Fin 4) then 1 else
if f 0 = f 1 then - 1 else 0 := by ⊢ η' = ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0
rw [coMetric_eq_basis ⊢ (((((Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 0
| 1 => 0) -
(Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 1
| 1 => 1) -
(Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 2
| 1 => 2) -
(Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 3
| 1 => 3) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ⊢ (((((Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 0
| 1 => 0) -
(Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 1
| 1 => 1) -
(Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 2
| 1 => 2) -
(Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 3
| 1 => 3) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0] ⊢ (((((Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 0
| 1 => 0) -
(Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 1
| 1 => 1) -
(Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 2
| 1 => 2) -
(Tensor.basis ![Color.down, Color.down]) fun x =>
match x with
| 0 => 3
| 1 => 3) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0
conv_lhs =>
rw [basis_eq_ofRat, basis_eq_ofRat, basis_eq_ofRat, basis_eq_ofRat] | (((ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sub, ⊢ ((ofRat
((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ← map_sub, ⊢ (ofRat
(((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ← map_sub ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0] ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0
congr e_6 ⊢ ((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma contrMetric_eq_ofRat : η = ofRat fun f =>
if f 0 = Fin.cast (by f:ComponentIdx ![Color.up, Color.up]⊢ 4 = repDim (![Color.up, Color.up] 0) rfl All goals completed! 🐙) (0 : Fin 4) ∧ f 1 = Fin.cast (by f:ComponentIdx ![Color.up, Color.up]⊢ 4 = repDim (![Color.up, Color.up] 1) rfl All goals completed! 🐙) (0 : Fin 4) then 1 else
if f 0 = f 1 then - 1 else 0 := by ⊢ η = ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0
rw [contrMetric_eq_basis ⊢ (((((Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 0
| 1 => 0) -
(Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 1
| 1 => 1) -
(Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 2
| 1 => 2) -
(Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 3
| 1 => 3) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ⊢ (((((Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 0
| 1 => 0) -
(Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 1
| 1 => 1) -
(Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 2
| 1 => 2) -
(Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 3
| 1 => 3) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0] ⊢ (((((Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 0
| 1 => 0) -
(Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 1
| 1 => 1) -
(Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 2
| 1 => 2) -
(Tensor.basis ![Color.up, Color.up]) fun x =>
match x with
| 0 => 3
| 1 => 3) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0
conv_lhs =>
rw [basis_eq_ofRat, basis_eq_ofRat, basis_eq_ofRat, basis_eq_ofRat] | (((ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sub, ⊢ ((ofRat
((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ← map_sub, ⊢ (ofRat
(((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ← map_sub ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0 ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0] ⊢ ofRat
((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0
congr e_6 ⊢ ((((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 2
| 1 => 2) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 3
| 1 => 3) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f => if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 0 then 1 else if f 0 = f 1 then -1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma leftMetric_eq_ofRat : εL = ofRat fun f =>
if f 0 = Fin.cast (by f:ComponentIdx ![Color.upL, Color.upL]⊢ 2 = repDim (![Color.upL, Color.upL] 0) rfl All goals completed! 🐙) (0 : Fin 2) ∧ f 1 = Fin.cast (by f:ComponentIdx ![Color.upL, Color.upL]⊢ 2 = repDim (![Color.upL, Color.upL] 1) rfl All goals completed! 🐙) (1 : Fin 2) then - 1 else
if f 1 = Fin.cast (by f:ComponentIdx ![Color.upL, Color.upL]⊢ 2 = repDim (![Color.upL, Color.upL] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧ f 0 = Fin.cast (by f:ComponentIdx ![Color.upL, Color.upL]⊢ 2 = repDim (![Color.upL, Color.upL] 0) rfl All goals completed! 🐙) (1 : Fin 2) then
1 else 0 := by ⊢ εL =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0
rw [leftMetric_eq_basis ⊢ ((-(Tensor.basis ![Color.upL, Color.upL]) fun x =>
match x with
| 0 => 0
| 1 => 1) +
(Tensor.basis ![Color.upL, Color.upL]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0 ⊢ ((-(Tensor.basis ![Color.upL, Color.upL]) fun x =>
match x with
| 0 => 0
| 1 => 1) +
(Tensor.basis ![Color.upL, Color.upL]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0] ⊢ ((-(Tensor.basis ![Color.upL, Color.upL]) fun x =>
match x with
| 0 => 0
| 1 => 1) +
(Tensor.basis ![Color.upL, Color.upL]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0
conv_lhs =>
rw [basis_eq_ofRat, basis_eq_ofRat] | (-ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 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) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_neg, ⊢ (ofRat
(-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 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) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0 ⊢ ofRat
((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0 ← map_add ⊢ ofRat
((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0 ⊢ ofRat
((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0] ⊢ ofRat
((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0
congr e_6 ⊢ ((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma dualLeftMetric_eq_ofRat : εL' = ofRat fun f =>
if f 0 = Fin.cast (by f:ComponentIdx ![Color.downL, Color.downL]⊢ 2 = repDim (![Color.downL, Color.downL] 0) rfl All goals completed! 🐙) (0 : Fin 2) ∧ f 1 = Fin.cast (by f:ComponentIdx ![Color.downL, Color.downL]⊢ 2 = repDim (![Color.downL, Color.downL] 1) rfl All goals completed! 🐙) (1 : Fin 2) then 1 else
if f 1 = Fin.cast (by f:ComponentIdx ![Color.downL, Color.downL]⊢ 2 = repDim (![Color.downL, Color.downL] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧ f 0 = Fin.cast (by f:ComponentIdx ![Color.downL, Color.downL]⊢ 2 = repDim (![Color.downL, Color.downL] 0) rfl All goals completed! 🐙) (1 : Fin 2) then
- 1 else 0 := by ⊢ εL' =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0
rw [dualLeftMetric_eq_basis ⊢ (((Tensor.basis ![Color.downL, Color.downL]) fun x =>
match x with
| 0 => 0
| 1 => 1) -
(Tensor.basis ![Color.downL, Color.downL]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0 ⊢ (((Tensor.basis ![Color.downL, Color.downL]) fun x =>
match x with
| 0 => 0
| 1 => 1) -
(Tensor.basis ![Color.downL, Color.downL]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0] ⊢ (((Tensor.basis ![Color.downL, Color.downL]) fun x =>
match x with
| 0 => 0
| 1 => 1) -
(Tensor.basis ![Color.downL, Color.downL]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0
conv_lhs =>
rw [basis_eq_ofRat, basis_eq_ofRat] | (ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 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) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sub ⊢ ofRat
((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0 ⊢ ofRat
((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0] ⊢ ofRat
((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0
congr e_6 ⊢ ((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma rightMetric_eq_ofRat : εR = ofRat fun f =>
if f 0 = Fin.cast (by f:ComponentIdx ![Color.upR, Color.upR]⊢ 2 = repDim (![Color.upR, Color.upR] 0) rfl All goals completed! 🐙) (0 : Fin 2) ∧ f 1 = Fin.cast (by f:ComponentIdx ![Color.upR, Color.upR]⊢ 2 = repDim (![Color.upR, Color.upR] 1) rfl All goals completed! 🐙) (1 : Fin 2) then - 1 else
if f 1 = Fin.cast (by f:ComponentIdx ![Color.upR, Color.upR]⊢ 2 = repDim (![Color.upR, Color.upR] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧ f 0 = Fin.cast (by f:ComponentIdx ![Color.upR, Color.upR]⊢ 2 = repDim (![Color.upR, Color.upR] 0) rfl All goals completed! 🐙) (1 : Fin 2) then 1 else 0 := by ⊢ εR =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0
rw [rightMetric_eq_basis ⊢ ((-(Tensor.basis ![Color.upR, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1) +
(Tensor.basis ![Color.upR, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0 ⊢ ((-(Tensor.basis ![Color.upR, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1) +
(Tensor.basis ![Color.upR, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0] ⊢ ((-(Tensor.basis ![Color.upR, Color.upR]) fun x =>
match x with
| 0 => 0
| 1 => 1) +
(Tensor.basis ![Color.upR, Color.upR]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0
conv_lhs =>
rw [basis_eq_ofRat, basis_eq_ofRat] | (-ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 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) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_neg, ⊢ (ofRat
(-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 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) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0 ⊢ ofRat
((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0 ← map_add ⊢ ofRat
((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0 ⊢ ofRat
((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0] ⊢ ofRat
((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0
congr e_6 ⊢ ((-fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) +
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then -1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then 1 else 0
with_unfolding_all decide All goals completed! 🐙
lemma dualRightMetric_eq_ofRat : εR' = ofRat fun f =>
if f 0 = Fin.cast (by f:ComponentIdx ![Color.downR, Color.downR]⊢ 2 = repDim (![Color.downR, Color.downR] 0) rfl All goals completed! 🐙) (0 : Fin 2) ∧ f 1 = Fin.cast (by f:ComponentIdx ![Color.downR, Color.downR]⊢ 2 = repDim (![Color.downR, Color.downR] 1) rfl All goals completed! 🐙) (1 : Fin 2) then 1 else
if f 1 = Fin.cast (by f:ComponentIdx ![Color.downR, Color.downR]⊢ 2 = repDim (![Color.downR, Color.downR] 1) rfl All goals completed! 🐙) (0 : Fin 2) ∧ f 0 = Fin.cast (by f:ComponentIdx ![Color.downR, Color.downR]⊢ 2 = repDim (![Color.downR, Color.downR] 0) rfl All goals completed! 🐙) (1 : Fin 2) then
- 1 else 0 := by ⊢ εR' =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0
rw [dualRightMetric_eq_basis ⊢ (((Tensor.basis ![Color.downR, Color.downR]) fun x =>
match x with
| 0 => 0
| 1 => 1) -
(Tensor.basis ![Color.downR, Color.downR]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0 ⊢ (((Tensor.basis ![Color.downR, Color.downR]) fun x =>
match x with
| 0 => 0
| 1 => 1) -
(Tensor.basis ![Color.downR, Color.downR]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0] ⊢ (((Tensor.basis ![Color.downR, Color.downR]) fun x =>
match x with
| 0 => 0
| 1 => 1) -
(Tensor.basis ![Color.downR, Color.downR]) fun x =>
match x with
| 0 => 1
| 1 => 0) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0
conv_lhs =>
rw [basis_eq_ofRat, basis_eq_ofRat] | (ofRat fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 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) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }
rw [← map_sub ⊢ ofRat
((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0 ⊢ ofRat
((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0] ⊢ ofRat
((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
ofRat fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0
congr e_6 ⊢ ((fun b' =>
if
(fun x =>
match x with
| 0 => 0
| 1 => 1) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) -
fun b' =>
if
(fun x =>
match x with
| 0 => 1
| 1 => 0) =
b' then
{ fst := 1, snd := 0 }
else { fst := 0, snd := 0 }) =
fun f =>
if f 0 = Fin.cast ⋯ 0 ∧ f 1 = Fin.cast ⋯ 1 then 1 else if f 1 = Fin.cast ⋯ 0 ∧ f 0 = Fin.cast ⋯ 1 then -1 else 0
with_unfolding_all decide All goals completed! 🐙Group actions
The tensor coMetric is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_coMetric (g : SL(2,ℂ)) : g • η' = η' := by g:SL(2, ℂ)⊢ g • η' = η'
rw [metricTensor_invariant g:SL(2, ℂ)⊢ metricTensor Color.down = η' All goals completed! 🐙] All goals completed! 🐙
The tensor contrMetric is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_contrMetric (g : SL(2,ℂ)) : g • η = η := by g:SL(2, ℂ)⊢ g • η = η
rw [metricTensor_invariant g:SL(2, ℂ)⊢ metricTensor Color.up = η All goals completed! 🐙] All goals completed! 🐙
The tensor leftMetric is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_leftMetric (g : SL(2,ℂ)) : g • εL = εL := by g:SL(2, ℂ)⊢ g • εL = εL
rw [metricTensor_invariant g:SL(2, ℂ)⊢ metricTensor Color.upL = εL All goals completed! 🐙] All goals completed! 🐙
The tensor rightMetric is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_rightMetric (g : SL(2,ℂ)) : g • εR = εR := by g:SL(2, ℂ)⊢ g • εR = εR
rw [metricTensor_invariant g:SL(2, ℂ)⊢ metricTensor Color.upR = εR All goals completed! 🐙] All goals completed! 🐙
The tensor dualLeftMetric is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_dualLeftMetric (g : SL(2,ℂ)) : g • εL' = εL' := by g:SL(2, ℂ)⊢ g • εL' = εL'
rw [metricTensor_invariant g:SL(2, ℂ)⊢ metricTensor Color.downL = εL' All goals completed! 🐙] All goals completed! 🐙
The tensor dualRightMetric is invariant under the action of SL(2,ℂ).
set_option backward.isDefEq.respectTransparency false in
lemma actionT_dualRightMetric (g : SL(2,ℂ)) : g • εR' = εR' := by g:SL(2, ℂ)⊢ g • εR' = εR'
rw [metricTensor_invariant g:SL(2, ℂ)⊢ metricTensor Color.downR = εR' All goals completed! 🐙] All goals completed! 🐙