Imports
/-
Copyright (c) 2026 Andrea Pari. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrea Pari
-/
module
public import Physlib.Relativity.Tensors.Contraction.Basic
public import Physlib.Relativity.Tensors.Contraction.Basis
public import Physlib.Mathematics.ConjModule
public import Mathlib.Algebra.Star.Basic
public import Mathlib.LinearAlgebra.Finsupp.LSumConjugation structure on a tensor species
i. Overview
Each index of a tensor carries a colour naming the representation it transforms in. A species
already has the variance dual τ c, the colour an index must meet to contract. Conjugation adds a
second involution, the conjugate colour bar c: the colour an index transforms in after complex
conjugation. A spinor index is the textbook example: complex conjugation sends a left-handed Weyl
spinor to a right-handed one, (ψ_α)* = ψ̄_α̇, so bar swaps the left- and right-handed colours
while fixing a real vector colour. Variance is untouched, so bar commutes with τ. In an N=1
chiral sector bar swaps chiral and anti-chiral indices.
conjT conjugates a tensor at the basis level: star each coordinate in the species basis and
place it at the conjugate colour. Reality and Hermiticity are stated through it: a tensor is real
when conjugation fixes it, and a metric is Hermitian when conjugating it swaps its two indices.
Conjugation is intrinsic species data, not a detachable add-on: a ConjTensorSpecies is a
TensorSpecies bundled (extends) with the conjugate-colour involution bar and the coherence
the recipe needs. bar c shares basis labels with c (barIdx_eq) and the contraction
coefficients survive star (conj_contrComm), which together make conjugation commute with
contraction. conjT is then conj-semilinear, involutive, and commutes with contraction; the
last makes reality and Hermiticity compatible with raising and lowering indices.
At the single-index level, conjEquiv : V c ≃ₛₗ V (bar c) realises this conjugation: it reads a
vector's coordinates, conjugates them with ConjModule.starFinsupp, and re-seats them at the
conjugate colour. It rests on the conjugate module ConjModule (Physlib.Mathematics.ConjModule),
the same vectors with the scalar action twisted by conjugation (i acts as −i). Equipping the
conjugate colours with such conjugate-module carriers is what makes a metric V c ⊗ V (bar c) → k
genuinely bilinear and IsHermitian an honest conjugate-transpose.
ii. Key results
ConjTensorSpecies is a tensor species bundled with its conjugation.
ConjTensorSpecies.conjT is the conjugation of a tensor.
ConjTensorSpecies.conjT_conjT proves that conjugation is an involution.
ConjTensorSpecies.conjT_contrT proves that conjugation commutes with contraction.
ConjTensorSpecies.conjT_eq_permT_iff is the componentwise criterion for
conjT t = permT σ h t', the workhorse for proving reality and Hermiticity conditions.
ConjTensorSpecies.conjEquiv is the single-slot conjugate-linear isomorphism V c ≃ₛₗ V (bar c).
ConjTensorSpecies.IsHermitian is the structural conjugate-transpose condition on a metric slot.
iii. Table of contents
A. The conjugation structure
B. The conjugation of vectors
C. Conjugation of tensors
D. The involution law
E. Commutation with contraction
F. Hermitian pairings
@[expose] public sectionA. The conjugation structure
A ConjTensorSpecies bundles a TensorSpecies (extends) with the conjugation data.
Conjugation is defined at the basis level, where it is "star the components" (§B). Four of the
new fields are
bookkeeping on colours and index sets, trivial to supply per instance: bar (the conjugate-colour
involution), bar_involution, bar_tau (it commutes with τ), and barIdx_eq (a colour and its
conjugate share basis labels). The one substantive field is conj_contrComm, that the contraction
coefficients are unchanged by star; this is what makes conjugation commute with contraction (§D),
and for a real (δ) contraction it is star δ = δ.
A tensor species bundled with a conjugation. Beyond the TensorSpecies it extends, it carries
the conjugate-colour involution bar, the index-set identification barIdx_eq, and the
contraction-coherence conj_contrComm. Also carries bar_involution and bar_tau (that bar is
involutive and commutes with the variance dual).
The conjugate colour: the colour an index transforms in under complex conjugation; preserves
variance (commutes with τ).
bar is an involution.
bar commutes with the variance dual τ.
Conjugation fixes the index set: the conjugate colour reuses the same basis labels.
Conjugation conjugates components in an adapted basis; it never permutes labels, so the label
sets of c and bar c coincide.
Conjugation is equivariant: it preserves the action of the group.
Conjugation is compatible with contraction at the basis level: star of the contraction
coefficient at colour d equals the coefficient at the conjugate colour bar d, with basis
labels carried over by barIdx_eq. For a real (δ) contraction this is star δ = δ.
structure ConjTensorSpecies (k : Type) [CommRing k] [StarRing k] (C : Type) (G : Type) [Group G]
(V : C → Type) [∀ c, AddCommGroup (V c)] [∀ c, Module k (V c)]
(basisIdx : C → Type) [∀ c, Fintype (basisIdx c)] [∀ c, DecidableEq (basisIdx c)]
(rep : (c : C) → Representation k G (V c)) (b : (c : C) → Basis (basisIdx c) k (V c))
extends TensorSpecies k C G V basisIdx rep b where bar : C → C bar_involution : Function.Involutive bar bar_tau : ∀ c, bar (toTensorSpecies.τ c) = toTensorSpecies.τ (bar c) barIdx_eq : ∀ c, basisIdx (bar c) = basisIdx c conj_basis_equivariant : ∀ (c : C) (g : G) (i j : basisIdx c),
(b c).repr (rep c g (b c i)) j = star ((b (bar c)).repr
(rep (bar c) g (b (bar c) (Equiv.cast (barIdx_eq c).symm i)))
(Equiv.cast (barIdx_eq c).symm j)) conj_contrComm : ∀ (d : C) (x₁ : basisIdx d) (x₂ : basisIdx (toTensorSpecies.τ d)),
star (toTensorSpecies.contr d (b d x₁ ⊗ₜ[k] b (toTensorSpecies.τ d) x₂))
= toTensorSpecies.contr (bar d) (b (bar d) ((Equiv.cast (barIdx_eq d)).symm x₁) ⊗ₜ[k]
b (toTensorSpecies.τ (bar d)) (basisIdxCongr (bar_tau d)
((Equiv.cast (barIdx_eq (toTensorSpecies.τ d))).symm x₂)))TODO "Extend `complexLorentzTensor` to a `ConjTensorSpecies`."TODO "Extend `realLorentzTensor` to a `ConjTensorSpecies`."B. The conjugation of vectors
conjEquiv is the conjugate-linear isomorphism V c ≃ₛₗ[starRingEnd k] V (bar c): read off the
coordinates of a vector in the species basis, conjugate them (star), and re-seat them as the
coordinates at the conjugate colour (the index sets agree by barIdx_eq). It is the single-slot
shadow of conjT, packaged as a bundled equivalence so the Hermitian-metric layer can apply it to a
metric slot. Semilinearity is built in via the coordinate star; invertibility is star's
involutivity together with bar's.
The conjugate-linear slot isomorphism V c ≃ₛₗ[starRingEnd k] V (bar c): conjugate the
coordinates in the species basis and relabel to the conjugate colour via barIdx_eq.
def conjEquiv {c : C} : V c ≃ₛₗ[starRingEnd k] V (S.bar c) :=
((b c).repr.trans (ConjModule.starFinsupp (k := k))).trans
((Finsupp.domLCongr (Equiv.cast (S.barIdx_eq c).symm)).trans (b (S.bar c)).repr.symm)
conjEquiv on a basis vector: b c i ↦ b (bar c) i (relabelled through barIdx_eq), since the
basis coordinates of b c i are the indicator at i and star fixes 0 and 1.
@[simp] lemma conjEquiv_basis {c : C} (i : basisIdx c) :
S.conjEquiv (b c i) = b (S.bar c) (Equiv.cast (S.barIdx_eq c).symm i) := k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Ci:basisIdx c⊢ S.conjEquiv ((b c) i) = (b (S.bar c)) ((Equiv.cast ⋯) i)
All goals completed! 🐙lemma conjEquiv_basis_repr {c : C} (v : V c) (φ : basisIdx (S.bar c)) :
(b (S.bar c)).repr (S.conjEquiv v) φ
= star ((b c).repr v (Equiv.cast (S.barIdx_eq c) φ)) := k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cv:V cφ:basisIdx (S.bar c)⊢ ((b (S.bar c)).repr (S.conjEquiv v)) φ = star (((b c).repr v) ((Equiv.cast ⋯) φ))
k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cv:V cφ:basisIdx (S.bar c)⊢ ({ toFun := fun f => Finsupp.mapRange star ⋯ f, map_add' := ⋯, map_smul' := ⋯,
invFun := fun f => Finsupp.mapRange star ⋯ f, left_inv := ⋯, right_inv := ⋯ }
((b c).repr v))
((Equiv.cast ⋯).symm φ) =
star (((b c).repr v) ((Equiv.cast ⋯) φ))
All goals completed! 🐙k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cg:Gv:V c⊢ S.conjEquiv (((rep c) g) (∑ i, ((b c).repr v) i • (b c) i)) =
((rep (S.bar c)) g) (S.conjEquiv (∑ i, ((b c).repr v) i • (b c) i))
simp only [map_sum, map_smul, LinearEquiv.map_smulₛₗ, conjEquiv_basis, Equiv.cast_apply] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cg:Gv:V c⊢ ∑ x, (starRingEnd k) (((b c).repr v) x) • S.conjEquiv (((rep c) g) ((b c) x)) =
∑ x, (starRingEnd k) (((b c).repr v) x) • ((rep (S.bar c)) g) ((b (S.bar c)) (cast ⋯ x))
congr e_f k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cg:Gv:V c⊢ (fun x => (starRingEnd k) (((b c).repr v) x) • S.conjEquiv (((rep c) g) ((b c) x))) = fun x =>
(starRingEnd k) (((b c).repr v) x) • ((rep (S.bar c)) g) ((b (S.bar c)) (cast ⋯ x))
funext x e_f k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cg:Gv:V cx:basisIdx c⊢ (starRingEnd k) (((b c).repr v) x) • S.conjEquiv (((rep c) g) ((b c) x)) =
(starRingEnd k) (((b c).repr v) x) • ((rep (S.bar c)) g) ((b (S.bar c)) (cast ⋯ x))
congr 1 e_f.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cg:Gv:V cx:basisIdx c⊢ S.conjEquiv (((rep c) g) ((b c) x)) = ((rep (S.bar c)) g) ((b (S.bar c)) (cast ⋯ x))
generalize_proofs h1 h2 e_f.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cg:Gv:V cx:basisIdx ch1:RingHomInvPair (starRingEnd k) (starRingEnd k)h2:basisIdx c = basisIdx (S.bar c)⊢ S.conjEquiv (((rep c) g) ((b c) x)) = ((rep (S.bar c)) g) ((b (S.bar c)) (cast h2 x))
apply (b (S.bar c)).repr.injective e_f.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cg:Gv:V cx:basisIdx ch1:RingHomInvPair (starRingEnd k) (starRingEnd k)h2:basisIdx c = basisIdx (S.bar c)⊢ (b (S.bar c)).repr (S.conjEquiv (((rep c) g) ((b c) x))) =
(b (S.bar c)).repr (((rep (S.bar c)) g) ((b (S.bar c)) (cast h2 x)))
ext j' e_f.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cg:Gv:V cx:basisIdx ch1:RingHomInvPair (starRingEnd k) (starRingEnd k)h2:basisIdx c = basisIdx (S.bar c)j':basisIdx (S.bar c)⊢ ((b (S.bar c)).repr (S.conjEquiv (((rep c) g) ((b c) x)))) j' =
((b (S.bar c)).repr (((rep (S.bar c)) g) ((b (S.bar c)) (cast h2 x)))) j'
obtain ⟨j, rfl⟩ := (Equiv.cast (S.barIdx_eq c).symm).surjective j' e_f.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cg:Gv:V cx:basisIdx ch1:RingHomInvPair (starRingEnd k) (starRingEnd k)h2:basisIdx c = basisIdx (S.bar c)j:basisIdx c⊢ ((b (S.bar c)).repr (S.conjEquiv (((rep c) g) ((b c) x)))) ((Equiv.cast ⋯) j) =
((b (S.bar c)).repr (((rep (S.bar c)) g) ((b (S.bar c)) (cast h2 x)))) ((Equiv.cast ⋯) j)
simpa [conjEquiv_basis_repr] using congrArg star (S.conj_basis_equivariant c g x j) All goals completed! 🐙C. Conjugation of tensors
We define the conjugation map conjT through its action on components, record that it conjugates
components in place (componentMap_conjT), and show it is conj-semilinear and additive.
Reindex component labels of bar ∘ c back to c, slotwise via the cast barIdx_eq.
def componentReindex {n : ℕ} (c : Fin n → C) :
ComponentIdx (S := S.toTensorSpecies) (fun i => S.bar (c i)) ≃
ComponentIdx (S := S.toTensorSpecies) c :=
Equiv.piCongrRight fun i => Equiv.cast (S.barIdx_eq (c i))Conjugation of a tensor: conjugate the components and reindex the basis to the conjugate colours.
def conjT {n : ℕ} {c : Fin n → C} : S.Tensor c →ₛₗ[starRingEnd k]
S.Tensor (fun i => S.bar (c i)) where
toFun t := ofComponents (fun i => S.bar (c i))
(fun b => star (componentMap c t (S.componentReindex c b)))
map_add' t₁ t₂ := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct₁:S.Tensor ct₂:S.Tensor c⊢ ((ofComponents fun i => S.bar (c i)) fun b_1 => star ((componentMap c) (t₁ + t₂) ((S.componentReindex c) b_1))) =
((ofComponents fun i => S.bar (c i)) fun b_1 => star ((componentMap c) t₁ ((S.componentReindex c) b_1))) +
(ofComponents fun i => S.bar (c i)) fun b_1 => star ((componentMap c) t₂ ((S.componentReindex c) b_1))
apply componentMap_ext k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct₁:S.Tensor ct₂:S.Tensor c⊢ ∀ (b_1 : ComponentIdx fun i => S.bar (c i)),
(componentMap fun i => S.bar (c i))
((ofComponents fun i => S.bar (c i)) fun b_2 => star ((componentMap c) (t₁ + t₂) ((S.componentReindex c) b_2)))
b_1 =
(componentMap fun i => S.bar (c i))
(((ofComponents fun i => S.bar (c i)) fun b_2 => star ((componentMap c) t₁ ((S.componentReindex c) b_2))) +
(ofComponents fun i => S.bar (c i)) fun b_2 => star ((componentMap c) t₂ ((S.componentReindex c) b_2)))
b_1
intro b k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct₁:S.Tensor ct₂:S.Tensor cb:ComponentIdx fun i => S.bar (c i)⊢ (componentMap fun i => S.bar (c i))
((ofComponents fun i => S.bar (c i)) fun b => star ((componentMap c) (t₁ + t₂) ((S.componentReindex c) b))) b =
(componentMap fun i => S.bar (c i))
(((ofComponents fun i => S.bar (c i)) fun b => star ((componentMap c) t₁ ((S.componentReindex c) b))) +
(ofComponents fun i => S.bar (c i)) fun b => star ((componentMap c) t₂ ((S.componentReindex c) b)))
b
simp [map_add, Pi.add_apply, star_add] All goals completed! 🐙
map_smul' r t := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cr:kt:S.Tensor c⊢ ((ofComponents fun i => S.bar (c i)) fun b_1 => star ((componentMap c) (r • t) ((S.componentReindex c) b_1))) =
(starRingEnd k) r •
(ofComponents fun i => S.bar (c i)) fun b_1 => star ((componentMap c) t ((S.componentReindex c) b_1))
apply componentMap_ext k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cr:kt:S.Tensor c⊢ ∀ (b_1 : ComponentIdx fun i => S.bar (c i)),
(componentMap fun i => S.bar (c i))
((ofComponents fun i => S.bar (c i)) fun b_2 => star ((componentMap c) (r • t) ((S.componentReindex c) b_2)))
b_1 =
(componentMap fun i => S.bar (c i))
((starRingEnd k) r •
(ofComponents fun i => S.bar (c i)) fun b_2 => star ((componentMap c) t ((S.componentReindex c) b_2)))
b_1
intro b k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cr:kt:S.Tensor cb:ComponentIdx fun i => S.bar (c i)⊢ (componentMap fun i => S.bar (c i))
((ofComponents fun i => S.bar (c i)) fun b => star ((componentMap c) (r • t) ((S.componentReindex c) b))) b =
(componentMap fun i => S.bar (c i))
((starRingEnd k) r •
(ofComponents fun i => S.bar (c i)) fun b => star ((componentMap c) t ((S.componentReindex c) b)))
b
simp only [map_smul, Pi.smul_apply, smul_eq_mul, star_mul', componentMap_ofComponents] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cr:kt:S.Tensor cb:ComponentIdx fun i => S.bar (c i)⊢ star r * star ((componentMap c) t ((S.componentReindex c) b)) =
(starRingEnd k) r * star ((componentMap c) t ((S.componentReindex c) b))
rfl All goals completed! 🐙lemma conjT_apply {n : ℕ} {c : Fin n → C} (t : S.Tensor c) :
S.conjT t = ofComponents (fun i => S.bar (c i))
(fun b => star (componentMap c t (S.componentReindex c b))) :=
rfl
Components of a conjugated tensor: the star of the original components, reindexed.
@[simp] lemma componentMap_conjT {n : ℕ} {c : Fin n → C} (t : S.Tensor c)
(b : ComponentIdx (S := S.toTensorSpecies) (fun i => S.bar (c i))) :
componentMap (fun i => S.bar (c i)) (S.conjT t) b
= star (componentMap c t (S.componentReindex c b)) := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep b✝n:ℕc:Fin n → Ct:S.Tensor cb:ComponentIdx fun i => S.bar (c i)⊢ (componentMap fun i => S.bar (c i)) (S.conjT t) b = star ((componentMap c) t ((S.componentReindex c) b))
simp [conjT_apply, componentMap_ofComponents] All goals completed! 🐙lemma conjT_basis {n : ℕ} {c : Fin n → C} (i : ComponentIdx (S := S.toTensorSpecies) c) :
S.conjT (basis c i) = basis (fun i => S.bar (c i)) ((S.componentReindex c).symm i) := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx c⊢ S.conjT ((basis c) i) = (basis fun i => S.bar (c i)) ((S.componentReindex c).symm i)
apply componentMap_ext k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx c⊢ ∀ (b_1 : ComponentIdx fun i => S.bar (c i)),
(componentMap fun i => S.bar (c i)) (S.conjT ((basis c) i)) b_1 =
(componentMap fun i => S.bar (c i)) ((basis fun i => S.bar (c i)) ((S.componentReindex c).symm i)) b_1
intro b k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)⊢ (componentMap fun i => S.bar (c i)) (S.conjT ((basis c) i)) b =
(componentMap fun i => S.bar (c i)) ((basis fun i => S.bar (c i)) ((S.componentReindex c).symm i)) b
simp [componentMap_conjT] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)⊢ star ((componentMap c) ((basis c) i) ((S.componentReindex c) b)) =
(componentMap fun i => S.bar (c i)) ((basis fun i => S.bar (c i)) ((S.componentReindex c).symm i)) b
simp only [componentMap_eq_repr, Basis.repr_self, componentReindex, Finsupp.single_apply] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)⊢ star (if i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) b then 1 else 0) =
if (Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i = b then 1 else 0
split_ifs with h h2 h3 pos k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)h:i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) bh2:(Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i = b⊢ star 1 = 1neg k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)h:i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) bh2:¬(Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i = b⊢ star 1 = 0pos k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)h:¬i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) bh3:(Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i = b⊢ star 0 = 1neg k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)h:¬i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) bh3:¬(Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i = b⊢ star 0 = 0
· pos k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)h:i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) bh2:(Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i = b⊢ star 1 = 1 simp All goals completed! 🐙
· neg k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)h:i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) bh2:¬(Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i = b⊢ star 1 = 0 subst h neg k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cb:ComponentIdx fun i => S.bar (c i)h2:¬(Equiv.piCongrRight fun i => Equiv.cast ⋯).symm ((Equiv.piCongrRight fun i => Equiv.cast ⋯) b) = b⊢ star 1 = 0
simp at h2 All goals completed! 🐙
· pos k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)h:¬i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) bh3:(Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i = b⊢ star 0 = 1 subst h3 pos k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx ch:¬i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) ((Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i)⊢ star 0 = 1
simp at h All goals completed! 🐙
· neg k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:ComponentIdx cb:ComponentIdx fun i => S.bar (c i)h:¬i = (Equiv.piCongrRight fun i => Equiv.cast ⋯) bh3:¬(Equiv.piCongrRight fun i => Equiv.cast ⋯).symm i = b⊢ star 0 = 0 simp All goals completed! 🐙
lemma conjT_pure {n : ℕ} {c : Fin n → C} (p : Tensor.Pure S.toTensorSpecies c) :
S.conjT p.toTensor = Pure.toTensor (fun i => S.conjEquiv (p i)) := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies c⊢ S.conjT p.toTensor = Pure.toTensor fun i => S.conjEquiv (p i)
apply componentMap_ext k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies c⊢ ∀ (b_1 : ComponentIdx fun i => S.bar (c i)),
(componentMap fun i => S.bar (c i)) (S.conjT p.toTensor) b_1 =
(componentMap fun i => S.bar (c i)) (Pure.toTensor fun i => S.conjEquiv (p i)) b_1
intro φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies cφ:ComponentIdx fun i => S.bar (c i)⊢ (componentMap fun i => S.bar (c i)) (S.conjT p.toTensor) φ =
(componentMap fun i => S.bar (c i)) (Pure.toTensor fun i => S.conjEquiv (p i)) φ
simp only [componentMap_conjT, componentMap_pure, Pure.componentMap_apply] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies cφ:ComponentIdx fun i => S.bar (c i)⊢ star (p.component ((S.componentReindex c) φ)) = Pure.component (fun i => S.conjEquiv (p i)) φ
simp [Pure.component] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies cφ:ComponentIdx fun i => S.bar (c i)⊢ ∏ x, star (((b (c x)).repr (p x)) ((S.componentReindex c) φ x)) =
∏ x, ((b (S.bar (c x))).repr (S.conjEquiv (p x))) (φ x)
congr e_f k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies cφ:ComponentIdx fun i => S.bar (c i)⊢ (fun x => star (((b (c x)).repr (p x)) ((S.componentReindex c) φ x))) = fun x =>
((b (S.bar (c x))).repr (S.conjEquiv (p x))) (φ x)
funext x e_f k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies cφ:ComponentIdx fun i => S.bar (c i)x:Fin n⊢ star (((b (c x)).repr (p x)) ((S.componentReindex c) φ x)) = ((b (S.bar (c x))).repr (S.conjEquiv (p x))) (φ x)
rw [S.conjEquiv_basis_repr e_f k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies cφ:ComponentIdx fun i => S.bar (c i)x:Fin n⊢ star (((b (c x)).repr (p x)) ((S.componentReindex c) φ x)) = star (((b (c x)).repr (p x)) ((Equiv.cast ⋯) (φ x))) e_f k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies cφ:ComponentIdx fun i => S.bar (c i)x:Fin n⊢ star (((b (c x)).repr (p x)) ((S.componentReindex c) φ x)) = star (((b (c x)).repr (p x)) ((Equiv.cast ⋯) (φ x)))] e_f k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Tensor.Pure S.toTensorSpecies cφ:ComponentIdx fun i => S.bar (c i)x:Fin n⊢ star (((b (c x)).repr (p x)) ((S.componentReindex c) φ x)) = star (((b (c x)).repr (p x)) ((Equiv.cast ⋯) (φ x)))
rfl All goals completed! 🐙
Componentwise criterion for conjT t = permT σ h t'. The conjugate of t equals the
recolouring permT σ h t' exactly when, at every component, the star-conjugated reindexed
component of t matches the corresponding component of permT σ h t'. This packages the
componentMap_conjT expansion and the repr/componentMap bridge that the reality and Hermiticity
proofs downstream would otherwise repeat by hand; the caller is left only with the species-specific
permutation bookkeeping on the right-hand side.
lemma conjT_eq_permT_iff {n m : ℕ} {c : Fin n → C} {c' : Fin m → C}
{σ : Fin n → Fin m} (h : IsReindexing c' (fun i => S.bar (c i)) σ)
(t : S.Tensor c) (t' : S.Tensor c') :
S.conjT t = permT σ h t' ↔
∀ φ : ComponentIdx (S := S.toTensorSpecies) (fun i => S.bar (c i)),
star (componentMap c t (S.componentReindex c φ))
= (Tensor.basis (fun i => S.bar (c i))).repr (permT σ h t') φ := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'⊢ S.conjT t = (permT σ h) t' ↔
∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φ
constructor mp k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'⊢ S.conjT t = (permT σ h) t' →
∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φmpr k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'⊢ (∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φ) →
S.conjT t = (permT σ h) t'
· mp k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'⊢ S.conjT t = (permT σ h) t' →
∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φ intro H φ mp k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:S.conjT t = (permT σ h) t'φ:ComponentIdx fun i => S.bar (c i)⊢ star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φ
rw [← H, mp k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:S.conjT t = (permT σ h) t'φ:ComponentIdx fun i => S.bar (c i)⊢ star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr (S.conjT t)) φ All goals completed! 🐙 ← componentMap_eq_repr, mp k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:S.conjT t = (permT σ h) t'φ:ComponentIdx fun i => S.bar (c i)⊢ star ((componentMap c) t ((S.componentReindex c) φ)) = (componentMap fun i => S.bar (c i)) (S.conjT t) φ All goals completed! 🐙 componentMap_conjT mp k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:S.conjT t = (permT σ h) t'φ:ComponentIdx fun i => S.bar (c i)⊢ star ((componentMap c) t ((S.componentReindex c) φ)) = star ((componentMap c) t ((S.componentReindex c) φ)) All goals completed! 🐙] All goals completed! 🐙
· mpr k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'⊢ (∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φ) →
S.conjT t = (permT σ h) t' intro H mpr k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φ⊢ S.conjT t = (permT σ h) t'
apply componentMap_ext mpr k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φ⊢ ∀ (b_1 : ComponentIdx fun i => S.bar (c i)),
(componentMap fun i => S.bar (c i)) (S.conjT t) b_1 = (componentMap fun i => S.bar (c i)) ((permT σ h) t') b_1
intro φ mpr k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φφ:ComponentIdx fun i => S.bar (c i)⊢ (componentMap fun i => S.bar (c i)) (S.conjT t) φ = (componentMap fun i => S.bar (c i)) ((permT σ h) t') φ
rw [componentMap_conjT mpr k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φφ:ComponentIdx fun i => S.bar (c i)⊢ star ((componentMap c) t ((S.componentReindex c) φ)) = (componentMap fun i => S.bar (c i)) ((permT σ h) t') φ mpr k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φφ:ComponentIdx fun i => S.bar (c i)⊢ star ((componentMap c) t ((S.componentReindex c) φ)) = (componentMap fun i => S.bar (c i)) ((permT σ h) t') φ]mpr k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕm:ℕc:Fin n → Cc':Fin m → Cσ:Fin n → Fin mh:IsReindexing c' (fun i => S.bar (c i)) σt:S.Tensor ct':S.Tensor c'H:∀ (φ : ComponentIdx fun i => S.bar (c i)),
star ((componentMap c) t ((S.componentReindex c) φ)) = ((basis fun i => S.bar (c i)).repr ((permT σ h) t')) φφ:ComponentIdx fun i => S.bar (c i)⊢ star ((componentMap c) t ((S.componentReindex c) φ)) = (componentMap fun i => S.bar (c i)) ((permT σ h) t') φ
exact H φ All goals completed! 🐙lemma conjT_equivariant {n : ℕ} {c : Fin n → C} (g : G) (t : S.Tensor c) :
S.conjT (g • t) = g • S.conjT t := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cg:Gt:S.Tensor c⊢ S.conjT (g • t) = g • S.conjT t
induction' t using induction_on_basis with b r t ht t1 t2 ht1 ht2 h k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cg:Gb:ComponentIdx c⊢ S.conjT (g • (basis c) b) = g • S.conjT ((basis c) b)hzero k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cg:G⊢ S.conjT (g • 0) = g • S.conjT 0hsmul k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cg:Gr:kt:S.Tensor cht:S.conjT (g • t) = g • S.conjT t⊢ S.conjT (g • r • t) = g • S.conjT (r • t)hadd k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cg:Gt1:S.Tensor ct2:S.Tensor cht1:S.conjT (g • t1) = g • S.conjT t1ht2:S.conjT (g • t2) = g • S.conjT t2⊢ S.conjT (g • (t1 + t2)) = g • S.conjT (t1 + t2)
· h k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cg:Gb:ComponentIdx c⊢ S.conjT (g • (basis c) b) = g • S.conjT ((basis c) b) simp [basis_apply, actionT_pure, conjT_pure, Pure.actionP_eq, conjEquiv_equivariant] All goals completed! 🐙
· hzero k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cg:G⊢ S.conjT (g • 0) = g • S.conjT 0 simp All goals completed! 🐙
· hsmul k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cg:Gr:kt:S.Tensor cht:S.conjT (g • t) = g • S.conjT t⊢ S.conjT (g • r • t) = g • S.conjT (r • t) simp [LinearMap.map_smulₛₗ, actionT_smul, ht] All goals completed! 🐙
· hadd k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cg:Gt1:S.Tensor ct2:S.Tensor cht1:S.conjT (g • t1) = g • S.conjT t1ht2:S.conjT (g • t2) = g • S.conjT t2⊢ S.conjT (g • (t1 + t2)) = g • S.conjT (t1 + t2) simp [ht1, ht2] All goals completed! 🐙D. The involution law
We prove conjT_conjT: conjugating a tensor twice returns it, up to the identity recolouring
bar ∘ bar ∘ c = c. The supporting lemmas reconcile the iterated basis-label casts.
Undoing the two cast reindexings (at bar c then at c) on a label of the doubly-conjugated
colour returns the bar_involution cast. Free from barIdx_eq by cast_cast + proof
irrelevance, with no coherence field needed.
private lemma barIdx_involutive_symm (c : C) (y : basisIdx (S.bar (S.bar c))) :
Equiv.cast (S.barIdx_eq c) (Equiv.cast (S.barIdx_eq (S.bar c)) y)
= basisIdxCongr (S.bar_involution c) y := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bc:Cy:basisIdx (S.bar (S.bar c))⊢ (Equiv.cast ⋯) ((Equiv.cast ⋯) y) = (basisIdxCongr ⋯) y
simp only [basisIdxCongr, Equiv.cast_apply, cast_cast] All goals completed! 🐙
The identity permutation satisfies IsReindexing from c to bar ∘ bar ∘ c, as bar is an
involution.
lemma isReindexing_bar_bar {n : ℕ} (c : Fin n → C) :
IsReindexing c (fun i => S.bar (S.bar (c i))) (id : Fin n → Fin n) :=
⟨Function.bijective_id, fun i => (S.bar_involution (c i)).symm⟩
Conjugation is an involution: conjugating twice returns the original tensor, up to the
bar_involution recolouring (the identity permutation permT).
lemma conjT_conjT {n : ℕ} {c : Fin n → C} (t : S.Tensor c) :
S.conjT (S.conjT t)
= permT id (S.isReindexing_bar_bar c) t := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor c⊢ S.conjT (S.conjT t) = (permT id ⋯) t
apply componentMap_ext k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor c⊢ ∀ (b_1 : ComponentIdx fun i => S.bar (S.bar (c i))),
(componentMap fun i => S.bar (S.bar (c i))) (S.conjT (S.conjT t)) b_1 =
(componentMap fun i => S.bar (S.bar (c i))) ((permT id ⋯) t) b_1
intro φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap fun i => S.bar (S.bar (c i))) (S.conjT (S.conjT t)) φ =
(componentMap fun i => S.bar (S.bar (c i))) ((permT id ⋯) t) φ
rw [componentMap_conjT, k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ star ((componentMap fun i => S.bar (c i)) (S.conjT t) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap fun i => S.bar (S.bar (c i))) ((permT id ⋯) t) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap fun i => S.bar (S.bar (c i))) ((permT id ⋯) t) φ componentMap_conjT, k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ star (star ((componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)))) =
(componentMap fun i => S.bar (S.bar (c i))) ((permT id ⋯) t) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap fun i => S.bar (S.bar (c i))) ((permT id ⋯) t) φ star_star k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap fun i => S.bar (S.bar (c i))) ((permT id ⋯) t) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap fun i => S.bar (S.bar (c i))) ((permT id ⋯) t) φ] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap fun i => S.bar (S.bar (c i))) ((permT id ⋯) t) φ
rw [componentMap_eq_repr (fun i => S.bar (S.bar (c i))), k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
((basis fun i => S.bar (S.bar (c i))).repr ((permT id ⋯) t)) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap c) t fun i => (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i)) permT_basis_repr_symm_apply, k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
((basis c).repr t) fun i => (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i)) k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap c) t fun i => (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i))
← componentMap_eq_repr c k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap c) t fun i => (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i)) k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap c) t fun i => (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i))] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (componentMap c) t ((S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ)) =
(componentMap c) t fun i => (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i))
refine congrArg (fun ψ => (componentMap c) t ψ) ?_ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))⊢ (S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ) = fun i =>
(basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i))
funext i k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))i:Fin n⊢ (S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ) i = (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i))
have hinv : (IsReindexing.inv id (S.isReindexing_bar_bar c)) i = i :=
IsReindexing.inv_apply_apply id _ i k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))i:Fin nhinv:IsReindexing.inv id ⋯ i = i⊢ (S.componentReindex c) ((S.componentReindex fun i => S.bar (c i)) φ) i = (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i))
show Equiv.cast (S.barIdx_eq (c i)) (Equiv.cast (S.barIdx_eq (S.bar (c i))) (φ i)) = _ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))i:Fin nhinv:IsReindexing.inv id ⋯ i = i⊢ (Equiv.cast ⋯) ((Equiv.cast ⋯) (φ i)) = (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i))
rw [S.barIdx_involutive_symm k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))i:Fin nhinv:IsReindexing.inv id ⋯ i = i⊢ (basisIdxCongr ⋯) (φ i) = (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i)) k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))i:Fin nhinv:IsReindexing.inv id ⋯ i = i⊢ (basisIdxCongr ⋯) (φ i) = (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i))] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))i:Fin nhinv:IsReindexing.inv id ⋯ i = i⊢ (basisIdxCongr ⋯) (φ i) = (basisIdxCongr ⋯) (φ (IsReindexing.inv id ⋯ i))
exact basisIdxCongr_heq_arg _ _ (by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))i:Fin nhinv:IsReindexing.inv id ⋯ i = i⊢ φ i ≍ φ (IsReindexing.inv id ⋯ i) rw [hinv k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ct:S.Tensor cφ:ComponentIdx fun i => S.bar (S.bar (c i))i:Fin nhinv:IsReindexing.inv id ⋯ i = i⊢ φ i ≍ φ i All goals completed! 🐙] All goals completed! 🐙)E. Commutation with contraction
We prove conjT_contrT: conjugation commutes with contracting two dual-coloured slots. The
contraction expands as a sum over the contracted index pair, and conj_contrComm matches the
conjugated coefficients to those on the bar-images.
Slots with dual colour in c have dual colour in bar ∘ c, as bar commutes with τ.
lemma contrCond_bar {n : ℕ} {c : Fin (n + 1 + 1) → C} {i j : Fin (n + 1 + 1)}
(h : i ≠ j ∧ S.τ (c i) = c j) :
i ≠ j ∧ S.τ ((S.bar ∘ c) i) = (S.bar ∘ c) j :=
⟨h.1, by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c j⊢ S.τ ((S.bar ∘ c) i) = (S.bar ∘ c) j rw [Function.comp_apply, k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c j⊢ S.τ (S.bar (c i)) = (S.bar ∘ c) j All goals completed! 🐙 Function.comp_apply, k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c j⊢ S.τ (S.bar (c i)) = S.bar (c j) All goals completed! 🐙 ← S.bar_tau, k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c j⊢ S.bar (S.τ (c i)) = S.bar (c j) All goals completed! 🐙 h.2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c j⊢ S.bar (c j) = S.bar (c j) All goals completed! 🐙] All goals completed! 🐙⟩
Conjugation commutes with contraction: conjugating a contracted tensor equals contracting the
conjugate on the bar-images of the same two slots.
lemma conjT_contrT {n : ℕ} {c : Fin (n + 1 + 1) → C} (i j : Fin (n + 1 + 1))
(h : i ≠ j ∧ S.τ (c i) = c j) (t : S.Tensor c) :
S.conjT (contrT n i j h t)
= contrT n i j (S.contrCond_bar h) (S.conjT t) := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor c⊢ S.conjT ((contrT n i j h) t) = (contrT n i j ⋯) (S.conjT t)
apply componentMap_ext k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor c⊢ ∀ (b_1 : ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)),
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) (S.conjT ((contrT n i j h) t)) b_1 =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) b_1
intro φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)⊢ (componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) (S.conjT ((contrT n i j h) t)) φ =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) φ
rw [componentMap_conjT, k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)⊢ star ((componentMap (c ∘ i.succSuccAbove j)) ((contrT n i j h) t) ((S.componentReindex (c ∘ i.succSuccAbove j)) φ)) =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) φ componentMap_eq_repr, k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)⊢ star (((basis (c ∘ i.succSuccAbove j)).repr ((contrT n i j h) t)) ((S.componentReindex (c ∘ i.succSuccAbove j)) φ)) =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) φ Tensor.contrT_basis_repr_apply k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) φ] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) φ
have hrhs := Tensor.contrT_basis_repr_apply (S := S.toTensorSpecies) (c := fun i => S.bar (c i))
(i := i) (j := j) (S.contrCond_bar h) (S.conjT t) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
(componentMap fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)) ((contrT n i j ⋯) (S.conjT t)) φ
rw [componentMap_eq_repr k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
((basis fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)).repr ((contrT n i j ⋯) (S.conjT t))) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
((basis fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)).repr ((contrT n i j ⋯) (S.conjT t))) φ] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
((basis fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)).repr ((contrT n i j ⋯) (S.conjT t))) φ
refine Eq.trans ?_ hrhs.symm k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))⊢ star
(∑ b',
((basis c).repr t) ↑b' * (S.contr (c i)) ((b (c i)) (↑b' i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑b' j)))) =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))
rw [star_sum k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))⊢ ∑ x,
star (((basis c).repr t) ↑x * (S.contr (c i)) ((b (c i)) (↑x i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑x j)))) =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j))) k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))⊢ ∑ x,
star (((basis c).repr t) ↑x * (S.contr (c i)) ((b (c i)) (↑x i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑x j)))) =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))⊢ ∑ x,
star (((basis c).repr t) ↑x * (S.contr (c i)) ((b (c i)) (↑x i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑x j)))) =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))
-- `componentReindex` carries the `bar`-side contraction section onto the `c`-side one: it
-- commutes with `dropPair` definitionally, so the section bijection is just `subtypeEquiv`.
have hmem : ∀ a : ComponentIdx (S := S.toTensorSpecies) (S.bar ∘ c),
a ∈ ComponentIdx.DropPairSection φ ↔
S.componentReindex c a ∈
ComponentIdx.DropPairSection (S.componentReindex (c ∘ i.succSuccAbove j) φ) := by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor c⊢ S.conjT ((contrT n i j h) t) = (contrT n i j ⋯) (S.conjT t) k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSection⊢ ∑ x,
star (((basis c).repr t) ↑x * (S.contr (c i)) ((b (c i)) (↑x i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑x j)))) =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))
intro a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))a:ComponentIdx (S.bar ∘ c)⊢ a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSection k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSection⊢ ∑ x,
star (((basis c).repr t) ↑x * (S.contr (c i)) ((b (c i)) (↑x i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑x j)))) =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))
simp only [ComponentIdx.DropPairSection, Finset.mem_filter, Finset.mem_univ, true_and] k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))a:ComponentIdx (S.bar ∘ c)⊢ ComponentIdx.dropPair i j a = φ ↔
ComponentIdx.dropPair i j ((S.componentReindex c) a) = (S.componentReindex (c ∘ i.succSuccAbove j)) φ k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSection⊢ ∑ x,
star (((basis c).repr t) ↑x * (S.contr (c i)) ((b (c i)) (↑x i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑x j)))) =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))
exact (Equiv.apply_eq_iff_eq (S.componentReindex (c ∘ i.succSuccAbove j))).symm k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSection⊢ ∑ x,
star (((basis c).repr t) ↑x * (S.contr (c i)) ((b (c i)) (↑x i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑x j)))) =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j))) k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSection⊢ ∑ x,
star (((basis c).repr t) ↑x * (S.contr (c i)) ((b (c i)) (↑x i) ⊗ₜ[k] (b (S.τ (c i))) ((basisIdxCongr ⋯) (↑x j)))) =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))
refine (Finset.sum_equiv (Equiv.subtypeEquiv (S.componentReindex c) hmem)
?_ ?_).symm refine_1 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSection⊢ ∀ (i_1 : ↥φ.DropPairSection), i_1 ∈ Finset.univ ↔ ((S.componentReindex c).subtypeEquiv hmem) i_1 ∈ Finset.univrefine_2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSection⊢ ∀ i_1 ∈ Finset.univ,
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑i_1 *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑i_1 i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑i_1 j))) =
star
(((basis c).repr t) ↑(((S.componentReindex c).subtypeEquiv hmem) i_1) *
(S.contr (c i))
((b (c i)) (↑(((S.componentReindex c).subtypeEquiv hmem) i_1) i) ⊗ₜ[k]
(b (S.τ (c i))) ((basisIdxCongr ⋯) (↑(((S.componentReindex c).subtypeEquiv hmem) i_1) j))))
· refine_1 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSection⊢ ∀ (i_1 : ↥φ.DropPairSection), i_1 ∈ Finset.univ ↔ ((S.componentReindex c).subtypeEquiv hmem) i_1 ∈ Finset.univ exact fun _ => iff_of_true (Finset.mem_attach _ _) (Finset.mem_attach _ _) All goals completed! 🐙
intro b'' _ refine_2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ ((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b'' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
star
(((basis c).repr t) ↑(((S.componentReindex c).subtypeEquiv hmem) b'') *
(S.contr (c i))
((b (c i)) (↑(((S.componentReindex c).subtypeEquiv hmem) b'') i) ⊗ₜ[k]
(b (S.τ (c i))) ((basisIdxCongr ⋯) (↑(((S.componentReindex c).subtypeEquiv hmem) b'') j))))
simp only [Equiv.subtypeEquiv_apply] refine_2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ ((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b'' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
star
(((basis c).repr t) ((S.componentReindex c) ↑b'') *
(S.contr (c i))
((b (c i)) ((S.componentReindex c) (↑b'') i) ⊗ₜ[k]
(b (S.τ (c i))) ((basisIdxCongr ⋯) ((S.componentReindex c) (↑b'') j))))
erw [← componentMap_eq_repr (S.bar ∘ c), refine_2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (componentMap (S.bar ∘ c)) (S.conjT t) ↑b'' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
star
(((basis c).repr t) ((S.componentReindex c) ↑b'') *
(S.contr (c i))
((b (c i)) ((S.componentReindex c) (↑b'') i) ⊗ₜ[k]
(b (S.τ (c i))) ((basisIdxCongr ⋯) ((S.componentReindex c) (↑b'') j)))) componentMap_conjT, refine_2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ star ((componentMap c) t ((S.componentReindex c) ↑b'')) *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
star
(((basis c).repr t) ((S.componentReindex c) ↑b'') *
(S.contr (c i))
((b (c i)) ((S.componentReindex c) (↑b'') i) ⊗ₜ[k]
(b (S.τ (c i))) ((basisIdxCongr ⋯) ((S.componentReindex c) (↑b'') j)))) componentMap_eq_repr c t, refine_2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ star (((basis c).repr t) ((S.componentReindex c) ↑b'')) *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
star
(((basis c).repr t) ((S.componentReindex c) ↑b'') *
(S.contr (c i))
((b (c i)) ((S.componentReindex c) (↑b'') i) ⊗ₜ[k]
(b (S.τ (c i))) ((basisIdxCongr ⋯) ((S.componentReindex c) (↑b'') j))))
star_mul' refine_2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ star (((basis c).repr t) ((S.componentReindex c) ↑b'')) *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
star (((basis c).repr t) ((S.componentReindex c) ↑b'')) *
star
((S.contr (c i))
((b (c i)) ((S.componentReindex c) (↑b'') i) ⊗ₜ[k]
(b (S.τ (c i))) ((basisIdxCongr ⋯) ((S.componentReindex c) (↑b'') j))))] refine_2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ star (((basis c).repr t) ((S.componentReindex c) ↑b'')) *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
star (((basis c).repr t) ((S.componentReindex c) ↑b'')) *
star
((S.contr (c i))
((b (c i)) ((S.componentReindex c) (↑b'') i) ⊗ₜ[k]
(b (S.τ (c i))) ((basisIdxCongr ⋯) ((S.componentReindex c) (↑b'') j))))
congr 1 refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
star
((S.contr (c i))
((b (c i)) ((S.componentReindex c) (↑b'') i) ⊗ₜ[k]
(b (S.τ (c i))) ((basisIdxCongr ⋯) ((S.componentReindex c) (↑b'') j))))
rw [S.conj_contrComm (c i) ((S.componentReindex c b''.1) i)
(basisIdxCongr (by k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ c j = S.τ (c i) refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k]
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j)))))) rw [h.2 k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ c j = c j All goals completed! 🐙refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k]
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j))))))] All goals completed! 🐙refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k]
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j))))))) ((S.componentReindex c b''.1) j)),
show (S.componentReindex c b''.1) i = Equiv.cast (S.barIdx_eq (c i)) (b''.1 i) from rfl, refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) ((Equiv.cast ⋯).symm ((Equiv.cast ⋯) (↑b'' i))) ⊗ₜ[k]
(b (S.τ (S.bar (c i))))
((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((S.componentReindex c) (↑b'') j)))))refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k]
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j))))))
show (S.componentReindex c b''.1) j = Equiv.cast (S.barIdx_eq (c j)) (b''.1 j) from rfl, refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) ((Equiv.cast ⋯).symm ((Equiv.cast ⋯) (↑b'' i))) ⊗ₜ[k]
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j))))))refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k]
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j))))))
Equiv.symm_apply_apply refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k]
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j))))))refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k]
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j))))))]refine_2.e_a k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j))) =
(S.contr (S.bar (c i)))
((b (S.bar (c i))) (↑b'' i) ⊗ₜ[k]
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j))))))
congr 2 e_n k:Typeinst✝⁶:CommRing kinst✝⁵:StarRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:ConjTensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)h:i ≠ j ∧ S.τ (c i) = c jt:S.Tensor cφ:ComponentIdx fun i_1 => S.bar ((c ∘ i.succSuccAbove j) i_1)hrhs:((basis ((fun i => S.bar (c i)) ∘ i.succSuccAbove j)).repr ((contrT n i j ⋯) (S.conjT t))) φ =
∑ b',
((basis fun i => S.bar (c i)).repr (S.conjT t)) ↑b' *
(S.contr (S.bar (c i))) ((b (S.bar (c i))) (↑b' i) ⊗ₜ[k] (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b' j)))hmem:∀ (a : ComponentIdx (S.bar ∘ c)),
a ∈ φ.DropPairSection ↔ (S.componentReindex c) a ∈ ((S.componentReindex (c ∘ i.succSuccAbove j)) φ).DropPairSectionb'':↥φ.DropPairSectiona✝:b'' ∈ Finset.univ⊢ (b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) (↑b'' j)) =
(b (S.τ (S.bar (c i)))) ((basisIdxCongr ⋯) ((Equiv.cast ⋯).symm ((basisIdxCongr ⋯) ((Equiv.cast ⋯) (↑b'' j)))))
exact congrArg (b (S.τ (S.bar (c i)))) (basisIdxCongr_heq_arg _ _
(HEq.symm ((cast_heq _ _).trans ((cast_heq _ _).trans (cast_heq _ _))))) All goals completed! 🐙F. Hermitian pairings
A metric slot pairs a colour c with its conjugate bar c. IsHermitian is the structural form of
g_{IJ̄} = conj g_{JĪ}: conjugating and swapping the two slots through conjEquiv returns g's
star. Because V c and V (bar c) are genuinely different modules this is the honest
conjugate-transpose, not a bare g = g.flip. The condition is fixed here as IsHermitian; a
downstream metric layer instantiates it for a concrete pairing.