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.UncontractedList

Sub contractions

@[expose] public section

Given a Wick contraction φsΛ, and a subset of φsΛ.1, the Wick contraction consisting of contracted pairs within that subset.

def subContraction (S : Finset (Finset (Fin φs.length))) (ha : S ⊆ φsΛ.1) : WickContraction φs.length := ⟨S, 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ ∀ a ∈ S, a.card = 2 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛi:Finset (Fin φs.length)hi:i ∈ S⊢ i.card = 2 All goals completed! 🐙, 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ ∀ a ∈ S, ∀ b ∈ S, a = b ∨ Disjoint a b 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛi:Finset (Fin φs.length)hi:i ∈ Sj:Finset (Fin φs.length)hj:j ∈ S⊢ i = j ∨ Disjoint i j All goals completed! 🐙⟩
lemma mem_of_mem_subContraction {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1} {a : Finset (Fin φs.length)} (ha : a ∈ (φsΛ.subContraction S hs).1) : a ∈ φsΛ.1 := 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin φs.length)ha:a ∈ ↑(subContraction S hs)⊢ a ∈ ↑φsΛ All goals completed! 🐙

Given a Wick contraction φsΛ, and a subset S of φsΛ.1, the Wick contraction on the uncontracted list [φsΛ.subContraction S ha]ᵘᶜ consisting of the remaining contracted pairs of φsΛ not in S.

def quotContraction (S : Finset (Finset (Fin φs.length))) (ha : S ⊆ φsΛ.1) : WickContraction [φsΛ.subContraction S ha]ᵘᶜ.length := ⟨Finset.filter (fun a => Finset.map uncontractedListEmd a ∈ φsΛ.1) Finset.univ, 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ ∀ a ∈ {a | Finset.map uncontractedListEmd a ∈ ↑φsΛ}, a.card = 2 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha':a ∈ {a | Finset.map uncontractedListEmd a ∈ ↑φsΛ}⊢ a.card = 2 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha':Finset.map uncontractedListEmd a ∈ ↑φsΛ⊢ a.card = 2 All goals completed! 🐙, 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha:S ⊆ ↑φsΛ⊢ ∀ a ∈ {a | Finset.map uncontractedListEmd a ∈ ↑φsΛ}, ∀ b ∈ {a | Finset.map uncontractedListEmd a ∈ ↑φsΛ}, a = b ∨ Disjoint a b 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha:a ∈ {a | Finset.map uncontractedListEmd a ∈ ↑φsΛ}b:Finset (Fin [subContraction S ha]ᵘᶜ.length)hb:b ∈ {a | Finset.map uncontractedListEmd a ∈ ↑φsΛ}⊢ a = b ∨ Disjoint a b 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)b:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha:Finset.map uncontractedListEmd a ∈ ↑φsΛhb:Finset.map uncontractedListEmd b ∈ ↑φsΛ⊢ a = b ∨ Disjoint a b 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)b:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha:Finset.map uncontractedListEmd a ∈ ↑φsΛhb:Finset.map uncontractedListEmd b ∈ ↑φsΛhab:a = b⊢ a = b ∨ Disjoint a b𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)b:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha:Finset.map uncontractedListEmd a ∈ ↑φsΛhb:Finset.map uncontractedListEmd b ∈ ↑φsΛhab:¬a = b⊢ a = b ∨ Disjoint a b 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)b:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha:Finset.map uncontractedListEmd a ∈ ↑φsΛhb:Finset.map uncontractedListEmd b ∈ ↑φsΛhab:a = b⊢ a = b ∨ Disjoint a b All goals completed! 🐙 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)b:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha:Finset.map uncontractedListEmd a ∈ ↑φsΛhb:Finset.map uncontractedListEmd b ∈ ↑φsΛhab:¬a = b⊢ a = b ∨ Disjoint a b 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)b:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha:Finset.map uncontractedListEmd a ∈ ↑φsΛhb:Finset.map uncontractedListEmd b ∈ ↑φsΛhab:¬a = b⊢ Disjoint a b 𝓕:FieldSpecificationn:ℕφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))ha✝:S ⊆ ↑φsΛa:Finset (Fin [subContraction S ha]ᵘᶜ.length)b:Finset (Fin [subContraction S ha]ᵘᶜ.length)ha:Finset.map uncontractedListEmd a ∈ ↑φsΛhb:Finset.map uncontractedListEmd b ∈ ↑φsΛhab:¬a = bhx:Finset.map uncontractedListEmd a = Finset.map uncontractedListEmd b ∨ Disjoint (Finset.map uncontractedListEmd a) (Finset.map uncontractedListEmd b)⊢ Disjoint a b All goals completed! 🐙⟩
lemma mem_of_mem_quotContraction {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1} {a : Finset (Fin [φsΛ.subContraction S hs]ᵘᶜ.length)} (ha : a ∈ (quotContraction S hs).1) : Finset.map uncontractedListEmd a ∈ φsΛ.1 := 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)ha:a ∈ ↑(quotContraction S hs)⊢ Finset.map uncontractedListEmd a ∈ ↑φsΛ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)ha:Finset.map uncontractedListEmd a ∈ ↑φsΛ⊢ Finset.map uncontractedListEmd a ∈ ↑φsΛ All goals completed! 🐙𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛi:Fin φs.lengthj:Fin φs.lengthhij:i ≠ jha:{i, j} ∈ ↑φsΛh1:{i, j} ∉ Shi:i ∈ (subContraction S hs).uncontractedhj:j ∈ (subContraction S hs).uncontracted⊢ ∃ a', Finset.map uncontractedListEmd a' = {i, j} ∧ a' ∈ ↑(quotContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛj:Fin φs.lengthhj:j ∈ (subContraction S hs).uncontractedi:Fin [subContraction S hs]ᵘᶜ.lengthhij:uncontractedListEmd i ≠ jha:{uncontractedListEmd i, j} ∈ ↑φsΛh1:{uncontractedListEmd i, j} ∉ Shi:uncontractedListEmd i ∈ (subContraction S hs).uncontracted⊢ ∃ a', Finset.map uncontractedListEmd a' = {uncontractedListEmd i, j} ∧ a' ∈ ↑(quotContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛi:Fin [subContraction S hs]ᵘᶜ.lengthhi:uncontractedListEmd i ∈ (subContraction S hs).uncontractedj:Fin [subContraction S hs]ᵘᶜ.lengthhj:uncontractedListEmd j ∈ (subContraction S hs).uncontractedhij:uncontractedListEmd i ≠ uncontractedListEmd jha:{uncontractedListEmd i, uncontractedListEmd j} ∈ ↑φsΛh1:{uncontractedListEmd i, uncontractedListEmd j} ∉ S⊢ ∃ a', Finset.map uncontractedListEmd a' = {uncontractedListEmd i, uncontractedListEmd j} ∧ a' ∈ ↑(quotContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛi:Fin [subContraction S hs]ᵘᶜ.lengthhi:uncontractedListEmd i ∈ (subContraction S hs).uncontractedj:Fin [subContraction S hs]ᵘᶜ.lengthhj:uncontractedListEmd j ∈ (subContraction S hs).uncontractedhij:uncontractedListEmd i ≠ uncontractedListEmd jha:{uncontractedListEmd i, uncontractedListEmd j} ∈ ↑φsΛh1:{uncontractedListEmd i, uncontractedListEmd j} ∉ S⊢ Finset.map uncontractedListEmd {i, j} = {uncontractedListEmd i, uncontractedListEmd j} ∧ {i, j} ∈ ↑(quotContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛi:Fin [subContraction S hs]ᵘᶜ.lengthhi:uncontractedListEmd i ∈ (subContraction S hs).uncontractedj:Fin [subContraction S hs]ᵘᶜ.lengthhj:uncontractedListEmd j ∈ (subContraction S hs).uncontractedhij:uncontractedListEmd i ≠ uncontractedListEmd jha:{uncontractedListEmd i, uncontractedListEmd j} ∈ ↑φsΛh1:{uncontractedListEmd i, uncontractedListEmd j} ∉ S⊢ {uncontractedListEmd i, uncontractedListEmd j} ∈ ↑φsΛ All goals completed! 🐙@[simp] lemma subContraction_uncontractedList_get {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1} {a : Fin [subContraction S hs]ᵘᶜ.length} : [subContraction S hs]ᵘᶜ[a] = φs[uncontractedListEmd a] := 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Fin [subContraction S hs]ᵘᶜ.length⊢ [subContraction S hs]ᵘᶜ[a] = φs[uncontractedListEmd a] erw [𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Fin [subContraction S hs]ᵘᶜ.length⊢ φs[↑(uncontractedListEmd a)] = φs[uncontractedListEmd a]𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Fin [subContraction S hs]ᵘᶜ.length⊢ φs[↑(uncontractedListEmd a)] = φs[uncontractedListEmd a] All goals completed! 🐙@[simp] lemma subContraction_fstFieldOfContract {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1} (a : (subContraction S hs).1) : (subContraction S hs).fstFieldOfContract a = φsΛ.fstFieldOfContract ⟨a.1, mem_of_mem_subContraction a.2⟩:= 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ (subContraction S hs).fstFieldOfContract a = φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ < φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑⟨↑a, ⋯⟩ = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑a = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a conv_lhs => 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑a = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}| {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩} All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑⟨↑a, ⋯⟩ = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}⊢ φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑a = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}⊢ φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a conv_lhs => 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑a = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}| {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩} All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ < φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ All goals completed! 🐙@[simp] lemma subContraction_sndFieldOfContract {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1} (a : (subContraction S hs).1) : (subContraction S hs).sndFieldOfContract a = φsΛ.sndFieldOfContract ⟨a.1, mem_of_mem_subContraction a.2⟩:= 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ (subContraction S hs).sndFieldOfContract a = φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ < φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑⟨↑a, ⋯⟩ = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑a = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a conv_lhs => 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑a = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}| {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩} All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑⟨↑a, ⋯⟩ = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}⊢ φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑a = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}⊢ φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ ∈ ↑a conv_lhs => 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)ha:↑a = {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩}| {φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩, φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩} All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(subContraction S hs)⊢ φsΛ.fstFieldOfContract ⟨↑a, ⋯⟩ < φsΛ.sndFieldOfContract ⟨↑a, ⋯⟩ All goals completed! 🐙@[simp] lemma quotContraction_fstFieldOfContract_uncontractedListEmd {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1} (a : (quotContraction S hs).1) : uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) = (φsΛ.fstFieldOfContract ⟨Finset.map uncontractedListEmd a.1, mem_of_mem_quotContraction a.2⟩) := 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) = φsΛ.fstFieldOfContract ⟨Finset.map uncontractedListEmd ↑a, ⋯⟩ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ φsΛ.fstFieldOfContract ⟨Finset.map uncontractedListEmd ↑a, ⋯⟩ = uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) ∈ ↑⟨Finset.map uncontractedListEmd ↑a, ⋯⟩𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) ∈ ↑⟨Finset.map uncontractedListEmd ↑a, ⋯⟩𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) < uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) ∈ ↑⟨Finset.map uncontractedListEmd ↑a, ⋯⟩ All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) ∈ ↑⟨Finset.map uncontractedListEmd ↑a, ⋯⟩ All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) < uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ (quotContraction S hs).fstFieldOfContract a < (quotContraction S hs).sndFieldOfContract a All goals completed! 🐙@[simp] lemma quotContraction_sndFieldOfContract_uncontractedListEmd {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1} (a : (quotContraction S hs).1) : uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) = (φsΛ.sndFieldOfContract ⟨Finset.map uncontractedListEmd a.1, mem_of_mem_quotContraction a.2⟩) := 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) = φsΛ.sndFieldOfContract ⟨Finset.map uncontractedListEmd ↑a, ⋯⟩ 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ φsΛ.sndFieldOfContract ⟨Finset.map uncontractedListEmd ↑a, ⋯⟩ = uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) ∈ ↑⟨Finset.map uncontractedListEmd ↑a, ⋯⟩𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) ∈ ↑⟨Finset.map uncontractedListEmd ↑a, ⋯⟩𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) < uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) ∈ ↑⟨Finset.map uncontractedListEmd ↑a, ⋯⟩ All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) ∈ ↑⟨Finset.map uncontractedListEmd ↑a, ⋯⟩ All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) < uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:↥↑(quotContraction S hs)⊢ (quotContraction S hs).fstFieldOfContract a < (quotContraction S hs).sndFieldOfContract a All goals completed! 🐙lemma quotContraction_gradingCompliant {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1} (hsΛ : φsΛ.GradingCompliant) : GradingCompliant [φsΛ.subContraction S hs]ᵘᶜ (quotContraction S hs) := 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛhsΛ:GradingCompliant φs φsΛ⊢ GradingCompliant [subContraction S hs]ᵘᶜ (quotContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛhsΛ:GradingCompliant φs φsΛ⊢ ∀ (a : Finset (Fin [subContraction S hs]ᵘᶜ.length)) (b : a ∈ ↑(quotContraction S hs)), (𝓕|>ₛ[subContraction S hs]ᵘᶜ[↑((quotContraction S hs).fstFieldOfContract ⟨a, b⟩)]) = 𝓕|>ₛ[subContraction S hs]ᵘᶜ[↑((quotContraction S hs).sndFieldOfContract ⟨a, b⟩)] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛhsΛ:GradingCompliant φs φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)ha:a ∈ ↑(quotContraction S hs)⊢ (𝓕|>ₛ[subContraction S hs]ᵘᶜ[↑((quotContraction S hs).fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛ[subContraction S hs]ᵘᶜ[↑((quotContraction S hs).sndFieldOfContract ⟨a, ha⟩)] erw [𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛhsΛ:GradingCompliant φs φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)ha:a ∈ ↑(quotContraction S hs)⊢ (𝓕|>ₛφs[uncontractedListEmd ((quotContraction S hs).fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛ[subContraction S hs]ᵘᶜ[↑((quotContraction S hs).sndFieldOfContract ⟨a, ha⟩)]𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛhsΛ:GradingCompliant φs φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)ha:a ∈ ↑(quotContraction S hs)⊢ (𝓕|>ₛφs[uncontractedListEmd ((quotContraction S hs).fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛ[subContraction S hs]ᵘᶜ[↑((quotContraction S hs).sndFieldOfContract ⟨a, ha⟩)] erw [𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛhsΛ:GradingCompliant φs φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)ha:a ∈ ↑(quotContraction S hs)⊢ (𝓕|>ₛφs[uncontractedListEmd ((quotContraction S hs).fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[uncontractedListEmd ((quotContraction S hs).sndFieldOfContract ⟨a, ha⟩)]𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛhsΛ:GradingCompliant φs φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)ha:a ∈ ↑(quotContraction S hs)⊢ (𝓕|>ₛφs[uncontractedListEmd ((quotContraction S hs).fstFieldOfContract ⟨a, ha⟩)]) = 𝓕|>ₛφs[uncontractedListEmd ((quotContraction S hs).sndFieldOfContract ⟨a, ha⟩)] 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛhsΛ:GradingCompliant φs φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)ha:a ∈ ↑(quotContraction S hs)⊢ (𝓕|>ₛφs[↑(φsΛ.fstFieldOfContract ⟨Finset.map uncontractedListEmd a, ⋯⟩)]) = 𝓕|>ₛφs[↑(φsΛ.sndFieldOfContract ⟨Finset.map uncontractedListEmd a, ⋯⟩)] All goals completed! 🐙lemma mem_quotContraction_iff {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1} {a : Finset (Fin [φsΛ.subContraction S hs]ᵘᶜ.length)} : a ∈ (quotContraction S hs).1 ↔ a.map uncontractedListEmd ∈ φsΛ.1 ∧ a.map uncontractedListEmd ∉ (subContraction S hs).1 := 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)⊢ a ∈ ↑(quotContraction S hs) ↔ Finset.map uncontractedListEmd a ∈ ↑φsΛ ∧ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)⊢ a ∈ ↑(quotContraction S hs) → Finset.map uncontractedListEmd a ∈ ↑φsΛ ∧ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs)𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)⊢ Finset.map uncontractedListEmd a ∈ ↑φsΛ ∧ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs) → a ∈ ↑(quotContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)⊢ a ∈ ↑(quotContraction S hs) → Finset.map uncontractedListEmd a ∈ ↑φsΛ ∧ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)h:a ∈ ↑(quotContraction S hs)⊢ Finset.map uncontractedListEmd a ∈ ↑φsΛ ∧ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)h:a ∈ ↑(quotContraction S hs)⊢ Finset.map uncontractedListEmd a ∈ ↑φsΛ𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)h:a ∈ ↑(quotContraction S hs)⊢ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)h:a ∈ ↑(quotContraction S hs)⊢ Finset.map uncontractedListEmd a ∈ ↑φsΛ All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)h:a ∈ ↑(quotContraction S hs)⊢ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs) All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)⊢ Finset.map uncontractedListEmd a ∈ ↑φsΛ ∧ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs) → a ∈ ↑(quotContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)h:Finset.map uncontractedListEmd a ∈ ↑φsΛ ∧ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs)⊢ a ∈ ↑(quotContraction S hs) 𝓕:FieldSpecificationφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthS:Finset (Finset (Fin φs.length))hs:S ⊆ ↑φsΛa:Finset (Fin [subContraction S hs]ᵘᶜ.length)h:Finset.map uncontractedListEmd a ∈ ↑φsΛ ∧ Finset.map uncontractedListEmd a ∉ ↑(subContraction S hs)h2:Finset.map uncontractedListEmd a ∈ ↑(subContraction S hs) ∨ ∃ a', Finset.map uncontractedListEmd a' = Finset.map uncontractedListEmd a ∧ a' ∈ ↑(quotContraction S hs)⊢ a ∈ ↑(quotContraction S hs) All goals completed! 🐙