Imports
/- Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Joseph Tooby-Smith -/ module public import Physlib.Relativity.Tensors.Contraction.Basic public import Physlib.Relativity.Tensors.Product

The interaction of contractions and products

@[expose] public sectionattribute [-simp] LinearEquiv.cast_apply

Products and contractions

lemma Pure.contrPCoeff_natAdd {n n1 : } {c : Fin (n + 1 + 1) C} {c1 : Fin n1 C} (i j : Fin (n + 1 + 1)) (hij : i j S.τ (c i) = c j) (p : Pure S c) (p1 : Pure S c1) : contrPCoeff (Fin.natAdd n1 i) (Fin.natAdd n1 j) (k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j) All goals completed! 🐙) (p1.prodP p) = contrPCoeff i j hij p := k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1contrPCoeff (Fin.natAdd n1 i) (Fin.natAdd n1 j) (p1.prodP p) = contrPCoeff i j hij p k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1(S.contr (Fin.append c1 c (Fin.natAdd n1 i))) ((LinearEquiv.cast ) (p i) ⊗ₜ[k] (LinearEquiv.cast ) ((LinearEquiv.cast ) (p j))) = (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ) (p j)) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hb:c i = Fin.append c1 c (Fin.natAdd n1 i)hc:Fin.append c1 c (Fin.natAdd n1 j) = S.τ (Fin.append c1 c (Fin.natAdd n1 i))hd:c j = Fin.append c1 c (Fin.natAdd n1 j)he:c j = S.τ (c i)(S.contr (Fin.append c1 c (Fin.natAdd n1 i))) ((LinearEquiv.cast hb) (p i) ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) (p j))) = (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast he) (p j)) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hb:c i = Fin.append c1 c (Fin.natAdd n1 i)hc:Fin.append c1 c (Fin.natAdd n1 j) = S.τ (Fin.append c1 c (Fin.natAdd n1 i))hd:c j = Fin.append c1 c (Fin.natAdd n1 j)he:c j = S.τ (c i)pi:V (c i)(S.contr (Fin.append c1 c (Fin.natAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) (p j))) = (S.contr (c i)) (pi ⊗ₜ[k] (LinearEquiv.cast he) (p j)) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hb:c i = Fin.append c1 c (Fin.natAdd n1 i)hc:Fin.append c1 c (Fin.natAdd n1 j) = S.τ (Fin.append c1 c (Fin.natAdd n1 i))hd:c j = Fin.append c1 c (Fin.natAdd n1 j)he:c j = S.τ (c i)pi:V (c i)pj:V (c j)(S.contr (Fin.append c1 c (Fin.natAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr (c i)) (pi ⊗ₜ[k] (LinearEquiv.cast he) pj) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)p:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hc:Fin.append c1 c (Fin.natAdd n1 j) = S.τ (Fin.append c1 c (Fin.natAdd n1 i))hd:c j = Fin.append c1 c (Fin.natAdd n1 j)pj:V (c j)ci:Chij:i j S.τ ci = c jhb:ci = Fin.append c1 c (Fin.natAdd n1 i)he:c j = S.τ cipi:V ci(S.contr (Fin.append c1 c (Fin.natAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr ci) (pi ⊗ₜ[k] (LinearEquiv.cast he) pj) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)p:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hc:Fin.append c1 c (Fin.natAdd n1 j) = S.τ (Fin.append c1 c (Fin.natAdd n1 i))ci:Chb:ci = Fin.append c1 c (Fin.natAdd n1 i)pi:V cicj:Chd:cj = Fin.append c1 c (Fin.natAdd n1 j)pj:V cjhij:i j S.τ ci = cjhe:cj = S.τ ci(S.contr (Fin.append c1 c (Fin.natAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr ci) (pi ⊗ₜ[k] (LinearEquiv.cast he) pj) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)p:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hc:Fin.append c1 c (Fin.natAdd n1 j) = S.τ (Fin.append c1 c (Fin.natAdd n1 i))ci:Chb:ci = Fin.append c1 c (Fin.natAdd n1 i)pi:V cihd:S.τ ci = Fin.append c1 c (Fin.natAdd n1 j)pj:V (S.τ ci)hij:i j S.τ ci = S.τ ci(S.contr (Fin.append c1 c (Fin.natAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr ci) (pi ⊗ₜ[k] (LinearEquiv.cast ) pj) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)p:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hc:Fin.append c1 c (Fin.natAdd n1 j) = S.τ (Fin.append c1 c (Fin.natAdd n1 i))pi:V (Fin.append c1 c (Fin.natAdd n1 i))hd:S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)pj:V (S.τ (Fin.append c1 c (Fin.natAdd n1 i)))hij:i j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = S.τ (Fin.append c1 c (Fin.natAdd n1 i))(S.contr (Fin.append c1 c (Fin.natAdd n1 i))) ((LinearEquiv.cast ) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr (Fin.append c1 c (Fin.natAdd n1 i))) (pi ⊗ₜ[k] (LinearEquiv.cast ) pj) All goals completed! 🐙lemma Pure.contrPCoeff_castAdd {n n1 : } {c : Fin (n + 1 + 1) C} {c1 : Fin n1 C} (i j : Fin (n + 1 + 1)) (hij : i j S.τ (c i) = c j) (p : Pure S c) (p1 : Pure S c1) : contrPCoeff (Fin.castAdd n1 i) (Fin.castAdd n1 j) (k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1Fin.castAdd n1 i Fin.castAdd n1 j S.τ (Fin.append c c1 (Fin.castAdd n1 i)) = Fin.append c c1 (Fin.castAdd n1 j) All goals completed! 🐙) (p.prodP p1) = contrPCoeff i j hij p := k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1contrPCoeff (Fin.castAdd n1 i) (Fin.castAdd n1 j) (p.prodP p1) = contrPCoeff i j hij p k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1(S.contr (Fin.append c c1 (Fin.castAdd n1 i))) ((LinearEquiv.cast ) (p i) ⊗ₜ[k] (LinearEquiv.cast ) ((LinearEquiv.cast ) (p j))) = (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ) (p j)) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hb:c i = Fin.append c c1 (Fin.castAdd n1 i)hc:Fin.append c c1 (Fin.castAdd n1 j) = S.τ (Fin.append c c1 (Fin.castAdd n1 i))hd:c j = Fin.append c c1 (Fin.castAdd n1 j)he:c j = S.τ (c i)(S.contr (Fin.append c c1 (Fin.castAdd n1 i))) ((LinearEquiv.cast hb) (p i) ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) (p j))) = (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast he) (p j)) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hb:c i = Fin.append c c1 (Fin.castAdd n1 i)hc:Fin.append c c1 (Fin.castAdd n1 j) = S.τ (Fin.append c c1 (Fin.castAdd n1 i))hd:c j = Fin.append c c1 (Fin.castAdd n1 j)he:c j = S.τ (c i)pi:V (c i)(S.contr (Fin.append c c1 (Fin.castAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) (p j))) = (S.contr (c i)) (pi ⊗ₜ[k] (LinearEquiv.cast he) (p j)) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hb:c i = Fin.append c c1 (Fin.castAdd n1 i)hc:Fin.append c c1 (Fin.castAdd n1 j) = S.τ (Fin.append c c1 (Fin.castAdd n1 i))hd:c j = Fin.append c c1 (Fin.castAdd n1 j)he:c j = S.τ (c i)pi:V (c i)pj:V (c j)(S.contr (Fin.append c c1 (Fin.castAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr (c i)) (pi ⊗ₜ[k] (LinearEquiv.cast he) pj) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)p:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hc:Fin.append c c1 (Fin.castAdd n1 j) = S.τ (Fin.append c c1 (Fin.castAdd n1 i))hd:c j = Fin.append c c1 (Fin.castAdd n1 j)pj:V (c j)ci:Chij:i j S.τ ci = c jhb:ci = Fin.append c c1 (Fin.castAdd n1 i)he:c j = S.τ cipi:V ci(S.contr (Fin.append c c1 (Fin.castAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr ci) (pi ⊗ₜ[k] (LinearEquiv.cast he) pj) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)p:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hc:Fin.append c c1 (Fin.castAdd n1 j) = S.τ (Fin.append c c1 (Fin.castAdd n1 i))ci:Chb:ci = Fin.append c c1 (Fin.castAdd n1 i)pi:V cicj:Chd:cj = Fin.append c c1 (Fin.castAdd n1 j)pj:V cjhij:i j S.τ ci = cjhe:cj = S.τ ci(S.contr (Fin.append c c1 (Fin.castAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr ci) (pi ⊗ₜ[k] (LinearEquiv.cast he) pj) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)p:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hc:Fin.append c c1 (Fin.castAdd n1 j) = S.τ (Fin.append c c1 (Fin.castAdd n1 i))ci:Chb:ci = Fin.append c c1 (Fin.castAdd n1 i)pi:V cihd:S.τ ci = Fin.append c c1 (Fin.castAdd n1 j)pj:V (S.τ ci)hij:i j S.τ ci = S.τ ci(S.contr (Fin.append c c1 (Fin.castAdd n1 i))) ((LinearEquiv.cast hb) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr ci) (pi ⊗ₜ[k] (LinearEquiv.cast ) pj) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)p:Pure S cp1:Pure S c1ha:RingHomInvPair (RingHom.id k) (RingHom.id k)hc:Fin.append c c1 (Fin.castAdd n1 j) = S.τ (Fin.append c c1 (Fin.castAdd n1 i))pi:V (Fin.append c c1 (Fin.castAdd n1 i))hd:S.τ (Fin.append c c1 (Fin.castAdd n1 i)) = Fin.append c c1 (Fin.castAdd n1 j)pj:V (S.τ (Fin.append c c1 (Fin.castAdd n1 i)))hij:i j S.τ (Fin.append c c1 (Fin.castAdd n1 i)) = S.τ (Fin.append c c1 (Fin.castAdd n1 i))(S.contr (Fin.append c c1 (Fin.castAdd n1 i))) ((LinearEquiv.cast ) pi ⊗ₜ[k] (LinearEquiv.cast hc) ((LinearEquiv.cast hd) pj)) = (S.contr (Fin.append c c1 (Fin.castAdd n1 i))) (pi ⊗ₜ[k] (LinearEquiv.cast ) pj) All goals completed! 🐙k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1x:Fin n1 Fin nm:Fin n(LinearEquiv.cast ) (p (i.succSuccAbove j m)) = (LinearEquiv.cast ) ((LinearEquiv.cast ) (p1.prodP p (Fin.natAdd n1 (i.succSuccAbove j m)))) All goals completed! 🐙k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1contrPCoeff i j hij p (permP id (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) (p1.prodP p))).toTensor = (permT id ) (contrPCoeff i j hij p (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) (p1.prodP p)).toTensor) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhb:Fin.natAdd n1 i Fin.natAdd n1 jhc:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhd:Fin.natAdd n1 i Fin.natAdd n1 jcontrPCoeff i j hij p (permP id ha (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hb (p1.prodP p))).toTensor = (permT id hc) (contrPCoeff i j hij p (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hd (p1.prodP p)).toTensor) erw [k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhb:Fin.natAdd n1 i Fin.natAdd n1 jhc:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhd:Fin.natAdd n1 i Fin.natAdd n1 jcontrPCoeff i j hij p (permP id ha (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hb (p1.prodP p))).toTensor = contrPCoeff i j hij p (permT id hc) (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hd (p1.prodP p)).toTensork:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhb:Fin.natAdd n1 i Fin.natAdd n1 jhc:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhd:Fin.natAdd n1 i Fin.natAdd n1 jcontrPCoeff i j hij p (permP id ha (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hb (p1.prodP p))).toTensor = contrPCoeff i j hij p (permT id hc) (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hd (p1.prodP p)).toTensor k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhb:Fin.natAdd n1 i Fin.natAdd n1 jhc:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhd:Fin.natAdd n1 i Fin.natAdd n1 j(permP id ha (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hb (p1.prodP p))).toTensor = (permT id hc) (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hd (p1.prodP p)).toTensor erw [k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S cp1:Pure S c1ha:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhb:Fin.natAdd n1 i Fin.natAdd n1 jhc:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhd:Fin.natAdd n1 i Fin.natAdd n1 j(permP id ha (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hb (p1.prodP p))).toTensor = (permP id hc (dropPair (Fin.natAdd n1 i) (Fin.natAdd n1 j) hd (p1.prodP p))).toTensorAll goals completed! 🐙k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor ct1:S.Tensor c1ha:SMulCommClass k k (S.Tensor (Fin.append c1 (c i.succSuccAbove j)))hb:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhc:Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)hd:SMulCommClass k k (S.Tensor (Fin.append c1 c))P:S.Tensor c S.Tensor c1 Prop := fun t t1 => (prodT t1) ((contrT n i j hij) t) = (permT id ) ((contrT (n1.add n) (finSumFinEquiv (Sum.inr i)) (finSumFinEquiv (Sum.inr j)) hc) ((prodT t1) t))P1:S.Tensor c Prop := fun t => P t t1p:Pure S cP2:S.Tensor c1 Prop := fun t1 => P p.toTensor t1p1:Pure S c1(permT id ) (Pure.contrP (Fin.natAdd n1 i) (Fin.natAdd n1 j) (p1.prodP p)) = (permT id ) (Pure.contrP (Fin.natAdd n1 i) (Fin.natAdd n1 j) hc (p1.prodP p)) All goals completed! 🐙 k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor ct1:S.Tensor c1ha:SMulCommClass k k (S.Tensor (Fin.append c1 (c i.succSuccAbove j)))hb:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhc:Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)hd:SMulCommClass k k (S.Tensor (Fin.append c1 c))P:S.Tensor c S.Tensor c1 Prop := fun t t1 => (prodT t1) ((contrT n i j hij) t) = (permT id ) ((contrT (n1.add n) (finSumFinEquiv (Sum.inr i)) (finSumFinEquiv (Sum.inr j)) hc) ((prodT t1) t))P1:S.Tensor c Prop := fun t => P t t1p:Pure S cP2:S.Tensor c1 Prop := fun t1 => P p.toTensor t1 (r : k) (t : S.Tensor c1), P2 t P2 (r t) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt✝:S.Tensor ct1:S.Tensor c1ha:SMulCommClass k k (S.Tensor (Fin.append c1 (c i.succSuccAbove j)))hb:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhc:Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)hd:SMulCommClass k k (S.Tensor (Fin.append c1 c))P:S.Tensor c S.Tensor c1 Prop := fun t t1 => (prodT t1) ((contrT n i j hij) t) = (permT id ) ((contrT (n1.add n) (finSumFinEquiv (Sum.inr i)) (finSumFinEquiv (Sum.inr j)) hc) ((prodT t1) t))P1:S.Tensor c Prop := fun t => P t t1p:Pure S cP2:S.Tensor c1 Prop := fun t1 => P p.toTensor t1r:kt:S.Tensor c1h1:P2 tP2 (r t) All goals completed! 🐙 k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor ct1:S.Tensor c1ha:SMulCommClass k k (S.Tensor (Fin.append c1 (c i.succSuccAbove j)))hb:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhc:Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)hd:SMulCommClass k k (S.Tensor (Fin.append c1 c))P:S.Tensor c S.Tensor c1 Prop := fun t t1 => (prodT t1) ((contrT n i j hij) t) = (permT id ) ((contrT (n1.add n) (finSumFinEquiv (Sum.inr i)) (finSumFinEquiv (Sum.inr j)) hc) ((prodT t1) t))P1:S.Tensor c Prop := fun t => P t t1p:Pure S cP2:S.Tensor c1 Prop := fun t1 => P p.toTensor t1 (t1 t2 : S.Tensor c1), P2 t1 P2 t2 P2 (t1 + t2) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor ct1✝:S.Tensor c1ha:SMulCommClass k k (S.Tensor (Fin.append c1 (c i.succSuccAbove j)))hb:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhc:Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)hd:SMulCommClass k k (S.Tensor (Fin.append c1 c))P:S.Tensor c S.Tensor c1 Prop := fun t t1 => (prodT t1) ((contrT n i j hij) t) = (permT id ) ((contrT (n1.add n) (finSumFinEquiv (Sum.inr i)) (finSumFinEquiv (Sum.inr j)) hc) ((prodT t1) t))P1:S.Tensor c Prop := fun t => P t t1p:Pure S cP2:S.Tensor c1 Prop := fun t1 => P p.toTensor t1t1:S.Tensor c1t2:S.Tensor c1h1:P2 t1h2:P2 t2P2 (t1 + t2) All goals completed! 🐙 k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor ct1:S.Tensor c1ha:SMulCommClass k k (S.Tensor (Fin.append c1 (c i.succSuccAbove j)))hb:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhc:Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)hd:SMulCommClass k k (S.Tensor (Fin.append c1 c))P:S.Tensor c S.Tensor c1 Prop := fun t t1 => (prodT t1) ((contrT n i j hij) t) = (permT id ) ((contrT (n1.add n) (finSumFinEquiv (Sum.inr i)) (finSumFinEquiv (Sum.inr j)) hc) ((prodT t1) t))P1:S.Tensor c Prop := fun t => P t t1 (r : k) (t : S.Tensor c), P1 t P1 (r t) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt✝:S.Tensor ct1:S.Tensor c1ha:SMulCommClass k k (S.Tensor (Fin.append c1 (c i.succSuccAbove j)))hb:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhc:Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)hd:SMulCommClass k k (S.Tensor (Fin.append c1 c))P:S.Tensor c S.Tensor c1 Prop := fun t t1 => (prodT t1) ((contrT n i j hij) t) = (permT id ) ((contrT (n1.add n) (finSumFinEquiv (Sum.inr i)) (finSumFinEquiv (Sum.inr j)) hc) ((prodT t1) t))P1:S.Tensor c Prop := fun t => P t t1r:kt:S.Tensor ch1:P1 tP1 (r t) All goals completed! 🐙 k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor ct1:S.Tensor c1ha:SMulCommClass k k (S.Tensor (Fin.append c1 (c i.succSuccAbove j)))hb:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhc:Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)hd:SMulCommClass k k (S.Tensor (Fin.append c1 c))P:S.Tensor c S.Tensor c1 Prop := fun t t1 => (prodT t1) ((contrT n i j hij) t) = (permT id ) ((contrT (n1.add n) (finSumFinEquiv (Sum.inr i)) (finSumFinEquiv (Sum.inr j)) hc) ((prodT t1) t))P1:S.Tensor c Prop := fun t => P t t1 (t1 t2 : S.Tensor c), P1 t1 P1 t2 P1 (t1 + t2) k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor ct1✝:S.Tensor c1ha:SMulCommClass k k (S.Tensor (Fin.append c1 (c i.succSuccAbove j)))hb:IsReindexing (Fin.append c1 c (Fin.natAdd n1 i).succSuccAbove (Fin.natAdd n1 j)) (Fin.append c1 (c i.succSuccAbove j)) idhc:Fin.natAdd n1 i Fin.natAdd n1 j S.τ (Fin.append c1 c (Fin.natAdd n1 i)) = Fin.append c1 c (Fin.natAdd n1 j)hd:SMulCommClass k k (S.Tensor (Fin.append c1 c))P:S.Tensor c S.Tensor c1 Prop := fun t t1 => (prodT t1) ((contrT n i j hij) t) = (permT id ) ((contrT (n1.add n) (finSumFinEquiv (Sum.inr i)) (finSumFinEquiv (Sum.inr j)) hc) ((prodT t1) t))P1:S.Tensor c Prop := fun t => P t t1t1:S.Tensor ct2:S.Tensor ch1:P1 t1h2:P1 t2P1 (t1 + t2) All goals completed! 🐙k:Typeinst✝⁵:CommRing 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) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin n1 Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor ct1:S.Tensor c1(contrT (n1.add n) (Fin.natAdd n1 i) (Fin.natAdd n1 j) ) ((prodT t1) t) = (permT id ) ((permT id ) ((contrT (n1.add n) (Fin.natAdd n1 i) (Fin.natAdd n1 j) ) ((prodT t1) t))) All goals completed! 🐙

A contraction internal to the left factor commutes past the outer product with a right spectator. The mirror of prodT_contrT_snd, obtained from it by prodT_swap, so the right-hand side contracts the swapped product prodT t1 t and carries a block swap.

All goals completed! 🐙