Imports
/-
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Tooby-Smith
-/
module
public import Physlib.Relativity.Tensors.Contraction.ProductsConstructors of tensors.
There are a number of ways to construct explicit tensors.
@[expose] public sectionattribute [-simp] LinearEquiv.cast_applyTensors with a single index.
lemma fromSingleT_symm_pure {c : C} (p : Pure S ![c]) :
fromSingleT.symm p.toTensor = Pure.fromSingleP.symm p :=
PiTensorProduct.subsingletonEquiv_apply_tprod 0 pk:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V c⊢ fromSingleT.symm (fromSingleT x) = Pure.fromSingleP.symm (Pure.fromSingleP x)
simp All goals completed! 🐙
lemma actionT_fromSingleT {c : C} (x : V c) (g : G) :
g • fromSingleT (S := S) x = fromSingleT (rep c g x) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ g • fromSingleT x = fromSingleT (((rep c) g) x)
rw [fromSingleT_eq_pureT, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ (g •
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x) =
fromSingleT (((rep c) g) x) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ (g • fun x_1 =>
match x_1 with
| 0 => x).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => ((rep c) g) x actionT_pure, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ (g • fun x_1 =>
match x_1 with
| 0 => x).toTensor =
fromSingleT (((rep c) g) x) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ (g • fun x_1 =>
match x_1 with
| 0 => x).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => ((rep c) g) x fromSingleT_eq_pureT k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ (g • fun x_1 =>
match x_1 with
| 0 => x).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => ((rep c) g) x k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ (g • fun x_1 =>
match x_1 with
| 0 => x).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => ((rep c) g) x] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ (g • fun x_1 =>
match x_1 with
| 0 => x).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => ((rep c) g) x
congr k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ (g • fun x_1 =>
match x_1 with
| 0 => x) =
fun x_1 =>
match x_1 with
| 0 => ((rep c) g) x
funext x k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx✝:V cg:Gx:Fin (Nat.succ 0)⊢ (g • fun x =>
match x with
| 0 => x✝)
x =
match x with
| 0 => ((rep c) g) x✝
fin_cases x «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cg:G⊢ (g • fun x_1 =>
match x_1 with
| 0 => x)
((fun i => i) ⟨0, ⋯⟩) =
match (fun i => i) ⟨0, ⋯⟩ with
| 0 => ((rep c) g) x
rfl All goals completed! 🐙
lemma fromSingleT_map {c c1 : C}
(h : c = c1) (x : V c) :
fromSingleT (LinearEquiv.cast (R := k) h x) =
permT id (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ IsReindexing ![c] ![c1] id simp [h] All goals completed! 🐙) (fromSingleT (S := S) x) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ fromSingleT ((LinearEquiv.cast h) x) = (permT id ⋯) (fromSingleT x)
rw [fromSingleT_eq_pureT, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ (Pure.toTensor fun x_1 =>
match x_1 with
| 0 => (LinearEquiv.cast h) x) =
(permT id ⋯) (fromSingleT x) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ (Pure.toTensor fun x_1 =>
match x_1 with
| 0 => (LinearEquiv.cast h) x) =
(Pure.permP id ⋯ fun x_1 =>
match x_1 with
| 0 => x).toTensor fromSingleT_eq_pureT, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ (Pure.toTensor fun x_1 =>
match x_1 with
| 0 => (LinearEquiv.cast h) x) =
(permT id ⋯)
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ (Pure.toTensor fun x_1 =>
match x_1 with
| 0 => (LinearEquiv.cast h) x) =
(Pure.permP id ⋯ fun x_1 =>
match x_1 with
| 0 => x).toTensor permT_pure k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ (Pure.toTensor fun x_1 =>
match x_1 with
| 0 => (LinearEquiv.cast h) x) =
(Pure.permP id ⋯ fun x_1 =>
match x_1 with
| 0 => x).toTensor k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ (Pure.toTensor fun x_1 =>
match x_1 with
| 0 => (LinearEquiv.cast h) x) =
(Pure.permP id ⋯ fun x_1 =>
match x_1 with
| 0 => x).toTensor] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ (Pure.toTensor fun x_1 =>
match x_1 with
| 0 => (LinearEquiv.cast h) x) =
(Pure.permP id ⋯ fun x_1 =>
match x_1 with
| 0 => x).toTensor
congr k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ (fun x_1 =>
match x_1 with
| 0 => (LinearEquiv.cast h) x) =
Pure.permP id ⋯ fun x_1 =>
match x_1 with
| 0 => x
funext i k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V ci:Fin (Nat.succ 0)⊢ (match i with
| 0 => (LinearEquiv.cast h) x) =
Pure.permP id ⋯
(fun x_1 =>
match x_1 with
| 0 => x)
i
fin_cases i «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Ch:c = c1x:V c⊢ (match (fun i => i) ⟨0, ⋯⟩ with
| 0 => (LinearEquiv.cast h) x) =
Pure.permP id ⋯
(fun x_1 =>
match x_1 with
| 0 => x)
((fun i => i) ⟨0, ⋯⟩)
rfl All goals completed! 🐙
lemma contrT_fromSingleT_fromSingleT {c : C} (x : V c)
(y : V (S.τ c)) :
contrT (S := S) 0 0 1 (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ 0 ≠ 1 ∧ S.τ (Fin.append ![c] ![S.τ c] 0) = Fin.append ![c] ![S.τ c] 1 simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ S.τ (Fin.append ![c] ![S.τ c] 0) = Fin.append ![c] ![S.τ c] 1; rfl All goals completed! 🐙) (prodT (fromSingleT x) (fromSingleT y)) =
(S.contr c) (x ⊗ₜ[k] y) • (Pure.toTensor default) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (contrT 0 0 1 ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) = (S.contr c) (x ⊗ₜ[k] y) • default.toTensor
rw [fromSingleT_eq_pureT, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (contrT 0 0 1 ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(fromSingleT y)) =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (S.contr (Fin.append ![c] ![S.τ c] 0))
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
0 ⊗ₜ[k]
(LinearEquiv.cast ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
1)) •
(Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor fromSingleT_eq_pureT, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (contrT 0 0 1 ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(Pure.toTensor fun x =>
match x with
| 0 => y)) =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (S.contr (Fin.append ![c] ![S.τ c] 0))
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
0 ⊗ₜ[k]
(LinearEquiv.cast ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
1)) •
(Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor prodT_pure, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (contrT 0 0 1 ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (S.contr (Fin.append ![c] ![S.τ c] 0))
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
0 ⊗ₜ[k]
(LinearEquiv.cast ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
1)) •
(Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor contrT_pure, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ Pure.contrP 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y) =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (S.contr (Fin.append ![c] ![S.τ c] 0))
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
0 ⊗ₜ[k]
(LinearEquiv.cast ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
1)) •
(Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor Pure.contrP, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ Pure.contrPCoeff 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y) •
(Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (S.contr (Fin.append ![c] ![S.τ c] 0))
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
0 ⊗ₜ[k]
(LinearEquiv.cast ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
1)) •
(Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor
Pure.contrPCoeff k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (S.contr (Fin.append ![c] ![S.τ c] 0))
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
0 ⊗ₜ[k]
(LinearEquiv.cast ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
1)) •
(Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (S.contr (Fin.append ![c] ![S.τ c] 0))
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
0 ⊗ₜ[k]
(LinearEquiv.cast ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
1)) •
(Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (S.contr (Fin.append ![c] ![S.τ c] 0))
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
0 ⊗ₜ[k]
(LinearEquiv.cast ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(fun x =>
match x with
| 0 => y)
1)) •
(Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
(S.contr c) (x ⊗ₜ[k] y) • default.toTensor
congr 1 e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
default.toTensor
simp only [Nat.reduceAdd, Nat.succ_eq_add_one, Fin.isValue] e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ (Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
default.toTensor
congr e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)⊢ Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y) =
default
ext i e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cx:V cy:V (S.τ c)i:Fin 0⊢ Pure.dropPair 0 1 ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
i =
default i
fin_cases i All goals completed! 🐙Tensors with two indices.
fromPairT
lemma fromPairT_tmul {c1 c2 : C} (x : V c1)
(y : V c2) : fromPairT (x ⊗ₜ[k] y) =
permT id (And.intro Function.bijective_id (fun i => by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2i:Fin (Nat.succ 0 + Nat.succ 0)⊢ Fin.append ![c1] ![c2] (id i) = ![c1, c2] i fin_cases i «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Fin.append ![c1] ![c2] (id ((fun i => i) ⟨0, ⋯⟩)) = ![c1, c2] ((fun i => i) ⟨0, ⋯⟩)«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Fin.append ![c1] ![c2] (id ((fun i => i) ⟨1, ⋯⟩)) = ![c1, c2] ((fun i => i) ⟨1, ⋯⟩) <;> «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Fin.append ![c1] ![c2] (id ((fun i => i) ⟨0, ⋯⟩)) = ![c1, c2] ((fun i => i) ⟨0, ⋯⟩)«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Fin.append ![c1] ![c2] (id ((fun i => i) ⟨1, ⋯⟩)) = ![c1, c2] ((fun i => i) ⟨1, ⋯⟩) rfl All goals completed! 🐙))
(prodT (fromSingleT (S := S) x) (fromSingleT y)) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ fromPairT (x ⊗ₜ[k] y) = (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))
rfl All goals completed! 🐙
lemma fromPairT_eq_pure {c1 c2 : C} (x : V c1) (y : V c2) :
fromPairT (S := S) (x ⊗ₜ[k] y) = Pure.toTensor (fun | 0 => x | 1 => y) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ fromPairT (x ⊗ₜ[k] y) =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y
rw [fromPairT_tmul, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y fromSingleT_eq_pureT, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(fromSingleT y)) =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y fromSingleT_eq_pureT, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(Pure.toTensor fun x =>
match x with
| 0 => y)) =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y prodT_pure, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y permT_pure k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor =
Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x
| 1 => y
congr k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y) =
fun x_1 =>
match x_1 with
| 0 => x
| 1 => y
funext i k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2i:Fin (Nat.succ 0 + Nat.succ 0)⊢ Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
i =
match i with
| 0 => x
| 1 => y
fin_cases i «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
((fun i => i) ⟨0, ⋯⟩) =
match (fun i => i) ⟨0, ⋯⟩ with
| 0 => x
| 1 => y«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
((fun i => i) ⟨1, ⋯⟩) =
match (fun i => i) ⟨1, ⋯⟩ with
| 0 => x
| 1 => y <;> «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
((fun i => i) ⟨0, ⋯⟩) =
match (fun i => i) ⟨0, ⋯⟩ with
| 0 => x
| 1 => y«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
((fun i => i) ⟨1, ⋯⟩) =
match (fun i => i) ⟨1, ⋯⟩ with
| 0 => x
| 1 => y rfl All goals completed! 🐙
lemma actionT_fromPairT {c1 c2 : C}
(x : V c1 ⊗[k]V c2)
(g : G) :
g • fromPairT (S := S) x = fromPairT (TensorProduct.map (rep c1 g)
(rep c2 g) x) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1 ⊗[k] V c2g:G⊢ g • fromPairT x = fromPairT ((map ((rep c1) g) ((rep c2) g)) x)
induction x using TensorProduct.induction_on with
| zero => zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:G⊢ g • fromPairT 0 = fromPairT ((map ((rep c1) g) ((rep c2) g)) 0) simp All goals completed! 🐙
| tmul x y => tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ g • fromPairT (x ⊗ₜ[k] y) = fromPairT ((map ((rep c1) g) ((rep c2) g)) (x ⊗ₜ[k] y))
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, map_tmul] tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ g • fromPairT (x ⊗ₜ[k] y) = fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y)
rw [fromPairT_tmul, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ g • (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) = fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT (((rep c1) g) x))) (fromSingleT (((rep c2) g) y))) =
fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y) ← permT_equivariant, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) (g • (prodT (fromSingleT x)) (fromSingleT y)) = fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT (((rep c1) g) x))) (fromSingleT (((rep c2) g) y))) =
fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y) ← prodT_equivariant, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) ((prodT (g • fromSingleT x)) (g • fromSingleT y)) = fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y)tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT (((rep c1) g) x))) (fromSingleT (((rep c2) g) y))) =
fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y)
actionT_fromSingleT, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT (((rep c1) g) x))) (g • fromSingleT y)) =
fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y)tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT (((rep c1) g) x))) (fromSingleT (((rep c2) g) y))) =
fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y) actionT_fromSingleT tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT (((rep c1) g) x))) (fromSingleT (((rep c2) g) y))) =
fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y)tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT (((rep c1) g) x))) (fromSingleT (((rep c2) g) y))) =
fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y)]tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT (((rep c1) g) x))) (fromSingleT (((rep c2) g) y))) =
fromPairT (((rep c1) g) x ⊗ₜ[k] ((rep c2) g) y)
rfl All goals completed! 🐙
| add x y hx hy => add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cg:Gx:V c1 ⊗[k] V c2y:V c1 ⊗[k] V c2hx:g • fromPairT x = fromPairT ((map ((rep c1) g) ((rep c2) g)) x)hy:g • fromPairT y = fromPairT ((map ((rep c1) g) ((rep c2) g)) y)⊢ g • fromPairT (x + y) = fromPairT ((map ((rep c1) g) ((rep c2) g)) (x + y)) simp [hx, hy] All goals completed! 🐙
lemma fromPairT_map_right {c1 c2 c2' : C} (h :c2 = c2')
(x : V c1 ⊗[k] V c2) :
fromPairT (TensorProduct.map LinearMap.id
(LinearEquiv.cast (R := k) (M := V) h) x : _ ⊗[k] V c2') =
permT id (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1 ⊗[k] V c2⊢ IsReindexing ![c1, c2] ![c1, c2'] id simp [h] All goals completed! 🐙) (fromPairT (S := S) x) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1 ⊗[k] V c2⊢ fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) x) = (permT id ⋯) (fromPairT x)
induction' x using TensorProduct.induction_on with x y x1 x2 h1 h2 zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'⊢ fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) 0) = (permT id ⋯) (fromPairT 0)tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) (x ⊗ₜ[k] y)) = (permT id ⋯) (fromPairT (x ⊗ₜ[k] y))add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x1:V c1 ⊗[k] V c2x2:V c1 ⊗[k] V c2h1:fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) x1) = (permT id ⋯) (fromPairT x1)h2:fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) x2) = (permT id ⋯) (fromPairT x2)⊢ fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) (x1 + x2)) = (permT id ⋯) (fromPairT (x1 + x2))
· zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'⊢ fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) 0) = (permT id ⋯) (fromPairT 0) simp All goals completed! 🐙
· tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) (x ⊗ₜ[k] y)) = (permT id ⋯) (fromPairT (x ⊗ₜ[k] y)) simp only [Nat.succ_eq_add_one, Nat.reduceAdd, map_tmul, LinearMap.id_coe, id_eq,
LinearEquiv.coe_coe] tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ fromPairT (x ⊗ₜ[k] (LinearEquiv.cast h) y) = (permT id ⋯) (fromPairT (x ⊗ₜ[k] y))
rw [fromPairT_tmul, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT ((LinearEquiv.cast h) y))) = (permT id ⋯) (fromPairT (x ⊗ₜ[k] y)) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT ((LinearEquiv.cast h) y))) =
(permT id ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))) fromPairT_tmul tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT ((LinearEquiv.cast h) y))) =
(permT id ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT ((LinearEquiv.cast h) y))) =
(permT id ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)))]tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT ((LinearEquiv.cast h) y))) =
(permT id ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)))
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, permT_permT, CompTriple.comp_eq] tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT ((LinearEquiv.cast h) y))) =
(permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))
rw [fromSingleT_map, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT x)) ((permT id ⋯) (fromSingleT y))) =
(permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT (Fin.append (Fin.castAdd (Nat.succ 0)) (Fin.natAdd 1 ∘ id) ∘ id) ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) =
(permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) prodT_permT_right, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT id ⋯)
((permT (Fin.append (Fin.castAdd (Nat.succ 0)) (Fin.natAdd 1 ∘ id)) ⋯) ((prodT (fromSingleT x)) (fromSingleT y))) =
(permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT (Fin.append (Fin.castAdd (Nat.succ 0)) (Fin.natAdd 1 ∘ id) ∘ id) ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) =
(permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) permT_permT tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT (Fin.append (Fin.castAdd (Nat.succ 0)) (Fin.natAdd 1 ∘ id) ∘ id) ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) =
(permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT (Fin.append (Fin.castAdd (Nat.succ 0)) (Fin.natAdd 1 ∘ id) ∘ id) ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) =
(permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))]tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT (Fin.append (Fin.castAdd (Nat.succ 0)) (Fin.natAdd 1 ∘ id) ∘ id) ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) =
(permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, CompTriple.comp_eq] tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ (permT (Fin.append (Fin.castAdd 1) (Fin.natAdd 1)) ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) =
(permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))
congr tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x:V c1y:V c2⊢ Fin.append (Fin.castAdd 1) (Fin.natAdd 1) = id
exact List.ofFn_inj.mp rfl All goals completed! 🐙
· add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc2':Ch:c2 = c2'x1:V c1 ⊗[k] V c2x2:V c1 ⊗[k] V c2h1:fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) x1) = (permT id ⋯) (fromPairT x1)h2:fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) x2) = (permT id ⋯) (fromPairT x2)⊢ fromPairT ((map LinearMap.id ↑(LinearEquiv.cast h)) (x1 + x2)) = (permT id ⋯) (fromPairT (x1 + x2)) simp [h1, h2] All goals completed! 🐙
lemma fromPairT_comm {c1 c2 : C}
(x : V c1 ⊗[k] V c2) :
fromPairT (TensorProduct.comm k _ _ x) =
permT ![1, 0] (And.intro (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1 ⊗[k] V c2⊢ Function.Bijective ![1, 0] decide All goals completed! 🐙) (fun i => by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1 ⊗[k] V c2i:Fin (Nat.succ 0).succ⊢ ![c1, c2] (![1, 0] i) = ![c2, c1] i fin_cases i «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1 ⊗[k] V c2⊢ ![c1, c2] (![1, 0] ((fun i => i) ⟨0, ⋯⟩)) = ![c2, c1] ((fun i => i) ⟨0, ⋯⟩)«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1 ⊗[k] V c2⊢ ![c1, c2] (![1, 0] ((fun i => i) ⟨1, ⋯⟩)) = ![c2, c1] ((fun i => i) ⟨1, ⋯⟩) <;> «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1 ⊗[k] V c2⊢ ![c1, c2] (![1, 0] ((fun i => i) ⟨0, ⋯⟩)) = ![c2, c1] ((fun i => i) ⟨0, ⋯⟩)«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1 ⊗[k] V c2⊢ ![c1, c2] (![1, 0] ((fun i => i) ⟨1, ⋯⟩)) = ![c2, c1] ((fun i => i) ⟨1, ⋯⟩) simp All goals completed! 🐙))
(fromPairT (S := S) x) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1 ⊗[k] V c2⊢ fromPairT ((TensorProduct.comm k (V c1) (V c2)) x) = (permT ![1, 0] ⋯) (fromPairT x)
induction x using TensorProduct.induction_on with
| zero => zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:C⊢ fromPairT ((TensorProduct.comm k (V c1) (V c2)) 0) = (permT ![1, 0] ⋯) (fromPairT 0) simp All goals completed! 🐙
| tmul x y => tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ fromPairT ((TensorProduct.comm k (V c1) (V c2)) (x ⊗ₜ[k] y)) = (permT ![1, 0] ⋯) (fromPairT (x ⊗ₜ[k] y))
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, comm_tmul, Fin.isValue] tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ fromPairT (y ⊗ₜ[k] x) = (permT ![1, 0] ⋯) (fromPairT (x ⊗ₜ[k] y))
rw [fromPairT_tmul, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT y)) (fromSingleT x)) = (permT ![1, 0] ⋯) (fromPairT (x ⊗ₜ[k] y)) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯)
((permT (Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd (Nat.succ 0))) ⋯)
((prodT (fromSingleT x)) (fromSingleT y))) =
(permT ![1, 0] ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))) fromPairT_tmul, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯) ((prodT (fromSingleT y)) (fromSingleT x)) =
(permT ![1, 0] ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯)
((permT (Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd (Nat.succ 0))) ⋯)
((prodT (fromSingleT x)) (fromSingleT y))) =
(permT ![1, 0] ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))) prodT_swap tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯)
((permT (Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd (Nat.succ 0))) ⋯)
((prodT (fromSingleT x)) (fromSingleT y))) =
(permT ![1, 0] ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)))tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯)
((permT (Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd (Nat.succ 0))) ⋯)
((prodT (fromSingleT x)) (fromSingleT y))) =
(permT ![1, 0] ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)))]tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT id ⋯)
((permT (Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd (Nat.succ 0))) ⋯)
((prodT (fromSingleT x)) (fromSingleT y))) =
(permT ![1, 0] ⋯) ((permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y)))
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, permT_permT, CompTriple.comp_eq, Fin.isValue] tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ (permT (Fin.append (Fin.natAdd 1) (Fin.castAdd 1)) ⋯) ((prodT (fromSingleT x)) (fromSingleT y)) =
(permT ![1, 0] ⋯) ((prodT (fromSingleT x)) (fromSingleT y))
congr tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ Fin.append (Fin.natAdd 1) (Fin.castAdd 1) = ![1, 0]
ext i tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2i:Fin (1 + 1)⊢ ↑(Fin.append (Fin.natAdd 1) (Fin.castAdd 1) i) = ↑(![1, 0] i)
fin_cases i tmul.«0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ ↑(Fin.append (Fin.natAdd 1) (Fin.castAdd 1) ((fun i => i) ⟨0, ⋯⟩)) = ↑(![1, 0] ((fun i => i) ⟨0, ⋯⟩))tmul.«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ ↑(Fin.append (Fin.natAdd 1) (Fin.castAdd 1) ((fun i => i) ⟨1, ⋯⟩)) = ↑(![1, 0] ((fun i => i) ⟨1, ⋯⟩)) <;> tmul.«0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ ↑(Fin.append (Fin.natAdd 1) (Fin.castAdd 1) ((fun i => i) ⟨0, ⋯⟩)) = ↑(![1, 0] ((fun i => i) ⟨0, ⋯⟩))tmul.«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1y:V c2⊢ ↑(Fin.append (Fin.natAdd 1) (Fin.castAdd 1) ((fun i => i) ⟨1, ⋯⟩)) = ↑(![1, 0] ((fun i => i) ⟨1, ⋯⟩)) rfl All goals completed! 🐙
| add x y hx hy => add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cx:V c1 ⊗[k] V c2y:V c1 ⊗[k] V c2hx:fromPairT ((TensorProduct.comm k (V c1) (V c2)) x) = (permT ![1, 0] ⋯) (fromPairT x)hy:fromPairT ((TensorProduct.comm k (V c1) (V c2)) y) = (permT ![1, 0] ⋯) (fromPairT y)⊢ fromPairT ((TensorProduct.comm k (V c1) (V c2)) (x + y)) = (permT ![1, 0] ⋯) (fromPairT (x + y)) simp [hx, hy] All goals completed! 🐙Contraction of fromPairT with fromSingleT
lemma fromSingleTContrFromPairT_tmul {c c2 : C}
(x : V c) (y1 : V (S.τ c)) (y2 : V c2) :
fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2) =
S.contr c (x ⊗ₜ[k] y1) • fromSingleT y2 := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2) = (S.contr c) (x ⊗ₜ[k] y1) • fromSingleT y2
simp [fromSingleTContrFromPairT] All goals completed! 🐙
lemma fromSingleT_contr_fromPairT_tmul {c c2 : C}
(x : V c) (y1 : V (S.τ c)) (y2 : V c2) :
contrT 1 0 1 (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ 0 ≠ 1 ∧ S.τ (Fin.append ![c] ![S.τ c, c2] 0) = Fin.append ![c] ![S.τ c, c2] 1 simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ S.τ (Fin.append ![c] ![S.τ c, c2] 0) = Fin.append ![c] ![S.τ c, c2] 1; rfl All goals completed! 🐙)
(prodT (fromSingleT x) (fromPairT (y1 ⊗ₜ[k] y2))) =
permT id (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ IsReindexing ![c2] (Fin.append ![c] ![S.τ c, c2] ∘ Fin.succSuccAbove 0 1) id simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ c2 = Fin.append ![c] ![S.τ c, c2] (Fin.succSuccAbove 0 1 0); rfl All goals completed! 🐙) (fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2)) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT (y1 ⊗ₜ[k] y2))) =
(permT id ⋯) (fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2))
trans permT id (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ IsReindexing (Fin.append (Fin.append ![c] ![S.τ c] ∘ Fin.succSuccAbove 0 1) ![c2])
(Fin.append ![c] ![S.τ c, c2] ∘ Fin.succSuccAbove 0 1) id simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ Fin.append (Fin.append ![c] ![S.τ c] ∘ Fin.succSuccAbove 0 1) ![c2] 0 =
Fin.append ![c] ![S.τ c, c2] (Fin.succSuccAbove 0 1 0); rfl All goals completed! 🐙)
(prodT (contrT 0 0 1 (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ 0 ≠ 1 ∧ S.τ (Fin.append ![c] ![S.τ c] 0) = Fin.append ![c] ![S.τ c] 1 simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ S.τ (Fin.append ![c] ![S.τ c] 0) = Fin.append ![c] ![S.τ c] 1; rfl All goals completed! 🐙) (prodT (fromSingleT x) (fromSingleT y1))) (fromSingleT y2))
· k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT (y1 ⊗ₜ[k] y2))) =
(permT id ⋯) ((prodT ((contrT 0 0 1 ⋯) ((prodT (fromSingleT x)) (fromSingleT y1)))) (fromSingleT y2)) conv_rhs =>
enter [2] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (prodT ((contrT 0 0 1 ⋯) ((prodT (fromSingleT x)) (fromSingleT y1)))) (fromSingleT y2)
rw [prodT_swap] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT (Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd 0)) ⋯)
((prodT (fromSingleT y2)) ((contrT 0 0 1 ⋯) ((prodT (fromSingleT x)) (fromSingleT y1))))
enter [2] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (prodT (fromSingleT y2)) ((contrT 0 0 1 ⋯) ((prodT (fromSingleT x)) (fromSingleT y1)))
rw [prodT_contrT_snd] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT id ⋯)
((contrT ((Nat.succ 0).add 0) (Fin.natAdd (Nat.succ 0) 0) (Fin.natAdd (Nat.succ 0) 1) ⋯)
((prodT (fromSingleT y2)) ((prodT (fromSingleT x)) (fromSingleT y1))))
change permT id _ (contrT 1 1 2 _ _) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT id ⋯) ((contrT 1 1 2 ⋯) ((prodT (fromSingleT y2)) ((prodT (fromSingleT x)) (fromSingleT y1))))
conv_rhs =>
enter [2, 2, 2, 2] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (prodT (fromSingleT y2)) ((prodT (fromSingleT x)) (fromSingleT y1))
rw [prodT_swap] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯)
((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2))
conv_rhs =>
enter [2, 2, 2] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (contrT 1 1 2 ⋯)
((permT (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯)
((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2)))
rw [contrT_permT] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT (Fin.funPredPredAbove 1 2 ⋯ (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯) ⋯)
((contrT 1 (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0)) 1)
(Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0)) 2) ⋯)
((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2)))
enter [2] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (contrT 1 (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0)) 1)
(Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0)) 2) ⋯)
((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2))
change contrT 1 0 1 _ _ k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (contrT 1 0 1 ⋯) ((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2))
conv_rhs =>
rw [permT_permT, permT_permT, permT_permT] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT
(Fin.funPredPredAbove 1 2 ⋯ (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯ ∘
id ∘ Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd 0) ∘ id)
⋯)
((contrT 1 0 1 ⋯) ((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2)))
rw [fromPairT_tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) ((permT id ⋯) ((prodT (fromSingleT y1)) (fromSingleT y2)))) =
(permT
(Fin.funPredPredAbove 1 2 ⋯ (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯ ∘
id ∘ Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd 0) ∘ id)
⋯)
((contrT 1 0 1 ⋯) ((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2))) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) ((permT id ⋯) ((prodT (fromSingleT y1)) (fromSingleT y2)))) =
(permT
(Fin.funPredPredAbove 1 2 ⋯ (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯ ∘
id ∘ Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd 0) ∘ id)
⋯)
((contrT 1 0 1 ⋯) ((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2)))] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) ((permT id ⋯) ((prodT (fromSingleT y1)) (fromSingleT y2)))) =
(permT
(Fin.funPredPredAbove 1 2 ⋯ (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯ ∘
id ∘ Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd 0) ∘ id)
⋯)
((contrT 1 0 1 ⋯) ((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2)))
symm k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT
(Fin.funPredPredAbove 1 2 ⋯ (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯ ∘
id ∘ Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd 0) ∘ id)
⋯)
((contrT 1 0 1 ⋯) ((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2))) =
(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) ((permT id ⋯) ((prodT (fromSingleT y1)) (fromSingleT y2))))
conv_rhs =>
enter [2] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (prodT (fromSingleT x)) ((permT id ⋯) ((prodT (fromSingleT y1)) (fromSingleT y2)))
rw [prodT_permT_right] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT (Fin.append (Fin.castAdd (Nat.succ 0 + Nat.succ 0)) (Fin.natAdd (Nat.succ 0) ∘ id)) ⋯)
((prodT (fromSingleT x)) ((prodT (fromSingleT y1)) (fromSingleT y2)))
enter [2] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (prodT (fromSingleT x)) ((prodT (fromSingleT y1)) (fromSingleT y2))
rw [prodT_assoc'] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT (Fin.cast ⋯) ⋯) ((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2))
conv_rhs =>
enter [2] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT (Fin.append (Fin.castAdd (Nat.succ 0 + Nat.succ 0)) (Fin.natAdd (Nat.succ 0) ∘ id)) ⋯)
((permT (Fin.cast ⋯) ⋯) ((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2)))
rw [permT_permT] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT (Fin.cast ⋯ ∘ Fin.append (Fin.castAdd (Nat.succ 0 + Nat.succ 0)) (Fin.natAdd (Nat.succ 0) ∘ id)) ⋯)
((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2))
conv_rhs =>
rw [contrT_permT] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2| (permT
(Fin.funPredPredAbove 0 1 ⋯
(Fin.cast ⋯ ∘ Fin.append (Fin.castAdd (Nat.succ 0 + Nat.succ 0)) (Fin.natAdd (Nat.succ 0) ∘ id)) ⋯)
⋯)
((contrT 1 ((Fin.cast ⋯ ∘ Fin.append (Fin.castAdd (Nat.succ 0 + Nat.succ 0)) (Fin.natAdd (Nat.succ 0) ∘ id)) 0)
((Fin.cast ⋯ ∘ Fin.append (Fin.castAdd (Nat.succ 0 + Nat.succ 0)) (Fin.natAdd (Nat.succ 0) ∘ id)) 1) ⋯)
((prodT ((prodT (fromSingleT x)) (fromSingleT y1))) (fromSingleT y2)))
refine permT_congr ?_ rfl k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ Fin.funPredPredAbove 1 2 ⋯ (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯ ∘
id ∘ Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd 0) ∘ id =
Fin.funPredPredAbove 0 1 ⋯
(Fin.cast ⋯ ∘ Fin.append (Fin.castAdd (Nat.succ 0 + Nat.succ 0)) (Fin.natAdd (Nat.succ 0) ∘ id)) ⋯
ext i k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2i:Fin 1⊢ ↑((Fin.funPredPredAbove 1 2 ⋯ (Fin.append (Fin.natAdd (0 + 1 + 1)) (Fin.castAdd (Nat.succ 0))) ⋯ ∘
id ∘ Fin.append (Fin.natAdd (Nat.succ 0)) (Fin.castAdd 0) ∘ id)
i) =
↑(Fin.funPredPredAbove 0 1 ⋯
(Fin.cast ⋯ ∘ Fin.append (Fin.castAdd (Nat.succ 0 + Nat.succ 0)) (Fin.natAdd (Nat.succ 0) ∘ id)) ⋯ i)
simp All goals completed! 🐙
· k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT id ⋯) ((prodT ((contrT 0 0 1 ⋯) ((prodT (fromSingleT x)) (fromSingleT y1)))) (fromSingleT y2)) =
(permT id ⋯) (fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2)) rw [contrT_fromSingleT_fromSingleT k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT id ⋯) ((prodT ((S.contr c) (x ⊗ₜ[k] y1) • default.toTensor)) (fromSingleT y2)) =
(permT id ⋯) (fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2)) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT id ⋯) ((prodT ((S.contr c) (x ⊗ₜ[k] y1) • default.toTensor)) (fromSingleT y2)) =
(permT id ⋯) (fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2))] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT id ⋯) ((prodT ((S.contr c) (x ⊗ₜ[k] y1) • default.toTensor)) (fromSingleT y2)) =
(permT id ⋯) (fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2))
simp only [map_smul, LinearMap.smul_apply] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (S.contr c) (x ⊗ₜ[k] y1) • (permT id ⋯) ((prodT default.toTensor) (fromSingleT y2)) =
(permT id ⋯) (fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2))
rw [fromSingleTContrFromPairT_tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (S.contr c) (x ⊗ₜ[k] y1) • (permT id ⋯) ((prodT default.toTensor) (fromSingleT y2)) =
(permT id ⋯) ((S.contr c) (x ⊗ₜ[k] y1) • fromSingleT y2) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (S.contr c) (x ⊗ₜ[k] y1) • (permT id ⋯) ((prodT default.toTensor) (fromSingleT y2)) =
(permT id ⋯) ((S.contr c) (x ⊗ₜ[k] y1) • fromSingleT y2)] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (S.contr c) (x ⊗ₜ[k] y1) • (permT id ⋯) ((prodT default.toTensor) (fromSingleT y2)) =
(permT id ⋯) ((S.contr c) (x ⊗ₜ[k] y1) • fromSingleT y2)
simp only [Nat.reduceAdd, Nat.succ_eq_add_one, Fin.isValue, map_smul] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (S.contr c) (x ⊗ₜ[k] y1) • (permT id ⋯) ((prodT default.toTensor) (fromSingleT y2)) =
(S.contr c) (x ⊗ₜ[k] y1) • (permT id ⋯) (fromSingleT y2)
congr 1 e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT id ⋯) ((prodT default.toTensor) (fromSingleT y2)) = (permT id ⋯) (fromSingleT y2)
rw [prodT_swap, e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT id ⋯) ((permT (Fin.append (Fin.natAdd 1) (Fin.castAdd 0)) ⋯) ((prodT (fromSingleT y2)) default.toTensor)) =
(permT id ⋯) (fromSingleT y2) e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT (Fin.append (Fin.natAdd 1) (Fin.castAdd 0) ∘ id) ⋯) ((prodT (fromSingleT y2)) default.toTensor) =
(permT id ⋯) (fromSingleT y2) permT_permT e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT (Fin.append (Fin.natAdd 1) (Fin.castAdd 0) ∘ id) ⋯) ((prodT (fromSingleT y2)) default.toTensor) =
(permT id ⋯) (fromSingleT y2)e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT (Fin.append (Fin.natAdd 1) (Fin.castAdd 0) ∘ id) ⋯) ((prodT (fromSingleT y2)) default.toTensor) =
(permT id ⋯) (fromSingleT y2)]e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT (Fin.append (Fin.natAdd 1) (Fin.castAdd 0) ∘ id) ⋯) ((prodT (fromSingleT y2)) default.toTensor) =
(permT id ⋯) (fromSingleT y2)
simp only [Fin.isValue, Nat.add_zero, CompTriple.comp_eq, prodT_default_right, permT_permT] e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (permT (Fin.append (Fin.natAdd 1) (Fin.castAdd 0)) ⋯) (fromSingleT y2) = (permT id ⋯) (fromSingleT y2)
refine permT_congr ?_ rfl e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ Fin.append (Fin.natAdd 1) (Fin.castAdd 0) = id
ext i e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2i:Fin (0 + 1)⊢ ↑(Fin.append (Fin.natAdd 1) (Fin.castAdd 0) i) = ↑(id i)
simp All goals completed! 🐙
lemma contrT_fromSingleT_fromPairT {c c2 : C}
(x : V c)
(y : V (S.τ c) ⊗[k] V c2) :
contrT 1 0 1 (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy:V (S.τ c) ⊗[k] V c2⊢ 0 ≠ 1 ∧ S.τ (Fin.append ![c] ![S.τ c, c2] 0) = Fin.append ![c] ![S.τ c, c2] 1 simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy:V (S.τ c) ⊗[k] V c2⊢ S.τ (Fin.append ![c] ![S.τ c, c2] 0) = Fin.append ![c] ![S.τ c, c2] 1; rfl All goals completed! 🐙)
(prodT (fromSingleT x) (fromPairT y)) =
permT id (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy:V (S.τ c) ⊗[k] V c2⊢ IsReindexing ![c2] (Fin.append ![c] ![S.τ c, c2] ∘ Fin.succSuccAbove 0 1) id simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy:V (S.τ c) ⊗[k] V c2⊢ c2 = Fin.append ![c] ![S.τ c, c2] (Fin.succSuccAbove 0 1 0); rfl All goals completed! 🐙) (fromSingleTContrFromPairT x y) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy:V (S.τ c) ⊗[k] V c2⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT y)) = (permT id ⋯) (fromSingleTContrFromPairT x y)
induction y using TensorProduct.induction_on with
| zero => zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V c⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT 0)) = (permT id ⋯) (fromSingleTContrFromPairT x 0) simp only [fromSingleTContrFromPairT, map_zero, tmul_zero] All goals completed! 🐙
| tmul y1 y2 => tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V cy1:V (S.τ c)y2:V c2⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT (y1 ⊗ₜ[k] y2))) =
(permT id ⋯) (fromSingleTContrFromPairT x (y1 ⊗ₜ[k] y2)) exact fromSingleT_contr_fromPairT_tmul x y1 y2 All goals completed! 🐙
| add a b ha hb => add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT a)) = (permT id ⋯) (fromSingleTContrFromPairT x a)hb:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT b)) = (permT id ⋯) (fromSingleTContrFromPairT x b)⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT (a + b))) = (permT id ⋯) (fromSingleTContrFromPairT x (a + b))
simp only [fromSingleTContrFromPairT] at ha hb ⊢ add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT a)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] a)))))hb:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT b)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] b)))))⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT (a + b))) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] (a + b))))))
simp only [tmul_add, map_add] add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT a)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] a)))))hb:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT b)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] b)))))⊢ (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT a)) + (contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT b)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] a))))) +
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] b)))))
rw [ha, add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT a)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] a)))))hb:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT b)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] b)))))⊢ (permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] a))))) +
(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT b)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] a))))) +
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] b))))) All goals completed! 🐙 hb add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc2:Cx:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT a)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] a)))))hb:(contrT 1 0 1 ⋯) ((prodT (fromSingleT x)) (fromPairT b)) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] b)))))⊢ (permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] a))))) +
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] b))))) =
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] a))))) +
(permT id ⋯)
(fromSingleT
((TensorProduct.lid k (V c2))
((LinearMap.rTensor (V c2) (S.contr c).toLinearMap)
((TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm (x ⊗ₜ[k] b))))) All goals completed! 🐙] All goals completed! 🐙Contraction of fromPairT with fromPairT
lemma fromPairTContr_tmul_tmul {c c1 c2 : C} (x1 : V c1) (x2 : V c) (y1 : V (S.τ c))
(y2 : V c2) : fromPairTContr (x1 ⊗ₜ[k] x2) (y1 ⊗ₜ[k] y2) =
(S.contr c) (x2 ⊗ₜ[k] y1) • fromPairT (x1 ⊗ₜ[k] y2) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ fromPairTContr (x1 ⊗ₜ[k] x2) (y1 ⊗ₜ[k] y2) = (S.contr c) (x2 ⊗ₜ[k] y1) • fromPairT (x1 ⊗ₜ[k] y2)
simp [fromPairTContr, tmul_smul] All goals completed! 🐙lemma fromPairT_contr_fromPairT_eq_fromPairTContr_tmul (c c1 c2 : C)
(x1 : V c1) (x2 : V c) (y1 : V (S.τ c))
(y2 : V c2) :
contrT 2 1 2 (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ 1 ≠ 2 ∧ S.τ (Fin.append ![c1, c] ![S.τ c, c2] 1) = Fin.append ![c1, c] ![S.τ c, c2] 2 simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ S.τ (Fin.append ![c1, c] ![S.τ c, c2] 1) = Fin.append ![c1, c] ![S.τ c, c2] 2; rfl All goals completed! 🐙) (prodT (fromPairT (x1 ⊗ₜ[k] x2)) (fromPairT (y1 ⊗ₜ[k] y2))) =
permT id (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ IsReindexing ![c1, c2] (Fin.append ![c1, c] ![S.τ c, c2] ∘ Fin.succSuccAbove 1 2) id simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ c1 = Fin.append ![c1, c] ![S.τ c, c2] (Fin.succSuccAbove 1 2 0) ∧
c2 = Fin.append ![c1, c] ![S.τ c, c2] (Fin.succSuccAbove 1 2 1); exact ⟨rfl, rfl⟩ All goals completed! 🐙)
(fromPairTContr (x1 ⊗ₜ[k] x2) (y1 ⊗ₜ[k] y2)) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT (y1 ⊗ₜ[k] y2))) =
(permT id ⋯) (fromPairTContr (x1 ⊗ₜ[k] x2) (y1 ⊗ₜ[k] y2))
simp only [map_smul, fromPairTContr_tmul_tmul, fromPairT_eq_pure, permT_pure,
Pure.contrP, contrT_pure, prodT_pure] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ Pure.contrPCoeff 1 2 ⋯
(Pure.prodP
(fun x =>
match x with
| 0 => x1
| 1 => x2)
fun x =>
match x with
| 0 => y1
| 1 => y2) •
(Pure.dropPair 1 2 ⋯
(Pure.prodP
(fun x =>
match x with
| 0 => x1
| 1 => x2)
fun x =>
match x with
| 0 => y1
| 1 => y2)).toTensor =
(S.contr c) (x2 ⊗ₜ[k] y1) •
(Pure.permP id ⋯ fun x =>
match x with
| 0 => x1
| 1 => y2).toTensor
congr e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ Pure.dropPair 1 2 ⋯
(Pure.prodP
(fun x =>
match x with
| 0 => x1
| 1 => x2)
fun x =>
match x with
| 0 => y1
| 1 => y2) =
Pure.permP id ⋯ fun x =>
match x with
| 0 => x1
| 1 => y2
funext i e_a k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2i:Fin 2⊢ Pure.dropPair 1 2 ⋯
(Pure.prodP
(fun x =>
match x with
| 0 => x1
| 1 => x2)
fun x =>
match x with
| 0 => y1
| 1 => y2)
i =
Pure.permP id ⋯
(fun x =>
match x with
| 0 => x1
| 1 => y2)
i
fin_cases i e_a.«_@»._internal._hyg.0.«0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ Pure.dropPair 1 2 ⋯
(Pure.prodP
(fun x =>
match x with
| 0 => x1
| 1 => x2)
fun x =>
match x with
| 0 => y1
| 1 => y2)
((fun i => i) ⟨0, ⋯⟩) =
Pure.permP id ⋯
(fun x =>
match x with
| 0 => x1
| 1 => y2)
((fun i => i) ⟨0, ⋯⟩)e_a.«_@»._internal._hyg.0.«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ Pure.dropPair 1 2 ⋯
(Pure.prodP
(fun x =>
match x with
| 0 => x1
| 1 => x2)
fun x =>
match x with
| 0 => y1
| 1 => y2)
((fun i => i) ⟨1, ⋯⟩) =
Pure.permP id ⋯
(fun x =>
match x with
| 0 => x1
| 1 => y2)
((fun i => i) ⟨1, ⋯⟩) <;> e_a.«_@»._internal._hyg.0.«0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ Pure.dropPair 1 2 ⋯
(Pure.prodP
(fun x =>
match x with
| 0 => x1
| 1 => x2)
fun x =>
match x with
| 0 => y1
| 1 => y2)
((fun i => i) ⟨0, ⋯⟩) =
Pure.permP id ⋯
(fun x =>
match x with
| 0 => x1
| 1 => y2)
((fun i => i) ⟨0, ⋯⟩)e_a.«_@»._internal._hyg.0.«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ Pure.dropPair 1 2 ⋯
(Pure.prodP
(fun x =>
match x with
| 0 => x1
| 1 => x2)
fun x =>
match x with
| 0 => y1
| 1 => y2)
((fun i => i) ⟨1, ⋯⟩) =
Pure.permP id ⋯
(fun x =>
match x with
| 0 => x1
| 1 => y2)
((fun i => i) ⟨1, ⋯⟩) rfl All goals completed! 🐙
lemma fromPairT_contr_fromPairT_eq_fromPairTContr (c c1 c2 : C)
(x : V c1 ⊗[k] V c)
(y : V (S.τ c) ⊗[k] V c2) :
contrT 2 1 2 (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx:V c1 ⊗[k] V cy:V (S.τ c) ⊗[k] V c2⊢ 1 ≠ 2 ∧ S.τ (Fin.append ![c1, c] ![S.τ c, c2] 1) = Fin.append ![c1, c] ![S.τ c, c2] 2 simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx:V c1 ⊗[k] V cy:V (S.τ c) ⊗[k] V c2⊢ S.τ (Fin.append ![c1, c] ![S.τ c, c2] 1) = Fin.append ![c1, c] ![S.τ c, c2] 2; rfl All goals completed! 🐙)
(prodT (fromPairT x) (fromPairT y)) =
permT id (by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx:V c1 ⊗[k] V cy:V (S.τ c) ⊗[k] V c2⊢ IsReindexing ![c1, c2] (Fin.append ![c1, c] ![S.τ c, c2] ∘ Fin.succSuccAbove 1 2) id simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx:V c1 ⊗[k] V cy:V (S.τ c) ⊗[k] V c2⊢ c1 = Fin.append ![c1, c] ![S.τ c, c2] (Fin.succSuccAbove 1 2 0) ∧
c2 = Fin.append ![c1, c] ![S.τ c, c2] (Fin.succSuccAbove 1 2 1); exact ⟨rfl, rfl⟩ All goals completed! 🐙) (fromPairTContr x y) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx:V c1 ⊗[k] V cy:V (S.τ c) ⊗[k] V c2⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT x)) (fromPairT y)) = (permT id ⋯) (fromPairTContr x y)
induction x using TensorProduct.induction_on with
| zero => zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT 0)) (fromPairT y)) = (permT id ⋯) (fromPairTContr 0 y) simp only [fromPairTContr, map_zero, LinearMap.zero_apply, zero_tmul] All goals completed! 🐙
| tmul x1 x2 => tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2x1:V c1x2:V c⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT y)) = (permT id ⋯) (fromPairTContr (x1 ⊗ₜ[k] x2) y)
induction y using TensorProduct.induction_on with
| zero => tmul.zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V c⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT 0)) = (permT id ⋯) (fromPairTContr (x1 ⊗ₜ[k] x2) 0) simp only [fromPairTContr, map_zero, tmul_zero] All goals completed! 🐙
| tmul y1 y2 => tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT (y1 ⊗ₜ[k] y2))) =
(permT id ⋯) (fromPairTContr (x1 ⊗ₜ[k] x2) (y1 ⊗ₜ[k] y2))
simp only [Nat.reduceAdd, Nat.succ_eq_add_one, Fin.isValue] tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V cy1:V (S.τ c)y2:V c2⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT (y1 ⊗ₜ[k] y2))) =
(permT id ⋯) (fromPairTContr (x1 ⊗ₜ[k] x2) (y1 ⊗ₜ[k] y2))
exact fromPairT_contr_fromPairT_eq_fromPairTContr_tmul c c1 c2 x1 x2 y1 y2 All goals completed! 🐙
| add a b ha hb => tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) = (permT id ⋯) (fromPairTContr (x1 ⊗ₜ[k] x2) a)hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT b)) = (permT id ⋯) (fromPairTContr (x1 ⊗ₜ[k] x2) b)⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT (a + b))) =
(permT id ⋯) (fromPairTContr (x1 ⊗ₜ[k] x2) (a + b))
simp only [fromPairTContr] at ha hb ⊢ tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] a))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT b)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] b))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT (a + b))) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] (a + b)))))))
simp only [tmul_add, map_add] tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] a))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT b)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] b))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) +
(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT b)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] a)))))) +
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] b))))))
rw [← ha, tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] a))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT b)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] b))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) +
(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT b)) =
(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) +
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] b)))))) All goals completed! 🐙 ← hb tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx1:V c1x2:V ca:V (S.τ c) ⊗[k] V c2b:V (S.τ c) ⊗[k] V c2ha:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] a))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT b)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (x1 ⊗ₜ[k] x2 ⊗ₜ[k] b))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) +
(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT b)) =
(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT a)) +
(contrT 2 1 2 ⋯) ((prodT (fromPairT (x1 ⊗ₜ[k] x2))) (fromPairT b)) All goals completed! 🐙] All goals completed! 🐙
| add a b ha hb => add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2a:V c1 ⊗[k] V cb:V c1 ⊗[k] V cha:(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) = (permT id ⋯) (fromPairTContr a y)hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y)) = (permT id ⋯) (fromPairTContr b y)⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (a + b))) (fromPairT y)) = (permT id ⋯) (fromPairTContr (a + b) y)
simp only [fromPairTContr] at ha hb ⊢ add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2a:V c1 ⊗[k] V cb:V c1 ⊗[k] V cha:(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (a ⊗ₜ[k] y))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (b ⊗ₜ[k] y))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT (a + b))) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) ((a + b) ⊗ₜ[k] y))))))
simp only [add_tmul, map_add] add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2a:V c1 ⊗[k] V cb:V c1 ⊗[k] V cha:(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (a ⊗ₜ[k] y))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (b ⊗ₜ[k] y))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT a) + prodT (fromPairT b)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (a ⊗ₜ[k] y)))))) +
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (b ⊗ₜ[k] y))))))
rw [← ha, add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2a:V c1 ⊗[k] V cb:V c1 ⊗[k] V cha:(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (a ⊗ₜ[k] y))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (b ⊗ₜ[k] y))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT a) + prodT (fromPairT b)) (fromPairT y)) =
(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) +
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (b ⊗ₜ[k] y)))))) add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2a:V c1 ⊗[k] V cb:V c1 ⊗[k] V cha:(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (a ⊗ₜ[k] y))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (b ⊗ₜ[k] y))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT a) + prodT (fromPairT b)) (fromPairT y)) =
(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) + (contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y)) ← hb add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2a:V c1 ⊗[k] V cb:V c1 ⊗[k] V cha:(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (a ⊗ₜ[k] y))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (b ⊗ₜ[k] y))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT a) + prodT (fromPairT b)) (fromPairT y)) =
(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) + (contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y))add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2a:V c1 ⊗[k] V cb:V c1 ⊗[k] V cha:(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (a ⊗ₜ[k] y))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (b ⊗ₜ[k] y))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT a) + prodT (fromPairT b)) (fromPairT y)) =
(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) + (contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y))]add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cy:V (S.τ c) ⊗[k] V c2a:V c1 ⊗[k] V cb:V c1 ⊗[k] V cha:(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (a ⊗ₜ[k] y))))))hb:(contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y)) =
(permT id ⋯)
(fromPairT
((LinearEquiv.lTensor (V c1) (TensorProduct.lid k (V c2)))
((LinearMap.lTensor (V c1) (LinearMap.rTensor (V c2) (S.contr c).toLinearMap))
((LinearEquiv.lTensor (V c1) (TensorProduct.assoc k (V c) (V (S.τ c)) (V c2)).symm)
((TensorProduct.assoc k (V c1) (V c) (V (S.τ c) ⊗[k] V c2)) (b ⊗ₜ[k] y))))))⊢ (contrT 2 1 2 ⋯) ((prodT (fromPairT a) + prodT (fromPairT b)) (fromPairT y)) =
(contrT 2 1 2 ⋯) ((prodT (fromPairT a)) (fromPairT y)) + (contrT 2 1 2 ⋯) ((prodT (fromPairT b)) (fromPairT y))
simp All goals completed! 🐙
lemma fromPairT_basis_repr {c c1 : C}
(x : V c ⊗[k] V c1)
(φ : ComponentIdx ![c, c1]) :
(basis ![c, c1]).repr (fromPairT (S := S) x) φ =
(Basis.tensorProduct (b c) (b c1)).repr x (φ 0, φ 1) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cx:V c ⊗[k] V c1φ:ComponentIdx ![c, c1]⊢ ((basis ![c, c1]).repr (fromPairT x)) φ = (((b c).tensorProduct (b c1)).repr x) (φ 0, φ 1)
induction x using TensorProduct.induction_on with
| zero => zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]⊢ ((basis ![c, c1]).repr (fromPairT 0)) φ = (((b c).tensorProduct (b c1)).repr 0) (φ 0, φ 1) simp All goals completed! 🐙
| tmul x y => tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr (fromPairT (x ⊗ₜ[k] y))) φ = (((b c).tensorProduct (b c1)).repr (x ⊗ₜ[k] y)) (φ 0, φ 1)
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Fin.isValue, Basis.tensorProduct_repr_tmul_apply,
smul_eq_mul] tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr (fromPairT (x ⊗ₜ[k] y))) φ = ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
conv_lhs =>
left k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1| (basis ![c, c1]).repr (fromPairT (x ⊗ₜ[k] y))
right k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1| fromPairT (x ⊗ₜ[k] y)
rw [fromPairT_tmul] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1| (permT id ⋯) ((prodT (fromSingleT x)) (fromSingleT y))
rw [fromSingleT_eq_pureT, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(fromSingleT y))))
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(Pure.toTensor fun x =>
match x with
| 0 => y))))
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) fromSingleT_eq_pureT tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(Pure.toTensor fun x =>
match x with
| 0 => y))))
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(Pure.toTensor fun x =>
match x with
| 0 => y))))
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)]tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(Pure.toTensor fun x =>
match x with
| 0 => y))))
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
rw [prodT_pure, tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
((permT id ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y).toTensor))
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor)
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) permT_pure tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor)
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor)
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)]tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((basis ![c, c1]).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).toTensor)
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
rw [basis_repr_pure tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).component
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).component
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)]tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)).component
φ =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
simp [Pure.component] tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((b c).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
0))
(φ 0) *
((b c1).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
1))
(φ 1) =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
rw [mul_comm tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((b c1).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
1))
(φ 1) *
((b c).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
0))
(φ 0) =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((b c1).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
1))
(φ 1) *
((b c).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
0))
(φ 0) =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)]tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V cy:V c1⊢ ((b c1).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
1))
(φ 1) *
((b c).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
fun x =>
match x with
| 0 => y)
0))
(φ 0) =
((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
rfl All goals completed! 🐙
| add x y hx hy => add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cφ:ComponentIdx ![c, c1]x:V c ⊗[k] V c1y:V c ⊗[k] V c1hx:((basis ![c, c1]).repr (fromPairT x)) φ = (((b c).tensorProduct (b c1)).repr x) (φ 0, φ 1)hy:((basis ![c, c1]).repr (fromPairT y)) φ = (((b c).tensorProduct (b c1)).repr y) (φ 0, φ 1)⊢ ((basis ![c, c1]).repr (fromPairT (x + y))) φ = (((b c).tensorProduct (b c1)).repr (x + y)) (φ 0, φ 1) simp_all All goals completed! 🐙
lemma fromPairT_apply_basis_repr {c c1 : C}
(b0 : basisIdx c) (b1 : basisIdx c1) :
fromPairT (S := S) (b c b0 ⊗ₜ[k] b c1 b1) =
Tensor.basis ![c, c1] (fun | 0 => b0 | 1 => b1) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1⊢ fromPairT ((b c) b0 ⊗ₜ[k] (b c1) b1) =
(basis ![c, c1]) fun x =>
match x with
| 0 => b0
| 1 => b1
apply (Tensor.basis _).repr.injective k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1⊢ (basis ![c, c1]).repr (fromPairT ((b c) b0 ⊗ₜ[k] (b c1) b1)) =
(basis ![c, c1]).repr
((basis ![c, c1]) fun x =>
match x with
| 0 => b0
| 1 => b1)
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Basis.repr_self] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1⊢ (basis ![c, c1]).repr (fromPairT ((b c) b0 ⊗ₜ[k] (b c1) b1)) =
Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1)
1
ext b k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ ((basis ![c, c1]).repr (fromPairT ((b✝ c) b0 ⊗ₜ[k] (b✝ c1) b1))) b =
(Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1)
1)
b
rw [fromPairT_basis_repr k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ (((b✝ c).tensorProduct (b✝ c1)).repr ((b✝ c) b0 ⊗ₜ[k] (b✝ c1) b1)) (b 0, b 1) =
(Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1)
1)
b k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ (((b✝ c).tensorProduct (b✝ c1)).repr ((b✝ c) b0 ⊗ₜ[k] (b✝ c1) b1)) (b 0, b 1) =
(Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1)
1)
b] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ (((b✝ c).tensorProduct (b✝ c1)).repr ((b✝ c) b0 ⊗ₜ[k] (b✝ c1) b1)) (b 0, b 1) =
(Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1)
1)
b
simp [Finsupp.single_apply] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ (if b0 = b 0 then if b1 = b 1 then 1 else 0 else 0) =
if
(fun x =>
match x with
| 0 => b0
| 1 => b1) =
b then
1
else 0
conv_rhs =>
enter [1] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]| (fun x =>
match x with
| 0 => b0
| 1 => b1) =
bk:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ Decidable ?m.314
rw [funext_iff] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]| ∀ (x : Fin 2),
(match x with
| 0 => b0
| 1 => b1) =
b xk:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ Decidable ?m.314
rw [Fin.forall_fin_two] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]| (match 0 with
| 0 => b0
| 1 => b1) =
b 0 ∧
(match 1 with
| 0 => b0
| 1 => b1) =
b 1k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ Decidable ?m.314
simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]| b0 = b 0 ∧ b1 = b 1k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ Decidable ?m.314
split isTrue k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]h✝:b0 = b 0⊢ (if b1 = b 1 then 1 else 0) = if b0 = b 0 ∧ b1 = b 1 then 1 else 0isFalse k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]h✝:¬b0 = b 0⊢ 0 = if b0 = b 0 ∧ b1 = b 1 then 1 else 0
next h => k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]h:b0 = b 0⊢ (if b1 = b 1 then 1 else 0) = if b0 = b 0 ∧ b1 = b 1 then 1 else 0
subst h k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb1:basisIdx c1b:ComponentIdx ![c, c1]⊢ (if b1 = b 1 then 1 else 0) = if b 0 = b 0 ∧ b1 = b 1 then 1 else 0
simp_all only [Fin.isValue, true_and] All goals completed! 🐙
next h => k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cb0:basisIdx cb1:basisIdx c1b:ComponentIdx ![c, c1]h:¬b0 = b 0⊢ 0 = if b0 = b 0 ∧ b1 = b 1 then 1 else 0 simp_all only [Fin.isValue, false_and, ↓reduceIte] All goals completed! 🐙fromConstPair
Tensors formed by fromConstPair are invariant under the group action.
@[simp]
lemma actionT_fromConstPair {c1 c2 : C}
(v : (Representation.trivial k G k).IntertwiningMap ((rep c1).tprod (rep c2)))
(g : G) : g • fromConstPair (S := S) v = fromConstPair v := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod (rep c2))g:G⊢ g • fromConstPair v = fromConstPair v
rw [fromConstPair, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod (rep c2))g:G⊢ g • fromPairT (v 1) = fromPairT (v 1) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod (rep c2))g:G⊢ fromPairT ((map ((rep c1) g) ((rep c2) g)) (v 1)) = fromPairT (v 1) actionT_fromPairT k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod (rep c2))g:G⊢ fromPairT ((map ((rep c1) g) ((rep c2) g)) (v 1)) = fromPairT (v 1) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod (rep c2))g:G⊢ fromPairT ((map ((rep c1) g) ((rep c2) g)) (v 1)) = fromPairT (v 1)] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod (rep c2))g:G⊢ fromPairT ((map ((rep c1) g) ((rep c2) g)) (v 1)) = fromPairT (v 1)
exact congrArg _ (LinearMap.congr_fun (v.isIntertwining' g) 1).symm All goals completed! 🐙fromTripleT
lemma fromTripleT_tmul {c1 c2 c3 : C} (x : V c1)
(y : V c2) (z : V c3) :
fromTripleT (x ⊗ₜ[k] (y ⊗ₜ[k] z)) =
permT id (And.intro Function.bijective_id (fun i => by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cx:V c1y:V c2z:V c3i:Fin (Nat.succ 0 + (Nat.succ 0 + Nat.succ 0))⊢ Fin.append ![c1] (Fin.append ![c2] ![c3]) (id i) = ![c1, c2, c3] i fin_cases i «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cx:V c1y:V c2z:V c3⊢ Fin.append ![c1] (Fin.append ![c2] ![c3]) (id ((fun i => i) ⟨0, ⋯⟩)) = ![c1, c2, c3] ((fun i => i) ⟨0, ⋯⟩)«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cx:V c1y:V c2z:V c3⊢ Fin.append ![c1] (Fin.append ![c2] ![c3]) (id ((fun i => i) ⟨1, ⋯⟩)) = ![c1, c2, c3] ((fun i => i) ⟨1, ⋯⟩)«2» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cx:V c1y:V c2z:V c3⊢ Fin.append ![c1] (Fin.append ![c2] ![c3]) (id ((fun i => i) ⟨2, ⋯⟩)) = ![c1, c2, c3] ((fun i => i) ⟨2, ⋯⟩) <;> «0» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cx:V c1y:V c2z:V c3⊢ Fin.append ![c1] (Fin.append ![c2] ![c3]) (id ((fun i => i) ⟨0, ⋯⟩)) = ![c1, c2, c3] ((fun i => i) ⟨0, ⋯⟩)«1» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cx:V c1y:V c2z:V c3⊢ Fin.append ![c1] (Fin.append ![c2] ![c3]) (id ((fun i => i) ⟨1, ⋯⟩)) = ![c1, c2, c3] ((fun i => i) ⟨1, ⋯⟩)«2» k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cx:V c1y:V c2z:V c3⊢ Fin.append ![c1] (Fin.append ![c2] ![c3]) (id ((fun i => i) ⟨2, ⋯⟩)) = ![c1, c2, c3] ((fun i => i) ⟨2, ⋯⟩) rfl All goals completed! 🐙))
(prodT (fromSingleT (S := S) x) (prodT (fromSingleT y) (fromSingleT z))) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cx:V c1y:V c2z:V c3⊢ fromTripleT (x ⊗ₜ[k] (y ⊗ₜ[k] z)) = (permT id ⋯) ((prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z)))
rfl All goals completed! 🐙
lemma actionT_fromTripleT {c1 c2 c3 : C}
(x : V c1 ⊗[k] (V c2 ⊗[k] V c3)) (g : G) :
g • fromTripleT (S := S) x = fromTripleT (TensorProduct.map (rep c1 g)
(TensorProduct.map (rep c2 g) (rep c3 g)) x) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cx:V c1 ⊗[k] (V c2 ⊗[k] V c3)g:G⊢ g • fromTripleT x = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) x)
induction x using TensorProduct.induction_on with
| zero => zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:G⊢ g • fromTripleT 0 = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) 0) simp All goals completed! 🐙
| tmul x yz => tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1yz:V c2 ⊗[k] V c3⊢ g • fromTripleT (x ⊗ₜ[k] yz) = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (x ⊗ₜ[k] yz))
induction yz using TensorProduct.induction_on with
| zero => tmul.zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1⊢ g • fromTripleT (x ⊗ₜ[k] 0) = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (x ⊗ₜ[k] 0)) simp All goals completed! 🐙
| tmul y z => tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ g • fromTripleT (x ⊗ₜ[k] (y ⊗ₜ[k] z)) =
fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (x ⊗ₜ[k] (y ⊗ₜ[k] z)))
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, map_tmul] tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ g • fromTripleT (x ⊗ₜ[k] (y ⊗ₜ[k] z)) = fromTripleT (((rep c1) g) x ⊗ₜ[k] (((rep c2) g) y ⊗ₜ[k] ((rep c3) g) z))
rw [fromTripleT_tmul, tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ g • (permT id ⋯) ((prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z))) =
fromTripleT (((rep c1) g) x ⊗ₜ[k] (((rep c2) g) y ⊗ₜ[k] ((rep c3) g) z)) tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ g • (permT id ⋯) ((prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z)))) fromTripleT_tmul tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ g • (permT id ⋯) ((prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z)))) tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ g • (permT id ⋯) ((prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z))))]tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ g • (permT id ⋯) ((prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z))))
rw [← permT_equivariant, tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ (permT id ⋯) (g • (prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z)))) tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ (permT id ⋯) ((prodT (g • fromSingleT x)) ((prodT (g • fromSingleT y)) (g • fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z)))) ← prodT_equivariant, tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ (permT id ⋯) ((prodT (g • fromSingleT x)) (g • (prodT (fromSingleT y)) (fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z))))tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ (permT id ⋯) ((prodT (g • fromSingleT x)) ((prodT (g • fromSingleT y)) (g • fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z)))) ← prodT_equivariant tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ (permT id ⋯) ((prodT (g • fromSingleT x)) ((prodT (g • fromSingleT y)) (g • fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z))))tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ (permT id ⋯) ((prodT (g • fromSingleT x)) ((prodT (g • fromSingleT y)) (g • fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z))))]tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1y:V c2z:V c3⊢ (permT id ⋯) ((prodT (g • fromSingleT x)) ((prodT (g • fromSingleT y)) (g • fromSingleT z))) =
(permT id ⋯)
((prodT (fromSingleT (((rep c1) g) x))) ((prodT (fromSingleT (((rep c2) g) y))) (fromSingleT (((rep c3) g) z))))
simp [← actionT_fromSingleT] All goals completed! 🐙
| add a b ha hb => tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Gx:V c1a:V c2 ⊗[k] V c3b:V c2 ⊗[k] V c3ha:g • fromTripleT (x ⊗ₜ[k] a) = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (x ⊗ₜ[k] a))hb:g • fromTripleT (x ⊗ₜ[k] b) = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (x ⊗ₜ[k] b))⊢ g • fromTripleT (x ⊗ₜ[k] (a + b)) = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (x ⊗ₜ[k] (a + b))) simp [ha, hb, tmul_add] All goals completed! 🐙
| add a b ha hb => add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cg:Ga:V c1 ⊗[k] (V c2 ⊗[k] V c3)b:V c1 ⊗[k] (V c2 ⊗[k] V c3)ha:g • fromTripleT a = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) a)hb:g • fromTripleT b = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) b)⊢ g • fromTripleT (a + b) = fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (a + b)) simp [ha, hb] All goals completed! 🐙
lemma fromTripleT_basis_repr {c c1 c2 : C}
(x : V c ⊗[k] (V c1 ⊗[k] V c2))
(φ : ComponentIdx ![c, c1, c2]) :
(basis ![c, c1, c2]).repr (fromTripleT (S := S) x) φ =
(Basis.tensorProduct (b c) (Basis.tensorProduct (b c1) (b c2))).repr x
(φ 0, φ 1, φ 2) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cx:V c ⊗[k] (V c1 ⊗[k] V c2)φ:ComponentIdx ![c, c1, c2]⊢ ((basis ![c, c1, c2]).repr (fromTripleT x)) φ =
(((b c).tensorProduct ((b c1).tensorProduct (b c2))).repr x) (φ 0, φ 1, φ 2)
induction x using TensorProduct.induction_on with
| zero => zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]⊢ ((basis ![c, c1, c2]).repr (fromTripleT 0)) φ =
(((b c).tensorProduct ((b c1).tensorProduct (b c2))).repr 0) (φ 0, φ 1, φ 2) simp All goals completed! 🐙
| tmul x yz => tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cyz:V c1 ⊗[k] V c2⊢ ((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] yz))) φ =
(((b c).tensorProduct ((b c1).tensorProduct (b c2))).repr (x ⊗ₜ[k] yz)) (φ 0, φ 1, φ 2)
induction yz using TensorProduct.induction_on with
| zero => tmul.zero k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V c⊢ ((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] 0))) φ =
(((b c).tensorProduct ((b c1).tensorProduct (b c2))).repr (x ⊗ₜ[k] 0)) (φ 0, φ 1, φ 2) simp All goals completed! 🐙
| tmul y z => tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] (y ⊗ₜ[k] z)))) φ =
(((b c).tensorProduct ((b c1).tensorProduct (b c2))).repr (x ⊗ₜ[k] (y ⊗ₜ[k] z))) (φ 0, φ 1, φ 2)
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Fin.isValue,
Basis.tensorProduct_repr_tmul_apply, smul_eq_mul] tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] (y ⊗ₜ[k] z)))) φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
rw [fromTripleT_tmul tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr ((permT id ⋯) ((prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z))))) φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr ((permT id ⋯) ((prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z))))) φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)] tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr ((permT id ⋯) ((prodT (fromSingleT x)) ((prodT (fromSingleT y)) (fromSingleT z))))) φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
rw [fromSingleT_eq_pureT, tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
((prodT (fromSingleT y)) (fromSingleT z)))))
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
((prodT
(Pure.toTensor fun x =>
match x with
| 0 => y))
(Pure.toTensor fun x =>
match x with
| 0 => z)))))
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) fromSingleT_eq_pureT, tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
((prodT
(Pure.toTensor fun x =>
match x with
| 0 => y))
(fromSingleT z)))))
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
((prodT
(Pure.toTensor fun x =>
match x with
| 0 => y))
(Pure.toTensor fun x =>
match x with
| 0 => z)))))
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) fromSingleT_eq_pureT tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
((prodT
(Pure.toTensor fun x =>
match x with
| 0 => y))
(Pure.toTensor fun x =>
match x with
| 0 => z)))))
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
((prodT
(Pure.toTensor fun x =>
match x with
| 0 => y))
(Pure.toTensor fun x =>
match x with
| 0 => z)))))
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)]tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
((prodT
(Pure.toTensor fun x =>
match x with
| 0 => y))
(Pure.toTensor fun x =>
match x with
| 0 => z)))))
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
rw [prodT_pure, tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
((permT id ⋯)
((prodT
(Pure.toTensor fun x_1 =>
match x_1 with
| 0 => x))
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z).toTensor)))
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))).toTensor)
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) prodT_pure, tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
((permT id ⋯)
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z)).toTensor))
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))).toTensor)
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) permT_pure tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))).toTensor)
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))).toTensor)
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)]tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((basis ![c, c1, c2]).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))).toTensor)
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
rw [basis_repr_pure tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))).component
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))).component
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)]tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ (Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))).component
φ =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
simp [Pure.component, Fin.prod_univ_three] tmul.tmul k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2⊢ ((b c).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))
0))
(φ 0) *
((b c1).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))
1))
(φ 1) *
((b c2).repr
(Pure.permP id ⋯
(Pure.prodP
(fun x_1 =>
match x_1 with
| 0 => x)
(Pure.prodP
(fun x =>
match x with
| 0 => y)
fun x =>
match x with
| 0 => z))
2))
(φ 2) =
((b c2).repr z) (φ 2) * ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
conv_rhs =>
rw [mul_assoc, mul_comm] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2| ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0) * ((b c2).repr z) (φ 2)
enter [1] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2| ((b c1).repr y) (φ 1) * ((b c).repr x) (φ 0)
rw [mul_comm] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy:V c1z:V c2| ((b c).repr x) (φ 0) * ((b c1).repr y) (φ 1)
rfl All goals completed! 🐙
| add y1 y2 hx hy => tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy1:V c1 ⊗[k] V c2y2:V c1 ⊗[k] V c2hx:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y1))) φ =
(((b c).tensorProduct ((b c1).tensorProduct (b c2))).repr (x ⊗ₜ[k] y1)) (φ 0, φ 1, φ 2)hy:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y2))) φ =
(((b c).tensorProduct ((b c1).tensorProduct (b c2))).repr (x ⊗ₜ[k] y2)) (φ 0, φ 1, φ 2)⊢ ((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] (y1 + y2)))) φ =
(((b c).tensorProduct ((b c1).tensorProduct (b c2))).repr (x ⊗ₜ[k] (y1 + y2))) (φ 0, φ 1, φ 2)
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Fin.isValue,
Basis.tensorProduct_repr_tmul_apply, smul_eq_mul] at hx hy tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy1:V c1 ⊗[k] V c2y2:V c1 ⊗[k] V c2hx:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y1))) φ =
(((b c1).tensorProduct (b c2)).repr y1) (φ 1, φ 2) * ((b c).repr x) (φ 0)hy:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y2))) φ =
(((b c1).tensorProduct (b c2)).repr y2) (φ 1, φ 2) * ((b c).repr x) (φ 0)⊢ ((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] (y1 + y2)))) φ =
(((b c).tensorProduct ((b c1).tensorProduct (b c2))).repr (x ⊗ₜ[k] (y1 + y2))) (φ 0, φ 1, φ 2)
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Fin.isValue,
Basis.tensorProduct_repr_tmul_apply, smul_eq_mul, tmul_add, map_add, Finsupp.coe_add,
Pi.add_apply] tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy1:V c1 ⊗[k] V c2y2:V c1 ⊗[k] V c2hx:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y1))) φ =
(((b c1).tensorProduct (b c2)).repr y1) (φ 1, φ 2) * ((b c).repr x) (φ 0)hy:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y2))) φ =
(((b c1).tensorProduct (b c2)).repr y2) (φ 1, φ 2) * ((b c).repr x) (φ 0)⊢ ((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y1))) φ + ((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y2))) φ =
(((b c1).tensorProduct (b c2)).repr y1) (φ 1, φ 2) * ((b c).repr x) (φ 0) +
(((b c1).tensorProduct (b c2)).repr y2) (φ 1, φ 2) * ((b c).repr x) (φ 0)
rw [hx, tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy1:V c1 ⊗[k] V c2y2:V c1 ⊗[k] V c2hx:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y1))) φ =
(((b c1).tensorProduct (b c2)).repr y1) (φ 1, φ 2) * ((b c).repr x) (φ 0)hy:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y2))) φ =
(((b c1).tensorProduct (b c2)).repr y2) (φ 1, φ 2) * ((b c).repr x) (φ 0)⊢ (((b c1).tensorProduct (b c2)).repr y1) (φ 1, φ 2) * ((b c).repr x) (φ 0) +
((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y2))) φ =
(((b c1).tensorProduct (b c2)).repr y1) (φ 1, φ 2) * ((b c).repr x) (φ 0) +
(((b c1).tensorProduct (b c2)).repr y2) (φ 1, φ 2) * ((b c).repr x) (φ 0) All goals completed! 🐙 hy tmul.add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]x:V cy1:V c1 ⊗[k] V c2y2:V c1 ⊗[k] V c2hx:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y1))) φ =
(((b c1).tensorProduct (b c2)).repr y1) (φ 1, φ 2) * ((b c).repr x) (φ 0)hy:((basis ![c, c1, c2]).repr (fromTripleT (x ⊗ₜ[k] y2))) φ =
(((b c1).tensorProduct (b c2)).repr y2) (φ 1, φ 2) * ((b c).repr x) (φ 0)⊢ (((b c1).tensorProduct (b c2)).repr y1) (φ 1, φ 2) * ((b c).repr x) (φ 0) +
(((b c1).tensorProduct (b c2)).repr y2) (φ 1, φ 2) * ((b c).repr x) (φ 0) =
(((b c1).tensorProduct (b c2)).repr y1) (φ 1, φ 2) * ((b c).repr x) (φ 0) +
(((b c1).tensorProduct (b c2)).repr y2) (φ 1, φ 2) * ((b c).repr x) (φ 0) All goals completed! 🐙] All goals completed! 🐙
| add a b ha hb => add k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cφ:ComponentIdx ![c, c1, c2]a:V c ⊗[k] (V c1 ⊗[k] V c2)b:V c ⊗[k] (V c1 ⊗[k] V c2)ha:((basis ![c, c1, c2]).repr (fromTripleT a)) φ =
(((b✝ c).tensorProduct ((b✝ c1).tensorProduct (b✝ c2))).repr a) (φ 0, φ 1, φ 2)hb:((basis ![c, c1, c2]).repr (fromTripleT b)) φ =
(((b✝ c).tensorProduct ((b✝ c1).tensorProduct (b✝ c2))).repr b) (φ 0, φ 1, φ 2)⊢ ((basis ![c, c1, c2]).repr (fromTripleT (a + b))) φ =
(((b✝ c).tensorProduct ((b✝ c1).tensorProduct (b✝ c2))).repr (a + b)) (φ 0, φ 1, φ 2) simp_all All goals completed! 🐙
lemma fromTripleT_apply_basis {c c1 c2 : C}
(b0 : basisIdx c) (b1 : basisIdx c1)
(b2 : basisIdx c2) :
fromTripleT (S := S) (b c b0 ⊗ₜ[k] (b c1 b1 ⊗ₜ[k] b c2 b2)) =
Tensor.basis ![c, c1, c2] (fun | 0 => b0 | 1 => b1 | 2 => b2) := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2⊢ fromTripleT ((b c) b0 ⊗ₜ[k] ((b c1) b1 ⊗ₜ[k] (b c2) b2)) =
(basis ![c, c1, c2]) fun x =>
match x with
| 0 => b0
| 1 => b1
| 2 => b2
apply (Tensor.basis _).repr.injective k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2⊢ (basis ![c, c1, c2]).repr (fromTripleT ((b c) b0 ⊗ₜ[k] ((b c1) b1 ⊗ₜ[k] (b c2) b2))) =
(basis ![c, c1, c2]).repr
((basis ![c, c1, c2]) fun x =>
match x with
| 0 => b0
| 1 => b1
| 2 => b2)
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Basis.repr_self] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2⊢ (basis ![c, c1, c2]).repr (fromTripleT ((b c) b0 ⊗ₜ[k] ((b c1) b1 ⊗ₜ[k] (b c2) b2))) =
Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1
| 2 => b2)
1
ext b k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ ((basis ![c, c1, c2]).repr (fromTripleT ((b✝ c) b0 ⊗ₜ[k] ((b✝ c1) b1 ⊗ₜ[k] (b✝ c2) b2)))) b =
(Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1
| 2 => b2)
1)
b
rw [fromTripleT_basis_repr k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ (((b✝ c).tensorProduct ((b✝ c1).tensorProduct (b✝ c2))).repr ((b✝ c) b0 ⊗ₜ[k] ((b✝ c1) b1 ⊗ₜ[k] (b✝ c2) b2)))
(b 0, b 1, b 2) =
(Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1
| 2 => b2)
1)
b k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ (((b✝ c).tensorProduct ((b✝ c1).tensorProduct (b✝ c2))).repr ((b✝ c) b0 ⊗ₜ[k] ((b✝ c1) b1 ⊗ₜ[k] (b✝ c2) b2)))
(b 0, b 1, b 2) =
(Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1
| 2 => b2)
1)
b] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ (((b✝ c).tensorProduct ((b✝ c1).tensorProduct (b✝ c2))).repr ((b✝ c) b0 ⊗ₜ[k] ((b✝ c1) b1 ⊗ₜ[k] (b✝ c2) b2)))
(b 0, b 1, b 2) =
(Finsupp.single
(fun x =>
match x with
| 0 => b0
| 1 => b1
| 2 => b2)
1)
b
simp [Finsupp.single_apply] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ (if b0 = b 0 then if b1 = b 1 then if b2 = b 2 then 1 else 0 else 0 else 0) =
if
(fun x =>
match x with
| 0 => b0
| 1 => b1
| 2 => b2) =
b then
1
else 0
conv_rhs =>
enter [1] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]| (fun x =>
match x with
| 0 => b0
| 1 => b1
| 2 => b2) =
bk:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ Decidable ?m.394
rw [funext_iff] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]| ∀ (x : Fin 3),
(match x with
| 0 => b0
| 1 => b1
| 2 => b2) =
b xk:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ Decidable ?m.394
rw [Fin.forall_fin_succ, Fin.forall_fin_two] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]| (match 0 with
| 0 => b0
| 1 => b1
| 2 => b2) =
b 0 ∧
(match Fin.succ 0 with
| 0 => b0
| 1 => b1
| 2 => b2) =
b (Fin.succ 0) ∧
(match Fin.succ 1 with
| 0 => b0
| 1 => b1
| 2 => b2) =
b (Fin.succ 1)k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ Decidable ?m.394
simp k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]| b0 = b 0 ∧ b1 = b 1 ∧ b2 = b 2k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ Decidable ?m.394
split isTrue k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]h✝:b0 = b 0⊢ (if b1 = b 1 then if b2 = b 2 then 1 else 0 else 0) = if b0 = b 0 ∧ b1 = b 1 ∧ b2 = b 2 then 1 else 0isFalse k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]h✝:¬b0 = b 0⊢ 0 = if b0 = b 0 ∧ b1 = b 1 ∧ b2 = b 2 then 1 else 0
next h => k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]h:b0 = b 0⊢ (if b1 = b 1 then if b2 = b 2 then 1 else 0 else 0) = if b0 = b 0 ∧ b1 = b 1 ∧ b2 = b 2 then 1 else 0
subst h k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ (if b1 = b 1 then if b2 = b 2 then 1 else 0 else 0) = if b 0 = b 0 ∧ b1 = b 1 ∧ b2 = b 2 then 1 else 0
simp_all only [Fin.isValue, true_and] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ (if b1 = b 1 then if b2 = b 2 then 1 else 0 else 0) = if b1 = b 1 ∧ b2 = b 2 then 1 else 0
split isTrue k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]h✝:b1 = b 1⊢ (if b2 = b 2 then 1 else 0) = if b1 = b 1 ∧ b2 = b 2 then 1 else 0isFalse k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]h✝:¬b1 = b 1⊢ 0 = if b1 = b 1 ∧ b2 = b 2 then 1 else 0
next h => k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]h:b1 = b 1⊢ (if b2 = b 2 then 1 else 0) = if b1 = b 1 ∧ b2 = b 2 then 1 else 0
subst h k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb2:basisIdx c2b:ComponentIdx ![c, c1, c2]⊢ (if b2 = b 2 then 1 else 0) = if b 1 = b 1 ∧ b2 = b 2 then 1 else 0
simp_all only [Fin.isValue, true_and] All goals completed! 🐙
next h => k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]h:¬b1 = b 1⊢ 0 = if b1 = b 1 ∧ b2 = b 2 then 1 else 0 simp_all only [Fin.isValue, false_and, ↓reduceIte] All goals completed! 🐙
next h => k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc:Cc1:Cc2:Cb0:basisIdx cb1:basisIdx c1b2:basisIdx c2b:ComponentIdx ![c, c1, c2]h:¬b0 = b 0⊢ 0 = if b0 = b 0 ∧ b1 = b 1 ∧ b2 = b 2 then 1 else 0 simp_all only [Fin.isValue, false_and, ↓reduceIte] All goals completed! 🐙fromConstTriple
Tensors formed by fromConstPair are invariant under the group action.
@[simp]
lemma actionT_fromConstTriple {c1 c2 c3 : C}
(v : (Representation.trivial k G k).IntertwiningMap ((rep c1).tprod ((rep c2).tprod (rep c3))))
(g : G) : g • fromConstTriple (S := S) v = fromConstTriple v := by k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod ((rep c2).tprod (rep c3)))g:G⊢ g • fromConstTriple v = fromConstTriple v
rw [fromConstTriple, k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod ((rep c2).tprod (rep c3)))g:G⊢ g • fromTripleT (v 1) = fromTripleT (v 1) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod ((rep c2).tprod (rep c3)))g:G⊢ fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (v 1)) = fromTripleT (v 1) actionT_fromTripleT k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod ((rep c2).tprod (rep c3)))g:G⊢ fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (v 1)) = fromTripleT (v 1) k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod ((rep c2).tprod (rep c3)))g:G⊢ fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (v 1)) = fromTripleT (v 1)] k:Typeinst✝⁵:RCLike kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bc1:Cc2:Cc3:Cv:(Representation.trivial k G k).IntertwiningMap ((rep c1).tprod ((rep c2).tprod (rep c3)))g:G⊢ fromTripleT ((map ((rep c1) g) (map ((rep c2) g) ((rep c3) g))) (v 1)) = fromTripleT (v 1)
exact congrArg _ (LinearMap.congr_fun (v.isIntertwining' g) 1).symm All goals completed! 🐙