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.RealTensor.Vector.Pre.Basic
public import Mathlib.LinearAlgebra.TensorProduct.MatrixTensor products of two real Lorentz vectors
@[expose] public section
Equivalence of ContrMod ⊗ ContrMod to (1 + d) x (1 + d) real matrices.
def contrContrToMatrixRe {d : ℕ} : (ContrMod d ⊗[ℝ] ContrMod d) ≃ₗ[ℝ]
Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ :=
(Basis.tensorProduct (contrBasis d) (contrBasis d)).repr ≪≫ₗ
Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)) ≪≫ₗ
LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)
Expanding contrContrToMatrixRe in terms of the standard basis.
d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((contrBasis d).tensorProduct (contrBasis d)) (x, y) =
∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (contrBasis d) j
refine Finset.sum_congr rfl (fun i _ => Finset.sum_congr rfl (fun j _ => ?_)) d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
((contrBasis d).tensorProduct (contrBasis d)) (i, j) =
M i j • (contrBasis d) i ⊗ₜ[ℝ] (contrBasis d) j
erw [Basis.tensorProduct_apply (contrBasis d) (contrBasis d) i j d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
(contrBasis d) i ⊗ₜ[ℝ] (contrBasis d) j =
M i j • (contrBasis d) i ⊗ₜ[ℝ] (contrBasis d) j] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
(contrBasis d) i ⊗ₜ[ℝ] (contrBasis d) j =
M i j • (contrBasis d) i ⊗ₜ[ℝ] (contrBasis d) j
rfl All goals completed! 🐙
· d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ simp All goals completed! 🐙
Equivalence of CoMod ⊗ CoMod to (1 + d) x (1 + d) real matrices.
def coCoToMatrixRe {d : ℕ} : (CoMod d ⊗[ℝ] CoMod d) ≃ₗ[ℝ]
Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ :=
(Basis.tensorProduct (coBasis d) (coBasis d)).repr ≪≫ₗ
Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)) ≪≫ₗ
LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)
Expanding coCoToMatrixRe in terms of the standard basis.
lemma coCoToMatrixRe_symm_expand_tmul (M : Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ) :
coCoToMatrixRe.symm M = ∑ i, ∑ j, M i j • (coBasis d i ⊗ₜ[ℝ] coBasis d j) := by d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ coCoToMatrixRe.symm M = ∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) j
simp only [coCoToMatrixRe, LinearEquiv.trans_symm, LinearEquiv.trans_apply, Basis.repr_symm_apply] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearCombination ℝ ⇑((coBasis d).tensorProduct (coBasis d)))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M)) =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) j
rw [Finsupp.linearCombination_apply_of_mem_supported ℝ (s := Finset.univ) d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((coBasis d).tensorProduct (coBasis d)) i =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) jd:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((coBasis d).tensorProduct (coBasis d)) i =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) jd:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((coBasis d).tensorProduct (coBasis d)) i =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) jd:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ
· d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((coBasis d).tensorProduct (coBasis d)) i =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) j rw [Fintype.sum_prod_type d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((coBasis d).tensorProduct (coBasis d)) (x, y) =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) j d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((coBasis d).tensorProduct (coBasis d)) (x, y) =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) j] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((coBasis d).tensorProduct (coBasis d)) (x, y) =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) j
refine Finset.sum_congr rfl (fun i _ => Finset.sum_congr rfl (fun j _ => ?_)) d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
((coBasis d).tensorProduct (coBasis d)) (i, j) =
M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) j
erw [Basis.tensorProduct_apply (coBasis d) (coBasis d) i j d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
(coBasis d) i ⊗ₜ[ℝ] (coBasis d) j =
M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) j] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
(coBasis d) i ⊗ₜ[ℝ] (coBasis d) j =
M i j • (coBasis d) i ⊗ₜ[ℝ] (coBasis d) j
rfl All goals completed! 🐙
· d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ simp All goals completed! 🐙
Equivalence of ContrMod d ⊗ CoMod d to (1 + d) x (1 + d) real matrices.
def contrCoToMatrixRe {d : ℕ} : (ContrMod d ⊗[ℝ] CoMod d) ≃ₗ[ℝ]
Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ :=
(Basis.tensorProduct (contrBasis d) (coBasis d)).repr ≪≫ₗ
Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)) ≪≫ₗ
LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)
Expansion of (coBasis d) (coBasis d) in terms of the standard basis.
lemma contrCoToMatrixRe_symm_expand_tmul (M : Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ) :
contrCoToMatrixRe.symm M = ∑ i, ∑ j, M i j • (contrBasis d i ⊗ₜ[ℝ] coBasis d j) := by d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ contrCoToMatrixRe.symm M = ∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j
simp only [contrCoToMatrixRe, LinearEquiv.trans_symm,
LinearEquiv.trans_apply, Basis.repr_symm_apply] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearCombination ℝ ⇑((contrBasis d).tensorProduct (coBasis d)))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M)) =
∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j
rw [Finsupp.linearCombination_apply_of_mem_supported ℝ (s := Finset.univ) d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((contrBasis d).tensorProduct (coBasis d)) i =
∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) jd:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((contrBasis d).tensorProduct (coBasis d)) i =
∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) jd:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((contrBasis d).tensorProduct (coBasis d)) i =
∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) jd:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ
· d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((contrBasis d).tensorProduct (coBasis d)) i =
∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j rw [Fintype.sum_prod_type d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((contrBasis d).tensorProduct (coBasis d)) (x, y) =
∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((contrBasis d).tensorProduct (coBasis d)) (x, y) =
∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((contrBasis d).tensorProduct (coBasis d)) (x, y) =
∑ i, ∑ j, M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j
refine Finset.sum_congr rfl (fun i _ => Finset.sum_congr rfl (fun j _ => ?_)) d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
((contrBasis d).tensorProduct (coBasis d)) (i, j) =
M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j
erw [Basis.tensorProduct_apply _ _ i j d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
(contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j =
M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
(contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j =
M i j • (contrBasis d) i ⊗ₜ[ℝ] (coBasis d) j
rfl All goals completed! 🐙
· d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ simp All goals completed! 🐙
Equivalence of CoMod d ⊗ ContrMod d to (1 + d) x (1 + d) real matrices.
def coContrToMatrixRe : (CoMod d ⊗[ℝ] ContrMod d) ≃ₗ[ℝ]
Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ :=
(Basis.tensorProduct (coBasis d) (contrBasis d)).repr ≪≫ₗ
Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)) ≪≫ₗ
LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)
Expansion of coContrToMatrixRe in terms of the standard basis.
lemma coContrToMatrixRe_symm_expand_tmul (M : Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ) :
coContrToMatrixRe.symm M = ∑ i, ∑ j, M i j • (coBasis d i ⊗ₜ[ℝ] contrBasis d j) := by d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ coContrToMatrixRe.symm M = ∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j
simp only [coContrToMatrixRe, LinearEquiv.trans_symm, LinearEquiv.trans_apply,
Basis.repr_symm_apply] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearCombination ℝ ⇑((coBasis d).tensorProduct (contrBasis d)))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M)) =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j
rw [Finsupp.linearCombination_apply_of_mem_supported ℝ (s := Finset.univ) d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((coBasis d).tensorProduct (contrBasis d)) i =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) jd:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((coBasis d).tensorProduct (contrBasis d)) i =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) jd:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((coBasis d).tensorProduct (contrBasis d)) i =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) jd:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ
· d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ i,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
i •
((coBasis d).tensorProduct (contrBasis d)) i =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j rw [Fintype.sum_prod_type d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((coBasis d).tensorProduct (contrBasis d)) (x, y) =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((coBasis d).tensorProduct (contrBasis d)) (x, y) =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ ∑ x,
∑ y,
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(x, y) •
((coBasis d).tensorProduct (contrBasis d)) (x, y) =
∑ i, ∑ j, M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j
refine Finset.sum_congr rfl (fun i _ => Finset.sum_congr rfl (fun j _ => ?_)) d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
((coBasis d).tensorProduct (contrBasis d)) (i, j) =
M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j
erw [Basis.tensorProduct_apply _ _ i j d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
(coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j =
M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j] d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝi:Fin 1 ⊕ Fin dx✝¹:i ∈ Finset.univj:Fin 1 ⊕ Fin dx✝:j ∈ Finset.univ⊢ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M))
(i, j) •
(coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j =
M i j • (coBasis d) i ⊗ₜ[ℝ] (contrBasis d) j
rfl All goals completed! 🐙
· d:ℕM:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d))).symm
((LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)).symm M) ∈
Finsupp.supported ℝ ℝ ↑Finset.univ simp All goals completed! 🐙Group actions
set_option backward.isDefEq.respectTransparency false in
lemma contrContrToMatrixRe_ρ {d : ℕ} (v : (ContrMod d ⊗[ℝ] ContrMod d)) (M : LorentzGroup d) :
contrContrToMatrixRe (TensorProduct.map (ContrMod.rep M) (ContrMod.rep M) v) =
M.1 * contrContrToMatrixRe v * Mᵀ := by d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ contrContrToMatrixRe ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v) = ↑M * contrContrToMatrixRe v * (↑M)ᵀ
nth_rewrite 1 [contrContrToMatrixRe] d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (((contrBasis d).tensorProduct (contrBasis d)).repr ≪≫ₗ
Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)) ≪≫ₗ
LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v) =
↑M * contrContrToMatrixRe v * (↑M)ᵀ
simp only [LinearEquiv.trans_apply] d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v))) =
↑M * contrContrToMatrixRe v * (↑M)ᵀ
trans (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)) ((LinearMap.toMatrix
((contrBasis d).tensorProduct (contrBasis d))
((contrBasis d).tensorProduct (contrBasis d))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)))
*ᵥ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v))) d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v))) =
(LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((contrBasis d).tensorProduct (contrBasis d)) ((contrBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v))d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((contrBasis d).tensorProduct (contrBasis d)) ((contrBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v)) =
↑M * contrContrToMatrixRe v * (↑M)ᵀ
· d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v))) =
(LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((contrBasis d).tensorProduct (contrBasis d)) ((contrBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v)) apply congrArg d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v)) =
(LinearMap.toMatrix ((contrBasis d).tensorProduct (contrBasis d)) ((contrBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v)
have h1 := (LinearMap.toMatrix_mulVec_repr ((contrBasis d).tensorProduct (contrBasis d))
((contrBasis d).tensorProduct (contrBasis d))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v) d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((contrBasis d).tensorProduct (contrBasis d)) ((contrBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) *ᵥ
⇑(((contrBasis d).tensorProduct (contrBasis d)).repr v) =
⇑(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v)) =
(LinearMap.toMatrix ((contrBasis d).tensorProduct (contrBasis d)) ((contrBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v)
erw [h1 d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((contrBasis d).tensorProduct (contrBasis d)) ((contrBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) *ᵥ
⇑(((contrBasis d).tensorProduct (contrBasis d)).repr v) =
⇑(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v)) =
⇑(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v))] d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((contrBasis d).tensorProduct (contrBasis d)) ((contrBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) *ᵥ
⇑(((contrBasis d).tensorProduct (contrBasis d)).repr v) =
⇑(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v)) =
⇑(((contrBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) v))
rfl All goals completed! 🐙
rw [TensorProduct.toMatrix_map d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v)) =
↑M * contrContrToMatrixRe v * (↑M)ᵀ d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v)) =
↑M * contrContrToMatrixRe v * (↑M)ᵀ] d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v)) =
↑M * contrContrToMatrixRe v * (↑M)ᵀ
funext i j d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (contrBasis d)).repr v))
i j =
(↑M * contrContrToMatrixRe v * (↑M)ᵀ) i j
change ∑ k, ((kroneckerMap (fun x1 x2 => x1 * x2)
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) k)
* contrContrToMatrixRe v k.1 k.2) = _ d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ k,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) k *
contrContrToMatrixRe v k.1 k.2 =
(↑M * contrContrToMatrixRe v * (↑M)ᵀ) i j
rw [Fintype.sum_prod_type d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) (x, y) *
contrContrToMatrixRe v (x, y).1 (x, y).2 =
(↑M * contrContrToMatrixRe v * (↑M)ᵀ) i j d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) (x, y) *
contrContrToMatrixRe v (x, y).1 (x, y).2 =
(↑M * contrContrToMatrixRe v * (↑M)ᵀ) i j] d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) (x, y) *
contrContrToMatrixRe v (x, y).1 (x, y).2 =
(↑M * contrContrToMatrixRe v * (↑M)ᵀ) i j
simp_rw [ d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) (x, x_1) *
contrContrToMatrixRe v x x_1 =
(↑M * contrContrToMatrixRe v * (↑M)ᵀ) i jkroneckerMap_apply, d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x_1 *
contrContrToMatrixRe v x x_1 =
(↑M * contrContrToMatrixRe v * (↑M)ᵀ) i j Matrix.mul_apply, d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x_1 *
contrContrToMatrixRe v x x_1 =
∑ x, (∑ j, ↑M i j * contrContrToMatrixRe v j x) * (↑M)ᵀ x j Matrix.transpose_apply d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x_1 *
contrContrToMatrixRe v x x_1 =
∑ x, (∑ j, ↑M i j * contrContrToMatrixRe v j x) * ↑M j x]
conv_rhs =>
enter [2, x] d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d| (∑ j, ↑M i j * contrContrToMatrixRe v j x) * ↑M j x
rw [Finset.sum_mul] d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d| ∑ i_1, ↑M i i_1 * contrContrToMatrixRe v i_1 x * ↑M j x
rw [Finset.sum_comm d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j y *
contrContrToMatrixRe v x y =
∑ x, ∑ i_1, ↑M i i_1 * contrContrToMatrixRe v i_1 x * ↑M j x d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j y *
contrContrToMatrixRe v x y =
∑ x, ∑ i_1, ↑M i i_1 * contrContrToMatrixRe v i_1 x * ↑M j x] d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j y *
contrContrToMatrixRe v x y =
∑ x, ∑ i_1, ↑M i i_1 * contrContrToMatrixRe v i_1 x * ↑M j x
congr e_f d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ (fun y =>
∑ x,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j y *
contrContrToMatrixRe v x y) =
fun x => ∑ i_1, ↑M i i_1 * contrContrToMatrixRe v i_1 x * ↑M j x
funext x e_f d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d⊢ ∑ x_1,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x_1 *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x *
contrContrToMatrixRe v x_1 x =
∑ i_1, ↑M i i_1 * contrContrToMatrixRe v i_1 x * ↑M j x
congr e_f.e_f d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d⊢ (fun x_1 =>
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x_1 *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x *
contrContrToMatrixRe v x_1 x) =
fun i_1 => ↑M i i_1 * contrContrToMatrixRe v i_1 x * ↑M j x
funext x1 e_f.e_f d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin dx1:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x1 *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x *
contrContrToMatrixRe v x1 x =
↑M i x1 * contrContrToMatrixRe v x1 x * ↑M j x
simp only [contrBasis_ρ_apply] e_f.e_f d:ℕv:ContrMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin dx1:Fin 1 ⊕ Fin d⊢ ↑M i x1 * ↑M j x * contrContrToMatrixRe v x1 x = ↑M i x1 * contrContrToMatrixRe v x1 x * ↑M j x
ring All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
lemma coCoToMatrixRe_ρ {d : ℕ} (v : (CoMod d ⊗[ℝ] CoMod d)) (M : LorentzGroup d) :
coCoToMatrixRe (TensorProduct.map (CoMod.rep M) (CoMod.rep M) v) =
M.1⁻¹ᵀ * coCoToMatrixRe v * M⁻¹ := by d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v) = (↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹
nth_rewrite 1 [coCoToMatrixRe] d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (((coBasis d).tensorProduct (coBasis d)).repr ≪≫ₗ
Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)) ≪≫ₗ
LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v) =
(↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹
simp only [LinearEquiv.trans_apply] d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v))) =
(↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹
trans (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)) ((LinearMap.toMatrix
((coBasis d).tensorProduct (coBasis d))
((coBasis d).tensorProduct (coBasis d))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M))
*ᵥ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v)))) d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v))) =
(LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((coBasis d).tensorProduct (coBasis d)) ((coBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v))d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((coBasis d).tensorProduct (coBasis d)) ((coBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v)) =
(↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹
· d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v))) =
(LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((coBasis d).tensorProduct (coBasis d)) ((coBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v)) apply congrArg d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v)) =
(LinearMap.toMatrix ((coBasis d).tensorProduct (coBasis d)) ((coBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v)
have h1 := (LinearMap.toMatrix_mulVec_repr ((coBasis d).tensorProduct (coBasis d))
((coBasis d).tensorProduct (coBasis d))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v) d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((coBasis d).tensorProduct (coBasis d)) ((coBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M)) *ᵥ
⇑(((coBasis d).tensorProduct (coBasis d)).repr v) =
⇑(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v)) =
(LinearMap.toMatrix ((coBasis d).tensorProduct (coBasis d)) ((coBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v)
erw [h1 d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((coBasis d).tensorProduct (coBasis d)) ((coBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M)) *ᵥ
⇑(((coBasis d).tensorProduct (coBasis d)).repr v) =
⇑(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v)) =
⇑(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v))] d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((coBasis d).tensorProduct (coBasis d)) ((coBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (CoMod.rep M) (CoMod.rep M)) *ᵥ
⇑(((coBasis d).tensorProduct (coBasis d)).repr v) =
⇑(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v)) =
⇑(((coBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) v))
rfl All goals completed! 🐙
rw [TensorProduct.toMatrix_map d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v)) =
(↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹ d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v)) =
(↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹] d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v)) =
(↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹
funext i j d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (coBasis d)).repr v))
i j =
((↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹) i j
change ∑ k, ((kroneckerMap (fun x1 x2 => x1 * x2)
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) k)
* coCoToMatrixRe v k.1 k.2) = _ d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ k,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) k *
coCoToMatrixRe v k.1 k.2 =
((↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹) i j
rw [Fintype.sum_prod_type d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) (x, y) *
coCoToMatrixRe v (x, y).1 (x, y).2 =
((↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹) i j d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) (x, y) *
coCoToMatrixRe v (x, y).1 (x, y).2 =
((↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹) i j] d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) (x, y) *
coCoToMatrixRe v (x, y).1 (x, y).2 =
((↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹) i j
simp_rw [ d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) (x, x_1) *
coCoToMatrixRe v x x_1 =
((↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹) i jkroneckerMap_apply, d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x_1 *
coCoToMatrixRe v x x_1 =
((↑M)⁻¹ᵀ * coCoToMatrixRe v * ↑M⁻¹) i j Matrix.mul_apply, d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x_1 *
coCoToMatrixRe v x x_1 =
∑ x, (∑ j, (↑M)⁻¹ᵀ i j * coCoToMatrixRe v j x) * ↑M⁻¹ x j Matrix.transpose_apply d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x_1 *
coCoToMatrixRe v x x_1 =
∑ x, (∑ x_1, (↑M)⁻¹ x_1 i * coCoToMatrixRe v x_1 x) * ↑M⁻¹ x j]
conv_rhs =>
enter [2, x] d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d| (∑ x_1, (↑M)⁻¹ x_1 i * coCoToMatrixRe v x_1 x) * ↑M⁻¹ x j
rw [Finset.sum_mul] d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d| ∑ i_1, (↑M)⁻¹ i_1 i * coCoToMatrixRe v i_1 x * ↑M⁻¹ x j
rw [Finset.sum_comm d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j y *
coCoToMatrixRe v x y =
∑ x, ∑ i_1, (↑M)⁻¹ i_1 i * coCoToMatrixRe v i_1 x * ↑M⁻¹ x j d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j y *
coCoToMatrixRe v x y =
∑ x, ∑ i_1, (↑M)⁻¹ i_1 i * coCoToMatrixRe v i_1 x * ↑M⁻¹ x j] d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j y *
coCoToMatrixRe v x y =
∑ x, ∑ i_1, (↑M)⁻¹ i_1 i * coCoToMatrixRe v i_1 x * ↑M⁻¹ x j
congr e_f d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ (fun y =>
∑ x,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j y *
coCoToMatrixRe v x y) =
fun x => ∑ i_1, (↑M)⁻¹ i_1 i * coCoToMatrixRe v i_1 x * ↑M⁻¹ x j
funext x e_f d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d⊢ ∑ x_1,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x_1 *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x *
coCoToMatrixRe v x_1 x =
∑ i_1, (↑M)⁻¹ i_1 i * coCoToMatrixRe v i_1 x * ↑M⁻¹ x j
congr e_f.e_f d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d⊢ (fun x_1 =>
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x_1 *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x *
coCoToMatrixRe v x_1 x) =
fun i_1 => (↑M)⁻¹ i_1 i * coCoToMatrixRe v i_1 x * ↑M⁻¹ x j
funext x1 e_f.e_f d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin dx1:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x1 *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x *
coCoToMatrixRe v x1 x =
(↑M)⁻¹ x1 i * coCoToMatrixRe v x1 x * ↑M⁻¹ x j
simp only [coBasis_ρ_apply, ← LorentzGroup.coe_inv, transpose_apply] e_f.e_f d:ℕv:CoMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin dx1:Fin 1 ⊕ Fin d⊢ ↑M⁻¹ x1 i * ↑M⁻¹ x j * coCoToMatrixRe v x1 x = ↑M⁻¹ x1 i * coCoToMatrixRe v x1 x * ↑M⁻¹ x j
ring All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
lemma contrCoToMatrixRe_ρ {d : ℕ} (v : (ContrMod d ⊗[ℝ] CoMod d)) (M : LorentzGroup d) :
contrCoToMatrixRe (TensorProduct.map (ContrMod.rep M) (CoMod.rep M) v) =
M.1 * contrCoToMatrixRe v * M.1⁻¹ := by d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ contrCoToMatrixRe ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v) = ↑M * contrCoToMatrixRe v * (↑M)⁻¹
nth_rewrite 1 [contrCoToMatrixRe] d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (((contrBasis d).tensorProduct (coBasis d)).repr ≪≫ₗ
Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)) ≪≫ₗ
LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v) =
↑M * contrCoToMatrixRe v * (↑M)⁻¹
simp only [LinearEquiv.trans_apply] d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v))) =
↑M * contrCoToMatrixRe v * (↑M)⁻¹
trans (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)) ((LinearMap.toMatrix
((contrBasis d).tensorProduct (coBasis d))
((contrBasis d).tensorProduct (coBasis d))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M))
*ᵥ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v)))) d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v))) =
(LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((contrBasis d).tensorProduct (coBasis d)) ((contrBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v))d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((contrBasis d).tensorProduct (coBasis d)) ((contrBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v)) =
↑M * contrCoToMatrixRe v * (↑M)⁻¹
· d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v))) =
(LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((contrBasis d).tensorProduct (coBasis d)) ((contrBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v)) apply congrArg d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v)) =
(LinearMap.toMatrix ((contrBasis d).tensorProduct (coBasis d)) ((contrBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v)
have h1 := (LinearMap.toMatrix_mulVec_repr ((contrBasis d).tensorProduct (coBasis d))
((contrBasis d).tensorProduct (coBasis d))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v) d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((contrBasis d).tensorProduct (coBasis d)) ((contrBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) *ᵥ
⇑(((contrBasis d).tensorProduct (coBasis d)).repr v) =
⇑(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v)) =
(LinearMap.toMatrix ((contrBasis d).tensorProduct (coBasis d)) ((contrBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v)
erw [h1 d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((contrBasis d).tensorProduct (coBasis d)) ((contrBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) *ᵥ
⇑(((contrBasis d).tensorProduct (coBasis d)).repr v) =
⇑(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v)) =
⇑(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v))] d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((contrBasis d).tensorProduct (coBasis d)) ((contrBasis d).tensorProduct (coBasis d)))
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) *ᵥ
⇑(((contrBasis d).tensorProduct (coBasis d)).repr v) =
⇑(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v)) =
⇑(((contrBasis d).tensorProduct (coBasis d)).repr ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) v))
rfl All goals completed! 🐙
rw [TensorProduct.toMatrix_map d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v)) =
↑M * contrCoToMatrixRe v * (↑M)⁻¹ d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v)) =
↑M * contrCoToMatrixRe v * (↑M)⁻¹] d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v)) =
↑M * contrCoToMatrixRe v * (↑M)⁻¹
funext i j d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((contrBasis d).tensorProduct (coBasis d)).repr v))
i j =
(↑M * contrCoToMatrixRe v * (↑M)⁻¹) i j
change ∑ k, ((kroneckerMap (fun x1 x2 => x1 * x2)
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) k)
* contrCoToMatrixRe v k.1 k.2) = _ d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ k,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) k *
contrCoToMatrixRe v k.1 k.2 =
(↑M * contrCoToMatrixRe v * (↑M)⁻¹) i j
rw [Fintype.sum_prod_type d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) (x, y) *
contrCoToMatrixRe v (x, y).1 (x, y).2 =
(↑M * contrCoToMatrixRe v * (↑M)⁻¹) i j d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) (x, y) *
contrCoToMatrixRe v (x, y).1 (x, y).2 =
(↑M * contrCoToMatrixRe v * (↑M)⁻¹) i j] d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) (x, y) *
contrCoToMatrixRe v (x, y).1 (x, y).2 =
(↑M * contrCoToMatrixRe v * (↑M)⁻¹) i j
simp_rw [ d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M))
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M)) (i, j) (x, x_1) *
contrCoToMatrixRe v x x_1 =
(↑M * contrCoToMatrixRe v * (↑M)⁻¹) i jkroneckerMap_apply, d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x_1 *
contrCoToMatrixRe v x x_1 =
(↑M * contrCoToMatrixRe v * (↑M)⁻¹) i j Matrix.mul_apply d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x_1 *
contrCoToMatrixRe v x x_1 =
∑ x, (∑ j, ↑M i j * contrCoToMatrixRe v j x) * (↑M)⁻¹ x j]
conv_rhs =>
enter [2, x] d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d| (∑ j, ↑M i j * contrCoToMatrixRe v j x) * (↑M)⁻¹ x j
rw [Finset.sum_mul] d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d| ∑ i_1, ↑M i i_1 * contrCoToMatrixRe v i_1 x * (↑M)⁻¹ x j
rw [Finset.sum_comm d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j y *
contrCoToMatrixRe v x y =
∑ x, ∑ i_1, ↑M i i_1 * contrCoToMatrixRe v i_1 x * (↑M)⁻¹ x j d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j y *
contrCoToMatrixRe v x y =
∑ x, ∑ i_1, ↑M i i_1 * contrCoToMatrixRe v i_1 x * (↑M)⁻¹ x j] d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j y *
contrCoToMatrixRe v x y =
∑ x, ∑ i_1, ↑M i i_1 * contrCoToMatrixRe v i_1 x * (↑M)⁻¹ x j
congr e_f d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ (fun y =>
∑ x,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j y *
contrCoToMatrixRe v x y) =
fun x => ∑ i_1, ↑M i i_1 * contrCoToMatrixRe v i_1 x * (↑M)⁻¹ x j
funext x e_f d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d⊢ ∑ x_1,
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x_1 *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x *
contrCoToMatrixRe v x_1 x =
∑ i_1, ↑M i i_1 * contrCoToMatrixRe v i_1 x * (↑M)⁻¹ x j
congr e_f.e_f d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d⊢ (fun x_1 =>
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x_1 *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x *
contrCoToMatrixRe v x_1 x) =
fun i_1 => ↑M i i_1 * contrCoToMatrixRe v i_1 x * (↑M)⁻¹ x j
funext x1 e_f.e_f d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin dx1:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) i x1 *
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) j x *
contrCoToMatrixRe v x1 x =
↑M i x1 * contrCoToMatrixRe v x1 x * (↑M)⁻¹ x j
simp only [contrBasis_ρ_apply, coBasis_ρ_apply, transpose_apply] e_f.e_f d:ℕv:ContrMod d ⊗[ℝ] CoMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin dx1:Fin 1 ⊕ Fin d⊢ ↑M i x1 * (↑M)⁻¹ x j * contrCoToMatrixRe v x1 x = ↑M i x1 * contrCoToMatrixRe v x1 x * (↑M)⁻¹ x j
ring All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
lemma coContrToMatrixRe_ρ {d : ℕ} (v : (CoMod d ⊗[ℝ] ContrMod d)) (M : LorentzGroup d) :
coContrToMatrixRe (TensorProduct.map (CoMod.rep M) (ContrMod.rep M) v) =
M.1⁻¹ᵀ * coContrToMatrixRe v * M.1ᵀ := by d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ coContrToMatrixRe ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v) = (↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ
nth_rewrite 1 [coContrToMatrixRe] d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (((coBasis d).tensorProduct (contrBasis d)).repr ≪≫ₗ
Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)) ≪≫ₗ
LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v) =
(↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ
simp only [LinearEquiv.trans_apply] d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v))) =
(↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ
trans (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d)) ((LinearMap.toMatrix
((coBasis d).tensorProduct (contrBasis d))
((coBasis d).tensorProduct (contrBasis d))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M))
*ᵥ ((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v)))) d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v))) =
(LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((coBasis d).tensorProduct (contrBasis d)) ((coBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v))d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((coBasis d).tensorProduct (contrBasis d)) ((coBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v)) =
(↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ
· d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v))) =
(LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
((LinearMap.toMatrix ((coBasis d).tensorProduct (contrBasis d)) ((coBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v)) apply congrArg d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v)) =
(LinearMap.toMatrix ((coBasis d).tensorProduct (contrBasis d)) ((coBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v)
have h1 := (LinearMap.toMatrix_mulVec_repr ((coBasis d).tensorProduct (contrBasis d))
((coBasis d).tensorProduct (contrBasis d))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v) d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((coBasis d).tensorProduct (contrBasis d)) ((coBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) *ᵥ
⇑(((coBasis d).tensorProduct (contrBasis d)).repr v) =
⇑(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v)) =
(LinearMap.toMatrix ((coBasis d).tensorProduct (contrBasis d)) ((coBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v)
erw [h1 d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((coBasis d).tensorProduct (contrBasis d)) ((coBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) *ᵥ
⇑(((coBasis d).tensorProduct (contrBasis d)).repr v) =
⇑(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v)) =
⇑(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v))] d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)h1:(LinearMap.toMatrix ((coBasis d).tensorProduct (contrBasis d)) ((coBasis d).tensorProduct (contrBasis d)))
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) *ᵥ
⇑(((coBasis d).tensorProduct (contrBasis d)).repr v) =
⇑(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v))⊢ (Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v)) =
⇑(((coBasis d).tensorProduct (contrBasis d)).repr ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) v))
rfl All goals completed! 🐙
rw [TensorProduct.toMatrix_map d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v)) =
(↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v)) =
(↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ] d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v)) =
(↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ
funext i j d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ (LinearEquiv.curry ℝ ℝ (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d))
(kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) *ᵥ
(Finsupp.linearEquivFunOnFinite ℝ ℝ ((Fin 1 ⊕ Fin d) × (Fin 1 ⊕ Fin d)))
(((coBasis d).tensorProduct (contrBasis d)).repr v))
i j =
((↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ) i j
change ∑ k, ((kroneckerMap (fun x1 x2 => x1 * x2)
((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) k)
* coContrToMatrixRe v k.1 k.2) = _ d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ k,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) k *
coContrToMatrixRe v k.1 k.2 =
((↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ) i j
rw [Fintype.sum_prod_type d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) (x, y) *
coContrToMatrixRe v (x, y).1 (x, y).2 =
((↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ) i j d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) (x, y) *
coContrToMatrixRe v (x, y).1 (x, y).2 =
((↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ) i j] d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ y,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) (x, y) *
coContrToMatrixRe v (x, y).1 (x, y).2 =
((↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ) i j
simp_rw [ d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
kroneckerMap (fun x1 x2 => x1 * x2) ((LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M))
((LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M)) (i, j) (x, x_1) *
coContrToMatrixRe v x x_1 =
((↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ) i jkroneckerMap_apply, d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x_1 *
coContrToMatrixRe v x x_1 =
((↑M)⁻¹ᵀ * coContrToMatrixRe v * (↑M)ᵀ) i j Matrix.mul_apply, d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x_1 *
coContrToMatrixRe v x x_1 =
∑ x, (∑ j, (↑M)⁻¹ᵀ i j * coContrToMatrixRe v j x) * (↑M)ᵀ x j Matrix.transpose_apply d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ x,
∑ x_1,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x_1 *
coContrToMatrixRe v x x_1 =
∑ x, (∑ x_1, (↑M)⁻¹ x_1 i * coContrToMatrixRe v x_1 x) * ↑M j x]
conv_rhs =>
enter [2, x] d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d| (∑ x_1, (↑M)⁻¹ x_1 i * coContrToMatrixRe v x_1 x) * ↑M j x
rw [Finset.sum_mul] d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d| ∑ i_1, (↑M)⁻¹ i_1 i * coContrToMatrixRe v i_1 x * ↑M j x
rw [Finset.sum_comm d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j y *
coContrToMatrixRe v x y =
∑ x, ∑ i_1, (↑M)⁻¹ i_1 i * coContrToMatrixRe v i_1 x * ↑M j x d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j y *
coContrToMatrixRe v x y =
∑ x, ∑ i_1, (↑M)⁻¹ i_1 i * coContrToMatrixRe v i_1 x * ↑M j x] d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ ∑ y,
∑ x,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j y *
coContrToMatrixRe v x y =
∑ x, ∑ i_1, (↑M)⁻¹ i_1 i * coContrToMatrixRe v i_1 x * ↑M j x
congr e_f d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin d⊢ (fun y =>
∑ x,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j y *
coContrToMatrixRe v x y) =
fun x => ∑ i_1, (↑M)⁻¹ i_1 i * coContrToMatrixRe v i_1 x * ↑M j x
funext x e_f d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d⊢ ∑ x_1,
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x_1 *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x *
coContrToMatrixRe v x_1 x =
∑ i_1, (↑M)⁻¹ i_1 i * coContrToMatrixRe v i_1 x * ↑M j x
congr e_f.e_f d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin d⊢ (fun x_1 =>
(LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x_1 *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x *
coContrToMatrixRe v x_1 x) =
fun i_1 => (↑M)⁻¹ i_1 i * coContrToMatrixRe v i_1 x * ↑M j x
funext x1 e_f.e_f d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin dx1:Fin 1 ⊕ Fin d⊢ (LinearMap.toMatrix (coBasis d) (coBasis d)) (CoMod.rep M) i x1 *
(LinearMap.toMatrix (contrBasis d) (contrBasis d)) (ContrMod.rep M) j x *
coContrToMatrixRe v x1 x =
(↑M)⁻¹ x1 i * coContrToMatrixRe v x1 x * ↑M j x
simp only [coBasis_ρ_apply, contrBasis_ρ_apply, transpose_apply] e_f.e_f d:ℕv:CoMod d ⊗[ℝ] ContrMod dM:↑(LorentzGroup d)i:Fin 1 ⊕ Fin dj:Fin 1 ⊕ Fin dx:Fin 1 ⊕ Fin dx1:Fin 1 ⊕ Fin d⊢ (↑M)⁻¹ x1 i * ↑M j x * coContrToMatrixRe v x1 x = (↑M)⁻¹ x1 i * coContrToMatrixRe v x1 x * ↑M j x
ring All goals completed! 🐙The symm version of the group actions.
lemma contrContrToMatrixRe_ρ_symm {d : ℕ} (v : Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ)
(M : LorentzGroup d) :
TensorProduct.map (ContrMod.rep M) (ContrMod.rep M) (contrContrToMatrixRe.symm v) =
contrContrToMatrixRe.symm (M.1 * v * M.1ᵀ) := by d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)⊢ (TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) (contrContrToMatrixRe.symm v) =
contrContrToMatrixRe.symm (↑M * v * (↑M)ᵀ)
refine contrContrToMatrixRe.injective ?_ d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)⊢ contrContrToMatrixRe ((TensorProduct.map (ContrMod.rep M) (ContrMod.rep M)) (contrContrToMatrixRe.symm v)) =
contrContrToMatrixRe (contrContrToMatrixRe.symm (↑M * v * (↑M)ᵀ))
simp [contrContrToMatrixRe_ρ] All goals completed! 🐙
lemma coCoToMatrixRe_ρ_symm {d : ℕ} (v : Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ)
(M : LorentzGroup d) :
TensorProduct.map (CoMod.rep M) (CoMod.rep M) (coCoToMatrixRe.symm v) =
coCoToMatrixRe.symm (M.1⁻¹ᵀ * v * M.1⁻¹) := by d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)⊢ (TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v) = coCoToMatrixRe.symm ((↑M)⁻¹ᵀ * v * (↑M)⁻¹)
have h1 := coCoToMatrixRe_ρ (coCoToMatrixRe.symm v) M d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v)) =
(↑M)⁻¹ᵀ * coCoToMatrixRe (coCoToMatrixRe.symm v) * ↑M⁻¹⊢ (TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v) = coCoToMatrixRe.symm ((↑M)⁻¹ᵀ * v * (↑M)⁻¹)
simp only [LinearEquiv.apply_symm_apply, ← LorentzGroup.coe_inv] at h1 d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v)) = (↑M⁻¹)ᵀ * v * ↑M⁻¹⊢ (TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v) = coCoToMatrixRe.symm ((↑M)⁻¹ᵀ * v * (↑M)⁻¹)
simp only [← LorentzGroup.coe_inv] d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v)) = (↑M⁻¹)ᵀ * v * ↑M⁻¹⊢ (TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v) = coCoToMatrixRe.symm ((↑M⁻¹)ᵀ * v * ↑M⁻¹)
rw [← h1 d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v)) = (↑M⁻¹)ᵀ * v * ↑M⁻¹⊢ (TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v) =
coCoToMatrixRe.symm (coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v))) d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v)) = (↑M⁻¹)ᵀ * v * ↑M⁻¹⊢ (TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v) =
coCoToMatrixRe.symm (coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v)))] d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v)) = (↑M⁻¹)ᵀ * v * ↑M⁻¹⊢ (TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v) =
coCoToMatrixRe.symm (coCoToMatrixRe ((TensorProduct.map (CoMod.rep M) (CoMod.rep M)) (coCoToMatrixRe.symm v)))
simp All goals completed! 🐙
lemma contrCoToMatrixRe_ρ_symm {d : ℕ} (v : Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ)
(M : LorentzGroup d) :
TensorProduct.map (ContrMod.rep M) (CoMod.rep M) (contrCoToMatrixRe.symm v) =
contrCoToMatrixRe.symm (M.1 * v * M.1⁻¹) := by d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)⊢ (TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v) = contrCoToMatrixRe.symm (↑M * v * (↑M)⁻¹)
have h1 := contrCoToMatrixRe_ρ (contrCoToMatrixRe.symm v) M d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:contrCoToMatrixRe ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v)) =
↑M * contrCoToMatrixRe (contrCoToMatrixRe.symm v) * (↑M)⁻¹⊢ (TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v) = contrCoToMatrixRe.symm (↑M * v * (↑M)⁻¹)
simp only [LinearEquiv.apply_symm_apply] at h1 d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:contrCoToMatrixRe ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v)) = ↑M * v * (↑M)⁻¹⊢ (TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v) = contrCoToMatrixRe.symm (↑M * v * (↑M)⁻¹)
rw [← h1, d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:contrCoToMatrixRe ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v)) = ↑M * v * (↑M)⁻¹⊢ (TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v) =
contrCoToMatrixRe.symm
(contrCoToMatrixRe ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v))) All goals completed! 🐙 LinearEquiv.symm_apply_apply d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:contrCoToMatrixRe ((TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v)) = ↑M * v * (↑M)⁻¹⊢ (TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v) =
(TensorProduct.map (ContrMod.rep M) (CoMod.rep M)) (contrCoToMatrixRe.symm v) All goals completed! 🐙] All goals completed! 🐙
lemma coContrToMatrixRe_ρ_symm {d : ℕ} (v : Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝ)
(M : LorentzGroup d) :
TensorProduct.map (CoMod.rep M) (ContrMod.rep M) (coContrToMatrixRe.symm v) =
coContrToMatrixRe.symm (M.1⁻¹ᵀ * v * M.1ᵀ) := by d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)⊢ (TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v) =
coContrToMatrixRe.symm ((↑M)⁻¹ᵀ * v * (↑M)ᵀ)
have h1 := coContrToMatrixRe_ρ (coContrToMatrixRe.symm v) M d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coContrToMatrixRe ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v)) =
(↑M)⁻¹ᵀ * coContrToMatrixRe (coContrToMatrixRe.symm v) * (↑M)ᵀ⊢ (TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v) =
coContrToMatrixRe.symm ((↑M)⁻¹ᵀ * v * (↑M)ᵀ)
simp only [LinearEquiv.apply_symm_apply] at h1 d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coContrToMatrixRe ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v)) = (↑M)⁻¹ᵀ * v * (↑M)ᵀ⊢ (TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v) =
coContrToMatrixRe.symm ((↑M)⁻¹ᵀ * v * (↑M)ᵀ)
rw [← h1, d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coContrToMatrixRe ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v)) = (↑M)⁻¹ᵀ * v * (↑M)ᵀ⊢ (TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v) =
coContrToMatrixRe.symm
(coContrToMatrixRe ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v))) All goals completed! 🐙 LinearEquiv.symm_apply_apply d:ℕv:Matrix (Fin 1 ⊕ Fin d) (Fin 1 ⊕ Fin d) ℝM:↑(LorentzGroup d)h1:coContrToMatrixRe ((TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v)) = (↑M)⁻¹ᵀ * v * (↑M)ᵀ⊢ (TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v) =
(TensorProduct.map (CoMod.rep M) (ContrMod.rep M)) (coContrToMatrixRe.symm v) All goals completed! 🐙] All goals completed! 🐙