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.WickAlgebra.NormalOrder.WickContractions
public import Physlib.QFT.PerturbationTheory.WickContraction.Sign.InsertNone
public import Physlib.QFT.PerturbationTheory.WickContraction.Sign.InsertSome
public import Physlib.QFT.PerturbationTheory.WickContraction.StaticContractStatic Wick's terms
@[expose] public section
For a list φs of 𝓕.FieldOp, and a Wick contraction φsΛ of φs, the element
of 𝓕.WickAlgebra, φsΛ.staticWickTerm is defined as
φsΛ.sign • φsΛ.staticContract * 𝓝([φsΛ]ᵘᶜ).
This is a term which appears in the static version Wick's theorem.
def staticWickTerm {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : 𝓕.WickAlgebra :=
φsΛ.sign • φsΛ.staticContract * 𝓝(ofFieldOpList [φsΛ]ᵘᶜ)
For the empty list [] of 𝓕.FieldOp, the staticWickTerm of the Wick contraction
corresponding to the empty set ∅ (the only Wick contraction of []) is 1.
𝓕:FieldSpecification⊢ sign [] empty • ↑empty.staticContract * normalOrder (ofFieldOpList (List.map [].get [])) = 1
simp [sign, empty, staticContract] All goals completed! 🐙
For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, and an element φ of
𝓕.FieldOp, then (φsΛ ↩Λ φ 0 none).staticWickTerm is equal to
φsΛ.sign • φsΛ.staticWickTerm * 𝓝(φ :: [φsΛ]ᵘᶜ)
The proof of this result relies on
staticContract_insert_none to rewrite the static contract.
sign_insert_none_zero to rewrite the sign.
lemma staticWickTerm_insert_zero_none (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) :
(φsΛ ↩Λ φ 0 none).staticWickTerm =
φsΛ.sign • φsΛ.staticContract * 𝓝(ofFieldOpList (φ :: [φsΛ]ᵘᶜ)) := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ (φsΛ↩Λφ 0none).staticWickTerm = sign φs φsΛ • ↑φsΛ.staticContract * normalOrder (ofFieldOpList (φ :: [φsΛ]ᵘᶜ))
simp only [staticWickTerm, sign_insert_none_zero, staticContract_insert_none,
insertAndContract_uncontractedList_none_zero, Algebra.smul_mul_assoc] All goals completed! 🐙
For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of
𝓕.FieldOp, and a k in φsΛ.uncontracted, (φsΛ ↩Λ φ 0 (some k)).wickTerm is equal
to the product of
the sign 𝓢(φ, φ₀…φᵢ₋₁)
the sign φsΛ.sign
φsΛ.staticContract
s • [anPart φ, ofFieldOp φs[k]]ₛ where s is the sign associated with moving φ through
uncontracted fields in φ₀…φₖ₋₁
the normal ordering of [φsΛ]ᵘᶜ with the field operator φs[k] removed.
The proof of this result ultimately relies on
staticContract_insert_some to rewrite static contractions.
normalOrder_uncontracted_some to rewrite normal orderings.
sign_insert_some_zero to rewrite signs.
lemma staticWickTerm_insert_zero_some (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (k : { x // x ∈ φsΛ.uncontracted }) :
(φsΛ ↩Λ φ 0 k).staticWickTerm =
sign φs φsΛ • (↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
𝓝(ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ (uncontractedFieldOpEquiv φs φsΛ k))))) := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ (φsΛ↩Λφ 0some k).staticWickTerm =
sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k))))))
symm 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))))) =
(φsΛ↩Λφ 0some k).staticWickTerm
rw [staticWickTerm, 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract *
normalOrder (ofFieldOpList [φsΛ↩Λφ 0some k]ᵘᶜ) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))) normalOrder_uncontracted_some 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k))))] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k))))
simp only [← mul_assoc] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ •
(↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k))))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k))))
rw [← smul_mul_assoc 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k))))] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k))))
congr 1 e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) • ↑(φsΛ↩Λφ 0some k).staticContract
rw [staticContract_insert_some_of_lt (hik := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedφ✝:𝓕.FieldOp⊢ 0 < Fin.succAbove 0 ↑k e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract) simp All goals completed! 🐙e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)), smul_smul e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)]e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
by_cases hn : GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = (𝓕|>ₛ φs[k.1]) pos 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k])⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
· pos 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract) congr 1 pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ ↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) =
contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract
· pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ =
sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) rw [sign_insert_some_zero _ _ _ _ hn, pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ =
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) * sign φs φsΛ *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ =
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
sign φs φsΛ mul_comm, pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ =
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
((exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) * sign φs φsΛ)pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ =
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
sign φs φsΛ ← mul_assoc pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ =
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
sign φs φsΛpos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ =
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
sign φs φsΛ]pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ sign φs φsΛ =
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k})) *
sign φs φsΛ
simp All goals completed! 🐙
· pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ ↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) =
contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract rw [Subalgebra.mem_center_iff.mp φsΛ.staticContract.2 pos.e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k]⊢ ↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) =
↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) All goals completed! 🐙] All goals completed! 🐙
· neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(GradingCompliant φs φsΛ ∧ (𝓕|>ₛφ) = 𝓕|>ₛφs[↑k])⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract) simp only [Fin.getElem_fin, not_and] at hn neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ → ¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
by_cases h0 : ¬ GradingCompliant φs φsΛ pos 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ → ¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:¬GradingCompliant φs φsΛ⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ → ¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:¬¬GradingCompliant φs φsΛ⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
· pos 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ → ¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:¬GradingCompliant φs φsΛ⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract) rw [staticContract_of_not_gradingCompliant _ _ h0 pos 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ → ¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:¬GradingCompliant φs φsΛ⊢ sign φs φsΛ • (↑0 * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑0) pos 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ → ¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:¬GradingCompliant φs φsΛ⊢ sign φs φsΛ • (↑0 * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑0)]pos 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ → ¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:¬GradingCompliant φs φsΛ⊢ sign φs φsΛ • (↑0 * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑0)
simp only [ZeroMemClass.coe_zero, zero_mul, smul_zero, mul_zero] All goals completed! 🐙
· neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:GradingCompliant φs φsΛ → ¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:¬¬GradingCompliant φs φsΛ⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract) simp_all only [not_not, forall_const] neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛ⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
have h1 : contractStateAtIndex φ [φsΛ]ᵘᶜ (uncontractedFieldOpEquiv φs φsΛ k) = 0 := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontracted⊢ (φsΛ↩Λφ 0some k).staticWickTerm =
sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some k)))))) neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛh1:contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) = 0⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
simp only [contractStateAtIndex, uncontractedFieldOpEquiv, Equiv.optionCongr_apply,
Equiv.coe_trans, Option.map_some, Function.comp_apply, finCongr_apply,
Fin.val_cast, Fin.getElem_fin, smul_eq_zero] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛ⊢ (exchangeSign (𝓕|>ₛφ)) (ofList 𝓕.fieldOpStatistic (List.take ↑(φsΛ.uncontractedIndexEquiv.symm k) [φsΛ]ᵘᶜ)) = 0 ∨
(superCommute (anPart φ)) (ofFieldOp [φsΛ]ᵘᶜ[↑(φsΛ.uncontractedIndexEquiv.symm k)]) = 0neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛh1:contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) = 0⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
right 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛ⊢ (superCommute (anPart φ)) (ofFieldOp [φsΛ]ᵘᶜ[↑(φsΛ.uncontractedIndexEquiv.symm k)]) = 0neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛh1:contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) = 0⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
simp only [uncontractedListGet, List.getElem_map,
uncontractedList_getElem_uncontractedIndexEquiv_symm, List.get_eq_getElem] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛ⊢ (superCommute (anPart φ)) (ofFieldOp φs[↑↑k]) = 0neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛh1:contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) = 0⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
rw [superCommute_anPart_ofFieldOpF_diff_grade_zero (h := hn) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛ⊢ 0 = 0neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛh1:contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) = 0⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)]neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛh1:contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) = 0⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthk:↥φsΛ.uncontractedhn:¬(𝓕|>ₛφ) = 𝓕|>ₛφs[↑↑k]h0:GradingCompliant φs φsΛh1:contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) = 0⊢ sign φs φsΛ • (↑φsΛ.staticContract * contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k))) =
(sign (φs.insertIdx (↑0) φ) (φsΛ↩Λφ 0some k) *
(exchangeSign (𝓕|>ₛφ)) (ofFinset 𝓕.fieldOpStatistic φs.get ({x ∈ φsΛ.uncontracted | x < ↑k}))) •
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some k)) * ↑φsΛ.staticContract)
simp [h1] All goals completed! 🐙
For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, the following relation
holds
φ * φsΛ.staticWickTerm = ∑ k, (φsΛ ↩Λ φ 0 k).staticWickTerm
where the sum is over all k in Option φsΛ.uncontracted, so k is either none or some k.
The proof proceeds as follows:
ofFieldOp_mul_normalOrder_ofFieldOpList_eq_sum is used to expand φ 𝓝([φsΛ]ᵘᶜ) as
a sum over k in Option φsΛ.uncontracted of terms involving [anPart φ, φs[k]]ₛ.
Then staticWickTerm_insert_zero_none and staticWickTerm_insert_zero_some are
used to equate terms.
set_option backward.isDefEq.respectTransparency false in
lemma mul_staticWickTerm_eq_sum (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) :
ofFieldOp φ * φsΛ.staticWickTerm =
∑ (k : Option φsΛ.uncontracted), (φsΛ ↩Λ φ 0 k).staticWickTerm := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ofFieldOp φ * φsΛ.staticWickTerm = ∑ k, (φsΛ↩Λφ 0k).staticWickTerm
trans (φsΛ.sign • φsΛ.staticContract * (ofFieldOp φ * normalOrder (ofFieldOpList [φsΛ]ᵘᶜ))) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ofFieldOp φ * φsΛ.staticWickTerm =
sign φs φsΛ • ↑φsΛ.staticContract * (ofFieldOp φ * normalOrder (ofFieldOpList [φsΛ]ᵘᶜ))𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ sign φs φsΛ • ↑φsΛ.staticContract * (ofFieldOp φ * normalOrder (ofFieldOpList [φsΛ]ᵘᶜ)) =
∑ k, (φsΛ↩Λφ 0k).staticWickTerm
· 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ofFieldOp φ * φsΛ.staticWickTerm =
sign φs φsΛ • ↑φsΛ.staticContract * (ofFieldOp φ * normalOrder (ofFieldOpList [φsΛ]ᵘᶜ)) have ht := Subalgebra.mem_center_iff.mp (Subalgebra.smul_mem (Subalgebra.center ℂ _)
(φsΛ.staticContract).2 φsΛ.sign) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthht:∀ (b : 𝓕.WickAlgebra), b * sign φs φsΛ • ↑φsΛ.staticContract = sign φs φsΛ • ↑φsΛ.staticContract * b⊢ ofFieldOp φ * φsΛ.staticWickTerm =
sign φs φsΛ • ↑φsΛ.staticContract * (ofFieldOp φ * normalOrder (ofFieldOpList [φsΛ]ᵘᶜ))
conv_rhs => rw [← mul_assoc, ← ht] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthht:∀ (b : 𝓕.WickAlgebra), b * sign φs φsΛ • ↑φsΛ.staticContract = sign φs φsΛ • ↑φsΛ.staticContract * b| ofFieldOp φ * sign φs φsΛ • ↑φsΛ.staticContract * normalOrder (ofFieldOpList [φsΛ]ᵘᶜ)
simp [mul_assoc, staticWickTerm] All goals completed! 🐙
rw [ofFieldOp_mul_normalOrder_ofFieldOpList_eq_sum, 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ sign φs φsΛ • ↑φsΛ.staticContract *
∑ n, contractStateAtIndex φ [φsΛ]ᵘᶜ n * normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ n)) =
∑ k, (φsΛ↩Λφ 0k).staticWickTerm 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ∑ i,
sign φs φsΛ • ↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) i) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) i)))) =
∑ k, (φsΛ↩Λφ 0k).staticWickTerm Finset.mul_sum, 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ∑ i,
sign φs φsΛ • ↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ i * normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ i))) =
∑ k, (φsΛ↩Λφ 0k).staticWickTerm 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ∑ i,
sign φs φsΛ • ↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) i) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) i)))) =
∑ k, (φsΛ↩Λφ 0k).staticWickTerm
uncontractedFieldOpEquiv_list_sum 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ∑ i,
sign φs φsΛ • ↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) i) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) i)))) =
∑ k, (φsΛ↩Λφ 0k).staticWickTerm 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ∑ i,
sign φs φsΛ • ↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) i) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) i)))) =
∑ k, (φsΛ↩Λφ 0k).staticWickTerm] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ ∑ i,
sign φs φsΛ • ↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) i) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) i)))) =
∑ k, (φsΛ↩Λφ 0k).staticWickTerm
refine Finset.sum_congr rfl (fun n _ => ?_) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn:Option ↥φsΛ.uncontractedx✝:n ∈ Finset.univ⊢ sign φs φsΛ • ↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) n) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) n)))) =
(φsΛ↩Λφ 0n).staticWickTerm
match n with
| none => 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn:Option ↥φsΛ.uncontractedx✝:none ∈ Finset.univ⊢ sign φs φsΛ • ↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) none) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) none)))) =
(φsΛ↩Λφ 0none).staticWickTerm
simp only [contractStateAtIndex, uncontractedFieldOpEquiv, Equiv.optionCongr_apply,
Equiv.coe_trans, Option.map_none, one_mul, Algebra.smul_mul_assoc, Nat.succ_eq_add_one,
Fin.val_zero, List.insertIdx_zero] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn:Option ↥φsΛ.uncontractedx✝:none ∈ Finset.univ⊢ sign φs φsΛ • (↑φsΛ.staticContract * normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ none))) =
(φsΛ↩Λφ 0none).staticWickTerm
rw [staticWickTerm_insert_zero_none 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn:Option ↥φsΛ.uncontractedx✝:none ∈ Finset.univ⊢ sign φs φsΛ • (↑φsΛ.staticContract * normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ none))) =
sign φs φsΛ • ↑φsΛ.staticContract * normalOrder (ofFieldOpList (φ :: [φsΛ]ᵘᶜ)) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn:Option ↥φsΛ.uncontractedx✝:none ∈ Finset.univ⊢ sign φs φsΛ • (↑φsΛ.staticContract * normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ none))) =
sign φs φsΛ • ↑φsΛ.staticContract * normalOrder (ofFieldOpList (φ :: [φsΛ]ᵘᶜ))] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn:Option ↥φsΛ.uncontractedx✝:none ∈ Finset.univ⊢ sign φs φsΛ • (↑φsΛ.staticContract * normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ none))) =
sign φs φsΛ • ↑φsΛ.staticContract * normalOrder (ofFieldOpList (φ :: [φsΛ]ᵘᶜ))
simp only [Algebra.smul_mul_assoc] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn:Option ↥φsΛ.uncontractedx✝:none ∈ Finset.univ⊢ sign φs φsΛ • (↑φsΛ.staticContract * normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ none))) =
sign φs φsΛ • (↑φsΛ.staticContract * normalOrder (ofFieldOpList (φ :: [φsΛ]ᵘᶜ)))
rfl All goals completed! 🐙
| some n => 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn✝:Option ↥φsΛ.uncontractedn:↥φsΛ.uncontractedx✝:some n ∈ Finset.univ⊢ sign φs φsΛ • ↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some n)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some n))))) =
(φsΛ↩Λφ 0some n).staticWickTerm
simp only [Algebra.smul_mul_assoc, Nat.succ_eq_add_one, Fin.val_zero,
List.insertIdx_zero] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn✝:Option ↥φsΛ.uncontractedn:↥φsΛ.uncontractedx✝:some n ∈ Finset.univ⊢ sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some n)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some n)))))) =
(φsΛ↩Λφ 0some n).staticWickTerm
rw [staticWickTerm_insert_zero_some 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthn✝:Option ↥φsΛ.uncontractedn:↥φsΛ.uncontractedx✝:some n ∈ Finset.univ⊢ sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some n)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some n)))))) =
sign φs φsΛ •
(↑φsΛ.staticContract *
(contractStateAtIndex φ [φsΛ]ᵘᶜ ((uncontractedFieldOpEquiv φs φsΛ) (some n)) *
normalOrder (ofFieldOpList (optionEraseZ [φsΛ]ᵘᶜ φ ((uncontractedFieldOpEquiv φs φsΛ) (some n)))))) All goals completed! 🐙] All goals completed! 🐙