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.BasicContractions on pure tensors
@[expose] public sectionPure.contrPCoeff
dropPair
Given i j : Fin (n + 1 + 1), c : Fin (n + 1 + 1) → C and a pure tensor p : Pure S c,
dropPair i j _ p is the tensor formed by dropping the ith and jth parts of p.
set_option linter.unusedVariables false in@[nolint unusedArguments]
def dropPair (i j : Fin (n + 1 + 1)) (hij : i ≠ j) (p : Pure S c) :
Pure S (c ∘ succSuccAbove i j) :=
fun m => p (succSuccAbove i j m)@[simp]
lemma dropPair_equivariant {n : ℕ} {c : Fin (n + 1 + 1) → C}
(i j : Fin (n + 1 + 1)) (hij : i ≠ j) (p : Pure S c) (g : G) :
dropPair i j hij (g • p) = g • dropPair i j hij p := k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cg:G⊢ dropPair i j hij (g • p) = g • dropPair i j hij p
k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cg:Gm:Fin n⊢ dropPair i j hij (g • p) m = (g • dropPair i j hij p) m
k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cg:Gm:Fin n⊢ ((rep (c (i.succSuccAbove j m))) g) (p (i.succSuccAbove j m)) =
((rep ((c ∘ i.succSuccAbove j) m)) g) (p (i.succSuccAbove j m))
All goals completed! 🐙All goals completed! 🐙
lemma dropPair_comm {n : ℕ} {c : Fin (n + 1 + 1 + 1 + 1) → C}
(i1 j1 : Fin (n + 1 + 1 + 1 + 1)) (i2 j2 : Fin (n + 1 + 1))
(hij1 : i1 ≠ j1) (hij2 : i2 ≠ j2) (p : Pure S c) :
let i2' := (succSuccAbove i1 j1 i2);
let j2' := (succSuccAbove i1 j1 j2);
have hi2j2' : i2' ≠ j2' := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2⊢ i2' ≠ j2' simp [i2', j2', hij2] All goals completed! 🐙;
let i1' := (predPredAbove i2' j2' hi2j2' i1 (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2hi2j2':i2' ≠ j2'⊢ i1 ≠ i2' ∧ i1 ≠ j2' simp [i2', j2'] All goals completed! 🐙));
let j1' := (predPredAbove i2' j2' hi2j2' j1 (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2hi2j2':i2' ≠ j2'i1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' i1 ⋯⊢ j1 ≠ i2' ∧ j1 ≠ j2' simp [i2', j2'] All goals completed! 🐙));
dropPair i2 j2 hij2 (dropPair i1 j1 hij1 p) =
permP id (IsReindexing.succSuccAbove_comm i1 j1 i2 j2 hij1 hij2)
((dropPair i1' j1' (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2hi2j2':i2' ≠ j2'i1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' i1 ⋯j1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' j1 ⋯⊢ i1' ≠ j1' simp [i1', j1', hij1] All goals completed! 🐙) (dropPair i2' j2' hi2j2' p))) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S c⊢ let i2' := i1.succSuccAbove j1 i2;
let j2' := i1.succSuccAbove j1 j2;
have hi2j2' := ⋯;
let i1' := i2'.predPredAbove j2' hi2j2' i1 ⋯;
let j1' := i2'.predPredAbove j2' hi2j2' j1 ⋯;
dropPair i2 j2 hij2 (dropPair i1 j1 hij1 p) = permP id ⋯ (dropPair i1' j1' ⋯ (dropPair i2' j2' hi2j2' p))
ext m k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ dropPair i2 j2 hij2 (dropPair i1 j1 hij1 p) m =
permP id ⋯
(dropPair ((i1.succSuccAbove j1 i2).predPredAbove (i1.succSuccAbove j1 j2) ⋯ i1 ⋯)
((i1.succSuccAbove j1 i2).predPredAbove (i1.succSuccAbove j1 j2) ⋯ j1 ⋯) ⋯
(dropPair (i1.succSuccAbove j1 i2) (i1.succSuccAbove j1 j2) ⋯ p))
m
simp only [Function.comp_apply, dropPair, permP, id_eq] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ p (i1.succSuccAbove j1 (i2.succSuccAbove j2 m)) =
(LinearEquiv.cast ⋯)
(p
((i1.succSuccAbove j1 i2).succSuccAbove (i1.succSuccAbove j1 j2)
(((i1.succSuccAbove j1 i2).predPredAbove (i1.succSuccAbove j1 j2) ⋯ i1 ⋯).succSuccAbove
((i1.succSuccAbove j1 i2).predPredAbove (i1.succSuccAbove j1 j2) ⋯ j1 ⋯) m)))
apply (congr_right _ _ _ ?_).symm k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i1.succSuccAbove j1 (i2.succSuccAbove j2 m) =
(i1.succSuccAbove j1 i2).succSuccAbove (i1.succSuccAbove j1 j2)
(((i1.succSuccAbove j1 i2).predPredAbove (i1.succSuccAbove j1 j2) ⋯ i1 ⋯).succSuccAbove
((i1.succSuccAbove j1 i2).predPredAbove (i1.succSuccAbove j1 j2) ⋯ j1 ⋯) m)
rw [succSuccAbove_comm_apply k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i1.succSuccAbove j1 (i2.succSuccAbove j2 m) = i1.succSuccAbove j1 (i2.succSuccAbove j2 m)hij1 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i1 ≠ j1hij2 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i2 ≠ j2 hij1 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i1 ≠ j1hij2 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i2 ≠ j2] hij1 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i1 ≠ j1hij2 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i2 ≠ j2
· hij1 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i1 ≠ j1 simp [hij1] All goals completed! 🐙
· hij2 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1hij2:i2 ≠ j2p:Pure S cm:Fin n⊢ i2 ≠ j2 simp [hij2] All goals completed! 🐙
@[simp]
lemma dropPair_update_fst {n : ℕ} [inst : DecidableEq (Fin (n + 1 +1))] {c : Fin (n + 1 + 1) → C}
(i j : Fin (n + 1 + 1)) (hij : i ≠ j) (p : Pure S c)
(x : V (c i)) :
dropPair i j hij (p.update i x) = dropPair i j hij p := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c i)⊢ dropPair i j hij (p.update i x) = dropPair i j hij p
ext m k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c i)m:Fin n⊢ dropPair i j hij (p.update i x) m = dropPair i j hij p m
simp only [Function.comp_apply, dropPair, update] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c i)m:Fin n⊢ Function.update p i x (i.succSuccAbove j m) = p (i.succSuccAbove j m)
rw [Function.update_of_ne k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c i)m:Fin n⊢ p (i.succSuccAbove j m) = p (i.succSuccAbove j m)h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c i)m:Fin n⊢ i.succSuccAbove j m ≠ i h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c i)m:Fin n⊢ i.succSuccAbove j m ≠ i] h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c i)m:Fin n⊢ i.succSuccAbove j m ≠ i
exact Ne.symm (fst_ne_succSuccAbove_pre i j m) All goals completed! 🐙
@[simp]
lemma dropPair_update_snd {n : ℕ} [inst : DecidableEq (Fin (n + 1 +1))] {c : Fin (n + 1 + 1) → C}
(i j : Fin (n + 1 + 1)) (hij : i ≠ j) (p : Pure S c)
(x : V (c j)) :
dropPair i j hij (p.update j x) = dropPair i j hij p := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c j)⊢ dropPair i j hij (p.update j x) = dropPair i j hij p
rw [dropPair_symm k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c j)⊢ permP id ⋯ (dropPair j i ⋯ (p.update j x)) = dropPair i j hij p k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c j)⊢ permP id ⋯ (dropPair j i ⋯ (p.update j x)) = dropPair i j hij p] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c j)⊢ permP id ⋯ (dropPair j i ⋯ (p.update j x)) = dropPair i j hij p
simp only [dropPair_update_fst] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c j)⊢ permP id ⋯ (dropPair j i ⋯ p) = dropPair i j hij p
conv_rhs => rw [dropPair_symm] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cx:V (c j)| permP id ⋯ (dropPair j i ⋯ p)
@[simp]
lemma dropPair_update_succSuccAbove {n : ℕ} [inst : DecidableEq (Fin (n + 1 +1))]
{c : Fin (n + 1 + 1) → C}
(i j : Fin (n + 1 + 1)) (hij : i ≠ j) (p : Pure S c)
(m : Fin n)
(x : V (c (succSuccAbove i j m))) :
dropPair i j hij (p.update (succSuccAbove i j m) x) =
(dropPair i j hij p).update m x := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))⊢ dropPair i j hij (p.update (i.succSuccAbove j m) x) = (dropPair i j hij p).update m x
ext m' k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin n⊢ dropPair i j hij (p.update (i.succSuccAbove j m) x) m' = (dropPair i j hij p).update m x m'
simp only [Function.comp_apply, dropPair, update] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin n⊢ Function.update p (i.succSuccAbove j m) x (i.succSuccAbove j m') = Function.update (dropPair i j hij p) m x m'
by_cases h : m' = m pos k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:m' = m⊢ Function.update p (i.succSuccAbove j m) x (i.succSuccAbove j m') = Function.update (dropPair i j hij p) m x m'neg k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ Function.update p (i.succSuccAbove j m) x (i.succSuccAbove j m') = Function.update (dropPair i j hij p) m x m'
· pos k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:m' = m⊢ Function.update p (i.succSuccAbove j m) x (i.succSuccAbove j m') = Function.update (dropPair i j hij p) m x m' subst h pos k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm':Fin nx:V (c (i.succSuccAbove j m'))⊢ Function.update p (i.succSuccAbove j m') x (i.succSuccAbove j m') = Function.update (dropPair i j hij p) m' x m'
simp All goals completed! 🐙
· neg k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ Function.update p (i.succSuccAbove j m) x (i.succSuccAbove j m') = Function.update (dropPair i j hij p) m x m' rw [Function.update_of_ne, neg k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ p (i.succSuccAbove j m') = Function.update (dropPair i j hij p) m x m'neg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ i.succSuccAbove j m' ≠ i.succSuccAbove j m neg k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ p (i.succSuccAbove j m') = dropPair i j hij p m'neg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ m' ≠ mneg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ i.succSuccAbove j m' ≠ i.succSuccAbove j m Function.update_of_ne neg k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ p (i.succSuccAbove j m') = dropPair i j hij p m'neg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ m' ≠ mneg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ i.succSuccAbove j m' ≠ i.succSuccAbove j m neg k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ p (i.succSuccAbove j m') = dropPair i j hij p m'neg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ m' ≠ mneg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ i.succSuccAbove j m' ≠ i.succSuccAbove j m]neg k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ p (i.succSuccAbove j m') = dropPair i j hij p m'neg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ m' ≠ mneg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ i.succSuccAbove j m' ≠ i.succSuccAbove j m
· neg k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ p (i.succSuccAbove j m') = dropPair i j hij p m' rfl All goals completed! 🐙
· neg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ m' ≠ m simp [h] All goals completed! 🐙
· neg.h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ jp:Pure S cm:Fin nx:V (c (i.succSuccAbove j m))m':Fin nh:¬m' = m⊢ i.succSuccAbove j m' ≠ i.succSuccAbove j m simp [h] All goals completed! 🐙TODO "Prove lemmas relating to the commutation rules of `dropPair` and `prodP`."@[simp]
lemma dropPair_permP {n n1 : ℕ} {c : Fin (n + 1 + 1) → C}
{c1 : Fin (n1 + 1 + 1) → C} (i j : Fin (n1 + 1 + 1)) (hij : i ≠ j)
(σ : Fin (n1 + 1 + 1) → Fin (n + 1 + 1)) (hσ : IsReindexing c c1 σ) (p : Pure S c) :
dropPair i j hij (permP σ hσ p) = permP _ (hσ.succSuccAbove i j hij)
(dropPair (σ i) (σ j) (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S c⊢ σ i ≠ σ j simp [hσ.1.injective.eq_iff, hij] All goals completed! 🐙) p) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S c⊢ dropPair i j hij (permP σ hσ p) = permP (i.funPredPredAbove j hij σ ⋯) ⋯ (dropPair (σ i) (σ j) ⋯ p)
ext m k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S cm:Fin n1⊢ dropPair i j hij (permP σ hσ p) m = permP (i.funPredPredAbove j hij σ ⋯) ⋯ (dropPair (σ i) (σ j) ⋯ p) m
simp only [Function.comp_apply, dropPair, permP, funPredPredAbove] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S cm:Fin n1⊢ (LinearEquiv.cast ⋯) (p (σ (i.succSuccAbove j m))) =
(LinearEquiv.cast ⋯) (p ((σ i).succSuccAbove (σ j) ((σ i).predPredAbove (σ j) ⋯ (σ (i.succSuccAbove j m)) ⋯)))
apply congr_mid h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S cm:Fin n1⊢ σ (i.succSuccAbove j m) = (σ i).succSuccAbove (σ j) ((σ i).predPredAbove (σ j) ⋯ (σ (i.succSuccAbove j m)) ⋯)hi k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S cm:Fin n1⊢ c (σ (i.succSuccAbove j m)) = c1 (i.succSuccAbove j m)hj k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S cm:Fin n1⊢ c ((σ i).succSuccAbove (σ j) ((σ i).predPredAbove (σ j) ⋯ (σ (i.succSuccAbove j m)) ⋯)) = c1 (i.succSuccAbove j m)
· h k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S cm:Fin n1⊢ σ (i.succSuccAbove j m) = (σ i).succSuccAbove (σ j) ((σ i).predPredAbove (σ j) ⋯ (σ (i.succSuccAbove j m)) ⋯) simp All goals completed! 🐙
· hi k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S cm:Fin n1⊢ c (σ (i.succSuccAbove j m)) = c1 (i.succSuccAbove j m) simp [hσ.2] All goals completed! 🐙
· hj k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin (n + 1 + 1) → Cc1:Fin (n1 + 1 + 1) → Ci:Fin (n1 + 1 + 1)j:Fin (n1 + 1 + 1)hij:i ≠ jσ:Fin (n1 + 1 + 1) → Fin (n + 1 + 1)hσ:IsReindexing c c1 σp:Pure S cm:Fin n1⊢ c ((σ i).succSuccAbove (σ j) ((σ i).predPredAbove (σ j) ⋯ (σ (i.succSuccAbove j m)) ⋯)) = c1 (i.succSuccAbove j m) simp [hσ.2] All goals completed! 🐙
Two permP–dropPair–dropPair towers over a common pure tensor agree once their composite
slot maps agree pointwise. Comparing two orders of dropping two pairs of slots this way keeps
every slot map an opaque variable, so the comparison closes by unification rather than by
whnf-reducing the color and index-map composites.
lemma permP_dropPair_dropPair_congr {nP nOut : ℕ}
{c : Fin (nP + 1 + 1 + 1 + 1) → C} {cOut : Fin nOut → C} (p : Pure S c)
(aL bL : Fin (nP + 1 + 1 + 1 + 1)) (habL : aL ≠ bL)
(a2L b2L : Fin (nP + 1 + 1)) (hab2L : a2L ≠ b2L)
(σ1L : Fin nOut → Fin nP)
(h1L : IsReindexing ((c ∘ Fin.succSuccAbove aL bL) ∘ Fin.succSuccAbove a2L b2L) cOut σ1L)
(aR bR : Fin (nP + 1 + 1 + 1 + 1)) (habR : aR ≠ bR)
(a2R b2R : Fin (nP + 1 + 1)) (hab2R : a2R ≠ b2R)
(σ1R : Fin nOut → Fin nP)
(h1R : IsReindexing ((c ∘ Fin.succSuccAbove aR bR) ∘ Fin.succSuccAbove a2R b2R) cOut σ1R)
(hslot : ∀ m : Fin nOut,
Fin.succSuccAbove aL bL (Fin.succSuccAbove a2L b2L (σ1L m)) =
Fin.succSuccAbove aR bR (Fin.succSuccAbove a2R b2R (σ1R m))) :
permP σ1L h1L (dropPair a2L b2L hab2L (dropPair aL bL habL p)) =
permP σ1R h1R (dropPair a2R b2R hab2R (dropPair aR bR habR p)) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bnP:ℕnOut:ℕc:Fin (nP + 1 + 1 + 1 + 1) → CcOut:Fin nOut → Cp:Pure S caL:Fin (nP + 1 + 1 + 1 + 1)bL:Fin (nP + 1 + 1 + 1 + 1)habL:aL ≠ bLa2L:Fin (nP + 1 + 1)b2L:Fin (nP + 1 + 1)hab2L:a2L ≠ b2Lσ1L:Fin nOut → Fin nPh1L:IsReindexing ((c ∘ aL.succSuccAbove bL) ∘ a2L.succSuccAbove b2L) cOut σ1LaR:Fin (nP + 1 + 1 + 1 + 1)bR:Fin (nP + 1 + 1 + 1 + 1)habR:aR ≠ bRa2R:Fin (nP + 1 + 1)b2R:Fin (nP + 1 + 1)hab2R:a2R ≠ b2Rσ1R:Fin nOut → Fin nPh1R:IsReindexing ((c ∘ aR.succSuccAbove bR) ∘ a2R.succSuccAbove b2R) cOut σ1Rhslot:∀ (m : Fin nOut),
aL.succSuccAbove bL (a2L.succSuccAbove b2L (σ1L m)) = aR.succSuccAbove bR (a2R.succSuccAbove b2R (σ1R m))⊢ permP σ1L h1L (dropPair a2L b2L hab2L (dropPair aL bL habL p)) =
permP σ1R h1R (dropPair a2R b2R hab2R (dropPair aR bR habR p))
funext m k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bnP:ℕnOut:ℕc:Fin (nP + 1 + 1 + 1 + 1) → CcOut:Fin nOut → Cp:Pure S caL:Fin (nP + 1 + 1 + 1 + 1)bL:Fin (nP + 1 + 1 + 1 + 1)habL:aL ≠ bLa2L:Fin (nP + 1 + 1)b2L:Fin (nP + 1 + 1)hab2L:a2L ≠ b2Lσ1L:Fin nOut → Fin nPh1L:IsReindexing ((c ∘ aL.succSuccAbove bL) ∘ a2L.succSuccAbove b2L) cOut σ1LaR:Fin (nP + 1 + 1 + 1 + 1)bR:Fin (nP + 1 + 1 + 1 + 1)habR:aR ≠ bRa2R:Fin (nP + 1 + 1)b2R:Fin (nP + 1 + 1)hab2R:a2R ≠ b2Rσ1R:Fin nOut → Fin nPh1R:IsReindexing ((c ∘ aR.succSuccAbove bR) ∘ a2R.succSuccAbove b2R) cOut σ1Rhslot:∀ (m : Fin nOut),
aL.succSuccAbove bL (a2L.succSuccAbove b2L (σ1L m)) = aR.succSuccAbove bR (a2R.succSuccAbove b2R (σ1R m))m:Fin nOut⊢ permP σ1L h1L (dropPair a2L b2L hab2L (dropPair aL bL habL p)) m =
permP σ1R h1R (dropPair a2R b2R hab2R (dropPair aR bR habR p)) m
simp only [permP, dropPair] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bnP:ℕnOut:ℕc:Fin (nP + 1 + 1 + 1 + 1) → CcOut:Fin nOut → Cp:Pure S caL:Fin (nP + 1 + 1 + 1 + 1)bL:Fin (nP + 1 + 1 + 1 + 1)habL:aL ≠ bLa2L:Fin (nP + 1 + 1)b2L:Fin (nP + 1 + 1)hab2L:a2L ≠ b2Lσ1L:Fin nOut → Fin nPh1L:IsReindexing ((c ∘ aL.succSuccAbove bL) ∘ a2L.succSuccAbove b2L) cOut σ1LaR:Fin (nP + 1 + 1 + 1 + 1)bR:Fin (nP + 1 + 1 + 1 + 1)habR:aR ≠ bRa2R:Fin (nP + 1 + 1)b2R:Fin (nP + 1 + 1)hab2R:a2R ≠ b2Rσ1R:Fin nOut → Fin nPh1R:IsReindexing ((c ∘ aR.succSuccAbove bR) ∘ a2R.succSuccAbove b2R) cOut σ1Rhslot:∀ (m : Fin nOut),
aL.succSuccAbove bL (a2L.succSuccAbove b2L (σ1L m)) = aR.succSuccAbove bR (a2R.succSuccAbove b2R (σ1R m))m:Fin nOut⊢ (LinearEquiv.cast ⋯) (p (aL.succSuccAbove bL (a2L.succSuccAbove b2L (σ1L m)))) =
(LinearEquiv.cast ⋯) (p (aR.succSuccAbove bR (a2R.succSuccAbove b2R (σ1R m))))
exact congr_mid (cOut m) p _ _ (hslot m) (h1L.preserve_color m).symm
(h1R.preserve_color m).symm All goals completed! 🐙
Two permP–dropPair–permP towers over a common pure tensor agree once their composite
slot maps agree pointwise. The one-contraction, inner-relabelled sibling of
permP_dropPair_dropPair_congr.
lemma permP_dropPair_permP_congr {nP nOut mL mR : ℕ}
{c : Fin nP → C} {cL : Fin (mL + 1 + 1) → C} {cR : Fin (mR + 1 + 1) → C}
{cOut : Fin nOut → C} (p : Pure S c)
(σ0L : Fin (mL + 1 + 1) → Fin nP) (h0L : IsReindexing c cL σ0L)
(aL bL : Fin (mL + 1 + 1)) (habL : aL ≠ bL)
(σ1L : Fin nOut → Fin mL)
(h1L : IsReindexing (cL ∘ Fin.succSuccAbove aL bL) cOut σ1L)
(σ0R : Fin (mR + 1 + 1) → Fin nP) (h0R : IsReindexing c cR σ0R)
(aR bR : Fin (mR + 1 + 1)) (habR : aR ≠ bR)
(σ1R : Fin nOut → Fin mR)
(h1R : IsReindexing (cR ∘ Fin.succSuccAbove aR bR) cOut σ1R)
(hslot : ∀ m : Fin nOut,
σ0L (Fin.succSuccAbove aL bL (σ1L m)) = σ0R (Fin.succSuccAbove aR bR (σ1R m))) :
permP σ1L h1L (dropPair aL bL habL (permP σ0L h0L p)) =
permP σ1R h1R (dropPair aR bR habR (permP σ0R h0R p)) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bnP:ℕnOut:ℕmL:ℕmR:ℕc:Fin nP → CcL:Fin (mL + 1 + 1) → CcR:Fin (mR + 1 + 1) → CcOut:Fin nOut → Cp:Pure S cσ0L:Fin (mL + 1 + 1) → Fin nPh0L:IsReindexing c cL σ0LaL:Fin (mL + 1 + 1)bL:Fin (mL + 1 + 1)habL:aL ≠ bLσ1L:Fin nOut → Fin mLh1L:IsReindexing (cL ∘ aL.succSuccAbove bL) cOut σ1Lσ0R:Fin (mR + 1 + 1) → Fin nPh0R:IsReindexing c cR σ0RaR:Fin (mR + 1 + 1)bR:Fin (mR + 1 + 1)habR:aR ≠ bRσ1R:Fin nOut → Fin mRh1R:IsReindexing (cR ∘ aR.succSuccAbove bR) cOut σ1Rhslot:∀ (m : Fin nOut), σ0L (aL.succSuccAbove bL (σ1L m)) = σ0R (aR.succSuccAbove bR (σ1R m))⊢ permP σ1L h1L (dropPair aL bL habL (permP σ0L h0L p)) = permP σ1R h1R (dropPair aR bR habR (permP σ0R h0R p))
funext m k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bnP:ℕnOut:ℕmL:ℕmR:ℕc:Fin nP → CcL:Fin (mL + 1 + 1) → CcR:Fin (mR + 1 + 1) → CcOut:Fin nOut → Cp:Pure S cσ0L:Fin (mL + 1 + 1) → Fin nPh0L:IsReindexing c cL σ0LaL:Fin (mL + 1 + 1)bL:Fin (mL + 1 + 1)habL:aL ≠ bLσ1L:Fin nOut → Fin mLh1L:IsReindexing (cL ∘ aL.succSuccAbove bL) cOut σ1Lσ0R:Fin (mR + 1 + 1) → Fin nPh0R:IsReindexing c cR σ0RaR:Fin (mR + 1 + 1)bR:Fin (mR + 1 + 1)habR:aR ≠ bRσ1R:Fin nOut → Fin mRh1R:IsReindexing (cR ∘ aR.succSuccAbove bR) cOut σ1Rhslot:∀ (m : Fin nOut), σ0L (aL.succSuccAbove bL (σ1L m)) = σ0R (aR.succSuccAbove bR (σ1R m))m:Fin nOut⊢ permP σ1L h1L (dropPair aL bL habL (permP σ0L h0L p)) m = permP σ1R h1R (dropPair aR bR habR (permP σ0R h0R p)) m
simp only [permP, dropPair] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bnP:ℕnOut:ℕmL:ℕmR:ℕc:Fin nP → CcL:Fin (mL + 1 + 1) → CcR:Fin (mR + 1 + 1) → CcOut:Fin nOut → Cp:Pure S cσ0L:Fin (mL + 1 + 1) → Fin nPh0L:IsReindexing c cL σ0LaL:Fin (mL + 1 + 1)bL:Fin (mL + 1 + 1)habL:aL ≠ bLσ1L:Fin nOut → Fin mLh1L:IsReindexing (cL ∘ aL.succSuccAbove bL) cOut σ1Lσ0R:Fin (mR + 1 + 1) → Fin nPh0R:IsReindexing c cR σ0RaR:Fin (mR + 1 + 1)bR:Fin (mR + 1 + 1)habR:aR ≠ bRσ1R:Fin nOut → Fin mRh1R:IsReindexing (cR ∘ aR.succSuccAbove bR) cOut σ1Rhslot:∀ (m : Fin nOut), σ0L (aL.succSuccAbove bL (σ1L m)) = σ0R (aR.succSuccAbove bR (σ1R m))m:Fin nOut⊢ (LinearEquiv.cast ⋯) ((LinearEquiv.cast ⋯) (p (σ0L (aL.succSuccAbove bL (σ1L m))))) =
(LinearEquiv.cast ⋯) ((LinearEquiv.cast ⋯) (p (σ0R (aR.succSuccAbove bR (σ1R m)))))
-- Each side is a two-`cast` tower, one cast from the inner `permP` and one from the outer
-- `permP`-after-`dropPair`. `LinearEquiv.cast` is defeq to `_root_.cast`, so drop to the plain
-- cast, fuse the tower with `cast_cast`, and close with the single-cast lemma `congr_mid`.
change _root_.cast _ (_root_.cast _ (p _)) =
_root_.cast _ (_root_.cast _ (p _)) k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bnP:ℕnOut:ℕmL:ℕmR:ℕc:Fin nP → CcL:Fin (mL + 1 + 1) → CcR:Fin (mR + 1 + 1) → CcOut:Fin nOut → Cp:Pure S cσ0L:Fin (mL + 1 + 1) → Fin nPh0L:IsReindexing c cL σ0LaL:Fin (mL + 1 + 1)bL:Fin (mL + 1 + 1)habL:aL ≠ bLσ1L:Fin nOut → Fin mLh1L:IsReindexing (cL ∘ aL.succSuccAbove bL) cOut σ1Lσ0R:Fin (mR + 1 + 1) → Fin nPh0R:IsReindexing c cR σ0RaR:Fin (mR + 1 + 1)bR:Fin (mR + 1 + 1)habR:aR ≠ bRσ1R:Fin nOut → Fin mRh1R:IsReindexing (cR ∘ aR.succSuccAbove bR) cOut σ1Rhslot:∀ (m : Fin nOut), σ0L (aL.succSuccAbove bL (σ1L m)) = σ0R (aR.succSuccAbove bR (σ1R m))m:Fin nOut⊢ cast ⋯ (cast ⋯ (p (σ0L (aL.succSuccAbove bL (σ1L m))))) = cast ⋯ (cast ⋯ (p (σ0R (aR.succSuccAbove bR (σ1R m)))))
simp only [_root_.cast_cast] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bnP:ℕnOut:ℕmL:ℕmR:ℕc:Fin nP → CcL:Fin (mL + 1 + 1) → CcR:Fin (mR + 1 + 1) → CcOut:Fin nOut → Cp:Pure S cσ0L:Fin (mL + 1 + 1) → Fin nPh0L:IsReindexing c cL σ0LaL:Fin (mL + 1 + 1)bL:Fin (mL + 1 + 1)habL:aL ≠ bLσ1L:Fin nOut → Fin mLh1L:IsReindexing (cL ∘ aL.succSuccAbove bL) cOut σ1Lσ0R:Fin (mR + 1 + 1) → Fin nPh0R:IsReindexing c cR σ0RaR:Fin (mR + 1 + 1)bR:Fin (mR + 1 + 1)habR:aR ≠ bRσ1R:Fin nOut → Fin mRh1R:IsReindexing (cR ∘ aR.succSuccAbove bR) cOut σ1Rhslot:∀ (m : Fin nOut), σ0L (aL.succSuccAbove bL (σ1L m)) = σ0R (aR.succSuccAbove bR (σ1R m))m:Fin nOut⊢ cast ⋯ (p (σ0L (aL.succSuccAbove bL (σ1L m)))) = cast ⋯ (p (σ0R (aR.succSuccAbove bR (σ1R m))))
exact congr_mid (cOut m) p _ _ (hslot m)
((h0L.2 _).trans (h1L.2 m))
((h0R.2 _).trans (h1R.2 m)) All goals completed! 🐙Contraction coefficient
contrPCoeff is insensitive to its proof arguments once the two contracted slots agree. Lets a
coefficient comparison rewrite the slots without a congr search through the proof fields.
lemma contrPCoeff_congr {n : ℕ} {c : Fin n → C} (p : Pure S c)
{i i' j j' : Fin n} (hi : i = i') (hj : j = j')
{hij : i ≠ j ∧ S.τ (c i) = c j} {hij' : i' ≠ j' ∧ S.τ (c i') = c j'} :
p.contrPCoeff i j hij = p.contrPCoeff i' j' hij' := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Pure S ci:Fin ni':Fin nj:Fin nj':Fin nhi:i = i'hj:j = j'hij:i ≠ j ∧ S.τ (c i) = c jhij':i' ≠ j' ∧ S.τ (c i') = c j'⊢ contrPCoeff i j hij p = contrPCoeff i' j' hij' p
subst hi k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Pure S ci:Fin nj:Fin nj':Fin nhj:j = j'hij:i ≠ j ∧ S.τ (c i) = c jhij':i ≠ j' ∧ S.τ (c i) = c j'⊢ contrPCoeff i j hij p = contrPCoeff i j' hij' p
subst hj k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Cp:Pure S ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jhij':i ≠ j ∧ S.τ (c i) = c j⊢ contrPCoeff i j hij p = contrPCoeff i j hij' p
rfl All goals completed! 🐙attribute [-simp] LinearEquiv.cast_apply@[simp]
lemma contrPCoeff_permP {n n1 : ℕ} {c : Fin n → C}
{c1 : Fin n1 → C} (i j : Fin n1) (hij : i ≠ j ∧ S.τ (c1 i) = c1 j)
(σ : Fin n1 → Fin n) (hσ : IsReindexing c c1 σ) (p : Pure S c) :
contrPCoeff i j hij (permP σ hσ p) =
contrPCoeff (σ i) (σ j) (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S c⊢ σ i ≠ σ j ∧ S.τ (c (σ i)) = c (σ j) simp [hσ.1.injective.eq_iff, hij, hσ.2] All goals completed! 🐙) p := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S c⊢ contrPCoeff i j hij (permP σ hσ p) = contrPCoeff (σ i) (σ j) ⋯ p
simp only [contrPCoeff, permP] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S c⊢ (S.contr (c1 i)) ((LinearEquiv.cast ⋯) (p (σ i)) ⊗ₜ[k] (LinearEquiv.cast ⋯) ((LinearEquiv.cast ⋯) (p (σ j)))) =
(S.contr (c (σ i))) (p (σ i) ⊗ₜ[k] (LinearEquiv.cast ⋯) (p (σ j)))
generalize_proofs h1 h2 h3 h4 h5 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c (σ i) = c1 ih3:c1 j = S.τ (c1 i)h4:c (σ j) = c1 jh5:c (σ j) = S.τ (c (σ i))⊢ (S.contr (c1 i)) ((LinearEquiv.cast h2) (p (σ i)) ⊗ₜ[k] (LinearEquiv.cast h3) ((LinearEquiv.cast h4) (p (σ j)))) =
(S.contr (c (σ i))) (p (σ i) ⊗ₜ[k] (LinearEquiv.cast h5) (p (σ j)))
generalize p (σ j) = pj at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c (σ i) = c1 ih3:c1 j = S.τ (c1 i)h4:c (σ j) = c1 jh5:c (σ j) = S.τ (c (σ i))pj:V (c (σ j))⊢ (S.contr (c1 i)) ((LinearEquiv.cast h2) (p (σ i)) ⊗ₜ[k] (LinearEquiv.cast h3) ((LinearEquiv.cast h4) pj)) =
(S.contr (c (σ i))) (p (σ i) ⊗ₜ[k] (LinearEquiv.cast h5) pj)
generalize p (σ i) = pi at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c (σ i) = c1 ih3:c1 j = S.τ (c1 i)h4:c (σ j) = c1 jh5:c (σ j) = S.τ (c (σ i))pj:V (c (σ j))pi:V (c (σ i))⊢ (S.contr (c1 i)) ((LinearEquiv.cast h2) pi ⊗ₜ[k] (LinearEquiv.cast h3) ((LinearEquiv.cast h4) pj)) =
(S.contr (c (σ i))) (pi ⊗ₜ[k] (LinearEquiv.cast h5) pj)
generalize c (σ j) = cj at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c (σ i) = c1 ih3:c1 j = S.τ (c1 i)pi:V (c (σ i))cj:Ch4:cj = c1 jh5:cj = S.τ (c (σ i))pj:V cj⊢ (S.contr (c1 i)) ((LinearEquiv.cast h2) pi ⊗ₜ[k] (LinearEquiv.cast h3) ((LinearEquiv.cast h4) pj)) =
(S.contr (c (σ i))) (pi ⊗ₜ[k] (LinearEquiv.cast h5) pj)
generalize c (σ i) = ci at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h3:c1 j = S.τ (c1 i)cj:Ch4:cj = c1 jpj:V cjci:Ch2:ci = c1 ipi:V cih5:cj = S.τ ci⊢ (S.contr (c1 i)) ((LinearEquiv.cast h2) pi ⊗ₜ[k] (LinearEquiv.cast h3) ((LinearEquiv.cast h4) pj)) =
(S.contr ci) (pi ⊗ₜ[k] (LinearEquiv.cast h5) pj)
subst h2 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h3:c1 j = S.τ (c1 i)cj:Ch4:cj = c1 jpj:V cjpi:V (c1 i)h5:cj = S.τ (c1 i)⊢ (S.contr (c1 i)) ((LinearEquiv.cast ⋯) pi ⊗ₜ[k] (LinearEquiv.cast h3) ((LinearEquiv.cast h4) pj)) =
(S.contr (c1 i)) (pi ⊗ₜ[k] (LinearEquiv.cast h5) pj)
subst h4 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕn1:ℕc:Fin n → Cc1:Fin n1 → Ci:Fin n1j:Fin n1hij:i ≠ j ∧ S.τ (c1 i) = c1 jσ:Fin n1 → Fin nhσ:IsReindexing c c1 σp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h3:c1 j = S.τ (c1 i)pi:V (c1 i)pj:V (c1 j)h5:c1 j = S.τ (c1 i)⊢ (S.contr (c1 i)) ((LinearEquiv.cast ⋯) pi ⊗ₜ[k] (LinearEquiv.cast h3) ((LinearEquiv.cast ⋯) pj)) =
(S.contr (c1 i)) (pi ⊗ₜ[k] (LinearEquiv.cast h5) pj)
rfl All goals completed! 🐙@[simp]
lemma contrPCoeff_update_succSuccAbove {n : ℕ} [inst : DecidableEq (Fin (n + 1 +1))]
{c : Fin (n + 1 + 1) → C}
(i j : Fin (n + 1 + 1)) (hij : i ≠ j ∧ S.τ (c i) = c j) (m : Fin n)
(p : Pure S c) (x : V (c (succSuccAbove i j m))) :
contrPCoeff i j hij (p.update (succSuccAbove i j m) x) =
contrPCoeff i j hij p := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jm:Fin np:Pure S cx:V (c (i.succSuccAbove j m))⊢ contrPCoeff i j hij (p.update (i.succSuccAbove j m) x) = contrPCoeff i j hij p
simp only [contrPCoeff] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jm:Fin np:Pure S cx:V (c (i.succSuccAbove j m))⊢ (S.contr (c i)) (p.update (i.succSuccAbove j m) x i ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update (i.succSuccAbove j m) x j)) =
(S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j))
congr e_6.e_m k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jm:Fin np:Pure S cx:V (c (i.succSuccAbove j m))⊢ p.update (i.succSuccAbove j m) x i = p ie_n.e_6 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jm:Fin np:Pure S cx:V (c (i.succSuccAbove j m))⊢ p.update (i.succSuccAbove j m) x j = p j
· e_6.e_m k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jm:Fin np:Pure S cx:V (c (i.succSuccAbove j m))⊢ p.update (i.succSuccAbove j m) x i = p i simp [update] All goals completed! 🐙
· e_n.e_6 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jm:Fin np:Pure S cx:V (c (i.succSuccAbove j m))⊢ p.update (i.succSuccAbove j m) x j = p j simp [update] All goals completed! 🐙
@[simp]
lemma contrPCoeff_update_fst_add {n : ℕ} [inst : DecidableEq (Fin n)] {c : Fin n → C}
(i j : Fin n) (hij : i ≠ j ∧ S.τ (c i) = c j)
(p : Pure S c) (x y : V (c i)) :
contrPCoeff i j hij (p.update i (x + y)) =
contrPCoeff i j hij (p.update i x) + contrPCoeff i j hij (p.update i y) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ contrPCoeff i j hij (p.update i (x + y)) = contrPCoeff i j hij (p.update i x) + contrPCoeff i j hij (p.update i y)
simp only [contrPCoeff, update_same, add_tmul, map_add] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ (S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i (x + y) j)) +
(S.contr (c i)) (y ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i (x + y) j)) =
(S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i x j)) +
(S.contr (c i)) (y ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i y j))
repeat rw [Pure.update_diff k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ (S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j)) + (S.contr (c i)) (y ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j)) =
(S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i x j)) +
(S.contr (c i)) (y ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i y j))hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ j hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ j] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ (S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j)) + (S.contr (c i)) (y ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j)) =
(S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j)) + (S.contr (c i)) (y ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i y j))hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ j hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c i)y:V (c i)⊢ i ≠ j
all_goals grind All goals completed! 🐙
@[simp]
lemma contrPCoeff_update_snd_add {n : ℕ} [inst : DecidableEq (Fin n)] {c : Fin n → C}
(i j : Fin n) (hij : i ≠ j ∧ S.τ (c i) = c j)
(p : Pure S c) (x y : V (c j)) :
contrPCoeff i j hij (p.update j (x + y)) =
contrPCoeff i j hij (p.update j x) + contrPCoeff i j hij (p.update j y) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ contrPCoeff i j hij (p.update j (x + y)) = contrPCoeff i j hij (p.update j x) + contrPCoeff i j hij (p.update j y)
simp only [contrPCoeff, update_same, tmul_add, map_add] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ (S.contr (c i)) (p.update j (x + y) i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) +
(S.contr (c i)) (p.update j (x + y) i ⊗ₜ[k] (LinearEquiv.cast ⋯) y) =
(S.contr (c i)) (p.update j x i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) +
(S.contr (c i)) (p.update j y i ⊗ₜ[k] (LinearEquiv.cast ⋯) y)
repeat rw [Pure.update_diff k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) + (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) y) =
(S.contr (c i)) (p.update j x i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) +
(S.contr (c i)) (p.update j y i ⊗ₜ[k] (LinearEquiv.cast ⋯) y)hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ i hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ i] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) + (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) y) =
(S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) + (S.contr (c i)) (p.update j y i ⊗ₜ[k] (LinearEquiv.cast ⋯) y)hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ i hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c j)y:V (c j)⊢ j ≠ i
all_goals grind All goals completed! 🐙
@[simp]
lemma contrPCoeff_update_fst_smul {n : ℕ} [inst : DecidableEq (Fin n)] {c : Fin n → C}
(i j : Fin n) (hij : i ≠ j ∧ S.τ (c i) = c j)
(p : Pure S c) (r : k) (x : V (c i)) :
contrPCoeff i j hij (p.update i (r • x)) =
r * contrPCoeff i j hij (p.update i x) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ contrPCoeff i j hij (p.update i (r • x)) = r * contrPCoeff i j hij (p.update i x)
simp only [contrPCoeff, update_same, smul_tmul] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ (S.contr (c i)) (x ⊗ₜ[k] (r • (LinearEquiv.cast ⋯) (p.update i (r • x) j))) =
r * (S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i x j))
repeat rw [Pure.update_diff k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ (S.contr (c i)) (x ⊗ₜ[k] (r • (LinearEquiv.cast ⋯) (p j))) =
r * (S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i x j))hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ j k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ (S.contr (c i)) (x ⊗ₜ[k] (r • (LinearEquiv.cast ⋯) (p j))) = r * (S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j))hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ j] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ (S.contr (c i)) (x ⊗ₜ[k] (r • (LinearEquiv.cast ⋯) (p j))) =
r * (S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p.update i x j))hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ j k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ (S.contr (c i)) (x ⊗ₜ[k] (r • (LinearEquiv.cast ⋯) (p j))) = r * (S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j))hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ j k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ (S.contr (c i)) (x ⊗ₜ[k] (r • (LinearEquiv.cast ⋯) (p j))) = r * (S.contr (c i)) (x ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j))hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ j
simp only [tmul_smul, map_smul, smul_eq_mul] hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ jhij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c i)⊢ i ≠ j
all_goals grind All goals completed! 🐙
@[simp]
lemma contrPCoeff_update_snd_smul {n : ℕ} [inst : DecidableEq (Fin n)] {c : Fin n → C}
(i j : Fin n) (hij : i ≠ j ∧ S.τ (c i) = c j)
(p : Pure S c) (r : k) (x : V (c j)) :
contrPCoeff i j hij (p.update j (r • x)) =
r * contrPCoeff i j hij (p.update j x) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ contrPCoeff i j hij (p.update j (r • x)) = r * contrPCoeff i j hij (p.update j x)
simp only [contrPCoeff, update_same, tmul_smul, map_smul] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ r • (S.contr (c i)) (p.update j (r • x) i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) =
r * (S.contr (c i)) (p.update j x i ⊗ₜ[k] (LinearEquiv.cast ⋯) x)
repeat rw [Pure.update_diff k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ r • (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) =
r * (S.contr (c i)) (p.update j x i ⊗ₜ[k] (LinearEquiv.cast ⋯) x)hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ i k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ r • (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) = r * (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x)hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ i] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ r • (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) =
r * (S.contr (c i)) (p.update j x i ⊗ₜ[k] (LinearEquiv.cast ⋯) x)hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ i k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ r • (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) = r * (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x)hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ i k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ r • (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x) = r * (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) x)hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ i
simp only [smul_eq_mul] hij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ ihij k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin n)c:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c j)⊢ j ≠ i
all_goals grind All goals completed! 🐙lemma contrPCoeff_dropPair {n : ℕ} {c : Fin (n + 1 + 1) → C}
(a b : Fin (n + 1 + 1)) (hab : a ≠ b)
(i j : Fin n) (hij : i ≠ j ∧ S.τ (c (succSuccAbove a b i)) = (c (succSuccAbove a b j)))
(p : Pure S c) : (p.dropPair a b hab).contrPCoeff i j hij =
p.contrPCoeff (succSuccAbove a b i) (succSuccAbove a b j)
(by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep b✝n:ℕc:Fin (n + 1 + 1) → Ca:Fin (n + 1 + 1)b:Fin (n + 1 + 1)hab:a ≠ bi:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c (a.succSuccAbove b i)) = c (a.succSuccAbove b j)p:Pure S c⊢ a.succSuccAbove b i ≠ a.succSuccAbove b j ∧ S.τ (c (a.succSuccAbove b i)) = c (a.succSuccAbove b j) simpa using hij All goals completed! 🐙) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b✝:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep b✝n:ℕc:Fin (n + 1 + 1) → Ca:Fin (n + 1 + 1)b:Fin (n + 1 + 1)hab:a ≠ bi:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c (a.succSuccAbove b i)) = c (a.succSuccAbove b j)p:Pure S c⊢ contrPCoeff i j hij (dropPair a b hab p) = contrPCoeff (a.succSuccAbove b i) (a.succSuccAbove b j) ⋯ p rfl All goals completed! 🐙
lemma contrPCoeff_symm {n : ℕ} {c : Fin n → C} {i j : Fin n} {hij : i ≠ j ∧ S.τ (c i) = c j}
{p : Pure S c} :
p.contrPCoeff i j hij = p.contrPCoeff j i ⟨hij.1.symm, by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ S.τ (c j) = c i simp [← hij.2] All goals completed! 🐙⟩ := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ contrPCoeff i j hij p = contrPCoeff j i ⋯ p
rw [contrPCoeff, k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j)) = contrPCoeff j i ⋯ p k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ (S.contr (S.τ (c i))) ((LinearEquiv.cast ⋯) (p j) ⊗ₜ[k] (Equiv.cast ⋯) (p i)) =
(S.contr (c j)) (p j ⊗ₜ[k] (LinearEquiv.cast ⋯) (p i)) contrPCoeff, k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ (S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j)) = (S.contr (c j)) (p j ⊗ₜ[k] (LinearEquiv.cast ⋯) (p i)) k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ (S.contr (S.τ (c i))) ((LinearEquiv.cast ⋯) (p j) ⊗ₜ[k] (Equiv.cast ⋯) (p i)) =
(S.contr (c j)) (p j ⊗ₜ[k] (LinearEquiv.cast ⋯) (p i)) S.contr_tmul_symm k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ (S.contr (S.τ (c i))) ((LinearEquiv.cast ⋯) (p j) ⊗ₜ[k] (Equiv.cast ⋯) (p i)) =
(S.contr (c j)) (p j ⊗ₜ[k] (LinearEquiv.cast ⋯) (p i)) k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ (S.contr (S.τ (c i))) ((LinearEquiv.cast ⋯) (p j) ⊗ₜ[k] (Equiv.cast ⋯) (p i)) =
(S.contr (c j)) (p j ⊗ₜ[k] (LinearEquiv.cast ⋯) (p i))] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ (S.contr (S.τ (c i))) ((LinearEquiv.cast ⋯) (p j) ⊗ₜ[k] (Equiv.cast ⋯) (p i)) =
(S.contr (c j)) (p j ⊗ₜ[k] (LinearEquiv.cast ⋯) (p i))
generalize_proofs h1 h2 h3 h4 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = S.τ (c i)h3:V (c i) = V (S.τ (S.τ (c i)))h4:c i = S.τ (c j)⊢ (S.contr (S.τ (c i))) ((LinearEquiv.cast h2) (p j) ⊗ₜ[k] (Equiv.cast h3) (p i)) =
(S.contr (c j)) (p j ⊗ₜ[k] (LinearEquiv.cast h4) (p i))
generalize p j = pj at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = S.τ (c i)h3:V (c i) = V (S.τ (S.τ (c i)))h4:c i = S.τ (c j)pj:V (c j)⊢ (S.contr (S.τ (c i))) ((LinearEquiv.cast h2) pj ⊗ₜ[k] (Equiv.cast h3) (p i)) =
(S.contr (c j)) (pj ⊗ₜ[k] (LinearEquiv.cast h4) (p i))
generalize p i = pi at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = S.τ (c i)h3:V (c i) = V (S.τ (S.τ (c i)))h4:c i = S.τ (c j)pj:V (c j)pi:V (c i)⊢ (S.contr (S.τ (c i))) ((LinearEquiv.cast h2) pj ⊗ₜ[k] (Equiv.cast h3) pi) =
(S.contr (c j)) (pj ⊗ₜ[k] (LinearEquiv.cast h4) pi)
generalize c j = cj at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)h3:V (c i) = V (S.τ (S.τ (c i)))pi:V (c i)cj:Chij:i ≠ j ∧ S.τ (c i) = cjh2:cj = S.τ (c i)h4:c i = S.τ cjpj:V cj⊢ (S.contr (S.τ (c i))) ((LinearEquiv.cast h2) pj ⊗ₜ[k] (Equiv.cast h3) pi) =
(S.contr cj) (pj ⊗ₜ[k] (LinearEquiv.cast h4) pi)
generalize c i = ci at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)cj:Cpj:V cjci:Ch3:V ci = V (S.τ (S.τ ci))pi:V cihij:i ≠ j ∧ S.τ ci = cjh2:cj = S.τ cih4:ci = S.τ cj⊢ (S.contr (S.τ ci)) ((LinearEquiv.cast h2) pj ⊗ₜ[k] (Equiv.cast h3) pi) =
(S.contr cj) (pj ⊗ₜ[k] (LinearEquiv.cast h4) pi)
subst h2 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S ch1:RingHomInvPair (RingHom.id k) (RingHom.id k)ci:Ch3:V ci = V (S.τ (S.τ ci))pi:V cipj:V (S.τ ci)hij:i ≠ j ∧ S.τ ci = S.τ cih4:ci = S.τ (S.τ ci)⊢ (S.contr (S.τ ci)) ((LinearEquiv.cast ⋯) pj ⊗ₜ[k] (Equiv.cast h3) pi) =
(S.contr (S.τ ci)) (pj ⊗ₜ[k] (LinearEquiv.cast h4) pi)
rfl All goals completed! 🐙
lemma contrPCoeff_mul_dropPair {n : ℕ} {c : Fin (n + 1 + 1 + 1 + 1) → C}
(i1 j1 : Fin (n + 1 + 1 + 1 + 1)) (i2 j2 : Fin (n + 1 + 1))
(hij1 : i1 ≠ j1 ∧ S.τ (c i1) = (c j1))
(hij2 : i2 ≠ j2 ∧ S.τ (c (succSuccAbove i1 j1 i2)) = (c (succSuccAbove i1 j1 j2)))
(p : Pure S c) :
let i2' := (succSuccAbove i1 j1 i2);
let j2' := (succSuccAbove i1 j1 j2);
have hi2j2' : i2' ≠ j2' := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1 ∧ S.τ (c i1) = c j1hij2:i2 ≠ j2 ∧ S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2⊢ i2' ≠ j2' simp [i2', j2', hij2] All goals completed! 🐙;
let i1' := (predPredAbove i2' j2' hi2j2' i1 (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1 ∧ S.τ (c i1) = c j1hij2:i2 ≠ j2 ∧ S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2hi2j2':i2' ≠ j2'⊢ i1 ≠ i2' ∧ i1 ≠ j2' simp [i2', j2'] All goals completed! 🐙));
let j1' := (predPredAbove i2' j2' hi2j2' j1 (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1 ∧ S.τ (c i1) = c j1hij2:i2 ≠ j2 ∧ S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2hi2j2':i2' ≠ j2'i1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' i1 ⋯⊢ j1 ≠ i2' ∧ j1 ≠ j2' simp [i2', j2'] All goals completed! 🐙));
(p.contrPCoeff i1 j1 hij1) * (dropPair i1 j1 hij1.1 p).contrPCoeff i2 j2 hij2 =
(p.contrPCoeff i2' j2' (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1 ∧ S.τ (c i1) = c j1hij2:i2 ≠ j2 ∧ S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2hi2j2':i2' ≠ j2'i1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' i1 ⋯j1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' j1 ⋯⊢ i2' ≠ j2' ∧ S.τ (c i2') = c j2' simp [i2', j2', hij2] All goals completed! 🐙)) *
(dropPair i2' j2' (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1 ∧ S.τ (c i1) = c j1hij2:i2 ≠ j2 ∧ S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2hi2j2':i2' ≠ j2'i1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' i1 ⋯j1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' j1 ⋯⊢ i2' ≠ j2' simp [i2', j2', hij2] All goals completed! 🐙) p).contrPCoeff i1' j1'
(by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1 ∧ S.τ (c i1) = c j1hij2:i2 ≠ j2 ∧ S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)p:Pure S ci2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 i2j2':Fin (n + 2 + 1 + 1) := i1.succSuccAbove j1 j2hi2j2':i2' ≠ j2'i1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' i1 ⋯j1':Fin (n + 2) := i2'.predPredAbove j2' hi2j2' j1 ⋯⊢ i1' ≠ j1' ∧ S.τ ((c ∘ i2'.succSuccAbove j2') i1') = (c ∘ i2'.succSuccAbove j2') j1' simp [i1', j1', hij1] All goals completed! 🐙) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1 ∧ S.τ (c i1) = c j1hij2:i2 ≠ j2 ∧ S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)p:Pure S c⊢ let i2' := i1.succSuccAbove j1 i2;
let j2' := i1.succSuccAbove j1 j2;
have hi2j2' := ⋯;
let i1' := i2'.predPredAbove j2' hi2j2' i1 ⋯;
let j1' := i2'.predPredAbove j2' hi2j2' j1 ⋯;
contrPCoeff i1 j1 hij1 p * contrPCoeff i2 j2 hij2 (dropPair i1 j1 ⋯ p) =
contrPCoeff i2' j2' ⋯ p * contrPCoeff i1' j1' ⋯ (dropPair i2' j2' ⋯ p)
simp only [contrPCoeff_dropPair, succSuccAbove_predPredAbove] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1 ∧ S.τ (c i1) = c j1hij2:i2 ≠ j2 ∧ S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)p:Pure S c⊢ contrPCoeff i1 j1 hij1 p * contrPCoeff (i1.succSuccAbove j1 i2) (i1.succSuccAbove j1 j2) ⋯ p =
contrPCoeff (i1.succSuccAbove j1 i2) (i1.succSuccAbove j1 j2) ⋯ p * contrPCoeff i1 j1 ⋯ p
rw [mul_comm k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1 + 1 + 1) → Ci1:Fin (n + 1 + 1 + 1 + 1)j1:Fin (n + 1 + 1 + 1 + 1)i2:Fin (n + 1 + 1)j2:Fin (n + 1 + 1)hij1:i1 ≠ j1 ∧ S.τ (c i1) = c j1hij2:i2 ≠ j2 ∧ S.τ (c (i1.succSuccAbove j1 i2)) = c (i1.succSuccAbove j1 j2)p:Pure S c⊢ contrPCoeff (i1.succSuccAbove j1 i2) (i1.succSuccAbove j1 j2) ⋯ p * contrPCoeff i1 j1 hij1 p =
contrPCoeff (i1.succSuccAbove j1 i2) (i1.succSuccAbove j1 j2) ⋯ p * contrPCoeff i1 j1 ⋯ p All goals completed! 🐙] All goals completed! 🐙
@[simp]
lemma contrPCoeff_invariant {n : ℕ} {c : Fin n → C} {i j : Fin n}
{hij : i ≠ j ∧ S.τ (c i) = c j} {p : Pure S c}
(g : G) : (g • p).contrPCoeff i j hij = p.contrPCoeff i j hij := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cg:G⊢ contrPCoeff i j hij (g • p) = contrPCoeff i j hij p
simp only [contrPCoeff, actionP_eq, Pure.rep_cast] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cg:G⊢ (S.contr (c i)) (((rep (c i)) g) (p i) ⊗ₜ[k] ((rep (S.τ (c i))) g) ((LinearEquiv.cast ⋯) (p j))) =
(S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast ⋯) (p j))
generalize_proofs h1 h2 k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = S.τ (c i)⊢ (S.contr (c i)) (((rep (c i)) g) (p i) ⊗ₜ[k] ((rep (S.τ (c i))) g) ((LinearEquiv.cast h2) (p j))) =
(S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast h2) (p j))
generalize p j = pj at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = S.τ (c i)pj:V (c j)⊢ (S.contr (c i)) (((rep (c i)) g) (p i) ⊗ₜ[k] ((rep (S.τ (c i))) g) ((LinearEquiv.cast h2) pj)) =
(S.contr (c i)) (p i ⊗ₜ[k] (LinearEquiv.cast h2) pj)
generalize p i = pi at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin nhij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)h2:c j = S.τ (c i)pj:V (c j)pi:V (c i)⊢ (S.contr (c i)) (((rep (c i)) g) pi ⊗ₜ[k] ((rep (S.τ (c i))) g) ((LinearEquiv.cast h2) pj)) =
(S.contr (c i)) (pi ⊗ₜ[k] (LinearEquiv.cast h2) pj)
generalize c i = ci at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)pj:V (c j)ci:Chij:i ≠ j ∧ S.τ ci = c jh2:c j = S.τ cipi:V ci⊢ (S.contr ci) (((rep ci) g) pi ⊗ₜ[k] ((rep (S.τ ci)) g) ((LinearEquiv.cast h2) pj)) =
(S.contr ci) (pi ⊗ₜ[k] (LinearEquiv.cast h2) pj)
generalize (LinearEquiv.cast (R := k) h2) pj = pj' at * k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)pj:V (c j)ci:Chij:i ≠ j ∧ S.τ ci = c jh2:c j = S.τ cipi:V cipj':V (S.τ ci)⊢ (S.contr ci) (((rep ci) g) pi ⊗ₜ[k] ((rep (S.τ ci)) g) pj') = (S.contr ci) (pi ⊗ₜ[k] pj')
trans (S.contr ci) (((rep ci).tprod (rep (S.τ ci))) g (pi ⊗ₜ[k] pj')) k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)pj:V (c j)ci:Chij:i ≠ j ∧ S.τ ci = c jh2:c j = S.τ cipi:V cipj':V (S.τ ci)⊢ (S.contr ci) (((rep ci) g) pi ⊗ₜ[k] ((rep (S.τ ci)) g) pj') =
(S.contr ci) ((((rep ci).tprod (rep (S.τ ci))) g) (pi ⊗ₜ[k] pj'))k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)pj:V (c j)ci:Chij:i ≠ j ∧ S.τ ci = c jh2:c j = S.τ cipi:V cipj':V (S.τ ci)⊢ (S.contr ci) ((((rep ci).tprod (rep (S.τ ci))) g) (pi ⊗ₜ[k] pj')) = (S.contr ci) (pi ⊗ₜ[k] pj')
· k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)pj:V (c j)ci:Chij:i ≠ j ∧ S.τ ci = c jh2:c j = S.τ cipi:V cipj':V (S.τ ci)⊢ (S.contr ci) (((rep ci) g) pi ⊗ₜ[k] ((rep (S.τ ci)) g) pj') =
(S.contr ci) ((((rep ci).tprod (rep (S.τ ci))) g) (pi ⊗ₜ[k] pj')) simp All goals completed! 🐙
rw [(S.contr _).isIntertwining k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)pj:V (c j)ci:Chij:i ≠ j ∧ S.τ ci = c jh2:c j = S.τ cipi:V cipj':V (S.τ ci)⊢ ((Representation.trivial k G k) g) ((S.contr ci) (pi ⊗ₜ[k] pj')) = (S.contr ci) (pi ⊗ₜ[k] pj') k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)pj:V (c j)ci:Chij:i ≠ j ∧ S.τ ci = c jh2:c j = S.τ cipi:V cipj':V (S.τ ci)⊢ ((Representation.trivial k G k) g) ((S.contr ci) (pi ⊗ₜ[k] pj')) = (S.contr ci) (pi ⊗ₜ[k] pj')] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin n → Ci:Fin nj:Fin np:Pure S cg:Gh1:RingHomInvPair (RingHom.id k) (RingHom.id k)pj:V (c j)ci:Chij:i ≠ j ∧ S.τ ci = c jh2:c j = S.τ cipi:V cipj':V (S.τ ci)⊢ ((Representation.trivial k G k) g) ((S.contr ci) (pi ⊗ₜ[k] pj')) = (S.contr ci) (pi ⊗ₜ[k] pj')
simp All goals completed! 🐙Contractions
set_option backward.isDefEq.respectTransparency false in
@[simp]
lemma contrP_update_add {n : ℕ} [inst : DecidableEq (Fin (n + 1 +1))] {c : Fin (n + 1 + 1) → C}
(i j m : Fin (n + 1 + 1)) (hij : i ≠ j ∧ S.τ (c i) = c j)
(p : Pure S c) (x y : V (c m)) :
contrP i j hij (p.update m (x + y)) =
contrP i j hij (p.update m x) + contrP i j hij (p.update m y) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)m:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cx:V (c m)y:V (c m)⊢ contrP i j hij (p.update m (x + y)) = contrP i j hij (p.update m x) + contrP i j hij (p.update m y)
rcases eq_or_exists_succSuccAbove i j hij.1 m with rfl | rfl | ⟨m', rfl⟩ inl k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Cj:Fin (n + 1 + 1)m:Fin (n + 1 + 1)p:Pure S cx:V (c m)y:V (c m)hij:m ≠ j ∧ S.τ (c m) = c j⊢ contrP m j hij (p.update m (x + y)) = contrP m j hij (p.update m x) + contrP m j hij (p.update m y)inr.inl k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)m:Fin (n + 1 + 1)p:Pure S cx:V (c m)y:V (c m)hij:i ≠ m ∧ S.τ (c i) = c m⊢ contrP i m hij (p.update m (x + y)) = contrP i m hij (p.update m x) + contrP i m hij (p.update m y)inr.inr k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cm':Fin nx:V (c (i.succSuccAbove j m'))y:V (c (i.succSuccAbove j m'))⊢ contrP i j hij (p.update (i.succSuccAbove j m') (x + y)) =
contrP i j hij (p.update (i.succSuccAbove j m') x) + contrP i j hij (p.update (i.succSuccAbove j m') y)
· inl k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Cj:Fin (n + 1 + 1)m:Fin (n + 1 + 1)p:Pure S cx:V (c m)y:V (c m)hij:m ≠ j ∧ S.τ (c m) = c j⊢ contrP m j hij (p.update m (x + y)) = contrP m j hij (p.update m x) + contrP m j hij (p.update m y) simp [contrP, add_smul] All goals completed! 🐙
· inr.inl k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)m:Fin (n + 1 + 1)p:Pure S cx:V (c m)y:V (c m)hij:i ≠ m ∧ S.τ (c i) = c m⊢ contrP i m hij (p.update m (x + y)) = contrP i m hij (p.update m x) + contrP i m hij (p.update m y) simp [contrP, add_smul] All goals completed! 🐙
· inr.inr k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cm':Fin nx:V (c (i.succSuccAbove j m'))y:V (c (i.succSuccAbove j m'))⊢ contrP i j hij (p.update (i.succSuccAbove j m') (x + y)) =
contrP i j hij (p.update (i.succSuccAbove j m') x) + contrP i j hij (p.update (i.succSuccAbove j m') y) simp [contrP] All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in
@[simp]
lemma contrP_update_smul {n : ℕ} [inst : DecidableEq (Fin (n + 1 +1))] {c : Fin (n + 1 + 1) → C}
(i j m : Fin (n + 1 + 1)) (hij : i ≠ j ∧ S.τ (c i) = c j)
(p : Pure S c) (r : k) (x : V (c m)) :
contrP i j hij (p.update m (r • x)) =
r • contrP i j hij (p.update m x) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)m:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:kx:V (c m)⊢ contrP i j hij (p.update m (r • x)) = r • contrP i j hij (p.update m x)
rcases eq_or_exists_succSuccAbove i j hij.1 m with rfl | rfl | ⟨m', rfl⟩ inl k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Cj:Fin (n + 1 + 1)m:Fin (n + 1 + 1)p:Pure S cr:kx:V (c m)hij:m ≠ j ∧ S.τ (c m) = c j⊢ contrP m j hij (p.update m (r • x)) = r • contrP m j hij (p.update m x)inr.inl k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)m:Fin (n + 1 + 1)p:Pure S cr:kx:V (c m)hij:i ≠ m ∧ S.τ (c i) = c m⊢ contrP i m hij (p.update m (r • x)) = r • contrP i m hij (p.update m x)inr.inr k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:km':Fin nx:V (c (i.succSuccAbove j m'))⊢ contrP i j hij (p.update (i.succSuccAbove j m') (r • x)) = r • contrP i j hij (p.update (i.succSuccAbove j m') x)
· inl k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Cj:Fin (n + 1 + 1)m:Fin (n + 1 + 1)p:Pure S cr:kx:V (c m)hij:m ≠ j ∧ S.τ (c m) = c j⊢ contrP m j hij (p.update m (r • x)) = r • contrP m j hij (p.update m x) simp [contrP, smul_smul] All goals completed! 🐙
· inr.inl k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)m:Fin (n + 1 + 1)p:Pure S cr:kx:V (c m)hij:i ≠ m ∧ S.τ (c i) = c m⊢ contrP i m hij (p.update m (r • x)) = r • contrP i m hij (p.update m x) simp [contrP, smul_smul] All goals completed! 🐙
· inr.inr k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕinst:DecidableEq (Fin (n + 1 + 1))c:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cr:km':Fin nx:V (c (i.succSuccAbove j m'))⊢ contrP i j hij (p.update (i.succSuccAbove j m') (r • x)) = r • contrP i j hij (p.update (i.succSuccAbove j m') x) simp [contrP, smul_smul, mul_comm] All goals completed! 🐙@[simp]
lemma contrP_equivariant {n : ℕ} {c : Fin (n + 1 + 1) → C}
(i j : Fin (n + 1 + 1)) (hij : i ≠ j ∧ S.τ (c i) = c j) (p : Pure S c) (g : G) :
contrP i j hij (g • p) = g • contrP i j hij p := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S cg:G⊢ contrP i j hij (g • p) = g • contrP i j hij p
simp [contrP, contrPCoeff_invariant, dropPair_equivariant, actionT_pure] All goals completed! 🐙
lemma contrP_symm {n : ℕ} {c : Fin (n + 1 + 1) → C}
{i j : Fin (n + 1 + 1)} {hij : i ≠ j ∧ S.τ (c i) = c j} {p : Pure S c} :
contrP i j hij p = permT id (by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ IsReindexing (c ∘ j.succSuccAbove i) (c ∘ i.succSuccAbove j) id simp All goals completed! 🐙)
(contrP j i ⟨hij.1.symm, by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ S.τ (c j) = c i simp [← hij.2] All goals completed! 🐙⟩ p) := by k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ contrP i j hij p = (permT id ⋯) (contrP j i ⋯ p)
rw [contrP, k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ contrPCoeff i j hij p • (dropPair i j ⋯ p).toTensor = (permT id ⋯) (contrP j i ⋯ p) k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ contrPCoeff j i ⋯ p • (permP id ⋯ (dropPair j i ⋯ p)).toTensor = (permT id ⋯) (contrP j i ⋯ p) contrPCoeff_symm, k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ contrPCoeff j i ⋯ p • (dropPair i j ⋯ p).toTensor = (permT id ⋯) (contrP j i ⋯ p) k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ contrPCoeff j i ⋯ p • (permP id ⋯ (dropPair j i ⋯ p)).toTensor = (permT id ⋯) (contrP j i ⋯ p) dropPair_symm k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ contrPCoeff j i ⋯ p • (permP id ⋯ (dropPair j i ⋯ p)).toTensor = (permT id ⋯) (contrP j i ⋯ p) k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ contrPCoeff j i ⋯ p • (permP id ⋯ (dropPair j i ⋯ p)).toTensor = (permT id ⋯) (contrP j i ⋯ p)] k:Typeinst✝⁵:CommRing kC:TypeG:Typeinst✝⁴:Group GV:C → Typeinst✝³:(c : C) → AddCommGroup (V c)inst✝²:(c : C) → Module k (V c)basisIdx:C → Typeinst✝¹:(c : C) → Fintype (basisIdx c)inst✝:(c : C) → DecidableEq (basisIdx c)rep:(c : C) → Representation k G (V c)b:(c : C) → Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn:ℕc:Fin (n + 1 + 1) → Ci:Fin (n + 1 + 1)j:Fin (n + 1 + 1)hij:i ≠ j ∧ S.τ (c i) = c jp:Pure S c⊢ contrPCoeff j i ⋯ p • (permP id ⋯ (dropPair j i ⋯ p)).toTensor = (permT id ⋯) (contrP j i ⋯ p)
simp [contrP, permT_pure] All goals completed! 🐙