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.Pure

Contractions on tensors

i. Overview

This file defines tensor contraction for an arbitrary TensorSpecies.

The colors of a tensor record the type of each index. A pair of positions can be contracted when their colors are dual, expressed by a proof S.τ (c i) = c j, where S.τ is the color involution in the tensor species. For a tensor with colors c : Fin (n + 1 + 1) → C, contraction at positions i and j produces a tensor with two fewer indices and colors c ∘ Fin.succSuccAbove i j.

The construction is first made on pure tensors in Physlib.Relativity.Tensors.Contraction.Pure. There, Pure.dropPair removes the two contracted factors from the remaining pure tensor, Pure.contrPCoeff computes the scalar contraction of the two removed factors using S.contr, and Pure.contrP multiplies that scalar by the dropped tensor. This file extends the operation linearly to arbitrary tensors via contrT.

ii. Key results

    TensorSpecies.Tensor.contrT is the linear contraction map on tensors.

    TensorSpecies.Tensor.contrT_pure identifies contrT on pure tensors with Pure.contrP.

    TensorSpecies.Tensor.contrT_equivariant says contraction commutes with the symmetry-group action.

    TensorSpecies.Tensor.contrT_permT, TensorSpecies.Tensor.contrT_symm, and TensorSpecies.Tensor.contrT_comm describe the interaction of contraction with reindexing, swapping the contracted pair, and performing two contractions.

    Physlib.Relativity.Tensors.Contraction.SuccSuccAbove contains the finite-index maps used to drop two positions.

    Physlib.Relativity.Tensors.Contraction.Pure defines Pure.dropPair, Pure.contrPCoeff, Pure.contrP, and the multilinear map used to define contrT.

    Physlib.Relativity.Tensors.Contraction.Products proves compatibility between contractions and tensor products.

iv. Table of contents

    A. Tensor contraction

v. References

There are no known references for the material in this module.

@[expose] public section

A. Tensor contraction

lemma contrT_decide {n : } {c : Fin (n + 1 + 1) C} {i j : Fin (n + 1 + 1)} (hx : S.τ (c i) = c j) (hij : i j := by decide) : i j S.τ (c i) = c 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hx:S.τ (c i) = c jhij:i ji j S.τ (c i) = c j All goals completed! 🐙lemma contrT_congr {n : } {c : Fin (n + 1 + 1) C} {i j : Fin (n + 1 + 1)} {hij : i j S.τ (c i) = c j} (i' j' : Fin (n + 1 + 1)) (t : S.Tensor c) (hii' : i = i' := by decide) (hjj' : j = j' := by decide) : contrT n i j hij t = permT id (And.intro (Function.bijective_id) (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c ji':Fin (n + 1 + 1)j':Fin (n + 1 + 1)t:S.Tensor chii':autoParam (i = i') contrT_congr._auto_1hjj':autoParam (j = j') contrT_congr._auto_2 (i_1 : Fin n), (c i'.succSuccAbove j') (id i_1) = (c i.succSuccAbove j) i_1 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor c (i_1 : Fin n), (c i.succSuccAbove j) (id i_1) = (c i.succSuccAbove j) i_1; All goals completed! 🐙)) (contrT n i' 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c ji':Fin (n + 1 + 1)j':Fin (n + 1 + 1)t:S.Tensor chii':autoParam (i = i') contrT_congr._auto_1hjj':autoParam (j = j') contrT_congr._auto_2i' j' S.τ (c i') = c 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor ci j S.τ (c i) = c j; All goals completed! 🐙) 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c ji':Fin (n + 1 + 1)j':Fin (n + 1 + 1)t:S.Tensor chii':i = i'hjj':j = j'(contrT n i j hij) t = (permT id ) ((contrT n i' j' ) 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor c(contrT n i j hij) t = (permT id ) ((contrT n i j ) t) All goals completed! 🐙@[simp] lemma contrT_pure {n : } {c : Fin (n + 1 + 1) C} (i j : Fin (n + 1 + 1)) (hij : i j S.τ (c i) = c j) (p : Pure S c) : contrT n i j hij p.toTensor = p.contrP i j hij := 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S c(contrT n i j hij) p.toTensor = contrP 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S c(PiTensorProduct.lift (contrPMultilinear i j hij)) ((PiTensorProduct.tprod k) p) = contrP 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S c(PiTensorProduct.lift (contrPMultilinear i j hij)) ((PiTensorProduct.tprod k) p) = (contrPMultilinear i j hij) p conv_rhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jp:Pure S c| (PiTensorProduct.lift (contrPMultilinear i j hij)) ((PiTensorProduct.tprod k) 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jg:Gt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) (g t) = g (contrT n i j hij) tp:Pure S ccontrP i j hij (g p) = g contrP 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jg:Gt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) (g t) = g (contrT n i j hij) tp:Pure S ccontrPCoeff i j hij p (g dropPair i j p).toTensor = contrPCoeff i j hij p g (dropPair i j 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jg:Gt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) (g t) = g (contrT n i j hij) tp:Pure S c(g dropPair i j p).toTensor = g (dropPair i j p).toTensor 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jg:Gt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) (g t) = g (contrT n i j hij) t (r : k) (t : S.Tensor c), P t P (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jg:Gt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) (g t) = g (contrT n i j hij) tp:kq:S.Tensor chp:P qP (p q) 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jg:Gt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) (g t) = g (contrT n i j hij) t (t1 t2 : S.Tensor c), P t1 P t2 P (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jg:Gt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) (g t) = g (contrT n i j hij) tp:S.Tensor cr:S.Tensor chr:P php:P rP (p + r) All goals completed! 🐙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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin (n1 + 1 + 1) Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i j S.τ (c1 i) = c1 jσ:Fin (n1 + 1 + 1) Fin (n + 1 + 1):IsReindexing c c1 σt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n1 i j hij) ((permT σ ) t) = (permT (i.funPredPredAbove j σ ) ) ((contrT n (σ i) (σ j) ) t) (r : k) (t : S.Tensor c), P t P (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin (n1 + 1 + 1) Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i j S.τ (c1 i) = c1 jσ:Fin (n1 + 1 + 1) Fin (n + 1 + 1):IsReindexing c c1 σt✝:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n1 i j hij) ((permT σ ) t) = (permT (i.funPredPredAbove j σ ) ) ((contrT n (σ i) (σ j) ) t)r:kt:S.Tensor cht:P tP (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin (n1 + 1 + 1) Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i j S.τ (c1 i) = c1 jσ:Fin (n1 + 1 + 1) Fin (n + 1 + 1):IsReindexing c c1 σt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n1 i j hij) ((permT σ ) t) = (permT (i.funPredPredAbove j σ ) ) ((contrT n (σ i) (σ j) ) t) (t1 t2 : S.Tensor c), P t1 P t2 P (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:n1:c:Fin (n + 1 + 1) Cc1:Fin (n1 + 1 + 1) Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i j S.τ (c1 i) = c1 jσ:Fin (n1 + 1 + 1) Fin (n + 1 + 1):IsReindexing c c1 σt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n1 i j hij) ((permT σ ) t) = (permT (i.funPredPredAbove j σ ) ) ((contrT n (σ i) (σ j) ) t)t1:S.Tensor ct2:S.Tensor cht1:P t1ht2:P t2P (t1 + t2) All goals completed! 🐙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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) t = (permT id ) ((contrT n j i ) t) (r : k) (t : S.Tensor c), P t P (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) t = (permT id ) ((contrT n j i ) t)p:kq:S.Tensor chp:P qP (p q) 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) t = (permT id ) ((contrT n j i ) t) (t1 t2 : S.Tensor c), P t1 P t2 P (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1) Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i j S.τ (c i) = c jt:S.Tensor cP:S.Tensor c Prop := fun t => (contrT n i j hij) t = (permT id ) ((contrT n j i ) t)p:S.Tensor cr:S.Tensor chr:P php:P rP (p + r) All goals completed! 🐙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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t)) (r : k) (t : S.Tensor c), P t P (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:kq:S.Tensor chp:P qP (p q) 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:kq:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) q) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q))(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) (p q)) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) (p q))) conv_lhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:kq:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) q) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q))| p (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q)) conv_rhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:kq:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) q) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q))| (contrT (n + 1 + 1) i2' j2' ) (p q); 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:kq:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) q) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q))| p (contrT (n + 1 + 1) i2' j2' ) q conv_rhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:kq:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) q) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q))| (contrT n i1' j1' ) (p (contrT (n + 1 + 1) i2' j2' ) q); 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:kq:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) q) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q))| p (contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q) conv_rhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:kq:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) q) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q))| p (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) q)) 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t)) (t1 t2 : S.Tensor c), P t1 P t2 P (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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:P phr:P rP (p + r) 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) p) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p))hr:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) (p + r)) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) (p + r))) conv_lhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) p) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p))hr:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))| (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p)) + (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) conv_lhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) p) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p))hr:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))| (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r); 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) p) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p))hr:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))| (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r)) conv_rhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) p) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p))hr:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))| (contrT (n + 1 + 1) i2' j2' ) (p + r); 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) p) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p))hr:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))| (contrT (n + 1 + 1) i2' j2' ) p + (contrT (n + 1 + 1) i2' j2' ) r conv_rhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) p) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p))hr:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))| (contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p + (contrT (n + 1 + 1) i2' j2' ) r); 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) p) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p))hr:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))| (contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p) + (contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r) conv_rhs => 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) Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:c:Fin (n + 1 + 1 + 1 + 1) Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 j1 S.τ (c i1) = c j1hij2:i2 j2 S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)t:S.Tensor ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2i1':Fin (n + 2) := i2'.predPredAbove j2' i1 j1':Fin (n + 2) := i2'.predPredAbove j2' j1 P:S.Tensor c Prop := fun t => (contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) t) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) t))p:S.Tensor cr:S.Tensor chp:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) p) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p))hr:(contrT n i2 j2 hij2) ((contrT (n + 1 + 1) i1 j1 hij1) r) = (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))| (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) p)) + (permT id ) ((contrT n i1' j1' ) ((contrT (n + 1 + 1) i2' j2' ) r))