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.QFT.PerturbationTheory.WickContraction.SingletonJoin of contractions
@[expose] public section
Given a list φs of 𝓕.FieldOp, a Wick contraction φsΛ of φs and a Wick contraction
φsucΛ of [φsΛ]ᵘᶜ, join φsΛ φsucΛ is defined as the Wick contraction of φs consisting of
the contractions in φsΛ and those in φsucΛ.
As an example, for φs = [φ1, φ2, φ3, φ4],
φsΛ = {{0, 1}} corresponding to the contraction of φ1 and φ2 in φs and
φsucΛ = {{0, 1}}
corresponding to the contraction of φ3 and φ4 in [φsΛ]ᵘᶜ = [φ3, φ4], then
join φsΛ φsucΛ is the contraction {{0, 1}, {2, 3}} of φs.
inr.inr 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha:a ∈ ↑φsucΛb:Finset (Fin [φsΛ]ᵘᶜ.length)hb:b ∈ ↑φsucΛ⊢ a = b ∨ Disjoint a b
exact φsucΛ.2.2 a ha b hb All goals completed! 🐙⟩lemma join_congr {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} {φsΛ' : WickContraction φs.length}
(h1 : φsΛ = φsΛ') :
join φsΛ φsucΛ = join φsΛ' (congr (by 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsΛ':WickContraction φs.lengthh1:φsΛ = φsΛ'⊢ [φsΛ]ᵘᶜ.length = [φsΛ']ᵘᶜ.length simp [h1] All goals completed! 🐙) φsucΛ) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsΛ':WickContraction φs.lengthh1:φsΛ = φsΛ'⊢ φsΛ.join φsucΛ = φsΛ'.join ((congr ⋯) φsucΛ)
subst h1 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ φsΛ.join φsucΛ = φsΛ.join ((congr ⋯) φsucΛ)
rfl All goals completed! 🐙
Given a contracting pair within φsΛ the corresponding contracting pair within
(join φsΛ φsucΛ).
def joinLiftLeft {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} : φsΛ.1 → (join φsΛ φsucΛ).1 :=
fun a => ⟨a, by 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ ↑a ∈ ↑(φsΛ.join φsucΛ) simp [join] All goals completed! 🐙⟩lemma jointLiftLeft_injective {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} :
Function.Injective (@joinLiftLeft _ _ φsΛ φsucΛ) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ Function.Injective joinLiftLeft
intro a b h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsΛh:joinLiftLeft a = joinLiftLeft b⊢ a = b
simp only [joinLiftLeft, Subtype.mk_eq_mk] at h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsΛh:↑a = ↑b⊢ a = b
exact Subtype.ext h All goals completed! 🐙
Given a contracting pair within φsucΛ the corresponding contracting pair within
(join φsΛ φsucΛ).
def joinLiftRight {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} : φsucΛ.1 → (join φsΛ φsucΛ).1 :=
fun a => ⟨a.1.map uncontractedListEmd, by 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ Finset.map uncontractedListEmd ↑a ∈ ↑(φsΛ.join φsucΛ)
simp only [join, Finset.mem_union, Finset.mem_map,
RelEmbedding.coe_toEmbedding] 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ Finset.map uncontractedListEmd ↑a ∈ ↑φsΛ ∨
∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = Finset.map uncontractedListEmd ↑a
right 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ ∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = Finset.map uncontractedListEmd ↑a
use a.1 h 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ ↑a ∈ ↑φsucΛ ∧ (Finset.mapEmbedding uncontractedListEmd) ↑a = Finset.map uncontractedListEmd ↑a
simp only [Finset.coe_mem, true_and] h 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ (Finset.mapEmbedding uncontractedListEmd) ↑a = Finset.map uncontractedListEmd ↑a
rfl All goals completed! 🐙⟩lemma joinLiftRight_injective {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} :
Function.Injective (@joinLiftRight _ _ φsΛ φsucΛ) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ Function.Injective joinLiftRight
intro a b h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛb:↥↑φsucΛh:joinLiftRight a = joinLiftRight b⊢ a = b
simp only [joinLiftRight, Subtype.mk_eq_mk, Finset.map_inj] at h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛb:↥↑φsucΛh:↑a = ↑b⊢ a = b
exact Subtype.ext h All goals completed! 🐙lemma jointLiftLeft_disjoint_joinLiftRight {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} (a : φsΛ.1) (b : φsucΛ.1) :
Disjoint (@joinLiftLeft _ _ _ φsucΛ a).1 (joinLiftRight b).1 :=
(uncontractedListEmd_finset_disjoint_left b.1 a.1 a.2).symm
lemma jointLiftLeft_ne_joinLiftRight {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} (a : φsΛ.1) (b : φsucΛ.1) :
joinLiftLeft a ≠ joinLiftRight b := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛ⊢ joinLiftLeft a ≠ joinLiftRight b
by_contra hn 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight b⊢ False
have h1 := jointLiftLeft_disjoint_joinLiftRight a b 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight bh1:Disjoint ↑(joinLiftLeft a) ↑(joinLiftRight b)⊢ False
rw [hn, 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight bh1:Disjoint ↑(joinLiftRight b) ↑(joinLiftRight b)⊢ False 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight bh1:↑(joinLiftRight b) = ∅⊢ False disjoint_self, 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight bh1:↑(joinLiftRight b) = ⊥⊢ False 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight bh1:↑(joinLiftRight b) = ∅⊢ False Finset.bot_eq_empty 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight bh1:↑(joinLiftRight b) = ∅⊢ False 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight bh1:↑(joinLiftRight b) = ∅⊢ False] at h1 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight bh1:↑(joinLiftRight b) = ∅⊢ False
have hj := (join φsΛ φsucΛ).2.1 (joinLiftRight b).1 (joinLiftRight b).2 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛb:↥↑φsucΛhn:joinLiftLeft a = joinLiftRight bh1:↑(joinLiftRight b) = ∅hj:(↑(joinLiftRight b)).card = 2⊢ False
simp [h1] at hj All goals completed! 🐙
The map from contracted pairs of φsΛ and φsucΛ to contracted pairs in
(join φsΛ φsucΛ).
def joinLift {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} : φsΛ.1 ⊕ φsucΛ.1 → (join φsΛ φsucΛ).1 := fun a =>
match a with
| Sum.inl a => joinLiftLeft a
| Sum.inr a => joinLiftRight alemma joinLift_injective {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} : Function.Injective (@joinLift _ _ φsΛ φsucΛ) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ Function.Injective joinLift
intro a b h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ ⊕ ↥↑φsucΛb:↥↑φsΛ ⊕ ↥↑φsucΛh:joinLift a = joinLift b⊢ a = b
match a, b with
| Sum.inl a, Sum.inl b => 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:↥↑φsΛ ⊕ ↥↑φsucΛb✝:↥↑φsΛ ⊕ ↥↑φsucΛa:↥↑φsΛb:↥↑φsΛh:joinLift (Sum.inl a) = joinLift (Sum.inl b)⊢ Sum.inl a = Sum.inl b
exact congrArg Sum.inl (jointLiftLeft_injective h) All goals completed! 🐙
| Sum.inr a, Sum.inr b => 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:↥↑φsΛ ⊕ ↥↑φsucΛb✝:↥↑φsΛ ⊕ ↥↑φsucΛa:↥↑φsucΛb:↥↑φsucΛh:joinLift (Sum.inr a) = joinLift (Sum.inr b)⊢ Sum.inr a = Sum.inr b
exact congrArg Sum.inr (joinLiftRight_injective h) All goals completed! 🐙
| Sum.inl a, Sum.inr b => 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:↥↑φsΛ ⊕ ↥↑φsucΛb✝:↥↑φsΛ ⊕ ↥↑φsucΛa:↥↑φsΛb:↥↑φsucΛh:joinLift (Sum.inl a) = joinLift (Sum.inr b)⊢ Sum.inl a = Sum.inr b
exact absurd h (jointLiftLeft_ne_joinLiftRight a b) All goals completed! 🐙
| Sum.inr a, Sum.inl b => 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:↥↑φsΛ ⊕ ↥↑φsucΛb✝:↥↑φsΛ ⊕ ↥↑φsucΛa:↥↑φsucΛb:↥↑φsΛh:joinLift (Sum.inr a) = joinLift (Sum.inl b)⊢ Sum.inr a = Sum.inl b
exact absurd h.symm (jointLiftLeft_ne_joinLiftRight b a) All goals completed! 🐙
lemma joinLift_surjective {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} : Function.Surjective (@joinLift _ _ φsΛ φsucΛ) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ Function.Surjective joinLift
intro a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)⊢ ∃ a_1, joinLift a_1 = a
have ha2 := a.2 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)ha2:↑a ∈ ↑(φsΛ.join φsucΛ)⊢ ∃ a_1, joinLift a_1 = a
simp only [join, Finset.mem_union, Finset.mem_map,
RelEmbedding.coe_toEmbedding] at ha2 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)ha2:↑a ∈ ↑φsΛ ∨ ∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = ↑a⊢ ∃ a_1, joinLift a_1 = a
rcases ha2 with ha2 | ⟨a2, ha3⟩ inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)ha2:↑a ∈ ↑φsΛ⊢ ∃ a_1, joinLift a_1 = ainr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)a2:Finset (Fin [φsΛ]ᵘᶜ.length)ha3:a2 ∈ ↑φsucΛ ∧ (Finset.mapEmbedding uncontractedListEmd) a2 = ↑a⊢ ∃ a_1, joinLift a_1 = a
· inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)ha2:↑a ∈ ↑φsΛ⊢ ∃ a_1, joinLift a_1 = a use Sum.inl ⟨a, ha2⟩ h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)ha2:↑a ∈ ↑φsΛ⊢ joinLift (Sum.inl ⟨↑a, ha2⟩) = a
simp [joinLift, joinLiftLeft] All goals completed! 🐙
· inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)a2:Finset (Fin [φsΛ]ᵘᶜ.length)ha3:a2 ∈ ↑φsucΛ ∧ (Finset.mapEmbedding uncontractedListEmd) a2 = ↑a⊢ ∃ a_1, joinLift a_1 = a rw [Finset.mapEmbedding_apply inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)a2:Finset (Fin [φsΛ]ᵘᶜ.length)ha3:a2 ∈ ↑φsucΛ ∧ Finset.map uncontractedListEmd a2 = ↑a⊢ ∃ a_1, joinLift a_1 = a inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)a2:Finset (Fin [φsΛ]ᵘᶜ.length)ha3:a2 ∈ ↑φsucΛ ∧ Finset.map uncontractedListEmd a2 = ↑a⊢ ∃ a_1, joinLift a_1 = a] at ha3 inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)a2:Finset (Fin [φsΛ]ᵘᶜ.length)ha3:a2 ∈ ↑φsucΛ ∧ Finset.map uncontractedListEmd a2 = ↑a⊢ ∃ a_1, joinLift a_1 = a
use Sum.inr ⟨a2, ha3.1⟩ h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)a2:Finset (Fin [φsΛ]ᵘᶜ.length)ha3:a2 ∈ ↑φsucΛ ∧ Finset.map uncontractedListEmd a2 = ↑a⊢ joinLift (Sum.inr ⟨a2, ⋯⟩) = a
simp only [joinLift, joinLiftRight] h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)a2:Finset (Fin [φsΛ]ᵘᶜ.length)ha3:a2 ∈ ↑φsucΛ ∧ Finset.map uncontractedListEmd a2 = ↑a⊢ ⟨Finset.map uncontractedListEmd a2, ⋯⟩ = a
refine Subtype.ext ?_ h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑(φsΛ.join φsucΛ)a2:Finset (Fin [φsΛ]ᵘᶜ.length)ha3:a2 ∈ ↑φsucΛ ∧ Finset.map uncontractedListEmd a2 = ↑a⊢ ↑⟨Finset.map uncontractedListEmd a2, ⋯⟩ = ↑a
exact ha3.2 All goals completed! 🐙lemma joinLift_bijective {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} : Function.Bijective (@joinLift _ _ φsΛ φsucΛ) :=
⟨joinLift_injective, joinLift_surjective⟩
lemma prod_join {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (f : (join φsΛ φsucΛ).1 → M) [CommMonoid M]:
∏ (a : (join φsΛ φsucΛ).1), f a = (∏ (a : φsΛ.1), f (joinLiftLeft a)) *
∏ (a : φsucΛ.1), f (joinLiftRight a) := by 𝓕:FieldSpecificationM:Type u_1φs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthf:↥↑(φsΛ.join φsucΛ) → Minst✝:CommMonoid M⊢ ∏ a, f a = (∏ a, f (joinLiftLeft a)) * ∏ a, f (joinLiftRight a)
rw [← (Equiv.ofBijective (@joinLift _ _ φsΛ φsucΛ) joinLift_bijective).prod_comp 𝓕:FieldSpecificationM:Type u_1φs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthf:↥↑(φsΛ.join φsucΛ) → Minst✝:CommMonoid M⊢ ∏ i, f ((Equiv.ofBijective joinLift ⋯) i) = (∏ a, f (joinLiftLeft a)) * ∏ a, f (joinLiftRight a) 𝓕:FieldSpecificationM:Type u_1φs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthf:↥↑(φsΛ.join φsucΛ) → Minst✝:CommMonoid M⊢ ∏ i, f ((Equiv.ofBijective joinLift ⋯) i) = (∏ a, f (joinLiftLeft a)) * ∏ a, f (joinLiftRight a)] 𝓕:FieldSpecificationM:Type u_1φs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthf:↥↑(φsΛ.join φsucΛ) → Minst✝:CommMonoid M⊢ ∏ i, f ((Equiv.ofBijective joinLift ⋯) i) = (∏ a, f (joinLiftLeft a)) * ∏ a, f (joinLiftRight a)
simp only [Fintype.prod_sum_type, Finset.univ_eq_attach] 𝓕:FieldSpecificationM:Type u_1φs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthf:↥↑(φsΛ.join φsucΛ) → Minst✝:CommMonoid M⊢ (∏ a₁ ∈ (↑φsΛ).attach, f ((Equiv.ofBijective joinLift ⋯) (Sum.inl a₁))) *
∏ a₂ ∈ (↑φsucΛ).attach, f ((Equiv.ofBijective joinLift ⋯) (Sum.inr a₂)) =
(∏ a ∈ (↑φsΛ).attach, f (joinLiftLeft a)) * ∏ a ∈ (↑φsucΛ).attach, f (joinLiftRight a)
rfl All goals completed! 🐙lemma joinLiftLeft_or_joinLiftRight_of_mem_join {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) {a : Finset (Fin φs.length)}
(ha : a ∈ (join φsΛ φsucΛ).1) :
(∃ b, a = (joinLiftLeft (φsucΛ := φsucΛ) b).1) ∨
(∃ b, a = (joinLiftRight (φsucΛ := φsucΛ) b).1) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑(φsΛ.join φsucΛ)⊢ (∃ b, a = ↑(joinLiftLeft b)) ∨ ∃ b, a = ↑(joinLiftRight b)
simp only [join, Finset.mem_union, Finset.mem_map,
RelEmbedding.coe_toEmbedding] at ha 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛ ∨ ∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ (∃ b, a = ↑(joinLiftLeft b)) ∨ ∃ b, a = ↑(joinLiftRight b)
rcases ha with ha | ⟨a, ha, rfl⟩ inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ (∃ b, a = ↑(joinLiftLeft b)) ∨ ∃ b, a = ↑(joinLiftRight b)inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha:a ∈ ↑φsucΛ⊢ (∃ b, (Finset.mapEmbedding uncontractedListEmd) a = ↑(joinLiftLeft b)) ∨
∃ b, (Finset.mapEmbedding uncontractedListEmd) a = ↑(joinLiftRight b)
· inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ (∃ b, a = ↑(joinLiftLeft b)) ∨ ∃ b, a = ↑(joinLiftRight b) exact Or.inl ⟨⟨a, ha⟩, rfl⟩ All goals completed! 🐙
· inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha:a ∈ ↑φsucΛ⊢ (∃ b, (Finset.mapEmbedding uncontractedListEmd) a = ↑(joinLiftLeft b)) ∨
∃ b, (Finset.mapEmbedding uncontractedListEmd) a = ↑(joinLiftRight b) exact Or.inr ⟨⟨a, ha⟩, rfl⟩ All goals completed! 🐙@[simp]
lemma join_fstFieldOfContract_joinLiftRight {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (a : φsucΛ.1) :
(join φsΛ φsucΛ).fstFieldOfContract (joinLiftRight a) =
uncontractedListEmd (φsucΛ.fstFieldOfContract a) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ (φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a) = uncontractedListEmd (φsucΛ.fstFieldOfContract a)
apply eq_fstFieldOfContract_of_mem _ _ _ (uncontractedListEmd (φsucΛ.sndFieldOfContract a)) hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.fstFieldOfContract a) ∈ ↑(joinLiftRight a)hj 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.sndFieldOfContract a) ∈ ↑(joinLiftRight a)hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.fstFieldOfContract a) < uncontractedListEmd (φsucΛ.sndFieldOfContract a)
· hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.fstFieldOfContract a) ∈ ↑(joinLiftRight a) simp [joinLiftRight] All goals completed! 🐙
· hj 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.sndFieldOfContract a) ∈ ↑(joinLiftRight a) simp [joinLiftRight] All goals completed! 🐙
· hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.fstFieldOfContract a) < uncontractedListEmd (φsucΛ.sndFieldOfContract a) apply uncontractedListEmd_strictMono hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ φsucΛ.fstFieldOfContract a < φsucΛ.sndFieldOfContract a
exact fstFieldOfContract_lt_sndFieldOfContract φsucΛ a All goals completed! 🐙@[simp]
lemma join_sndFieldOfContract_joinLiftRight {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (a : φsucΛ.1) :
(join φsΛ φsucΛ).sndFieldOfContract (joinLiftRight a) =
uncontractedListEmd (φsucΛ.sndFieldOfContract a) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ (φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a) = uncontractedListEmd (φsucΛ.sndFieldOfContract a)
apply eq_sndFieldOfContract_of_mem _ _ (uncontractedListEmd (φsucΛ.fstFieldOfContract a)) hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.fstFieldOfContract a) ∈ ↑(joinLiftRight a)hj 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.sndFieldOfContract a) ∈ ↑(joinLiftRight a)hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.fstFieldOfContract a) < uncontractedListEmd (φsucΛ.sndFieldOfContract a)
· hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.fstFieldOfContract a) ∈ ↑(joinLiftRight a) simp [joinLiftRight] All goals completed! 🐙
· hj 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.sndFieldOfContract a) ∈ ↑(joinLiftRight a) simp [joinLiftRight] All goals completed! 🐙
· hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ uncontractedListEmd (φsucΛ.fstFieldOfContract a) < uncontractedListEmd (φsucΛ.sndFieldOfContract a) apply uncontractedListEmd_strictMono hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛ⊢ φsucΛ.fstFieldOfContract a < φsucΛ.sndFieldOfContract a
exact fstFieldOfContract_lt_sndFieldOfContract φsucΛ a All goals completed! 🐙@[simp]
lemma join_fstFieldOfContract_joinLiftLeft {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (a : φsΛ.1) :
(join φsΛ φsucΛ).fstFieldOfContract (joinLiftLeft a) =
(φsΛ.fstFieldOfContract a) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ (φsΛ.join φsucΛ).fstFieldOfContract (joinLiftLeft a) = φsΛ.fstFieldOfContract a
apply eq_fstFieldOfContract_of_mem _ _ _ (φsΛ.sndFieldOfContract a) hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.fstFieldOfContract a ∈ ↑(joinLiftLeft a)hj 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.sndFieldOfContract a ∈ ↑(joinLiftLeft a)hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.fstFieldOfContract a < φsΛ.sndFieldOfContract a
· hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.fstFieldOfContract a ∈ ↑(joinLiftLeft a) simp [joinLiftLeft] All goals completed! 🐙
· hj 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.sndFieldOfContract a ∈ ↑(joinLiftLeft a) simp [joinLiftLeft] All goals completed! 🐙
· hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.fstFieldOfContract a < φsΛ.sndFieldOfContract a exact fstFieldOfContract_lt_sndFieldOfContract φsΛ a All goals completed! 🐙@[simp]
lemma join_sndFieldOfContract_joinLift {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (a : φsΛ.1) :
(join φsΛ φsucΛ).sndFieldOfContract (joinLiftLeft a) =
(φsΛ.sndFieldOfContract a) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ (φsΛ.join φsucΛ).sndFieldOfContract (joinLiftLeft a) = φsΛ.sndFieldOfContract a
apply eq_sndFieldOfContract_of_mem _ _ (φsΛ.fstFieldOfContract a) (φsΛ.sndFieldOfContract a) hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.fstFieldOfContract a ∈ ↑(joinLiftLeft a)hj 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.sndFieldOfContract a ∈ ↑(joinLiftLeft a)hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.fstFieldOfContract a < φsΛ.sndFieldOfContract a
· hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.fstFieldOfContract a ∈ ↑(joinLiftLeft a) simp [joinLiftLeft] All goals completed! 🐙
· hj 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.sndFieldOfContract a ∈ ↑(joinLiftLeft a) simp [joinLiftLeft] All goals completed! 🐙
· hij 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsΛ⊢ φsΛ.fstFieldOfContract a < φsΛ.sndFieldOfContract a exact fstFieldOfContract_lt_sndFieldOfContract φsΛ a All goals completed! 🐙
lemma mem_join_right_iff {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (a : Finset (Fin [φsΛ]ᵘᶜ.length)) :
a ∈ φsucΛ.1 ↔ a.map uncontractedListEmd ∈ (join φsΛ φsucΛ).1 := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)⊢ a ∈ ↑φsucΛ ↔ Finset.map uncontractedListEmd a ∈ ↑(φsΛ.join φsucΛ)
simp only [join, Finset.mem_union, Finset.mem_map,
RelEmbedding.coe_toEmbedding] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)⊢ a ∈ ↑φsucΛ ↔
Finset.map uncontractedListEmd a ∈ ↑φsΛ ∨
∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = Finset.map uncontractedListEmd a
have h1' : ¬ Finset.map uncontractedListEmd a ∈ φsΛ.1 :=
uncontractedListEmd_finset_not_mem a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛ⊢ a ∈ ↑φsucΛ ↔
Finset.map uncontractedListEmd a ∈ ↑φsΛ ∨
∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = Finset.map uncontractedListEmd a
simp only [h1', false_or] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛ⊢ a ∈ ↑φsucΛ ↔ ∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = Finset.map uncontractedListEmd a
apply Iff.intro mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛ⊢ a ∈ ↑φsucΛ → ∃ a_2 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_2 = Finset.map uncontractedListEmd ampr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛ⊢ (∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = Finset.map uncontractedListEmd a) → a ∈ ↑φsucΛ
· mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛ⊢ a ∈ ↑φsucΛ → ∃ a_2 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_2 = Finset.map uncontractedListEmd a intro h mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛh:a ∈ ↑φsucΛ⊢ ∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = Finset.map uncontractedListEmd a
exact ⟨a, h, Finset.mapEmbedding_apply⟩ All goals completed! 🐙
· mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛ⊢ (∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = Finset.map uncontractedListEmd a) → a ∈ ↑φsucΛ rintro ⟨a, ha, h2⟩ mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛa:Finset (Fin [φsΛ]ᵘᶜ.length)ha:a ∈ ↑φsucΛh2:(Finset.mapEmbedding uncontractedListEmd) a = Finset.map uncontractedListEmd a✝⊢ a ∈ ↑φsucΛ
rw [Finset.mapEmbedding_apply, mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛa:Finset (Fin [φsΛ]ᵘᶜ.length)ha:a ∈ ↑φsucΛh2:Finset.map uncontractedListEmd a = Finset.map uncontractedListEmd a✝⊢ a ∈ ↑φsucΛ mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛa:Finset (Fin [φsΛ]ᵘᶜ.length)ha:a ∈ ↑φsucΛh2:a = a✝⊢ a ∈ ↑φsucΛ Finset.map_inj mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛa:Finset (Fin [φsΛ]ᵘᶜ.length)ha:a ∈ ↑φsucΛh2:a = a✝⊢ a ∈ ↑φsucΛ mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛa:Finset (Fin [φsΛ]ᵘᶜ.length)ha:a ∈ ↑φsucΛh2:a = a✝⊢ a ∈ ↑φsucΛ] at h2mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha✝:Finset (Fin [φsΛ]ᵘᶜ.length)h1':Finset.map uncontractedListEmd a ∉ ↑φsΛa:Finset (Fin [φsΛ]ᵘᶜ.length)ha:a ∈ ↑φsucΛh2:a = a✝⊢ a ∈ ↑φsucΛ
exact h2 ▸ ha All goals completed! 🐙
lemma join_card {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
{φsucΛ : WickContraction [φsΛ]ᵘᶜ.length} :
(join φsΛ φsucΛ).1.card = φsΛ.1.card + φsucΛ.1.card := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (↑(φsΛ.join φsucΛ)).card = (↑φsΛ).card + (↑φsucΛ).card
simp only [join] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ).card = (↑φsΛ).card + (↑φsucΛ).card
rw [Finset.card_union_of_disjoint 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (↑φsΛ).card + (Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ).card =
(↑φsΛ).card + (↑φsucΛ).card𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ Disjoint (↑φsΛ) (Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (↑φsΛ).card + (Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ).card =
(↑φsΛ).card + (↑φsucΛ).card𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ Disjoint (↑φsΛ) (Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ)] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (↑φsΛ).card + (Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ).card =
(↑φsΛ).card + (↑φsucΛ).card𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ Disjoint (↑φsΛ) (Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ)
simp only [Finset.card_map] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ Disjoint (↑φsΛ) (Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ)
rw [@Finset.disjoint_left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ∀ ⦃a : Finset (Fin φs.length)⦄, a ∈ ↑φsΛ → a ∉ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ∀ ⦃a : Finset (Fin φs.length)⦄, a ∈ ↑φsΛ → a ∉ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ∀ ⦃a : Finset (Fin φs.length)⦄, a ∈ ↑φsΛ → a ∉ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ
intro a ha 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ a ∉ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ
simp only [Finset.mem_map, RelEmbedding.coe_toEmbedding, not_exists, not_and] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ ∀ x ∈ ↑φsucΛ, ¬(Finset.mapEmbedding uncontractedListEmd) x = a
intro x hx 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛ⊢ ¬(Finset.mapEmbedding uncontractedListEmd) x = a
by_contra hn 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛhn:(Finset.mapEmbedding uncontractedListEmd) x = a⊢ False
have hdis : Disjoint (Finset.map uncontractedListEmd x) a :=
uncontractedListEmd_finset_disjoint_left x a ha 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛhn:(Finset.mapEmbedding uncontractedListEmd) x = ahdis:Disjoint (Finset.map uncontractedListEmd x) a⊢ False
rw [Finset.mapEmbedding_apply 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛhn:Finset.map uncontractedListEmd x = ahdis:Disjoint (Finset.map uncontractedListEmd x) a⊢ False 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛhn:Finset.map uncontractedListEmd x = ahdis:Disjoint (Finset.map uncontractedListEmd x) a⊢ False] at hn 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛhn:Finset.map uncontractedListEmd x = ahdis:Disjoint (Finset.map uncontractedListEmd x) a⊢ False
rw [hn 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛhn:Finset.map uncontractedListEmd x = ahdis:Disjoint a a⊢ False 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛhn:Finset.map uncontractedListEmd x = ahdis:Disjoint a a⊢ False] at hdis 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛhn:Finset.map uncontractedListEmd x = ahdis:Disjoint a a⊢ False
have hcard := φsΛ.2.1 a ha 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛx:Finset (Fin [φsΛ]ᵘᶜ.length)hx:x ∈ ↑φsucΛhn:Finset.map uncontractedListEmd x = ahdis:Disjoint a ahcard:a.card = 2⊢ False
simp_all All goals completed! 🐙
@[simp]
lemma empty_join {φs : List 𝓕.FieldOp} (φsΛ : WickContraction [empty (n := φs.length)]ᵘᶜ.length) :
join empty φsΛ = congr (by 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.length⊢ [empty]ᵘᶜ.length = φs.length simp All goals completed! 🐙) φsΛ := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.length⊢ empty.join φsΛ = (congr ⋯) φsΛ
apply Subtype.ext 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.length⊢ ↑(empty.join φsΛ) = ↑((congr ⋯) φsΛ)
simp only [join, uncontractedListEmd_empty] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.length⊢ ↑empty ∪ Finset.map (Finset.mapEmbedding (finCongr ⋯).toEmbedding).toEmbedding ↑φsΛ = ↑((congr ⋯) φsΛ)
ext a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ a ∈ ↑empty ∪ Finset.map (Finset.mapEmbedding (finCongr ⋯).toEmbedding).toEmbedding ↑φsΛ ↔ a ∈ ↑((congr ⋯) φsΛ)
conv_lhs =>
left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)| ↑empty ∪ Finset.map (Finset.mapEmbedding (finCongr ⋯).toEmbedding).toEmbedding ↑φsΛ
left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)| ↑empty
rw [empty] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)| ↑⟨∅, ⋯⟩
simp only [Finset.empty_union, Finset.mem_map, RelEmbedding.coe_toEmbedding] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ (∃ a_1 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_1 = a) ↔ a ∈ ↑((congr ⋯) φsΛ)
rw [mem_congr_iff 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ (∃ a_1 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_1 = a) ↔ Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ (∃ a_1 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_1 = a) ↔ Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ (∃ a_1 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_1 = a) ↔ Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ
apply Iff.intro mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ (∃ a_1 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_1 = a) → Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛmpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ → ∃ a_2 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_2 = a
· mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ (∃ a_1 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_1 = a) → Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ intro h mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)h:∃ a_1 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_1 = a⊢ Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ
obtain ⟨a, ha, rfl⟩ := h mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin [empty]ᵘᶜ.length)ha:a ∈ ↑φsΛ⊢ Finset.map (finCongr ⋯).toEmbedding ((Finset.mapEmbedding (finCongr ⋯).toEmbedding) a) ∈ ↑φsΛ
rw [Finset.mapEmbedding_apply mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin [empty]ᵘᶜ.length)ha:a ∈ ↑φsΛ⊢ Finset.map (finCongr ⋯).toEmbedding (Finset.map (finCongr ⋯).toEmbedding a) ∈ ↑φsΛ mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin [empty]ᵘᶜ.length)ha:a ∈ ↑φsΛ⊢ Finset.map (finCongr ⋯).toEmbedding (Finset.map (finCongr ⋯).toEmbedding a) ∈ ↑φsΛ]mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin [empty]ᵘᶜ.length)ha:a ∈ ↑φsΛ⊢ Finset.map (finCongr ⋯).toEmbedding (Finset.map (finCongr ⋯).toEmbedding a) ∈ ↑φsΛ
rw [Finset.map_map mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin [empty]ᵘᶜ.length)ha:a ∈ ↑φsΛ⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a ∈ ↑φsΛ mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin [empty]ᵘᶜ.length)ha:a ∈ ↑φsΛ⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a ∈ ↑φsΛ]mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin [empty]ᵘᶜ.length)ha:a ∈ ↑φsΛ⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a ∈ ↑φsΛ
apply Set.mem_of_eq_of_mem _ ha 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin [empty]ᵘᶜ.length)ha:a ∈ ↑φsΛ⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a = a
exact Finset.map_refl All goals completed! 🐙
· mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ → ∃ a_2 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_2 = a intro h mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)h:Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ⊢ ∃ a_1 ∈ ↑φsΛ, (Finset.mapEmbedding (finCongr ⋯).toEmbedding) a_1 = a
use Finset.map (finCongr (by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)h:Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ⊢ φs.length = [empty]ᵘᶜ.length simp All goals completed! 🐙)).toEmbedding a
simp only [h, true_and] h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)h:Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ⊢ (Finset.mapEmbedding (finCongr ⋯).toEmbedding) (Finset.map (finCongr ⋯).toEmbedding a) = a
rw [Finset.mapEmbedding_apply, h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)h:Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ⊢ Finset.map (finCongr ⋯).toEmbedding (Finset.map (finCongr ⋯).toEmbedding a) = a h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)h:Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a = a Finset.map_map h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)h:Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a = ah 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)h:Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a = a]h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction [empty]ᵘᶜ.lengtha:Finset (Fin φs.length)h:Finset.map (finCongr ⋯).toEmbedding a ∈ ↑φsΛ⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a = a
exact Finset.map_refl All goals completed! 🐙@[simp]
lemma join_empty {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) :
join φsΛ empty = φsΛ := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ φsΛ.join empty = φsΛ
apply Subtype.ext 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ↑(φsΛ.join empty) = ↑φsΛ
ext a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengtha:Finset (Fin φs.length)⊢ a ∈ ↑(φsΛ.join empty) ↔ a ∈ ↑φsΛ
simp [join, empty] All goals completed! 🐙
lemma join_timeContract {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) :
(join φsΛ φsucΛ).timeContract = φsΛ.timeContract * φsucΛ.timeContract := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).timeContract = φsΛ.timeContract * φsucΛ.timeContract
simp only [timeContract, List.get_eq_getElem] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ∏ x,
⟨WickAlgebra.timeContract φs[↑((φsΛ.join φsucΛ).fstFieldOfContract x)] φs[↑((φsΛ.join φsucΛ).sndFieldOfContract x)],
⋯⟩ =
(∏ x, ⟨WickAlgebra.timeContract φs[↑(φsΛ.fstFieldOfContract x)] φs[↑(φsΛ.sndFieldOfContract x)], ⋯⟩) *
∏ x, ⟨WickAlgebra.timeContract [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)] [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)], ⋯⟩
rw [prod_join 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (∏ a,
⟨WickAlgebra.timeContract φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftLeft a))]
φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftLeft a))],
⋯⟩) *
∏ a,
⟨WickAlgebra.timeContract φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]
φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))],
⋯⟩ =
(∏ x, ⟨WickAlgebra.timeContract φs[↑(φsΛ.fstFieldOfContract x)] φs[↑(φsΛ.sndFieldOfContract x)], ⋯⟩) *
∏ x, ⟨WickAlgebra.timeContract [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)] [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)], ⋯⟩ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (∏ a,
⟨WickAlgebra.timeContract φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftLeft a))]
φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftLeft a))],
⋯⟩) *
∏ a,
⟨WickAlgebra.timeContract φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]
φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))],
⋯⟩ =
(∏ x, ⟨WickAlgebra.timeContract φs[↑(φsΛ.fstFieldOfContract x)] φs[↑(φsΛ.sndFieldOfContract x)], ⋯⟩) *
∏ x, ⟨WickAlgebra.timeContract [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)] [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)], ⋯⟩] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (∏ a,
⟨WickAlgebra.timeContract φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftLeft a))]
φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftLeft a))],
⋯⟩) *
∏ a,
⟨WickAlgebra.timeContract φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]
φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))],
⋯⟩ =
(∏ x, ⟨WickAlgebra.timeContract φs[↑(φsΛ.fstFieldOfContract x)] φs[↑(φsΛ.sndFieldOfContract x)], ⋯⟩) *
∏ x, ⟨WickAlgebra.timeContract [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)] [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)], ⋯⟩
congr 1 e_a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ∏ a,
⟨WickAlgebra.timeContract φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]
φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))],
⋯⟩ =
∏ x, ⟨WickAlgebra.timeContract [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)] [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)], ⋯⟩
exact Finset.prod_congr rfl fun a _ => by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛx✝:a ∈ Finset.univ⊢ ⟨WickAlgebra.timeContract φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]
φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))],
⋯⟩ =
⟨WickAlgebra.timeContract [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract a)] [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract a)], ⋯⟩ simp All goals completed! 🐙
lemma join_staticContract {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) :
(join φsΛ φsucΛ).staticContract = φsΛ.staticContract * φsucΛ.staticContract := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).staticContract = φsΛ.staticContract * φsucΛ.staticContract
simp only [staticContract, List.get_eq_getElem] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ∏ x,
⟨(superCommute (anPart φs[↑((φsΛ.join φsucΛ).fstFieldOfContract x)]))
(ofFieldOp φs[↑((φsΛ.join φsucΛ).sndFieldOfContract x)]),
⋯⟩ =
(∏ x, ⟨(superCommute (anPart φs[↑(φsΛ.fstFieldOfContract x)])) (ofFieldOp φs[↑(φsΛ.sndFieldOfContract x)]), ⋯⟩) *
∏ x,
⟨(superCommute (anPart [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)]))
(ofFieldOp [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)]),
⋯⟩
rw [prod_join 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (∏ a,
⟨(superCommute (anPart φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftLeft a))]))
(ofFieldOp φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftLeft a))]),
⋯⟩) *
∏ a,
⟨(superCommute (anPart φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]))
(ofFieldOp φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))]),
⋯⟩ =
(∏ x, ⟨(superCommute (anPart φs[↑(φsΛ.fstFieldOfContract x)])) (ofFieldOp φs[↑(φsΛ.sndFieldOfContract x)]), ⋯⟩) *
∏ x,
⟨(superCommute (anPart [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)]))
(ofFieldOp [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)]),
⋯⟩ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (∏ a,
⟨(superCommute (anPart φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftLeft a))]))
(ofFieldOp φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftLeft a))]),
⋯⟩) *
∏ a,
⟨(superCommute (anPart φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]))
(ofFieldOp φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))]),
⋯⟩ =
(∏ x, ⟨(superCommute (anPart φs[↑(φsΛ.fstFieldOfContract x)])) (ofFieldOp φs[↑(φsΛ.sndFieldOfContract x)]), ⋯⟩) *
∏ x,
⟨(superCommute (anPart [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)]))
(ofFieldOp [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)]),
⋯⟩] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (∏ a,
⟨(superCommute (anPart φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftLeft a))]))
(ofFieldOp φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftLeft a))]),
⋯⟩) *
∏ a,
⟨(superCommute (anPart φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]))
(ofFieldOp φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))]),
⋯⟩ =
(∏ x, ⟨(superCommute (anPart φs[↑(φsΛ.fstFieldOfContract x)])) (ofFieldOp φs[↑(φsΛ.sndFieldOfContract x)]), ⋯⟩) *
∏ x,
⟨(superCommute (anPart [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)]))
(ofFieldOp [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)]),
⋯⟩
congr 1 e_a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ∏ a,
⟨(superCommute (anPart φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]))
(ofFieldOp φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))]),
⋯⟩ =
∏ x,
⟨(superCommute (anPart [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract x)])) (ofFieldOp [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract x)]),
⋯⟩
exact Finset.prod_congr rfl fun a _ => by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:↥↑φsucΛx✝:a ∈ Finset.univ⊢ ⟨(superCommute (anPart φs[↑((φsΛ.join φsucΛ).fstFieldOfContract (joinLiftRight a))]))
(ofFieldOp φs[↑((φsΛ.join φsucΛ).sndFieldOfContract (joinLiftRight a))]),
⋯⟩ =
⟨(superCommute (anPart [φsΛ]ᵘᶜ[↑(φsucΛ.fstFieldOfContract a)])) (ofFieldOp [φsΛ]ᵘᶜ[↑(φsucΛ.sndFieldOfContract a)]), ⋯⟩ simp All goals completed! 🐙
lemma mem_join_uncontracted_of_mem_right_uncontracted {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (i : Fin [φsΛ]ᵘᶜ.length)
(ha : i ∈ φsucΛ.uncontracted) :
uncontractedListEmd i ∈ (join φsΛ φsucΛ).uncontracted := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontracted⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted
rw [mem_uncontracted_iff_not_contracted 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontracted⊢ ∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd i ∉ p 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontracted⊢ ∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd i ∉ p] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontracted⊢ ∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd i ∉ p
intro p hp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑(φsΛ.join φsucΛ)⊢ uncontractedListEmd i ∉ p
simp only [join, Finset.mem_union, Finset.mem_map,
RelEmbedding.coe_toEmbedding] at hp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑φsΛ ∨ ∃ a ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a = p⊢ uncontractedListEmd i ∉ p
rcases hp with hp | hp inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑φsΛ⊢ uncontractedListEmd i ∉ pinr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:∃ a ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a = p⊢ uncontractedListEmd i ∉ p
· inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑φsΛ⊢ uncontractedListEmd i ∉ p have hi : uncontractedListEmd i ∈ φsΛ.uncontracted := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontracted⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑φsΛhi:uncontractedListEmd i ∈ φsΛ.uncontracted⊢ uncontractedListEmd i ∉ p
exact uncontractedListEmd_mem_uncontracted iinl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑φsΛhi:uncontractedListEmd i ∈ φsΛ.uncontracted⊢ uncontractedListEmd i ∉ pinl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑φsΛhi:uncontractedListEmd i ∈ φsΛ.uncontracted⊢ uncontractedListEmd i ∉ p
rw [mem_uncontracted_iff_not_contracted inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑φsΛhi:∀ p ∈ ↑φsΛ, uncontractedListEmd i ∉ p⊢ uncontractedListEmd i ∉ p inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑φsΛhi:∀ p ∈ ↑φsΛ, uncontractedListEmd i ∉ p⊢ uncontractedListEmd i ∉ p] at hiinl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:p ∈ ↑φsΛhi:∀ p ∈ ↑φsΛ, uncontractedListEmd i ∉ p⊢ uncontractedListEmd i ∉ p
exact hi p hp All goals completed! 🐙
· inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin φs.length)hp:∃ a ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a = p⊢ uncontractedListEmd i ∉ p obtain ⟨p, hp, rfl⟩ := hp inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ uncontractedListEmd i ∉ (Finset.mapEmbedding uncontractedListEmd) p
rw [Finset.mapEmbedding_apply inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ uncontractedListEmd i ∉ Finset.map uncontractedListEmd p inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ uncontractedListEmd i ∉ Finset.map uncontractedListEmd p]inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ uncontractedListEmd i ∉ Finset.map uncontractedListEmd p
simp only [Finset.mem_map'] inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:i ∈ φsucΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ i ∉ p
rw [mem_uncontracted_iff_not_contracted inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:∀ p ∈ ↑φsucΛ, i ∉ pp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ i ∉ p inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:∀ p ∈ ↑φsucΛ, i ∉ pp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ i ∉ p] at hainr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthha:∀ p ∈ ↑φsucΛ, i ∉ pp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ i ∉ p
exact ha p hp All goals completed! 🐙
lemma exists_mem_left_uncontracted_of_mem_join_uncontracted {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (i : Fin φs.length)
(ha : i ∈ (join φsΛ φsucΛ).uncontracted) :
i ∈ φsΛ.uncontracted := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthha:i ∈ (φsΛ.join φsucΛ).uncontracted⊢ i ∈ φsΛ.uncontracted
rw [@mem_uncontracted_iff_not_contracted 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthha:i ∈ (φsΛ.join φsucΛ).uncontracted⊢ ∀ p ∈ ↑φsΛ, i ∉ p 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthha:i ∈ (φsΛ.join φsucΛ).uncontracted⊢ ∀ p ∈ ↑φsΛ, i ∉ p] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthha:i ∈ (φsΛ.join φsucΛ).uncontracted⊢ ∀ p ∈ ↑φsΛ, i ∉ p
rw [@mem_uncontracted_iff_not_contracted 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthha:∀ p ∈ ↑(φsΛ.join φsucΛ), i ∉ p⊢ ∀ p ∈ ↑φsΛ, i ∉ p 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthha:∀ p ∈ ↑(φsΛ.join φsucΛ), i ∉ p⊢ ∀ p ∈ ↑φsΛ, i ∉ p] at ha 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthha:∀ p ∈ ↑(φsΛ.join φsucΛ), i ∉ p⊢ ∀ p ∈ ↑φsΛ, i ∉ p
simp only [join, Finset.mem_union, Finset.mem_map,
RelEmbedding.coe_toEmbedding] at ha 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthha:∀ (p : Finset (Fin φs.length)), (p ∈ ↑φsΛ ∨ ∃ a ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a = p) → i ∉ p⊢ ∀ p ∈ ↑φsΛ, i ∉ p
intro p hp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthha:∀ (p : Finset (Fin φs.length)), (p ∈ ↑φsΛ ∨ ∃ a ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a = p) → i ∉ pp:Finset (Fin φs.length)hp:p ∈ ↑φsΛ⊢ i ∉ p
simp_all All goals completed! 🐙
lemma exists_mem_right_uncontracted_of_mem_join_uncontracted {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (i : Fin φs.length)
(hi : i ∈ (join φsΛ φsucΛ).uncontracted) :
∃ a, uncontractedListEmd a = i ∧ a ∈ φsucΛ.uncontracted := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthhi:i ∈ (φsΛ.join φsucΛ).uncontracted⊢ ∃ a, uncontractedListEmd a = i ∧ a ∈ φsucΛ.uncontracted
have hi' := exists_mem_left_uncontracted_of_mem_join_uncontracted _ _ i hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin φs.lengthhi:i ∈ (φsΛ.join φsucΛ).uncontractedhi':i ∈ φsΛ.uncontracted⊢ ∃ a, uncontractedListEmd a = i ∧ a ∈ φsucΛ.uncontracted
obtain ⟨j, rfl⟩ := uncontractedListEmd_surjective_mem_uncontracted i hi' 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:uncontractedListEmd j ∈ (φsΛ.join φsucΛ).uncontractedhi':uncontractedListEmd j ∈ φsΛ.uncontracted⊢ ∃ a, uncontractedListEmd a = uncontractedListEmd j ∧ a ∈ φsucΛ.uncontracted
refine ⟨j, rfl, ?_⟩ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:uncontractedListEmd j ∈ (φsΛ.join φsucΛ).uncontractedhi':uncontractedListEmd j ∈ φsΛ.uncontracted⊢ j ∈ φsucΛ.uncontracted
rw [mem_uncontracted_iff_not_contracted 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontracted⊢ ∀ p ∈ ↑φsucΛ, j ∉ p 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontracted⊢ ∀ p ∈ ↑φsucΛ, j ∉ p] at hi ⊢ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontracted⊢ ∀ p ∈ ↑φsucΛ, j ∉ p
intro p hp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ j ∉ p
have hip := hi (p.map uncontractedListEmd) (by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ Finset.map uncontractedListEmd p ∈ ↑(φsΛ.join φsucΛ) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛhip:uncontractedListEmd j ∉ Finset.map uncontractedListEmd p⊢ j ∉ p
simp only [join, Finset.mem_union, Finset.mem_map,
RelEmbedding.coe_toEmbedding] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ Finset.map uncontractedListEmd p ∈ ↑φsΛ ∨
∃ a ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a = Finset.map uncontractedListEmd p 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛhip:uncontractedListEmd j ∉ Finset.map uncontractedListEmd p⊢ j ∉ p
right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ ∃ a ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a = Finset.map uncontractedListEmd p 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛhip:uncontractedListEmd j ∉ Finset.map uncontractedListEmd p⊢ j ∉ p
use p h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ p ∈ ↑φsucΛ ∧ (Finset.mapEmbedding uncontractedListEmd) p = Finset.map uncontractedListEmd p 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛhip:uncontractedListEmd j ∉ Finset.map uncontractedListEmd p⊢ j ∉ p
simp only [hp, true_and] h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ (Finset.mapEmbedding uncontractedListEmd) p = Finset.map uncontractedListEmd p 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛhip:uncontractedListEmd j ∉ Finset.map uncontractedListEmd p⊢ j ∉ p
rw [Finset.mapEmbedding_apply h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛ⊢ Finset.map uncontractedListEmd p = Finset.map uncontractedListEmd p All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛhip:uncontractedListEmd j ∉ Finset.map uncontractedListEmd p⊢ j ∉ p] All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛhip:uncontractedListEmd j ∉ Finset.map uncontractedListEmd p⊢ j ∉ p) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthj:Fin [φsΛ]ᵘᶜ.lengthhi:∀ p ∈ ↑(φsΛ.join φsucΛ), uncontractedListEmd j ∉ phi':uncontractedListEmd j ∈ φsΛ.uncontractedp:Finset (Fin [φsΛ]ᵘᶜ.length)hp:p ∈ ↑φsucΛhip:uncontractedListEmd j ∉ Finset.map uncontractedListEmd p⊢ j ∉ p
simpa using hip All goals completed! 🐙
lemma join_uncontractedList {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) :
(join φsΛ φsucΛ).uncontractedList = List.map uncontractedListEmd φsucΛ.uncontractedList := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).uncontractedList = List.map (⇑uncontractedListEmd) φsucΛ.uncontractedList
rw [uncontractedList_eq_sort 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).uncontracted.sort fun x1 x2 => x1 ≤ x2) = List.map (⇑uncontractedListEmd) φsucΛ.uncontractedList 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).uncontracted.sort fun x1 x2 => x1 ≤ x2) = List.map (⇑uncontractedListEmd) φsucΛ.uncontractedList] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).uncontracted.sort fun x1 x2 => x1 ≤ x2) = List.map (⇑uncontractedListEmd) φsucΛ.uncontractedList
rw [uncontractedList_eq_sort 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).uncontracted.sort fun x1 x2 => x1 ≤ x2) =
List.map (⇑uncontractedListEmd) (φsucΛ.uncontracted.sort fun x1 x2 => x1 ≤ x2) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).uncontracted.sort fun x1 x2 => x1 ≤ x2) =
List.map (⇑uncontractedListEmd) (φsucΛ.uncontracted.sort fun x1 x2 => x1 ≤ x2)] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).uncontracted.sort fun x1 x2 => x1 ≤ x2) =
List.map (⇑uncontractedListEmd) (φsucΛ.uncontracted.sort fun x1 x2 => x1 ≤ x2)
rw [fin_finset_sort_map_monotone 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).uncontracted.sort fun x1 x2 => x1 ≤ x2) =
(Finset.map uncontractedListEmd φsucΛ.uncontracted).sort fun x1 x2 => x1 ≤ x2hf 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ StrictMono ⇑uncontractedListEmd 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).uncontracted.sort fun x1 x2 => x1 ≤ x2) =
(Finset.map uncontractedListEmd φsucΛ.uncontracted).sort fun x1 x2 => x1 ≤ x2hf 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ StrictMono ⇑uncontractedListEmd] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).uncontracted.sort fun x1 x2 => x1 ≤ x2) =
(Finset.map uncontractedListEmd φsucΛ.uncontracted).sort fun x1 x2 => x1 ≤ x2hf 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ StrictMono ⇑uncontractedListEmd
congr e_s 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).uncontracted = Finset.map uncontractedListEmd φsucΛ.uncontractedhf 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ StrictMono ⇑uncontractedListEmd
ext a e_s 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin φs.length⊢ a ∈ (φsΛ.join φsucΛ).uncontracted ↔ a ∈ Finset.map uncontractedListEmd φsucΛ.uncontractedhf 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ StrictMono ⇑uncontractedListEmd
simp only [Finset.mem_map] e_s 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin φs.length⊢ a ∈ (φsΛ.join φsucΛ).uncontracted ↔ ∃ a_1 ∈ φsucΛ.uncontracted, uncontractedListEmd a_1 = ahf 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ StrictMono ⇑uncontractedListEmd
apply Iff.intro e_s.mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin φs.length⊢ a ∈ (φsΛ.join φsucΛ).uncontracted → ∃ a_2 ∈ φsucΛ.uncontracted, uncontractedListEmd a_2 = ae_s.mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin φs.length⊢ (∃ a_1 ∈ φsucΛ.uncontracted, uncontractedListEmd a_1 = a) → a ∈ (φsΛ.join φsucΛ).uncontractedhf 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ StrictMono ⇑uncontractedListEmd
· e_s.mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin φs.length⊢ a ∈ (φsΛ.join φsucΛ).uncontracted → ∃ a_2 ∈ φsucΛ.uncontracted, uncontractedListEmd a_2 = a intro h e_s.mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin φs.lengthh:a ∈ (φsΛ.join φsucΛ).uncontracted⊢ ∃ a_1 ∈ φsucΛ.uncontracted, uncontractedListEmd a_1 = a
obtain ⟨a, rfl, ha⟩ := exists_mem_right_uncontracted_of_mem_join_uncontracted _ _ a h e_s.mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin [φsΛ]ᵘᶜ.lengthha:a ∈ φsucΛ.uncontractedh:uncontractedListEmd a ∈ (φsΛ.join φsucΛ).uncontracted⊢ ∃ a_1 ∈ φsucΛ.uncontracted, uncontractedListEmd a_1 = uncontractedListEmd a
use a, ha All goals completed! 🐙
· e_s.mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin φs.length⊢ (∃ a_1 ∈ φsucΛ.uncontracted, uncontractedListEmd a_1 = a) → a ∈ (φsΛ.join φsucΛ).uncontracted intro h e_s.mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin φs.lengthh:∃ a_1 ∈ φsucΛ.uncontracted, uncontractedListEmd a_1 = a⊢ a ∈ (φsΛ.join φsucΛ).uncontracted
obtain ⟨a, ha, rfl⟩ := h e_s.mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin [φsΛ]ᵘᶜ.lengthha:a ∈ φsucΛ.uncontracted⊢ uncontractedListEmd a ∈ (φsΛ.join φsucΛ).uncontracted
exact mem_join_uncontracted_of_mem_right_uncontracted φsΛ φsucΛ a ha All goals completed! 🐙
· hf 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ StrictMono ⇑uncontractedListEmd intro a b h hf 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin [φsΛ]ᵘᶜ.lengthb:Fin [φsΛ]ᵘᶜ.lengthh:a < b⊢ uncontractedListEmd a < uncontractedListEmd b
exact uncontractedListEmd_strictMono h All goals completed! 🐙
lemma join_uncontractedList_get {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) :
((join φsΛ φsucΛ).uncontractedList).get =
φsΛ.uncontractedListEmd ∘ (φsucΛ.uncontractedList).get ∘
(Fin.cast (by 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).uncontractedList.length = φsucΛ.uncontractedList.length rw [join_uncontractedList 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (List.map (⇑uncontractedListEmd) φsucΛ.uncontractedList).length = φsucΛ.uncontractedList.length 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (List.map (⇑uncontractedListEmd) φsucΛ.uncontractedList).length = φsucΛ.uncontractedList.length] 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (List.map (⇑uncontractedListEmd) φsucΛ.uncontractedList).length = φsucΛ.uncontractedList.length; simp All goals completed! 🐙)) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).uncontractedList.get = ⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯
have h1 {n : ℕ} (l1 l2 : List (Fin n)) (h : l1 = l2) :
l1.get = l2.get ∘ Fin.cast (by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthn:ℕl1:List (Fin n)l2:List (Fin n)h:l1 = l2⊢ l1.length = l2.length 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthh1:∀ {n : ℕ} (l1 l2 : List (Fin n)) (h : l1 = l2), l1.get = l2.get ∘ Fin.cast ⋯⊢ (φsΛ.join φsucΛ).uncontractedList.get = ⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯ rw [h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthn:ℕl1:List (Fin n)l2:List (Fin n)h:l1 = l2⊢ l2.length = l2.length All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthh1:∀ {n : ℕ} (l1 l2 : List (Fin n)) (h : l1 = l2), l1.get = l2.get ∘ Fin.cast ⋯⊢ (φsΛ.join φsucΛ).uncontractedList.get = ⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯] All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthh1:∀ {n : ℕ} (l1 l2 : List (Fin n)) (h : l1 = l2), l1.get = l2.get ∘ Fin.cast ⋯⊢ (φsΛ.join φsucΛ).uncontractedList.get = ⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯) := by
subst h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthn:ℕl1:List (Fin n)⊢ l1.get = l1.get ∘ Fin.cast ⋯ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthh1:∀ {n : ℕ} (l1 l2 : List (Fin n)) (h : l1 = l2), l1.get = l2.get ∘ Fin.cast ⋯⊢ (φsΛ.join φsucΛ).uncontractedList.get = ⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯
rfl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthh1:∀ {n : ℕ} (l1 l2 : List (Fin n)) (h : l1 = l2), l1.get = l2.get ∘ Fin.cast ⋯⊢ (φsΛ.join φsucΛ).uncontractedList.get = ⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthh1:∀ {n : ℕ} (l1 l2 : List (Fin n)) (h : l1 = l2), l1.get = l2.get ∘ Fin.cast ⋯⊢ (φsΛ.join φsucΛ).uncontractedList.get = ⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯
conv_lhs => rw [h1 _ _ (join_uncontractedList φsΛ φsucΛ)] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthh1:∀ {n : ℕ} (l1 l2 : List (Fin n)) (h : l1 = l2), l1.get = l2.get ∘ Fin.cast ⋯| (List.map (⇑uncontractedListEmd) φsucΛ.uncontractedList).get ∘ Fin.cast ⋯
ext i 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthh1:∀ {n : ℕ} (l1 l2 : List (Fin n)) (h : l1 = l2), l1.get = l2.get ∘ Fin.cast ⋯i:Fin (φsΛ.join φsucΛ).uncontractedList.length⊢ ↑(((List.map (⇑uncontractedListEmd) φsucΛ.uncontractedList).get ∘ Fin.cast ⋯) i) =
↑((⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯) i)
simp All goals completed! 🐙lemma join_uncontractedListGet {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) :
(join φsΛ φsucΛ).uncontractedListGet = φsucΛ.uncontractedListGet := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ [φsΛ.join φsucΛ]ᵘᶜ = [φsucΛ]ᵘᶜ
simp only [uncontractedListGet, join_uncontractedList, List.map_map, List.map_inj_left,
Function.comp_apply, List.get_eq_getElem, List.getElem_map] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ∀ a ∈ φsucΛ.uncontractedList, φs[↑(uncontractedListEmd a)] = φs[↑φsΛ.uncontractedList[↑a]]
intro a ha 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin (List.map φs.get φsΛ.uncontractedList).lengthha:a ∈ φsucΛ.uncontractedList⊢ φs[↑(uncontractedListEmd a)] = φs[↑φsΛ.uncontractedList[↑a]]
simp only [uncontractedListEmd, uncontractedIndexEquiv, List.get_eq_getElem,
Equiv.trans_toEmbedding] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Fin (List.map φs.get φsΛ.uncontractedList).lengthha:a ∈ φsucΛ.uncontractedList⊢ φs[↑((((finCongr ⋯).toEmbedding.trans
{ toFun := fun i => ⟨φsΛ.uncontractedList[↑i], ⋯⟩,
invFun := fun i => ⟨List.idxOf (↑i) φsΛ.uncontractedList, ⋯⟩, left_inv := ⋯,
right_inv := ⋯ }.toEmbedding).trans
(Function.Embedding.subtype fun x => x ∈ φsΛ.uncontracted))
a)] =
φs[↑φsΛ.uncontractedList[↑a]]
rfl All goals completed! 🐙
lemma join_uncontractedListEmb {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) :
(join φsΛ φsucΛ).uncontractedListEmd =
((finCongr (congrArg List.length (join_uncontractedListGet _ _))).toEmbedding.trans
φsucΛ.uncontractedListEmd).trans φsΛ.uncontractedListEmd := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ uncontractedListEmd = ((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd
refine Function.Embedding.ext_iff.mpr (congrFun ?_) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ ⇑uncontractedListEmd = ⇑(((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd)
change uncontractedListEmd.toFun = _ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ uncontractedListEmd.toFun = ⇑(((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd)
rw [uncontractedListEmd_toFun_eq_get, 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).uncontractedList.get ∘ ⇑(finCongr ⋯) =
⇑(((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯) ∘ ⇑(finCongr ⋯) =
⇑(((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd) join_uncontractedList_get 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯) ∘ ⇑(finCongr ⋯) =
⇑(((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯) ∘ ⇑(finCongr ⋯) =
⇑(((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd)] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.length⊢ (⇑uncontractedListEmd ∘ φsucΛ.uncontractedList.get ∘ Fin.cast ⋯) ∘ ⇑(finCongr ⋯) =
⇑(((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd)
rfl All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
lemma join_assoc {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (φsucΛ' : WickContraction [φsΛ.join φsucΛ]ᵘᶜ.length) :
join (join φsΛ φsucΛ) (φsucΛ') = join φsΛ (join φsucΛ (congr
(congrArg List.length (join_uncontractedListGet _ _)) φsucΛ')) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).join φsucΛ' = φsΛ.join (φsucΛ.join ((congr ⋯) φsucΛ'))
apply Subtype.ext 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.length⊢ ↑((φsΛ.join φsucΛ).join φsucΛ') = ↑(φsΛ.join (φsucΛ.join ((congr ⋯) φsucΛ')))
ext a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)⊢ a ∈ ↑((φsΛ.join φsucΛ).join φsucΛ') ↔ a ∈ ↑(φsΛ.join (φsucΛ.join ((congr ⋯) φsucΛ')))
by_cases ha : a ∈ φsΛ.1 pos 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ a ∈ ↑((φsΛ.join φsucΛ).join φsucΛ') ↔ a ∈ ↑(φsΛ.join (φsucΛ.join ((congr ⋯) φsucΛ')))neg 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛ⊢ a ∈ ↑((φsΛ.join φsucΛ).join φsucΛ') ↔ a ∈ ↑(φsΛ.join (φsucΛ.join ((congr ⋯) φsucΛ')))
· pos 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ a ∈ ↑((φsΛ.join φsucΛ).join φsucΛ') ↔ a ∈ ↑(φsΛ.join (φsucΛ.join ((congr ⋯) φsucΛ'))) simp [ha, join] All goals completed! 🐙
simp only [join, Finset.union_assoc, Finset.mem_union, ha, Finset.mem_map,
RelEmbedding.coe_toEmbedding, false_or] neg 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛ⊢ ((∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = a) ↔
∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = a
apply Iff.intro neg.mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛ⊢ ((∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = a) →
∃ a_2,
(a_2 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_2) ∧
(Finset.mapEmbedding uncontractedListEmd) a_2 = aneg.mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛ⊢ (∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = a) →
(∃ a_2 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_2 = a) ∨
∃ a_2 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_2 = a
· neg.mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛ⊢ ((∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = a) →
∃ a_2,
(a_2 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_2) ∧
(Finset.mapEmbedding uncontractedListEmd) a_2 = a intro h neg.mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛh:(∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ ∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = a
rcases h with h | h neg.mp.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛh:∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ ∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = aneg.mp.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛh:∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ ∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = a
· neg.mp.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛh:∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ ∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = a obtain ⟨a, ha', rfl⟩ := h neg.mp.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha':a ∈ ↑φsucΛha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛ⊢ ∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a
use a h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha':a ∈ ↑φsucΛha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛ⊢ (a ∈ ↑φsucΛ ∨ ∃ a_1 ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a_1 = a) ∧
(Finset.mapEmbedding uncontractedListEmd) a = (Finset.mapEmbedding uncontractedListEmd) a
simp [ha'] All goals completed! 🐙
· neg.mp.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛh:∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ ∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = a obtain ⟨a, ha', rfl⟩ := h neg.mp.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛ⊢ ∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a
let a' := congrLift (congrArg List.length (join_uncontractedListGet _ _)) ⟨a, ha'⟩ neg.mp.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩⊢ ∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a
let a'' := joinLiftRight a' neg.mp.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ ∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a
use a'' h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ (↑a'' ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = ↑a'') ∧
(Finset.mapEmbedding uncontractedListEmd) ↑a'' = (Finset.mapEmbedding uncontractedListEmd) a
apply And.intro h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ ↑a'' ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = ↑a''h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ (Finset.mapEmbedding uncontractedListEmd) ↑a'' = (Finset.mapEmbedding uncontractedListEmd) a
· h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ ↑a'' ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = ↑a'' right h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = ↑a''
use a' h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ ↑a' ∈ ↑((congr ⋯) φsucΛ') ∧ (Finset.mapEmbedding uncontractedListEmd) ↑a' = ↑a''
apply And.intro h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ ↑a' ∈ ↑((congr ⋯) φsucΛ')h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ (Finset.mapEmbedding uncontractedListEmd) ↑a' = ↑a''
· h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ ↑a' ∈ ↑((congr ⋯) φsucΛ') exact a'.2 All goals completed! 🐙
· h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ (Finset.mapEmbedding uncontractedListEmd) ↑a' = ↑a'' simp only [joinLiftRight, a''] h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ (Finset.mapEmbedding uncontractedListEmd) ↑a' = Finset.map uncontractedListEmd ↑a'
rfl All goals completed! 🐙
· h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ (Finset.mapEmbedding uncontractedListEmd) ↑a'' = (Finset.mapEmbedding uncontractedListEmd) a simp only [a''] h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ (Finset.mapEmbedding uncontractedListEmd) ↑(joinLiftRight a') = (Finset.mapEmbedding uncontractedListEmd) a
rw [Finset.mapEmbedding_apply, h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ Finset.map uncontractedListEmd ↑(joinLiftRight a') = (Finset.mapEmbedding uncontractedListEmd) a h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ Finset.map uncontractedListEmd ↑(joinLiftRight a') = Finset.map uncontractedListEmd a Finset.mapEmbedding_apply h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ Finset.map uncontractedListEmd ↑(joinLiftRight a') = Finset.map uncontractedListEmd a h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ Finset.map uncontractedListEmd ↑(joinLiftRight a') = Finset.map uncontractedListEmd a]h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ Finset.map uncontractedListEmd ↑(joinLiftRight a') = Finset.map uncontractedListEmd a
simp only [a', joinLiftRight, congrLift] h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ Finset.map uncontractedListEmd (Finset.map uncontractedListEmd (Finset.map (finCongr ⋯).toEmbedding a)) =
Finset.map uncontractedListEmd a
rw [join_uncontractedListEmb h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ Finset.map uncontractedListEmd (Finset.map uncontractedListEmd (Finset.map (finCongr ⋯).toEmbedding a)) =
Finset.map (((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd) a h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ Finset.map uncontractedListEmd (Finset.map uncontractedListEmd (Finset.map (finCongr ⋯).toEmbedding a)) =
Finset.map (((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd) a]h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [⟨↑φsΛ ∪ Finset.map (Finset.mapEmbedding uncontractedListEmd).toEmbedding ↑φsucΛ, ⋯⟩]ᵘᶜ.length)ha':a ∈ ↑φsucΛ'ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛa':↥↑((congr ⋯) φsucΛ') := congrLift ⋯ ⟨a, ha'⟩a'':↥↑(φsucΛ.join ((congr ⋯) φsucΛ')) := joinLiftRight a'⊢ Finset.map uncontractedListEmd (Finset.map uncontractedListEmd (Finset.map (finCongr ⋯).toEmbedding a)) =
Finset.map (((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd) a
simp [Finset.map_map] All goals completed! 🐙
· neg.mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛ⊢ (∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = a) →
(∃ a_2 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_2 = a) ∨
∃ a_2 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_2 = a intro h neg.mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∉ ↑φsΛh:∃ a_1,
(a_1 ∈ ↑φsucΛ ∨ ∃ a ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a = a_1) ∧
(Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ (∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = a
obtain ⟨a, ha', rfl⟩ := h neg.mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha':a ∈ ↑φsucΛ ∨ ∃ a_1 ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a_1 = aha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛ⊢ (∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a
rcases ha' with ha' | ha' neg.mpr.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛha':a ∈ ↑φsucΛ⊢ (∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) aneg.mpr.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛha':∃ a_1 ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ (∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a
· neg.mpr.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛha':a ∈ ↑φsucΛ⊢ (∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a left neg.mpr.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛha':a ∈ ↑φsucΛ⊢ ∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a
use a All goals completed! 🐙
· neg.mpr.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsΛ]ᵘᶜ.length)ha:(Finset.mapEmbedding uncontractedListEmd) a ∉ ↑φsΛha':∃ a_1 ∈ ↑((congr ⋯) φsucΛ'), (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ (∃ a_1 ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a) ∨
∃ a_1 ∈ ↑φsucΛ', (Finset.mapEmbedding uncontractedListEmd) a_1 = (Finset.mapEmbedding uncontractedListEmd) a obtain ⟨a, ha', rfl⟩ := ha' neg.mpr.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛ⊢ (∃ a_1 ∈ ↑φsucΛ,
(Finset.mapEmbedding uncontractedListEmd) a_1 =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)) ∨
∃ a_1 ∈ ↑φsucΛ',
(Finset.mapEmbedding uncontractedListEmd) a_1 =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)
right neg.mpr.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛ⊢ ∃ a_1 ∈ ↑φsucΛ',
(Finset.mapEmbedding uncontractedListEmd) a_1 =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)
let a' := congrLiftInv _ ⟨a, ha'⟩ neg.mpr.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ ∃ a_1 ∈ ↑φsucΛ',
(Finset.mapEmbedding uncontractedListEmd) a_1 =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)
use a' h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ ↑a' ∈ ↑φsucΛ' ∧
(Finset.mapEmbedding uncontractedListEmd) ↑a' =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)
simp only [Finset.coe_mem, true_and] h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ (Finset.mapEmbedding uncontractedListEmd) ↑a' =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)
simp only [a'] h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ (Finset.mapEmbedding uncontractedListEmd) ↑(congrLiftInv ⋯ ⟨a, ha'⟩) =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)
rw [Finset.mapEmbedding_apply h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map uncontractedListEmd ↑(congrLiftInv ⋯ ⟨a, ha'⟩) =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map uncontractedListEmd ↑(congrLiftInv ⋯ ⟨a, ha'⟩) =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)]h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map uncontractedListEmd ↑(congrLiftInv ⋯ ⟨a, ha'⟩) =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)
rw [join_uncontractedListEmb h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map (((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd) ↑(congrLiftInv ⋯ ⟨a, ha'⟩) =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map (((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd) ↑(congrLiftInv ⋯ ⟨a, ha'⟩) =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)]h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map (((finCongr ⋯).toEmbedding.trans uncontractedListEmd).trans uncontractedListEmd) ↑(congrLiftInv ⋯ ⟨a, ha'⟩) =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)
simp only [congrLiftInv, ← Finset.map_map] h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map uncontractedListEmd
(Finset.map uncontractedListEmd (Finset.map (finCongr ⋯).toEmbedding (Finset.map (finCongr ⋯).toEmbedding a))) =
(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a)
congr h.e_s.e_s 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map (finCongr ⋯).toEmbedding (Finset.map (finCongr ⋯).toEmbedding a) = a
rw [Finset.map_map h.e_s.e_s 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a = a h.e_s.e_s 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a = a]h.e_s.e_s 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map ((finCongr ⋯).toEmbedding.trans (finCongr ⋯).toEmbedding) a = a
change Finset.map (Equiv.refl _).toEmbedding a = _ h.e_s.e_s 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthφsucΛ':WickContraction [φsΛ.join φsucΛ]ᵘᶜ.lengtha:Finset (Fin [φsucΛ]ᵘᶜ.length)ha':a ∈ ↑((congr ⋯) φsucΛ')ha:(Finset.mapEmbedding uncontractedListEmd) ((Finset.mapEmbedding uncontractedListEmd) a) ∉ ↑φsΛa':↥↑φsucΛ' := congrLiftInv ⋯ ⟨a, ha'⟩⊢ Finset.map (Equiv.refl (Fin [φsucΛ]ᵘᶜ.length)).toEmbedding a = a
simp only [Equiv.refl_toEmbedding, Finset.map_refl] All goals completed! 🐙
lemma join_getDual?_apply_uncontractedListEmb_eq_none_iff {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (i : Fin [φsΛ]ᵘᶜ.length) :
(join φsΛ φsucΛ).getDual? (uncontractedListEmd i) = none
↔ φsucΛ.getDual? i = none := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).getDual? (uncontractedListEmd i) = none ↔ φsucΛ.getDual? i = none
rw [getDual?_eq_none_iff_mem_uncontracted, 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted ↔ φsucΛ.getDual? i = none 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted ↔ i ∈ φsucΛ.uncontracted getDual?_eq_none_iff_mem_uncontracted 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted ↔ i ∈ φsucΛ.uncontracted 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted ↔ i ∈ φsucΛ.uncontracted] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted ↔ i ∈ φsucΛ.uncontracted
apply Iff.intro mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted → i ∈ φsucΛ.uncontractedmpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ i ∈ φsucΛ.uncontracted → uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted
· mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted → i ∈ φsucΛ.uncontracted intro h mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted⊢ i ∈ φsucΛ.uncontracted
obtain ⟨a, ha', ha⟩ := exists_mem_right_uncontracted_of_mem_join_uncontracted _ _
(uncontractedListEmd i) h mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracteda:Fin [φsΛ]ᵘᶜ.lengthha':uncontractedListEmd a = uncontractedListEmd iha:a ∈ φsucΛ.uncontracted⊢ i ∈ φsucΛ.uncontracted
simp only [EmbeddingLike.apply_eq_iff_eq] at ha' mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracteda:Fin [φsΛ]ᵘᶜ.lengthha:a ∈ φsucΛ.uncontractedha':a = i⊢ i ∈ φsucΛ.uncontracted
exact ha' ▸ ha All goals completed! 🐙
· mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ i ∈ φsucΛ.uncontracted → uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted intro h mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:i ∈ φsucΛ.uncontracted⊢ uncontractedListEmd i ∈ (φsΛ.join φsucΛ).uncontracted
exact mem_join_uncontracted_of_mem_right_uncontracted φsΛ φsucΛ i h All goals completed! 🐙
lemma join_getDual?_apply_uncontractedListEmb_isSome_iff {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (i : Fin [φsΛ]ᵘᶜ.length) :
((join φsΛ φsucΛ).getDual? (uncontractedListEmd i)).isSome
↔ (φsucΛ.getDual? i).isSome := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ ((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true ↔ (φsucΛ.getDual? i).isSome = true
rw [← Decidable.not_iff_not 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ ¬((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true ↔ ¬(φsucΛ.getDual? i).isSome = true 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ ¬((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true ↔ ¬(φsucΛ.getDual? i).isSome = true] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ ¬((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true ↔ ¬(φsucΛ.getDual? i).isSome = true
simp [join_getDual?_apply_uncontractedListEmb_eq_none_iff] All goals completed! 🐙
lemma join_getDual?_apply_uncontractedListEmb_some {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length)
(φsucΛ : WickContraction [φsΛ]ᵘᶜ.length) (i : Fin [φsΛ]ᵘᶜ.length)
(hi :((join φsΛ φsucΛ).getDual? (uncontractedListEmd i)).isSome) :
((join φsΛ φsucΛ).getDual? (uncontractedListEmd i)) =
some (uncontractedListEmd ((φsucΛ.getDual? i).get (by 𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ (φsucΛ.getDual? i).isSome = true
simpa [join_getDual?_apply_uncontractedListEmb_isSome_iff]using hi All goals completed! 🐙))) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ (φsΛ.join φsucΛ).getDual? (uncontractedListEmd i) = some (uncontractedListEmd ((φsucΛ.getDual? i).get ⋯))
rw [getDual?_eq_some_iff_mem 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ {uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)} ∈ ↑(φsΛ.join φsucΛ) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ {uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)} ∈ ↑(φsΛ.join φsucΛ)] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ {uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)} ∈ ↑(φsΛ.join φsucΛ)
simp only [join, Finset.mem_union, Finset.mem_map,
RelEmbedding.coe_toEmbedding] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ {uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)} ∈ ↑φsΛ ∨
∃ a ∈ ↑φsucΛ,
(Finset.mapEmbedding uncontractedListEmd) a =
{uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)}
right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ ∃ a ∈ ↑φsucΛ,
(Finset.mapEmbedding uncontractedListEmd) a = {uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)}
use {i, (φsucΛ.getDual? i).get (by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ (φsucΛ.getDual? i).isSome = true
simpa [join_getDual?_apply_uncontractedListEmb_isSome_iff] using hi All goals completed! 🐙)}
simp only [self_getDual?_get_mem, true_and] h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ (Finset.mapEmbedding uncontractedListEmd) {i, (φsucΛ.getDual? i).get ⋯} =
{uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)}
rw [Finset.mapEmbedding_apply h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ Finset.map uncontractedListEmd {i, (φsucΛ.getDual? i).get ⋯} =
{uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)} h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ Finset.map uncontractedListEmd {i, (φsucΛ.getDual? i).get ⋯} =
{uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)}]h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthhi:((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true⊢ Finset.map uncontractedListEmd {i, (φsucΛ.getDual? i).get ⋯} =
{uncontractedListEmd i, uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)}
simp All goals completed! 🐙
@[simp]
lemma join_getDual?_apply_uncontractedListEmb {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length) (φsucΛ : WickContraction [φsΛ]ᵘᶜ.length)
(i : Fin [φsΛ]ᵘᶜ.length) : ((join φsΛ φsucΛ).getDual? (uncontractedListEmd i)) =
Option.map uncontractedListEmd (φsucΛ.getDual? i) := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.length⊢ (φsΛ.join φsucΛ).getDual? (uncontractedListEmd i) = Option.map (⇑uncontractedListEmd) (φsucΛ.getDual? i)
by_cases h : (φsucΛ.getDual? i).isSome pos 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true⊢ (φsΛ.join φsucΛ).getDual? (uncontractedListEmd i) = Option.map (⇑uncontractedListEmd) (φsucΛ.getDual? i)neg 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:¬(φsucΛ.getDual? i).isSome = true⊢ (φsΛ.join φsucΛ).getDual? (uncontractedListEmd i) = Option.map (⇑uncontractedListEmd) (φsucΛ.getDual? i)
· pos 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true⊢ (φsΛ.join φsucΛ).getDual? (uncontractedListEmd i) = Option.map (⇑uncontractedListEmd) (φsucΛ.getDual? i) rw [join_getDual?_apply_uncontractedListEmb_some pos 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true⊢ some (uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)) = Option.map (⇑uncontractedListEmd) (φsucΛ.getDual? i)pos.hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true⊢ ((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true pos 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true⊢ some (uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)) = Option.map (⇑uncontractedListEmd) (φsucΛ.getDual? i)pos.hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true⊢ ((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true] pos 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true⊢ some (uncontractedListEmd ((φsucΛ.getDual? i).get ⋯)) = Option.map (⇑uncontractedListEmd) (φsucΛ.getDual? i)pos.hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true⊢ ((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true
conv_rhs => rw [← Option.some_get h] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true| Option.map (⇑uncontractedListEmd) (some ((φsucΛ.getDual? i).get h))
simp only [Option.map_some] pos.hi 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:(φsucΛ.getDual? i).isSome = true⊢ ((φsΛ.join φsucΛ).getDual? (uncontractedListEmd i)).isSome = true
exact (join_getDual?_apply_uncontractedListEmb_isSome_iff φsΛ φsucΛ i).mpr h All goals completed! 🐙
· neg 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:¬(φsucΛ.getDual? i).isSome = true⊢ (φsΛ.join φsucΛ).getDual? (uncontractedListEmd i) = Option.map (⇑uncontractedListEmd) (φsucΛ.getDual? i) simp only [Bool.not_eq_true, Option.isSome_eq_false_iff, Option.isNone_iff_eq_none] at h neg 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthi:Fin [φsΛ]ᵘᶜ.lengthh:φsucΛ.getDual? i = none⊢ (φsΛ.join φsucΛ).getDual? (uncontractedListEmd i) = Option.map (⇑uncontractedListEmd) (φsucΛ.getDual? i)
simp [h, join_getDual?_apply_uncontractedListEmb_eq_none_iff] All goals completed! 🐙Subcontractions and quotient contractions
lemma join_sub_quot (S : Finset (Finset (Fin φs.length))) (ha : S ⊆ φsΛ.1) :
join (subContraction S ha) (quotContraction S ha) = φsΛ := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ (subContraction S ha).join (quotContraction S ha) = φsΛ
apply Subtype.ext 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ ↑((subContraction S ha).join (quotContraction S ha)) = ↑φsΛ
ext a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)⊢ a ∈ ↑((subContraction S ha).join (quotContraction S ha)) ↔ a ∈ ↑φsΛ
simp only [join, Finset.mem_union, Finset.mem_map,
RelEmbedding.coe_toEmbedding] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)⊢ (a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a) ↔
a ∈ ↑φsΛ
apply Iff.intro mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)⊢ (a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a) →
a ∈ ↑φsΛmpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)⊢ a ∈ ↑φsΛ →
a ∈ ↑(subContraction S ha) ∨ ∃ a_2 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_2 = a
· mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)⊢ (a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a) →
a ∈ ↑φsΛ intro h mp 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ a ∈ ↑φsΛ
rcases h with h | h mp.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑(subContraction S ha)⊢ a ∈ ↑φsΛmp.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ a ∈ ↑φsΛ
· mp.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑(subContraction S ha)⊢ a ∈ ↑φsΛ exact mem_of_mem_subContraction h All goals completed! 🐙
· mp.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a⊢ a ∈ ↑φsΛ obtain ⟨a, ha, rfl⟩ := h mp.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha✝]ᵘᶜ.length)ha:a ∈ ↑(quotContraction S ha✝)⊢ (Finset.mapEmbedding uncontractedListEmd) a ∈ ↑φsΛ
apply mem_of_mem_quotContraction ha All goals completed! 🐙
· mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)⊢ a ∈ ↑φsΛ →
a ∈ ↑(subContraction S ha) ∨ ∃ a_2 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_2 = a intro h mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑φsΛ⊢ a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a
have h1 := mem_subContraction_or_quotContraction (S := S) (a := a) (hs := ha) h mpr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑φsΛh1:a ∈ ↑(subContraction S ha) ∨ ∃ a', Finset.map uncontractedListEmd a' = a ∧ a' ∈ ↑(quotContraction S ha)⊢ a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a
rcases h1 with h1 | h1 mpr.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑φsΛh1:a ∈ ↑(subContraction S ha)⊢ a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = ampr.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑φsΛh1:∃ a', Finset.map uncontractedListEmd a' = a ∧ a' ∈ ↑(quotContraction S ha)⊢ a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a
· mpr.inl 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑φsΛh1:a ∈ ↑(subContraction S ha)⊢ a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a simp [h1] All goals completed! 🐙
· mpr.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑φsΛh1:∃ a', Finset.map uncontractedListEmd a' = a ∧ a' ∈ ↑(quotContraction S ha)⊢ a ∈ ↑(subContraction S ha) ∨ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a right mpr.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin φs.length)h:a ∈ ↑φsΛh1:∃ a', Finset.map uncontractedListEmd a' = a ∧ a' ∈ ↑(quotContraction S ha)⊢ ∃ a_1 ∈ ↑(quotContraction S ha), (Finset.mapEmbedding uncontractedListEmd) a_1 = a
obtain ⟨a, rfl, ha⟩ := h1 mpr.inr 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha✝]ᵘᶜ.length)ha:a ∈ ↑(quotContraction S ha✝)h:Finset.map uncontractedListEmd a ∈ ↑φsΛ⊢ ∃ a_1 ∈ ↑(quotContraction S ha✝), (Finset.mapEmbedding uncontractedListEmd) a_1 = Finset.map uncontractedListEmd a
exact ⟨a, ha, Finset.mapEmbedding_apply⟩ All goals completed! 🐙
lemma subContraction_card_plus_quotContraction_card_eq (S : Finset (Finset (Fin φs.length)))
(ha : S ⊆ φsΛ.1) :
(subContraction S ha).1.card + (quotContraction S ha).1.card = φsΛ.1.card := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ (↑(subContraction S ha)).card + (↑(quotContraction S ha)).card = (↑φsΛ).card
rw [← join_card 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ (↑((subContraction S ha).join (quotContraction S ha))).card = (↑φsΛ).card 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ (↑((subContraction S ha).join (quotContraction S ha))).card = (↑φsΛ).card] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ (↑((subContraction S ha).join (quotContraction S ha))).card = (↑φsΛ).card
simp [join_sub_quot] All goals completed! 🐙
@[simp]
lemma join_singleton_getDual?_left {φs : List 𝓕.FieldOp}
{i j : Fin φs.length} (h : i < j)
(φsucΛ : WickContraction [singleton h]ᵘᶜ.length) :
(join (singleton h) φsucΛ).getDual? i = some j := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ ((singleton h).join φsucΛ).getDual? i = some j
rw [@getDual?_eq_some_iff_mem 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ {i, j} ∈ ↑((singleton h).join φsucΛ) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ {i, j} ∈ ↑((singleton h).join φsucΛ)] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ {i, j} ∈ ↑((singleton h).join φsucΛ)
simp [singleton, join] All goals completed! 🐙
@[simp]
lemma join_singleton_getDual?_right {φs : List 𝓕.FieldOp}
{i j : Fin φs.length} (h : i < j)
(φsucΛ : WickContraction [singleton h]ᵘᶜ.length) :
(join (singleton h) φsucΛ).getDual? j = some i := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ ((singleton h).join φsucΛ).getDual? j = some i
rw [@getDual?_eq_some_iff_mem 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ {j, i} ∈ ↑((singleton h).join φsucΛ) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ {j, i} ∈ ↑((singleton h).join φsucΛ)] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ {j, i} ∈ ↑((singleton h).join φsucΛ)
simp only [join, singleton, Finset.mem_union, Finset.mem_singleton,
Finset.mem_map, RelEmbedding.coe_toEmbedding] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ {j, i} = {i, j} ∨ ∃ a ∈ ↑φsucΛ, (Finset.mapEmbedding uncontractedListEmd) a = {j, i}
left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpi:Fin φs.lengthj:Fin φs.lengthh:i < jφsucΛ:WickContraction [singleton h]ᵘᶜ.length⊢ {j, i} = {i, j}
exact Finset.pair_comm j i All goals completed! 🐙lemma exists_contraction_pair_of_card_ge_zero {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length) (h : 0 < φsΛ.1.card) :
∃ a, a ∈ φsΛ.1 :=
Finset.card_pos.mp h
set_option backward.isDefEq.respectTransparency false in
set_option maxHeartbeats 400000 in
lemma exists_join_singleton_of_card_ge_zero {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length)
(h : 0 < φsΛ.1.card) (hc : φsΛ.GradingCompliant) :
∃ (i j : Fin φs.length) (h : i < j) (φsucΛ : WickContraction [singleton h]ᵘᶜ.length),
φsΛ = join (singleton h) φsucΛ ∧ (𝓕 |>ₛ φs[i]) = (𝓕 |>ₛ φs[j])
∧ φsucΛ.GradingCompliant ∧ φsucΛ.1.card + 1 = φsΛ.1.card := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛ⊢ ∃ i j,
∃ (h : i < j),
∃ φsucΛ,
φsΛ = (singleton h).join φsucΛ ∧
((𝓕|>ₛφs[i]) = 𝓕|>ₛφs[j]) ∧ GradingCompliant [singleton h]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
obtain ⟨a, ha⟩ := exists_contraction_pair_of_card_ge_zero φsΛ h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ ∃ i j,
∃ (h : i < j),
∃ φsucΛ,
φsΛ = (singleton h).join φsucΛ ∧
((𝓕|>ₛφs[i]) = 𝓕|>ₛφs[j]) ∧ GradingCompliant [singleton h]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
use φsΛ.fstFieldOfContract ⟨a, ha⟩ h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ ∃ j,
∃ (h : φsΛ.fstFieldOfContract ⟨a, ha⟩ < j),
∃ φsucΛ,
φsΛ = (singleton h).join φsucΛ ∧
((𝓕|>ₛφs[φsΛ.fstFieldOfContract ⟨a, ha⟩]) = 𝓕|>ₛφs[j]) ∧
GradingCompliant [singleton h]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
use φsΛ.sndFieldOfContract ⟨a, ha⟩ h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ ∃ (h : φsΛ.fstFieldOfContract ⟨a, ha⟩ < φsΛ.sndFieldOfContract ⟨a, ha⟩),
∃ φsucΛ,
φsΛ = (singleton h).join φsucΛ ∧
((𝓕|>ₛφs[φsΛ.fstFieldOfContract ⟨a, ha⟩]) = 𝓕|>ₛφs[φsΛ.sndFieldOfContract ⟨a, ha⟩]) ∧
GradingCompliant [singleton h]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
use φsΛ.fstFieldOfContract_lt_sndFieldOfContract ⟨a, ha⟩ h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ ∃ φsucΛ,
φsΛ = (singleton ⋯).join φsucΛ ∧
((𝓕|>ₛφs[φsΛ.fstFieldOfContract ⟨a, ha⟩]) = 𝓕|>ₛφs[φsΛ.sndFieldOfContract ⟨a, ha⟩]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
let φsucΛ :
WickContraction [singleton (φsΛ.fstFieldOfContract_lt_sndFieldOfContract ⟨a, ha⟩)]ᵘᶜ.length :=
congr (by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ [subContraction {a} ?m.139]ᵘᶜ.length = [singleton ⋯]ᵘᶜ.length h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ ∃ φsucΛ,
φsΛ = (singleton ⋯).join φsucΛ ∧
((𝓕|>ₛφs[φsΛ.fstFieldOfContract ⟨a, ha⟩]) = 𝓕|>ₛφs[φsΛ.sndFieldOfContract ⟨a, ha⟩]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card simp [← subContraction_singleton_eq_singleton] All goals completed! 🐙 h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ ∃ φsucΛ,
φsΛ = (singleton ⋯).join φsucΛ ∧
((𝓕|>ₛφs[φsΛ.fstFieldOfContract ⟨a, ha⟩]) = 𝓕|>ₛφs[φsΛ.sndFieldOfContract ⟨a, ha⟩]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card)
(φsΛ.quotContraction {a} (by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛ⊢ {a} ⊆ ↑φsΛh 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ ∃ φsucΛ,
φsΛ = (singleton ⋯).join φsucΛ ∧
((𝓕|>ₛφs[φsΛ.fstFieldOfContract ⟨a, ha⟩]) = 𝓕|>ₛφs[φsΛ.sndFieldOfContract ⟨a, ha⟩]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card simpa using ha All goals completed! 🐙h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ ∃ φsucΛ,
φsΛ = (singleton ⋯).join φsucΛ ∧
((𝓕|>ₛφs[φsΛ.fstFieldOfContract ⟨a, ha⟩]) = 𝓕|>ₛφs[φsΛ.sndFieldOfContract ⟨a, ha⟩]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card))h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ ∃ φsucΛ,
φsΛ = (singleton ⋯).join φsucΛ ∧
((𝓕|>ₛφs[φsΛ.fstFieldOfContract ⟨a, ha⟩]) = 𝓕|>ₛφs[φsΛ.sndFieldOfContract ⟨a, ha⟩]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
use φsucΛ h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ φsΛ = (singleton ⋯).join φsucΛ ∧
((𝓕|>ₛφs[φsΛ.fstFieldOfContract ⟨a, ha⟩]) = 𝓕|>ₛφs[φsΛ.sndFieldOfContract ⟨a, ha⟩]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
simp only [Fin.getElem_fin] h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ φsΛ = (singleton ⋯).join φsucΛ ∧
((𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨a, ha⟩)]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
apply And.intro h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ φsΛ = (singleton ⋯).join φsucΛh.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ ((𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨a, ha⟩)]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
· h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ φsΛ = (singleton ⋯).join φsucΛ have h1 := join_congr (subContraction_singleton_eq_singleton _ ⟨a, ha⟩).symm (φsucΛ := φsucΛ) h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)h1:(singleton ⋯).join φsucΛ = (subContraction {↑⟨a, ha⟩} ⋯).join ((congr ⋯) φsucΛ)⊢ φsΛ = (singleton ⋯).join φsucΛ
simp only [h1, congr_trans_apply, congr_refl, φsucΛ] h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)h1:(singleton ⋯).join φsucΛ = (subContraction {↑⟨a, ha⟩} ⋯).join ((congr ⋯) φsucΛ)⊢ φsΛ = (subContraction {a} ⋯).join (quotContraction {a} ⋯)
rw [join_sub_quot h.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)h1:(singleton ⋯).join φsucΛ = (subContraction {↑⟨a, ha⟩} ⋯).join ((congr ⋯) φsucΛ)⊢ φsΛ = φsΛ All goals completed! 🐙] All goals completed! 🐙
· h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ ((𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨a, ha⟩)]) ∧
GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card apply And.intro (hc ⟨a, ha⟩) h.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ ∧ (↑φsucΛ).card + 1 = (↑φsΛ).card
apply And.intro h.right.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ GradingCompliant [singleton ⋯]ᵘᶜ φsucΛh.right.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ (↑φsucΛ).card + 1 = (↑φsΛ).card
· h.right.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ GradingCompliant [singleton ⋯]ᵘᶜ φsucΛ simp only [φsucΛ] h.right.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ GradingCompliant [singleton ⋯]ᵘᶜ ((congr ⋯) (quotContraction {a} ⋯))
rw [gradingCompliant_congr (φs' := [(φsΛ.subContraction {a} (by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ {a} ⊆ ↑φsΛ h.right.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ GradingCompliant [subContraction {a} ⋯]ᵘᶜ ((congr ⋯) ((congr ⋯) (quotContraction {a} ⋯)))h.right.left.h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ [singleton ⋯]ᵘᶜ = [subContraction {a} ⋯]ᵘᶜ simpa using ha All goals completed! 🐙h.right.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ GradingCompliant [subContraction {a} ⋯]ᵘᶜ ((congr ⋯) ((congr ⋯) (quotContraction {a} ⋯)))h.right.left.h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ [singleton ⋯]ᵘᶜ = [subContraction {a} ⋯]ᵘᶜ))]ᵘᶜ)]h.right.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ GradingCompliant [subContraction {a} ⋯]ᵘᶜ ((congr ⋯) ((congr ⋯) (quotContraction {a} ⋯)))h.right.left.h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ [singleton ⋯]ᵘᶜ = [subContraction {a} ⋯]ᵘᶜ
simp only [congr_trans_apply, congr_refl] h.right.left 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ GradingCompliant [subContraction {a} ⋯]ᵘᶜ (quotContraction {a} ⋯)h.right.left.h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ [singleton ⋯]ᵘᶜ = [subContraction {a} ⋯]ᵘᶜ
exact quotContraction_gradingCompliant hc h.right.left.h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ [singleton ⋯]ᵘᶜ = [subContraction {a} ⋯]ᵘᶜ
rw [← subContraction_singleton_eq_singleton h.right.left.h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ [subContraction {↑⟨a, ha⟩} ⋯]ᵘᶜ = [subContraction {a} ⋯]ᵘᶜ All goals completed! 🐙] All goals completed! 🐙
· h.right.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ (↑φsucΛ).card + 1 = (↑φsΛ).card simp only [card_congr, φsucΛ] h.right.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ (↑(quotContraction {a} ⋯)).card + 1 = (↑φsΛ).card
have h1 := subContraction_card_plus_quotContraction_card_eq _ {a} (by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)⊢ {a} ⊆ ↑?m.225 h.right.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)h1:(↑(subContraction {a} ⋯)).card + (↑(quotContraction {a} ⋯)).card = (↑φsΛ).card⊢ (↑(quotContraction {a} ⋯)).card + 1 = (↑φsΛ).card simpa using ha All goals completed! 🐙h.right.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)h1:(↑(subContraction {a} ⋯)).card + (↑(quotContraction {a} ⋯)).card = (↑φsΛ).card⊢ (↑(quotContraction {a} ⋯)).card + 1 = (↑φsΛ).card)h.right.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)h1:(↑(subContraction {a} ⋯)).card + (↑(quotContraction {a} ⋯)).card = (↑φsΛ).card⊢ (↑(quotContraction {a} ⋯)).card + 1 = (↑φsΛ).card
simp only [subContraction, Finset.card_singleton] at h1 h.right.right 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthh:0 < (↑φsΛ).cardhc:GradingCompliant φs φsΛa:Finset (Fin φs.length)ha:a ∈ ↑φsΛφsucΛ:WickContraction [singleton ⋯]ᵘᶜ.length := (congr ⋯) (quotContraction {a} ⋯)h1:1 + (↑(quotContraction {a} ⋯)).card = (↑φsΛ).card⊢ (↑(quotContraction {a} ⋯)).card + 1 = (↑φsΛ).card
omega All goals completed! 🐙lemma join_not_gradingCompliant_of_left_not_gradingCompliant {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length) (φsucΛ : WickContraction [φsΛ]ᵘᶜ.length)
(hc : ¬ φsΛ.GradingCompliant) : ¬ (join φsΛ φsucΛ).GradingCompliant := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthhc:¬GradingCompliant φs φsΛ⊢ ¬GradingCompliant φs (φsΛ.join φsucΛ)
simp_all only [GradingCompliant, Subtype.forall, not_forall] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengthhc:∃ x, ∃ (x_1 : x ∈ ↑φsΛ), ¬(𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨x, x_1⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨x, x_1⟩)]⊢ ∃ x,
∃ (x_1 : x ∈ ↑(φsΛ.join φsucΛ)),
¬(𝓕|>ₛφs[↑((φsΛ.join φsucΛ).fstFieldOfContract ⟨x, x_1⟩)]) = 𝓕|>ₛφs[↑((φsΛ.join φsucΛ).sndFieldOfContract ⟨x, x_1⟩)]
obtain ⟨a, ha, ha2⟩ := hc 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛha2:¬(𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨a, ha⟩)]⊢ ∃ x,
∃ (x_1 : x ∈ ↑(φsΛ.join φsucΛ)),
¬(𝓕|>ₛφs[↑((φsΛ.join φsucΛ).fstFieldOfContract ⟨x, x_1⟩)]) = 𝓕|>ₛφs[↑((φsΛ.join φsucΛ).sndFieldOfContract ⟨x, x_1⟩)]
use (joinLiftLeft (φsucΛ := φsucΛ) ⟨a, ha⟩).1 h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛha2:¬(𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨a, ha⟩)]⊢ ∃ (x : ↑(joinLiftLeft ⟨a, ha⟩) ∈ ↑(φsΛ.join φsucΛ)),
¬(𝓕|>ₛφs[↑((φsΛ.join φsucΛ).fstFieldOfContract ⟨↑(joinLiftLeft ⟨a, ha⟩), x⟩)]) =
𝓕|>ₛφs[↑((φsΛ.join φsucΛ).sndFieldOfContract ⟨↑(joinLiftLeft ⟨a, ha⟩), x⟩)]
use (joinLiftLeft (φsucΛ := φsucΛ) ⟨a, ha⟩).2 h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛha2:¬(𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨a, ha⟩)]⊢ ¬(𝓕|>ₛφs[↑((φsΛ.join φsucΛ).fstFieldOfContract ⟨↑(joinLiftLeft ⟨a, ha⟩), ⋯⟩)]) =
𝓕|>ₛφs[↑((φsΛ.join φsucΛ).sndFieldOfContract ⟨↑(joinLiftLeft ⟨a, ha⟩), ⋯⟩)]
simp only [Subtype.coe_eta, join_fstFieldOfContract_joinLiftLeft,
join_sndFieldOfContract_joinLift] h 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthφsucΛ:WickContraction [φsΛ]ᵘᶜ.lengtha:Finset (Fin φs.length)ha:a ∈ ↑φsΛha2:¬(𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨a, ha⟩)]⊢ ¬(𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨a, ha⟩)]
exact ha2 All goals completed! 🐙