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.ComponentIdx.Basic

Products of component indices

i. Overview

This file contains the component-index API induced by appending two lists of tensor colors.

The main construction identifies component indices for appended color lists with pairs of component indices for each side of the append.

ii. Key results

    TensorSpecies.Tensor.ComponentIdx.prod is the equivalence between ComponentIdx (Fin.append c c1) and ComponentIdx c × ComponentIdx c1.

iii. Table of contents

    A. Product equivalence

iv. References

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

@[expose] public section

A. Product equivalence

The equivalence between ComponentIdx (Fin.append c c1) and ComponentIdx c × ComponentIdx c1 formed by products.

unsolved goals k C G:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1 n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx c × ComponentIdx c1(fun i => (basisIdxCongr ) (?m.94 i), fun i => (basisIdxCongr ) (?m.95 i)) = punsolved goals k C G:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1 n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx c × ComponentIdx c1(fun i => (basisIdxCongr ) (?m.94 i), fun i => (basisIdxCongr ) (?m.95 i)) = punsolved goals k C G:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1 n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)(∀ (i : Fin n1), ?m.96 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) i = p (Fin.castAdd n2 i)) (j : Fin n2), ?m.97 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) j = p (Fin.natAdd n1 j)unsolved goals k C G:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1 n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)(∀ (i : Fin n1), ?m.96 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) i = p (Fin.castAdd n2 i)) (j : Fin n2), ?m.97 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) j = p (Fin.natAdd n1 j)unsolved goals k C G:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1 n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)(∀ (i : Fin n1), ?m.96 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) i = p (Fin.castAdd n2 i)) (j : Fin n2), ?m.97 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) j = p (Fin.natAdd n1 j)unsolved goals k C G:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1 n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)(∀ (i : Fin n1), ?m.96 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) i = p (Fin.castAdd n2 i)) (j : Fin n2), ?m.97 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) j = p (Fin.natAdd n1 j) def ComponentIdx.prod {n1 n2 : } {c : Fin n1 C} {c1 : Fin n2 C} : ComponentIdx (S := S) (Fin.append c c1) ComponentIdx (S := S) c × ComponentIdx (S := S) c1 where toFun p := (fun i => basisIdxCongr (k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)i:Fin n1Fin.append c c1 (Fin.castAdd n2 i) = c i All goals completed! 🐙) (p (Fin.castAdd n2 i)), fun i => basisIdxCongr (k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)i:Fin n2Fin.append c c1 (Fin.natAdd n1 i) = c1 i All goals completed! 🐙) (p (Fin.natAdd n1 i))) invFun p := Fin.addCases (fun i => basisIdxCongr (k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx c × ComponentIdx c1i:Fin n1c i = Fin.append c c1 (Fin.castAdd n2 i) All goals completed! 🐙) (p.1 i)) (fun i => basisIdxCongr (k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx c × ComponentIdx c1i:Fin n2c1 i = Fin.append c c1 (Fin.natAdd n1 i) All goals completed! 🐙) (p.2 i)) left_inv p := unsolved goals k C G:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1 n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)(∀ (i : Fin n1), ?m.96 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) i = p (Fin.castAdd n2 i)) (j : Fin n2), ?m.97 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) j = p (Fin.natAdd n1 j)k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)(fun p i => Fin.addCases ?m.94 ?m.95 i) ((fun p => (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i)))) p) = p k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)i:Fin (n1 + n2)(fun p i => Fin.addCases ?m.94 ?m.95 i) ((fun p => (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i)))) p) i = p i k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1) (i : Fin (n1 + n2)), (fun p i => Fin.addCases ?m.94 ?m.95 i) ((fun p => (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i)))) p) i = p i k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx (Fin.append c c1)(∀ (i : Fin n1), ?m.96 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) i = p (Fin.castAdd n2 i)) (j : Fin n2), ?m.97 (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i))) j = p (Fin.natAdd n1 j) right_inv p := unsolved goals k C G:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1 n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx c × ComponentIdx c1(fun i => (basisIdxCongr ) (?m.94 i), fun i => (basisIdxCongr ) (?m.95 i)) = pk:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx c × ComponentIdx c1(fun p => (fun i => (basisIdxCongr ) (p (Fin.castAdd n2 i)), fun i => (basisIdxCongr ) (p (Fin.natAdd n1 i)))) ((fun p i => Fin.addCases ?m.94 ?m.95 i) p) = p k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx c × ComponentIdx c1(fun i => (basisIdxCongr ) (?m.94 i), fun i => (basisIdxCongr ) (?m.95 i)) = p
@[simp] lemma ComponentIdx.prod_symm_natAdd {n1 n2 : } {c : Fin n1 C} {c1 : Fin n2 C} (p : ComponentIdx (S := S) c) (q : ComponentIdx (S := S) c1) (i : Fin n2) : ComponentIdx.prod.symm (p, q) (Fin.natAdd n1 i) = basisIdxCongr (k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx cq:ComponentIdx c1i:Fin n2c1 i = Fin.append c c1 (Fin.natAdd n1 i) All goals completed! 🐙) (q i) := k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx cq:ComponentIdx c1i:Fin n2prod.symm (p, q) (Fin.natAdd n1 i) = (basisIdxCongr ) (q i) All goals completed! 🐙@[simp] lemma ComponentIdx.prod_symm_castAdd {n1 n2 : } {c : Fin n1 C} {c1 : Fin n2 C} (p : ComponentIdx (S := S) c) (q : ComponentIdx (S := S) c1) (i : Fin n1) : ComponentIdx.prod.symm (p, q) (Fin.castAdd n2 i) = basisIdxCongr (k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx cq:ComponentIdx c1i:Fin n1c i = Fin.append c c1 (Fin.castAdd n2 i) All goals completed! 🐙) (p i) := k:TypeC:TypeG:Typeinst✝⁵:CommRing kinst✝⁴:Group GV:C Typeinst✝³:(c : C) AddCommGroup (V c)inst✝²:(c : C) Module k (V c)basisIdx:C Typeinst✝¹:(c : C) Fintype (basisIdx c)inst✝:(c : C) DecidableEq (basisIdx c)rep:(c : C) Representation k G (V c)b:(c : C) Module.Basis (basisIdx c) k (V c)S:TensorSpecies k C G V basisIdx rep bn1:n2:c:Fin n1 Cc1:Fin n2 Cp:ComponentIdx cq:ComponentIdx c1i:Fin n1prod.symm (p, q) (Fin.castAdd n2 i) = (basisIdxCongr ) (p i) All goals completed! 🐙