2025-01-31 16:02:02 +00:00
|
|
|
|
/-
|
|
|
|
|
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
|
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
|
Authors: Joseph Tooby-Smith
|
|
|
|
|
-/
|
|
|
|
|
import HepLean.PerturbationTheory.WickContraction.TimeContract
|
|
|
|
|
import HepLean.PerturbationTheory.WickContraction.StaticContract
|
2025-02-03 12:12:36 +00:00
|
|
|
|
import HepLean.PerturbationTheory.FieldOpAlgebra.TimeContraction
|
2025-01-31 16:02:02 +00:00
|
|
|
|
/-!
|
|
|
|
|
|
2025-02-03 06:13:13 +00:00
|
|
|
|
# Sub contractions
|
2025-01-31 16:02:02 +00:00
|
|
|
|
|
|
|
|
|
-/
|
|
|
|
|
|
|
|
|
|
open FieldSpecification
|
|
|
|
|
variable {𝓕 : FieldSpecification}
|
|
|
|
|
|
|
|
|
|
namespace WickContraction
|
2025-02-03 11:28:14 +00:00
|
|
|
|
variable {n : ℕ} {φs : List 𝓕.FieldOp} {φsΛ : WickContraction φs.length}
|
2025-01-31 16:02:02 +00:00
|
|
|
|
open HepLean.List
|
|
|
|
|
open FieldOpAlgebra
|
|
|
|
|
|
2025-02-03 06:13:13 +00:00
|
|
|
|
/-- Given a Wick contraction `φsΛ`, and a subset of `φsΛ.1`, the Wick contraction
|
|
|
|
|
conisting of contracted pairs within that subset. -/
|
|
|
|
|
def subContraction (S : Finset (Finset (Fin φs.length))) (ha : S ⊆ φsΛ.1) :
|
|
|
|
|
WickContraction φs.length :=
|
2025-01-31 16:02:02 +00:00
|
|
|
|
⟨S, by
|
|
|
|
|
intro i hi
|
|
|
|
|
exact φsΛ.2.1 i (ha hi),
|
|
|
|
|
by
|
|
|
|
|
intro i hi j hj
|
|
|
|
|
exact φsΛ.2.2 i (ha hi) j (ha hj)⟩
|
|
|
|
|
|
|
|
|
|
lemma mem_of_mem_subContraction {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1}
|
|
|
|
|
{a : Finset (Fin φs.length)} (ha : a ∈ (φsΛ.subContraction S hs).1) : a ∈ φsΛ.1 := by
|
|
|
|
|
exact hs ha
|
|
|
|
|
|
2025-02-03 06:13:13 +00:00
|
|
|
|
/-- Given a Wick contraction `φsΛ`, and a subset `S` of `φsΛ.1`, the Wick contraction
|
|
|
|
|
on the uncontracted list `[φsΛ.subContraction S ha]ᵘᶜ`
|
|
|
|
|
consisting of the remaining contracted pairs of `φsΛ` not in `S`. -/
|
2025-01-31 16:02:02 +00:00
|
|
|
|
def quotContraction (S : Finset (Finset (Fin φs.length))) (ha : S ⊆ φsΛ.1) :
|
|
|
|
|
WickContraction [φsΛ.subContraction S ha]ᵘᶜ.length :=
|
|
|
|
|
⟨Finset.filter (fun a => Finset.map uncontractedListEmd a ∈ φsΛ.1) Finset.univ,
|
|
|
|
|
by
|
|
|
|
|
intro a ha'
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [Finset.mem_filter, Finset.mem_univ, true_and] at ha'
|
2025-02-03 06:13:13 +00:00
|
|
|
|
simpa using φsΛ.2.1 (Finset.map uncontractedListEmd a) ha', by
|
2025-01-31 16:02:02 +00:00
|
|
|
|
intro a ha b hb
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [Finset.mem_filter, Finset.mem_univ, true_and] at ha hb
|
2025-01-31 16:02:02 +00:00
|
|
|
|
by_cases hab : a = b
|
|
|
|
|
· simp [hab]
|
2025-02-03 05:39:48 +00:00
|
|
|
|
· simp only [hab, false_or]
|
2025-01-31 16:02:02 +00:00
|
|
|
|
have hx := φsΛ.2.2 (Finset.map uncontractedListEmd a) ha (Finset.map uncontractedListEmd b) hb
|
|
|
|
|
simp_all⟩
|
|
|
|
|
|
|
|
|
|
lemma mem_of_mem_quotContraction {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1}
|
|
|
|
|
{a : Finset (Fin [φsΛ.subContraction S hs]ᵘᶜ.length)}
|
|
|
|
|
(ha : a ∈ (quotContraction S hs).1) : Finset.map uncontractedListEmd a ∈ φsΛ.1 := by
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [quotContraction, Finset.mem_filter, Finset.mem_univ, true_and] at ha
|
2025-01-31 16:02:02 +00:00
|
|
|
|
exact ha
|
|
|
|
|
|
|
|
|
|
lemma mem_subContraction_or_quotContraction {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1}
|
|
|
|
|
{a : Finset (Fin φs.length)} (ha : a ∈ φsΛ.1) :
|
|
|
|
|
a ∈ (φsΛ.subContraction S hs).1 ∨
|
|
|
|
|
∃ a', Finset.map uncontractedListEmd a' = a ∧ a' ∈ (quotContraction S hs).1 := by
|
|
|
|
|
by_cases h1 : a ∈ (φsΛ.subContraction S hs).1
|
|
|
|
|
· simp [h1]
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [h1, false_or]
|
|
|
|
|
simp only [subContraction] at h1
|
2025-01-31 16:02:02 +00:00
|
|
|
|
have h2 := φsΛ.2.1 a ha
|
|
|
|
|
rw [@Finset.card_eq_two] at h2
|
|
|
|
|
obtain ⟨i, j, hij, rfl⟩ := h2
|
|
|
|
|
have hi : i ∈ (φsΛ.subContraction S hs).uncontracted := by
|
|
|
|
|
rw [mem_uncontracted_iff_not_contracted]
|
|
|
|
|
intro p hp
|
|
|
|
|
have hp' : p ∈ φsΛ.1 := hs hp
|
|
|
|
|
have hp2 := φsΛ.2.2 p hp' {i, j} ha
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [subContraction] at hp
|
2025-01-31 16:02:02 +00:00
|
|
|
|
rcases hp2 with hp2 | hp2
|
|
|
|
|
· simp_all
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [Finset.disjoint_insert_right, Finset.disjoint_singleton_right] at hp2
|
2025-01-31 16:02:02 +00:00
|
|
|
|
exact hp2.1
|
|
|
|
|
have hj : j ∈ (φsΛ.subContraction S hs).uncontracted := by
|
|
|
|
|
rw [mem_uncontracted_iff_not_contracted]
|
|
|
|
|
intro p hp
|
|
|
|
|
have hp' : p ∈ φsΛ.1 := hs hp
|
|
|
|
|
have hp2 := φsΛ.2.2 p hp' {i, j} ha
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [subContraction] at hp
|
2025-01-31 16:02:02 +00:00
|
|
|
|
rcases hp2 with hp2 | hp2
|
|
|
|
|
· simp_all
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [Finset.disjoint_insert_right, Finset.disjoint_singleton_right] at hp2
|
2025-01-31 16:02:02 +00:00
|
|
|
|
exact hp2.2
|
|
|
|
|
obtain ⟨i, rfl⟩ := uncontractedListEmd_surjective_mem_uncontracted i hi
|
|
|
|
|
obtain ⟨j, rfl⟩ := uncontractedListEmd_surjective_mem_uncontracted j hj
|
|
|
|
|
use {i, j}
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [Finset.map_insert, Finset.map_singleton, quotContraction, Finset.mem_filter,
|
|
|
|
|
Finset.mem_univ, true_and]
|
2025-01-31 16:02:02 +00:00
|
|
|
|
exact ha
|
|
|
|
|
|
|
|
|
|
@[simp]
|
|
|
|
|
lemma subContraction_uncontractedList_get {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1}
|
|
|
|
|
{a : Fin [subContraction S hs]ᵘᶜ.length} :
|
|
|
|
|
[subContraction S hs]ᵘᶜ[a] = φs[uncontractedListEmd a] := by
|
|
|
|
|
erw [← getElem_uncontractedListEmd]
|
|
|
|
|
rfl
|
|
|
|
|
|
2025-02-01 11:51:06 +00:00
|
|
|
|
@[simp]
|
|
|
|
|
lemma subContraction_fstFieldOfContract {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1}
|
|
|
|
|
(a : (subContraction S hs).1) :
|
|
|
|
|
(subContraction S hs).fstFieldOfContract a =
|
|
|
|
|
φsΛ.fstFieldOfContract ⟨a.1, mem_of_mem_subContraction a.2⟩:= by
|
2025-02-03 06:13:13 +00:00
|
|
|
|
apply eq_fstFieldOfContract_of_mem _ _ _
|
|
|
|
|
(φsΛ.sndFieldOfContract ⟨a.1, mem_of_mem_subContraction a.2⟩)
|
|
|
|
|
· have ha := finset_eq_fstFieldOfContract_sndFieldOfContract _
|
|
|
|
|
⟨a.1, mem_of_mem_subContraction a.2⟩
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only at ha
|
2025-02-01 11:51:06 +00:00
|
|
|
|
conv_lhs =>
|
|
|
|
|
rw [ha]
|
|
|
|
|
simp
|
2025-02-03 06:13:13 +00:00
|
|
|
|
· have ha := finset_eq_fstFieldOfContract_sndFieldOfContract _
|
|
|
|
|
⟨a.1, mem_of_mem_subContraction a.2⟩
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only at ha
|
2025-02-01 11:51:06 +00:00
|
|
|
|
conv_lhs =>
|
|
|
|
|
rw [ha]
|
|
|
|
|
simp
|
|
|
|
|
· exact fstFieldOfContract_lt_sndFieldOfContract φsΛ ⟨↑a, mem_of_mem_subContraction a.property⟩
|
|
|
|
|
|
|
|
|
|
@[simp]
|
|
|
|
|
lemma subContraction_sndFieldOfContract {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1}
|
|
|
|
|
(a : (subContraction S hs).1) :
|
|
|
|
|
(subContraction S hs).sndFieldOfContract a =
|
|
|
|
|
φsΛ.sndFieldOfContract ⟨a.1, mem_of_mem_subContraction a.2⟩:= by
|
2025-02-03 06:13:13 +00:00
|
|
|
|
apply eq_sndFieldOfContract_of_mem _ _
|
|
|
|
|
(φsΛ.fstFieldOfContract ⟨a.1, mem_of_mem_subContraction a.2⟩)
|
|
|
|
|
· have ha := finset_eq_fstFieldOfContract_sndFieldOfContract _
|
|
|
|
|
⟨a.1, mem_of_mem_subContraction a.2⟩
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only at ha
|
2025-02-01 11:51:06 +00:00
|
|
|
|
conv_lhs =>
|
|
|
|
|
rw [ha]
|
|
|
|
|
simp
|
2025-02-03 06:13:13 +00:00
|
|
|
|
· have ha := finset_eq_fstFieldOfContract_sndFieldOfContract _
|
|
|
|
|
⟨a.1, mem_of_mem_subContraction a.2⟩
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only at ha
|
2025-02-01 11:51:06 +00:00
|
|
|
|
conv_lhs =>
|
|
|
|
|
rw [ha]
|
|
|
|
|
simp
|
|
|
|
|
· exact fstFieldOfContract_lt_sndFieldOfContract φsΛ ⟨↑a, mem_of_mem_subContraction a.property⟩
|
|
|
|
|
|
2025-01-31 16:02:02 +00:00
|
|
|
|
@[simp]
|
|
|
|
|
lemma quotContraction_fstFieldOfContract_uncontractedListEmd {S : Finset (Finset (Fin φs.length))}
|
|
|
|
|
{hs : S ⊆ φsΛ.1} (a : (quotContraction S hs).1) :
|
|
|
|
|
uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a) =
|
2025-02-03 06:13:13 +00:00
|
|
|
|
(φsΛ.fstFieldOfContract
|
|
|
|
|
⟨Finset.map uncontractedListEmd a.1, mem_of_mem_quotContraction a.2⟩) := by
|
2025-01-31 16:02:02 +00:00
|
|
|
|
symm
|
2025-02-03 06:13:13 +00:00
|
|
|
|
apply eq_fstFieldOfContract_of_mem _ _ _
|
|
|
|
|
(uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a))
|
2025-01-31 16:02:02 +00:00
|
|
|
|
· simp only [Finset.mem_map', fstFieldOfContract_mem]
|
|
|
|
|
· simp
|
|
|
|
|
· apply uncontractedListEmd_strictMono
|
|
|
|
|
exact fstFieldOfContract_lt_sndFieldOfContract (quotContraction S hs) a
|
|
|
|
|
|
|
|
|
|
@[simp]
|
|
|
|
|
lemma quotContraction_sndFieldOfContract_uncontractedListEmd {S : Finset (Finset (Fin φs.length))}
|
|
|
|
|
{hs : S ⊆ φsΛ.1} (a : (quotContraction S hs).1) :
|
|
|
|
|
uncontractedListEmd ((quotContraction S hs).sndFieldOfContract a) =
|
2025-02-03 06:13:13 +00:00
|
|
|
|
(φsΛ.sndFieldOfContract
|
|
|
|
|
⟨Finset.map uncontractedListEmd a.1, mem_of_mem_quotContraction a.2⟩) := by
|
2025-01-31 16:02:02 +00:00
|
|
|
|
symm
|
2025-02-03 06:13:13 +00:00
|
|
|
|
apply eq_sndFieldOfContract_of_mem _ _
|
|
|
|
|
(uncontractedListEmd ((quotContraction S hs).fstFieldOfContract a))
|
2025-01-31 16:02:02 +00:00
|
|
|
|
· simp only [Finset.mem_map', fstFieldOfContract_mem]
|
|
|
|
|
· simp
|
|
|
|
|
· apply uncontractedListEmd_strictMono
|
|
|
|
|
exact fstFieldOfContract_lt_sndFieldOfContract (quotContraction S hs) a
|
|
|
|
|
|
|
|
|
|
lemma quotContraction_gradingCompliant {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1}
|
|
|
|
|
(hsΛ : φsΛ.GradingCompliant) :
|
|
|
|
|
GradingCompliant [φsΛ.subContraction S hs]ᵘᶜ (quotContraction S hs) := by
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [GradingCompliant, Fin.getElem_fin, Subtype.forall]
|
2025-01-31 16:02:02 +00:00
|
|
|
|
intro a ha
|
|
|
|
|
erw [subContraction_uncontractedList_get]
|
|
|
|
|
erw [subContraction_uncontractedList_get]
|
2025-02-03 05:39:48 +00:00
|
|
|
|
simp only [quotContraction_fstFieldOfContract_uncontractedListEmd, Fin.getElem_fin,
|
|
|
|
|
quotContraction_sndFieldOfContract_uncontractedListEmd]
|
2025-01-31 16:02:02 +00:00
|
|
|
|
apply hsΛ
|
|
|
|
|
|
2025-02-01 11:51:06 +00:00
|
|
|
|
lemma mem_quotContraction_iff {S : Finset (Finset (Fin φs.length))} {hs : S ⊆ φsΛ.1}
|
|
|
|
|
{a : Finset (Fin [φsΛ.subContraction S hs]ᵘᶜ.length)} :
|
2025-02-03 06:13:13 +00:00
|
|
|
|
a ∈ (quotContraction S hs).1 ↔ a.map uncontractedListEmd ∈ φsΛ.1
|
2025-02-01 11:51:06 +00:00
|
|
|
|
∧ a.map uncontractedListEmd ∉ (subContraction S hs).1 := by
|
|
|
|
|
apply Iff.intro
|
|
|
|
|
· intro h
|
|
|
|
|
apply And.intro
|
|
|
|
|
· exact mem_of_mem_quotContraction h
|
|
|
|
|
· exact uncontractedListEmd_finset_not_mem _
|
|
|
|
|
· intro h
|
|
|
|
|
have h2 := mem_subContraction_or_quotContraction (S := S) (hs := hs) h.1
|
|
|
|
|
simp_all
|
|
|
|
|
|
2025-01-31 16:02:02 +00:00
|
|
|
|
end WickContraction
|