Imports
/-
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
-/
module
public import Physlib.QFT.PerturbationTheory.WickContraction.UncontractedListInserting an element into a contraction based on a list
@[expose] public sectionInserting an element into a list
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.
def insertAndContract {φs : List 𝓕.FieldOp} (φ : 𝓕.FieldOp) (φsΛ : WickContraction φs.length)
(i : Fin φs.length.succ) (k : Option φsΛ.uncontracted) :
WickContraction (φs.insertIdx i φ).length :=
congr (𝓕:FieldSpecificationn:ℕc:WickContraction nφs:List 𝓕.FieldOpφ:𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succk:Option ↥φsΛ.uncontracted⊢ φs.length.succ = (φs.insertIdx (↑i) φ).length All goals completed! 🐙) (φsΛ.insertAndContractNat i k)@[inherit_doc insertAndContract]
scoped[WickContraction] notation φs "↩Λ" φ:max i:max j => insertAndContract φ φs i j@[simp]
lemma insertAndContract_fstFieldOfContract (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : Option φsΛ.uncontracted)
(a : φsΛ.1) : (φsΛ ↩Λ φ i j).fstFieldOfContract
(congrLift (insertIdx_length_fin φ φs i).symm (insertLift i j a)) =
finCongr (insertIdx_length_fin φ φs i).symm (i.succAbove (φsΛ.fstFieldOfContract a)) := 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Option ↥φsΛ.uncontracteda:↥↑φsΛ⊢ (φsΛ↩Λφ i j).fstFieldOfContract (congrLift ⋯ (insertLift i j a)) = (finCongr ⋯) (i.succAbove (φsΛ.fstFieldOfContract a))
All goals completed! 🐙@[simp]
lemma insertAndContract_sndFieldOfContract (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : Option (φsΛ.uncontracted))
(a : φsΛ.1) : (φsΛ ↩Λ φ i j).sndFieldOfContract
(congrLift (insertIdx_length_fin φ φs i).symm (insertLift i j a)) =
finCongr (insertIdx_length_fin φ φs i).symm (i.succAbove (φsΛ.sndFieldOfContract a)) := 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Option ↥φsΛ.uncontracteda:↥↑φsΛ⊢ (φsΛ↩Λφ i j).sndFieldOfContract (congrLift ⋯ (insertLift i j a)) = (finCongr ⋯) (i.succAbove (φsΛ.sndFieldOfContract a))
All goals completed! 🐙isFalse.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:¬↑i < ↑(i.succAbove ↑j)⊢ ↑((finCongr ⋯) (i.succAbove ↑j)) < ↑((finCongr ⋯) i)
simp_all only [Nat.succ_eq_add_one, Fin.val_fin_lt, not_lt, finCongr_apply, Fin.val_cast] isFalse.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:i.succAbove ↑j ≤ i⊢ i.succAbove ↑j < i
have hi : i.succAbove j ≠ i := Fin.succAbove_ne i j isFalse.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:i.succAbove ↑j ≤ ihi:i.succAbove ↑j ≠ i⊢ i.succAbove ↑j < i
omega All goals completed! 🐙insertAndContract and getDual?
@[simp]
lemma insertAndContract_none_getDual?_self (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) :
(φsΛ ↩Λ φ i none).getDual? (Fin.cast (insertIdx_length_fin φ φs i).symm i) = none := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ (φsΛ↩Λφ i none).getDual? (Fin.cast ⋯ i) = none
simp only [Nat.succ_eq_add_one, insertAndContract, getDual?_congr, finCongr_apply, Fin.cast_cast,
Fin.cast_eq_self, Option.map_eq_none_iff] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ (φsΛ.insertAndContractNat i none).getDual? i = none
simp All goals completed! 🐙lemma insertAndContract_isSome_getDual?_self (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : φsΛ.uncontracted) :
((φsΛ ↩Λ φ i (some j)).getDual?
(Fin.cast (insertIdx_length_fin φ φs i).symm i)).isSome := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ ((φsΛ↩Λφ i some j).getDual? (Fin.cast ⋯ i)).isSome = true
simp [insertAndContract, getDual?_congr] All goals completed! 🐙lemma insertAndContract_some_getDual?_self_not_none (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : φsΛ.uncontracted) :
¬ ((φsΛ ↩Λ φ i (some j)).getDual?
(Fin.cast (insertIdx_length_fin φ φs i).symm i)) = none := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ ¬(φsΛ↩Λφ i some j).getDual? (Fin.cast ⋯ i) = none
simp [insertAndContract, getDual?_congr] All goals completed! 🐙@[simp]
lemma insertAndContract_some_getDual?_self_eq (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : φsΛ.uncontracted) :
((φsΛ ↩Λ φ i (some j)).getDual? (Fin.cast (insertIdx_length_fin φ φs i).symm i))
= some (Fin.cast (insertIdx_length_fin φ φs i).symm (i.succAbove j)) := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ (φsΛ↩Λφ i some j).getDual? (Fin.cast ⋯ i) = some (Fin.cast ⋯ (i.succAbove ↑j))
simp [insertAndContract, getDual?_congr] All goals completed! 🐙
@[simp]
lemma insertAndContract_some_getDual?_some_eq (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : φsΛ.uncontracted) :
((φsΛ ↩Λ φ i (some j)).getDual?
(Fin.cast (insertIdx_length_fin φ φs i).symm (i.succAbove j)))
= some (Fin.cast (insertIdx_length_fin φ φs i).symm i) := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ (φsΛ↩Λφ i some j).getDual? (Fin.cast ⋯ (i.succAbove ↑j)) = some (Fin.cast ⋯ i)
rw [getDual?_eq_some_iff_mem 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ {Fin.cast ⋯ (i.succAbove ↑j), Fin.cast ⋯ i} ∈ ↑(φsΛ↩Λφ i some j) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ {Fin.cast ⋯ (i.succAbove ↑j), Fin.cast ⋯ i} ∈ ↑(φsΛ↩Λφ i some j)] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ {Fin.cast ⋯ (i.succAbove ↑j), Fin.cast ⋯ i} ∈ ↑(φsΛ↩Λφ i some j)
rw [@Finset.pair_comm 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ {Fin.cast ⋯ i, Fin.cast ⋯ (i.succAbove ↑j)} ∈ ↑(φsΛ↩Λφ i some j) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ {Fin.cast ⋯ i, Fin.cast ⋯ (i.succAbove ↑j)} ∈ ↑(φsΛ↩Λφ i some j)] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ {Fin.cast ⋯ i, Fin.cast ⋯ (i.succAbove ↑j)} ∈ ↑(φsΛ↩Λφ i some j)
rw [← getDual?_eq_some_iff_mem 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ (φsΛ↩Λφ i some j).getDual? (Fin.cast ⋯ i) = some (Fin.cast ⋯ (i.succAbove ↑j)) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ (φsΛ↩Λφ i some j).getDual? (Fin.cast ⋯ i) = some (Fin.cast ⋯ (i.succAbove ↑j))] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ (φsΛ↩Λφ i some j).getDual? (Fin.cast ⋯ i) = some (Fin.cast ⋯ (i.succAbove ↑j))
simp All goals completed! 🐙@[simp]
lemma insertAndContract_none_succAbove_getDual?_eq_none_iff (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : Fin φs.length) :
(φsΛ ↩Λ φ i none).getDual? (Fin.cast (insertIdx_length_fin φ φs i).symm
(i.succAbove j)) = none ↔ φsΛ.getDual? j = none := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Fin φs.length⊢ (φsΛ↩Λφ i none).getDual? (Fin.cast ⋯ (i.succAbove j)) = none ↔ φsΛ.getDual? j = none
simp [insertAndContract, getDual?_congr] All goals completed! 🐙@[simp]
lemma insertAndContract_some_succAbove_getDual?_eq_option (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : Fin φs.length)
(k : φsΛ.uncontracted) (hkj : j ≠ k.1) :
(φsΛ ↩Λ φ i (some k)).getDual? (Fin.cast (insertIdx_length_fin φ φs i).symm
(i.succAbove j)) = Option.map (Fin.cast (insertIdx_length_fin φ φs i).symm ∘ i.succAbove)
(φsΛ.getDual? j) := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Fin φs.lengthk:↥φsΛ.uncontractedhkj:j ≠ ↑k⊢ (φsΛ↩Λφ i some k).getDual? (Fin.cast ⋯ (i.succAbove j)) = Option.map (Fin.cast ⋯ ∘ i.succAbove) (φsΛ.getDual? j)
simp only [Nat.succ_eq_add_one, insertAndContract, getDual?_congr, finCongr_apply, Fin.cast_cast,
Fin.cast_eq_self, ne_eq, hkj, not_false_eq_true, insertAndContractNat_some_getDual?_of_neq,
Option.map_map] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Fin φs.lengthk:↥φsΛ.uncontractedhkj:j ≠ ↑k⊢ Option.map (⇑(finCongr ⋯) ∘ i.succAbove) (φsΛ.getDual? j) = Option.map (Fin.cast ⋯ ∘ i.succAbove) (φsΛ.getDual? j)
rfl All goals completed! 🐙
@[simp]
lemma insertAndContract_none_succAbove_getDual?_isSome_iff (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : Fin φs.length) :
((φsΛ ↩Λ φ i none).getDual? (Fin.cast (insertIdx_length_fin φ φs i).symm
(i.succAbove j))).isSome ↔ (φsΛ.getDual? j).isSome := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Fin φs.length⊢ ((φsΛ↩Λφ i none).getDual? (Fin.cast ⋯ (i.succAbove j))).isSome = true ↔ (φsΛ.getDual? j).isSome = true
rw [← not_iff_not 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Fin φs.length⊢ ¬((φsΛ↩Λφ i none).getDual? (Fin.cast ⋯ (i.succAbove j))).isSome = true ↔ ¬(φsΛ.getDual? j).isSome = true 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Fin φs.length⊢ ¬((φsΛ↩Λφ i none).getDual? (Fin.cast ⋯ (i.succAbove j))).isSome = true ↔ ¬(φsΛ.getDual? j).isSome = true] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Fin φs.length⊢ ¬((φsΛ↩Λφ i none).getDual? (Fin.cast ⋯ (i.succAbove j))).isSome = true ↔ ¬(φsΛ.getDual? j).isSome = true
simp All goals completed! 🐙@[simp]
lemma insertAndContract_none_getDual?_get_eq (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : Fin φs.length)
(h : ((φsΛ ↩Λ φ i none).getDual? (Fin.cast (insertIdx_length_fin φ φs i).symm
(i.succAbove j))).isSome) :
((φsΛ ↩Λ φ i none).getDual? (Fin.cast (insertIdx_length_fin φ φs i).symm
(i.succAbove j))).get h = Fin.cast (insertIdx_length_fin φ φs i).symm
(i.succAbove ((φsΛ.getDual? j).get (by 𝓕:FieldSpecificationn:ℕc:WickContraction nφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Fin φs.lengthh:((φsΛ↩Λφ i none).getDual? (Fin.cast ⋯ (i.succAbove j))).isSome = true⊢ (φsΛ.getDual? j).isSome = true simpa using h All goals completed! 🐙))) := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:Fin φs.lengthh:((φsΛ↩Λφ i none).getDual? (Fin.cast ⋯ (i.succAbove j))).isSome = true⊢ ((φsΛ↩Λφ i none).getDual? (Fin.cast ⋯ (i.succAbove j))).get h = Fin.cast ⋯ (i.succAbove ((φsΛ.getDual? j).get ⋯))
simp [insertAndContract, getDual?_congr_get] All goals completed! 🐙
/-........................................... -/
@[simp]
lemma insertAndContract_sndFieldOfContract_some_incl (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : φsΛ.uncontracted) :
(φsΛ ↩Λ φ i (some j)).sndFieldOfContract
(congrLift (insertIdx_length_fin φ φs i).symm ⟨{i, i.succAbove j}, by 𝓕:FieldSpecificationn:ℕc:WickContraction nφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ {i, i.succAbove ↑j} ∈ ↑(φsΛ.insertAndContractNat i (some j))
simp [insertAndContractNat] All goals completed! 🐙⟩) =
if i < i.succAbove j.1 then
finCongr (insertIdx_length_fin φ φs i).symm (i.succAbove j.1) else
finCongr (insertIdx_length_fin φ φs i).symm i := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontracted⊢ (φsΛ↩Λφ i some j).sndFieldOfContract (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) =
if i < i.succAbove ↑j then (finCongr ⋯) (i.succAbove ↑j) else (finCongr ⋯) i
split isTrue 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh✝:i < i.succAbove ↑j⊢ (φsΛ↩Λφ i some j).sndFieldOfContract (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) = (finCongr ⋯) (i.succAbove ↑j)isFalse 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh✝:¬i < i.succAbove ↑j⊢ (φsΛ↩Λφ i some j).sndFieldOfContract (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) = (finCongr ⋯) i
· isTrue 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh✝:i < i.succAbove ↑j⊢ (φsΛ↩Λφ i some j).sndFieldOfContract (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) = (finCongr ⋯) (i.succAbove ↑j) rename_i h isTrue 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:i < i.succAbove ↑j⊢ (φsΛ↩Λφ i some j).sndFieldOfContract (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) = (finCongr ⋯) (i.succAbove ↑j)
refine (φsΛ ↩Λ φ i (some j)).eq_sndFieldOfContract_of_mem
(a := congrLift (insertIdx_length_fin φ φs i).symm ⟨{i, i.succAbove j}, by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:i < i.succAbove ↑j⊢ {i, i.succAbove ↑j} ∈ ↑(φsΛ.insertAndContractNat i (some j))
simp [insertAndContractNat] All goals completed! 🐙⟩)
(i := finCongr (insertIdx_length_fin φ φs i).symm i) (j :=
finCongr (insertIdx_length_fin φ φs i).symm (i.succAbove j)) ?_ ?_ ?_
· isTrue.refine_1 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:i < i.succAbove ↑j⊢ (finCongr ⋯) i ∈ ↑(congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) simp [congrLift] All goals completed! 🐙
· isTrue.refine_2 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:i < i.succAbove ↑j⊢ (finCongr ⋯) (i.succAbove ↑j) ∈ ↑(congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) simp [congrLift] All goals completed! 🐙
· isTrue.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:i < i.succAbove ↑j⊢ (finCongr ⋯) i < (finCongr ⋯) (i.succAbove ↑j) rw [Fin.lt_def isTrue.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:↑i < ↑(i.succAbove ↑j)⊢ ↑((finCongr ⋯) i) < ↑((finCongr ⋯) (i.succAbove ↑j)) isTrue.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:↑i < ↑(i.succAbove ↑j)⊢ ↑((finCongr ⋯) i) < ↑((finCongr ⋯) (i.succAbove ↑j))] at h ⊢ isTrue.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:↑i < ↑(i.succAbove ↑j)⊢ ↑((finCongr ⋯) i) < ↑((finCongr ⋯) (i.succAbove ↑j))
simp_all All goals completed! 🐙
· isFalse 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh✝:¬i < i.succAbove ↑j⊢ (φsΛ↩Λφ i some j).sndFieldOfContract (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) = (finCongr ⋯) i rename_i h isFalse 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:¬i < i.succAbove ↑j⊢ (φsΛ↩Λφ i some j).sndFieldOfContract (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) = (finCongr ⋯) i
refine (φsΛ ↩Λ φ i (some j)).eq_sndFieldOfContract_of_mem
(a := congrLift (insertIdx_length_fin φ φs i).symm ⟨{i, i.succAbove j}, by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:¬i < i.succAbove ↑j⊢ {i, i.succAbove ↑j} ∈ ↑(φsΛ.insertAndContractNat i (some j))
simp [insertAndContractNat] All goals completed! 🐙⟩)
(i := finCongr (insertIdx_length_fin φ φs i).symm (i.succAbove j))
(j := finCongr (insertIdx_length_fin φ φs i).symm i) ?_ ?_ ?_
· isFalse.refine_1 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:¬i < i.succAbove ↑j⊢ (finCongr ⋯) (i.succAbove ↑j) ∈ ↑(congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) simp [congrLift] All goals completed! 🐙
· isFalse.refine_2 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:¬i < i.succAbove ↑j⊢ (finCongr ⋯) i ∈ ↑(congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) simp [congrLift] All goals completed! 🐙
· isFalse.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:¬i < i.succAbove ↑j⊢ (finCongr ⋯) (i.succAbove ↑j) < (finCongr ⋯) i rw [Fin.lt_def isFalse.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:¬↑i < ↑(i.succAbove ↑j)⊢ ↑((finCongr ⋯) (i.succAbove ↑j)) < ↑((finCongr ⋯) i) isFalse.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:¬↑i < ↑(i.succAbove ↑j)⊢ ↑((finCongr ⋯) (i.succAbove ↑j)) < ↑((finCongr ⋯) i)] at h ⊢isFalse.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:¬↑i < ↑(i.succAbove ↑j)⊢ ↑((finCongr ⋯) (i.succAbove ↑j)) < ↑((finCongr ⋯) i)
simp_all only [Nat.succ_eq_add_one, Fin.val_fin_lt, not_lt, finCongr_apply, Fin.val_cast] isFalse.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:i.succAbove ↑j ≤ i⊢ i.succAbove ↑j < i
have hi : i.succAbove j ≠ i := Fin.succAbove_ne i j isFalse.refine_3 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedh:i.succAbove ↑j ≤ ihi:i.succAbove ↑j ≠ i⊢ i.succAbove ↑j < i
omega All goals completed! 🐙
lemma insertAndContract_none_prod_contractions (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ)
(f : (φsΛ ↩Λ φ i none).1 → M) [CommMonoid M] :
∏ a, f a = ∏ (a : φsΛ.1), f (congrLift (insertIdx_length_fin φ φs i).symm
(insertLift i none a)) := by 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succf:↥↑(φsΛ↩Λφ i none) → Minst✝:CommMonoid M⊢ ∏ a, f a = ∏ a, f (congrLift ⋯ (insertLift i none a))
let e1 := Equiv.ofBijective (φsΛ.insertLift i none) (insertLift_none_bijective i) 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succf:↥↑(φsΛ↩Λφ i none) → Minst✝:CommMonoid Me1:↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i none) := Equiv.ofBijective (insertLift i none) ⋯⊢ ∏ a, f a = ∏ a, f (congrLift ⋯ (insertLift i none a))
let e2 := Equiv.ofBijective (congrLift (insertIdx_length_fin φ φs i).symm)
((φsΛ.insertAndContractNat i none).congrLift_bijective ((insertIdx_length_fin φ φs i).symm)) 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succf:↥↑(φsΛ↩Λφ i none) → Minst✝:CommMonoid Me1:↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i none) := Equiv.ofBijective (insertLift i none) ⋯e2:↥↑(φsΛ.insertAndContractNat i none) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i none)) := Equiv.ofBijective (congrLift ⋯) ⋯⊢ ∏ a, f a = ∏ a, f (congrLift ⋯ (insertLift i none a))
erw [← e2.prod_comp 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succf:↥↑(φsΛ↩Λφ i none) → Minst✝:CommMonoid Me1:↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i none) := Equiv.ofBijective (insertLift i none) ⋯e2:↥↑(φsΛ.insertAndContractNat i none) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i none)) := Equiv.ofBijective (congrLift ⋯) ⋯⊢ ∏ i_1, f (e2 i_1) = ∏ a, f (congrLift ⋯ (insertLift i none a))] 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succf:↥↑(φsΛ↩Λφ i none) → Minst✝:CommMonoid Me1:↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i none) := Equiv.ofBijective (insertLift i none) ⋯e2:↥↑(φsΛ.insertAndContractNat i none) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i none)) := Equiv.ofBijective (congrLift ⋯) ⋯⊢ ∏ i_1, f (e2 i_1) = ∏ a, f (congrLift ⋯ (insertLift i none a))
rw [← e1.prod_comp 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succf:↥↑(φsΛ↩Λφ i none) → Minst✝:CommMonoid Me1:↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i none) := Equiv.ofBijective (insertLift i none) ⋯e2:↥↑(φsΛ.insertAndContractNat i none) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i none)) := Equiv.ofBijective (congrLift ⋯) ⋯⊢ ∏ i_1, f (e2 (e1 i_1)) = ∏ a, f (congrLift ⋯ (insertLift i none a)) 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succf:↥↑(φsΛ↩Λφ i none) → Minst✝:CommMonoid Me1:↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i none) := Equiv.ofBijective (insertLift i none) ⋯e2:↥↑(φsΛ.insertAndContractNat i none) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i none)) := Equiv.ofBijective (congrLift ⋯) ⋯⊢ ∏ i_1, f (e2 (e1 i_1)) = ∏ a, f (congrLift ⋯ (insertLift i none a))] 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succf:↥↑(φsΛ↩Λφ i none) → Minst✝:CommMonoid Me1:↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i none) := Equiv.ofBijective (insertLift i none) ⋯e2:↥↑(φsΛ.insertAndContractNat i none) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i none)) := Equiv.ofBijective (congrLift ⋯) ⋯⊢ ∏ i_1, f (e2 (e1 i_1)) = ∏ a, f (congrLift ⋯ (insertLift i none a))
rfl All goals completed! 🐙
lemma insertAndContract_some_prod_contractions (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (j : φsΛ.uncontracted)
(f : (φsΛ ↩Λ φ i (some j)).1 → M) [CommMonoid M] :
∏ a, f a = f (congrLift (insertIdx_length_fin φ φs i).symm
⟨{i, i.succAbove j}, by 𝓕:FieldSpecificationn:ℕc:WickContraction nM:Type ?u.23φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid M⊢ {i, i.succAbove ↑j} ∈ ↑(φsΛ.insertAndContractNat i (some j)) simp [insertAndContractNat] All goals completed! 🐙⟩) *
∏ (a : φsΛ.1), f (congrLift (insertIdx_length_fin φ φs i).symm (insertLift i (some j) a)) := by 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid M⊢ ∏ a, f a = f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a))
let e2 := Equiv.ofBijective (congrLift (insertIdx_length_fin φ φs i).symm)
((φsΛ.insertAndContractNat i (some j)).congrLift_bijective ((insertIdx_length_fin φ φs i).symm)) 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯⊢ ∏ a, f a = f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a))
erw [← e2.prod_comp 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯⊢ ∏ i_1, f (e2 i_1) = f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a))] 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯⊢ ∏ i_1, f (e2 i_1) = f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a))
let e1 := Equiv.ofBijective (φsΛ.insertLiftSome i j) (insertLiftSome_bijective i j) 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯e1:Unit ⊕ ↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i (some j)) := Equiv.ofBijective (insertLiftSome i j) ⋯⊢ ∏ i_1, f (e2 i_1) = f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a))
rw [← e1.prod_comp 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯e1:Unit ⊕ ↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i (some j)) := Equiv.ofBijective (insertLiftSome i j) ⋯⊢ ∏ i_1, f (e2 (e1 i_1)) = f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a)) 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯e1:Unit ⊕ ↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i (some j)) := Equiv.ofBijective (insertLiftSome i j) ⋯⊢ ∏ i_1, f (e2 (e1 i_1)) = f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a))] 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯e1:Unit ⊕ ↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i (some j)) := Equiv.ofBijective (insertLiftSome i j) ⋯⊢ ∏ i_1, f (e2 (e1 i_1)) = f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a))
rw [Fintype.prod_sum_type 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯e1:Unit ⊕ ↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i (some j)) := Equiv.ofBijective (insertLiftSome i j) ⋯⊢ (∏ a₁, f (e2 (e1 (Sum.inl a₁)))) * ∏ a₂, f (e2 (e1 (Sum.inr a₂))) =
f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a)) 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯e1:Unit ⊕ ↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i (some j)) := Equiv.ofBijective (insertLiftSome i j) ⋯⊢ (∏ a₁, f (e2 (e1 (Sum.inl a₁)))) * ∏ a₂, f (e2 (e1 (Sum.inr a₂))) =
f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a))] 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯e1:Unit ⊕ ↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i (some j)) := Equiv.ofBijective (insertLiftSome i j) ⋯⊢ (∏ a₁, f (e2 (e1 (Sum.inl a₁)))) * ∏ a₂, f (e2 (e1 (Sum.inr a₂))) =
f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ a, f (congrLift ⋯ (insertLift i (some j) a))
simp only [Finset.univ_unique, PUnit.default_eq_unit, Nat.succ_eq_add_one, Finset.prod_singleton,
Finset.univ_eq_attach] 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succj:↥φsΛ.uncontractedf:↥↑(φsΛ↩Λφ i some j) → Minst✝:CommMonoid Me2:↥↑(φsΛ.insertAndContractNat i (some j)) ≃ ↥↑((congr ⋯) (φsΛ.insertAndContractNat i (some j))) := Equiv.ofBijective (congrLift ⋯) ⋯e1:Unit ⊕ ↥↑φsΛ ≃ ↥↑(φsΛ.insertAndContractNat i (some j)) := Equiv.ofBijective (insertLiftSome i j) ⋯⊢ f (e2 (e1 (Sum.inl PUnit.unit))) * ∏ x ∈ (↑φsΛ).attach, f (e2 (e1 (Sum.inr x))) =
f (congrLift ⋯ ⟨{i, i.succAbove ↑j}, ⋯⟩) * ∏ x ∈ (↑φsΛ).attach, f (congrLift ⋯ (insertLift i (some j) x))
rfl All goals completed! 🐙
Given a finite set of Fin φs.length the finite set of (φs.insertIdx i φ).length
formed by mapping elements using i.succAboveEmb and finCongr.
def insertAndContractLiftFinset (φ : 𝓕.FieldOp) {φs : List 𝓕.FieldOp}
(i : Fin φs.length.succ) (a : Finset (Fin φs.length)) :
Finset (Fin (φs.insertIdx i φ).length) :=
(a.map i.succAboveEmb).map (finCongr (insertIdx_length_fin φ φs i).symm).toEmbedding@[simp]
lemma self_not_mem_insertAndContractLiftFinset (φ : 𝓕.FieldOp) {φs : List 𝓕.FieldOp}
(i : Fin φs.length.succ) (a : Finset (Fin φs.length)) :
Fin.cast (insertIdx_length_fin φ φs i).symm i ∉ insertAndContractLiftFinset φ i a := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)⊢ Fin.cast ⋯ i ∉ insertAndContractLiftFinset φ i a
simp only [Nat.succ_eq_add_one, insertAndContractLiftFinset, Finset.mem_map_equiv, finCongr_symm,
finCongr_apply, Fin.cast_cast, Fin.cast_eq_self] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)⊢ i ∉ Finset.map i.succAboveEmb a
simp only [Finset.mem_map, Fin.succAboveEmb_apply, not_exists, not_and] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)⊢ ∀ x ∈ a, ¬i.succAbove x = i
intro x 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)x:Fin φs.length⊢ x ∈ a → ¬i.succAbove x = i
exact fun a => Fin.succAbove_ne i x All goals completed! 🐙
lemma succAbove_mem_insertAndContractLiftFinset (φ : 𝓕.FieldOp) {φs : List 𝓕.FieldOp}
(i : Fin φs.length.succ) (a : Finset (Fin φs.length)) (j : Fin φs.length) :
Fin.cast (insertIdx_length_fin φ φs i).symm (i.succAbove j)
∈ insertAndContractLiftFinset φ i a ↔ j ∈ a := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.length⊢ Fin.cast ⋯ (i.succAbove j) ∈ insertAndContractLiftFinset φ i a ↔ j ∈ a
simp only [insertAndContractLiftFinset, Finset.mem_map_equiv, finCongr_symm, finCongr_apply,
Fin.cast_cast, Fin.cast_eq_self] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.length⊢ i.succAbove j ∈ Finset.map i.succAboveEmb a ↔ j ∈ a
simp only [Finset.mem_map, Fin.succAboveEmb_apply] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.length⊢ (∃ a_1 ∈ a, i.succAbove a_1 = i.succAbove j) ↔ j ∈ a
apply Iff.intro mp 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.length⊢ (∃ a_1 ∈ a, i.succAbove a_1 = i.succAbove j) → j ∈ ampr 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.length⊢ j ∈ a → ∃ a_2 ∈ a, i.succAbove a_2 = i.succAbove j
· mp 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.length⊢ (∃ a_1 ∈ a, i.succAbove a_1 = i.succAbove j) → j ∈ a intro h mp 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.lengthh:∃ a_1 ∈ a, i.succAbove a_1 = i.succAbove j⊢ j ∈ a
obtain ⟨x, hx1, hx2⟩ := h mp 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.lengthx:Fin φs.lengthhx1:x ∈ ahx2:i.succAbove x = i.succAbove j⊢ j ∈ a
rw [Function.Injective.eq_iff (Fin.succAbove_right_injective) mp 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.lengthx:Fin φs.lengthhx1:x ∈ ahx2:x = j⊢ j ∈ a mp 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.lengthx:Fin φs.lengthhx1:x ∈ ahx2:x = j⊢ j ∈ a] at hx2 mp 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.lengthx:Fin φs.lengthhx1:x ∈ ahx2:x = j⊢ j ∈ a
simp_all All goals completed! 🐙
· mpr 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.length⊢ j ∈ a → ∃ a_2 ∈ a, i.succAbove a_2 = i.succAbove j intro h mpr 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succa:Finset (Fin φs.length)j:Fin φs.lengthh:j ∈ a⊢ ∃ a_1 ∈ a, i.succAbove a_1 = i.succAbove j
use j All goals completed! 🐙lemma insert_fin_eq_self (φ : 𝓕.FieldOp) {φs : List 𝓕.FieldOp}
(i : Fin φs.length.succ) (j : Fin (List.insertIdx φs i φ).length) :
j = Fin.cast (insertIdx_length_fin φ φs i).symm i
∨ ∃ k, j = Fin.cast (insertIdx_length_fin φ φs i).symm (i.succAbove k) := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succj:Fin (φs.insertIdx (↑i) φ).length⊢ j = Fin.cast ⋯ i ∨ ∃ k, j = Fin.cast ⋯ (i.succAbove k)
obtain ⟨k, hk⟩ := (finCongr (insertIdx_length_fin φ φs i).symm).surjective j 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succj:Fin (φs.insertIdx (↑i) φ).lengthk:Fin φs.length.succhk:(finCongr ⋯) k = j⊢ j = Fin.cast ⋯ i ∨ ∃ k, j = Fin.cast ⋯ (i.succAbove k)
subst hk 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succk:Fin φs.length.succ⊢ (finCongr ⋯) k = Fin.cast ⋯ i ∨ ∃ k_1, (finCongr ⋯) k = Fin.cast ⋯ (i.succAbove k_1)
by_cases hi : k = i pos 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succk:Fin φs.length.succhi:k = i⊢ (finCongr ⋯) k = Fin.cast ⋯ i ∨ ∃ k_1, (finCongr ⋯) k = Fin.cast ⋯ (i.succAbove k_1)neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succk:Fin φs.length.succhi:¬k = i⊢ (finCongr ⋯) k = Fin.cast ⋯ i ∨ ∃ k_1, (finCongr ⋯) k = Fin.cast ⋯ (i.succAbove k_1)
· pos 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succk:Fin φs.length.succhi:k = i⊢ (finCongr ⋯) k = Fin.cast ⋯ i ∨ ∃ k_1, (finCongr ⋯) k = Fin.cast ⋯ (i.succAbove k_1) simp [hi] All goals completed! 🐙
· neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succk:Fin φs.length.succhi:¬k = i⊢ (finCongr ⋯) k = Fin.cast ⋯ i ∨ ∃ k_1, (finCongr ⋯) k = Fin.cast ⋯ (i.succAbove k_1) simp only [Nat.succ_eq_add_one, ← Fin.exists_succAbove_eq_iff] at hi neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succk:Fin φs.length.succhi:∃ z, i.succAbove z = k⊢ (finCongr ⋯) k = Fin.cast ⋯ i ∨ ∃ k_1, (finCongr ⋯) k = Fin.cast ⋯ (i.succAbove k_1)
obtain ⟨z, hk⟩ := hi neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succk:Fin φs.length.succz:Fin φs.lengthhk:i.succAbove z = k⊢ (finCongr ⋯) k = Fin.cast ⋯ i ∨ ∃ k_1, (finCongr ⋯) k = Fin.cast ⋯ (i.succAbove k_1)
subst hk neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succz:Fin φs.length⊢ (finCongr ⋯) (i.succAbove z) = Fin.cast ⋯ i ∨ ∃ k, (finCongr ⋯) (i.succAbove z) = Fin.cast ⋯ (i.succAbove k)
right neg 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succz:Fin φs.length⊢ ∃ k, (finCongr ⋯) (i.succAbove z) = Fin.cast ⋯ (i.succAbove k)
use z h 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succz:Fin φs.length⊢ (finCongr ⋯) (i.succAbove z) = Fin.cast ⋯ (i.succAbove z)
rfl All goals completed! 🐙
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.
lemma insertLift_sum (φ : 𝓕.FieldOp) {φs : List 𝓕.FieldOp}
(i : Fin φs.length.succ) [AddCommMonoid M] (f : WickContraction (φs.insertIdx i φ).length → M) :
∑ c, f c =
∑ (φsΛ : WickContraction φs.length), ∑ (k : Option φsΛ.uncontracted), f (φsΛ ↩Λ φ i k) := by 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succinst✝:AddCommMonoid Mf:WickContraction (φs.insertIdx (↑i) φ).length → M⊢ ∑ c, f c = ∑ φsΛ, ∑ k, f (φsΛ↩Λφ i k)
rw [sum_extractEquiv_congr (finCongr (insertIdx_length_fin φ φs i).symm i) f
(insertIdx_length_fin φ φs i) 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succinst✝:AddCommMonoid Mf:WickContraction (φs.insertIdx (↑i) φ).length → M⊢ ∑ c, ∑ k, f ((congr ⋯) ((extractEquiv ((finCongr ⋯) ((finCongr ⋯) i))).symm ⟨c, k⟩)) = ∑ φsΛ, ∑ k, f (φsΛ↩Λφ i k) 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succinst✝:AddCommMonoid Mf:WickContraction (φs.insertIdx (↑i) φ).length → M⊢ ∑ c, ∑ k, f ((congr ⋯) ((extractEquiv ((finCongr ⋯) ((finCongr ⋯) i))).symm ⟨c, k⟩)) = ∑ φsΛ, ∑ k, f (φsΛ↩Λφ i k)] 𝓕:FieldSpecificationM:Type u_1φ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin φs.length.succinst✝:AddCommMonoid Mf:WickContraction (φs.insertIdx (↑i) φ).length → M⊢ ∑ c, ∑ k, f ((congr ⋯) ((extractEquiv ((finCongr ⋯) ((finCongr ⋯) i))).symm ⟨c, k⟩)) = ∑ φsΛ, ∑ k, f (φsΛ↩Λφ i k)
rfl All goals completed! 🐙Uncontracted list
lemma insertAndContract_uncontractedList_none_map (φ : 𝓕.FieldOp) {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) :
[φsΛ ↩Λ φ i none]ᵘᶜ = List.insertIdx [φsΛ]ᵘᶜ (φsΛ.uncontractedListOrderPos i) φ := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ [φsΛ↩Λφ i none]ᵘᶜ = [φsΛ]ᵘᶜ.insertIdx (φsΛ.uncontractedListOrderPos i) φ
simp only [Nat.succ_eq_add_one, insertAndContract, uncontractedListGet] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get ((congr ⋯) (φsΛ.insertAndContractNat i none)).uncontractedList =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ
rw [congr_uncontractedList 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get (List.map (⇑(finCongr ⋯)) (φsΛ.insertAndContractNat i none).uncontractedList) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get (List.map (⇑(finCongr ⋯)) (φsΛ.insertAndContractNat i none).uncontractedList) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get (List.map (⇑(finCongr ⋯)) (φsΛ.insertAndContractNat i none).uncontractedList) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ
erw [uncontractedList_extractEquiv_symm_none 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get
(List.map (⇑(finCongr ⋯))
(List.orderedInsert (fun x1 x2 => x1 ≤ x2) i (List.map (⇑i.succAboveEmb) φsΛ.uncontractedList))) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get
(List.map (⇑(finCongr ⋯))
(List.orderedInsert (fun x1 x2 => x1 ≤ x2) i (List.map (⇑i.succAboveEmb) φsΛ.uncontractedList))) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ
rw [orderedInsert_succAboveEmb_uncontractedList_eq_insertIdx 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get
(List.map (⇑(finCongr ⋯))
((List.map (⇑i.succAboveEmb) φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) i)) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get
(List.map (⇑(finCongr ⋯))
((List.map (⇑i.succAboveEmb) φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) i)) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get
(List.map (⇑(finCongr ⋯))
((List.map (⇑i.succAboveEmb) φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) i)) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ
rw [insertIdx_map, 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get
((List.map (⇑(finCongr ⋯)) (List.map (⇑i.succAboveEmb) φsΛ.uncontractedList)).insertIdx
(φsΛ.uncontractedListOrderPos i) ((finCongr ⋯) i)) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ (List.map (φs.insertIdx (↑i) φ).get
(List.map (⇑(finCongr ⋯)) (List.map (⇑i.succAboveEmb) φsΛ.uncontractedList))).insertIdx
(φsΛ.uncontractedListOrderPos i) ((φs.insertIdx (↑i) φ).get ((finCongr ⋯) i)) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ insertIdx_map 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ (List.map (φs.insertIdx (↑i) φ).get
(List.map (⇑(finCongr ⋯)) (List.map (⇑i.succAboveEmb) φsΛ.uncontractedList))).insertIdx
(φsΛ.uncontractedListOrderPos i) ((φs.insertIdx (↑i) φ).get ((finCongr ⋯) i)) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ (List.map (φs.insertIdx (↑i) φ).get
(List.map (⇑(finCongr ⋯)) (List.map (⇑i.succAboveEmb) φsΛ.uncontractedList))).insertIdx
(φsΛ.uncontractedListOrderPos i) ((φs.insertIdx (↑i) φ).get ((finCongr ⋯) i)) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ (List.map (φs.insertIdx (↑i) φ).get
(List.map (⇑(finCongr ⋯)) (List.map (⇑i.succAboveEmb) φsΛ.uncontractedList))).insertIdx
(φsΛ.uncontractedListOrderPos i) ((φs.insertIdx (↑i) φ).get ((finCongr ⋯) i)) =
(List.map φs.get φsΛ.uncontractedList).insertIdx (φsΛ.uncontractedListOrderPos i) φ
congr 1 e_xs 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get (List.map (⇑(finCongr ⋯)) (List.map (⇑i.succAboveEmb) φsΛ.uncontractedList)) =
List.map φs.get φsΛ.uncontractedListe_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ (φs.insertIdx (↑i) φ).get ((finCongr ⋯) i) = φ
· e_xs 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ List.map (φs.insertIdx (↑i) φ).get (List.map (⇑(finCongr ⋯)) (List.map (⇑i.succAboveEmb) φsΛ.uncontractedList)) =
List.map φs.get φsΛ.uncontractedList simp All goals completed! 🐙
· e_a 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.lengthi:Fin φs.length.succ⊢ (φs.insertIdx (↑i) φ).get ((finCongr ⋯) i) = φ simp All goals completed! 🐙
@[simp]
lemma insertAndContract_uncontractedList_none_zero (φ : 𝓕.FieldOp) {φs : List 𝓕.FieldOp}
(φsΛ : WickContraction φs.length) :
[φsΛ ↩Λ φ 0 none]ᵘᶜ = φ :: [φsΛ]ᵘᶜ := by 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ [φsΛ↩Λφ 0none]ᵘᶜ = φ :: [φsΛ]ᵘᶜ
rw [insertAndContract_uncontractedList_none_map 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ [φsΛ]ᵘᶜ.insertIdx (φsΛ.uncontractedListOrderPos 0) φ = φ :: [φsΛ]ᵘᶜ 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ [φsΛ]ᵘᶜ.insertIdx (φsΛ.uncontractedListOrderPos 0) φ = φ :: [φsΛ]ᵘᶜ] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpφsΛ:WickContraction φs.length⊢ [φsΛ]ᵘᶜ.insertIdx (φsΛ.uncontractedListOrderPos 0) φ = φ :: [φsΛ]ᵘᶜ
simp [uncontractedListOrderPos] All goals completed! 🐙