diff --git a/HepLean/PerturbationTheory/FieldOpAlgebra/Basic.lean b/HepLean/PerturbationTheory/FieldOpAlgebra/Basic.lean index 92ac539c..a72bd169 100644 --- a/HepLean/PerturbationTheory/FieldOpAlgebra/Basic.lean +++ b/HepLean/PerturbationTheory/FieldOpAlgebra/Basic.lean @@ -501,18 +501,18 @@ def anPart (Ο† : 𝓕.FieldOp) : 𝓕.FieldOpAlgebra := ΞΉ (anPartF Ο†) lemma anPart_eq_ΞΉ_anPartF (Ο† : 𝓕.FieldOp) : anPart Ο† = ΞΉ (anPartF Ο†) := rfl @[simp] -lemma anPart_negAsymp (Ο† : 𝓕.IncomingAsymptotic) : +lemma anPart_negAsymp (Ο† : 𝓕.Fields Γ— Lorentz.Contr 4) : anPart (FieldOp.inAsymp Ο†) = 0 := by simp [anPart, anPartF] @[simp] -lemma anPart_position (Ο† : 𝓕.PositionFieldOp) : +lemma anPart_position (Ο† : 𝓕.Fields Γ— SpaceTime) : anPart (FieldOp.position Ο†) = ofCrAnFieldOp ⟨FieldOp.position Ο†, CreateAnnihilate.annihilate⟩ := by simp [anPart, ofCrAnFieldOp] @[simp] -lemma anPart_posAsymp (Ο† : 𝓕.OutgoingAsymptotic) : +lemma anPart_posAsymp (Ο† : 𝓕.Fields Γ— Lorentz.Contr 4) : anPart (FieldOp.outAsymp Ο†) = ofCrAnFieldOp ⟨FieldOp.outAsymp Ο†, ()⟩ := by simp [anPart, ofCrAnFieldOp] @@ -522,18 +522,18 @@ def crPart (Ο† : 𝓕.FieldOp) : 𝓕.FieldOpAlgebra := ΞΉ (crPartF Ο†) lemma crPart_eq_ΞΉ_crPartF (Ο† : 𝓕.FieldOp) : crPart Ο† = ΞΉ (crPartF Ο†) := rfl @[simp] -lemma crPart_negAsymp (Ο† : 𝓕.IncomingAsymptotic) : +lemma crPart_negAsymp (Ο† : 𝓕.Fields Γ— Lorentz.Contr 4) : crPart (FieldOp.inAsymp Ο†) = ofCrAnFieldOp ⟨FieldOp.inAsymp Ο†, ()⟩ := by simp [crPart, ofCrAnFieldOp] @[simp] -lemma crPart_position (Ο† : 𝓕.PositionFieldOp) : +lemma crPart_position (Ο† : 𝓕.Fields Γ— SpaceTime) : crPart (FieldOp.position Ο†) = ofCrAnFieldOp ⟨FieldOp.position Ο†, CreateAnnihilate.create⟩ := by simp [crPart, ofCrAnFieldOp] @[simp] -lemma crPart_posAsymp (Ο† : 𝓕.OutgoingAsymptotic) : +lemma crPart_posAsymp (Ο† : 𝓕.Fields Γ— Lorentz.Contr 4) : crPart (FieldOp.outAsymp Ο†) = 0 := by simp [crPart] diff --git a/HepLean/PerturbationTheory/FieldOpAlgebra/TimeOrder.lean b/HepLean/PerturbationTheory/FieldOpAlgebra/TimeOrder.lean index afbf9dd4..0326d2ef 100644 --- a/HepLean/PerturbationTheory/FieldOpAlgebra/TimeOrder.lean +++ b/HepLean/PerturbationTheory/FieldOpAlgebra/TimeOrder.lean @@ -506,5 +506,13 @@ lemma timeOrder_timeOrder_right (a b : 𝓕.FieldOpAlgebra) : rw [timeOrder_timeOrder_mid] simp +/-- Time ordering is a projection. -/ +lemma timeOrder_timeOrder (a : 𝓕.FieldOpAlgebra) : + 𝓣(𝓣(a)) = 𝓣(a) := by + trans 𝓣(𝓣(a) * 1) + Β· simp + Β· rw [← timeOrder_timeOrder_left] + simp + end FieldOpAlgebra end FieldSpecification diff --git a/HepLean/PerturbationTheory/FieldOpFreeAlgebra/Basic.lean b/HepLean/PerturbationTheory/FieldOpFreeAlgebra/Basic.lean index 81293383..46d88511 100644 --- a/HepLean/PerturbationTheory/FieldOpFreeAlgebra/Basic.lean +++ b/HepLean/PerturbationTheory/FieldOpFreeAlgebra/Basic.lean @@ -34,11 +34,12 @@ super commutation relations between creation and annihilation operators. namespace FieldSpecification variable {𝓕 : FieldSpecification} -/-- The creation and annihlation free-algebra. - The free algebra generated by `CrAnFieldOp`, - that is a position based states or assymptotic states with a specification of - whether the state is a creation or annihlation state. - As a module `FieldOpFreeAlgebra` is spanned by lists of `CrAnFieldOp`. -/ +/-- For a field specification `𝓕`, the algebra `𝓕.FieldOpFreeAlgebra` is + the algebra is generated by creation and annihilation parts of field operators defined in + `𝓕.CrAnFieldOp`. + It represents the algebra containing all possible products and linear combinations + of creation and annihilation parts of field operators, without imposing any conditions. +-/ abbrev FieldOpFreeAlgebra (𝓕 : FieldSpecification) : Type := FreeAlgebra β„‚ 𝓕.CrAnFieldOp namespace FieldOpFreeAlgebra @@ -120,18 +121,18 @@ def crPartF : 𝓕.FieldOp β†’ 𝓕.FieldOpFreeAlgebra := fun Ο† => | FieldOp.outAsymp _ => 0 @[simp] -lemma crPartF_negAsymp (Ο† : 𝓕.IncomingAsymptotic) : +lemma crPartF_negAsymp (Ο† : 𝓕.Fields Γ— Lorentz.Contr 4) : crPartF (FieldOp.inAsymp Ο†) = ofCrAnOpF ⟨FieldOp.inAsymp Ο†, ()⟩ := by simp [crPartF] @[simp] -lemma crPartF_position (Ο† : 𝓕.PositionFieldOp) : +lemma crPartF_position (Ο† : 𝓕.Fields Γ— SpaceTime) : crPartF (FieldOp.position Ο†) = ofCrAnOpF ⟨FieldOp.position Ο†, CreateAnnihilate.create⟩ := by simp [crPartF] @[simp] -lemma crPartF_posAsymp (Ο† : 𝓕.OutgoingAsymptotic) : +lemma crPartF_posAsymp (Ο† : 𝓕.Fields Γ— Lorentz.Contr 4) : crPartF (FieldOp.outAsymp Ο†) = 0 := by simp [crPartF] @@ -145,18 +146,18 @@ def anPartF : 𝓕.FieldOp β†’ 𝓕.FieldOpFreeAlgebra := fun Ο† => | FieldOp.outAsymp Ο† => ofCrAnOpF ⟨FieldOp.outAsymp Ο†, ()⟩ @[simp] -lemma anPartF_negAsymp (Ο† : 𝓕.IncomingAsymptotic) : +lemma anPartF_negAsymp (Ο† : 𝓕.Fields Γ— Lorentz.Contr 4) : anPartF (FieldOp.inAsymp Ο†) = 0 := by simp [anPartF] @[simp] -lemma anPartF_position (Ο† : 𝓕.PositionFieldOp) : +lemma anPartF_position (Ο† : 𝓕.Fields Γ— SpaceTime) : anPartF (FieldOp.position Ο†) = ofCrAnOpF ⟨FieldOp.position Ο†, CreateAnnihilate.annihilate⟩ := by simp [anPartF] @[simp] -lemma anPartF_posAsymp (Ο† : 𝓕.OutgoingAsymptotic) : +lemma anPartF_posAsymp (Ο† : 𝓕.Fields Γ— Lorentz.Contr 4) : anPartF (FieldOp.outAsymp Ο†) = ofCrAnOpF ⟨FieldOp.outAsymp Ο†, ()⟩ := by simp [anPartF] diff --git a/HepLean/PerturbationTheory/FieldOpFreeAlgebra/TimeOrder.lean b/HepLean/PerturbationTheory/FieldOpFreeAlgebra/TimeOrder.lean index 6a5ec8f8..56813f8f 100644 --- a/HepLean/PerturbationTheory/FieldOpFreeAlgebra/TimeOrder.lean +++ b/HepLean/PerturbationTheory/FieldOpFreeAlgebra/TimeOrder.lean @@ -26,7 +26,9 @@ open HepLean.List -/ -/-- Time ordering for the `FieldOpFreeAlgebra`. -/ +/-- Time ordering for the `FieldOpFreeAlgebra` defined by taking + `ofCrAnListF Ο†s` to `crAnTimeOrderSign Ο†s β€’ ofCrAnListF (crAnTimeOrderList Ο†s)`. + The notation `𝓣ᢠ(a)` is used for the time-ordering of `a : FieldOpFreeAlgebra`. -/ def timeOrderF : FieldOpFreeAlgebra 𝓕 β†’β‚—[β„‚] FieldOpFreeAlgebra 𝓕 := Basis.constr ofCrAnListFBasis β„‚ fun Ο†s => crAnTimeOrderSign Ο†s β€’ ofCrAnListF (crAnTimeOrderList Ο†s) diff --git a/HepLean/PerturbationTheory/FieldSpecification/Basic.lean b/HepLean/PerturbationTheory/FieldSpecification/Basic.lean index 95b42a66..faa5e7aa 100644 --- a/HepLean/PerturbationTheory/FieldSpecification/Basic.lean +++ b/HepLean/PerturbationTheory/FieldSpecification/Basic.lean @@ -45,28 +45,24 @@ structure FieldSpecification where namespace FieldSpecification variable (𝓕 : FieldSpecification) -/-- An incoming asymptotic state is a field and a momentum. -/ -def IncomingAsymptotic : Type := 𝓕.Fields Γ— Lorentz.Contr 4 - -/-- An outgoing asymptotic states is a field and a momentum. -/ -def OutgoingAsymptotic : Type := 𝓕.Fields Γ— Lorentz.Contr 4 - -/-- A position state is a field and a space-time position. -/ -def PositionFieldOp : Type := 𝓕.Fields Γ— SpaceTime - -/-- The type FieldOp is the inductive type combining the asymptotic states and position states. -/ +/-- For a field specification `𝓕`, the type `𝓕.FieldOp` is defined such that every element of + `FieldOp` corresponds either to: +- an incoming asymptotic field operator `.inAsymp` specified by a field and a `4`-momentum. +- an position operator `.position` specified by a field and a point in spacetime. +- an outgoing asymptotic field operator `.outAsymp` specified by a field and a `4`-momentum. +-/ inductive FieldOp (𝓕 : FieldSpecification) where - | inAsymp : 𝓕.IncomingAsymptotic β†’ 𝓕.FieldOp - | position : 𝓕.PositionFieldOp β†’ 𝓕.FieldOp - | outAsymp : 𝓕.OutgoingAsymptotic β†’ 𝓕.FieldOp + | inAsymp : 𝓕.Fields Γ— Lorentz.Contr 4 β†’ 𝓕.FieldOp + | position : 𝓕.Fields Γ— SpaceTime β†’ 𝓕.FieldOp + | outAsymp : 𝓕.Fields Γ— Lorentz.Contr 4 β†’ 𝓕.FieldOp -/-- Taking a state to its underlying field. -/ +/-- Taking a field operator to its underlying field. -/ def fieldOpToField : 𝓕.FieldOp β†’ 𝓕.Fields | FieldOp.inAsymp Ο† => Ο†.1 | FieldOp.position Ο† => Ο†.1 | FieldOp.outAsymp Ο† => Ο†.1 -/-- The bool on `FieldOp` which is true only for position states. -/ +/-- The bool on `FieldOp` which is true only for position field operator. -/ def statesIsPosition : 𝓕.FieldOp β†’ Bool | FieldOp.position _ => true | _ => false diff --git a/HepLean/PerturbationTheory/FieldSpecification/CrAnFieldOp.lean b/HepLean/PerturbationTheory/FieldSpecification/CrAnFieldOp.lean index 724a107b..9bf4c783 100644 --- a/HepLean/PerturbationTheory/FieldSpecification/CrAnFieldOp.lean +++ b/HepLean/PerturbationTheory/FieldSpecification/CrAnFieldOp.lean @@ -34,9 +34,9 @@ In this module in addition to defining `CrAnFieldOp` we also define some maps: namespace FieldSpecification variable (𝓕 : FieldSpecification) -/-- To each state the specificaition of the type of creation and annihlation parts. - For asymptotic staes there is only one allowed part, whilst for position states - there is two. -/ +/-- To each field operator the specificaition of the type of creation and annihlation parts. + For asymptotic staes there is only one allowed part, whilst for position + field operator there is two. -/ def fieldOpToCrAnType : 𝓕.FieldOp β†’ Type | FieldOp.inAsymp _ => Unit | FieldOp.position _ => CreateAnnihilate @@ -62,12 +62,19 @@ def fieldOpToCreateAnnihilateTypeCongr : {i j : 𝓕.FieldOp} β†’ i = j β†’ 𝓕.fieldOpToCrAnType i ≃ 𝓕.fieldOpToCrAnType j | _, _, rfl => Equiv.refl _ -/-- A creation and annihlation state is a state plus an valid specification of the - creation or annihliation part of that state. (For asympotic states there is only one valid - choice). -/ +/-- +For a field specification `𝓕`, the type `𝓕.CrAnFieldOp` is defined such that every element +corresponds to +- an incoming asymptotic field operator `.inAsymp` and the unique element of `Unit`, + corresponding to the statement that an `inAsymp` state is a creation operator. +- a position operator `.position` and an element of `CreateAnnihilate`, + corresponding to either the creation part or the annihilation part of a position operator. +- an outgoing asymptotic field operator `.outAsymp` and the unique element of `Unit`, + corresponding to the statement that an `outAsymp` state is an annihilation operator. +-/ def CrAnFieldOp : Type := Ξ£ (s : 𝓕.FieldOp), 𝓕.fieldOpToCrAnType s -/-- The map from creation and annihlation states to their underlying states. -/ +/-- The map from creation and annihlation field operator to their underlying states. -/ def crAnFieldOpToFieldOp : 𝓕.CrAnFieldOp β†’ 𝓕.FieldOp := Sigma.fst @[simp] diff --git a/HepLean/PerturbationTheory/FieldStatistics/Basic.lean b/HepLean/PerturbationTheory/FieldStatistics/Basic.lean index f7595e6c..90c50660 100644 --- a/HepLean/PerturbationTheory/FieldStatistics/Basic.lean +++ b/HepLean/PerturbationTheory/FieldStatistics/Basic.lean @@ -15,9 +15,8 @@ Basic properties related to whether a field, or list of fields, is bosonic or fe -/ -/-- A field can either be bosonic or fermionic in nature. - That is to say, they can either have Bose-Einstein statistics or - Fermi-Dirac statistics. -/ +/-- 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. -/ inductive FieldStatistic : Type where | bosonic : FieldStatistic | fermionic : FieldStatistic diff --git a/HepLean/PerturbationTheory/FieldStatistics/ExchangeSign.lean b/HepLean/PerturbationTheory/FieldStatistics/ExchangeSign.lean index 53ca3a7b..e3949722 100644 --- a/HepLean/PerturbationTheory/FieldStatistics/ExchangeSign.lean +++ b/HepLean/PerturbationTheory/FieldStatistics/ExchangeSign.lean @@ -24,10 +24,12 @@ namespace FieldStatistic variable {𝓕 : Type} -/-- The exchange sign of two field statistics is defined to be - `-1` if both field statistics are `fermionic` and `1` otherwise. - It is a group homomorphism from `FieldStatistic` to the group of homomorphisms from - `FieldStatistic` to `β„‚`. -/ +/-- The exchange sign is the group homomorphism `FieldStatistic β†’* FieldStatistic β†’* β„‚`, + which on two field statistics `a` and `b` is defined to be + `-1` if both `a` and `b` are `fermionic` and `1` otherwise. + It corresponds to the sign that one picks up when swapping fields `φ₁φ₂ β†’ φ₂φ₁` with + `φ₁` and `Ο†β‚‚` of statistics `a` and `b` respectively. + The notation `𝓒(a, b)` is used for the exchange sign of `a` and `b`. -/ def exchangeSign : FieldStatistic β†’* FieldStatistic β†’* β„‚ where toFun a := { @@ -55,8 +57,7 @@ def exchangeSign : FieldStatistic β†’* FieldStatistic β†’* β„‚ where <;> fin_cases b <;> fin_cases c <;> simp -/-- The echange sign of two field statistics. - Defined to be `-1` if both field statistics are `fermionic` and `1` otherwise. -/ +@[inherit_doc exchangeSign] scoped[FieldStatistic] notation "𝓒(" a "," b ")" => exchangeSign a b /-- The exchange sign is symmetric. -/ diff --git a/docs/CuratedNotes/PerturbationTheory.html b/docs/CuratedNotes/PerturbationTheory.html index 4b92ccf4..56095026 100644 --- a/docs/CuratedNotes/PerturbationTheory.html +++ b/docs/CuratedNotes/PerturbationTheory.html @@ -51,6 +51,11 @@

{{ entry.sectionNo }}. {{ entry.content }}

{% if entry.type == "p" %}

{{ entry.content }}

{% endif %} + {% if entry.type == "warning" %} + + {% endif %} {% if entry.type == "name" %}
diff --git a/scripts/MetaPrograms/notes.lean b/scripts/MetaPrograms/notes.lean index 80198936..a3b64715 100644 --- a/scripts/MetaPrograms/notes.lean +++ b/scripts/MetaPrograms/notes.lean @@ -20,6 +20,7 @@ inductive NotePart | h2 : String β†’ NotePart | p : String β†’ NotePart | name : Name β†’ NotePart + | warning : String β†’ NotePart structure DeclInfo where line : Nat @@ -73,6 +74,11 @@ def NotePart.toYMLM : ((List String) Γ— Nat Γ— Nat) β†’ NotePart β†’ MetaM ((Li - type: p content: \"{s}\"" return ⟨x.1 ++ [newString], x.2⟩ + | x, NotePart.warning s => + let newString := s!" + - type: warning + content: \"{s}\"" + return ⟨x.1 ++ [newString], x.2⟩ | x, NotePart.name n => do match (← RemarkInfo.IsRemark n) with | true => @@ -111,12 +117,13 @@ def perturbationTheory : Note where title := "Proof of Wick's theorem" curators := ["Joseph Tooby-Smith"] parts := [ + .warning "This note is a work in progress and is not finished. Use with caution.", .h1 "Introduction", .name `FieldSpecification.wicks_theorem_context, .p "In this note we walk through the important parts of the proof of Wick's theorem for both fermions and bosons, as it appears in HepLean. We start with some basic definitions.", - .h1 "Preliminary definitions", + .h1 "Field operators", .h2 "Field statistics", .p "A quantum field can either be a bosonic or fermionic. This information is contained in the inductive type `FieldStatistic`. This is defined as follows:", @@ -135,23 +142,25 @@ def perturbationTheory : Note where .name `FieldSpecification.singleBoson, .name `FieldSpecification.singleFermion, .name `FieldSpecification.doubleBosonDoubleFermion, - .h2 "FieldOp", - .p "Given a field, there are three common states (or operators) of that field that we work with. - These are the in and out asymptotic states and the position states.", - .p "For a field structure `𝓕` these states are defined as:", - .name `FieldSpecification.IncomingAsymptotic, - .name `FieldSpecification.OutgoingAsymptotic, - .name `FieldSpecification.PositionFieldOp, - .p "We will want to consider all three of these types of states simultanously so we define - and inductive type `FieldOp` which is the disjoint union of these three types of states.", + .h2 "Field operators", .name `FieldSpecification.FieldOp, - .h2 "Time ordering", + .name `FieldSpecification.CrAnFieldOp, + .h2 "Field-operator free algebra", + .name `FieldSpecification.FieldOpFreeAlgebra, + .h2 "Field-operator algebra", + .name `FieldSpecification.FieldOpAlgebra, + .h1 "Time ordering", .name `FieldSpecification.timeOrderRel, .name `FieldSpecification.timeOrderSign, - .h2 "Creation and annihilation states", - .h2 "Normal ordering", + .h1 "Normal ordering", .h1 "Wick Contractions", - .h1 "Proof of Wick's theorem", + .h2 "Definition", + .h2 "Constructors", + .p "There are a number of ways to construct a Wick contraction from + other Wick contractions or single contractions.", + .h2 "Sign", + .h1 "Static Wick's theorem", + .h1 "Time-dependent Wick's theorem", .h2 "Wick terms", .name `FieldSpecification.wick_term_terminology, .name `FieldSpecification.wick_term_none_eq_wick_term_cons, @@ -163,7 +172,9 @@ def perturbationTheory : Note where The proof of Wick's theorem follows from definitions and simple lemmas.", .name `FieldSpecification.wicks_theorem_nil, .h2 "Wick's theorems", - .name `FieldSpecification.wicks_theorem] + .name `FieldSpecification.wicks_theorem, + .h1 "Wick's theorem with normal ordering"] + unsafe def main (_ : List String) : IO UInt32 := do initSearchPath (← findSysroot)