feat: Update perm_contr two FIn 2

This commit is contained in:
jstoobysmith 2024-10-18 10:24:49 +00:00
parent 7358807980
commit d2d75e4d36
3 changed files with 61 additions and 12 deletions

View file

@ -212,6 +212,7 @@ def finExtractTwo {n : } (i : Fin n.succ.succ) (j : Fin n.succ) :
(Equiv.sumCongr (Equiv.refl (Fin 1)) (finExtractOne j)).trans <|
(Equiv.sumAssoc (Fin 1) (Fin 1) (Fin n)).symm
@[simp]
lemma finExtractTwo_apply_fst {n : } (i : Fin n.succ.succ) (j : Fin n.succ) :
finExtractTwo i j i = Sum.inl (Sum.inl 0) := by
@ -242,4 +243,10 @@ lemma finExtractTwo_symm_inl_inl_apply {n : } (i : Fin n.succ.succ) (j : Fin
rw [finExtractTwo]
simp
@[simp]
lemma finExtractTwo_apply_snd {n : } (i : Fin n.succ.succ) (j : Fin n.succ) :
finExtractTwo i j (i.succAbove j) = Sum.inl (Sum.inr 0) := by
rw [← Equiv.eq_symm_apply]
simp
end HepLean.Fin

View file

@ -98,22 +98,25 @@ lemma extractOne_homToEquiv {n : } (i : Fin n.succ.succ)
Hom.toEquiv (extractOne i σ) = (finExtractOnePerm ((Hom.toEquiv σ).symm i) (Hom.toEquiv σ)) := by
rfl
def extractTwo {n : } (i : Fin n.succ.succ.succ) (j : Fin n.succ.succ)
{c1 c2 : Fin n.succ.succ.succ → C} (σ : mk c1 ⟶ mk c2) :
def extractTwo {n : } (i : Fin n.succ.succ) (j : Fin n.succ)
{c1 c2 : Fin n.succ.succ → C} (σ : mk c1 ⟶ mk c2) :
mk (c1 ∘ Fin.succAbove ((Hom.toEquiv σ).symm i) ∘
Fin.succAbove (((Hom.toEquiv (extractOne i σ))).symm j)) ⟶
mk (c2 ∘ Fin.succAbove i ∘ Fin.succAbove j) :=
equivToHomEq (Equiv.refl _) (by simp) ≫ extractOne j (extractOne i σ) ≫
equivToHomEq (Equiv.refl _) (by simp)
match n with
| 0 => equivToHomEq (Equiv.refl _) (by simp)
| Nat.succ n =>
equivToHomEq (Equiv.refl _) (by simp) ≫ extractOne j (extractOne i σ) ≫
equivToHomEq (Equiv.refl _) (by simp)
def extractTwoAux {n : } (i : Fin n.succ.succ.succ) (j : Fin n.succ.succ)
{c c1 : Fin n.succ.succ.succ → C} (σ : mk c ⟶ mk c1) :
def extractTwoAux {n : } (i : Fin n.succ.succ) (j : Fin n.succ)
{c c1 : Fin n.succ.succ → C} (σ : mk c ⟶ mk c1) :
mk ((c ∘ ⇑(finExtractTwo ((Hom.toEquiv σ).symm i) ((Hom.toEquiv (extractOne i σ)).symm j)).symm) ∘ Sum.inr) ⟶
mk ((c1 ∘ ⇑(finExtractTwo i j).symm) ∘ Sum.inr) :=
equivToHomEq (Equiv.refl _) (by simp) ≫ extractTwo i j σ ≫ equivToHomEq (Equiv.refl _) (by simp)
def extractTwoAux' {n : } (i : Fin n.succ.succ.succ) (j : Fin n.succ.succ)
{c c1 : Fin n.succ.succ.succ → C} (σ : mk c ⟶ mk c1) :
def extractTwoAux' {n : } (i : Fin n.succ.succ) (j : Fin n.succ)
{c c1 : Fin n.succ.succ → C} (σ : mk c ⟶ mk c1) :
mk ((c ∘ ⇑(finExtractTwo ((Hom.toEquiv σ).symm i) ((Hom.toEquiv (extractOne i σ)).symm j)).symm) ∘ Sum.inl) ⟶
mk ((c1 ∘ ⇑(finExtractTwo i j).symm) ∘ Sum.inl) :=
equivToHomEq (Equiv.refl _) (by
@ -138,7 +141,7 @@ def extractTwoAux' {n : } (i : Fin n.succ.succ.succ) (j : Fin n.succ.succ)
erw [Equiv.apply_eq_iff_eq]
exact (Fin.succAbove_ne i j).symm)
lemma extractTwo_finExtractTwo {n : } (i : Fin n.succ.succ.succ) (j : Fin n.succ.succ)
lemma extractTwo_finExtractTwo_succ {n : } (i : Fin n.succ.succ.succ) (j : Fin n.succ.succ)
{c c1 : Fin n.succ.succ.succ → C} (σ : mk c ⟶ mk c1) :
σ ≫ (equivToIso (HepLean.Fin.finExtractTwo i j)).hom ≫ (mkSum (c1 ∘ ⇑(HepLean.Fin.finExtractTwo i j).symm)).hom =
(equivToIso (HepLean.Fin.finExtractTwo ((Hom.toEquiv σ).symm i) (((Hom.toEquiv (extractOne i σ))).symm j))).hom
@ -218,6 +221,45 @@ lemma extractTwo_finExtractTwo {n : } (i : Fin n.succ.succ.succ) (j : Fin n.
(predAboveI ((Hom.toEquiv σ).symm i) ((Hom.toEquiv σ).symm (i.succAbove j))) x hn'
exact hy
lemma extractTwo_finExtractTwo {n : } (i : Fin n.succ.succ) (j : Fin n.succ)
{c c1 : Fin n.succ.succ → C} (σ : mk c ⟶ mk c1) :
σ ≫ (equivToIso (HepLean.Fin.finExtractTwo i j)).hom ≫ (mkSum (c1 ∘ ⇑(HepLean.Fin.finExtractTwo i j).symm)).hom =
(equivToIso (HepLean.Fin.finExtractTwo ((Hom.toEquiv σ).symm i) (((Hom.toEquiv (extractOne i σ))).symm j))).hom
≫ (mkSum (c ∘ ⇑(HepLean.Fin.finExtractTwo ((Hom.toEquiv σ).symm i) (((Hom.toEquiv (extractOne i σ))).symm j)).symm)).hom
≫ ((extractTwoAux' i j σ) ⊗ (extractTwoAux i j σ)) := by
match n with
| 0 =>
apply IndexNotation.OverColor.Hom.ext
ext x
simp [CategoryStruct.comp,extractTwoAux', extractTwoAux, mkSum,equivToIso, Hom.toIso]
change ((finExtractTwo i j) (σ.hom.left x)) = Sum.map (Equiv.refl _) (Equiv.refl _) _
simp
change (finExtractTwo i j) ((Hom.toEquiv σ) x) = ((finExtractTwo ((Hom.toEquiv σ).symm i)
((finExtractOnePerm ((Hom.toEquiv σ).symm i) (Hom.toEquiv σ)).symm j)) x)
obtain ⟨k, hk⟩ := (Hom.toEquiv σ).symm.surjective x
subst hk
simp
have hk : k = i k = i.succAbove j := by
match i, j, k with
| (0 : Fin 2), (0 : Fin 1), (0 : Fin 2) => exact Or.intro_left (0 = Fin.succAbove 0 0) rfl
| (0 : Fin 2), (0 : Fin 1), (1 : Fin 2) => exact Or.inr rfl
| (1 : Fin 2), (0 : Fin 1), (0 : Fin 2) => exact Or.inr rfl
| (1 : Fin 2), (0 : Fin 1), (1 : Fin 2) => exact Or.intro_left (1 = Fin.succAbove 1 0) rfl
rcases hk with hk | hk
subst hk
simp
subst hk
simp
rw [← Equiv.symm_apply_eq]
simp [finExtractOnePerm, finExtractOnPermHom]
erw [Equiv.apply_symm_apply]
rw [succsAbove_predAboveI]
rfl
simp
erw [Equiv.apply_eq_iff_eq]
exact (Fin.succAbove_ne i j).symm
| Nat.succ n => exact extractTwo_finExtractTwo_succ i j σ
/-- The isomorphism between a `Fin 1 ⊕ Fin 1 → C` satisfying the condition
`c (Sum.inr 0) = τ (c (Sum.inl 0))`
and an object in the image of `contrPair`. -/

View file

@ -381,6 +381,7 @@ def contrMap {n : } (c : Fin n.succ.succ → S.C)
(tensorHom (S.contr.app (Discrete.mk (c i))) (𝟙 _)) ≫
(MonoidalCategory.leftUnitor _).hom
/-- Contraction commutes with `S.F.map σ` on removing corresponding indices from `σ`. -/
lemma contrMap_naturality {n : } {c c1 : Fin n.succ.succ.succ → S.C}
{i : Fin n.succ.succ.succ} {j : Fin n.succ.succ} {h : c1 (i.succAbove j) = S.τ (c1 i)}
(σ : (OverColor.mk c) ⟶ (OverColor.mk c1)) :
@ -413,9 +414,6 @@ lemma contrMap_naturality {n : } {c c1 : Fin n.succ.succ.succ → S.C}
simp only [Nat.succ_eq_add_one, extractOne_homToEquiv, Monoidal.tensorUnit_obj,
Monoidal.tensorUnit_map, Category.comp_id]
end TensorStruct
/-- A syntax tree for tensor expressions. -/
@ -622,6 +620,8 @@ lemma neg_perm {n m : } {c : Fin n → S.C} {c1 : Fin m → S.C}
open OverColor
/-- Permuting indices, and then contracting is equivalent to contracting and then permuting,
once care is taking about ensuring one is contracting the same idices. -/
lemma perm_contr {n : } {c : Fin n.succ.succ.succ → S.C} {c1 : Fin n.succ.succ.succ → S.C}
{i : Fin n.succ.succ.succ} {j : Fin n.succ.succ}
{h : c1 (i.succAbove j) = S.τ (c1 i)} (t : TensorTree S c)