Feat: Added some example Feynman diagrams.
This commit is contained in:
parent
4b79ae938d
commit
e210583069
3 changed files with 229 additions and 95 deletions
|
@ -48,6 +48,7 @@ import HepLean.AnomalyCancellation.SMNu.PlusU1.PlaneNonSols
|
|||
import HepLean.AnomalyCancellation.SMNu.PlusU1.QuadSol
|
||||
import HepLean.AnomalyCancellation.SMNu.PlusU1.QuadSolToSol
|
||||
import HepLean.BeyondTheStandardModel.TwoHDM.Basic
|
||||
import HepLean.FeynmanDiagrams.PhiFour.Basic
|
||||
import HepLean.FlavorPhysics.CKMMatrix.Basic
|
||||
import HepLean.FlavorPhysics.CKMMatrix.Invariants
|
||||
import HepLean.FlavorPhysics.CKMMatrix.PhaseFreedom
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
/-
|
||||
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
|
||||
Released under Apache 2.0 license.
|
||||
Authors: Joseph Tooby-Smith
|
||||
-/
|
||||
import Mathlib.Logic.Equiv.Fin
|
||||
import Mathlib.Tactic.FinCases
|
||||
import Mathlib.Data.Finset.Card
|
||||
import Mathlib.CategoryTheory.IsomorphismClasses
|
||||
import LeanCopilot
|
||||
/-!
|
||||
# Feynman diagrams in Phi^4 theory
|
||||
|
||||
The aim of this file is to start building up the theory of Feynman diagrams in the context of
|
||||
Phi^4 theory.
|
||||
|
||||
-/
|
||||
|
||||
namespace PhiFour
|
||||
|
||||
/-- The type of vacuum Feynman diagrams for Phi-4 theory. -/
|
||||
structure VacuumFeynmanDiagram where
|
||||
HalfEdge : Type
|
||||
Edge : Type
|
||||
Vertex : Type
|
||||
𝓔 : HalfEdge → Edge
|
||||
𝓥 : HalfEdge → Vertex
|
||||
𝓔Fiber : ∀ x, CategoryTheory.IsIsomorphic (𝓔 ⁻¹' {x} : Type) (Fin 2)
|
||||
𝓥Fiber : ∀ x, CategoryTheory.IsIsomorphic (𝓥 ⁻¹' {x} : Type) (Fin 3)
|
||||
|
||||
|
||||
|
||||
namespace VacuumFeynmanDiagram
|
||||
|
||||
open CategoryTheory
|
||||
|
||||
variable (F G : VacuumFeynmanDiagram)
|
||||
|
||||
/-- The definition of a morphism between two `VacuumFeynmanDiagram`. -/
|
||||
structure Hom where
|
||||
halfEdgeMap : F.HalfEdge ⟶ G.HalfEdge
|
||||
edgeMap : F.Edge ⟶ G.Edge
|
||||
vertexMap : F.Vertex ⟶ G.Vertex
|
||||
|
||||
namespace Hom
|
||||
|
||||
/-- The identity morphism for an object in `VacuumFeynmanDiagram`. -/
|
||||
def id : Hom F F where
|
||||
halfEdgeMap := 𝟙 F.HalfEdge
|
||||
edgeMap := 𝟙 F.Edge
|
||||
vertexMap := 𝟙 F.Vertex
|
||||
|
||||
/-- The composition of morphisms between two `VacuumFeynmanDiagram`. -/
|
||||
def comp {F G H : VacuumFeynmanDiagram} (f : Hom F G) (g : Hom G H) : Hom F H where
|
||||
halfEdgeMap := f.halfEdgeMap ≫ g.halfEdgeMap
|
||||
edgeMap := f.edgeMap ≫ g.edgeMap
|
||||
vertexMap := f.vertexMap ≫ g.vertexMap
|
||||
|
||||
end Hom
|
||||
|
||||
/-- `VacuumFeynmanDiagram` has the structure of a category. -/
|
||||
instance : Category VacuumFeynmanDiagram where
|
||||
Hom := Hom
|
||||
id := Hom.id
|
||||
comp := Hom.comp
|
||||
|
||||
/-- The functor from the category `VacuumFeynmanDiagram` to `Type` defined by
|
||||
mapping to the `Type` of half edges. -/
|
||||
def toHalfEdge : VacuumFeynmanDiagram ⥤ Type where
|
||||
obj F := F.HalfEdge
|
||||
map f := f.halfEdgeMap
|
||||
|
||||
@[simp]
|
||||
lemma 𝓔_preimage_nonempty (x : F.Edge) : (F.𝓔 ⁻¹' {x}).Nonempty := by
|
||||
obtain ⟨_, f, _, _⟩ := F.𝓔Fiber x
|
||||
exact ⟨f 0, Subtype.coe_prop (f 0)⟩
|
||||
|
||||
@[simp]
|
||||
lemma 𝓥_preimage_nonempty (x : F.Vertex) : (F.𝓥 ⁻¹' {x}).Nonempty := by
|
||||
obtain ⟨_, f, _, _⟩ := F.𝓥Fiber x
|
||||
exact ⟨f 0, Subtype.coe_prop (f 0)⟩
|
||||
|
||||
@[simp]
|
||||
lemma 𝓔_surjective : Function.Surjective F.𝓔 := by
|
||||
exact fun x => F.𝓔_preimage_nonempty x
|
||||
|
||||
@[simp]
|
||||
lemma 𝓥_surjective : Function.Surjective F.𝓥 := by
|
||||
exact fun x => F.𝓥_preimage_nonempty x
|
||||
|
||||
|
||||
end VacuumFeynmanDiagram
|
||||
|
||||
|
||||
end PhiFour
|
228
HepLean/FeynmanDiagrams/PhiFour/Basic.lean
Normal file
228
HepLean/FeynmanDiagrams/PhiFour/Basic.lean
Normal file
|
@ -0,0 +1,228 @@
|
|||
/-
|
||||
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
|
||||
Released under Apache 2.0 license.
|
||||
Authors: Joseph Tooby-Smith
|
||||
-/
|
||||
import Mathlib.Logic.Equiv.Fin
|
||||
import Mathlib.Tactic.FinCases
|
||||
import Mathlib.Data.Finset.Card
|
||||
import Mathlib.CategoryTheory.IsomorphismClasses
|
||||
import Mathlib.Data.Fintype.Pi
|
||||
import LeanCopilot
|
||||
/-!
|
||||
# Feynman diagrams in Phi^4 theory
|
||||
|
||||
The aim of this file is to start building up the theory of Feynman diagrams in the context of
|
||||
Phi^4 theory.
|
||||
|
||||
## References
|
||||
|
||||
- The approach taking to defining Feynman diagrams is based on:
|
||||
|
||||
Theo Johnson-Freyd (https://mathoverflow.net/users/78/theo-johnson-freyd), How to count symmetry
|
||||
factors of Feynman diagrams? , URL (version: 2010-06-03): https://mathoverflow.net/q/26938
|
||||
|
||||
## TODO
|
||||
|
||||
- Develop a way to display Feynman diagrams.
|
||||
- Define the symmetry factor and compute for examples of Feynman diagrams.
|
||||
- Define the Feynman rules, and perform an example calculation.
|
||||
|
||||
-/
|
||||
|
||||
namespace PhiFour
|
||||
open CategoryTheory
|
||||
|
||||
/-- Edges in Φ^4 internal `0`.
|
||||
Here `Type` is the category in which half-edges live. In general `Type` will be e.g.
|
||||
`Type × Type` with more fields. -/
|
||||
def edgeType : Fin 1 → Type
|
||||
| 0 => Fin 2
|
||||
|
||||
/-- Vertices in Φ^4, can either be `external` corresponding to `0`, or a `phi^4` interaction
|
||||
corresponding to `1`. -/
|
||||
def vertexType : Fin 2 → Type
|
||||
| 0 => Fin 1
|
||||
| 1 => Fin 4
|
||||
|
||||
/-- The type of vacuum Feynman diagrams for Phi-4 theory. -/
|
||||
structure FeynmanDiagram where
|
||||
/-- The type of half edges in the Feynman diagram. Sometimes also called `flags`. -/
|
||||
𝓱𝓔 : Type
|
||||
/-- The type of edges in the Feynman diagram. -/
|
||||
𝓔 : Type
|
||||
/-- Maps each edge to a label. Labels `0` if it is an external edge,
|
||||
and labels `1` if an internal edge. -/
|
||||
𝓔Label : 𝓔 → Fin 1
|
||||
/-- Maps half-edges to edges. -/
|
||||
𝓱𝓔To𝓔 : 𝓱𝓔 → 𝓔
|
||||
/-- Requires that the fiber of the map `𝓱𝓔To𝓔` at `x ∈ 𝓔` agrees with the corresponding
|
||||
`edgeType`. -/
|
||||
𝓔Fiber : ∀ x, CategoryTheory.IsIsomorphic (𝓱𝓔To𝓔 ⁻¹' {x} : Type) $ (edgeType ∘ 𝓔Label) x
|
||||
/-- The type of vertices in the Feynman diagram. -/
|
||||
𝓥 : Type
|
||||
/-- Maps each vertex to a label. In this case this map contains no information since
|
||||
there is only one type of vertex.. -/
|
||||
𝓥Label : 𝓥 → Fin 2
|
||||
/-- Maps half-edges to vertices. -/
|
||||
𝓱𝓔To𝓥 : 𝓱𝓔 → 𝓥
|
||||
/-- Requires that the fiber of the map `𝓱𝓔To𝓥` at `x ∈ 𝓥` agrees with the corresponding
|
||||
`vertexType`. -/
|
||||
𝓥Fiber : ∀ x, CategoryTheory.IsIsomorphic (𝓱𝓔To𝓥 ⁻¹' {x} : Type) $ (vertexType ∘ 𝓥Label) x
|
||||
|
||||
namespace FeynmanDiagram
|
||||
|
||||
variable (F : FeynmanDiagram)
|
||||
|
||||
section Decidability
|
||||
/-!
|
||||
|
||||
## Decidability
|
||||
|
||||
The aim of this section is to make it easy to prove the `𝓔Fiber` and `𝓥Fiber` conditions by
|
||||
showing that they are decidable in cases when everything is finite and nice
|
||||
(which in practice is always).
|
||||
|
||||
--/
|
||||
|
||||
lemma fiber_cond_edge_iff_exists {𝓱𝓔 𝓔 : Type} (𝓱𝓔To𝓔 : 𝓱𝓔 → 𝓔) (𝓔Label : 𝓔 → Fin 1) (x : 𝓔) :
|
||||
(CategoryTheory.IsIsomorphic (𝓱𝓔To𝓔 ⁻¹' {x} : Type) $ (edgeType ∘ 𝓔Label) x)
|
||||
↔ ∃ (f : 𝓱𝓔To𝓔 ⁻¹' {x} → (edgeType ∘ 𝓔Label) x), Function.Bijective f :=
|
||||
Iff.intro
|
||||
(fun h ↦ match h with
|
||||
| ⟨f1, f2, h1, h2⟩ => ⟨f1, (isIso_iff_bijective f1).mp ⟨f2, h1, h2⟩⟩)
|
||||
(fun ⟨f1, hb⟩ ↦ match (isIso_iff_bijective f1).mpr hb with
|
||||
| ⟨f2, h1, h2⟩ => ⟨f1, f2, h1, h2⟩)
|
||||
|
||||
lemma fiber_cond_vertex_iff_exists {𝓱𝓥 𝓥 : Type} (𝓱𝓥To𝓥 : 𝓱𝓥 → 𝓥) (𝓥Label : 𝓥 → Fin 2) (x : 𝓥) :
|
||||
(CategoryTheory.IsIsomorphic (𝓱𝓥To𝓥 ⁻¹' {x} : Type) $ (vertexType ∘ 𝓥Label) x)
|
||||
↔ ∃ (f : 𝓱𝓥To𝓥 ⁻¹' {x} → (vertexType ∘ 𝓥Label) x), Function.Bijective f :=
|
||||
Iff.intro
|
||||
(fun h ↦ match h with
|
||||
| ⟨f1, f2, h1, h2⟩ => ⟨f1, (isIso_iff_bijective f1).mp ⟨f2, h1, h2⟩⟩)
|
||||
(fun ⟨f1, hb⟩ ↦ match (isIso_iff_bijective f1).mpr hb with
|
||||
| ⟨f2, h1, h2⟩ => ⟨f1, f2, h1, h2⟩)
|
||||
|
||||
instance {𝓱𝓔 𝓔 : Type} [Fintype 𝓱𝓔] [Fintype 𝓔] [DecidableEq 𝓔] (𝓱𝓔To𝓔 : 𝓱𝓔 → 𝓔) (x : 𝓔):
|
||||
DecidablePred (fun y => y ∈ 𝓱𝓔To𝓔 ⁻¹' {x}) := fun y =>
|
||||
match decEq (𝓱𝓔To𝓔 y) x with
|
||||
| isTrue h => isTrue (by simp [h])
|
||||
| isFalse h => isFalse (by simp [h])
|
||||
|
||||
|
||||
instance {𝓱𝓔 𝓔 : Type} [Fintype 𝓔] [DecidableEq 𝓔] [DecidableEq 𝓱𝓔] (𝓱𝓔To𝓔 : 𝓱𝓔 → 𝓔) (x : 𝓔) :
|
||||
DecidableEq $ (𝓱𝓔To𝓔 ⁻¹' {x}) := Subtype.instDecidableEq
|
||||
|
||||
instance edgeTypeFintype (x : Fin 1) : Fintype (edgeType x) :=
|
||||
match x with
|
||||
| 0 => Fin.fintype 2
|
||||
|
||||
instance edgeTypeDecidableEq (x : Fin 1) : DecidableEq (edgeType x) :=
|
||||
match x with
|
||||
| 0 => instDecidableEqFin 2
|
||||
|
||||
instance vertexTypeFintype (x : Fin 2) : Fintype (vertexType x) :=
|
||||
match x with
|
||||
| 0 => Fin.fintype 1
|
||||
| 1 => Fin.fintype 4
|
||||
|
||||
instance vertexTypeDecidableEq (x : Fin 2) : DecidableEq (vertexType x) :=
|
||||
match x with
|
||||
| 0 => instDecidableEqFin 1
|
||||
| 1 => instDecidableEqFin 4
|
||||
|
||||
instance {𝓔 : Type} (𝓔Label : 𝓔 → Fin 1) (x : 𝓔) :
|
||||
DecidableEq ((edgeType ∘ 𝓔Label) x) := edgeTypeDecidableEq (𝓔Label x)
|
||||
|
||||
instance {𝓔 : Type} (𝓔Label : 𝓔 → Fin 1) (x : 𝓔) :
|
||||
Fintype ((edgeType ∘ 𝓔Label) x) := edgeTypeFintype (𝓔Label x)
|
||||
|
||||
instance {𝓥 : Type} (𝓥Label : 𝓥 → Fin 2) (x : 𝓥) :
|
||||
DecidableEq ((vertexType ∘ 𝓥Label) x) := vertexTypeDecidableEq (𝓥Label x)
|
||||
|
||||
instance {𝓥 : Type} (𝓥Label : 𝓥 → Fin 2) (x : 𝓥) :
|
||||
Fintype ((vertexType ∘ 𝓥Label) x) := vertexTypeFintype (𝓥Label x)
|
||||
|
||||
|
||||
instance {𝓱𝓔 𝓔 : Type} [Fintype 𝓱𝓔] [DecidableEq 𝓱𝓔] [Fintype 𝓔] [DecidableEq 𝓔] (𝓱𝓔To𝓔 : 𝓱𝓔 → 𝓔) (𝓔Label : 𝓔 → Fin 1) (x : 𝓔) :
|
||||
Decidable (CategoryTheory.IsIsomorphic (𝓱𝓔To𝓔 ⁻¹' {x} : Type) $ (edgeType ∘ 𝓔Label) x) :=
|
||||
decidable_of_decidable_of_iff (fiber_cond_edge_iff_exists 𝓱𝓔To𝓔 𝓔Label x).symm
|
||||
|
||||
instance {𝓱𝓥 𝓥 : Type} [Fintype 𝓱𝓥] [DecidableEq 𝓱𝓥] [Fintype 𝓥] [DecidableEq 𝓥] (𝓱𝓥To𝓥 : 𝓱𝓥 → 𝓥) (𝓥Label : 𝓥 → Fin 2) (x : 𝓥) :
|
||||
Decidable (CategoryTheory.IsIsomorphic (𝓱𝓥To𝓥 ⁻¹' {x} : Type) $ (vertexType ∘ 𝓥Label) x) :=
|
||||
decidable_of_decidable_of_iff (fiber_cond_vertex_iff_exists 𝓱𝓥To𝓥 𝓥Label x).symm
|
||||
|
||||
end Decidability
|
||||
|
||||
section examples
|
||||
/-!
|
||||
|
||||
## Examples
|
||||
|
||||
In this section we give examples of Feynman diagrams in Phi^4 theory.
|
||||
|
||||
|
||||
--/
|
||||
|
||||
/-- The propagator
|
||||
- - - - - -
|
||||
|
||||
-/
|
||||
def propagator : FeynmanDiagram where
|
||||
𝓱𝓔 := Fin 2
|
||||
𝓔 := Fin 1
|
||||
𝓔Label := ![0]
|
||||
𝓱𝓔To𝓔 := ![0, 0]
|
||||
𝓔Fiber := by decide
|
||||
𝓥 := Fin 2
|
||||
𝓥Label := ![0, 0]
|
||||
𝓱𝓔To𝓥 := ![0, 1]
|
||||
𝓥Fiber := by decide
|
||||
|
||||
/-- The figure 8 Feynman diagram
|
||||
_
|
||||
/ \
|
||||
/ \
|
||||
\ /
|
||||
\ /
|
||||
\ /
|
||||
/ \
|
||||
/ \
|
||||
\ /
|
||||
\ __ / -/
|
||||
def figureEight : FeynmanDiagram where
|
||||
𝓱𝓔 := Fin 4
|
||||
𝓔 := Fin 2
|
||||
𝓔Label := ![0, 0]
|
||||
𝓱𝓔To𝓔 := ![0, 0, 1, 1]
|
||||
𝓔Fiber := by decide
|
||||
𝓥 := Fin 1
|
||||
𝓥Label := ![1]
|
||||
𝓱𝓔To𝓥 := ![0, 0, 0, 0]
|
||||
𝓥Fiber := by decide
|
||||
|
||||
/-- The feynman diagram
|
||||
_ _ _ _ _
|
||||
/ \
|
||||
/ \
|
||||
- - - - - - - - - - - -
|
||||
\ /
|
||||
\ _ _ _ _ _/
|
||||
-/
|
||||
def propagtor1 : FeynmanDiagram where
|
||||
𝓱𝓔 := Fin 10
|
||||
𝓔 := Fin 5
|
||||
𝓔Label := ![0, 0, 0, 0, 0]
|
||||
𝓱𝓔To𝓔 := ![0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
|
||||
𝓔Fiber := by decide
|
||||
𝓥 := Fin 4
|
||||
𝓥Label := ![0, 1, 1, 0]
|
||||
𝓱𝓔To𝓥 := ![0, 1, 1, 2, 1, 2, 1, 2, 2, 3]
|
||||
𝓥Fiber := by decide
|
||||
|
||||
|
||||
end examples
|
||||
|
||||
end FeynmanDiagram
|
||||
|
||||
end PhiFour
|
Loading…
Add table
Add a link
Reference in a new issue