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.Basic
public import Physlib.Relativity.Tensors.ComponentIdx.ProductThe product of tensors
i. Overview
In this module we define the tensor product of
index components of tensors,
pure tensors, and
tensors. We prove a number of properties about these products, for example, permutation of the factors, equivariance, and associativity.
ii. Key results
Pure.prodP : The tensor product of two pure tensors.
prodT : The tensor product of two tensors.
The following results exist for both prodP and prodT :
prodT_swap : Swapping the order of the product of two tensors.
prodT_permT_left : Permuting the indices of the left tensor commute with the product.
prodT_permT_right : Permuting the indices of the right tensor commute with the product.
prodT_equivariant : The product of two tensors is equivariant.
prodT_assoc : The product of three tensors is associative.
prodT_assoc' : The product of three tensors is associative in the other direction.
iii. Table of contents
A. Products of index components
A.1. The product of component indices as an equivalence
B. Products of pure tensors
B.1. Indexing pure tensors by Fin n1 ⊕ Fin n2 rather than Fin (n1 + n2)
B.2. The product of two pure tensors
B.3. The vectors making up product of two pure tensors
B.4. The product of two pure basis vectors
B.5. The basis components of the product of two pure tensors
B.6. Equivariance of the product of two pure tensors
B.7. Product with a tensor with no indices on the right
B.8. Swapping the order of the product of two pure tensors
B.9. Permuting the indices of the left tensor in a product
B.10. Permuting the indices of the right tensor in a product
B.11. Associativity of the product of three pure tensors in one direction
B.12. Associativity of the product of three pure tensors in the other direction
C. Products of tensors
C.1. Indexing tensors by Fin n1 ⊕ Fin n2 rather than Fin (n1 + n2)
C.2. The product of two tensors
C.3. The product of two pure tensors as a tensor
C.4. The product of basis vectors
C.5. The product as an equivalence
C.6. Rewriting the basis for the product in terms of the tensor product basis
C.7. Equivariance of the product of two tensors
C.8. The product with the default tensor with no indices on the right
C.9. Swapping the order of the product of two tensors
C.10. Permuting the indices of the left tensor in a product
C.11. Permuting the indices of the right tensor in a product
C.12. Associativity of the product of three tensors in one direction
C.13. Associativity of the product of three tensors in the other direction
iv. References
arXiv:2411.07667
@[expose] public sectionB. Products of pure tensors
B.1. Indexing pure tensors by Fin n1 ⊕ Fin n2 rather than Fin (n1 + n2)
B.2. The product of two pure tensors
Given two pure tensors p1 : Pure S c and p2 : Pure S c, prodP p p2 is the tensor
product of those tensors returning an element in
Pure S (Sum.elim c c1 ∘ ⇑finSumFinEquiv.symm).
def Pure.prodP {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(p1 : Pure S c) (p2 : Pure S c1) : Pure S (Fin.append c c1) :=
Fin.addCases (fun i => LinearEquiv.cast (R := k) (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:ℕn':ℕn2✝:ℕc✝:Fin n → Cc':Fin n' → Cc2:Fin n2✝ → Cn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1⊢ c i = Fin.append c c1 (Fin.castAdd n2 i) All goals completed! 🐙) (p1 i))
(fun i => LinearEquiv.cast (R := k) (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:ℕn':ℕn2✝:ℕc✝:Fin n → Cc':Fin n' → Cc2:Fin n2✝ → Cn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2⊢ c1 i = Fin.append c c1 (Fin.natAdd n1 i) All goals completed! 🐙) (p2 i))B.3. The vectors making up product of two pure tensors
@[simp]
lemma Pure.prodP_apply_castAdd {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(p1 : Pure S c) (p2 : Pure S c1) (i : Fin n1) :
Pure.prodP p1 p2 (Fin.castAdd n2 i) =
LinearEquiv.cast (R := k) (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:ℕn':ℕn2✝:ℕc✝:Fin n → Cc':Fin n' → Cc2:Fin n2✝ → Cn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1⊢ c i = Fin.append c c1 (Fin.castAdd n2 i) All goals completed! 🐙) (p1 i) := 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1⊢ p1.prodP p2 (Fin.castAdd n2 i) = (LinearEquiv.cast ⋯) (p1 i)
All goals completed! 🐙@[simp]
lemma Pure.prodP_apply_natAdd {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(p1 : Pure S c) (p2 : Pure S c1) (i : Fin n2) :
Pure.prodP p1 p2 (Fin.natAdd n1 i) =
LinearEquiv.cast (R := k) (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:ℕn':ℕn2✝:ℕc✝:Fin n → Cc':Fin n' → Cc2:Fin n2✝ → Cn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2⊢ c1 i = Fin.append c c1 (Fin.natAdd n1 i) All goals completed! 🐙) (p2 i) := 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2⊢ p1.prodP p2 (Fin.natAdd n1 i) = (LinearEquiv.cast ⋯) (p2 i)
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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1 ⊕ Fin n2⊢ Fin.addCases (fun i => (LinearEquiv.cast ⋯) (p1 i)) (fun i => (LinearEquiv.cast ⋯) (p2 i)) (finSumFinEquiv i) =
match i with
| Sum.inl i => (LinearEquiv.cast ⋯) (p1 i)
| Sum.inr i => (LinearEquiv.cast ⋯) (p2 i)
match i with
| Sum.inl i => 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i✝:Fin n1 ⊕ Fin n2i:Fin n1⊢ Fin.addCases (fun i => (LinearEquiv.cast ⋯) (p1 i)) (fun i => (LinearEquiv.cast ⋯) (p2 i))
(finSumFinEquiv (Sum.inl i)) =
match Sum.inl i with
| Sum.inl i => (LinearEquiv.cast ⋯) (p1 i)
| Sum.inr i => (LinearEquiv.cast ⋯) (p2 i)
simp only [finSumFinEquiv_apply_left, LinearEquiv.cast_apply, Fin.addCases_left] 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i✝:Fin n1 ⊕ Fin n2i:Fin n1⊢ cast ⋯ (p1 i) = (LinearEquiv.cast ⋯) (p1 i)
rfl All goals completed! 🐙
| Sum.inr i => 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i✝:Fin n1 ⊕ Fin n2i:Fin n2⊢ Fin.addCases (fun i => (LinearEquiv.cast ⋯) (p1 i)) (fun i => (LinearEquiv.cast ⋯) (p2 i))
(finSumFinEquiv (Sum.inr i)) =
match Sum.inr i with
| Sum.inl i => (LinearEquiv.cast ⋯) (p1 i)
| Sum.inr i => (LinearEquiv.cast ⋯) (p2 i)
simp only [finSumFinEquiv_apply_right, LinearEquiv.cast_apply, Fin.addCases_right] 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i✝:Fin n1 ⊕ Fin n2i:Fin n2⊢ cast ⋯ (p2 i) = (LinearEquiv.cast ⋯) (p2 i)
rfl All goals completed! 🐙B.4. The product of two pure basis vectors
lemma Pure.prodP_basisVector {n n1 : ℕ} {c : Fin n → C} {c1 : Fin n1 → C}
(φ : ComponentIdx c) (φ1 : ComponentIdx (S := S) c1) :
Pure.prodP (Pure.basisVector c φ) (Pure.basisVector c1 φ1) =
Pure.basisVector _ (ComponentIdx.prod.symm (φ, φ1)) := by 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ (basisVector c φ).prodP (basisVector c1 φ1) = basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1))
ext i 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin (n + n1)⊢ (basisVector c φ).prodP (basisVector c1 φ1) i = basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) i
revert i 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ ∀ (i : Fin (n + n1)),
(basisVector c φ).prodP (basisVector c1 φ1) i = basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) i
rw [Fin.forall_fin_add 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ (∀ (i : Fin n),
(basisVector c φ).prodP (basisVector c1 φ1) (Fin.castAdd n1 i) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.castAdd n1 i)) ∧
∀ (j : Fin n1),
(basisVector c φ).prodP (basisVector c1 φ1) (Fin.natAdd n j) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.natAdd n 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:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ (∀ (i : Fin n),
(basisVector c φ).prodP (basisVector c1 φ1) (Fin.castAdd n1 i) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.castAdd n1 i)) ∧
∀ (j : Fin n1),
(basisVector c φ).prodP (basisVector c1 φ1) (Fin.natAdd n j) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.natAdd n 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:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ (∀ (i : Fin n),
(basisVector c φ).prodP (basisVector c1 φ1) (Fin.castAdd n1 i) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.castAdd n1 i)) ∧
∀ (j : Fin n1),
(basisVector c φ).prodP (basisVector c1 φ1) (Fin.natAdd n j) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.natAdd n j)
simp only [prodP_apply_castAdd, prodP_apply_natAdd] 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ (∀ (i : Fin n),
(LinearEquiv.cast ⋯) (basisVector c φ i) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.castAdd n1 i)) ∧
∀ (j : Fin n1),
(LinearEquiv.cast ⋯) (basisVector c1 φ1 j) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.natAdd n j)
constructor left 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ ∀ (i : Fin n),
(LinearEquiv.cast ⋯) (basisVector c φ i) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.castAdd n1 i)right 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ ∀ (j : Fin n1),
(LinearEquiv.cast ⋯) (basisVector c1 φ1 j) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.natAdd n j)
· left 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ ∀ (i : Fin n),
(LinearEquiv.cast ⋯) (basisVector c φ i) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.castAdd n1 i) intro i left 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n⊢ (LinearEquiv.cast ⋯) (basisVector c φ i) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.castAdd n1 i)
symm left 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n⊢ basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.castAdd n1 i) =
(LinearEquiv.cast ⋯) (basisVector c φ i)
simp only [basisVector, ComponentIdx.prod, Equiv.coe_fn_symm_mk, Fin.addCases_left,
LinearEquiv.cast_apply] left 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n⊢ (b (Fin.append c c1 (Fin.castAdd n1 i))) ((basisIdxCongr ⋯) (φ i)) = cast ⋯ ((b (c i)) (φ i))
rw [basis_congr (c1 := (c i)) (by 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n⊢ Fin.append c c1 (Fin.castAdd n1 i) = c i left 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n⊢ (LinearEquiv.cast ⋯) ((b (c i)) ((basisIdxCongr ⋯) ((basisIdxCongr ⋯) (φ i)))) = cast ⋯ ((b (c i)) (φ i)) simp All goals completed! 🐙left 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n⊢ (LinearEquiv.cast ⋯) ((b (c i)) ((basisIdxCongr ⋯) ((basisIdxCongr ⋯) (φ i)))) = cast ⋯ ((b (c i)) (φ i)))]left 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n⊢ (LinearEquiv.cast ⋯) ((b (c i)) ((basisIdxCongr ⋯) ((basisIdxCongr ⋯) (φ i)))) = cast ⋯ ((b (c i)) (φ i))
simp All goals completed! 🐙
· right 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1⊢ ∀ (j : Fin n1),
(LinearEquiv.cast ⋯) (basisVector c1 φ1 j) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.natAdd n j) intro i right 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n1⊢ (LinearEquiv.cast ⋯) (basisVector c1 φ1 i) =
basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.natAdd n i)
symm right 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n1⊢ basisVector (Fin.append c c1) (ComponentIdx.prod.symm (φ, φ1)) (Fin.natAdd n i) =
(LinearEquiv.cast ⋯) (basisVector c1 φ1 i)
simp only [basisVector, ComponentIdx.prod, Equiv.coe_fn_symm_mk, Fin.addCases_right,
LinearEquiv.cast_apply] right 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n1⊢ (b (Fin.append c c1 (Fin.natAdd n i))) ((basisIdxCongr ⋯) (φ1 i)) = cast ⋯ ((b (c1 i)) (φ1 i))
rw [basis_congr (c1 := (c1 i)) (by 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n1⊢ Fin.append c c1 (Fin.natAdd n i) = c1 i right 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n1⊢ (LinearEquiv.cast ⋯) ((b (c1 i)) ((basisIdxCongr ⋯) ((basisIdxCongr ⋯) (φ1 i)))) = cast ⋯ ((b (c1 i)) (φ1 i)) simp All goals completed! 🐙right 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n1⊢ (LinearEquiv.cast ⋯) ((b (c1 i)) ((basisIdxCongr ⋯) ((basisIdxCongr ⋯) (φ1 i)))) = cast ⋯ ((b (c1 i)) (φ1 i)))]right 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 → Cc1:Fin n1 → Cφ:ComponentIdx cφ1:ComponentIdx c1i:Fin n1⊢ (LinearEquiv.cast ⋯) ((b (c1 i)) ((basisIdxCongr ⋯) ((basisIdxCongr ⋯) (φ1 i)))) = cast ⋯ ((b (c1 i)) (φ1 i))
simp All goals completed! 🐙B.5. The basis components of the product of two pure tensors
lemma Pure.prodP_component {n m : ℕ} {c : Fin n → C} {c1 : Fin m → C}
(p : Pure S c) (p1 : Pure S c1)
(φ : ComponentIdx (Fin.append c c1)) :
(p.prodP p1).component φ = p.component (ComponentIdx.prod φ).1 *
p1.component (ComponentIdx.prod φ).2 := by 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ (p.prodP p1).component φ = p.component (ComponentIdx.prod φ).1 * p1.component (ComponentIdx.prod φ).2
simp [component] 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ ∏ i, ((b (Fin.append c c1 i)).repr (p.prodP p1 i)) (φ i) =
(∏ i, ((b (c i)).repr (p i)) ((ComponentIdx.prod φ).1 i)) * ∏ i, ((b (c1 i)).repr (p1 i)) ((ComponentIdx.prod φ).2 i)
rw [← finSumFinEquiv.prod_comp 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ ∏ i, ((b (Fin.append c c1 (finSumFinEquiv i))).repr (p.prodP p1 (finSumFinEquiv i))) (φ (finSumFinEquiv i)) =
(∏ i, ((b (c i)).repr (p i)) ((ComponentIdx.prod φ).1 i)) * ∏ i, ((b (c1 i)).repr (p1 i)) ((ComponentIdx.prod φ).2 i) 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ ∏ i, ((b (Fin.append c c1 (finSumFinEquiv i))).repr (p.prodP p1 (finSumFinEquiv i))) (φ (finSumFinEquiv i)) =
(∏ i, ((b (c i)).repr (p i)) ((ComponentIdx.prod φ).1 i)) * ∏ i, ((b (c1 i)).repr (p1 i)) ((ComponentIdx.prod φ).2 i)] 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ ∏ i, ((b (Fin.append c c1 (finSumFinEquiv i))).repr (p.prodP p1 (finSumFinEquiv i))) (φ (finSumFinEquiv i)) =
(∏ i, ((b (c i)).repr (p i)) ((ComponentIdx.prod φ).1 i)) * ∏ i, ((b (c1 i)).repr (p1 i)) ((ComponentIdx.prod φ).2 i)
simp only [finSumFinEquiv_apply_left, finSumFinEquiv_apply_right,
Fintype.prod_sum_type] 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ (∏ x, ((b (Fin.append c c1 (Fin.castAdd m x))).repr (p.prodP p1 (Fin.castAdd m x))) (φ (Fin.castAdd m x))) *
∏ x, ((b (Fin.append c c1 (Fin.natAdd n x))).repr (p.prodP p1 (Fin.natAdd n x))) (φ (Fin.natAdd n x)) =
(∏ i, ((b (c i)).repr (p i)) ((ComponentIdx.prod φ).1 i)) * ∏ i, ((b (c1 i)).repr (p1 i)) ((ComponentIdx.prod φ).2 i)
congr e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ (fun x => ((b (Fin.append c c1 (Fin.castAdd m x))).repr (p.prodP p1 (Fin.castAdd m x))) (φ (Fin.castAdd m x))) =
fun i => ((b (c i)).repr (p i)) ((ComponentIdx.prod φ).1 i)e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ (fun x => ((b (Fin.append c c1 (Fin.natAdd n x))).repr (p.prodP p1 (Fin.natAdd n x))) (φ (Fin.natAdd n x))) = fun i =>
((b (c1 i)).repr (p1 i)) ((ComponentIdx.prod φ).2 i)
· e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ (fun x => ((b (Fin.append c c1 (Fin.castAdd m x))).repr (p.prodP p1 (Fin.castAdd m x))) (φ (Fin.castAdd m x))) =
fun i => ((b (c i)).repr (p i)) ((ComponentIdx.prod φ).1 i) funext x e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin n⊢ ((b (Fin.append c c1 (Fin.castAdd m x))).repr (p.prodP p1 (Fin.castAdd m x))) (φ (Fin.castAdd m x)) =
((b (c x)).repr (p x)) ((ComponentIdx.prod φ).1 x)
simp only [prodP_apply_castAdd, LinearEquiv.cast_apply, ComponentIdx.prod, Equiv.coe_fn_mk] e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin n⊢ ((b (Fin.append c c1 (Fin.castAdd m x))).repr (cast ⋯ (p x))) (φ (Fin.castAdd m x)) =
((b (c x)).repr (p x)) ((basisIdxCongr ⋯) (φ (Fin.castAdd m x)))
generalize_proofs h1 h2 h3 e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin nh1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:V (c x) = V (Fin.append c c1 (Fin.castAdd m x))h3:Fin.append c c1 (Fin.castAdd m x) = c x⊢ ((b (Fin.append c c1 (Fin.castAdd m x))).repr (cast h2 (p x))) (φ (Fin.castAdd m x)) =
((b (c x)).repr (p x)) ((basisIdxCongr h3) (φ (Fin.castAdd m x)))
generalize p x = p' e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin nh1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:V (c x) = V (Fin.append c c1 (Fin.castAdd m x))h3:Fin.append c c1 (Fin.castAdd m x) = c xp':V (c x)⊢ ((b (Fin.append c c1 (Fin.castAdd m x))).repr (cast h2 p')) (φ (Fin.castAdd m x)) =
((b (c x)).repr p') ((basisIdxCongr h3) (φ (Fin.castAdd m x)))
generalize c x = c' at * e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin nh1:RingHomInvPair (RingHom.id k) (RingHom.id k)c':Ch2:V c' = V (Fin.append c c1 (Fin.castAdd m x))h3:Fin.append c c1 (Fin.castAdd m x) = c'p':V c'⊢ ((b (Fin.append c c1 (Fin.castAdd m x))).repr (cast h2 p')) (φ (Fin.castAdd m x)) =
((b c').repr p') ((basisIdxCongr h3) (φ (Fin.castAdd m x)))
subst h3 e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin nh1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:V (Fin.append c c1 (Fin.castAdd m x)) = V (Fin.append c c1 (Fin.castAdd m x))p':V (Fin.append c c1 (Fin.castAdd m x))⊢ ((b (Fin.append c c1 (Fin.castAdd m x))).repr (cast h2 p')) (φ (Fin.castAdd m x)) =
((b (Fin.append c c1 (Fin.castAdd m x))).repr p') ((basisIdxCongr ⋯) (φ (Fin.castAdd m x)))
rfl All goals completed! 🐙
· e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)⊢ (fun x => ((b (Fin.append c c1 (Fin.natAdd n x))).repr (p.prodP p1 (Fin.natAdd n x))) (φ (Fin.natAdd n x))) = fun i =>
((b (c1 i)).repr (p1 i)) ((ComponentIdx.prod φ).2 i) funext x e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin m⊢ ((b (Fin.append c c1 (Fin.natAdd n x))).repr (p.prodP p1 (Fin.natAdd n x))) (φ (Fin.natAdd n x)) =
((b (c1 x)).repr (p1 x)) ((ComponentIdx.prod φ).2 x)
simp only [prodP_apply_natAdd, LinearEquiv.cast_apply, ComponentIdx.prod, Equiv.coe_fn_mk] e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin m⊢ ((b (Fin.append c c1 (Fin.natAdd n x))).repr (cast ⋯ (p1 x))) (φ (Fin.natAdd n x)) =
((b (c1 x)).repr (p1 x)) ((basisIdxCongr ⋯) (φ (Fin.natAdd n x)))
generalize_proofs h1 h2 h3 e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin mh1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:V (c1 x) = V (Fin.append c c1 (Fin.natAdd n x))h3:Fin.append c c1 (Fin.natAdd n x) = c1 x⊢ ((b (Fin.append c c1 (Fin.natAdd n x))).repr (cast h2 (p1 x))) (φ (Fin.natAdd n x)) =
((b (c1 x)).repr (p1 x)) ((basisIdxCongr h3) (φ (Fin.natAdd n x)))
generalize p1 x = p1' e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin mh1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:V (c1 x) = V (Fin.append c c1 (Fin.natAdd n x))h3:Fin.append c c1 (Fin.natAdd n x) = c1 xp1':V (c1 x)⊢ ((b (Fin.append c c1 (Fin.natAdd n x))).repr (cast h2 p1')) (φ (Fin.natAdd n x)) =
((b (c1 x)).repr p1') ((basisIdxCongr h3) (φ (Fin.natAdd n x)))
generalize c1 x = c1' at * e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin mh1:RingHomInvPair (RingHom.id k) (RingHom.id k)c1':Ch2:V c1' = V (Fin.append c c1 (Fin.natAdd n x))h3:Fin.append c c1 (Fin.natAdd n x) = c1'p1':V c1'⊢ ((b (Fin.append c c1 (Fin.natAdd n x))).repr (cast h2 p1')) (φ (Fin.natAdd n x)) =
((b c1').repr p1') ((basisIdxCongr h3) (φ (Fin.natAdd n x)))
subst h3 e_a.e_f 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:ℕm:ℕc:Fin n → Cc1:Fin m → Cp:Pure S cp1:Pure S c1φ:ComponentIdx (Fin.append c c1)x:Fin mh1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:V (Fin.append c c1 (Fin.natAdd n x)) = V (Fin.append c c1 (Fin.natAdd n x))p1':V (Fin.append c c1 (Fin.natAdd n x))⊢ ((b (Fin.append c c1 (Fin.natAdd n x))).repr (cast h2 p1')) (φ (Fin.natAdd n x)) =
((b (Fin.append c c1 (Fin.natAdd n x))).repr p1') ((basisIdxCongr ⋯) (φ (Fin.natAdd n x)))
rfl All goals completed! 🐙B.6. Equivariance of the product of two pure tensors
@[simp]
lemma Pure.prodP_equivariant {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(g : G) (p : Pure S c) (p1 : Pure S c1) :
prodP (g • p) (g • p1) = g • prodP p p1 := by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ (g • p).prodP (g • p1) = g • p.prodP p1
ext i 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1i:Fin (n1 + n2)⊢ (g • p).prodP (g • p1) i = (g • p.prodP p1) i
revert i 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ ∀ (i : Fin (n1 + n2)), (g • p).prodP (g • p1) i = (g • p.prodP p1) i
rw [Fin.forall_fin_add 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ (∀ (i : Fin n1), (g • p).prodP (g • p1) (Fin.castAdd n2 i) = (g • p.prodP p1) (Fin.castAdd n2 i)) ∧
∀ (j : Fin n2), (g • p).prodP (g • p1) (Fin.natAdd n1 j) = (g • p.prodP p1) (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) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ (∀ (i : Fin n1), (g • p).prodP (g • p1) (Fin.castAdd n2 i) = (g • p.prodP p1) (Fin.castAdd n2 i)) ∧
∀ (j : Fin n2), (g • p).prodP (g • p1) (Fin.natAdd n1 j) = (g • p.prodP p1) (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) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ (∀ (i : Fin n1), (g • p).prodP (g • p1) (Fin.castAdd n2 i) = (g • p.prodP p1) (Fin.castAdd n2 i)) ∧
∀ (j : Fin n2), (g • p).prodP (g • p1) (Fin.natAdd n1 j) = (g • p.prodP p1) (Fin.natAdd n1 j)
simp only [actionP_eq, prodP_apply_castAdd, prodP_apply_natAdd] 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ (∀ (i : Fin n1),
(LinearEquiv.cast ⋯) (((rep (c i)) g) (p i)) =
((rep (Fin.append c c1 (Fin.castAdd n2 i))) g) ((LinearEquiv.cast ⋯) (p i))) ∧
∀ (j : Fin n2),
(LinearEquiv.cast ⋯) (((rep (c1 j)) g) (p1 j)) =
((rep (Fin.append c c1 (Fin.natAdd n1 j))) g) ((LinearEquiv.cast ⋯) (p1 j))
constructor left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ ∀ (i : Fin n1),
(LinearEquiv.cast ⋯) (((rep (c i)) g) (p i)) =
((rep (Fin.append c c1 (Fin.castAdd n2 i))) g) ((LinearEquiv.cast ⋯) (p i))right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ ∀ (j : Fin n2),
(LinearEquiv.cast ⋯) (((rep (c1 j)) g) (p1 j)) =
((rep (Fin.append c c1 (Fin.natAdd n1 j))) g) ((LinearEquiv.cast ⋯) (p1 j))
· left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ ∀ (i : Fin n1),
(LinearEquiv.cast ⋯) (((rep (c i)) g) (p i)) =
((rep (Fin.append c c1 (Fin.castAdd n2 i))) g) ((LinearEquiv.cast ⋯) (p i)) intro j left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n1⊢ (LinearEquiv.cast ⋯) (((rep (c j)) g) (p j)) =
((rep (Fin.append c c1 (Fin.castAdd n2 j))) g) ((LinearEquiv.cast ⋯) (p j))
generalize_proofs h1 h2 left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)⊢ (LinearEquiv.cast h2) (((rep (c j)) g) (p j)) =
((rep (Fin.append c c1 (Fin.castAdd n2 j))) g) ((LinearEquiv.cast h2) (p j))
generalize p j = p' left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)p':V (c j)⊢ (LinearEquiv.cast h2) (((rep (c j)) g) p') = ((rep (Fin.append c c1 (Fin.castAdd n2 j))) g) ((LinearEquiv.cast h2) p')
generalize c j = c' at * left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)c':Ch2:c' = Fin.append c c1 (Fin.castAdd n2 j)p':V c'⊢ (LinearEquiv.cast h2) (((rep c') g) p') = ((rep (Fin.append c c1 (Fin.castAdd n2 j))) g) ((LinearEquiv.cast h2) p')
subst h2 left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)p':V (Fin.append c c1 (Fin.castAdd n2 j))⊢ (LinearEquiv.cast ⋯) (((rep (Fin.append c c1 (Fin.castAdd n2 j))) g) p') =
((rep (Fin.append c c1 (Fin.castAdd n2 j))) g) ((LinearEquiv.cast ⋯) p')
rfl All goals completed! 🐙
· right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1⊢ ∀ (j : Fin n2),
(LinearEquiv.cast ⋯) (((rep (c1 j)) g) (p1 j)) =
((rep (Fin.append c c1 (Fin.natAdd n1 j))) g) ((LinearEquiv.cast ⋯) (p1 j)) intro j right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n2⊢ (LinearEquiv.cast ⋯) (((rep (c1 j)) g) (p1 j)) =
((rep (Fin.append c c1 (Fin.natAdd n1 j))) g) ((LinearEquiv.cast ⋯) (p1 j))
generalize_proofs h1 h2 right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)⊢ (LinearEquiv.cast h2) (((rep (c1 j)) g) (p1 j)) =
((rep (Fin.append c c1 (Fin.natAdd n1 j))) g) ((LinearEquiv.cast h2) (p1 j))
generalize p1 j = p1' right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)p1':V (c1 j)⊢ (LinearEquiv.cast h2) (((rep (c1 j)) g) p1') = ((rep (Fin.append c c1 (Fin.natAdd n1 j))) g) ((LinearEquiv.cast h2) p1')
generalize c1 j = c1' at * right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)c1':Ch2:c1' = Fin.append c c1 (Fin.natAdd n1 j)p1':V c1'⊢ (LinearEquiv.cast h2) (((rep c1') g) p1') = ((rep (Fin.append c c1 (Fin.natAdd n1 j))) g) ((LinearEquiv.cast h2) p1')
subst h2 right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cp1:Pure S c1j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)p1':V (Fin.append c c1 (Fin.natAdd n1 j))⊢ (LinearEquiv.cast ⋯) (((rep (Fin.append c c1 (Fin.natAdd n1 j))) g) p1') =
((rep (Fin.append c c1 (Fin.natAdd n1 j))) g) ((LinearEquiv.cast ⋯) p1')
rfl All goals completed! 🐙B.7. Product with a tensor with no indices on the right
lemma Pure.prodP_zero_right {n} {c : Fin n → C}
{c1 : Fin 0 → C} (p : Pure S c) (p0 : Pure S c1) :
prodP p p0 = permP id IsReindexing.append_zero_right p := by 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 → Cc1:Fin 0 → Cp:Pure S cp0:Pure S c1⊢ p.prodP p0 = permP id ⋯ p
ext i 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 → Cc1:Fin 0 → Cp:Pure S cp0:Pure S c1i:Fin (n + 0)⊢ p.prodP p0 i = permP id ⋯ p i
obtain ⟨j, rfl⟩ := finSumFinEquiv.surjective i 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 → Cc1:Fin 0 → Cp:Pure S cp0:Pure S c1j:Fin n ⊕ Fin 0⊢ p.prodP p0 (finSumFinEquiv j) = permP id ⋯ p (finSumFinEquiv j)
rw (transparency := .instances) [prodP_apply_finSumFinEquiv 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 → Cc1:Fin 0 → Cp:Pure S cp0:Pure S c1j:Fin n ⊕ Fin 0⊢ (match j with
| Sum.inl i => (LinearEquiv.cast ⋯) (p i)
| Sum.inr i => (LinearEquiv.cast ⋯) (p0 i)) =
permP id ⋯ p (finSumFinEquiv 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 → Cc1:Fin 0 → Cp:Pure S cp0:Pure S c1j:Fin n ⊕ Fin 0⊢ (match j with
| Sum.inl i => (LinearEquiv.cast ⋯) (p i)
| Sum.inr i => (LinearEquiv.cast ⋯) (p0 i)) =
permP id ⋯ p (finSumFinEquiv 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 → Cc1:Fin 0 → Cp:Pure S cp0:Pure S c1j:Fin n ⊕ Fin 0⊢ (match j with
| Sum.inl i => (LinearEquiv.cast ⋯) (p i)
| Sum.inr i => (LinearEquiv.cast ⋯) (p0 i)) =
permP id ⋯ p (finSumFinEquiv j)
match j with
| Sum.inl 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 → Cc1:Fin 0 → Cp:Pure S cp0:Pure S c1j✝:Fin n ⊕ Fin 0j:Fin n⊢ (match Sum.inl j with
| Sum.inl i => (LinearEquiv.cast ⋯) (p i)
| Sum.inr i => (LinearEquiv.cast ⋯) (p0 i)) =
permP id ⋯ p (finSumFinEquiv (Sum.inl j)) rfl All goals completed! 🐙
| Sum.inr 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 → Cc1:Fin 0 → Cp:Pure S cp0:Pure S c1j✝:Fin n ⊕ Fin 0j:Fin 0⊢ (match Sum.inr j with
| Sum.inl i => (LinearEquiv.cast ⋯) (p i)
| Sum.inr i => (LinearEquiv.cast ⋯) (p0 i)) =
permP id ⋯ p (finSumFinEquiv (Sum.inr j)) exact Fin.elim0 j All goals completed! 🐙B.8. Swapping the order of the product of two pure tensors
lemma Pure.prodP_swap {n n1} {c : Fin n → C} {c1 : Fin n1 → C} (p : Pure S c) (p1 : Pure S c1) :
Pure.prodP p p1 = permP _ IsReindexing.append_swap (Pure.prodP p1 p) := by 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 → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1⊢ p.prodP p1 = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p)
ext i 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 → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i:Fin (n + n1)⊢ p.prodP p1 i = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) i
refine Fin.addCases (fun i => ?_) (fun i => ?_) i refine_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:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin n⊢ p.prodP p1 (Fin.castAdd n1 i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.castAdd n1 i)refine_2 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 → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin n1⊢ p.prodP p1 (Fin.natAdd n i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.natAdd n i)
· refine_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:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin n⊢ p.prodP p1 (Fin.castAdd n1 i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.castAdd n1 i) have h0 : (i.castAdd n1).append (Fin.natAdd n1) (Fin.castAdd n) = i.natAdd n1 := by 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 → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1⊢ p.prodP p1 = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) refine_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:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin nh0:Fin.append (Fin.natAdd n1) (Fin.castAdd n) (Fin.castAdd n1 i) = Fin.natAdd n1 i⊢ p.prodP p1 (Fin.castAdd n1 i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.castAdd n1 i) simp refine_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:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin nh0:Fin.append (Fin.natAdd n1) (Fin.castAdd n) (Fin.castAdd n1 i) = Fin.natAdd n1 i⊢ p.prodP p1 (Fin.castAdd n1 i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.castAdd n1 i)refine_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:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin nh0:Fin.append (Fin.natAdd n1) (Fin.castAdd n) (Fin.castAdd n1 i) = Fin.natAdd n1 i⊢ p.prodP p1 (Fin.castAdd n1 i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.castAdd n1 i)
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙
· refine_2 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 → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin n1⊢ p.prodP p1 (Fin.natAdd n i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.natAdd n i) have h0 : (i.natAdd n).append (Fin.natAdd n1) (Fin.castAdd n) = i.castAdd n := by 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 → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1⊢ p.prodP p1 = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) refine_2 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 → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin n1h0:Fin.append (Fin.natAdd n1) (Fin.castAdd n) (Fin.natAdd n i) = Fin.castAdd n i⊢ p.prodP p1 (Fin.natAdd n i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.natAdd n i) simprefine_2 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 → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin n1h0:Fin.append (Fin.natAdd n1) (Fin.castAdd n) (Fin.natAdd n i) = Fin.castAdd n i⊢ p.prodP p1 (Fin.natAdd n i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.natAdd n i)refine_2 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 → Cc1:Fin n1 → Cp:Pure S cp1:Pure S c1i✝:Fin (n + n1)i:Fin n1h0:Fin.append (Fin.natAdd n1) (Fin.castAdd n) (Fin.natAdd n i) = Fin.castAdd n i⊢ p.prodP p1 (Fin.natAdd n i) = permP (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯ (p1.prodP p) (Fin.natAdd n i)
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙B.9. Permuting the indices of the left tensor in a product
@[simp]
lemma Pure.prodP_permP_left {n n'} {c : Fin n → C} {c' : Fin n' → C}
(σ : Fin n' → Fin n) (h : IsReindexing c c' σ) (p : Pure S c) (p2 : Pure S c2) :
Pure.prodP (permP σ h p) p2 = permP _ (h.append_congr_left c2) (Pure.prodP p p2) := by 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2⊢ (permP σ h p).prodP p2 = permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2)
ext i 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i:Fin (n' + n2)⊢ (permP σ h p).prodP p2 i = permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) i
refine Fin.addCases (fun i => ?_) (fun i => ?_) i refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n'⊢ (permP σ h p).prodP p2 (Fin.castAdd n2 i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.castAdd n2 i)refine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n2⊢ (permP σ h p).prodP p2 (Fin.natAdd n' i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.natAdd n' i)
· refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n'⊢ (permP σ h p).prodP p2 (Fin.castAdd n2 i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.castAdd n2 i) have h0 : (i.castAdd n2).append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n) = (σ i).castAdd n2 := by 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2⊢ (permP σ h p).prodP p2 = permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n'h0:Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n) (Fin.castAdd n2 i) = Fin.castAdd n2 (σ i)⊢ (permP σ h p).prodP p2 (Fin.castAdd n2 i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.castAdd n2 i)
simp refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n'h0:Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n) (Fin.castAdd n2 i) = Fin.castAdd n2 (σ i)⊢ (permP σ h p).prodP p2 (Fin.castAdd n2 i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.castAdd n2 i)refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n'h0:Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n) (Fin.castAdd n2 i) = Fin.castAdd n2 (σ i)⊢ (permP σ h p).prodP p2 (Fin.castAdd n2 i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.castAdd n2 i)
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙
· refine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n2⊢ (permP σ h p).prodP p2 (Fin.natAdd n' i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.natAdd n' i) have h0 : (i.natAdd n').append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n) = i.natAdd n := by 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2⊢ (permP σ h p).prodP p2 = permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) refine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n2h0:Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n) (Fin.natAdd n' i) = Fin.natAdd n i⊢ (permP σ h p).prodP p2 (Fin.natAdd n' i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.natAdd n' i) simprefine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n2h0:Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n) (Fin.natAdd n' i) = Fin.natAdd n i⊢ (permP σ h p).prodP p2 (Fin.natAdd n' i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.natAdd n' i)refine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n' + n2)i:Fin n2h0:Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n) (Fin.natAdd n' i) = Fin.natAdd n i⊢ (permP σ h p).prodP p2 (Fin.natAdd n' i) =
permP (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯ (p.prodP p2) (Fin.natAdd n' i)
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙B.10. Permuting the indices of the right tensor in a product
@[simp]
lemma Pure.prodP_permP_right {n n'} {c : Fin n → C} {c' : Fin n' → C}
(σ : Fin n' → Fin n) (h : IsReindexing c c' σ) (p : Pure S c) (p2 : Pure S c2) :
prodP p2 (permP σ h p) = permP _ (h.append_congr_right c2) (Pure.prodP p2 p) := by 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2⊢ p2.prodP (permP σ h p) = permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p)
ext i 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i:Fin (n2 + n')⊢ p2.prodP (permP σ h p) i = permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) i
refine Fin.addCases (fun i => ?_) (fun i => ?_) i refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n2⊢ p2.prodP (permP σ h p) (Fin.castAdd n' i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.castAdd n' i)refine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n'⊢ p2.prodP (permP σ h p) (Fin.natAdd n2 i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.natAdd n2 i)
· refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n2⊢ p2.prodP (permP σ h p) (Fin.castAdd n' i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.castAdd n' i) have h0 : (i.castAdd n').append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ) = i.castAdd n := by 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2⊢ p2.prodP (permP σ h p) = permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n2h0:Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ) (Fin.castAdd n' i) = Fin.castAdd n i⊢ p2.prodP (permP σ h p) (Fin.castAdd n' i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.castAdd n' i) simp refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n2h0:Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ) (Fin.castAdd n' i) = Fin.castAdd n i⊢ p2.prodP (permP σ h p) (Fin.castAdd n' i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.castAdd n' i)refine_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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n2h0:Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ) (Fin.castAdd n' i) = Fin.castAdd n i⊢ p2.prodP (permP σ h p) (Fin.castAdd n' i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.castAdd n' i)
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙
· refine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n'⊢ p2.prodP (permP σ h p) (Fin.natAdd n2 i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.natAdd n2 i) have h0 : (i.natAdd n2).append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ) = (σ i).natAdd n2 := by 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2⊢ p2.prodP (permP σ h p) = permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) refine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n'h0:Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ) (Fin.natAdd n2 i) = Fin.natAdd n2 (σ i)⊢ p2.prodP (permP σ h p) (Fin.natAdd n2 i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.natAdd n2 i) simprefine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n'h0:Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ) (Fin.natAdd n2 i) = Fin.natAdd n2 (σ i)⊢ p2.prodP (permP σ h p) (Fin.natAdd n2 i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.natAdd n2 i)refine_2 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cp2:Pure S c2i✝:Fin (n2 + n')i:Fin n'h0:Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ) (Fin.natAdd n2 i) = Fin.natAdd n2 (σ i)⊢ p2.prodP (permP σ h p) (Fin.natAdd n2 i) =
permP (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯ (p2.prodP p) (Fin.natAdd n2 i)
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙B.11. Associativity of the product of three pure tensors in one direction
set_option backward.isDefEq.respectTransparency false in
lemma Pure.prodP_assoc {n n1 n2} {c : Fin n → C}
{c1 : Fin n1 → C} {c2 : Fin n2 → C}
(p : Pure S c) (p1 : Pure S c1) (p2 : Pure S c2) :
prodP (prodP p p1) p2 =
permP _ IsReindexing.append_assoc_right (prodP p (prodP p1 p2)) := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2⊢ (p.prodP p1).prodP p2 = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2))
ext i 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i:Fin (n + n1 + n2)⊢ (p.prodP p1).prodP p2 i = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) i
refine Fin.addCases (fun i => Fin.addCases (fun i => ?_) (fun i => ?_) i) (fun i => ?_) i refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + n1 + n2)i:Fin n2⊢ (p.prodP p1).prodP p2 (Fin.natAdd (n + n1) i) = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.natAdd (n + n1) i)refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.castAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.castAdd n1 i))refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n1⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.natAdd n i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.natAdd n i))
· refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + n1 + n2)i:Fin n2⊢ (p.prodP p1).prodP p2 (Fin.natAdd (n + n1) i) = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.natAdd (n + n1) i) have h0 : (i.natAdd (n + n1)).cast (by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + n1 + n2)i:Fin n2⊢ n + n1 + n2 = n + (n1 + n2) refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd (n + n1) i) = Fin.natAdd n (Fin.natAdd n1 i)⊢ (p.prodP p1).prodP p2 (Fin.natAdd (n + n1) i) = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.natAdd (n + n1) i) grind All goals completed! 🐙 refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd (n + n1) i) = Fin.natAdd n (Fin.natAdd n1 i)⊢ (p.prodP p1).prodP p2 (Fin.natAdd (n + n1) i) = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.natAdd (n + n1) i)) = (i.natAdd n1).natAdd n := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2⊢ (p.prodP p1).prodP p2 = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2))refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd (n + n1) i) = Fin.natAdd n (Fin.natAdd n1 i)⊢ (p.prodP p1).prodP p2 (Fin.natAdd (n + n1) i) = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.natAdd (n + n1) i) grindrefine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd (n + n1) i) = Fin.natAdd n (Fin.natAdd n1 i)⊢ (p.prodP p1).prodP p2 (Fin.natAdd (n + n1) i) = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.natAdd (n + n1) i)refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd (n + n1) i) = Fin.natAdd n (Fin.natAdd n1 i)⊢ (p.prodP p1).prodP p2 (Fin.natAdd (n + n1) i) = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.natAdd (n + n1) i)
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙
· refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.castAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.castAdd n1 i)) have h0 : ((i.castAdd n1).castAdd n2).cast (by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n⊢ n + n1 + n2 = n + (n1 + n2) refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin nh0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.castAdd n1 i)) = Fin.castAdd (n1 + n2) i⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.castAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.castAdd n1 i)) grind All goals completed! 🐙refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin nh0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.castAdd n1 i)) = Fin.castAdd (n1 + n2) i⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.castAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.castAdd n1 i))) = i.castAdd (n1 + n2) := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2⊢ (p.prodP p1).prodP p2 = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2))refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin nh0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.castAdd n1 i)) = Fin.castAdd (n1 + n2) i⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.castAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.castAdd n1 i)) grindrefine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin nh0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.castAdd n1 i)) = Fin.castAdd (n1 + n2) i⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.castAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.castAdd n1 i))refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin nh0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.castAdd n1 i)) = Fin.castAdd (n1 + n2) i⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.castAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.castAdd n1 i))
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙
· refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n1⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.natAdd n i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.natAdd n i)) have h0 : ((i.natAdd n).castAdd n2).cast (by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n1⊢ n + n1 + n2 = n + (n1 + n2) refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n1h0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.natAdd n i)) = Fin.natAdd n (Fin.castAdd n2 i)⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.natAdd n i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.natAdd n i)) grind All goals completed! 🐙refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n1h0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.natAdd n i)) = Fin.natAdd n (Fin.castAdd n2 i)⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.natAdd n i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.natAdd n i))) = (i.castAdd n2).natAdd n := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2⊢ (p.prodP p1).prodP p2 = permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2))refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n1h0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.natAdd n i)) = Fin.natAdd n (Fin.castAdd n2 i)⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.natAdd n i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.natAdd n i)) grindrefine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n1h0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.natAdd n i)) = Fin.natAdd n (Fin.castAdd n2 i)⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.natAdd n i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.natAdd n i))refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + n1 + n2)i✝:Fin (n + n1)i:Fin n1h0:Fin.cast ⋯ (Fin.castAdd n2 (Fin.natAdd n i)) = Fin.natAdd n (Fin.castAdd n2 i)⊢ (p.prodP p1).prodP p2 (Fin.castAdd n2 (Fin.natAdd n i)) =
permP (Fin.cast ⋯) ⋯ (p.prodP (p1.prodP p2)) (Fin.castAdd n2 (Fin.natAdd n i))
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙B.12. Associativity of the product of three pure tensors in the other direction
lemma Pure.prodP_assoc' {n n1 n2} {c : Fin n → C}
{c1 : Fin n1 → C} {c2 : Fin n2 → C}
(p : Pure S c) (p1 : Pure S c1) (p2 : Pure S c2) :
prodP p (prodP p1 p2) = permP _ IsReindexing.append_assoc_left (prodP (prodP p p1) p2) := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2⊢ p.prodP (p1.prodP p2) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2)
ext i 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i:Fin (n + (n1 + n2))⊢ p.prodP (p1.prodP p2) i = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) i
refine Fin.addCases (fun i => ?_) (fun i => Fin.addCases (fun i => ?_) (fun i => ?_) i) i refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + (n1 + n2))i:Fin n⊢ p.prodP (p1.prodP p2) (Fin.castAdd (n1 + n2) i) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.castAdd (n1 + n2) i)refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n1⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.castAdd n2 i))refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n2⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.natAdd n1 i))
· refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + (n1 + n2))i:Fin n⊢ p.prodP (p1.prodP p2) (Fin.castAdd (n1 + n2) i) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.castAdd (n1 + n2) i) have h0 : (i.castAdd (n1 + n2)).cast (by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + (n1 + n2))i:Fin n⊢ n + (n1 + n2) = n + n1 + n2 refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + (n1 + n2))i:Fin nh0:Fin.cast ⋯ (Fin.castAdd (n1 + n2) i) = Fin.castAdd n2 (Fin.castAdd n1 i)⊢ p.prodP (p1.prodP p2) (Fin.castAdd (n1 + n2) i) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.castAdd (n1 + n2) i) grind All goals completed! 🐙 refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + (n1 + n2))i:Fin nh0:Fin.cast ⋯ (Fin.castAdd (n1 + n2) i) = Fin.castAdd n2 (Fin.castAdd n1 i)⊢ p.prodP (p1.prodP p2) (Fin.castAdd (n1 + n2) i) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.castAdd (n1 + n2) i)) = (i.castAdd n1).castAdd n2 := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2⊢ p.prodP (p1.prodP p2) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2)refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + (n1 + n2))i:Fin nh0:Fin.cast ⋯ (Fin.castAdd (n1 + n2) i) = Fin.castAdd n2 (Fin.castAdd n1 i)⊢ p.prodP (p1.prodP p2) (Fin.castAdd (n1 + n2) i) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.castAdd (n1 + n2) i) grindrefine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + (n1 + n2))i:Fin nh0:Fin.cast ⋯ (Fin.castAdd (n1 + n2) i) = Fin.castAdd n2 (Fin.castAdd n1 i)⊢ p.prodP (p1.prodP p2) (Fin.castAdd (n1 + n2) i) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.castAdd (n1 + n2) i)refine_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:ℕn1:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝:Fin (n + (n1 + n2))i:Fin nh0:Fin.cast ⋯ (Fin.castAdd (n1 + n2) i) = Fin.castAdd n2 (Fin.castAdd n1 i)⊢ p.prodP (p1.prodP p2) (Fin.castAdd (n1 + n2) i) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.castAdd (n1 + n2) i)
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙
· refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n1⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) have h0 : ((i.castAdd n2).natAdd n).cast (by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n1⊢ n + (n1 + n2) = n + n1 + n2 refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n1h0:Fin.cast ⋯ (Fin.natAdd n (Fin.castAdd n2 i)) = Fin.castAdd n2 (Fin.natAdd n i)⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) grind All goals completed! 🐙refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n1h0:Fin.cast ⋯ (Fin.natAdd n (Fin.castAdd n2 i)) = Fin.castAdd n2 (Fin.natAdd n i)⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.castAdd n2 i))) = (i.natAdd n).castAdd n2 := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2⊢ p.prodP (p1.prodP p2) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2)refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n1h0:Fin.cast ⋯ (Fin.natAdd n (Fin.castAdd n2 i)) = Fin.castAdd n2 (Fin.natAdd n i)⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) grindrefine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n1h0:Fin.cast ⋯ (Fin.natAdd n (Fin.castAdd n2 i)) = Fin.castAdd n2 (Fin.natAdd n i)⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.castAdd n2 i))refine_2 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n1h0:Fin.cast ⋯ (Fin.natAdd n (Fin.castAdd n2 i)) = Fin.castAdd n2 (Fin.natAdd n i)⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.castAdd n2 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.castAdd n2 i))
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙
· refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n2⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) have h0 : ((i.natAdd n1).natAdd n).cast (by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n2⊢ n + (n1 + n2) = n + n1 + n2 refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd n (Fin.natAdd n1 i)) = Fin.natAdd (n + n1) i⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) grind All goals completed! 🐙refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd n (Fin.natAdd n1 i)) = Fin.natAdd (n + n1) i⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.natAdd n1 i))) = i.natAdd (n + n1) := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2⊢ p.prodP (p1.prodP p2) = permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2)refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd n (Fin.natAdd n1 i)) = Fin.natAdd (n + n1) i⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) grindrefine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd n (Fin.natAdd n1 i)) = Fin.natAdd (n + n1) i⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.natAdd n1 i))refine_3 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cp1:Pure S c1p2:Pure S c2i✝¹:Fin (n + (n1 + n2))i✝:Fin (n1 + n2)i:Fin n2h0:Fin.cast ⋯ (Fin.natAdd n (Fin.natAdd n1 i)) = Fin.natAdd (n + n1) i⊢ p.prodP (p1.prodP p2) (Fin.natAdd n (Fin.natAdd n1 i)) =
permP (Fin.cast ⋯) ⋯ ((p.prodP p1).prodP p2) (Fin.natAdd n (Fin.natAdd n1 i))
simp [permP, ← congr_right _ _ _ h0] All goals completed! 🐙B.13. Linearity of the product
attribute [-simp] LinearEquiv.cast_apply
@[simp]
lemma Pure.prodP_update_left {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(p1 : Pure S c) (p2 : Pure S c1) (i : Fin n1) (x : V (c i)) :
Pure.prodP (Pure.update p1 i x) p2
= Pure.update (Pure.prodP p1 p2) (Fin.castAdd n2 i)
(LinearEquiv.cast (R := k) (by 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:ℕn':ℕn2✝:ℕc✝:Fin n → Cc':Fin n' → Cc2:Fin n2✝ → Cn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ c i = Fin.append c c1 (Fin.castAdd n2 i) simp All goals completed! 🐙) x) := by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ (p1.update i x).prodP p2 = (p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x)
ext i 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i✝:Fin n1x:V (c i)i:Fin (n1 + n2)⊢ (p1.update i✝ x).prodP p2 i = (p1.prodP p2).update (Fin.castAdd n2 i✝) ((LinearEquiv.cast ⋯) x) i
revert i 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ ∀ (i_1 : Fin (n1 + n2)),
(p1.update i x).prodP p2 i_1 = (p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) i_1
rw [Fin.forall_fin_add 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ (∀ (i_1 : Fin n1),
(p1.update i x).prodP p2 (Fin.castAdd n2 i_1) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)) ∧
∀ (j : Fin n2),
(p1.update i x).prodP p2 (Fin.natAdd n1 j) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (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) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ (∀ (i_1 : Fin n1),
(p1.update i x).prodP p2 (Fin.castAdd n2 i_1) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)) ∧
∀ (j : Fin n2),
(p1.update i x).prodP p2 (Fin.natAdd n1 j) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (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) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ (∀ (i_1 : Fin n1),
(p1.update i x).prodP p2 (Fin.castAdd n2 i_1) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)) ∧
∀ (j : Fin n2),
(p1.update i x).prodP p2 (Fin.natAdd n1 j) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j)
simp only [prodP_apply_castAdd, prodP_apply_natAdd] 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ (∀ (i_1 : Fin n1),
(LinearEquiv.cast ⋯) (p1.update i x i_1) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)) ∧
∀ (j : Fin n2),
(LinearEquiv.cast ⋯) (p2 j) = (p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j)
constructor left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ ∀ (i_1 : Fin n1),
(LinearEquiv.cast ⋯) (p1.update i x i_1) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ ∀ (j : Fin n2),
(LinearEquiv.cast ⋯) (p2 j) = (p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j)
· left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ ∀ (i_1 : Fin n1),
(LinearEquiv.cast ⋯) (p1.update i x i_1) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1) intro j left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1⊢ (LinearEquiv.cast ⋯) (p1.update i x j) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 j)
generalize_proofs h1 h2 h3 left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ (LinearEquiv.cast h2) (p1.update i x j) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast h3) x) (Fin.castAdd n2 j)
by_cases h : j = i pos 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:j = i⊢ (LinearEquiv.cast h2) (p1.update i x j) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast h3) x) (Fin.castAdd n2 j)neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p1.update i x j) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast h3) x) (Fin.castAdd n2 j)
· pos 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:j = i⊢ (LinearEquiv.cast h2) (p1.update i x j) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast h3) x) (Fin.castAdd n2 j) subst h pos 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)x:V (c j)h3:c j = Fin.append c c1 (Fin.castAdd n2 j)⊢ (LinearEquiv.cast h2) (p1.update j x j) =
(p1.prodP p2).update (Fin.castAdd n2 j) ((LinearEquiv.cast h3) x) (Fin.castAdd n2 j)
simp All goals completed! 🐙
· neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p1.update i x j) =
(p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast h3) x) (Fin.castAdd n2 j) rw [update_diff _ _ _ _ (by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ i ≠ j neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j) grind All goals completed! 🐙neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j)), update_diff _ _ _ _ (by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ Fin.castAdd n2 i ≠ Fin.castAdd n2 jneg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j) simp 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ ¬i = jneg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j); grind All goals completed! 🐙neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j))]neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j)
simp All goals completed! 🐙
· right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)⊢ ∀ (j : Fin n2),
(LinearEquiv.cast ⋯) (p2 j) = (p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j) intro j right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2⊢ (LinearEquiv.cast ⋯) (p2 j) = (p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j)
generalize_proofs h1 h2 h3 right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ (LinearEquiv.cast h2) (p2 j) = (p1.prodP p2).update (Fin.castAdd n2 i) ((LinearEquiv.cast h3) x) (Fin.natAdd n1 j)
rw [update_diff right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j)right.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ Fin.castAdd n2 i ≠ Fin.natAdd n1 j right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j)right.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ Fin.castAdd n2 i ≠ Fin.natAdd n1 j]right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j)right.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ Fin.castAdd n2 i ≠ Fin.natAdd n1 j
· right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j) simp All goals completed! 🐙
· right.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ Fin.castAdd n2 i ≠ Fin.natAdd n1 j simp [Fin.ext_iff] right.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n1x:V (c i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c i = Fin.append c c1 (Fin.castAdd n2 i)⊢ ¬↑i = n1 + ↑j
grind All goals completed! 🐙
@[simp]
lemma Pure.prodP_update_right {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(p1 : Pure S c) (p2 : Pure S c1) (i : Fin n2) (x : V (c1 i)) :
Pure.prodP p1 (Pure.update p2 i x)
= Pure.update (Pure.prodP p1 p2) (Fin.natAdd n1 i)
(LinearEquiv.cast (R := k) (by 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:ℕn':ℕn2✝:ℕc✝:Fin n → Cc':Fin n' → Cc2:Fin n2✝ → Cn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ c1 i = Fin.append c c1 (Fin.natAdd n1 i) simp All goals completed! 🐙) x) := by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ p1.prodP (p2.update i x) = (p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x)
ext i 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i✝:Fin n2x:V (c1 i)i:Fin (n1 + n2)⊢ p1.prodP (p2.update i✝ x) i = (p1.prodP p2).update (Fin.natAdd n1 i✝) ((LinearEquiv.cast ⋯) x) i
revert i 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ ∀ (i_1 : Fin (n1 + n2)),
p1.prodP (p2.update i x) i_1 = (p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) i_1
rw [Fin.forall_fin_add 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ (∀ (i_1 : Fin n1),
p1.prodP (p2.update i x) (Fin.castAdd n2 i_1) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)) ∧
∀ (j : Fin n2),
p1.prodP (p2.update i x) (Fin.natAdd n1 j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (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) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ (∀ (i_1 : Fin n1),
p1.prodP (p2.update i x) (Fin.castAdd n2 i_1) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)) ∧
∀ (j : Fin n2),
p1.prodP (p2.update i x) (Fin.natAdd n1 j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (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) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ (∀ (i_1 : Fin n1),
p1.prodP (p2.update i x) (Fin.castAdd n2 i_1) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)) ∧
∀ (j : Fin n2),
p1.prodP (p2.update i x) (Fin.natAdd n1 j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j)
simp only [prodP_apply_castAdd, prodP_apply_natAdd] 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ (∀ (i_1 : Fin n1),
(LinearEquiv.cast ⋯) (p1 i_1) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)) ∧
∀ (j : Fin n2),
(LinearEquiv.cast ⋯) (p2.update i x j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j)
constructor left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ ∀ (i_1 : Fin n1),
(LinearEquiv.cast ⋯) (p1 i_1) = (p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1)right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ ∀ (j : Fin n2),
(LinearEquiv.cast ⋯) (p2.update i x j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j)
· left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ ∀ (i_1 : Fin n1),
(LinearEquiv.cast ⋯) (p1 i_1) = (p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 i_1) intro j left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1⊢ (LinearEquiv.cast ⋯) (p1 j) = (p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.castAdd n2 j)
generalize_proofs h1 h2 h3 left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ (LinearEquiv.cast h2) (p1 j) = (p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast h3) x) (Fin.castAdd n2 j)
rw [update_diff left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j)left.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ Fin.natAdd n1 i ≠ Fin.castAdd n2 j left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j)left.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ Fin.natAdd n1 i ≠ Fin.castAdd n2 j]left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j)left.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ Fin.natAdd n1 i ≠ Fin.castAdd n2 j
· left 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ (LinearEquiv.cast h2) (p1 j) = p1.prodP p2 (Fin.castAdd n2 j) simp All goals completed! 🐙
· left.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ Fin.natAdd n1 i ≠ Fin.castAdd n2 j simp [Fin.ext_iff] left.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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n1h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = Fin.append c c1 (Fin.castAdd n2 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ ¬n1 + ↑i = ↑j
grind All goals completed! 🐙
· right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)⊢ ∀ (j : Fin n2),
(LinearEquiv.cast ⋯) (p2.update i x j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j) intro j right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2⊢ (LinearEquiv.cast ⋯) (p2.update i x j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast ⋯) x) (Fin.natAdd n1 j)
generalize_proofs h1 h2 h3 right 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)⊢ (LinearEquiv.cast h2) (p2.update i x j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast h3) x) (Fin.natAdd n1 j)
by_cases h : j = i pos 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:j = i⊢ (LinearEquiv.cast h2) (p2.update i x j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast h3) x) (Fin.natAdd n1 j)neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p2.update i x j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast h3) x) (Fin.natAdd n1 j)
· pos 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:j = i⊢ (LinearEquiv.cast h2) (p2.update i x j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast h3) x) (Fin.natAdd n1 j) subst h pos 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)x:V (c1 j)h3:c1 j = Fin.append c c1 (Fin.natAdd n1 j)⊢ (LinearEquiv.cast h2) (p2.update j x j) =
(p1.prodP p2).update (Fin.natAdd n1 j) ((LinearEquiv.cast h3) x) (Fin.natAdd n1 j)
simp All goals completed! 🐙
· neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p2.update i x j) =
(p1.prodP p2).update (Fin.natAdd n1 i) ((LinearEquiv.cast h3) x) (Fin.natAdd n1 j) rw [update_diff _ _ _ _ (by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ i ≠ j neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j) grind All goals completed! 🐙neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j)), update_diff _ _ _ _ (by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ Fin.natAdd n1 i ≠ Fin.natAdd n1 jneg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j) simp 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ ¬i = jneg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j); grind All goals completed! 🐙neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j))]neg 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)j:Fin n2h1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c1 j = Fin.append c c1 (Fin.natAdd n1 j)h3:c1 i = Fin.append c c1 (Fin.natAdd n1 i)h:¬j = i⊢ (LinearEquiv.cast h2) (p2 j) = p1.prodP p2 (Fin.natAdd n1 j)
simp All goals completed! 🐙lemma Pure.prodP_update_add_toTensor_left {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(p1 : Pure S c) (p2 : Pure S c1) (i : Fin n2) (x y : V (c1 i)) :
(Pure.prodP p1 (Pure.update p2 i (x + y))).toTensor
= (Pure.prodP p1 (Pure.update p2 i x)).toTensor
+ (Pure.prodP p1 (Pure.update p2 i y)).toTensor := by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cp1:Pure S cp2:Pure S c1i:Fin n2x:V (c1 i)y:V (c1 i)⊢ (p1.prodP (p2.update i (x + y))).toTensor = (p1.prodP (p2.update i x)).toTensor + (p1.prodP (p2.update i y)).toTensor simp All goals completed! 🐙C. Products of tensors
C.2. The product of two tensors
C.3. The product of two pure tensors as a tensor
lemma prodT_pure {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(t : Pure S c) (t1 : Pure S c1) :
(t.toTensor).prodT (t1.toTensor) = (Pure.prodP t t1).toTensor := by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Ct:Pure S ct1:Pure S c1⊢ (prodT t.toTensor) t1.toTensor = (t.prodP t1).toTensor
simp [prodT, Pure.toTensor] All goals completed! 🐙C.4. The product of basis vectors
lemma prodT_basis {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(b : ComponentIdx c) (b1 : ComponentIdx (S := S) c1) :
(basis c b).prodT (basis c1 b1) =
(Pure.basisVector _ (ComponentIdx.prod.symm (b, b1))).toTensor := by 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 b✝n1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx cb1:ComponentIdx c1⊢ (prodT ((basis c) b)) ((basis c1) b1) = (Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b, b1))).toTensor
rw [basis_apply, 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 b✝n1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx cb1:ComponentIdx c1⊢ (prodT (Pure.basisVector c b).toTensor) ((basis c1) b1) =
(Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b, b1))).toTensor All goals completed! 🐙 basis_apply, 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 b✝n1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx cb1:ComponentIdx c1⊢ (prodT (Pure.basisVector c b).toTensor) (Pure.basisVector c1 b1).toTensor =
(Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b, b1))).toTensor All goals completed! 🐙 prodT_pure, 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 b✝n1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx cb1:ComponentIdx c1⊢ ((Pure.basisVector c b).prodP (Pure.basisVector c1 b1)).toTensor =
(Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b, b1))).toTensor All goals completed! 🐙 Pure.prodP_basisVector 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 b✝n1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx cb1:ComponentIdx c1⊢ (Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b, b1))).toTensor =
(Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b, b1))).toTensor All goals completed! 🐙] All goals completed! 🐙
lemma prodT_basis' {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(b : ComponentIdx c) (b1 : ComponentIdx (S := S) c1) :
(basis c b).prodT (basis c1 b1) =
basis (Fin.append c c1) (ComponentIdx.prod.symm (b, b1)) := by 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 b✝n1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx cb1:ComponentIdx c1⊢ (prodT ((basis c) b)) ((basis c1) b1) = (basis (Fin.append c c1)) (ComponentIdx.prod.symm (b, b1))
rw [prodT_basis 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 b✝n1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx cb1:ComponentIdx c1⊢ (Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b, b1))).toTensor =
(basis (Fin.append c c1)) (ComponentIdx.prod.symm (b, b1)) 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 b✝n1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx cb1:ComponentIdx c1⊢ (Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b, b1))).toTensor =
(basis (Fin.append c c1)) (ComponentIdx.prod.symm (b, b1))] 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 b✝n1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx cb1:ComponentIdx c1⊢ (Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b, b1))).toTensor =
(basis (Fin.append c c1)) (ComponentIdx.prod.symm (b, b1))
simp [basis_apply] All goals completed! 🐙C.5. The product as an equivalence
The linear equivalence between S.Tensor c ⊗[k] S.Tensor c1 and
S.Tensor (Fin.append c c1).
set_option synthInstance.maxHeartbeats 0 in
noncomputable def tensorEquivProd {n n2 : ℕ} {c : Fin n → C} {c1 : Fin n2 → C} :
S.Tensor c ⊗[k] S.Tensor c1 ≃ₗ[k] S.Tensor (Fin.append c c1) where
toLinearMap := TensorProduct.lift prodT
invFun := (Tensor.basis (Fin.append c c1)).constr k (fun b =>
(Tensor.basis c) (ComponentIdx.prod b).1 ⊗ₜ[k]
(Tensor.basis c1) (ComponentIdx.prod b).2)
left_inv x := by 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1⊢ (((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2)
((lift prodT).toFun x) =
x
let f : S.Tensor (Fin.append c c1) →ₗ[k]
S.Tensor c ⊗[k] S.Tensor c1 :=
(Tensor.basis (Fin.append c c1)).constr k (fun b =>
(Tensor.basis c) (ComponentIdx.prod b).1 ⊗ₜ[k]
(Tensor.basis c1) (ComponentIdx.prod b).2) 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2⊢ (((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2)
((lift prodT).toFun x) =
x
let P (x : S.Tensor c ⊗[k] S.Tensor c1) := f (TensorProduct.lift prodT x) = x 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = x⊢ (((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2)
((lift prodT).toFun x) =
x
change P x 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = x⊢ P x
apply TensorProduct.induction_on zero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = x⊢ P 0tmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = x⊢ ∀ (x : S.Tensor c) (y : S.Tensor c1), P (x ⊗ₜ[k] y)add 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = x⊢ ∀ (x y : S.Tensor c ⊗[k] S.Tensor c1), P x → P y → P (x + y)
· zero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = x⊢ P 0 simp [P] All goals completed! 🐙
· tmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = x⊢ ∀ (x : S.Tensor c) (y : S.Tensor c1), P (x ⊗ₜ[k] y) intro t1 t2 tmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1⊢ P (t1 ⊗ₜ[k] t2)
apply induction_on_basis (t := t1) tmul.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1⊢ ∀ (b_1 : ComponentIdx c), P ((basis c) b_1 ⊗ₜ[k] t2)tmul.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1⊢ P (0 ⊗ₜ[k] t2)tmul.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1⊢ ∀ (r : k) (t : S.Tensor c), P (t ⊗ₜ[k] t2) → P ((r • t) ⊗ₜ[k] t2)tmul.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1⊢ ∀ (t1 t2_1 : S.Tensor c), P (t1 ⊗ₜ[k] t2) → P (t2_1 ⊗ₜ[k] t2) → P ((t1 + t2_1) ⊗ₜ[k] t2)
· tmul.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1⊢ ∀ (b_1 : ComponentIdx c), P ((basis c) b_1 ⊗ₜ[k] t2) intro b1 tmul.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] t2)
· tmul.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] t2) apply induction_on_basis (t := t2) tmul.h.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (b_1 : ComponentIdx c1), P ((basis c) b1 ⊗ₜ[k] (basis c1) b_1)tmul.h.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] 0)tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (r : k) (t : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t) → P ((basis c) b1 ⊗ₜ[k] (r • t))tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (t1 t2 : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t1) → P ((basis c) b1 ⊗ₜ[k] t2) → P ((basis c) b1 ⊗ₜ[k] (t1 + t2))
intro b2 tmul.h.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx cb2:ComponentIdx c1⊢ P ((basis c) b1 ⊗ₜ[k] (basis c1) b2)tmul.h.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] 0)tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (r : k) (t : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t) → P ((basis c) b1 ⊗ₜ[k] (r • t))tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (t1 t2 : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t1) → P ((basis c) b1 ⊗ₜ[k] t2) → P ((basis c) b1 ⊗ₜ[k] (t1 + t2))
dsimp [P] tmul.h.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx cb2:ComponentIdx c1⊢ f ((prodT ((basis c) b1)) ((basis c1) b2)) = (basis c) b1 ⊗ₜ[k] (basis c1) b2tmul.h.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] 0)tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (r : k) (t : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t) → P ((basis c) b1 ⊗ₜ[k] (r • t))tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (t1 t2 : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t1) → P ((basis c) b1 ⊗ₜ[k] t2) → P ((basis c) b1 ⊗ₜ[k] (t1 + t2))
rw [prodT_basis tmul.h.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx cb2:ComponentIdx c1⊢ f (Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b1, b2))).toTensor = (basis c) b1 ⊗ₜ[k] (basis c1) b2tmul.h.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] 0)tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (r : k) (t : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t) → P ((basis c) b1 ⊗ₜ[k] (r • t))tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (t1 t2 : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t1) → P ((basis c) b1 ⊗ₜ[k] t2) → P ((basis c) b1 ⊗ₜ[k] (t1 + t2)) tmul.h.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx cb2:ComponentIdx c1⊢ f (Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b1, b2))).toTensor = (basis c) b1 ⊗ₜ[k] (basis c1) b2tmul.h.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] 0)tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (r : k) (t : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t) → P ((basis c) b1 ⊗ₜ[k] (r • t))tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (t1 t2 : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t1) → P ((basis c) b1 ⊗ₜ[k] t2) → P ((basis c) b1 ⊗ₜ[k] (t1 + t2))] tmul.h.h 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx cb2:ComponentIdx c1⊢ f (Pure.basisVector (Fin.append c c1) (ComponentIdx.prod.symm (b1, b2))).toTensor = (basis c) b1 ⊗ₜ[k] (basis c1) b2tmul.h.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] 0)tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (r : k) (t : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t) → P ((basis c) b1 ⊗ₜ[k] (r • t))tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (t1 t2 : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t1) → P ((basis c) b1 ⊗ₜ[k] t2) → P ((basis c) b1 ⊗ₜ[k] (t1 + t2))
simp [f] tmul.h.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] 0)tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (r : k) (t : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t) → P ((basis c) b1 ⊗ₜ[k] (r • t))tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (t1 t2 : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t1) → P ((basis c) b1 ⊗ₜ[k] t2) → P ((basis c) b1 ⊗ₜ[k] (t1 + t2))
· tmul.h.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ P ((basis c) b1 ⊗ₜ[k] 0) simp [P] All goals completed! 🐙
· tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (r : k) (t : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t) → P ((basis c) b1 ⊗ₜ[k] (r • t)) intro r t h tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx cr:kt:S.Tensor c1h:P ((basis c) b1 ⊗ₜ[k] t)⊢ P ((basis c) b1 ⊗ₜ[k] (r • t))
simp [tmul_smul, P] at * tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx cr:kt:S.Tensor c1h:f ((prodT ((basis c) b1)) t) = (basis c) b1 ⊗ₜ[k] t⊢ r • f ((prodT ((basis c) b1)) t) = r • (basis c) b1 ⊗ₜ[k] t
rw [h tmul.h.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx cr:kt:S.Tensor c1h:f ((prodT ((basis c) b1)) t) = (basis c) b1 ⊗ₜ[k] t⊢ r • (basis c) b1 ⊗ₜ[k] t = r • (basis c) b1 ⊗ₜ[k] t All goals completed! 🐙] All goals completed! 🐙
· tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1b1:ComponentIdx c⊢ ∀ (t1 t2 : S.Tensor c1), P ((basis c) b1 ⊗ₜ[k] t1) → P ((basis c) b1 ⊗ₜ[k] t2) → P ((basis c) b1 ⊗ₜ[k] (t1 + t2)) intro t1 t2 h1 h2 tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1✝:S.Tensor ct2✝:S.Tensor c1b1:ComponentIdx ct1:S.Tensor c1t2:S.Tensor c1h1:P ((basis c) b1 ⊗ₜ[k] t1)h2:P ((basis c) b1 ⊗ₜ[k] t2)⊢ P ((basis c) b1 ⊗ₜ[k] (t1 + t2))
simp [tmul_add, P] at * tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1✝:S.Tensor ct2✝:S.Tensor c1b1:ComponentIdx ct1:S.Tensor c1t2:S.Tensor c1h1:f ((prodT ((basis c) b1)) t1) = (basis c) b1 ⊗ₜ[k] t1h2:f ((prodT ((basis c) b1)) t2) = (basis c) b1 ⊗ₜ[k] t2⊢ f ((prodT ((basis c) b1)) t1) + f ((prodT ((basis c) b1)) t2) = (basis c) b1 ⊗ₜ[k] t1 + (basis c) b1 ⊗ₜ[k] t2
rw [h1, tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1✝:S.Tensor ct2✝:S.Tensor c1b1:ComponentIdx ct1:S.Tensor c1t2:S.Tensor c1h1:f ((prodT ((basis c) b1)) t1) = (basis c) b1 ⊗ₜ[k] t1h2:f ((prodT ((basis c) b1)) t2) = (basis c) b1 ⊗ₜ[k] t2⊢ (basis c) b1 ⊗ₜ[k] t1 + f ((prodT ((basis c) b1)) t2) = (basis c) b1 ⊗ₜ[k] t1 + (basis c) b1 ⊗ₜ[k] t2 All goals completed! 🐙 h2 tmul.h.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1✝:S.Tensor ct2✝:S.Tensor c1b1:ComponentIdx ct1:S.Tensor c1t2:S.Tensor c1h1:f ((prodT ((basis c) b1)) t1) = (basis c) b1 ⊗ₜ[k] t1h2:f ((prodT ((basis c) b1)) t2) = (basis c) b1 ⊗ₜ[k] t2⊢ (basis c) b1 ⊗ₜ[k] t1 + (basis c) b1 ⊗ₜ[k] t2 = (basis c) b1 ⊗ₜ[k] t1 + (basis c) b1 ⊗ₜ[k] t2 All goals completed! 🐙] All goals completed! 🐙
· tmul.hzero 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1⊢ P (0 ⊗ₜ[k] t2) simp [P] All goals completed! 🐙
· tmul.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1⊢ ∀ (r : k) (t : S.Tensor c), P (t ⊗ₜ[k] t2) → P ((r • t) ⊗ₜ[k] t2) intro r t h tmul.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1r:kt:S.Tensor ch:P (t ⊗ₜ[k] t2)⊢ P ((r • t) ⊗ₜ[k] t2)
simp [smul_tmul, P] at * tmul.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1r:kt:S.Tensor ch:f ((prodT t) t2) = t ⊗ₜ[k] t2⊢ r • f ((prodT t) t2) = r • t ⊗ₜ[k] t2
rw [h tmul.hsmul 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1r:kt:S.Tensor ch:f ((prodT t) t2) = t ⊗ₜ[k] t2⊢ r • t ⊗ₜ[k] t2 = r • t ⊗ₜ[k] t2 All goals completed! 🐙] All goals completed! 🐙
· tmul.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1:S.Tensor ct2:S.Tensor c1⊢ ∀ (t1 t2_1 : S.Tensor c), P (t1 ⊗ₜ[k] t2) → P (t2_1 ⊗ₜ[k] t2) → P ((t1 + t2_1) ⊗ₜ[k] t2) intro t1 t2 h1 h2 tmul.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1✝:S.Tensor ct2✝:S.Tensor c1t1:S.Tensor ct2:S.Tensor ch1:P (t1 ⊗ₜ[k] t2✝)h2:P (t2 ⊗ₜ[k] t2✝)⊢ P ((t1 + t2) ⊗ₜ[k] t2✝)
simp [add_tmul, P] at * tmul.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1✝:S.Tensor ct2✝:S.Tensor c1t1:S.Tensor ct2:S.Tensor ch1:f ((prodT t1) t2✝) = t1 ⊗ₜ[k] t2✝h2:f ((prodT t2) t2✝) = t2 ⊗ₜ[k] t2✝⊢ f ((prodT t1) t2✝) + f ((prodT t2) t2✝) = t1 ⊗ₜ[k] t2✝ + t2 ⊗ₜ[k] t2✝
rw [h1, tmul.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1✝:S.Tensor ct2✝:S.Tensor c1t1:S.Tensor ct2:S.Tensor ch1:f ((prodT t1) t2✝) = t1 ⊗ₜ[k] t2✝h2:f ((prodT t2) t2✝) = t2 ⊗ₜ[k] t2✝⊢ t1 ⊗ₜ[k] t2✝ + f ((prodT t2) t2✝) = t1 ⊗ₜ[k] t2✝ + t2 ⊗ₜ[k] t2✝ All goals completed! 🐙 h2 tmul.hadd 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xt1✝:S.Tensor ct2✝:S.Tensor c1t1:S.Tensor ct2:S.Tensor ch1:f ((prodT t1) t2✝) = t1 ⊗ₜ[k] t2✝h2:f ((prodT t2) t2✝) = t2 ⊗ₜ[k] t2✝⊢ t1 ⊗ₜ[k] t2✝ + t2 ⊗ₜ[k] t2✝ = t1 ⊗ₜ[k] t2✝ + t2 ⊗ₜ[k] t2✝ All goals completed! 🐙] All goals completed! 🐙
· add 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = x⊢ ∀ (x y : S.Tensor c ⊗[k] S.Tensor c1), P x → P y → P (x + y) intro x y h1 h2 add 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx✝:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xx:S.Tensor c ⊗[k] S.Tensor c1y:S.Tensor c ⊗[k] S.Tensor c1h1:P xh2:P y⊢ P (x + y)
simp [P] at * add 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx✝:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xx:S.Tensor c ⊗[k] S.Tensor c1y:S.Tensor c ⊗[k] S.Tensor c1h1:f ((lift prodT) x) = xh2:f ((lift prodT) y) = y⊢ f ((lift prodT) x) + f ((lift prodT) y) = x + y
rw [h1, add 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx✝:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xx:S.Tensor c ⊗[k] S.Tensor c1y:S.Tensor c ⊗[k] S.Tensor c1h1:f ((lift prodT) x) = xh2:f ((lift prodT) y) = y⊢ x + f ((lift prodT) y) = x + y All goals completed! 🐙 h2 add 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx✝:S.Tensor c ⊗[k] S.Tensor c1f:S.Tensor (Fin.append c c1) →ₗ[k] S.Tensor c ⊗[k] S.Tensor c1 :=
((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2P:S.Tensor c ⊗[k] S.Tensor c1 → Prop := fun x => f ((lift prodT) x) = xx:S.Tensor c ⊗[k] S.Tensor c1y:S.Tensor c ⊗[k] S.Tensor c1h1:f ((lift prodT) x) = xh2:f ((lift prodT) y) = y⊢ x + y = x + y All goals completed! 🐙] All goals completed! 🐙
right_inv x := by 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor (Fin.append c c1)⊢ (lift prodT).toFun
((((basis (Fin.append c c1)).constr k) fun b_1 =>
(basis c) (ComponentIdx.prod b_1).1 ⊗ₜ[k] (basis c1) (ComponentIdx.prod b_1).2)
x) =
x
simp only [Basis.constr_apply_fintype, Basis.equivFun_apply, AddHom.toFun_eq_coe,
LinearMap.coe_toAddHom, map_sum, map_smul, lift.tmul] 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor (Fin.append c c1)⊢ ∑ x_1,
((basis (Fin.append c c1)).repr x) x_1 •
(prodT ((basis c) (ComponentIdx.prod x_1).1)) ((basis c1) (ComponentIdx.prod x_1).2) =
x
conv_rhs => rw [← (basis (Fin.append c c1)).sum_repr x] 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor (Fin.append c c1)| ∑ i, ((basis (Fin.append c c1)).repr x) i • (basis (Fin.append c c1)) i
congr e_f 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor (Fin.append c c1)⊢ (fun x_1 =>
((basis (Fin.append c c1)).repr x) x_1 •
(prodT ((basis c) (ComponentIdx.prod x_1).1)) ((basis c1) (ComponentIdx.prod x_1).2)) =
fun i => ((basis (Fin.append c c1)).repr x) i • (basis (Fin.append c c1)) i
funext φ e_f 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor (Fin.append c c1)φ:ComponentIdx (Fin.append c c1)⊢ ((basis (Fin.append c c1)).repr x) φ •
(prodT ((basis c) (ComponentIdx.prod φ).1)) ((basis c1) (ComponentIdx.prod φ).2) =
((basis (Fin.append c c1)).repr x) φ • (basis (Fin.append c c1)) φ
congr 1 e_f.e_a 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor (Fin.append c c1)φ:ComponentIdx (Fin.append c c1)⊢ (prodT ((basis c) (ComponentIdx.prod φ).1)) ((basis c1) (ComponentIdx.prod φ).2) = (basis (Fin.append c c1)) φ
simp only [prodT_basis, Prod.mk.eta, Equiv.symm_apply_apply] e_f.e_a 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✝:ℕn':ℕn2✝:ℕc✝:Fin n✝ → Cc':Fin n' → Cc2:Fin n2✝ → Cn:ℕn2:ℕc:Fin n → Cc1:Fin n2 → Cx:S.Tensor (Fin.append c c1)φ:ComponentIdx (Fin.append c c1)⊢ (Pure.basisVector (Fin.append c c1) φ).toTensor = (basis (Fin.append c c1)) φ
exact (basis_apply (Fin.append c c1) φ).symm All goals completed! 🐙C.6. Rewriting the basis for the product in terms of the tensor product basis
Rewriting basis for the product in terms of the tensor product basis.
lemma basis_prod_eq {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C} :
basis (S := S) (Fin.append c c1) =
(((Tensor.basis (S := S) c).tensorProduct (Tensor.basis (S := S) c1)).reindex
(ComponentIdx.prod.symm)).map tensorEquivProd := by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → C⊢ basis (Fin.append c c1) = (((basis c).tensorProduct (basis c1)).reindex ComponentIdx.prod.symm).map tensorEquivProd
ext b 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)⊢ (basis (Fin.append c c1)) b =
((((basis c).tensorProduct (basis c1)).reindex ComponentIdx.prod.symm).map tensorEquivProd) b
simp [ComponentIdx.prod, tensorEquivProd] 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)⊢ (basis (Fin.append c c1)) b =
(prodT ((basis c) fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i))))
((basis c1) fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i)))
rw [prodT_basis 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)⊢ (basis (Fin.append c c1)) b =
(Pure.basisVector (Fin.append c c1)
(ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i))))).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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)⊢ (basis (Fin.append c c1)) b =
(Pure.basisVector (Fin.append c c1)
(ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i))))).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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)⊢ (basis (Fin.append c c1)) b =
(Pure.basisVector (Fin.append c c1)
(ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i))))).toTensor
rw [← basis_apply 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)⊢ (basis (Fin.append c c1)) b =
(basis (Fin.append c c1))
(ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i)))) 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)⊢ (basis (Fin.append c c1)) b =
(basis (Fin.append c c1))
(ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i))))] 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)⊢ (basis (Fin.append c c1)) b =
(basis (Fin.append c c1))
(ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i))))
congr e_6 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)⊢ b =
ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i)))
funext i e_6 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)i:Fin (n1 + n2)⊢ b i =
ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i))) i
obtain ⟨i, rfl⟩ := finSumFinEquiv.surjective i e_6 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)i:Fin n1 ⊕ Fin n2⊢ b (finSumFinEquiv i) =
ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i)))
(finSumFinEquiv i)
rcases i with i | i e_6.inl 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)i:Fin n1⊢ b (finSumFinEquiv (Sum.inl i)) =
ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i)))
(finSumFinEquiv (Sum.inl i))e_6.inr 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)i:Fin n2⊢ b (finSumFinEquiv (Sum.inr i)) =
ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i)))
(finSumFinEquiv (Sum.inr i)) <;> e_6.inl 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)i:Fin n1⊢ b (finSumFinEquiv (Sum.inl i)) =
ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i)))
(finSumFinEquiv (Sum.inl i))e_6.inr 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cb:ComponentIdx (Fin.append c c1)i:Fin n2⊢ b (finSumFinEquiv (Sum.inr i)) =
ComponentIdx.prod.symm
(fun i => (basisIdxCongr ⋯) (b (Fin.castAdd n2 i)), fun i => (basisIdxCongr ⋯) (b (Fin.natAdd n1 i)))
(finSumFinEquiv (Sum.inr i)) simp [ComponentIdx.prod] All goals completed! 🐙
lemma prodT_basis_repr_apply {n m : ℕ} {c : Fin n → C} {c1 : Fin m → C}
(t : Tensor S c) (t1 : Tensor S c1)
(b : ComponentIdx (Fin.append c c1)) :
(basis (Fin.append c c1)).repr (prodT t t1) b =
(basis c).repr t (ComponentIdx.prod b).1 *
(basis c1).repr t1 (ComponentIdx.prod b).2 := by 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ((basis (Fin.append c c1)).repr ((prodT t) t1)) b =
((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2
apply induction_on_pure (t := t) h 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t1)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (r : k) (t : S.Tensor c),
((basis (Fin.append c c1)).repr ((prodT t) t1)) b =
((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 →
((basis (Fin.append c c1)).repr ((prodT (r • t)) t1)) b =
((basis c).repr (r • t)) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2hadd 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (t1_1 t2 : S.Tensor c),
((basis (Fin.append c c1)).repr ((prodT t1_1) t1)) b =
((basis c).repr t1_1) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 →
((basis (Fin.append c c1)).repr ((prodT t2) t1)) b =
((basis c).repr t2) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 →
((basis (Fin.append c c1)).repr ((prodT (t1_1 + t2)) t1)) b =
((basis c).repr (t1_1 + t2)) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2
· h 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t1)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 apply induction_on_pure (t := t1) h.h 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (p : Pure S c1) (p_1 : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p_1.toTensor) p.toTensor)) b =
((basis c).repr p_1.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr p.toTensor) (ComponentIdx.prod b).2h.hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (r : k) (t : S.Tensor c1),
(∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2) →
∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) (r • t))) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr (r • t)) (ComponentIdx.prod b).2h.hadd 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (t1 t2 : S.Tensor c1),
(∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t1)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2) →
(∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t2)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t2) (ComponentIdx.prod b).2) →
∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) (t1 + t2))) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr (t1 + t2)) (ComponentIdx.prod b).2
· h.h 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (p : Pure S c1) (p_1 : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p_1.toTensor) p.toTensor)) b =
((basis c).repr p_1.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr p.toTensor) (ComponentIdx.prod b).2 intro p p1 h.h 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)p:Pure S c1p1:Pure S c⊢ ((basis (Fin.append c c1)).repr ((prodT p1.toTensor) p.toTensor)) b =
((basis c).repr p1.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr p.toTensor) (ComponentIdx.prod b).2
simp only [prodT_pure, basis_repr_pure, Pure.prodP_component] All goals completed! 🐙
· h.hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (r : k) (t : S.Tensor c1),
(∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2) →
∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) (r • t))) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr (r • t)) (ComponentIdx.prod b).2 intro r t hp p h.hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor c1hp:∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2p:Pure S c⊢ ((basis (Fin.append c c1)).repr ((prodT p.toTensor) (r • t))) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr (r • t)) (ComponentIdx.prod b).2
simp only [basis_repr_pure, map_smul, Finsupp.coe_smul, Pi.smul_apply, smul_eq_mul] at hp ⊢ h.hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor c1p:Pure S chp:∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t)) b =
p.component (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2⊢ r * ((basis (Fin.append c c1)).repr ((prodT p.toTensor) t)) b =
p.component (ComponentIdx.prod b).1 * (r * ((basis c1).repr t) (ComponentIdx.prod b).2)
rw [hp h.hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor c1p:Pure S chp:∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t)) b =
p.component (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2⊢ r * (p.component (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2) =
p.component (ComponentIdx.prod b).1 * (r * ((basis c1).repr t) (ComponentIdx.prod b).2) h.hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor c1p:Pure S chp:∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t)) b =
p.component (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2⊢ r * (p.component (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2) =
p.component (ComponentIdx.prod b).1 * (r * ((basis c1).repr t) (ComponentIdx.prod b).2)] h.hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor c1p:Pure S chp:∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t)) b =
p.component (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2⊢ r * (p.component (ComponentIdx.prod b).1 * ((basis c1).repr t) (ComponentIdx.prod b).2) =
p.component (ComponentIdx.prod b).1 * (r * ((basis c1).repr t) (ComponentIdx.prod b).2)
ring All goals completed! 🐙
· h.hadd 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (t1 t2 : S.Tensor c1),
(∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t1)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2) →
(∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t2)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t2) (ComponentIdx.prod b).2) →
∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) (t1 + t2))) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr (t1 + t2)) (ComponentIdx.prod b).2 intro t1 t2 hp1 hp2 p h.hadd 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1✝:S.Tensor c1b:ComponentIdx (Fin.append c c1)t1:S.Tensor c1t2:S.Tensor c1hp1:∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t1)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2hp2:∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t2)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t2) (ComponentIdx.prod b).2p:Pure S c⊢ ((basis (Fin.append c c1)).repr ((prodT p.toTensor) (t1 + t2))) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr (t1 + t2)) (ComponentIdx.prod b).2
simp only [map_add, Finsupp.coe_add, Pi.add_apply, hp1, basis_repr_pure, hp2] h.hadd 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1✝:S.Tensor c1b:ComponentIdx (Fin.append c c1)t1:S.Tensor c1t2:S.Tensor c1hp1:∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t1)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2hp2:∀ (p : Pure S c),
((basis (Fin.append c c1)).repr ((prodT p.toTensor) t2)) b =
((basis c).repr p.toTensor) (ComponentIdx.prod b).1 * ((basis c1).repr t2) (ComponentIdx.prod b).2p:Pure S c⊢ p.component (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 +
p.component (ComponentIdx.prod b).1 * ((basis c1).repr t2) (ComponentIdx.prod b).2 =
p.component (ComponentIdx.prod b).1 *
(((basis c1).repr t1) (ComponentIdx.prod b).2 + ((basis c1).repr t2) (ComponentIdx.prod b).2)
ring_nf All goals completed! 🐙
· hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (r : k) (t : S.Tensor c),
((basis (Fin.append c c1)).repr ((prodT t) t1)) b =
((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 →
((basis (Fin.append c c1)).repr ((prodT (r • t)) t1)) b =
((basis c).repr (r • t)) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 intro r t hp hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor chp:((basis (Fin.append c c1)).repr ((prodT t) t1)) b =
((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2⊢ ((basis (Fin.append c c1)).repr ((prodT (r • t)) t1)) b =
((basis c).repr (r • t)) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2
simp only [map_smul, LinearMap.smul_apply, Finsupp.coe_smul, Pi.smul_apply, smul_eq_mul] at hp ⊢ hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor chp:((basis (Fin.append c c1)).repr ((prodT t) t1)) b =
((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2⊢ r * ((basis (Fin.append c c1)).repr ((prodT t) t1)) b =
r * ((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2
rw [hp hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor chp:((basis (Fin.append c c1)).repr ((prodT t) t1)) b =
((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2⊢ r * (((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2) =
r * ((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor chp:((basis (Fin.append c c1)).repr ((prodT t) t1)) b =
((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2⊢ r * (((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2) =
r * ((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2]hsmul 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct✝:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)r:kt:S.Tensor chp:((basis (Fin.append c c1)).repr ((prodT t) t1)) b =
((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2⊢ r * (((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2) =
r * ((basis c).repr t) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2
ring All goals completed! 🐙
· hadd 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1:S.Tensor c1b:ComponentIdx (Fin.append c c1)⊢ ∀ (t1_1 t2 : S.Tensor c),
((basis (Fin.append c c1)).repr ((prodT t1_1) t1)) b =
((basis c).repr t1_1) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 →
((basis (Fin.append c c1)).repr ((prodT t2) t1)) b =
((basis c).repr t2) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 →
((basis (Fin.append c c1)).repr ((prodT (t1_1 + t2)) t1)) b =
((basis c).repr (t1_1 + t2)) (ComponentIdx.prod b).1 * ((basis c1).repr t1) (ComponentIdx.prod b).2 intro t1 t2 hp1 hp2 hadd 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1✝:S.Tensor c1b:ComponentIdx (Fin.append c c1)t1:S.Tensor ct2:S.Tensor chp1:((basis (Fin.append c c1)).repr ((prodT t1) t1✝)) b =
((basis c).repr t1) (ComponentIdx.prod b).1 * ((basis c1).repr t1✝) (ComponentIdx.prod b).2hp2:((basis (Fin.append c c1)).repr ((prodT t2) t1✝)) b =
((basis c).repr t2) (ComponentIdx.prod b).1 * ((basis c1).repr t1✝) (ComponentIdx.prod b).2⊢ ((basis (Fin.append c c1)).repr ((prodT (t1 + t2)) t1✝)) b =
((basis c).repr (t1 + t2)) (ComponentIdx.prod b).1 * ((basis c1).repr t1✝) (ComponentIdx.prod b).2
simp only [map_add, LinearMap.add_apply, Finsupp.coe_add, Pi.add_apply, hp1, hp2] hadd 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 b✝n:ℕm:ℕc:Fin n → Cc1:Fin m → Ct:S.Tensor ct1✝:S.Tensor c1b:ComponentIdx (Fin.append c c1)t1:S.Tensor ct2:S.Tensor chp1:((basis (Fin.append c c1)).repr ((prodT t1) t1✝)) b =
((basis c).repr t1) (ComponentIdx.prod b).1 * ((basis c1).repr t1✝) (ComponentIdx.prod b).2hp2:((basis (Fin.append c c1)).repr ((prodT t2) t1✝)) b =
((basis c).repr t2) (ComponentIdx.prod b).1 * ((basis c1).repr t1✝) (ComponentIdx.prod b).2⊢ ((basis c).repr t1) (ComponentIdx.prod b).1 * ((basis c1).repr t1✝) (ComponentIdx.prod b).2 +
((basis c).repr t2) (ComponentIdx.prod b).1 * ((basis c1).repr t1✝) (ComponentIdx.prod b).2 =
(((basis c).repr t1) (ComponentIdx.prod b).1 + ((basis c).repr t2) (ComponentIdx.prod b).1) *
((basis c1).repr t1✝) (ComponentIdx.prod b).2
ring_nf All goals completed! 🐙C.7. Equivariance of the product of two tensors
@[simp]
lemma prodT_equivariant {n1 n2} {c : Fin n1 → C} {c1 : Fin n2 → C}
(g : G) (t : S.Tensor c) (t1 : S.Tensor c1) :
prodT (g • t) (g • t1) = g • prodT t t1 := by 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gt:S.Tensor ct1:S.Tensor c1⊢ (prodT (g • t)) (g • t1) = g • (prodT t) t1
induction' t using induction_on_pure with p r t ht t1 t2 ht1 ht2 h 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gt1:S.Tensor c1p:Pure S c⊢ (prodT (g • p.toTensor)) (g • t1) = g • (prodT p.toTensor) t1hsmul 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gt1:S.Tensor c1r:kt:S.Tensor cht:(prodT (g • t)) (g • t1) = g • (prodT t) t1⊢ (prodT (g • r • t)) (g • t1) = g • (prodT (r • t)) t1hadd 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gt1✝:S.Tensor c1t1:S.Tensor ct2:S.Tensor cht1:(prodT (g • t1)) (g • t1✝) = g • (prodT t1) t1✝ht2:(prodT (g • t2)) (g • t1✝) = g • (prodT t2) t1✝⊢ (prodT (g • (t1 + t2))) (g • t1✝) = g • (prodT (t1 + t2)) t1✝
· h 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gt1:S.Tensor c1p:Pure S c⊢ (prodT (g • p.toTensor)) (g • t1) = g • (prodT p.toTensor) t1 induction' t1 using induction_on_pure with q r t ht t1 t2 ht1 ht2 h.h 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cq:Pure S c1⊢ (prodT (g • p.toTensor)) (g • q.toTensor) = g • (prodT p.toTensor) q.toTensorh.hsmul 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cr:kt:S.Tensor c1ht:(prodT (g • p.toTensor)) (g • t) = g • (prodT p.toTensor) t⊢ (prodT (g • p.toTensor)) (g • r • t) = g • (prodT p.toTensor) (r • t)h.hadd 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S ct1:S.Tensor c1t2:S.Tensor c1ht1:(prodT (g • p.toTensor)) (g • t1) = g • (prodT p.toTensor) t1ht2:(prodT (g • p.toTensor)) (g • t2) = g • (prodT p.toTensor) t2⊢ (prodT (g • p.toTensor)) (g • (t1 + t2)) = g • (prodT p.toTensor) (t1 + t2)
· h.h 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cq:Pure S c1⊢ (prodT (g • p.toTensor)) (g • q.toTensor) = g • (prodT p.toTensor) q.toTensor simp [prodT_pure, actionT_pure] All goals completed! 🐙
· h.hsmul 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S cr:kt:S.Tensor c1ht:(prodT (g • p.toTensor)) (g • t) = g • (prodT p.toTensor) t⊢ (prodT (g • p.toTensor)) (g • r • t) = g • (prodT p.toTensor) (r • t) simp [actionT_smul, map_smul, ht] All goals completed! 🐙
· h.hadd 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gp:Pure S ct1:S.Tensor c1t2:S.Tensor c1ht1:(prodT (g • p.toTensor)) (g • t1) = g • (prodT p.toTensor) t1ht2:(prodT (g • p.toTensor)) (g • t2) = g • (prodT p.toTensor) t2⊢ (prodT (g • p.toTensor)) (g • (t1 + t2)) = g • (prodT p.toTensor) (t1 + t2) simp [map_add, ht1, ht2] All goals completed! 🐙
· hsmul 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gt1:S.Tensor c1r:kt:S.Tensor cht:(prodT (g • t)) (g • t1) = g • (prodT t) t1⊢ (prodT (g • r • t)) (g • t1) = g • (prodT (r • t)) t1 simp [actionT_smul, map_smul, ht] All goals completed! 🐙
· hadd 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 bn1:ℕn2:ℕc:Fin n1 → Cc1:Fin n2 → Cg:Gt1✝:S.Tensor c1t1:S.Tensor ct2:S.Tensor cht1:(prodT (g • t1)) (g • t1✝) = g • (prodT t1) t1✝ht2:(prodT (g • t2)) (g • t1✝) = g • (prodT t2) t1✝⊢ (prodT (g • (t1 + t2))) (g • t1✝) = g • (prodT (t1 + t2)) t1✝ simp [map_add, ht1, ht2] All goals completed! 🐙C.8. The product with the default tensor with no indices on the right
lemma prodT_default_right {n} {c : Fin n → C}
{c1 : Fin 0 → C} (t : S.Tensor c) :
prodT t (Pure.toTensor default : S.Tensor c1) =
permT id (IsReindexing.append_zero_right) t := by 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 → Cc1:Fin 0 → Ct:S.Tensor c⊢ (prodT t) default.toTensor = (permT id ⋯) t
induction' t using induction_on_pure with p r t ht t1 t2 ht1 ht2 h 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 → Cc1:Fin 0 → Cp:Pure S c⊢ (prodT p.toTensor) default.toTensor = (permT id ⋯) p.toTensorhsmul 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 → Cc1:Fin 0 → Cr:kt:S.Tensor cht:(prodT t) default.toTensor = (permT id ⋯) t⊢ (prodT (r • t)) default.toTensor = (permT id ⋯) (r • t)hadd 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 → Cc1:Fin 0 → Ct1:S.Tensor ct2:S.Tensor cht1:(prodT t1) default.toTensor = (permT id ⋯) t1ht2:(prodT t2) default.toTensor = (permT id ⋯) t2⊢ (prodT (t1 + t2)) default.toTensor = (permT id ⋯) (t1 + t2)
· h 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 → Cc1:Fin 0 → Cp:Pure S c⊢ (prodT p.toTensor) default.toTensor = (permT id ⋯) p.toTensor simp only [Nat.add_zero] h 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 → Cc1:Fin 0 → Cp:Pure S c⊢ (prodT p.toTensor) default.toTensor = (permT id ⋯) p.toTensor
rw (transparency := .instances) [prodT_pure h 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 → Cc1:Fin 0 → Cp:Pure S c⊢ (p.prodP default).toTensor = (permT id ⋯) p.toTensor h 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 → Cc1:Fin 0 → Cp:Pure S c⊢ (p.prodP default).toTensor = (permT id ⋯) p.toTensor] h 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 → Cc1:Fin 0 → Cp:Pure S c⊢ (p.prodP default).toTensor = (permT id ⋯) p.toTensor
rw [Pure.prodP_zero_right, h 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 → Cc1:Fin 0 → Cp:Pure S c⊢ (Pure.permP id ⋯ p).toTensor = (permT id ⋯) p.toTensor All goals completed! 🐙 permT_pure h 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 → Cc1:Fin 0 → Cp:Pure S c⊢ (Pure.permP id ⋯ p).toTensor = (Pure.permP id ⋯ p).toTensor All goals completed! 🐙] All goals completed! 🐙
· hsmul 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 → Cc1:Fin 0 → Cr:kt:S.Tensor cht:(prodT t) default.toTensor = (permT id ⋯) t⊢ (prodT (r • t)) default.toTensor = (permT id ⋯) (r • t) simp [map_smul, ht] All goals completed! 🐙
· hadd 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 → Cc1:Fin 0 → Ct1:S.Tensor ct2:S.Tensor cht1:(prodT t1) default.toTensor = (permT id ⋯) t1ht2:(prodT t2) default.toTensor = (permT id ⋯) t2⊢ (prodT (t1 + t2)) default.toTensor = (permT id ⋯) (t1 + t2) simp [map_add, ht1, ht2] All goals completed! 🐙
lemma prodT_zero_right {n} {c : Fin n → C}
{c1 : Fin 0 → C} (t : S.Tensor c) (t1 : S.Tensor c1) :
prodT t t1 = (toField t1) • permT id (IsReindexing.append_zero_right) t := by 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 → Cc1:Fin 0 → Ct:S.Tensor ct1:S.Tensor c1⊢ (prodT t) t1 = toField t1 • (permT id ⋯) t
conv_lhs => rw [Tensor.eq_smul_toField t1] 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 → Cc1:Fin 0 → Ct:S.Tensor ct1:S.Tensor c1| (prodT t) (toField t1 • (basis c1) default)
rw [map_smul 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 → Cc1:Fin 0 → Ct:S.Tensor ct1:S.Tensor c1⊢ toField t1 • (prodT t) ((basis c1) default) = toField t1 • (permT id ⋯) 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 → Cc1:Fin 0 → Ct:S.Tensor ct1:S.Tensor c1⊢ toField t1 • (prodT t) ((basis c1) default) = toField t1 • (permT id ⋯) 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 → Cc1:Fin 0 → Ct:S.Tensor ct1:S.Tensor c1⊢ toField t1 • (prodT t) ((basis c1) default) = toField t1 • (permT id ⋯) t
congr 1 e_a 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 → Cc1:Fin 0 → Ct:S.Tensor ct1:S.Tensor c1⊢ (prodT t) ((basis c1) default) = (permT id ⋯) t
convert prodT_default_right _ e'_2.e'_6 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 → Cc1:Fin 0 → Ct:S.Tensor ct1:S.Tensor c1⊢ (basis c1) default = default.toTensor
simp only [basis_apply] e'_2.e'_6 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 → Cc1:Fin 0 → Ct:S.Tensor ct1:S.Tensor c1⊢ (Pure.basisVector c1 default).toTensor = default.toTensor
congr e'_2.e'_6 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 → Cc1:Fin 0 → Ct:S.Tensor ct1:S.Tensor c1⊢ Pure.basisVector c1 default = default
exact Unique.eq_default (Pure.basisVector c1 default) All goals completed! 🐙C.9. Swapping the order of the product of two tensors
lemma prodT_swap {n n1} {c : Fin n → C} {c1 : Fin n1 → C} (t : S.Tensor c) (t1 : S.Tensor c1) :
prodT t t1 = permT _ IsReindexing.append_swap (prodT t1 t) := by 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 → Cc1:Fin n1 → Ct:S.Tensor ct1:S.Tensor c1⊢ (prodT t) t1 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1) t)
induction' t using induction_on_pure with p r t ht t1 t2 ht1 ht2 h 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 → Cc1:Fin n1 → Ct1:S.Tensor c1p:Pure S c⊢ (prodT p.toTensor) t1 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1) p.toTensor)hsmul 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 → Cc1:Fin n1 → Ct1:S.Tensor c1r:kt:S.Tensor cht:(prodT t) t1 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1) t)⊢ (prodT (r • t)) t1 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1) (r • t))hadd 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 → Cc1:Fin n1 → Ct1✝:S.Tensor c1t1:S.Tensor ct2:S.Tensor cht1:(prodT t1) t1✝ = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1✝) t1)ht2:(prodT t2) t1✝ = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1✝) t2)⊢ (prodT (t1 + t2)) t1✝ = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1✝) (t1 + t2))
· h 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 → Cc1:Fin n1 → Ct1:S.Tensor c1p:Pure S c⊢ (prodT p.toTensor) t1 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1) p.toTensor) induction' t1 using induction_on_pure with q r t ht t1 t2 ht1 ht2 h.h 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 → Cc1:Fin n1 → Cp:Pure S cq:Pure S c1⊢ (prodT p.toTensor) q.toTensor = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT q.toTensor) p.toTensor)h.hsmul 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 → Cc1:Fin n1 → Cp:Pure S cr:kt:S.Tensor c1ht:(prodT p.toTensor) t = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t) p.toTensor)⊢ (prodT p.toTensor) (r • t) = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT (r • t)) p.toTensor)h.hadd 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 → Cc1:Fin n1 → Cp:Pure S ct1:S.Tensor c1t2:S.Tensor c1ht1:(prodT p.toTensor) t1 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1) p.toTensor)ht2:(prodT p.toTensor) t2 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t2) p.toTensor)⊢ (prodT p.toTensor) (t1 + t2) = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT (t1 + t2)) p.toTensor)
· h.h 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 → Cc1:Fin n1 → Cp:Pure S cq:Pure S c1⊢ (prodT p.toTensor) q.toTensor = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT q.toTensor) p.toTensor) simp [prodT_pure, permT_pure, Pure.prodP_swap p q] All goals completed! 🐙
· h.hsmul 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 → Cc1:Fin n1 → Cp:Pure S cr:kt:S.Tensor c1ht:(prodT p.toTensor) t = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t) p.toTensor)⊢ (prodT p.toTensor) (r • t) = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT (r • t)) p.toTensor) simp [map_smul, ht] All goals completed! 🐙
· h.hadd 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 → Cc1:Fin n1 → Cp:Pure S ct1:S.Tensor c1t2:S.Tensor c1ht1:(prodT p.toTensor) t1 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1) p.toTensor)ht2:(prodT p.toTensor) t2 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t2) p.toTensor)⊢ (prodT p.toTensor) (t1 + t2) = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT (t1 + t2)) p.toTensor) simp [map_add, ht1, ht2] All goals completed! 🐙
· hsmul 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 → Cc1:Fin n1 → Ct1:S.Tensor c1r:kt:S.Tensor cht:(prodT t) t1 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1) t)⊢ (prodT (r • t)) t1 = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1) (r • t)) simp [ht] All goals completed! 🐙
· hadd 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 → Cc1:Fin n1 → Ct1✝:S.Tensor c1t1:S.Tensor ct2:S.Tensor cht1:(prodT t1) t1✝ = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1✝) t1)ht2:(prodT t2) t1✝ = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1✝) t2)⊢ (prodT (t1 + t2)) t1✝ = (permT (Fin.append (Fin.natAdd n1) (Fin.castAdd n)) ⋯) ((prodT t1✝) (t1 + t2)) simp [ht1, ht2] All goals completed! 🐙C.10. Permuting the indices of the left tensor in a product
@[simp]
lemma prodT_permT_left {n n'} {c : Fin n → C} {c' : Fin n' → C}
(σ : Fin n' → Fin n) (h : IsReindexing c c' σ) (t : S.Tensor c) (t2 : S.Tensor c2) :
prodT (permT σ h t) t2 = permT _ (h.append_congr_left c2) (prodT t t2) := by 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt:S.Tensor ct2:S.Tensor c2⊢ (prodT ((permT σ h) t)) t2 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT t) t2)
induction' t using induction_on_pure with p r t ht t1 t2 ht1 ht2 h 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2:S.Tensor c2p:Pure S c⊢ (prodT ((permT σ h) p.toTensor)) t2 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) t2)hsmul 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2:S.Tensor c2r:kt:S.Tensor cht:(prodT ((permT σ h) t)) t2 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT t) t2)⊢ (prodT ((permT σ h) (r • t))) t2 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT (r • t)) t2)hadd 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2✝:S.Tensor c2t1:S.Tensor ct2:S.Tensor cht1:(prodT ((permT σ h) t1)) t2✝ = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT t1) t2✝)ht2:(prodT ((permT σ h) t2)) t2✝ = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT t2) t2✝)⊢ (prodT ((permT σ h) (t1 + t2))) t2✝ = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT (t1 + t2)) t2✝)
· h 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2:S.Tensor c2p:Pure S c⊢ (prodT ((permT σ h) p.toTensor)) t2 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) t2) induction' t2 using induction_on_pure with q r t ht t1 t2 ht1 ht2 h.h 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cq:Pure S c2⊢ (prodT ((permT σ h) p.toTensor)) q.toTensor =
(permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) q.toTensor)h.hsmul 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cr:kt:S.Tensor c2ht:(prodT ((permT σ h) p.toTensor)) t = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) t)⊢ (prodT ((permT σ h) p.toTensor)) (r • t) =
(permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) (r • t))h.hadd 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S ct1:S.Tensor c2t2:S.Tensor c2ht1:(prodT ((permT σ h) p.toTensor)) t1 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) t1)ht2:(prodT ((permT σ h) p.toTensor)) t2 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) t2)⊢ (prodT ((permT σ h) p.toTensor)) (t1 + t2) =
(permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) (t1 + t2))
· h.h 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cq:Pure S c2⊢ (prodT ((permT σ h) p.toTensor)) q.toTensor =
(permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) q.toTensor) simp [prodT_pure, permT_pure] All goals completed! 🐙
· h.hsmul 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cr:kt:S.Tensor c2ht:(prodT ((permT σ h) p.toTensor)) t = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) t)⊢ (prodT ((permT σ h) p.toTensor)) (r • t) =
(permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) (r • t)) simp only [map_smul, ht] All goals completed! 🐙
· h.hadd 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S ct1:S.Tensor c2t2:S.Tensor c2ht1:(prodT ((permT σ h) p.toTensor)) t1 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) t1)ht2:(prodT ((permT σ h) p.toTensor)) t2 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) t2)⊢ (prodT ((permT σ h) p.toTensor)) (t1 + t2) =
(permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT p.toTensor) (t1 + t2)) simp only [map_add, ht1, ht2] All goals completed! 🐙
· hsmul 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2:S.Tensor c2r:kt:S.Tensor cht:(prodT ((permT σ h) t)) t2 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT t) t2)⊢ (prodT ((permT σ h) (r • t))) t2 = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT (r • t)) t2) simp [ht] All goals completed! 🐙
· hadd 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2✝:S.Tensor c2t1:S.Tensor ct2:S.Tensor cht1:(prodT ((permT σ h) t1)) t2✝ = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT t1) t2✝)ht2:(prodT ((permT σ h) t2)) t2✝ = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT t2) t2✝)⊢ (prodT ((permT σ h) (t1 + t2))) t2✝ = (permT (Fin.append (Fin.castAdd n2 ∘ σ) (Fin.natAdd n)) ⋯) ((prodT (t1 + t2)) t2✝) simp [ht1, ht2] All goals completed! 🐙C.11. Permuting the indices of the right tensor in a product
@[simp]
lemma prodT_permT_right {n n'} {c : Fin n → C} {c' : Fin n' → C}
(σ : Fin n' → Fin n) (h : IsReindexing c c' σ) (t : S.Tensor c) (t2 : S.Tensor c2) :
prodT t2 (permT σ h t) = permT _ (h.append_congr_right c2) (prodT t2 t) := by 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt:S.Tensor ct2:S.Tensor c2⊢ (prodT t2) ((permT σ h) t) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2) t)
induction' t using induction_on_pure with p r t ht t1 t2 ht1 ht2 h 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2:S.Tensor c2p:Pure S c⊢ (prodT t2) ((permT σ h) p.toTensor) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2) p.toTensor)hsmul 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2:S.Tensor c2r:kt:S.Tensor cht:(prodT t2) ((permT σ h) t) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2) t)⊢ (prodT t2) ((permT σ h) (r • t)) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2) (r • t))hadd 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2✝:S.Tensor c2t1:S.Tensor ct2:S.Tensor cht1:(prodT t2✝) ((permT σ h) t1) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2✝) t1)ht2:(prodT t2✝) ((permT σ h) t2) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2✝) t2)⊢ (prodT t2✝) ((permT σ h) (t1 + t2)) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2✝) (t1 + t2))
· h 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2:S.Tensor c2p:Pure S c⊢ (prodT t2) ((permT σ h) p.toTensor) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2) p.toTensor) induction' t2 using induction_on_pure with q r t ht t1 t2 ht1 ht2 h.h 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cq:Pure S c2⊢ (prodT q.toTensor) ((permT σ h) p.toTensor) =
(permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT q.toTensor) p.toTensor)h.hsmul 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cr:kt:S.Tensor c2ht:(prodT t) ((permT σ h) p.toTensor) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t) p.toTensor)⊢ (prodT (r • t)) ((permT σ h) p.toTensor) =
(permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT (r • t)) p.toTensor)h.hadd 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S ct1:S.Tensor c2t2:S.Tensor c2ht1:(prodT t1) ((permT σ h) p.toTensor) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t1) p.toTensor)ht2:(prodT t2) ((permT σ h) p.toTensor) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2) p.toTensor)⊢ (prodT (t1 + t2)) ((permT σ h) p.toTensor) =
(permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT (t1 + t2)) p.toTensor)
· h.h 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cq:Pure S c2⊢ (prodT q.toTensor) ((permT σ h) p.toTensor) =
(permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT q.toTensor) p.toTensor) simp [prodT_pure, permT_pure] All goals completed! 🐙
· h.hsmul 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S cr:kt:S.Tensor c2ht:(prodT t) ((permT σ h) p.toTensor) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t) p.toTensor)⊢ (prodT (r • t)) ((permT σ h) p.toTensor) =
(permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT (r • t)) p.toTensor) simp [map_smul, ht] All goals completed! 🐙
· h.hadd 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σp:Pure S ct1:S.Tensor c2t2:S.Tensor c2ht1:(prodT t1) ((permT σ h) p.toTensor) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t1) p.toTensor)ht2:(prodT t2) ((permT σ h) p.toTensor) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2) p.toTensor)⊢ (prodT (t1 + t2)) ((permT σ h) p.toTensor) =
(permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT (t1 + t2)) p.toTensor) simp [map_add, ht1, ht2] All goals completed! 🐙
· hsmul 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2:S.Tensor c2r:kt:S.Tensor cht:(prodT t2) ((permT σ h) t) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2) t)⊢ (prodT t2) ((permT σ h) (r • t)) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2) (r • t)) simp [ht] All goals completed! 🐙
· hadd 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 bn2:ℕc2:Fin n2 → Cn:ℕn':ℕc:Fin n → Cc':Fin n' → Cσ:Fin n' → Fin nh:IsReindexing c c' σt2✝:S.Tensor c2t1:S.Tensor ct2:S.Tensor cht1:(prodT t2✝) ((permT σ h) t1) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2✝) t1)ht2:(prodT t2✝) ((permT σ h) t2) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2✝) t2)⊢ (prodT t2✝) ((permT σ h) (t1 + t2)) = (permT (Fin.append (Fin.castAdd n) (Fin.natAdd n2 ∘ σ)) ⋯) ((prodT t2✝) (t1 + t2)) simp [ht1, ht2] All goals completed! 🐙C.12. Associativity of the product of three tensors in one direction
lemma prodT_assoc {n n1 n2} {c : Fin n → C}
{c1 : Fin n1 → C} {c2 : Fin n2 → C} (t : S.Tensor c) (t1 : S.Tensor c1) (t2 : S.Tensor c2) :
prodT (prodT t t1) t2 = permT _ IsReindexing.append_assoc_right (prodT t (prodT t1 t2)) := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct:S.Tensor ct1:S.Tensor c1t2:S.Tensor c2⊢ (prodT ((prodT t) t1)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT t) ((prodT t1) t2))
induction' t using induction_on_pure with p r t ht t1 t2 ht1 ht2 h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1:S.Tensor c1t2:S.Tensor c2p:Pure S c⊢ (prodT ((prodT p.toTensor) t1)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT t1) t2))hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1:S.Tensor c1t2:S.Tensor c2r:kt:S.Tensor cht:(prodT ((prodT t) t1)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT t) ((prodT t1) t2))⊢ (prodT ((prodT (r • t)) t1)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT (r • t)) ((prodT t1) t2))hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1✝:S.Tensor c1t2✝:S.Tensor c2t1:S.Tensor ct2:S.Tensor cht1:(prodT ((prodT t1) t1✝)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT t1) ((prodT t1✝) t2✝))ht2:(prodT ((prodT t2) t1✝)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT t2) ((prodT t1✝) t2✝))⊢ (prodT ((prodT (t1 + t2)) t1✝)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT (t1 + t2)) ((prodT t1✝) t2✝))
· h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1:S.Tensor c1t2:S.Tensor c2p:Pure S c⊢ (prodT ((prodT p.toTensor) t1)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT t1) t2)) induction' t1 using induction_on_pure with q r t ht t1 t2 ht1 ht2 h.h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2:S.Tensor c2p:Pure S cq:Pure S c1⊢ (prodT ((prodT p.toTensor) q.toTensor)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) t2))h.hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2:S.Tensor c2p:Pure S cr:kt:S.Tensor c1ht:(prodT ((prodT p.toTensor) t)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT t) t2))⊢ (prodT ((prodT p.toTensor) (r • t))) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT (r • t)) t2))h.hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2✝:S.Tensor c2p:Pure S ct1:S.Tensor c1t2:S.Tensor c1ht1:(prodT ((prodT p.toTensor) t1)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT t1) t2✝))ht2:(prodT ((prodT p.toTensor) t2)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT t2) t2✝))⊢ (prodT ((prodT p.toTensor) (t1 + t2))) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT (t1 + t2)) t2✝))
· h.h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2:S.Tensor c2p:Pure S cq:Pure S c1⊢ (prodT ((prodT p.toTensor) q.toTensor)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) t2)) induction' t2 using induction_on_pure with q r t ht t1 t2 ht1 ht2 h.h.h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq✝:Pure S c1q:Pure S c2⊢ (prodT ((prodT p.toTensor) q✝.toTensor)) q.toTensor =
(permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q✝.toTensor) q.toTensor))h.h.hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq:Pure S c1r:kt:S.Tensor c2ht:(prodT ((prodT p.toTensor) q.toTensor)) t = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) t))⊢ (prodT ((prodT p.toTensor) q.toTensor)) (r • t) =
(permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) (r • t)))h.h.hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq:Pure S c1t1:S.Tensor c2t2:S.Tensor c2ht1:(prodT ((prodT p.toTensor) q.toTensor)) t1 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) t1))ht2:(prodT ((prodT p.toTensor) q.toTensor)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) t2))⊢ (prodT ((prodT p.toTensor) q.toTensor)) (t1 + t2) =
(permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) (t1 + t2)))
· h.h.h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq✝:Pure S c1q:Pure S c2⊢ (prodT ((prodT p.toTensor) q✝.toTensor)) q.toTensor =
(permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q✝.toTensor) q.toTensor)) simp [prodT_pure, permT_pure, Pure.prodP_assoc] All goals completed! 🐙
· h.h.hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq:Pure S c1r:kt:S.Tensor c2ht:(prodT ((prodT p.toTensor) q.toTensor)) t = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) t))⊢ (prodT ((prodT p.toTensor) q.toTensor)) (r • t) =
(permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) (r • t))) simp [ht] All goals completed! 🐙
· h.h.hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq:Pure S c1t1:S.Tensor c2t2:S.Tensor c2ht1:(prodT ((prodT p.toTensor) q.toTensor)) t1 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) t1))ht2:(prodT ((prodT p.toTensor) q.toTensor)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) t2))⊢ (prodT ((prodT p.toTensor) q.toTensor)) (t1 + t2) =
(permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT q.toTensor) (t1 + t2))) simp [ht1, ht2] All goals completed! 🐙
· h.hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2:S.Tensor c2p:Pure S cr:kt:S.Tensor c1ht:(prodT ((prodT p.toTensor) t)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT t) t2))⊢ (prodT ((prodT p.toTensor) (r • t))) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT (r • t)) t2)) simp [ht] All goals completed! 🐙
· h.hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2✝:S.Tensor c2p:Pure S ct1:S.Tensor c1t2:S.Tensor c1ht1:(prodT ((prodT p.toTensor) t1)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT t1) t2✝))ht2:(prodT ((prodT p.toTensor) t2)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT t2) t2✝))⊢ (prodT ((prodT p.toTensor) (t1 + t2))) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT p.toTensor) ((prodT (t1 + t2)) t2✝)) simp [ht1, ht2] All goals completed! 🐙
· hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1:S.Tensor c1t2:S.Tensor c2r:kt:S.Tensor cht:(prodT ((prodT t) t1)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT t) ((prodT t1) t2))⊢ (prodT ((prodT (r • t)) t1)) t2 = (permT (Fin.cast ⋯) ⋯) ((prodT (r • t)) ((prodT t1) t2)) simp [ht] All goals completed! 🐙
· hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1✝:S.Tensor c1t2✝:S.Tensor c2t1:S.Tensor ct2:S.Tensor cht1:(prodT ((prodT t1) t1✝)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT t1) ((prodT t1✝) t2✝))ht2:(prodT ((prodT t2) t1✝)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT t2) ((prodT t1✝) t2✝))⊢ (prodT ((prodT (t1 + t2)) t1✝)) t2✝ = (permT (Fin.cast ⋯) ⋯) ((prodT (t1 + t2)) ((prodT t1✝) t2✝)) simp [ht1, ht2] All goals completed! 🐙C.13. Associativity of the product of three tensors in the other direction
lemma prodT_assoc' {n n1 n2} {c : Fin n → C}
{c1 : Fin n1 → C} {c2 : Fin n2 → C} (t : S.Tensor c) (t1 : S.Tensor c1) (t2 : S.Tensor c2) :
prodT t (prodT t1 t2) = permT _ IsReindexing.append_assoc_left (prodT (prodT t t1) t2) := by 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct:S.Tensor ct1:S.Tensor c1t2:S.Tensor c2⊢ (prodT t) ((prodT t1) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT t) t1)) t2)
induction' t using induction_on_pure with p r t ht t1 t2 ht1 ht2 h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1:S.Tensor c1t2:S.Tensor c2p:Pure S c⊢ (prodT p.toTensor) ((prodT t1) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) t1)) t2)hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1:S.Tensor c1t2:S.Tensor c2r:kt:S.Tensor cht:(prodT t) ((prodT t1) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT t) t1)) t2)⊢ (prodT (r • t)) ((prodT t1) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT (r • t)) t1)) t2)hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1✝:S.Tensor c1t2✝:S.Tensor c2t1:S.Tensor ct2:S.Tensor cht1:(prodT t1) ((prodT t1✝) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT t1) t1✝)) t2✝)ht2:(prodT t2) ((prodT t1✝) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT t2) t1✝)) t2✝)⊢ (prodT (t1 + t2)) ((prodT t1✝) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT (t1 + t2)) t1✝)) t2✝)
· h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1:S.Tensor c1t2:S.Tensor c2p:Pure S c⊢ (prodT p.toTensor) ((prodT t1) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) t1)) t2) induction' t1 using induction_on_pure with q r t ht t1 t2 ht1 ht2 h.h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2:S.Tensor c2p:Pure S cq:Pure S c1⊢ (prodT p.toTensor) ((prodT q.toTensor) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) t2)h.hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2:S.Tensor c2p:Pure S cr:kt:S.Tensor c1ht:(prodT p.toTensor) ((prodT t) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) t)) t2)⊢ (prodT p.toTensor) ((prodT (r • t)) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) (r • t))) t2)h.hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2✝:S.Tensor c2p:Pure S ct1:S.Tensor c1t2:S.Tensor c1ht1:(prodT p.toTensor) ((prodT t1) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) t1)) t2✝)ht2:(prodT p.toTensor) ((prodT t2) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) t2)) t2✝)⊢ (prodT p.toTensor) ((prodT (t1 + t2)) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) (t1 + t2))) t2✝)
· h.h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2:S.Tensor c2p:Pure S cq:Pure S c1⊢ (prodT p.toTensor) ((prodT q.toTensor) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) t2) induction' t2 using induction_on_pure with q r t ht t1 t2 ht1 ht2 h.h.h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq✝:Pure S c1q:Pure S c2⊢ (prodT p.toTensor) ((prodT q✝.toTensor) q.toTensor) =
(permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q✝.toTensor)) q.toTensor)h.h.hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq:Pure S c1r:kt:S.Tensor c2ht:(prodT p.toTensor) ((prodT q.toTensor) t) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) t)⊢ (prodT p.toTensor) ((prodT q.toTensor) (r • t)) =
(permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) (r • t))h.h.hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq:Pure S c1t1:S.Tensor c2t2:S.Tensor c2ht1:(prodT p.toTensor) ((prodT q.toTensor) t1) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) t1)ht2:(prodT p.toTensor) ((prodT q.toTensor) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) t2)⊢ (prodT p.toTensor) ((prodT q.toTensor) (t1 + t2)) =
(permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) (t1 + t2))
· h.h.h 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq✝:Pure S c1q:Pure S c2⊢ (prodT p.toTensor) ((prodT q✝.toTensor) q.toTensor) =
(permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q✝.toTensor)) q.toTensor) simp [prodT_pure, permT_pure, Pure.prodP_assoc'] All goals completed! 🐙
· h.h.hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq:Pure S c1r:kt:S.Tensor c2ht:(prodT p.toTensor) ((prodT q.toTensor) t) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) t)⊢ (prodT p.toTensor) ((prodT q.toTensor) (r • t)) =
(permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) (r • t)) simp [ht] All goals completed! 🐙
· h.h.hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Cp:Pure S cq:Pure S c1t1:S.Tensor c2t2:S.Tensor c2ht1:(prodT p.toTensor) ((prodT q.toTensor) t1) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) t1)ht2:(prodT p.toTensor) ((prodT q.toTensor) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) t2)⊢ (prodT p.toTensor) ((prodT q.toTensor) (t1 + t2)) =
(permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) q.toTensor)) (t1 + t2)) simp [ht1, ht2] All goals completed! 🐙
· h.hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2:S.Tensor c2p:Pure S cr:kt:S.Tensor c1ht:(prodT p.toTensor) ((prodT t) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) t)) t2)⊢ (prodT p.toTensor) ((prodT (r • t)) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) (r • t))) t2) simp [ht] All goals completed! 🐙
· h.hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct2✝:S.Tensor c2p:Pure S ct1:S.Tensor c1t2:S.Tensor c1ht1:(prodT p.toTensor) ((prodT t1) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) t1)) t2✝)ht2:(prodT p.toTensor) ((prodT t2) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) t2)) t2✝)⊢ (prodT p.toTensor) ((prodT (t1 + t2)) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT p.toTensor) (t1 + t2))) t2✝) simp [ht1, ht2] All goals completed! 🐙
· hsmul 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1:S.Tensor c1t2:S.Tensor c2r:kt:S.Tensor cht:(prodT t) ((prodT t1) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT t) t1)) t2)⊢ (prodT (r • t)) ((prodT t1) t2) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT (r • t)) t1)) t2) simp [ht] All goals completed! 🐙
· hadd 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:ℕn2:ℕc:Fin n → Cc1:Fin n1 → Cc2:Fin n2 → Ct1✝:S.Tensor c1t2✝:S.Tensor c2t1:S.Tensor ct2:S.Tensor cht1:(prodT t1) ((prodT t1✝) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT t1) t1✝)) t2✝)ht2:(prodT t2) ((prodT t1✝) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT t2) t1✝)) t2✝)⊢ (prodT (t1 + t2)) ((prodT t1✝) t2✝) = (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT (t1 + t2)) t1✝)) t2✝) simp [ht1, ht2] All goals completed! 🐙