2024-12-19 14:25:09 +00:00
|
|
|
|
/-
|
|
|
|
|
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
|
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
|
Authors: Joseph Tooby-Smith
|
|
|
|
|
-/
|
|
|
|
|
import Mathlib.Algebra.FreeAlgebra
|
|
|
|
|
import Mathlib.Algebra.Lie.OfAssociative
|
|
|
|
|
import Mathlib.Analysis.Complex.Basic
|
|
|
|
|
import HepLean.PerturbationTheory.Wick.Signs.KoszulSign
|
|
|
|
|
/-!
|
|
|
|
|
|
|
|
|
|
# Koszul sign insert
|
|
|
|
|
|
|
|
|
|
-/
|
|
|
|
|
|
|
|
|
|
namespace Wick
|
|
|
|
|
|
|
|
|
|
open HepLean.List
|
|
|
|
|
|
2024-12-19 15:40:04 +00:00
|
|
|
|
/-- The sign that appears in the static version of Wicks theorem.
|
|
|
|
|
This is actually equal to `superCommuteCoef q [r.get n] (r.take n)`, something
|
|
|
|
|
which will be proved in a lemma. -/
|
|
|
|
|
def staticWickCoef {I : Type} (q : I → Fin 2) (le1 :I → I → Prop) (r : List I)
|
2024-12-19 14:25:09 +00:00
|
|
|
|
[DecidableRel le1] (i : I) (n : Fin r.length) : ℂ :=
|
|
|
|
|
koszulSign le1 q r *
|
|
|
|
|
superCommuteCoef q [i] (List.take (↑((HepLean.List.insertionSortEquiv le1 r) n))
|
|
|
|
|
(List.insertionSort le1 r)) *
|
|
|
|
|
koszulSign le1 q (r.eraseIdx ↑n)
|
|
|
|
|
|
2024-12-19 15:40:04 +00:00
|
|
|
|
lemma staticWickCoef_eq_q {I : Type} (q : I → Fin 2) (le1 :I → I → Prop) (r : List I)
|
2024-12-19 14:25:09 +00:00
|
|
|
|
[DecidableRel le1] (i : I) (n : Fin r.length)
|
|
|
|
|
(hq : q i = q (r.get n)) :
|
2024-12-19 15:40:04 +00:00
|
|
|
|
staticWickCoef q le1 r i n =
|
2024-12-19 14:25:09 +00:00
|
|
|
|
koszulSign le1 q r *
|
|
|
|
|
superCommuteCoef q [r.get n] (List.take (↑(insertionSortEquiv le1 r n))
|
|
|
|
|
(List.insertionSort le1 r)) *
|
|
|
|
|
koszulSign le1 q (r.eraseIdx ↑n) := by
|
2024-12-19 15:40:04 +00:00
|
|
|
|
simp [staticWickCoef, superCommuteCoef, grade, hq]
|
2024-12-19 14:25:09 +00:00
|
|
|
|
|
|
|
|
|
lemma insertIdx_eraseIdx {I : Type} :
|
|
|
|
|
(n : ℕ) → (r : List I) → (hn : n < r.length) →
|
|
|
|
|
List.insertIdx n (r.get ⟨n, hn⟩) (r.eraseIdx n) = r
|
|
|
|
|
| n, [], hn => by
|
|
|
|
|
simp at hn
|
|
|
|
|
| 0, r0 :: r, hn => by
|
|
|
|
|
simp
|
|
|
|
|
| n + 1, r0 :: r, hn => by
|
|
|
|
|
simp only [List.length_cons, List.get_eq_getElem, List.getElem_cons_succ,
|
|
|
|
|
List.eraseIdx_cons_succ, List.insertIdx_succ_cons, List.cons.injEq, true_and]
|
|
|
|
|
exact insertIdx_eraseIdx n r _
|
|
|
|
|
|
2024-12-19 15:40:04 +00:00
|
|
|
|
lemma staticWickCoef_eq_get {I : Type} (q : I → Fin 2) (le1 :I → I → Prop) (r : List I)
|
2024-12-19 14:25:09 +00:00
|
|
|
|
[DecidableRel le1] [IsTotal I le1] [IsTrans I le1] (i : I) (n : Fin r.length)
|
|
|
|
|
(heq : q i = q (r.get n)) :
|
2024-12-19 15:40:04 +00:00
|
|
|
|
staticWickCoef q le1 r i n = superCommuteCoef q [r.get n] (r.take n) := by
|
|
|
|
|
rw [staticWickCoef_eq_q]
|
2024-12-19 14:25:09 +00:00
|
|
|
|
let r' := r.eraseIdx ↑n
|
|
|
|
|
have hr : List.insertIdx n (r.get n) (r.eraseIdx n) = r := by
|
|
|
|
|
exact insertIdx_eraseIdx n.1 r n.prop
|
|
|
|
|
conv_lhs =>
|
|
|
|
|
lhs
|
|
|
|
|
lhs
|
|
|
|
|
rw [← hr]
|
|
|
|
|
rw [koszulSign_insertIdx q le1 (r.get n) ((r.eraseIdx ↑n)) n (by
|
|
|
|
|
rw [List.length_eraseIdx]
|
|
|
|
|
simp only [Fin.is_lt, ↓reduceIte]
|
|
|
|
|
omega)]
|
|
|
|
|
rhs
|
|
|
|
|
rhs
|
|
|
|
|
rw [hr]
|
|
|
|
|
conv_lhs =>
|
|
|
|
|
lhs
|
|
|
|
|
lhs
|
|
|
|
|
rhs
|
|
|
|
|
enter [2, 1, 1]
|
|
|
|
|
rw [insertionSortEquiv_congr _ _ hr]
|
|
|
|
|
simp only [List.get_eq_getElem, Equiv.trans_apply, RelIso.coe_fn_toEquiv, Fin.castOrderIso_apply,
|
|
|
|
|
Fin.cast_mk, Fin.eta, Fin.coe_cast]
|
|
|
|
|
conv_lhs =>
|
|
|
|
|
lhs
|
|
|
|
|
rw [mul_assoc]
|
|
|
|
|
rhs
|
|
|
|
|
rw [insertSign]
|
|
|
|
|
rw [superCommuteCoef_mul_self]
|
|
|
|
|
simp only [mul_one]
|
|
|
|
|
rw [mul_assoc]
|
|
|
|
|
rw [koszulSign_mul_self]
|
|
|
|
|
simp only [mul_one]
|
|
|
|
|
rw [insertSign_eraseIdx]
|
|
|
|
|
rfl
|
|
|
|
|
exact heq
|
|
|
|
|
|
|
|
|
|
end Wick
|