PhysLean Notes

4.1. Wicks theorem

By Joseph Tooby-Smith

4.1.1. Introduction🔗

Wicks theorem

In this note we walk through the important parts of the proof of the three versions of Wick's theorem for field operators containing carrying both fermionic and bosonic statistics, as it appears in PhysLean. Not every lemma or definition is covered here. The aim is to give just enough that the story can be understood.

Before proceeding with the steps in the proof, we review some basic terminology related to Lean and type theory. The most important notion is that of a type. We don't give any formal definition here, except to say that a type T, like a set, has elements x which we say are of type T and write x : T. Examples of types include, the type of natural numbers , the type of real numbers , the type of numbers 0, …, n-1 denoted Fin n. Given two types T and S, we can form the product type T × S, and the function type T → S.

Types form the foundation of Lean and the theory behind them will be used both explicitly and implicitly throughout this note.

4.1.2. Field operators

4.1.2.1. Field statistics

🔗inductive type
FieldStatistic : Type
FieldStatistic : Type

The type FieldStatistic is the type containing two elements bosonic and fermionic. This type is used to specify if a field or operator obeys bosonic or fermionic statistics.

Constructors

bosonic : FieldStatistic
fermionic : FieldStatistic
🔗def
FieldStatistic.instCommGroup : CommGroup FieldStatistic
FieldStatistic.instCommGroup : CommGroup FieldStatistic

The type FieldStatistic carries an instance of a commutative group in which

  • bosonic * bosonic = bosonic

  • bosonic * fermionic = fermionic

  • fermionic * bosonic = fermionic

  • fermionic * fermionic = bosonic

This group is isomorphic to ℤ₂.

🔗def
FieldStatistic.exchangeSign : FieldStatistic →* FieldStatistic →*
FieldStatistic.exchangeSign : FieldStatistic →* FieldStatistic →*

The exchange sign, exchangeSign, is defined as the group homomorphism

FieldStatistic →* FieldStatistic →* ,

for which exchangeSign a b is -1 if both a and b are fermionic and 1 otherwise. The exchange sign is the sign one picks up on exchanging an operator or field φ₁ of statistic a with an operator or field φ₂ of statistic b, i.e. φ₁φ₂ φ₂φ₁.

The notation 𝓢(a, b) is used for the exchange sign of a and b.

4.1.2.2. Field specifications

🔗structure
FieldSpecification : Type 1
FieldSpecification : Type 1

The structure FieldSpecification is defined to have the following content:

  • A type Field whose elements are the constituent fields of the theory.

  • For every field f in Field, a type PositionLabel f whose elements label the different position operators associated with the field f. For example,

    • For f a real-scalar field, PositionLabel f will have a unique element.

    • For f a complex-scalar field, PositionLabel f will have two elements, one for the field operator and one for its conjugate.

    • For f a Dirac fermion, PositionLabel f will have eight elements, one for each Lorentz index of the field and its conjugate.

    • For f a Weyl fermion, PositionLabel f will have four elements, one for each Lorentz index of the field and its conjugate.

  • For every field f in Field, a type AsymptoticLabel f whose elements label the different types of incoming asymptotic field operators associated with the field f (this also matches the types of outgoing asymptotic field operators). For example,

    • For f a real-scalar field, AsymptoticLabel f will have a unique element.

    • For f a complex-scalar field, AsymptoticLabel f will have two elements, one for the field operator and one for its conjugate.

    • For f a Dirac fermion, AsymptoticLabel f will have four elements, two for each spin.

    • For f a Weyl fermion, AsymptoticLabel f will have two elements, one for each spin.

  • For each field f in Field, a field statistic statistic f which classifies f as either bosonic or fermionic.

Constructor

FieldSpecification.mk

Fields

Field : Type

A type whose elements are the constituent fields of the theory.

PositionLabel : self.FieldType

For every field f in Field, the type PositionLabel f has elements that label the different position operators associated with the field f.

AsymptoticLabel : self.FieldType

For every field f in Field, the type AsymptoticLabel f has elements that label the different asymptotic based field operators associated with the field f.

statistic : self.FieldFieldStatistic

For every field f in Field, the field statistic statistic f classifies f as either bosonic or fermionic.

4.1.2.3. Field operators

🔗inductive type
FieldSpecification.FieldOp (𝓕 : FieldSpecification) : Type
FieldSpecification.FieldOp (𝓕 : FieldSpecification) : Type

For a field specification 𝓕, the inductive type 𝓕.FieldOp is defined to contain the following elements:

  • For every f in 𝓕.Field, element of e of AsymptoticLabel f and 3-momentum p, an element labelled inAsymp f e p corresponding to an incoming asymptotic field operator of the field f, of label e (e.g. specifying the spin), and momentum p.

  • For every f in 𝓕.Field, element of e of PositionLabel f and space-time position x, an element labelled position f e x corresponding to a position field operator of the field f, of label e (e.g. specifying the Lorentz index), and position x.

  • For every f in 𝓕.Field, element of e of AsymptoticLabel f and 3-momentum p, an element labelled outAsymp f e p corresponding to an outgoing asymptotic field operator of the field f, of label e (e.g. specifying the spin), and momentum p.

As an example, if f corresponds to a Weyl-fermion field, then

  • For inAsymp f e p, e would correspond to a spin s, and inAsymp f e p would, once represented in the operator algebra, be proportional to the creation operator a(p, s).

  • position f e x, e would correspond to a Lorentz index a, and position f e x would, once represented in the operator algebra, be proportional to the operator

    ∑ s, ∫ d³p/(…) (xₐ(p,s) a(p, s) e ^ (-i p x) + yₐ(p,s) a†(p, s) e ^ (-i p x)).

  • outAsymp f e p, e would correspond to a spin s, and outAsymp f e p would, once represented in the operator algebra, be proportional to the annihilation operator a†(p, s).

Constructors

inAsymp {𝓕 : FieldSpecification} :
  ((f : 𝓕.Field) × 𝓕.AsymptoticLabel f) × Momentum𝓕.FieldOp
position {𝓕 : FieldSpecification} :
  ((f : 𝓕.Field) × 𝓕.PositionLabel f) × SpaceTime𝓕.FieldOp
outAsymp {𝓕 : FieldSpecification} :
  ((f : 𝓕.Field) × 𝓕.AsymptoticLabel f) × Momentum𝓕.FieldOp
🔗def
FieldSpecification.fieldOpStatistic (𝓕 : FieldSpecification) : 𝓕.FieldOpFieldStatistic
FieldSpecification.fieldOpStatistic (𝓕 : FieldSpecification) : 𝓕.FieldOpFieldStatistic

For a field specification 𝓕, and an element φ of 𝓕.FieldOp. The field statistic fieldOpStatistic φ is defined to be the statistic associated with the field underlying φ.

The following notation is used in relation to fieldOpStatistic:

  • For φ an element of 𝓕.FieldOp, 𝓕 |>s φ is fieldOpStatistic φ.

  • For φs a list of 𝓕.FieldOp, 𝓕 |>s φs is the product of fieldOpStatistic φ over the list φs.

  • For a function f : Fin n 𝓕.FieldOp and a finite set a of Fin n, 𝓕 |>s f, a is the product of fieldOpStatistic (f i) for all i a.

🔗inductive type
CreateAnnihilate : Type
CreateAnnihilate : Type

The type CreateAnnihilate is the type containing two elements create and annihilate. This type is used to specify if an operator is a creation, or annihilation, operator or the sum thereof or integral thereof etc.

Constructors

create : CreateAnnihilate
annihilate : CreateAnnihilate
🔗def
FieldSpecification.CrAnFieldOp (𝓕 : FieldSpecification) : Type
FieldSpecification.CrAnFieldOp (𝓕 : FieldSpecification) : Type

For a field specification 𝓕, the (sigma) type 𝓕.CrAnFieldOp corresponds to the type of creation and annihilation parts of field operators. It formally defined to consist of the following elements:

  • For each incoming asymptotic field operator φ in 𝓕.FieldOp an element written as φ, () in 𝓕.CrAnFieldOp, corresponding to the creation part of φ. Here φ has no annihilation part. (Here () is the unique element of Unit.)

  • For each position field operator φ in 𝓕.FieldOp an element of 𝓕.CrAnFieldOp written as φ, .create, corresponding to the creation part of φ.

  • For each position field operator φ in 𝓕.FieldOp an element of 𝓕.CrAnFieldOp written as φ, .annihilate, corresponding to the annihilation part of φ.

  • For each outgoing asymptotic field operator φ in 𝓕.FieldOp an element written as φ, () in 𝓕.CrAnFieldOp, corresponding to the annihilation part of φ. Here φ has no creation part. (Here () is the unique element of Unit.)

As an example, if f corresponds to a Weyl-fermion field, it would contribute the following elements to 𝓕.CrAnFieldOp

  • For each spin s, an element corresponding to an incoming asymptotic operator: a(p, s).

  • For each each Lorentz index a, an element corresponding to the creation part of a position operator:

    ∑ s, ∫ d³p/(…) (xₐ (p,s) a(p, s) e ^ (-i p x)).

  • For each each Lorentz index a,an element corresponding to annihilation part of a position operator:

    ∑ s, ∫ d³p/(…) (yₐ(p,s) a†(p, s) e ^ (-i p x)).

  • For each spin s, element corresponding to an outgoing asymptotic operator: a†(p, s).

🔗def
FieldSpecification.crAnFieldOpToCreateAnnihilate (𝓕 : FieldSpecification) : 𝓕.CrAnFieldOpCreateAnnihilate
FieldSpecification.crAnFieldOpToCreateAnnihilate (𝓕 : FieldSpecification) : 𝓕.CrAnFieldOpCreateAnnihilate

For a field specification 𝓕, 𝓕.crAnFieldOpToCreateAnnihilate is the map from 𝓕.CrAnFieldOp to CreateAnnihilate taking φ to create if

  • φ corresponds to an incoming asymptotic field operator or the creation part of a position based field operator.

otherwise it takes φ to annihilate.

🔗def
FieldSpecification.crAnStatistics (𝓕 : FieldSpecification) : 𝓕.CrAnFieldOpFieldStatistic
FieldSpecification.crAnStatistics (𝓕 : FieldSpecification) : 𝓕.CrAnFieldOpFieldStatistic

For a field specification 𝓕, and an element φ in 𝓕.CrAnFieldOp, the field statistic crAnStatistics φ is defined to be the statistic associated with the field 𝓕.Field (or the 𝓕.FieldOp) underlying φ.

The following notation is used in relation to crAnStatistics:

  • For φ an element of 𝓕.CrAnFieldOp, 𝓕 |>s φ is crAnStatistics φ.

  • For φs a list of 𝓕.CrAnFieldOp, 𝓕 |>s φs is the product of crAnStatistics φ over the list φs.

Insert FieldSpecification.notation_remark here

4.1.2.4. Field-operator free algebra

🔗def
FieldSpecification.FieldOpFreeAlgebra (𝓕 : FieldSpecification) : Type
FieldSpecification.FieldOpFreeAlgebra (𝓕 : FieldSpecification) : Type

For a field specification 𝓕, the algebra 𝓕.FieldOpFreeAlgebra is the free algebra generated by 𝓕.CrAnFieldOp.

Insert FieldSpecification.FieldOpFreeAlgebra.naming_convention here

🔗def
FieldSpecification.FieldOpFreeAlgebra.ofCrAnOpF {𝓕 : FieldSpecification} (φ : 𝓕.CrAnFieldOp) : 𝓕.FieldOpFreeAlgebra
FieldSpecification.FieldOpFreeAlgebra.ofCrAnOpF {𝓕 : FieldSpecification} (φ : 𝓕.CrAnFieldOp) : 𝓕.FieldOpFreeAlgebra

For a field specification 𝓕, and a element φ of 𝓕.CrAnFieldOp, ofCrAnOpF φ is defined as the element of 𝓕.FieldOpFreeAlgebra formed by φ.

🔗theorem
FieldSpecification.FieldOpFreeAlgebra.universality {𝓕 : FieldSpecification} {A : Type} [Semiring A] [Algebra A] (f : 𝓕.CrAnFieldOpA) : ∃! g, gFieldSpecification.FieldOpFreeAlgebra.ofCrAnOpF = f
FieldSpecification.FieldOpFreeAlgebra.universality {𝓕 : FieldSpecification} {A : Type} [Semiring A] [Algebra A] (f : 𝓕.CrAnFieldOpA) : ∃! g, gFieldSpecification.FieldOpFreeAlgebra.ofCrAnOpF = f

The algebra 𝓕.FieldOpFreeAlgebra satisfies the universal property that for any other algebra A (e.g. the operator algebra of the theory) with a map f : 𝓕.CrAnFieldOp A (e.g. the inclusion of the creation and annihilation parts of field operators into the operator algebra) there is a unique algebra map g : 𝓕.FieldOpFreeAlgebra A such that g ofCrAnOpF = f.

The unique g is given by FreeAlgebra.lift f.

🔗def
FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) : 𝓕.FieldOpFreeAlgebra
FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) : 𝓕.FieldOpFreeAlgebra

For a field specification 𝓕, and a list φs of 𝓕.CrAnFieldOp, ofCrAnListF φs is defined as the element of 𝓕.FieldOpFreeAlgebra obtained by the product of ofCrAnListF φ for each φ in φs. For example ofCrAnListF [φ₁, φ₂, φ₃] = ofCrAnOpF φ₁ * ofCrAnOpF φ₂ * ofCrAnOpF φ₃. The set of all ofCrAnListF φs forms a basis of FieldOpFreeAlgebra 𝓕.

🔗def
FieldSpecification.FieldOpFreeAlgebra.ofFieldOpF {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : 𝓕.FieldOpFreeAlgebra
FieldSpecification.FieldOpFreeAlgebra.ofFieldOpF {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : 𝓕.FieldOpFreeAlgebra

For a field specification 𝓕, and an element φ of 𝓕.FieldOp, ofFieldOpF φ is the element of 𝓕.FieldOpFreeAlgebra formed by summing over ofCrAnOpF of the creation and annihilation parts of φ.

For example, for φ an incoming asymptotic field operator we get ofCrAnOpF φ, (), and for φ a position field operator we get ofCrAnOpF φ, .create + ofCrAnOpF φ, .annihilate.

🔗def
FieldSpecification.FieldOpFreeAlgebra.ofFieldOpListF {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : 𝓕.FieldOpFreeAlgebra
FieldSpecification.FieldOpFreeAlgebra.ofFieldOpListF {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : 𝓕.FieldOpFreeAlgebra

For a field specification 𝓕, and a list φs of 𝓕.FieldOp, 𝓕.ofFieldOpListF φs is defined as the element of 𝓕.FieldOpFreeAlgebra obtained by the product of ofFieldOpF φ for each φ in φs. For example ofFieldOpListF [φ₁, φ₂, φ₃] = ofFieldOpF φ₁ * ofFieldOpF φ₂ * ofFieldOpF φ₃.

Insert FieldSpecification.FieldOpFreeAlgebra.notation_drop here

🔗def
FieldSpecification.FieldOpFreeAlgebra.fieldOpFreeAlgebraGrade {𝓕 : FieldSpecification} : GradedAlgebra FieldSpecification.FieldOpFreeAlgebra.statisticSubmodule
FieldSpecification.FieldOpFreeAlgebra.fieldOpFreeAlgebraGrade {𝓕 : FieldSpecification} : GradedAlgebra FieldSpecification.FieldOpFreeAlgebra.statisticSubmodule

For a field specification 𝓕, the algebra 𝓕.FieldOpFreeAlgebra is graded by FieldStatistic. Those ofCrAnListF φs for which φs has an overall bosonic statistic (i.e. 𝓕 |>s φs = bosonic) span bosonic submodule, whilst those ofCrAnListF φs for which φs has an overall fermionic statistic (i.e. 𝓕 |>s φs = fermionic) span the fermionic submodule.

🔗def
FieldSpecification.FieldOpFreeAlgebra.superCommuteF {𝓕 : FieldSpecification} : 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra
FieldSpecification.FieldOpFreeAlgebra.superCommuteF {𝓕 : FieldSpecification} : 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra

For a field specification 𝓕, the super commutator superCommuteF is defined as the linear map 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra which on the lists φs and φs' of 𝓕.CrAnFieldOp gives

superCommuteF φs φs' = φs * φs' - 𝓢(φs, φs') φs' * φs.

The notation [a, b]F can be used for superCommuteF a b.

🔗theorem
FieldSpecification.FieldOpFreeAlgebra.superCommuteF_ofCrAnListF_ofCrAnListF_eq_sum {𝓕 : FieldSpecification} (φs φs' : List 𝓕.CrAnFieldOp) : (FieldSpecification.FieldOpFreeAlgebra.superCommuteF (FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF φs)) (FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF φs') = n, (FieldStatistic.exchangeSign (FieldStatistic.ofList 𝓕.crAnStatistics φs)) (FieldStatistic.ofList 𝓕.crAnStatistics (List.take (↑n) φs'))FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF (List.take (↑n) φs') * (FieldSpecification.FieldOpFreeAlgebra.superCommuteF (FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF φs)) (FieldSpecification.FieldOpFreeAlgebra.ofCrAnOpF (φs'.get n)) * FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF (List.drop (n + 1) φs')
FieldSpecification.FieldOpFreeAlgebra.superCommuteF_ofCrAnListF_ofCrAnListF_eq_sum {𝓕 : FieldSpecification} (φs φs' : List 𝓕.CrAnFieldOp) : (FieldSpecification.FieldOpFreeAlgebra.superCommuteF (FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF φs)) (FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF φs') = n, (FieldStatistic.exchangeSign (FieldStatistic.ofList 𝓕.crAnStatistics φs)) (FieldStatistic.ofList 𝓕.crAnStatistics (List.take (↑n) φs'))FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF (List.take (↑n) φs') * (FieldSpecification.FieldOpFreeAlgebra.superCommuteF (FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF φs)) (FieldSpecification.FieldOpFreeAlgebra.ofCrAnOpF (φs'.get n)) * FieldSpecification.FieldOpFreeAlgebra.ofCrAnListF (List.drop (n + 1) φs')

For a field specification 𝓕, and two lists φs = φ₀…φₙ and φs' of 𝓕.CrAnFieldOp the following super commutation relation holds:

[φs', φ₀…φₙ]ₛF = ∑ i, 𝓢(φs', φ₀…φᵢ₋₁) • φ₀…φᵢ₋₁ * [φs', φᵢ]ₛF * φᵢ₊₁ … φₙ

The proof of this relation is via induction on the length of φs.

4.1.2.5. Field-operator algebra

🔗def
FieldSpecification.WickAlgebra (𝓕 : FieldSpecification) : Type
FieldSpecification.WickAlgebra (𝓕 : FieldSpecification) : Type

For a field specification 𝓕, the algebra 𝓕.WickAlgebra is defined as the quotient of the free algebra 𝓕.FieldOpFreeAlgebra by the ideal generated by

  • [ofCrAnOpF φc, ofCrAnOpF φc']F for φc and φc' field creation operators. This corresponds to the condition that two creation operators always super-commute.

  • [ofCrAnOpF φa, ofCrAnOpF φa']F for φa and φa' field annihilation operators. This corresponds to the condition that two annihilation operators always super-commute.

  • [ofCrAnOpF φ, ofCrAnOpF φ']F for φ and φ' operators with different statistics. This corresponds to the condition that two operators with different statistics always super-commute. In other words, fermions and bosons always super-commute.

  • [ofCrAnOpF φ1, [ofCrAnOpF φ2, ofCrAnOpF φ3]F]F. This corresponds to the condition, when combined with the conditions above, that the super-commutator is in the center of the algebra.

🔗def
FieldSpecification.WickAlgebra.ι {𝓕 : FieldSpecification} : 𝓕.FieldOpFreeAlgebra →ₐ[] 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.ι {𝓕 : FieldSpecification} : 𝓕.FieldOpFreeAlgebra →ₐ[] 𝓕.WickAlgebra

For a field specification 𝓕, ι is defined as the projection

𝓕.FieldOpFreeAlgebra →ₐ[] 𝓕.WickAlgebra

taking each element of 𝓕.FieldOpFreeAlgebra to its equivalence class in WickAlgebra 𝓕.

🔗def
FieldSpecification.WickAlgebra.ofCrAnOp {𝓕 : FieldSpecification} (φ : 𝓕.CrAnFieldOp) : 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.ofCrAnOp {𝓕 : FieldSpecification} (φ : 𝓕.CrAnFieldOp) : 𝓕.WickAlgebra

For a field specification 𝓕 and an element φ of 𝓕.CrAnFieldOp, ofCrAnOp φ is defined as the element of 𝓕.WickAlgebra given by ι (ofCrAnOpF φ).

🔗def
FieldSpecification.WickAlgebra.ofCrAnList {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) : 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.ofCrAnList {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) : 𝓕.WickAlgebra

For a field specification 𝓕 and a list φs of 𝓕.CrAnFieldOp, ofCrAnList φs is defined as the element of 𝓕.WickAlgebra given by ι (ofCrAnListF φ).

🔗def
FieldSpecification.WickAlgebra.ofFieldOp {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.ofFieldOp {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : 𝓕.WickAlgebra

For a field specification 𝓕 and an element φ of 𝓕.FieldOp, ofFieldOp φ is defined as the element of 𝓕.WickAlgebra given by ι (ofFieldOpF φ).

🔗def
FieldSpecification.WickAlgebra.ofFieldOpList {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.ofFieldOpList {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : 𝓕.WickAlgebra

For a field specification 𝓕 and a list φs of 𝓕.FieldOp, ofFieldOpList φs is defined as the element of 𝓕.WickAlgebra given by ι (ofFieldOpListF φ).

🔗def
FieldSpecification.WickAlgebra.anPart {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.anPart {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : 𝓕.WickAlgebra

For a field specification 𝓕, and an element φ of 𝓕.FieldOp, the annihilation part of 𝓕.FieldOp as an element of 𝓕.WickAlgebra. Thus for φ

  • an incoming asymptotic state this is 0.

  • a position based state this is ofCrAnOp φ, .create.

  • an outgoing asymptotic state this is ofCrAnOp φ, ().

🔗def
FieldSpecification.WickAlgebra.crPart {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.crPart {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : 𝓕.WickAlgebra

For a field specification 𝓕, and an element φ of 𝓕.FieldOp, the creation part of 𝓕.FieldOp as an element of 𝓕.WickAlgebra. Thus for φ

  • an incoming asymptotic state this is ofCrAnOp φ, ().

  • a position based state this is ofCrAnOp φ, .create.

  • an outgoing asymptotic state this is 0.

🔗theorem
FieldSpecification.WickAlgebra.ofFieldOp_eq_crPart_add_anPart {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : FieldSpecification.WickAlgebra.ofFieldOp φ = FieldSpecification.WickAlgebra.crPart φ + FieldSpecification.WickAlgebra.anPart φ
FieldSpecification.WickAlgebra.ofFieldOp_eq_crPart_add_anPart {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) : FieldSpecification.WickAlgebra.ofFieldOp φ = FieldSpecification.WickAlgebra.crPart φ + FieldSpecification.WickAlgebra.anPart φ

For field specification 𝓕, and an element φ of 𝓕.FieldOp the following relation holds:

ofFieldOp φ = crPart φ + anPart φ

That is, every field operator splits into its creation part plus its annihilation part.

🔗def
FieldSpecification.WickAlgebra.WickAlgebraGrade {𝓕 : FieldSpecification} : GradedAlgebra FieldSpecification.WickAlgebra.statSubmodule
FieldSpecification.WickAlgebra.WickAlgebraGrade {𝓕 : FieldSpecification} : GradedAlgebra FieldSpecification.WickAlgebra.statSubmodule

For a field statistic 𝓕, the algebra 𝓕.WickAlgebra is graded by FieldStatistic. Those ofCrAnList φs for which φs has an overall bosonic statistic (i.e. 𝓕 |>s φs = bosonic) span bosonic submodule, whilst those ofCrAnList φs for which φs has an overall fermionic statistic (i.e. 𝓕 |>s φs = fermionic) span the fermionic submodule.

🔗def
FieldSpecification.WickAlgebra.superCommute {𝓕 : FieldSpecification} : 𝓕.WickAlgebra →ₗ[] 𝓕.WickAlgebra →ₗ[] 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.superCommute {𝓕 : FieldSpecification} : 𝓕.WickAlgebra →ₗ[] 𝓕.WickAlgebra →ₗ[] 𝓕.WickAlgebra

For a field specification 𝓕, superCommute is the linear map

WickAlgebra 𝓕 →ₗ[] WickAlgebra 𝓕 →ₗ[] WickAlgebra 𝓕

defined as the descent of ι superCommuteF in both arguments. In particular for φs and φs' lists of 𝓕.CrAnFieldOp in WickAlgebra 𝓕 the following relation holds:

superCommute φs φs' = φs * φs' - 𝓢(φs, φs') φs' * φs

The notation [a, b] is used for superCommute a b.

4.1.3. Time ordering

🔗def
FieldSpecification.crAnTimeOrderRel {𝓕 : FieldSpecification} (a b : 𝓕.CrAnFieldOp) : Prop
FieldSpecification.crAnTimeOrderRel {𝓕 : FieldSpecification} (a b : 𝓕.CrAnFieldOp) : Prop

For a field specification 𝓕, 𝓕.crAnTimeOrderRel is a relation on 𝓕.CrAnFieldOp representing time ordering. It is defined such that 𝓕.crAnTimeOrderRel φ₀ φ₁ is true if and only if one of the following holds

  • φ₀ is an outgoing asymptotic operator

  • φ₁ is an incoming asymptotic field operator

  • φ₀ and φ₁ are both position field operators where the SpaceTime point of φ₀ has a time greater than or equal to that of φ₁.

Thus, colloquially 𝓕.crAnTimeOrderRel φ₀ φ₁ if φ₀ has time greater than or equal to φ₁. The use of greater than rather then less than is because on ordering lists of operators it is needed that the operator with the greatest time is to the left.

🔗def
FieldSpecification.crAnTimeOrderList {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) : List 𝓕.CrAnFieldOp
FieldSpecification.crAnTimeOrderList {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) : List 𝓕.CrAnFieldOp

For a field specification 𝓕, and a list φs of 𝓕.CrAnFieldOp, 𝓕.crAnTimeOrderList φs is the list φs time-ordered using the insertion sort algorithm.

🔗def
FieldSpecification.crAnTimeOrderSign {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) :
FieldSpecification.crAnTimeOrderSign {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) :

For a field specification 𝓕, and a list φs of 𝓕.CrAnFieldOp, 𝓕.crAnTimeOrderSign φs is the sign corresponding to the number of ferimionic-fermionic exchanges undertaken to time-order (i.e. order with respect to 𝓕.crAnTimeOrderRel) φs using the insertion sort algorithm.

🔗def
FieldSpecification.FieldOpFreeAlgebra.timeOrderF {𝓕 : FieldSpecification} : 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra
FieldSpecification.FieldOpFreeAlgebra.timeOrderF {𝓕 : FieldSpecification} : 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra

For a field specification 𝓕, timeOrderF is the linear map

FieldOpFreeAlgebra 𝓕 →ₗ[] FieldOpFreeAlgebra 𝓕

defined by its action on the basis ofCrAnListF φs, taking ofCrAnListF φs to

crAnTimeOrderSign φs ofCrAnListF (crAnTimeOrderList φs).

That is, timeOrderF time-orders the field operators and multiplies by the sign of the time order.

The notation 𝓣(a) is used for timeOrderF a

🔗def
FieldSpecification.WickAlgebra.timeOrder {𝓕 : FieldSpecification} : 𝓕.WickAlgebra →ₗ[] 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.timeOrder {𝓕 : FieldSpecification} : 𝓕.WickAlgebra →ₗ[] 𝓕.WickAlgebra

For a field specification 𝓕, timeOrder is the linear map

WickAlgebra 𝓕 →ₗ[] WickAlgebra 𝓕

defined as the descent of ι ∘ₗ timeOrderF : FieldOpFreeAlgebra 𝓕 →ₗ[] WickAlgebra 𝓕 from FieldOpFreeAlgebra 𝓕 to WickAlgebra 𝓕. This descent exists because ι ∘ₗ timeOrderF is well-defined on equivalence classes.

The notation 𝓣(a) is used for timeOrder a.

🔗theorem
FieldSpecification.WickAlgebra.timeOrder_eq_maxTimeField_mul_finset {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.ofFieldOpList (φ :: φs)) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic (FieldSpecification.maxTimeField φ φs))) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic (FieldSpecification.eraseMaxTimeField φ φs).get {x | (FieldSpecification.maxTimeFieldPosFin φ φs).succAbove x < FieldSpecification.maxTimeFieldPosFin φ φs})FieldSpecification.WickAlgebra.ofFieldOp (FieldSpecification.maxTimeField φ φs) * FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.ofFieldOpList (FieldSpecification.eraseMaxTimeField φ φs))
FieldSpecification.WickAlgebra.timeOrder_eq_maxTimeField_mul_finset {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.ofFieldOpList (φ :: φs)) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic (FieldSpecification.maxTimeField φ φs))) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic (FieldSpecification.eraseMaxTimeField φ φs).get {x | (FieldSpecification.maxTimeFieldPosFin φ φs).succAbove x < FieldSpecification.maxTimeFieldPosFin φ φs})FieldSpecification.WickAlgebra.ofFieldOp (FieldSpecification.maxTimeField φ φs) * FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.ofFieldOpList (FieldSpecification.eraseMaxTimeField φ φs))

For a field specification 𝓕, the time order operator acting on a list of 𝓕.FieldOp, 𝓣(φ₀…φₙ), is equal to 𝓢(φᵢ,φ₀…φᵢ₋₁) • φᵢ * 𝓣(φ₀…φᵢ₋₁φᵢ₊₁φₙ) where φᵢ is the maximal time field operator in φ₀…φₙ.

The proof of this result ultimately relies on basic properties of ordering and signs.

🔗theorem
FieldSpecification.WickAlgebra.timeOrder_timeOrder_mid {𝓕 : FieldSpecification} (a b c : 𝓕.WickAlgebra) : FieldSpecification.WickAlgebra.timeOrder (a * b * c) = FieldSpecification.WickAlgebra.timeOrder (a * FieldSpecification.WickAlgebra.timeOrder b * c)
FieldSpecification.WickAlgebra.timeOrder_timeOrder_mid {𝓕 : FieldSpecification} (a b c : 𝓕.WickAlgebra) : FieldSpecification.WickAlgebra.timeOrder (a * b * c) = FieldSpecification.WickAlgebra.timeOrder (a * FieldSpecification.WickAlgebra.timeOrder b * c)

For a field specification 𝓕, and a, b, c in 𝓕.WickAlgebra, then 𝓣(a * b * c) = 𝓣(a * 𝓣(b) * c).

4.1.4. Normal ordering

🔗def
FieldSpecification.normalOrderRel {𝓕 : FieldSpecification} : 𝓕.CrAnFieldOp𝓕.CrAnFieldOpProp
FieldSpecification.normalOrderRel {𝓕 : FieldSpecification} : 𝓕.CrAnFieldOp𝓕.CrAnFieldOpProp

For a field specification 𝓕, 𝓕.normalOrderRel is a relation on 𝓕.CrAnFieldOp representing normal ordering. It is defined such that 𝓕.normalOrderRel φ₀ φ₁ is true if one of the following is true

  • φ₀ is a field creation operator

  • φ₁ is a field annihilation operator.

Thus, colloquially 𝓕.normalOrderRel φ₀ φ₁ says the creation operators are less than annihilation operators.

🔗def
FieldSpecification.normalOrderList {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) : List 𝓕.CrAnFieldOp
FieldSpecification.normalOrderList {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) : List 𝓕.CrAnFieldOp

For a field specification 𝓕, and a list φs of 𝓕.CrAnFieldOp, 𝓕.normalOrderList φs is the list φs normal-ordered using the insertion sort algorithm. It puts creation operators on the left and annihilation operators on the right. For example:

𝓕.normalOrderList [φ1c, φ1a, φ2c, φ2a] = [φ1c, φ2c, φ1a, φ2a]

🔗def
FieldSpecification.normalOrderSign {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) :
FieldSpecification.normalOrderSign {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) :

For a field specification 𝓕, and a list φs of 𝓕.CrAnFieldOp, 𝓕.normalOrderSign φs is the sign corresponding to the number of fermionic-fermionic exchanges undertaken to normal-order φs using the insertion sort algorithm.

🔗theorem
FieldSpecification.normalOrderSign_eraseIdx {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) (i : Fin φs.length) : FieldSpecification.normalOrderSign (φs.eraseIdxi) = FieldSpecification.normalOrderSign φs * (FieldStatistic.exchangeSign (𝓕.crAnStatistics (φs.get i))) (FieldStatistic.ofList 𝓕.crAnStatistics (List.take (↑i) φs)) * (FieldStatistic.exchangeSign (𝓕.crAnStatistics (φs.get i))) (FieldStatistic.ofList 𝓕.crAnStatistics (List.take (↑(FieldSpecification.normalOrderEquiv i)) (FieldSpecification.normalOrderList φs)))
FieldSpecification.normalOrderSign_eraseIdx {𝓕 : FieldSpecification} (φs : List 𝓕.CrAnFieldOp) (i : Fin φs.length) : FieldSpecification.normalOrderSign (φs.eraseIdxi) = FieldSpecification.normalOrderSign φs * (FieldStatistic.exchangeSign (𝓕.crAnStatistics (φs.get i))) (FieldStatistic.ofList 𝓕.crAnStatistics (List.take (↑i) φs)) * (FieldStatistic.exchangeSign (𝓕.crAnStatistics (φs.get i))) (FieldStatistic.ofList 𝓕.crAnStatistics (List.take (↑(FieldSpecification.normalOrderEquiv i)) (FieldSpecification.normalOrderList φs)))

For a field specification 𝓕, a list φs = φ₀…φₙ of 𝓕.CrAnFieldOp and an i < φs.length, then normalOrderSign (φ₀…φᵢ₋₁φᵢ₊₁…φₙ) is equal to the product of

  • normalOrderSign φ₀…φₙ,

  • 𝓢(φᵢ, φ₀…φᵢ₋₁) i.e. the sign needed to remove φᵢ from φ₀…φₙ,

  • 𝓢(φᵢ, _) where _ is the list of elements appearing before φᵢ after normal ordering, i.e. the sign needed to insert φᵢ back into the normal-ordered list at the correct place.

🔗def
FieldSpecification.FieldOpFreeAlgebra.normalOrderF {𝓕 : FieldSpecification} : 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra
FieldSpecification.FieldOpFreeAlgebra.normalOrderF {𝓕 : FieldSpecification} : 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra

For a field specification 𝓕, normalOrderF is the linear map

FieldOpFreeAlgebra 𝓕 →ₗ[] FieldOpFreeAlgebra 𝓕

defined by its action on the basis ofCrAnListF φs, taking ofCrAnListF φs to

normalOrderSign φs ofCrAnListF (normalOrderList φs).

That is, normalOrderF normal-orders the field operators and multiplies by the sign of the normal order.

The notation 𝓝(a) is used for normalOrderF a for a an element of FieldOpFreeAlgebra 𝓕.

🔗def
FieldSpecification.WickAlgebra.normalOrder {𝓕 : FieldSpecification} : 𝓕.WickAlgebra →ₗ[] 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.normalOrder {𝓕 : FieldSpecification} : 𝓕.WickAlgebra →ₗ[] 𝓕.WickAlgebra

For a field specification 𝓕, normalOrder is the linear map

WickAlgebra 𝓕 →ₗ[] WickAlgebra 𝓕

defined as the descent of ι ∘ₗ normalOrderF : FieldOpFreeAlgebra 𝓕 →ₗ[] WickAlgebra 𝓕 from FieldOpFreeAlgebra 𝓕 to WickAlgebra 𝓕. This descent exists because ι ∘ₗ normalOrderF is well-defined on equivalence classes.

The notation 𝓝(a) is used for normalOrder a for a an element of WickAlgebra 𝓕.

🔗theorem
FieldSpecification.WickAlgebra.normalOrder_superCommute_eq_zero {𝓕 : FieldSpecification} (a b : 𝓕.WickAlgebra) : FieldSpecification.WickAlgebra.normalOrder ((FieldSpecification.WickAlgebra.superCommute a) b) = 0
FieldSpecification.WickAlgebra.normalOrder_superCommute_eq_zero {𝓕 : FieldSpecification} (a b : 𝓕.WickAlgebra) : FieldSpecification.WickAlgebra.normalOrder ((FieldSpecification.WickAlgebra.superCommute a) b) = 0

For a field specification 𝓕, and a and b in 𝓕.WickAlgebra the normal ordering of the super commutator of a and b vanishes, i.e. 𝓝([a,b]) = 0.

🔗theorem

For a field specification 𝓕, an element φ of 𝓕.CrAnFieldOp, a list φs of 𝓕.CrAnFieldOp, the following relation holds

[φ, 𝓝(φ₀…φₙ)]ₛ = ∑ i, 𝓢(φ, φ₀…φᵢ₋₁) • [φ, φᵢ]ₛ * 𝓝(φ₀…φᵢ₋₁φᵢ₊₁…φₙ).

The proof of this result ultimately goes as follows

  • The definition of normalOrder is used to rewrite 𝓝(φ₀…φₙ) as a scalar multiple of a ofCrAnList φsn where φsn is the normal ordering of φ₀…φₙ.

  • superCommuteF_ofCrAnListF_ofCrAnListF_eq_sum is used to rewrite the super commutator of φ (considered as a list with one element) with ofCrAnList φsn as a sum of super commutators, one for each element of φsn.

  • The fact that super-commutators are in the center of 𝓕.WickAlgebra is used to rearrange terms.

  • Properties of ordered lists, and normalOrderSign_eraseIdx are then used to complete the proof.

🔗theorem
FieldSpecification.WickAlgebra.ofFieldOp_mul_normalOrder_ofFieldOpList_eq_sum {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.ofFieldOp φ * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList φs) = n, FieldSpecification.WickAlgebra.contractStateAtIndex φ φs n * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (PhysLean.List.optionEraseZ φs φ n))
FieldSpecification.WickAlgebra.ofFieldOp_mul_normalOrder_ofFieldOpList_eq_sum {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.ofFieldOp φ * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList φs) = n, FieldSpecification.WickAlgebra.contractStateAtIndex φ φs n * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (PhysLean.List.optionEraseZ φs φ n))

For a field specification 𝓕, a φ in 𝓕.FieldOp and a list φs of 𝓕.FieldOp then φ * 𝓝(φ₀φ₁…φₙ) is equal to

𝓝(φφ₀φ₁…φₙ) + ∑ i, (𝓢(φ,φ₀φ₁…φᵢ₋₁) • [anPart φ, φᵢ]ₛ) * 𝓝(φ₀…φᵢ₋₁φᵢ₊₁…φₙ).

The proof ultimately goes as follows:

  • ofFieldOp_eq_crPart_add_anPart is used to split φ into its creation and annihilation parts.

  • The following relation is then used

    crPart φ * 𝓝(φ₀φ₁…φₙ) = 𝓝(crPart φ * φ₀φ₁…φₙ).

  • It used that anPart φ * 𝓝(φ₀φ₁…φₙ) is equal to

    𝓢(φ, φ₀φ₁…φₙ) 𝓝(φ₀φ₁…φₙ) * anPart φ + [anPart φ, 𝓝(φ₀φ₁…φₙ)]

  • Then it is used that

    𝓢(φ, φ₀φ₁…φₙ) 𝓝(φ₀φ₁…φₙ) * anPart φ = 𝓝(anPart φ * φ₀φ₁…φₙ)

  • The result ofCrAnOp_superCommute_normalOrder_ofCrAnList_sum is used to expand [anPart φ, 𝓝(φ₀φ₁…φₙ)] as a sum.

4.1.5. Wick Contractions

4.1.5.1. Definition

🔗def
WickContraction (n : ) : Type
WickContraction (n : ) : Type

Given a natural number n, which will correspond to the number of fields needing contracting, a Wick contraction is a finite set of pairs of Fin n (numbers 0, ..., n-1), such that no element of Fin n occurs in more than one pair. The pairs are the positions of fields we 'contract' together.

🔗theorem
WickContraction.mem_three (c : WickContraction 3) : ↑c{, {{0, 1}}, {{0, 2}}, {{1, 2}}}
WickContraction.mem_three (c : WickContraction 3) : ↑c{, {{0, 1}}, {{0, 2}}, {{1, 2}}}

For n = 3 there are 4 possible Wick contractions:

  • , corresponding to the case where no fields are contracted.

  • {{0, 1}}, corresponding to the case where the field at position 0 and 1 are contracted.

  • {{0, 2}}, corresponding to the case where the field at position 0 and 2 are contracted.

  • {{1, 2}}, corresponding to the case where the field at position 1 and 2 are contracted.

The proof of this result uses the fact that Lean is an executable programming language and can calculate all Wick contractions for a given n.

🔗theorem
WickContraction.mem_four (c : WickContraction 4) : ↑c{, {{0, 1}}, {{0, 2}}, {{0, 3}}, {{1, 2}}, {{1, 3}}, {{2, 3}}, {{0, 1}, {2, 3}}, {{0, 2}, {1, 3}}, {{0, 3}, {1, 2}}}
WickContraction.mem_four (c : WickContraction 4) : ↑c{, {{0, 1}}, {{0, 2}}, {{0, 3}}, {{1, 2}}, {{1, 3}}, {{2, 3}}, {{0, 1}, {2, 3}}, {{0, 2}, {1, 3}}, {{0, 3}, {1, 2}}}

For n = 4 there are 10 possible Wick contractions including e.g.

  • , corresponding to the case where no fields are contracted.

  • {{0, 1}, {2, 3}}, corresponding to the case where the fields at position 0 and 1 are contracted, and the fields at position 2 and 3 are contracted.

  • {{0, 2}, {1, 3}}, corresponding to the case where the fields at position 0 and 2 are contracted, and the fields at position 1 and 3 are contracted.

The proof of this result uses the fact that Lean is an executable programming language and can calculate all Wick contractions for a given n.

Insert WickContraction.contraction_notation here

🔗def
WickContraction.GradingCompliant {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) : Prop
WickContraction.GradingCompliant {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) : Prop

For a field specification 𝓕, φs a list of 𝓕.FieldOp and a Wick contraction φsΛ of φs, the Wick contraction φsΛ is said to be GradingCompliant if for every pair in φsΛ the contracted fields are either both fermionic or both bosonic. In other words, in a GradingCompliant Wick contraction if no contracted pairs occur between fermionic and bosonic fields.

4.1.5.2. Aside: Cardinality

🔗theorem
WickContraction.card_eq_cardFun (n : ) : Fintype.card (WickContraction n) = WickContraction.cardFun n
WickContraction.card_eq_cardFun (n : ) : Fintype.card (WickContraction n) = WickContraction.cardFun n

The number of Wick contractions in WickContraction n is equal to the terms in Online Encyclopedia of Integer Sequences (OEIS) A000085. That is: 1, 1, 2, 4, 10, 26, 76, 232, 764, 2620, 9496, ...

4.1.5.3. Uncontracted elements

🔗def
WickContraction.uncontracted {n : } (c : WickContraction n) : Finset (Fin n)
WickContraction.uncontracted {n : } (c : WickContraction n) : Finset (Fin n)

For a Wick contraction c, c.uncontracted is defined as the finset of elements of Fin n which are not in any contracted pair.

🔗def
WickContraction.uncontractedListGet {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : List 𝓕.FieldOp
WickContraction.uncontractedListGet {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : List 𝓕.FieldOp

Given a Wick Contraction φsΛ of a list φs of 𝓕.FieldOp. The list φsΛ.uncontractedListGet of 𝓕.FieldOp is defined as the list φs with all contracted positions removed, leaving the uncontracted 𝓕.FieldOp.

The notation [φsΛ] is used for φsΛ.uncontractedListGet.

4.1.5.4. Constructors

🔗def
WickContraction.insertAndContract {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φ : 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : Option { x // xφsΛ.uncontracted }) : WickContraction (φs.insertIdx (↑i) φ).length
WickContraction.insertAndContract {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φ : 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : Option { x // xφsΛ.uncontracted }) : WickContraction (φs.insertIdx (↑i) φ).length

Given a Wick contraction φsΛ for a list φs of 𝓕.FieldOp, an element φ of 𝓕.FieldOp, an i φs.length and a k in Option φsΛ.uncontracted i.e. is either none or some element of φsΛ.uncontracted, the new Wick contraction φsΛ.insertAndContract φ i k is defined by inserting φ into φs after the first i-elements and moving the values representing the contracted pairs in φsΛ accordingly. If k is not none, but rather some k, to this contraction is added the contraction of φ (at position i) with the new position of k after φ is added.

In other words, φsΛ.insertAndContract φ i k is formed by adding φ to φs at position i, and contracting φ with the field originally at position k if k is not none. It is a Wick contraction of the list φs.insertIdx φ i corresponding to φs with φ inserted at position i.

The notation φsΛ ↩Λ φ i k is used to denote φsΛ.insertAndContract φ i k.

🔗theorem
WickContraction.insertLift_sum.{u_1} {𝓕 : FieldSpecification} {M : Type u_1} (φ : 𝓕.FieldOp) {φs : List 𝓕.FieldOp} (i : Fin φs.length.succ) [AddCommMonoid M] (f : WickContraction (φs.insertIdx (↑i) φ).lengthM) : ∑ c, f c = φsΛ, ∑ k, f (WickContraction.insertAndContract φ φsΛ i k)
WickContraction.insertLift_sum.{u_1} {𝓕 : FieldSpecification} {M : Type u_1} (φ : 𝓕.FieldOp) {φs : List 𝓕.FieldOp} (i : Fin φs.length.succ) [AddCommMonoid M] (f : WickContraction (φs.insertIdx (↑i) φ).lengthM) : ∑ c, f c = φsΛ, ∑ k, f (WickContraction.insertAndContract φ φsΛ i k)

For a list φs of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp and a i φs.length then a sum over Wick contractions of φs with φ inserted at i is equal to the sum over Wick contractions φsΛ of just φs and the sum over optional uncontracted elements of the φsΛ.

In other words,

(φsΛ : WickContraction (φs.insertIdx i φ).length), f φsΛ

where (φs.insertIdx i φ) is φs with φ inserted at position i. is equal to

∑ (φsΛ : WickContraction φs.length), ∑ k, f (φsΛ ↩Λ φ i k) .

where the sum over k is over all k in Option φsΛ.uncontracted.

🔗def
WickContraction.join {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (φsucΛ : WickContraction φsΛ.uncontractedListGet.length) : WickContraction φs.length
WickContraction.join {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (φsucΛ : WickContraction φsΛ.uncontractedListGet.length) : WickContraction φs.length

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.

4.1.5.5. Sign

🔗def
WickContraction.sign {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) :
WickContraction.sign {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) :

For a list φs of 𝓕.FieldOp, and a Wick contraction φsΛ of φs, the complex number φsΛ.sign is defined to be the sign (1 or -1) corresponding to the number of fermionic-fermionic exchanges that must be done to put contracted pairs within φsΛ next to one another, starting recursively from the contracted pair whose first element occurs at the left-most position.

As an example, if [φ1, φ2, φ3, φ4] correspond to fermionic fields then the sign associated with

  • {{0, 1}} is 1

  • {{0, 1}, {2, 3}} is 1

  • {{0, 2}, {1, 3}} is -1

🔗theorem
WickContraction.join_sign {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (φsucΛ : WickContraction φsΛ.uncontractedListGet.length) (hc : WickContraction.GradingCompliant φs φsΛ) : WickContraction.sign φs (φsΛ.join φsucΛ) = WickContraction.sign φs φsΛ * WickContraction.sign φsΛ.uncontractedListGet φsucΛ
WickContraction.join_sign {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (φsucΛ : WickContraction φsΛ.uncontractedListGet.length) (hc : WickContraction.GradingCompliant φs φsΛ) : WickContraction.sign φs (φsΛ.join φsucΛ) = WickContraction.sign φs φsΛ * WickContraction.sign φsΛ.uncontractedListGet φsucΛ

For a list φs of 𝓕.FieldOp, a grading compliant Wick contraction φsΛ of φs, and a Wick contraction φsucΛ of [φsΛ], the following relation holds (join φsΛ φsucΛ).sign = φsΛ.sign * φsucΛ.sign.

In φsΛ.sign the sign is determined by starting with the contracted pair whose first element occurs at the left-most position. This lemma manifests that this choice does not matter, and that contracted pairs can be brought together in any order.

🔗theorem
WickContraction.sign_insert_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (hG : WickContraction.GradingCompliant φs φsΛ) : WickContraction.sign (φs.insertIdx (↑i) φ) (WickContraction.insertAndContract φ φsΛ i none) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | (φsΛ.getDual? x).isSome = truei.succAbove x < i}) * WickContraction.sign φs φsΛ
WickContraction.sign_insert_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (hG : WickContraction.GradingCompliant φs φsΛ) : WickContraction.sign (φs.insertIdx (↑i) φ) (WickContraction.insertAndContract φ φsΛ i none) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | (φsΛ.getDual? x).isSome = truei.succAbove x < i}) * WickContraction.sign φs φsΛ

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a graded compliant Wick contraction φsΛ of φs, an i φs.length, and a φ in 𝓕.FieldOp, then (φsΛ ↩Λ φ i none).sign = s * φsΛ.sign where s is the sign arrived at by moving φ through the elements of φ₀…φᵢ₋₁ which are contracted with some element.

The proof of this result involves a careful consideration of the contributions of different FieldOps in φs to the sign of φsΛ ↩Λ φ i none.

🔗theorem
WickContraction.sign_insert_none_zero {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) : WickContraction.sign (φs.insertIdx (↑0) φ) (WickContraction.insertAndContract φ φsΛ 0 none) = WickContraction.sign φs φsΛ
WickContraction.sign_insert_none_zero {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) : WickContraction.sign (φs.insertIdx (↑0) φ) (WickContraction.insertAndContract φ φsΛ 0 none) = WickContraction.sign φs φsΛ

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a graded compliant Wick contraction φsΛ of φs, and a φ in 𝓕.FieldOp, then (φsΛ ↩Λ φ 0 none).sign = φsΛ.sign.

This is a direct corollary of sign_insert_none.

🔗theorem
WickContraction.sign_insert_some_of_not_lt {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : { x // xφsΛ.uncontracted }) (hk : ¬i.succAbovek < i) (hg : WickContraction.GradingCompliant φs φsΛ𝓕.fieldOpStatistic φ = 𝓕.fieldOpStatistic φs[k]) : WickContraction.sign (φs.insertIdx (↑i) φ) (WickContraction.insertAndContract φ φsΛ i (some k)) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | x < k})) * (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | i.succAbove x < i}) * WickContraction.sign φs φsΛ
WickContraction.sign_insert_some_of_not_lt {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : { x // xφsΛ.uncontracted }) (hk : ¬i.succAbovek < i) (hg : WickContraction.GradingCompliant φs φsΛ𝓕.fieldOpStatistic φ = 𝓕.fieldOpStatistic φs[k]) : WickContraction.sign (φs.insertIdx (↑i) φ) (WickContraction.insertAndContract φ φsΛ i (some k)) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | x < k})) * (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | i.succAbove x < i}) * WickContraction.sign φs φsΛ

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, a i φs.length and a k in φsΛ.uncontracted such that i k, the sign of φsΛ ↩Λ φ i (some k) is equal to the product of

  • the sign associated with moving φ through the φsΛ-uncontracted FieldOp in φ₀…φₖ₋₁,

  • the sign associated with moving φ through all the FieldOp in φ₀…φᵢ₋₁,

  • the sign of φsΛ.

The proof of this result involves a careful consideration of the contributions of different FieldOp in φs to the sign of φsΛ ↩Λ φ i (some k).

🔗theorem
WickContraction.sign_insert_some_of_lt {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : { x // xφsΛ.uncontracted }) (hk : i.succAbovek < i) (hg : WickContraction.GradingCompliant φs φsΛ𝓕.fieldOpStatistic φ = 𝓕.fieldOpStatistic φs[k]) : WickContraction.sign (φs.insertIdx (↑i) φ) (WickContraction.insertAndContract φ φsΛ i (some k)) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | xk})) * (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | i.succAbove x < i}) * WickContraction.sign φs φsΛ
WickContraction.sign_insert_some_of_lt {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : { x // xφsΛ.uncontracted }) (hk : i.succAbovek < i) (hg : WickContraction.GradingCompliant φs φsΛ𝓕.fieldOpStatistic φ = 𝓕.fieldOpStatistic φs[k]) : WickContraction.sign (φs.insertIdx (↑i) φ) (WickContraction.insertAndContract φ φsΛ i (some k)) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | xk})) * (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | i.succAbove x < i}) * WickContraction.sign φs φsΛ

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, a i φs.length and a k in φsΛ.uncontracted such that k<i, the sign of φsΛ ↩Λ φ i (some k) is equal to the product of

  • the sign associated with moving φ through the φsΛ-uncontracted FieldOp in φ₀…φₖ,

  • the sign associated with moving φ through all FieldOp in φ₀…φᵢ₋₁,

  • the sign of φsΛ.

The proof of this result involves a careful consideration of the contributions of different FieldOp in φs to the sign of φsΛ ↩Λ φ i (some k).

🔗theorem
WickContraction.sign_insert_some_zero {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (k : { x // xφsΛ.uncontracted }) (hn : WickContraction.GradingCompliant φs φsΛ𝓕.fieldOpStatistic φ = 𝓕.fieldOpStatistic φs[k]) : WickContraction.sign (φs.insertIdx (↑0) φ) (WickContraction.insertAndContract φ φsΛ 0 (some k)) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | x < k})) * WickContraction.sign φs φsΛ
WickContraction.sign_insert_some_zero {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (k : { x // xφsΛ.uncontracted }) (hn : WickContraction.GradingCompliant φs φsΛ𝓕.fieldOpStatistic φ = 𝓕.fieldOpStatistic φs[k]) : WickContraction.sign (φs.insertIdx (↑0) φ) (WickContraction.insertAndContract φ φsΛ 0 (some k)) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | x < k})) * WickContraction.sign φs φsΛ

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, and a k in φsΛ.uncontracted, the sign of φsΛ ↩Λ φ 0 (some k) is equal to the product of

  • the sign associated with moving φ through the φsΛ-uncontracted FieldOp in φ₀…φₖ₋₁,

  • the sign of φsΛ.

This is a direct corollary of sign_insert_some_of_not_lt.

4.1.5.6. Normal order

🔗theorem
FieldSpecification.WickAlgebra.normalOrder_uncontracted_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) : FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (WickContraction.insertAndContract φ φsΛ i none).uncontractedListGet) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | i.succAbove x < i}))FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (φ :: φsΛ.uncontractedListGet))
FieldSpecification.WickAlgebra.normalOrder_uncontracted_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) : FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (WickContraction.insertAndContract φ φsΛ i none).uncontractedListGet) = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | i.succAbove x < i}))FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (φ :: φsΛ.uncontractedListGet))

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, and a i φs.length, then the following relation holds:

𝓝([φsΛ ↩Λ φ i none]ᵘᶜ) = s • 𝓝(φ :: [φsΛ]ᵘᶜ)

where s is the exchange sign for φ and the uncontracted fields in φ₀…φᵢ₋₁.

The proof of this result ultimately is a consequence of normalOrder_superCommute_eq_zero.

🔗theorem
FieldSpecification.WickAlgebra.normalOrder_uncontracted_some {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) (k : { x // xφsΛ.uncontracted }) : FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (WickContraction.insertAndContract φ φsΛ i (some k)).uncontractedListGet) = FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (PhysLean.List.optionEraseZ φsΛ.uncontractedListGet φ ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k))))
FieldSpecification.WickAlgebra.normalOrder_uncontracted_some {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) (k : { x // xφsΛ.uncontracted }) : FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (WickContraction.insertAndContract φ φsΛ i (some k)).uncontractedListGet) = FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (PhysLean.List.optionEraseZ φsΛ.uncontractedListGet φ ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k))))

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, a i φs.length and a k in φsΛ.uncontracted, then 𝓝([φsΛ ↩Λ φ i (some k)]ᵘᶜ) is equal to the normal ordering of [φsΛ] with the 𝓕.FieldOp corresponding to k removed.

The proof of this result ultimately is a consequence of definitions.

4.1.6. Static Wick's theorem

4.1.6.1. Static contractions

🔗def
WickContraction.staticContract {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : ↥(Subalgebra.center 𝓕.WickAlgebra)
WickContraction.staticContract {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : ↥(Subalgebra.center 𝓕.WickAlgebra)

For a list φs of 𝓕.FieldOp and a Wick contraction φsΛ, the element of the center of 𝓕.WickAlgebra, φsΛ.staticContract is defined as the product of [anPart φs[j], φs[k]] over contracted pairs {j, k} in φsΛ with j < k.

🔗theorem
WickContraction.staticContract_insert_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) : (WickContraction.insertAndContract φ φsΛ i none).staticContract = φsΛ.staticContract
WickContraction.staticContract_insert_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) : (WickContraction.insertAndContract φ φsΛ i none).staticContract = φsΛ.staticContract

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, and a i φs.length, then the following relation holds:

(φsΛ ↩Λ φ i none).staticContract = φsΛ.staticContract

The proof of this result ultimately is a consequence of definitions.

🔗theorem
WickContraction.staticContract_insert_some {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : { x // xφsΛ.uncontracted }) : (WickContraction.insertAndContract φ φsΛ i (some j)).staticContract = (if i < i.succAbovej then ⟨(FieldSpecification.WickAlgebra.superCommute (FieldSpecification.WickAlgebra.anPart φ)) (FieldSpecification.WickAlgebra.ofFieldOp φs[j]), ⋯⟩ else ⟨(FieldSpecification.WickAlgebra.superCommute (FieldSpecification.WickAlgebra.anPart φs[j])) (FieldSpecification.WickAlgebra.ofFieldOp φ), ⋯⟩) * φsΛ.staticContract
WickContraction.staticContract_insert_some {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : { x // xφsΛ.uncontracted }) : (WickContraction.insertAndContract φ φsΛ i (some j)).staticContract = (if i < i.succAbovej then ⟨(FieldSpecification.WickAlgebra.superCommute (FieldSpecification.WickAlgebra.anPart φ)) (FieldSpecification.WickAlgebra.ofFieldOp φs[j]), ⋯⟩ else ⟨(FieldSpecification.WickAlgebra.superCommute (FieldSpecification.WickAlgebra.anPart φs[j])) (FieldSpecification.WickAlgebra.ofFieldOp φ), ⋯⟩) * φsΛ.staticContract

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, a i φs.length and a k in φsΛ.uncontracted, then (φsΛ ↩Λ φ i (some k)).staticContract is equal to the product of

  • [anPart φ, φs[k]] if i k or [anPart φs[k], φ] if k < i

  • φsΛ.staticContract.

The proof of this result ultimately is a consequence of definitions.

4.1.6.2. Static Wick terms

🔗def
WickContraction.staticWickTerm {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : 𝓕.WickAlgebra
WickContraction.staticWickTerm {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : 𝓕.WickAlgebra

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.

🔗theorem
WickContraction.staticWickTerm_empty_nil {𝓕 : FieldSpecification} : WickContraction.empty.staticWickTerm = 1
WickContraction.staticWickTerm_empty_nil {𝓕 : FieldSpecification} : WickContraction.empty.staticWickTerm = 1

For the empty list [] of 𝓕.FieldOp, the staticWickTerm of the Wick contraction corresponding to the empty set (the only Wick contraction of []) is 1.

🔗theorem
WickContraction.staticWickTerm_insert_zero_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) : (WickContraction.insertAndContract φ φsΛ 0 none).staticWickTerm = WickContraction.sign φs φsΛφsΛ.staticContract * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (φ :: φsΛ.uncontractedListGet))
WickContraction.staticWickTerm_insert_zero_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) : (WickContraction.insertAndContract φ φsΛ 0 none).staticWickTerm = WickContraction.sign φs φsΛφsΛ.staticContract * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (φ :: φsΛ.uncontractedListGet))

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.

🔗theorem
WickContraction.staticWickTerm_insert_zero_some {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (k : { x // xφsΛ.uncontracted }) : (WickContraction.insertAndContract φ φsΛ 0 (some k)).staticWickTerm = WickContraction.sign φs φsΛ(φsΛ.staticContract * (FieldSpecification.WickAlgebra.contractStateAtIndex φ φsΛ.uncontractedListGet ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)) * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (PhysLean.List.optionEraseZ φsΛ.uncontractedListGet φ ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k))))))
WickContraction.staticWickTerm_insert_zero_some {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (k : { x // xφsΛ.uncontracted }) : (WickContraction.insertAndContract φ φsΛ 0 (some k)).staticWickTerm = WickContraction.sign φs φsΛ(φsΛ.staticContract * (FieldSpecification.WickAlgebra.contractStateAtIndex φ φsΛ.uncontractedListGet ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)) * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (PhysLean.List.optionEraseZ φsΛ.uncontractedListGet φ ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k))))))

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.

🔗theorem
WickContraction.mul_staticWickTerm_eq_sum {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) : FieldSpecification.WickAlgebra.ofFieldOp φ * φsΛ.staticWickTerm = k, (WickContraction.insertAndContract φ φsΛ 0 k).staticWickTerm
WickContraction.mul_staticWickTerm_eq_sum {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) : FieldSpecification.WickAlgebra.ofFieldOp φ * φsΛ.staticWickTerm = k, (WickContraction.insertAndContract φ φsΛ 0 k).staticWickTerm

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.

4.1.6.3. The Static Wick's theorem

🔗theorem
FieldSpecification.WickAlgebra.static_wick_theorem {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.ofFieldOpList φs = φsΛ, φsΛ.staticWickTerm
FieldSpecification.WickAlgebra.static_wick_theorem {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.ofFieldOpList φs = φsΛ, φsΛ.staticWickTerm

For a list φs of 𝓕.FieldOp, the static version of Wick's theorem states that

φs = φsΛ, φsΛ.staticWickTerm

where the sum is over all Wick contraction φsΛ.

The proof is via induction on φs.

  • The base case φs = [] is handled by staticWickTerm_empty_nil.

The inductive step works as follows:

For the LHS:

  1. The proof considers φ₀…φₙ as φ₀(φ₁…φₙ) and uses the induction hypothesis on φ₁…φₙ.

  2. This gives terms of the form φ * φsΛ.staticWickTerm on which mul_staticWickTerm_eq_sum is used where φsΛ is a Wick contraction of φ₁…φₙ, to rewrite terms as a sum over optional uncontracted elements of φsΛ

On the LHS we now have a sum over Wick contractions φsΛ of φ₁…φₙ (from 1) and optional uncontracted elements of φsΛ (from 2)

For the RHS:

  1. The sum over Wick contractions of φ₀…φₙ on the RHS is split via insertLift_sum into a sum over Wick contractions φsΛ of φ₁…φₙ and sum over optional uncontracted elements of φsΛ.

Both sides are now sums over the same thing and their terms equate by the nature of the lemmas used.

4.1.7. Wick's theorem

4.1.7.1. Time contractions

🔗def
FieldSpecification.WickAlgebra.timeContract {𝓕 : FieldSpecification} (φ ψ : 𝓕.FieldOp) : 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.timeContract {𝓕 : FieldSpecification} (φ ψ : 𝓕.FieldOp) : 𝓕.WickAlgebra

For a field specification 𝓕, and φ and ψ elements of 𝓕.FieldOp, the element of 𝓕.WickAlgebra, timeContract φ ψ is defined to be 𝓣(φψ) - 𝓝(φψ).

🔗theorem
FieldSpecification.WickAlgebra.timeContract_of_timeOrderRel {𝓕 : FieldSpecification} (φ ψ : 𝓕.FieldOp) (h : FieldSpecification.timeOrderRel φ ψ) : FieldSpecification.WickAlgebra.timeContract φ ψ = (FieldSpecification.WickAlgebra.superCommute (FieldSpecification.WickAlgebra.anPart φ)) (FieldSpecification.WickAlgebra.ofFieldOp ψ)
FieldSpecification.WickAlgebra.timeContract_of_timeOrderRel {𝓕 : FieldSpecification} (φ ψ : 𝓕.FieldOp) (h : FieldSpecification.timeOrderRel φ ψ) : FieldSpecification.WickAlgebra.timeContract φ ψ = (FieldSpecification.WickAlgebra.superCommute (FieldSpecification.WickAlgebra.anPart φ)) (FieldSpecification.WickAlgebra.ofFieldOp ψ)

For a field specification 𝓕, and φ and ψ elements of 𝓕.FieldOp, if φ and ψ are time-ordered then

timeContract φ ψ = [anPart φ, ofFieldOp ψ].

🔗theorem
FieldSpecification.WickAlgebra.timeContract_of_not_timeOrderRel_expand {𝓕 : FieldSpecification} (φ ψ : 𝓕.FieldOp) (h : ¬FieldSpecification.timeOrderRel φ ψ) : FieldSpecification.WickAlgebra.timeContract φ ψ = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (𝓕.fieldOpStatistic ψ)(FieldSpecification.WickAlgebra.superCommute (FieldSpecification.WickAlgebra.anPart ψ)) (FieldSpecification.WickAlgebra.ofFieldOp φ)
FieldSpecification.WickAlgebra.timeContract_of_not_timeOrderRel_expand {𝓕 : FieldSpecification} (φ ψ : 𝓕.FieldOp) (h : ¬FieldSpecification.timeOrderRel φ ψ) : FieldSpecification.WickAlgebra.timeContract φ ψ = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (𝓕.fieldOpStatistic ψ)(FieldSpecification.WickAlgebra.superCommute (FieldSpecification.WickAlgebra.anPart ψ)) (FieldSpecification.WickAlgebra.ofFieldOp φ)

For a field specification 𝓕, and φ and ψ elements of 𝓕.FieldOp, if φ and ψ are not time-ordered then

timeContract φ ψ = 𝓢(𝓕 |> φ, 𝓕 |> ψ) [anPart ψ, ofFieldOp φ].

🔗theorem
FieldSpecification.WickAlgebra.timeContract_mem_center {𝓕 : FieldSpecification} (φ ψ : 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeContract φ ψSubalgebra.center 𝓕.WickAlgebra
FieldSpecification.WickAlgebra.timeContract_mem_center {𝓕 : FieldSpecification} (φ ψ : 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeContract φ ψSubalgebra.center 𝓕.WickAlgebra

For a field specification 𝓕, and φ and ψ elements of 𝓕.FieldOp, then timeContract φ ψ is in the center of 𝓕.WickAlgebra.

🔗def
WickContraction.timeContract {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : ↥(Subalgebra.center 𝓕.WickAlgebra)
WickContraction.timeContract {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : ↥(Subalgebra.center 𝓕.WickAlgebra)

For a list φs of 𝓕.FieldOp and a Wick contraction φsΛ the element of the center of 𝓕.WickAlgebra, φsΛ.timeContract is defined as the product of timeContract φs[j] φs[k] over contracted pairs {j, k} in φsΛ with j < k.

🔗theorem
WickContraction.timeContract_insert_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) : (WickContraction.insertAndContract φ φsΛ i none).timeContract = φsΛ.timeContract
WickContraction.timeContract_insert_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) : (WickContraction.insertAndContract φ φsΛ i none).timeContract = φsΛ.timeContract

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, and a i φs.length the following relation holds

(φsΛ ↩Λ φ i none).timeContract = φsΛ.timeContract

The proof of this result ultimately is a consequence of definitions.

🔗theorem
WickContraction.timeContract_insert_some_of_not_lt {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : { x // xφsΛ.uncontracted }) (ht : ¬FieldSpecification.timeOrderRel φs[k] φ) (hik : ¬i < i.succAbovek) : ↑(WickContraction.insertAndContract φ φsΛ i (some k)).timeContract = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | xk}))(FieldSpecification.WickAlgebra.contractStateAtIndex φ φsΛ.uncontractedListGet ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)) * φsΛ.timeContract)
WickContraction.timeContract_insert_some_of_not_lt {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : { x // xφsΛ.uncontracted }) (ht : ¬FieldSpecification.timeOrderRel φs[k] φ) (hik : ¬i < i.succAbovek) : ↑(WickContraction.insertAndContract φ φsΛ i (some k)).timeContract = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | xk}))(FieldSpecification.WickAlgebra.contractStateAtIndex φ φsΛ.uncontractedListGet ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)) * φsΛ.timeContract)

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, a i φs.length and a k in φsΛ.uncontracted such that k < i, with the condition that φs[k] does not have time greater or equal to φ, then (φsΛ ↩Λ φ i (some k)).timeContract is equal to the product of

  • [anPart φ, φs[k]]

  • φsΛ.timeContract

  • the exchange sign of φ with the uncontracted fields in φ₀…φₖ₋₁.

  • the exchange sign of φ with the uncontracted fields in φ₀…φₖ.

The proof of this result ultimately is a consequence of definitions and timeContract_of_not_timeOrderRel_expand.

🔗theorem
WickContraction.timeContract_insert_some_of_lt {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : { x // xφsΛ.uncontracted }) (ht : FieldSpecification.timeOrderRel φ φs[k]) (hik : i < i.succAbovek) : ↑(WickContraction.insertAndContract φ φsΛ i (some k)).timeContract = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | x < k}))(FieldSpecification.WickAlgebra.contractStateAtIndex φ φsΛ.uncontractedListGet ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)) * φsΛ.timeContract)
WickContraction.timeContract_insert_some_of_lt {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : { x // xφsΛ.uncontracted }) (ht : FieldSpecification.timeOrderRel φ φs[k]) (hik : i < i.succAbovek) : ↑(WickContraction.insertAndContract φ φsΛ i (some k)).timeContract = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get ({xφsΛ.uncontracted | x < k}))(FieldSpecification.WickAlgebra.contractStateAtIndex φ φsΛ.uncontractedListGet ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)) * φsΛ.timeContract)

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, a i φs.length and a k in φsΛ.uncontracted such that i k, with the condition that φ has greater or equal time to φs[k], then (φsΛ ↩Λ φ i (some k)).timeContract is equal to the product of

  • [anPart φ, φs[k]]

  • φsΛ.timeContract

  • two copies of the exchange sign of φ with the uncontracted fields in φ₀…φₖ₋₁. These two exchange signs cancel each other out but are included for convenience.

The proof of this result ultimately is a consequence of definitions and timeContract_of_timeOrderRel.

🔗theorem
WickContraction.join_sign_timeContract {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (φsucΛ : WickContraction φsΛ.uncontractedListGet.length) : WickContraction.sign φs (φsΛ.join φsucΛ)↑(φsΛ.join φsucΛ).timeContract = WickContraction.sign φs φsΛφsΛ.timeContract * WickContraction.sign φsΛ.uncontractedListGet φsucΛφsucΛ.timeContract
WickContraction.join_sign_timeContract {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (φsucΛ : WickContraction φsΛ.uncontractedListGet.length) : WickContraction.sign φs (φsΛ.join φsucΛ)↑(φsΛ.join φsucΛ).timeContract = WickContraction.sign φs φsΛφsΛ.timeContract * WickContraction.sign φsΛ.uncontractedListGet φsucΛφsucΛ.timeContract

For a list φs of 𝓕.FieldOp, a Wick contraction φsΛ of φs, and a Wick contraction φsucΛ of [φsΛ], (join φsΛ φsucΛ).sign (join φsΛ φsucΛ).timeContract is equal to the product of

4.1.7.2. Wick terms

🔗def
WickContraction.wickTerm {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : 𝓕.WickAlgebra
WickContraction.wickTerm {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) : 𝓕.WickAlgebra

For a list φs of 𝓕.FieldOp, and a Wick contraction φsΛ of φs, the element of 𝓕.WickAlgebra, φsΛ.wickTerm is defined as

φsΛ.sign φsΛ.timeContract * 𝓝([φsΛ]).

This is a term which appears in the Wick's theorem.

🔗theorem
WickContraction.wickTerm_empty_nil {𝓕 : FieldSpecification} : WickContraction.empty.wickTerm = 1
WickContraction.wickTerm_empty_nil {𝓕 : FieldSpecification} : WickContraction.empty.wickTerm = 1

For the empty list [] of 𝓕.FieldOp, the wickTerm of the Wick contraction corresponding to the empty set (the only Wick contraction of []) is 1.

🔗theorem
WickContraction.wickTerm_insert_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) : (WickContraction.insertAndContract φ φsΛ i none).wickTerm = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {k | i.succAbove k < i})(WickContraction.sign φs φsΛφsΛ.timeContract * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (φ :: φsΛ.uncontractedListGet)))
WickContraction.wickTerm_insert_none {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) : (WickContraction.insertAndContract φ φsΛ i none).wickTerm = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {k | i.succAbove k < i})(WickContraction.sign φs φsΛφsΛ.timeContract * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (φ :: φsΛ.uncontractedListGet)))

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, and i φs.length, then (φsΛ ↩Λ φ i none).wickTerm is equal to

𝓢(φ, φ₀…φᵢ₋₁) φsΛ.sign • φsΛ.timeContract * 𝓝(φ :: [φsΛ]ᵘᶜ)

The proof of this result relies on

  • normalOrder_uncontracted_none to rewrite normal orderings.

  • timeContract_insert_none to rewrite the time contract.

  • sign_insert_none to rewrite the sign.

🔗theorem
WickContraction.wickTerm_insert_some {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) (k : { x // xφsΛ.uncontracted }) (hlt : ∀ (k : Fin φs.length), FieldSpecification.timeOrderRel φ φs[k]) (hn : ∀ (k : Fin φs.length), i.succAbove k < i¬FieldSpecification.timeOrderRel φs[k] φ) : (WickContraction.insertAndContract φ φsΛ i (some k)).wickTerm = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | i.succAbove x < i})(WickContraction.sign φs φsΛ(FieldSpecification.WickAlgebra.contractStateAtIndex φ φsΛ.uncontractedListGet ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)) * φsΛ.timeContract) * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (PhysLean.List.optionEraseZ φsΛ.uncontractedListGet φ ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)))))
WickContraction.wickTerm_insert_some {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) (k : { x // xφsΛ.uncontracted }) (hlt : ∀ (k : Fin φs.length), FieldSpecification.timeOrderRel φ φs[k]) (hn : ∀ (k : Fin φs.length), i.succAbove k < i¬FieldSpecification.timeOrderRel φs[k] φ) : (WickContraction.insertAndContract φ φsΛ i (some k)).wickTerm = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | i.succAbove x < i})(WickContraction.sign φs φsΛ(FieldSpecification.WickAlgebra.contractStateAtIndex φ φsΛ.uncontractedListGet ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)) * φsΛ.timeContract) * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (PhysLean.List.optionEraseZ φsΛ.uncontractedListGet φ ((WickContraction.uncontractedFieldOpEquiv φs φsΛ) (some k)))))

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, i φs.length and a k in φsΛ.uncontracted, such that all 𝓕.FieldOp in φ₀…φᵢ₋₁ have time strictly less than φ and φ has a time greater than or equal to all FieldOp in φ₀…φₙ, then (φsΛ ↩Λ φ i (some k)).staticWickTerm is equal to the product of

  • the sign 𝓢(φ, φ₀…φᵢ₋₁)

  • the sign φsΛ.sign

  • φsΛ.timeContract

  • s [anPart φ, ofFieldOp φs[k]] where s is the sign associated with moving φ through uncontracted fields in φ₀…φₖ₋₁

  • the normal ordering [φsΛ] with the field corresponding to k removed.

The proof of this result relies on

  • timeContract_insert_some_of_not_lt and timeContract_insert_some_of_lt to rewrite time contractions.

  • normalOrder_uncontracted_some to rewrite normal orderings.

  • sign_insert_some_of_not_lt and sign_insert_some_of_lt to rewrite signs.

🔗theorem
WickContraction.mul_wickTerm_eq_sum {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) (hlt : ∀ (k : Fin φs.length), FieldSpecification.timeOrderRel φ φs[k]) (hn : ∀ (k : Fin φs.length), i.succAbove k < i¬FieldSpecification.timeOrderRel φs[k] φ) : FieldSpecification.WickAlgebra.ofFieldOp φ * φsΛ.wickTerm = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | i.succAbove x < i})k, (WickContraction.insertAndContract φ φsΛ i k).wickTerm
WickContraction.mul_wickTerm_eq_sum {𝓕 : FieldSpecification} (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (i : Fin φs.length.succ) (φsΛ : WickContraction φs.length) (hlt : ∀ (k : Fin φs.length), FieldSpecification.timeOrderRel φ φs[k]) (hn : ∀ (k : Fin φs.length), i.succAbove k < i¬FieldSpecification.timeOrderRel φs[k] φ) : FieldSpecification.WickAlgebra.ofFieldOp φ * φsΛ.wickTerm = (FieldStatistic.exchangeSign (𝓕.fieldOpStatistic φ)) (FieldStatistic.ofFinset 𝓕.fieldOpStatistic φs.get {x | i.succAbove x < i})k, (WickContraction.insertAndContract φ φsΛ i k).wickTerm

For a list φs = φ₀…φₙ of 𝓕.FieldOp, a Wick contraction φsΛ of φs, an element φ of 𝓕.FieldOp, and i φs.length such that all 𝓕.FieldOp in φ₀…φᵢ₋₁ have time strictly less than φ and φ has a time greater than or equal to all FieldOp in φ₀…φₙ, then

φ * φsΛ.wickTerm = 𝓢(φ, φ₀…φᵢ₋₁) • ∑ k, (φsΛ ↩Λ φ i k).wickTerm

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 wickTerm_insert_none and wickTerm_insert_some are used to equate terms.

4.1.7.3. Wick's theorem

🔗theorem
FieldSpecification.wicks_theorem {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.ofFieldOpList φs) = φsΛ, φsΛ.wickTerm
FieldSpecification.wicks_theorem {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.ofFieldOpList φs) = φsΛ, φsΛ.wickTerm

For a list φs of 𝓕.FieldOp, Wick's theorem states that

𝓣(φs) = φsΛ, φsΛ.wickTerm

where the sum is over all Wick contraction φsΛ.

The proof is via induction on φs.

  • The base case φs = [] is handled by wickTerm_empty_nil.

The inductive step works as follows:

For the LHS:

  1. timeOrder_eq_maxTimeField_mul_finset is used to write 𝓣(φ₀…φₙ) as 𝓢(φᵢ,φ₀…φᵢ₋₁) • φᵢ * 𝓣(φ₀…φᵢ₋₁φᵢ₊₁φₙ) where φᵢ is the maximal time field in φ₀…φₙ

  2. The induction hypothesis is then used on 𝓣(φ₀…φᵢ₋₁φᵢ₊₁φₙ) to expand it as a sum over Wick contractions of φ₀…φᵢ₋₁φᵢ₊₁φₙ.

  3. This gives terms of the form φᵢ * φsΛ.wickTerm on which mul_wickTerm_eq_sum is used where φsΛ is a Wick contraction of φ₀…φᵢ₋₁φᵢ₊₁φ, to rewrite terms as a sum over optional uncontracted elements of φsΛ

On the LHS we now have a sum over Wick contractions φsΛ of φ₀…φᵢ₋₁φᵢ₊₁φ (from 2) and optional uncontracted elements of φsΛ (from 3)

For the RHS:

  1. The sum over Wick contractions of φ₀…φₙ on the RHS is split via insertLift_sum into a sum over Wick contractions φsΛ of φ₀…φᵢ₋₁φᵢ₊₁φ and sum over optional uncontracted elements of φsΛ.

Both sides are now sums over the same thing and their terms equate by the nature of the lemmas used.

4.1.8. Normal-ordered Wick's theorem

🔗theorem
WickContraction.EqTimeOnly.timeOrder_staticContract_of_not_mem {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (hl : ¬φsΛ.EqTimeOnly) : FieldSpecification.WickAlgebra.timeOrderφsΛ.staticContract = 0
WickContraction.EqTimeOnly.timeOrder_staticContract_of_not_mem {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (hl : ¬φsΛ.EqTimeOnly) : FieldSpecification.WickAlgebra.timeOrderφsΛ.staticContract = 0

Let φs be a list of 𝓕.FieldOp and φsΛ a WickContraction with at least one contraction between 𝓕.FieldOp that do not have the same time. Then 𝓣(φsΛ.staticContract.1) = 0.

🔗theorem
WickContraction.EqTimeOnly.staticContract_eq_timeContract_of_eqTimeOnly {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (h : φsΛ.EqTimeOnly) : φsΛ.staticContract = φsΛ.timeContract
WickContraction.EqTimeOnly.staticContract_eq_timeContract_of_eqTimeOnly {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (h : φsΛ.EqTimeOnly) : φsΛ.staticContract = φsΛ.timeContract

Let φs be a list of 𝓕.FieldOp and φsΛ a WickContraction of φs within which every contraction involves two 𝓕.FieldOps that have the same time, then φsΛ.staticContract = φsΛ.timeContract.

🔗theorem
WickContraction.EqTimeOnly.timeOrder_timeContract_mul_of_eqTimeOnly_left {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (hl : φsΛ.EqTimeOnly) (b : 𝓕.WickAlgebra) : FieldSpecification.WickAlgebra.timeOrder (φsΛ.timeContract * b) = φsΛ.timeContract * FieldSpecification.WickAlgebra.timeOrder b
WickContraction.EqTimeOnly.timeOrder_timeContract_mul_of_eqTimeOnly_left {𝓕 : FieldSpecification} {φs : List 𝓕.FieldOp} (φsΛ : WickContraction φs.length) (hl : φsΛ.EqTimeOnly) (b : 𝓕.WickAlgebra) : FieldSpecification.WickAlgebra.timeOrder (φsΛ.timeContract * b) = φsΛ.timeContract * FieldSpecification.WickAlgebra.timeOrder b

Let φs be a list of 𝓕.FieldOp, φsΛ a WickContraction of φs within which every contraction involves two 𝓕.FieldOps that have the same time and b a general element in 𝓕.WickAlgebra. Then 𝓣(φsΛ.timeContract.1 * b) = φsΛ.timeContract.1 * 𝓣(b).

This follows from properties of orderings and the ideal defining 𝓕.WickAlgebra.

🔗theorem

For a list φs of 𝓕.FieldOp, then

𝓣(φs) = φsΛ, φsΛ.sign φsΛ.timeContract * 𝓣(𝓝([φsΛ]))

where the sum is over all Wick contraction φsΛ which only have equal time contractions.

This result follows from

  • static_wick_theorem to rewrite 𝓣(φs) on the left hand side as a sum of 𝓣(φsΛ.staticWickTerm).

  • EqTimeOnly.timeOrder_staticContract_of_not_mem and timeOrder_timeOrder_mid to set to those 𝓣(φsΛ.staticWickTerm) for which φsΛ has a contracted pair which are not equal time to zero.

  • staticContract_eq_timeContract_of_eqTimeOnly to rewrite the static contract in the remaining 𝓣(φsΛ.staticWickTerm) as a time contract.

  • timeOrder_timeContract_mul_of_eqTimeOnly_left to move the time contracts out of the time ordering.

🔗theorem

For a list φs of 𝓕.FieldOp, then

𝓣(𝓝(φs)) = 𝓣(φs) - φsΛ, φsΛ.sign φsΛ.timeContract.1 * 𝓣(𝓝([φsΛ]))

where the sum is over all non-empty Wick contraction φsΛ which only have equal time contractions.

This result follows directly from

  • timeOrder_ofFieldOpList_eqTimeOnly

🔗theorem
FieldSpecification.WickAlgebra.timeOrder_haveEqTime_split {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.ofFieldOpList φs) = φsΛ, WickContraction.sign φsφsΛ↑(↑φsΛ).timeContract * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (↑φsΛ).uncontractedListGet) + φsΛ, WickContraction.sign φsφsΛ↑(↑φsΛ).timeContract * φssucΛ, (↑φssucΛ).wickTerm
FieldSpecification.WickAlgebra.timeOrder_haveEqTime_split {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.ofFieldOpList φs) = φsΛ, WickContraction.sign φsφsΛ↑(↑φsΛ).timeContract * FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList (↑φsΛ).uncontractedListGet) + φsΛ, WickContraction.sign φsφsΛ↑(↑φsΛ).timeContract * φssucΛ, (↑φssucΛ).wickTerm

For a list φs of 𝓕.FieldOp, then 𝓣(φs) is equal to the sum of

  • φsΛ, φsΛ.wickTerm where the sum is over all Wick contraction φsΛ which have no contractions of equal time.

  • φsΛ, φsΛ.sign φsΛ.timeContract * ( φssucΛ, φssucΛ.wickTerm), where the first sum is over all Wick contraction φsΛ which only have equal time contractions and the second sum is over all Wick contraction φssucΛ of the uncontracted elements of φsΛ which do not have any equal time contractions.

The proof proceeds as follows

  • wicks_theorem is used to rewrite 𝓣(φs) as a sum over all Wick contractions.

  • The sum over all Wick contractions is then split additively into two parts based on having or not having an equal time contractions.

  • Using join, the sum φsΛ, _ over Wick contractions which do have equal time contractions is split into two sums φsΛ, φsucΛ, _, the first over non-zero elements which only have equal time contractions and the second over Wick contractions φsucΛ of [φsΛ] which do not have equal time contractions.

  • join_sign_timeContract is then used to equate terms.

🔗theorem
FieldSpecification.WickAlgebra.wicks_theorem_normal_order {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList φs)) = φsΛ, (↑φsΛ).wickTerm
FieldSpecification.WickAlgebra.wicks_theorem_normal_order {𝓕 : FieldSpecification} (φs : List 𝓕.FieldOp) : FieldSpecification.WickAlgebra.timeOrder (FieldSpecification.WickAlgebra.normalOrder (FieldSpecification.WickAlgebra.ofFieldOpList φs)) = φsΛ, (↑φsΛ).wickTerm

For a list φs of 𝓕.FieldOp, the normal-ordered version of Wick's theorem states that

𝓣(𝓝(φs)) = φsΛ, φsΛ.wickTerm

where the sum is over all Wick contraction φsΛ in which no two contracted elements have the same time.

The proof proceeds by induction on φs, with the base case [] holding by following through definitions. and the inductive case holding as a result of

  • timeOrder_haveEqTime_split

  • normalOrder_timeOrder_ofFieldOpList_eq_eqTimeOnly_empty

  • and the induction hypothesis on 𝓣(𝓝([φsΛ.1])) for contractions φsΛ of φs which only have equal time contractions and are non-empty.