The unit tensor is the identity for slot contraction: contracting any slot of t against
unitTensor for that slot's color returns t, the slot relabelled to the survivor tail. That is
what collapses "raise then lower" to the identity, a metric contracted against its dual becoming
the unit tensor and then contracting away.
crossToEnd_unitTensor is proved by decomposing t along its last slot (eq_sum_evalT) and
transporting to an arbitrary slot with the transposition swap i (last). On it the round trip
against a matched pair is assembled in both conventions, and a pair collapsing in both orders
makes the two contractions mutually inverse, which crossToSlotEquiv bundles as a linear
equivalence between the two color assignments.
Since unitTensor is RCLike-valued, this material sits over an [RCLike k] variable block, apart
from the CommRingcrossToEnd/crossToSlot algebra.
ii. Key results
TensorSpecies.Tensor.crossToEnd_unitTensor : the unit tensor is an identity for crossToEnd
at any named slot.
TensorSpecies.Tensor.crossToEnd_round_trip_of_unit_slot : two contractions against a pair that
collapses to the unit tensor return the original tensor, in result-to-end form.
TensorSpecies.Tensor.crossToSlot_raise_lower_round_trip : the round trip in result-to-slot
form, every color propositional.
TensorSpecies.Tensor.crossToSlotEquiv : raising and lowering a named index against a pair that
collapses in both orders, as a linear equivalence.
Contracting a named slot against unitTensor returns the tensor unchanged, the slot carried to the
survivor tail by move_last.
Cross-contracting the last slot of the product E ⊗ B (with B rank one) against the unit
tensor for that slot's color returns E ⊗ B unchanged, the contracted slot carried to the end.
The rank-one spectator case that seeds crossToEnd_unitTensor_slot.
The boundary case of crossToEnd_unitTensor, proved by spectator decomposition along the last
slot (eq_sum_evalT). The last slot is threaded as a variable i with hilast : i = last nA so
that crossToEnd_unitTensor can apply it at the image of i under its transposition without a
dependent rewrite of the slot index.
Contracting slot i of t1 against the unit tensor for that slot's color returns t1, the
contracted slot relabelled by move_last i. The unit tensor acts as an identity for crossToEnd
at any named slot.
When two rank-2 tensors collapse to the unit tensor after their shared index is contracted,
contracting a slot first against one and then against the other returns the original tensor.
The color list crossToEnd produces from a matched rank-2 pair M : ![a, d], M' : ![b, e] is
the color list ![S.τ e, e] of unitTensor e, via the identity slot map: the reindexing carried
by the collapse hypothesis M · M' = δ of the round trips below. Only the surviving colors a
and e enter, and a equals S.τ e only propositionally, so a pair whose colors match
propositionally enters with no transport.
Round trip of two contractions against a matched pair, in result-to-end form. Contracting slot
i of t against M₁, then contracting the surviving M₁-index (deposited at slot j) against
M₂, returns t up to the cycle that moves the round-tripped slot from the end back to i,
whenever M₁ and M₂ collapse to the unit tensor. The last slot is threaded as a variable j
with hj : j = last nA so that a caller can apply it at a propositionally-last slot without a
dependent rewrite of the slot index.
Round trip for crossToSlot at an arbitrary slot, with the colors in their composite form.
The general-color statement crossToSlot_raise_lower_round_trip is obtained from this by
substituting its three color equalities.
privatelemmacrossToSlot_round_trip_of_unit{nA:ℕ}{c:Fin(nA+1)→C}{d:C}(i:Fin(nA+1))(M₁:TensorS![S.τ(ci),d])(M₂:TensorS![S.τd,ci])(hM:crossToEnd(Fin.last1)(0:Fin2)rflM₁M₂=permT(id:Fin2→Fin2)(IsReindexing.unitTensor_pairrfl)(unitTensor(S:=S)(ci)))(t:TensorSc):crossToSlot(S:=S)i(0:Fin2)(byk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorc⊢ S.τ(Function.updatecidi)=S.τdrw[Function.update_selfk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorc⊢ S.τd=S.τdAll goals completed! 🐙]All goals completed! 🐙:S.τ(Function.updatecidi)=S.τd)M₂(crossToSlot(S:=S)i(0:Fin2)rflM₁t)=permT(id:Fin(nA+1)→Fin(nA+1))(IsReindexing.update_update_of_eqirfl)t:=byk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorc⊢ (crossToSloti0⋯M₂)((crossToSloti0⋯M₁)t)=(permTid⋯)thavehcycle:(⇑(Fin.cycleIcci(Fin.lastnA)).symm)i=Fin.lastnA:=(Equiv.symm_apply_eq_).2(Fin.cycleIcc_of_last(Fin.le_lasti)).symmk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnA⊢ (crossToSloti0⋯M₂)((crossToSloti0⋯M₁)t)=(permTid⋯)t-- The inverse cycle carries a reinserted survivor `i.succAbove a` back to its position `a` in-- the survivor block.havehcycle_succAbove:∀a:FinnA,(Fin.cycleIcci(Fin.lastnA)).symm(i.succAbovea)=Fin.castAdd1a:=funa=>(Equiv.symm_apply_eq_).2(byk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAa:FinnA⊢ i.succAbovea=(i.cycleIcc(Fin.lastnA))(Fin.castAdd1a)k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (crossToSloti0⋯M₂)((crossToSloti0⋯M₁)t)=(permTid⋯)trw[←Fin.append_succAbove_const_eq_cycleIcci,k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAa:FinnA⊢ i.succAbovea=Fin.appendi.succAbove(funx=>i)(Fin.castAdd1a)All goals completed! 🐙k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (crossToSloti0⋯M₂)((crossToSloti0⋯M₁)t)=(permTid⋯)tFin.append_leftk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAa:FinnA⊢ i.succAbovea=i.succAboveaAll goals completed! 🐙k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (crossToSloti0⋯M₂)((crossToSloti0⋯M₁)t)=(permTid⋯)t]All goals completed! 🐙k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (crossToSloti0⋯M₂)((crossToSloti0⋯M₁)t)=(permTid⋯)t)k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (crossToSloti0⋯M₂)((crossToSloti0⋯M₁)t)=(permTid⋯)trw[crossToSlot_eq_crossToEnd,k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((crossToSloti0⋯M₁)t))M₂)=(permTid⋯)tk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)tcrossToSlot_eq_crossToEndk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)tk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)t]k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)t-- `crossToSlot`'s output color reduces to the clean one only at default transparency, so `rw`-- cannot key on the composite. Precompute the left commutator and `erw` it instead.havehpl:=crossToEnd_permT_lefti(0:Fin2)⇑(Fin.cycleIcci(Fin.lastnA)).symmid(IsReindexing.crossToSlot_cyclei(0:Fin2))(byk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ ((Equiv.symm(i.cycleIcc(Fin.lastnA)))i).succAbove∘id=⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))∘i.succAbovek:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)tfunextak:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1aa:FinnA⊢ (((Equiv.symm(i.cycleIcc(Fin.lastnA)))i).succAbove∘id)a=(⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))∘i.succAbove)ak:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)tsimponly[Function.comp_apply,id_eq]k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1aa:FinnA⊢ ((Equiv.symm(i.cycleIcc(Fin.lastnA)))i).succAbovea=(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)trw[hcycle,k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1aa:FinnA⊢ (Fin.lastnA).succAbovea=(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1aa:FinnA⊢ a.castSucc=Fin.castAdd1ak:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)thcycle_succAbove,k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1aa:FinnA⊢ (Fin.lastnA).succAbovea=Fin.castAdd1ak:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1aa:FinnA⊢ a.castSucc=Fin.castAdd1ak:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)tFin.succAbove_lastk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1aa:FinnA⊢ a.castSucc=Fin.castAdd1ak:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1aa:FinnA⊢ a.castSucc=Fin.castAdd1ak:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)t]k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1aa:FinnA⊢ a.castSucc=Fin.castAdd1ak:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)trflAll goals completed! 🐙k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)t)(showS.τ(Function.updatecidi)=![S.τd,ci]0byk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorc⊢ (crossToSloti0⋯M₂)((crossToSloti0⋯M₁)t)=(permTid⋯)tk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)trw[Function.update_self,k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ S.τd=![S.τd,ci]0All goals completed! 🐙k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)tMatrix.cons_val_zerok:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1a⊢ S.τd=S.τdAll goals completed! 🐙k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)t]All goals completed! 🐙k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)t)(crossToEndi(0:Fin2)rfltM₁)M₂k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂)=(permTid⋯)terw[hplk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)((permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂))=(permTid⋯)t]k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)((permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂))=(permTid⋯)terw[permT_permTk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)=(permTid⋯)t]k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)=(permTid⋯)trw[crossToEnd_round_trip_of_unit_sloti((⇑(Fin.cycleIcci(Fin.lastnA)).symm)i)hcycleM₁M₂hMt,k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))⋯)((permT(Fin.appendi.succAbovefunx=>i)⋯)t)=(permTid⋯)tk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT((Fin.appendi.succAbovefunx=>i)∘Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))⋯)t=(permTid⋯)tpermT_permTk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT((Fin.appendi.succAbovefunx=>i)∘Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))⋯)t=(permTid⋯)tk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT((Fin.appendi.succAbovefunx=>i)∘Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))⋯)t=(permTid⋯)t]k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (permT((Fin.appendi.succAbovefunx=>i)∘Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))⋯)t=(permTid⋯)tapplypermT_congrhmapk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (Fin.appendi.succAbovefunx=>i)∘Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))=idhtensork:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ t=t·hmapk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ (Fin.appendi.succAbovefunx=>i)∘Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))=idfunextxhmapk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)x:Fin(nA+1)⊢ ((Fin.appendi.succAbovefunx=>i)∘Fin.append(Fin.castAdd1∘id)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))x=idxsimponly[Function.comp_id]hmapk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)x:Fin(nA+1)⊢ ((Fin.appendi.succAbovefunx=>i)∘Fin.append(Fin.castAdd1)(Fin.natAddnA)∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))x=idxrw[Fin.append_castAdd_natAdd_eq_idhmapk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)x:Fin(nA+1)⊢ ((Fin.appendi.succAbovefunx=>i)∘id∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))x=idxhmapk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)x:Fin(nA+1)⊢ ((Fin.appendi.succAbovefunx=>i)∘id∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))x=idx]hmapk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)x:Fin(nA+1)⊢ ((Fin.appendi.succAbovefunx=>i)∘id∘⇑(Equiv.symm(i.cycleIcc(Fin.lastnA))))x=idxsimp[Function.comp_apply,Fin.append_succAbove_const_eq_cycleIcc]All goals completed! 🐙·htensork:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepbnA:ℕc:Fin(nA+1)→Cd:Ci:Fin(nA+1)M₁:S.Tensor![S.τ(ci),d]M₂:S.Tensor![S.τd,ci]hM:((crossToEnd(Fin.last1)0⋯)M₁)M₂=(permTid⋯)(unitTensor(ci))t:S.Tensorchcycle:(Equiv.symm(i.cycleIcc(Fin.lastnA)))i=Fin.lastnAhcycle_succAbove:∀(a:FinnA),(Equiv.symm(i.cycleIcc(Fin.lastnA)))(i.succAbovea)=Fin.castAdd1ahpl:((crossToEndi0⋯)((permT⇑(Equiv.symm(i.cycleIcc(Fin.lastnA)))⋯)(((crossToEndi0⋯)t)M₁)))M₂=(permT(Fin.append(Fin.castAdd1∘id)(Fin.natAddnA))⋯)(((crossToEnd((Equiv.symm(i.cycleIcc(Fin.lastnA)))i)0⋯)(((crossToEndi0⋯)t)M₁))M₂)⊢ t=trflAll goals completed! 🐙
Raising then lowering a named index, with every color threaded propositionally. For a rank-2
metric M : ![a, d] and an inverse M' : ![b, e] collapsing to the unit tensor (M · M' = δ),
at any rank and any slot i: contracting slot i with M, then contracting the result with
M', is the identity up to the Function.update color reindex.
No color is pinned to a composite. ha : τ (c i) = a places the metric's contracted slot,
hb : τ d = b the inverse's, and he : c i = e the surviving one, so a caller whose metric and
inverse sit at literal colors supplies them directly, with no transporting permT on either
factor. Lowering then raising is this same statement with M and M' exchanged and the reversed
collapse M' · M = δ; neither collapse follows from the other here.
Both collapse orders are hypotheses here and each is used once: M · M' = δ gives one round trip
by section B, M' · M = δ the other through injectivity of the lowering half.
Lowering undoes raising: crossToSlot_raise_lower_round_trip with the color cast absorbed into
crossToSlotInv.
includehMM'inlemmacrossToSlotInv_crossToSlot(t:TensorSc):crossToSlotInvihehbM'(crossToSloti(0:Fin2)haMt)=t:=byk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b✝:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepb✝nA:ℕc:Fin(nA+1)→Ca:Cb:Cd:Ce:Ci:Fin(nA+1)he:ci=eha:S.τ(ci)=ahb:S.τd=bM:S.Tensor![a,d]M':S.Tensor![b,e]hMM':((crossToEnd(Fin.last1)0hb)M)M'=(permTid⋯)(unitTensore)t:S.Tensorc⊢ (crossToSlotInvihehbM')((crossToSloti0haM)t)=tsimponly[crossToSlotInv,LinearMap.coe_comp,Function.comp_apply]k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b✝:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepb✝nA:ℕc:Fin(nA+1)→Ca:Cb:Cd:Ce:Ci:Fin(nA+1)he:ci=eha:S.τ(ci)=ahb:S.τd=bM:S.Tensor![a,d]M':S.Tensor![b,e]hMM':((crossToEnd(Fin.last1)0hb)M)M'=(permTid⋯)(unitTensore)t:S.Tensorc⊢ (permTid⋯)((crossToSloti0⋯M')((crossToSloti0haM)t))=t-- Unfolding `crossToSlotInv` leaves the inner slot proof at the clean color `b` where the goal-- wants the composite `![b, e] 0`, so `rw` cannot key on the round trip; `erw` matches.erw[crossToSlot_raise_lower_round_tripihehahbMM'hMM't,k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b✝:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepb✝nA:ℕc:Fin(nA+1)→Ca:Cb:Cd:Ce:Ci:Fin(nA+1)he:ci=eha:S.τ(ci)=ahb:S.τd=bM:S.Tensor![a,d]M':S.Tensor![b,e]hMM':((crossToEnd(Fin.last1)0hb)M)M'=(permTid⋯)(unitTensore)t:S.Tensorc⊢ (permTid⋯)((permTid⋯)t)=tpermT_permTk:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b✝:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepb✝nA:ℕc:Fin(nA+1)→Ca:Cb:Cd:Ce:Ci:Fin(nA+1)he:ci=eha:S.τ(ci)=ahb:S.τd=bM:S.Tensor![a,d]M':S.Tensor![b,e]hMM':((crossToEnd(Fin.last1)0hb)M)M'=(permTid⋯)(unitTensore)t:S.Tensorc⊢ (permT(id∘id)⋯)t=t]k:Typeinst✝⁵:RCLikekC:TypeG:Typeinst✝⁴:GroupGV:C→Typeinst✝³:(c:C)→AddCommGroup(Vc)inst✝²:(c:C)→Modulek(Vc)basisIdx:C→Typeinst✝¹:(c:C)→Fintype(basisIdxc)inst✝:(c:C)→DecidableEq(basisIdxc)rep:(c:C)→RepresentationkG(Vc)b✝:(c:C)→Module.Basis(basisIdxc)k(Vc)S:TensorSpecieskCGVbasisIdxrepb✝nA:ℕc:Fin(nA+1)→Ca:Cb:Cd:Ce:Ci:Fin(nA+1)he:ci=eha:S.τ(ci)=ahb:S.τd=bM:S.Tensor![a,d]M':S.Tensor![b,e]hMM':((crossToEnd(Fin.last1)0hb)M)M'=(permTid⋯)(unitTensore)t:S.Tensorc⊢ (permT(id∘id)⋯)t=texactpermT_congr_eq_id___rflAll goals completed! 🐙
Raising undoes lowering. The reversed collapse M' · M = δ is the round trip at the color
list Function.update c i d with the pair exchanged, which gives the lowering half a left
inverse and hence injectivity; that upgrades crossToSlotInv_crossToSlot to a two-sided
inverse.