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

Contraction of Real Lorentz vectors

@[expose] public section

The bi-linear map corresponding to contraction of a contravariant Lorentz vector with a covariant Lorentz vector.

d✝:d:r:ψ:ContrMod dφ:CoMod dr (ContrMod.toFin1dℝEquiv ψ ⬝ᵥ φ.toFin1dℝ) = ((RingHom.id ) r { toFun := fun φ => ψ.toFin1dℝ ⬝ᵥ φ.toFin1dℝ, map_add' := , map_smul' := }) φ All goals completed! 🐙

The bi-linear map corresponding to contraction of a covariant Lorentz vector with a contravariant Lorentz vector.

d✝:d:r:φ:CoMod dψ:ContrMod dr (CoMod.toFin1dℝEquiv φ ⬝ᵥ ψ.toFin1dℝ) = ((RingHom.id ) r { toFun := fun ψ => φ.toFin1dℝ ⬝ᵥ ψ.toFin1dℝ, map_add' := , map_smul' := }) ψ All goals completed! 🐙

The linear map from ContrMod d ⊗ CoMod d to ℝ given by summing over components of contravariant Lorentz vector and covariant Lorentz vector in the standard basis (i.e. the dot product). In terms of index notation this is the contraction is ψⁱ φᵢ.

d:Λ:(LorentzGroup d)ψ:ContrMod dφ:CoMod d1 *ᵥ ψ.toFin1dℝ ⬝ᵥ φ.toFin1dℝ = ((contrModCoModBi d) ψ) φ d:Λ:(LorentzGroup d)ψ:ContrMod dφ:CoMod dψ.toFin1dℝ ⬝ᵥ φ.toFin1dℝ = ((contrModCoModBi d) ψ) φ All goals completed! 🐙

Notation for contrCoContract acting on a tmul.

local notation "⟪" ψ "," φ "⟫ₘ" => contrCoContract (ψ ⊗ₜ φ)
lemma contrCoContract_hom_tmul (ψ : ContrMod d) (φ : CoMod d) : ψ, φ⟫ₘ = ψ.toFin1dℝ ⬝ᵥ φ.toFin1dℝ := d:ψ:ContrMod dφ:CoMod dcontrCoContract (ψ ⊗ₜ[] φ) = ψ.toFin1dℝ ⬝ᵥ φ.toFin1dℝ All goals completed! 🐙

The linear map from CoMod d ⊗ ContrMod d to ℝ given by summing over components of contravariant Lorentz vector and covariant Lorentz vector in the standard basis (i.e. the dot product). In terms of index notation this is the contraction is ψⁱ φᵢ.

d:Λ:(LorentzGroup d)ψ:CoMod dφ:ContrMod dψ.toFin1dℝ ᵥ* 1 ⬝ᵥ φ.toFin1dℝ = ((AlgebraTensorModule.curry ((Representation.trivial (LorentzGroup d) ) Λ ∘ₗ TensorProduct.lift (coModContrModBi d))) ψ) φ d:Λ:(LorentzGroup d)ψ:CoMod dφ:ContrMod dψ.toFin1dℝ ⬝ᵥ φ.toFin1dℝ = ((AlgebraTensorModule.curry ((Representation.trivial (LorentzGroup d) ) Λ ∘ₗ TensorProduct.lift (coModContrModBi d))) ψ) φ All goals completed! 🐙

Notation for coContrContract acting on a tmul.

local notation "⟪" φ "," ψ "⟫ₘ" => coContrContract (φ ⊗ₜ ψ)
lemma coContrContract_hom_tmul (φ : CoMod d) (ψ : ContrMod d) : φ, ψ⟫ₘ = φ.toFin1dℝ ⬝ᵥ ψ.toFin1dℝ := d:φ:CoMod dψ:ContrMod dcoContrContract (φ ⊗ₜ[] ψ) = φ.toFin1dℝ ⬝ᵥ ψ.toFin1dℝ All goals completed! 🐙

Symmetry relations

All goals completed! 🐙All goals completed! 🐙

Contracting contr vectors with contr vectors etc.

The linear map from ContrMod d ⊗ ContrMod d to ℝ induced by the homomorphism Contr.toCo and the contraction contrCoContract.

def contrContrContract : ((ContrMod.rep (d := d)).tprod (ContrMod.rep (d := d))).IntertwiningMap (Representation.trivial (LorentzGroup d) ) := contrCoContract.comp ((Contr.toCo d).lTensor (ContrMod.rep (d := d)))

The linear map from ContrMod d ⊗ ContrMod d to ℝ induced by the homomorphism Contr.toCo and the contraction contrCoContract.

def contrContrContractField : ContrMod d ⊗[] ContrMod d →ₗ[] := contrContrContract.toLinearMap

Notation for contrContrContractField acting on a tmul.

local notation "⟪" ψ "," φ "⟫ₘ" => contrContrContractField (ψ ⊗ₜ φ)
lemma contrContrContract_hom_tmul (φ : ContrMod d) (ψ : ContrMod d) : φ, ψ⟫ₘ = φ.toFin1dℝ ⬝ᵥ η *ᵥ ψ.toFin1dℝ:= d:φ:ContrMod dψ:ContrMod dcontrContrContractField (φ ⊗ₜ[] ψ) = φ.toFin1dℝ ⬝ᵥ η *ᵥ ψ.toFin1dℝ d:φ:ContrMod dψ:ContrMod dcontrContrContract.toLinearMap (φ ⊗ₜ[] ψ) = φ.toFin1dℝ ⬝ᵥ η *ᵥ ψ.toFin1dℝ erw [d:φ:ContrMod dψ:ContrMod d((Representation.IntertwiningMap.id ContrMod.rep).toLinearMap (φ, ψ).1).toFin1dℝ ⬝ᵥ ((Contr.toCo d).toLinearMap (φ, ψ).2).toFin1dℝ = φ.toFin1dℝ ⬝ᵥ η *ᵥ ψ.toFin1dℝd:φ:ContrMod dψ:ContrMod d((Representation.IntertwiningMap.id ContrMod.rep).toLinearMap (φ, ψ).1).toFin1dℝ ⬝ᵥ ((Contr.toCo d).toLinearMap (φ, ψ).2).toFin1dℝ = φ.toFin1dℝ ⬝ᵥ η *ᵥ ψ.toFin1dℝ All goals completed! 🐙

The linear map from CoMod d ⊗ CoMod d to ℝ induced by the homomorphism Co.toContr and the contraction coContrContract.

def coCoContract : ((CoMod.rep (d := d)).tprod (CoMod.rep (d := d))).IntertwiningMap (Representation.trivial (LorentzGroup d) ) := coContrContract.comp ((Co.toContr d).lTensor (CoMod.rep (d := d)))

Notation for coCoContract acting on a tmul.

local notation "⟪" ψ "," φ "⟫ₘ" => coCoContract (ψ ⊗ₜ φ)
lemma coCoContract_hom_tmul (φ : CoMod d) (ψ : CoMod d) : φ, ψ⟫ₘ = φ.toFin1dℝ ⬝ᵥ η *ᵥ ψ.toFin1dℝ := d:φ:CoMod dψ:CoMod dcoCoContract (φ ⊗ₜ[] ψ) = φ.toFin1dℝ ⬝ᵥ η *ᵥ ψ.toFin1dℝ All goals completed! 🐙

We derive the lemmas in main for contrContrContractField.

@[simp] lemma action_tmul (g : LorentzGroup d) : ContrMod.rep g x, ContrMod.rep g y⟫ₘ = x, y⟫ₘ := LinearMap.congr_fun (contrContrContract.isIntertwining' g) (x ⊗ₜ[] y)d:x:ContrMod dy:ContrMod dx.toFin1dℝ ⬝ᵥ η *ᵥ y.toFin1dℝ = x.val (Sum.inl 0) * y.val (Sum.inl 0) - i, x.val (Sum.inr i) * y.val (Sum.inr i) d:x:ContrMod dy:ContrMod dx.toFin1dℝ (Sum.inl 0) * y.toFin1dℝ (Sum.inl 0) + - x_1, x.toFin1dℝ (Sum.inr x_1) * y.toFin1dℝ (Sum.inr x_1) = x.val (Sum.inl 0) * y.val (Sum.inl 0) - i, x.val (Sum.inr i) * y.val (Sum.inr i) All goals completed! 🐙d:x:ContrMod dy:ContrMod di:Fin dy.val (Sum.inr i) * x.val (Sum.inr i) = x.toSpace.ofLp i, y.toSpace.ofLp i⟫_ All goals completed! 🐙d: (a : Fin d), (ContrMod.stdBasis (Sum.inl 0)).val (Sum.inr a) * (ContrMod.stdBasis (Sum.inl 0)).val (Sum.inr a) = 0 d:a:Fin d(ContrMod.stdBasis (Sum.inl 0)).val (Sum.inr a) * (ContrMod.stdBasis (Sum.inl 0)).val (Sum.inr a) = 0 All goals completed! 🐙 d:1 - 0 = 1 All goals completed! 🐙All goals completed! 🐙All goals completed! 🐙All goals completed! 🐙d:x:ContrMod dy:ContrMod dx.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) - i, x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i) = i, x.val i * y.val i d:x:ContrMod dy:ContrMod dx.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) - i, x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i) = x.val (Sum.inl 0) * y.val (Sum.inl 0) + a₂, x.val (Sum.inr a₂) * y.val (Sum.inr a₂) d:x:ContrMod dy:ContrMod dx.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) - i, x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i) = x.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) + i, -(x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i))d:x:ContrMod dy:ContrMod dx.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) + i, -(x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i)) = x.val (Sum.inl 0) * y.val (Sum.inl 0) + a₂, x.val (Sum.inr a₂) * y.val (Sum.inr a₂) d:x:ContrMod dy:ContrMod dx.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) - i, x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i) = x.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) + i, -(x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i)) d:x:ContrMod dy:ContrMod dx.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) - i, x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i) = x.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) + - i, x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i) All goals completed! 🐙 d:x:ContrMod dy:ContrMod dx.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) = x.val (Sum.inl 0) * y.val (Sum.inl 0)d:x:ContrMod dy:ContrMod d i, -(x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i)) = a₂, x.val (Sum.inr a₂) * y.val (Sum.inr a₂) d:x:ContrMod dy:ContrMod dx.val (Sum.inl 0) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inl 0) = x.val (Sum.inl 0) * y.val (Sum.inl 0) d:x:ContrMod dy:ContrMod dx.val (Sum.inl 0) * (η *ᵥ y.toFin1dℝ) (Sum.inl 0) = x.val (Sum.inl 0) * y.val (Sum.inl 0) d:x:ContrMod dy:ContrMod dy.toFin1dℝ (Sum.inl 0) = y.val (Sum.inl 0) x.val (Sum.inl 0) = 0 All goals completed! 🐙 d:x:ContrMod dy:ContrMod d i, -(x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i)) = a₂, x.val (Sum.inr a₂) * y.val (Sum.inr a₂) d:x:ContrMod dy:ContrMod d(fun i => -(x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i))) = fun a₂ => x.val (Sum.inr a₂) * y.val (Sum.inr a₂) d:x:ContrMod dy:ContrMod di:Fin d-(x.val (Sum.inr i) * ((ContrMod.rep LorentzGroup.parity) y).val (Sum.inr i)) = x.val (Sum.inr i) * y.val (Sum.inr i) d:x:ContrMod dy:ContrMod di:Fin d-(x.val (Sum.inr i) * (η *ᵥ y.toFin1dℝ) (Sum.inr i)) = x.val (Sum.inr i) * y.val (Sum.inr i) d:x:ContrMod dy:ContrMod di:Fin dy.toFin1dℝ (Sum.inr i) = y.val (Sum.inr i) x.val (Sum.inr i) = 0 All goals completed! 🐙d:y:ContrMod dh:y = 0contrContrContractField (0 ⊗ₜ[] (ContrMod.rep LorentzGroup.parity) 0) = 0 All goals completed! 🐙

The metric tensor is non-degenerate.

lemma nondegenerate : ( (x : ContrMod d), x, y⟫ₘ = 0) y = 0 := d:y:ContrMod d(∀ (x : ContrMod d), contrContrContractField (x ⊗ₜ[] y) = 0) y = 0 d:y:ContrMod dh: (x : ContrMod d), contrContrContractField (x ⊗ₜ[] y) = 0y = 0d:y:ContrMod dh:y = 0 (x : ContrMod d), contrContrContractField (x ⊗ₜ[] y) = 0 d:y:ContrMod dh: (x : ContrMod d), contrContrContractField (x ⊗ₜ[] y) = 0y = 0 All goals completed! 🐙 d:y:ContrMod dh:y = 0 (x : ContrMod d), contrContrContractField (x ⊗ₜ[] y) = 0 All goals completed! 🐙
All goals completed! 🐙d:Λ:Matrix (Fin 1 Fin d) (Fin 1 Fin d) Λ':Matrix (Fin 1 Fin d) (Fin 1 Fin d) v:ContrMod dh: (w v : ContrMod d), contrContrContractField (v ⊗ₜ[] ((Λ - Λ') *ᵥ w)) = 0h1:(Λ - Λ') *ᵥ v = 0Λ *ᵥ v - Λ' *ᵥ v = 0 d:Λ:Matrix (Fin 1 Fin d) (Fin 1 Fin d) Λ':Matrix (Fin 1 Fin d) (Fin 1 Fin d) v:ContrMod dh: (w v : ContrMod d), contrContrContractField (v ⊗ₜ[] ((Λ - Λ') *ᵥ w)) = 0h1:Λ *ᵥ v - Λ' *ᵥ v = 0Λ *ᵥ v - Λ' *ᵥ v = 0 All goals completed! 🐙d:Λ:Matrix (Fin 1 Fin d) (Fin 1 Fin d) Λ':Matrix (Fin 1 Fin d) (Fin 1 Fin d) h: (v : ContrMod d), Λ *ᵥ v = Λ' *ᵥ v(LinearMap.toMatrix ContrMod.stdBasis ContrMod.stdBasis).toEquiv.symm Λ = (LinearMap.toMatrix ContrMod.stdBasis ContrMod.stdBasis).toEquiv.symm Λ' d:Λ:Matrix (Fin 1 Fin d) (Fin 1 Fin d) Λ':Matrix (Fin 1 Fin d) (Fin 1 Fin d) h: (v : ContrMod d), Λ *ᵥ v = Λ' *ᵥ vv:ContrMod d((LinearMap.toMatrix ContrMod.stdBasis ContrMod.stdBasis).toEquiv.symm Λ) v = ((LinearMap.toMatrix ContrMod.stdBasis ContrMod.stdBasis).toEquiv.symm Λ') v All goals completed! 🐙d:Λ:Matrix (Fin 1 Fin d) (Fin 1 Fin d) (∀ (w v : ContrMod d), contrContrContractField (v ⊗ₜ[] (Λ *ᵥ w)) = contrContrContractField (v ⊗ₜ[] (1 *ᵥ w))) (w v : ContrMod d), contrContrContractField (v ⊗ₜ[] (Λ *ᵥ w)) = contrContrContractField (v ⊗ₜ[] w) All goals completed! 🐙d:Λ:Matrix (Fin 1 Fin d) (Fin 1 Fin d) h:dual Λ * Λ = 1Λ LorentzGroup d All goals completed! 🐙d:Λ:Matrix (Fin 1 Fin d) (Fin 1 Fin d) h: (w : ContrMod d), contrContrContractField ((Λ *ᵥ w) ⊗ₜ[] (Λ *ᵥ w)) = contrContrContractField (w ⊗ₜ[] w)x:ContrMod dy:ContrMod dhp:contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ x)) + contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y)) + (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y)) + contrContrContractField ((Λ *ᵥ y) ⊗ₜ[] (Λ *ᵥ y))) = contrContrContractField (x ⊗ₜ[] x) + contrContrContractField (x ⊗ₜ[] y) + (contrContrContractField (x ⊗ₜ[] y) + contrContrContractField (y ⊗ₜ[] y))hn:contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ x)) - contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y)) - (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y)) - contrContrContractField ((Λ *ᵥ y) ⊗ₜ[] (Λ *ᵥ y))) = contrContrContractField (x ⊗ₜ[] x) - contrContrContractField (x ⊗ₜ[] y) - (contrContrContractField (x ⊗ₜ[] y) - contrContrContractField (y ⊗ₜ[] y))e:(𝟙_ (Rep (LorentzGroup d))) ≃ₗ[] := LinearEquiv.refl (𝟙_ (Rep (LorentzGroup d)))hp':e (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ x))) + e (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y))) + (e (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y))) + e (contrContrContractField ((Λ *ᵥ y) ⊗ₜ[] (Λ *ᵥ y)))) = e (contrContrContractField (x ⊗ₜ[] x)) + e (contrContrContractField (x ⊗ₜ[] y)) + (e (contrContrContractField (x ⊗ₜ[] y)) + e (contrContrContractField (y ⊗ₜ[] y)))hn':e (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ x))) - e (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y))) - (e (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y))) - e (contrContrContractField ((Λ *ᵥ y) ⊗ₜ[] (Λ *ᵥ y)))) = e (contrContrContractField (x ⊗ₜ[] x)) - e (contrContrContractField (x ⊗ₜ[] y)) - (e (contrContrContractField (x ⊗ₜ[] y)) - e (contrContrContractField (y ⊗ₜ[] y)))e (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y))) + e (contrContrContractField (x ⊗ₜ[] y)) - e (contrContrContractField (x ⊗ₜ[] y)) - e (contrContrContractField ((Λ *ᵥ x) ⊗ₜ[] (Λ *ᵥ y))) = 0 All goals completed! 🐙

Some equalities and inequalities

d:v:ContrMod dv.val (Sum.inl 0) ^ 2 = v.val (Sum.inl 0) * v.val (Sum.inl 0) - i, v.val (Sum.inr i) * v.val (Sum.inr i) + i, v.val (Sum.inr i) ^ 2 d:v:ContrMod dv.val (Sum.inl 0) ^ 2 - i, v.val (Sum.inr i) ^ 2 = v.val (Sum.inl 0) * v.val (Sum.inl 0) - i, v.val (Sum.inr i) * v.val (Sum.inr i) d:v:ContrMod dv.val (Sum.inl 0) ^ 2 = v.val (Sum.inl 0) * v.val (Sum.inl 0)d:v:ContrMod d(fun i => v.val (Sum.inr i) ^ 2) = fun i => v.val (Sum.inr i) * v.val (Sum.inr i) d:v:ContrMod dv.val (Sum.inl 0) ^ 2 = v.val (Sum.inl 0) * v.val (Sum.inl 0) All goals completed! 🐙 d:v:ContrMod d(fun i => v.val (Sum.inr i) ^ 2) = fun i => v.val (Sum.inr i) * v.val (Sum.inr i) d:v:ContrMod di:Fin dv.val (Sum.inr i) ^ 2 = v.val (Sum.inr i) * v.val (Sum.inr i) All goals completed! 🐙d:v:ContrMod dcontrContrContractField (v ⊗ₜ[] v) contrContrContractField (v ⊗ₜ[] v) + i, v.val (Sum.inr i) ^ 2 d:v:ContrMod d0 i, v.val (Sum.inr i) ^ 2 d:v:ContrMod d0 fun i => v.val (Sum.inr i) ^ 2 All goals completed! 🐙d:v:ContrMod dw:ContrMod dv.toSpace, w.toSpace⟫_ v.toSpace, w.toSpace⟫_ All goals completed! 🐙d:v:ContrMod dw:ContrMod dv.toSpace, w.toSpace⟫_ v.toSpace * w.toSpace All goals completed! 🐙

The Minkowski metric and the standard basis

d:v:ContrMod dμ:Fin 1 Fin d(ContrMod.stdBasis μ).val (Sum.inl 0) * v.val (Sum.inl 0) - i, (ContrMod.stdBasis μ).val (Sum.inr i) * v.val (Sum.inr i) = η μ μ * v.toFin1dℝ μ d:v:ContrMod dμ:Fin 1(ContrMod.stdBasis (Sum.inl μ)).val (Sum.inl 0) * v.val (Sum.inl 0) - i, (ContrMod.stdBasis (Sum.inl μ)).val (Sum.inr i) * v.val (Sum.inr i) = η (Sum.inl μ) (Sum.inl μ) * v.toFin1dℝ (Sum.inl μ)d:v:ContrMod dμ:Fin d(ContrMod.stdBasis (Sum.inr μ)).val (Sum.inl 0) * v.val (Sum.inl 0) - i, (ContrMod.stdBasis (Sum.inr μ)).val (Sum.inr i) * v.val (Sum.inr i) = η (Sum.inr μ) (Sum.inr μ) * v.toFin1dℝ (Sum.inr μ) d:v:ContrMod dμ:Fin 1(ContrMod.stdBasis (Sum.inl μ)).val (Sum.inl 0) * v.val (Sum.inl 0) - i, (ContrMod.stdBasis (Sum.inl μ)).val (Sum.inr i) * v.val (Sum.inr i) = η (Sum.inl μ) (Sum.inl μ) * v.toFin1dℝ (Sum.inl μ) d:v:ContrMod d(ContrMod.stdBasis (Sum.inl ((fun i => i) 0, ))).val (Sum.inl 0) * v.val (Sum.inl 0) - i, (ContrMod.stdBasis (Sum.inl ((fun i => i) 0, ))).val (Sum.inr i) * v.val (Sum.inr i) = η (Sum.inl ((fun i => i) 0, )) (Sum.inl ((fun i => i) 0, )) * v.toFin1dℝ (Sum.inl ((fun i => i) 0, )) d:v:ContrMod dv.val (Sum.inl 0) = v.toFin1dℝ (Sum.inl 0) All goals completed! 🐙 d:v:ContrMod dμ:Fin d(ContrMod.stdBasis (Sum.inr μ)).val (Sum.inl 0) * v.val (Sum.inl 0) - i, (ContrMod.stdBasis (Sum.inr μ)).val (Sum.inr i) * v.val (Sum.inr i) = η (Sum.inr μ) (Sum.inr μ) * v.toFin1dℝ (Sum.inr μ) d:v:ContrMod dμ:Fin dv.val (Sum.inr μ) = v.toFin1dℝ (Sum.inr μ) All goals completed! 🐙d:Λ:Matrix (Fin 1 Fin d) (Fin 1 Fin d) μ:Fin 1 Fin dν:Fin 1 Fin dη μ μ * (Λ *ᵥ (ContrMod.stdBasis ν).toFin1dℝ) μ = η μ μ * Λ μ ν All goals completed! 🐙d:μ:Fin 1 Fin dν:Fin 1 Fin dη μ μ * 1 μ ν = η μ ν d:μ:Fin 1 Fin dν:Fin 1 Fin dh:μ = νη μ μ * 1 μ ν = η μ νd:μ:Fin 1 Fin dν:Fin 1 Fin dh:¬μ = νη μ μ * 1 μ ν = η μ ν d:μ:Fin 1 Fin dν:Fin 1 Fin dh:μ = νη μ μ * 1 μ ν = η μ ν d:μ:Fin 1 Fin dη μ μ * 1 μ μ = η μ μ All goals completed! 🐙 d:μ:Fin 1 Fin dν:Fin 1 Fin dh:¬μ = νη μ μ * 1 μ ν = η μ ν All goals completed! 🐙d:Λ:Matrix (Fin 1 Fin d) (Fin 1 Fin d) ν:Fin 1 Fin dμ:Fin 1 Fin dΛ ν μ = η ν ν * η ν ν * Λ ν μ All goals completed! 🐙

Self-adjoint

x:ContrMod 3(x.val (Sum.inl 0) * x.val (Sum.inl 0) - WithLp.toLp 2 (x.val Sum.inr), WithLp.toLp 2 (x.val Sum.inr)⟫_) = (x.val (Sum.inl 0) 1 - x.val (Sum.inr 0) !![0, 1; 1, 0] - x.val (Sum.inr 1) !![0, -I; I, 0] - x.val (Sum.inr 2) !![1, 0; 0, -1]) 0 0 * (x.val (Sum.inl 0) 1 - x.val (Sum.inr 0) !![0, 1; 1, 0] - x.val (Sum.inr 1) !![0, -I; I, 0] - x.val (Sum.inr 2) !![1, 0; 0, -1]) 1 1 - (x.val (Sum.inl 0) 1 - x.val (Sum.inr 0) !![0, 1; 1, 0] - x.val (Sum.inr 1) !![0, -I; I, 0] - x.val (Sum.inr 2) !![1, 0; 0, -1]) 0 1 * (x.val (Sum.inl 0) 1 - x.val (Sum.inr 0) !![0, 1; 1, 0] - x.val (Sum.inr 1) !![0, -I; I, 0] - x.val (Sum.inr 2) !![1, 0; 0, -1]) 1 0 x:ContrMod 3(x.val (Sum.inl 0)) * (x.val (Sum.inl 0)) - ((x.val Sum.inr) 0, (x.val Sum.inr) 0⟫_ + (x.val Sum.inr) 1, (x.val Sum.inr) 1⟫_ + (x.val Sum.inr) 2, (x.val Sum.inr) 2⟫_) = ((x.val (Sum.inl 0)) - (x.val (Sum.inr 2))) * ((x.val (Sum.inl 0)) + (x.val (Sum.inr 2))) - (-(x.val (Sum.inr 0)) + (x.val (Sum.inr 1)) * I) * (-(x.val (Sum.inr 0)) - (x.val (Sum.inr 1)) * I) x:ContrMod 3(x.val (Sum.inl 0)) ^ 2 - ((x.val Sum.inr) 0, (x.val Sum.inr) 0⟫_ + (x.val Sum.inr) 1, (x.val Sum.inr) 1⟫_ + (x.val Sum.inr) 2, (x.val Sum.inr) 2⟫_) = (x.val (Sum.inl 0)) ^ 2 - (x.val (Sum.inr 2)) ^ 2 - (x.val (Sum.inr 0)) ^ 2 + (x.val (Sum.inr 1)) ^ 2 * I ^ 2 x:ContrMod 3(x.val (Sum.inl 0)) ^ 2 - ((x.val (Sum.inr 0)) ^ 2 + (x.val (Sum.inr 1)) ^ 2 + (x.val (Sum.inr 2)) ^ 2) = (x.val (Sum.inl 0)) ^ 2 - (x.val (Sum.inr 2)) ^ 2 - (x.val (Sum.inr 0)) ^ 2 + -(x.val (Sum.inr 1)) ^ 2 All goals completed! 🐙

The contraction on the basis

d:i:Fin 1 Fin dj:Fin 1 Fin d(if j = i then 1 else 0) = if i = j then 1 else 0 d:i:Fin 1 Fin dj:Fin 1 Fin d(j = i) = (i = j) All goals completed! 🐙d:i:Fin 1 Fin dj:Fin 1 Fin d(if j = i then 1 else 0) = if i = j then 1 else 0 d:i:Fin 1 Fin dj:Fin 1 Fin d(j = i) = (i = j) All goals completed! 🐙