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.Sign.Basic
public import Physlib.QFT.PerturbationTheory.WickContraction.InsertAndContractSign on inserting and not contracting
@[expose] public sectioninr ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succi1:Fin ฯs.lengthi2:Fin ฯs.lengthk:Fin ฯs.lengthh1:(Fin.cast โฏ (i.succAbove k) โ
if i.succAbove i1 < i โง i < i.succAbove i2 then
insert ((finCongr โฏ) i) (insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)) โ
Fin.cast โฏ (i.succAbove k) โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)โข i1 < k โง
k < i2 โง
(ฯsฮ.getDual? k = none โจ
โ (h : (ฯsฮ.getDual? k).isSome = true),
Fin.cast โฏ (i.succAbove i1) < Fin.cast โฏ (i.succAbove ((ฯsฮ.getDual? k).get โฏ))) โ
i1 < k โง k < i2 โง (ฯsฮ.getDual? k = none โจ โ (h : (ฯsฮ.getDual? k).isSome = true), i1 < (ฯsฮ.getDual? k).get h)
simp only [and_congr_right_iff] inr ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succi1:Fin ฯs.lengthi2:Fin ฯs.lengthk:Fin ฯs.lengthh1:(Fin.cast โฏ (i.succAbove k) โ
if i.succAbove i1 < i โง i < i.succAbove i2 then
insert ((finCongr โฏ) i) (insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)) โ
Fin.cast โฏ (i.succAbove k) โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)โข i1 < k โ
k < i2 โ
((ฯsฮ.getDual? k = none โจ
โ (h : (ฯsฮ.getDual? k).isSome = true),
Fin.cast โฏ (i.succAbove i1) < Fin.cast โฏ (i.succAbove ((ฯsฮ.getDual? k).get โฏ))) โ
ฯsฮ.getDual? k = none โจ โ (h : (ฯsฮ.getDual? k).isSome = true), i1 < (ฯsฮ.getDual? k).get h)
intro h1 h2 inr ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succi1:Fin ฯs.lengthi2:Fin ฯs.lengthk:Fin ฯs.lengthh1โ:(Fin.cast โฏ (i.succAbove k) โ
if i.succAbove i1 < i โง i < i.succAbove i2 then
insert ((finCongr โฏ) i) (insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)) โ
Fin.cast โฏ (i.succAbove k) โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)h1:i1 < kh2:k < i2โข (ฯsฮ.getDual? k = none โจ
โ (h : (ฯsฮ.getDual? k).isSome = true),
Fin.cast โฏ (i.succAbove i1) < Fin.cast โฏ (i.succAbove ((ฯsฮ.getDual? k).get โฏ))) โ
ฯsฮ.getDual? k = none โจ โ (h : (ฯsฮ.getDual? k).isSome = true), i1 < (ฯsฮ.getDual? k).get h
conv_lhs =>
rhs ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succi1:Fin ฯs.lengthi2:Fin ฯs.lengthk:Fin ฯs.lengthh1โ:(Fin.cast โฏ (i.succAbove k) โ
if i.succAbove i1 < i โง i < i.succAbove i2 then
insert ((finCongr โฏ) i) (insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)) โ
Fin.cast โฏ (i.succAbove k) โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)h1:i1 < kh2:k < i2| โ (h : (ฯsฮ.getDual? k).isSome = true), Fin.cast โฏ (i.succAbove i1) < Fin.cast โฏ (i.succAbove ((ฯsฮ.getDual? k).get โฏ))
enter [h] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succi1:Fin ฯs.lengthi2:Fin ฯs.lengthk:Fin ฯs.lengthh1โ:(Fin.cast โฏ (i.succAbove k) โ
if i.succAbove i1 < i โง i < i.succAbove i2 then
insert ((finCongr โฏ) i) (insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)) โ
Fin.cast โฏ (i.succAbove k) โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)h1:i1 < kh2:k < i2h:(ฯsฮ.getDual? k).isSome = true| Fin.cast โฏ (i.succAbove i1) < Fin.cast โฏ (i.succAbove ((ฯsฮ.getDual? k).get โฏ))
rw [Fin.lt_def] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succi1:Fin ฯs.lengthi2:Fin ฯs.lengthk:Fin ฯs.lengthh1โ:(Fin.cast โฏ (i.succAbove k) โ
if i.succAbove i1 < i โง i < i.succAbove i2 then
insert ((finCongr โฏ) i) (insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)) โ
Fin.cast โฏ (i.succAbove k) โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)h1:i1 < kh2:k < i2h:(ฯsฮ.getDual? k).isSome = true| โ(Fin.cast โฏ (i.succAbove i1)) < โ(Fin.cast โฏ (i.succAbove ((ฯsฮ.getDual? k).get โฏ)))
simp only [Fin.val_cast, Fin.val_fin_lt] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succi1:Fin ฯs.lengthi2:Fin ฯs.lengthk:Fin ฯs.lengthh1โ:(Fin.cast โฏ (i.succAbove k) โ
if i.succAbove i1 < i โง i < i.succAbove i2 then
insert ((finCongr โฏ) i) (insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)) โ
Fin.cast โฏ (i.succAbove k) โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)h1:i1 < kh2:k < i2h:(ฯsฮ.getDual? k).isSome = true| i.succAbove i1 < i.succAbove ((ฯsฮ.getDual? k).get โฏ)
rw [Fin.succAbove_lt_succAbove_iff] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succi1:Fin ฯs.lengthi2:Fin ฯs.lengthk:Fin ฯs.lengthh1โ:(Fin.cast โฏ (i.succAbove k) โ
if i.succAbove i1 < i โง i < i.succAbove i2 then
insert ((finCongr โฏ) i) (insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)) โ
Fin.cast โฏ (i.succAbove k) โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset i1 i2)h1:i1 < kh2:k < i2h:(ฯsฮ.getDual? k).isSome = true| i1 < (ฯsฮ.getDual? k).get โฏ
Given a Wick contraction ฯsฮ associated with a list of states ฯs
and an i : Fin ฯs.length.succ, the change in sign of the contraction associated with
inserting ฯ into ฯs at position i without contracting it.
For each contracted pair {a1, a2} in ฯsฮ if a1 < a2 such that i is within the range
a1 < i < a2 we pick up a sign equal to ๐ข(ฯ, ฯs[a2]).
def signInsertNone (ฯ : ๐.FieldOp) (ฯs : List ๐.FieldOp) (ฯsฮ : WickContraction ฯs.length)
(i : Fin ฯs.length.succ) : โ :=
โ (a : ฯsฮ.1),
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
๐ข(๐ |>โ ฯ, ๐ |>โ ฯs[ฯsฮ.sndFieldOfContract a])
else 1
lemma sign_insert_none_eq_signInsertNone_mul_sign (ฯ : ๐.FieldOp) (ฯs : List ๐.FieldOp)
(ฯsฮ : WickContraction ฯs.length) (i : Fin ฯs.length.succ) :
(ฯsฮ โฉฮ ฯ i none).sign = (ฯsฮ.signInsertNone ฯ ฯs i) * ฯsฮ.sign := by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข sign (ฯs.insertIdx (โi) ฯ) (ฯsฮโฉฮฯ i none) = signInsertNone ฯ ฯs ฯsฮ i * sign ฯs ฯsฮ
rw [sign ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
signInsertNone ฯ ฯs ฯsฮ i * sign ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
signInsertNone ฯ ฯs ฯsฮ i * sign ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
signInsertNone ฯ ฯs ฯsฮ i * sign ฯs ฯsฮ
rw [signInsertNone, ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
(โ a,
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
sign ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
โ x,
(if i.succAbove (ฯsฮ.fstFieldOfContract x) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract x) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract x])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract x]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract x) (ฯsฮ.sndFieldOfContract x))) sign, ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
(โ a,
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
โ a,
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))) ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
โ x,
(if i.succAbove (ฯsฮ.fstFieldOfContract x) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract x) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract x])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract x]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract x) (ฯsฮ.sndFieldOfContract x))) โ Finset.prod_mul_distrib ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
โ x,
(if i.succAbove (ฯsฮ.fstFieldOfContract x) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract x) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract x])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract x]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract x) (ฯsฮ.sndFieldOfContract x))) ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
โ x,
(if i.succAbove (ฯsฮ.fstFieldOfContract x) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract x) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract x])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract x]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract x) (ฯsฮ.sndFieldOfContract x)))] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract a) ((ฯsฮโฉฮฯ i none).sndFieldOfContract a))) =
โ x,
(if i.succAbove (ฯsฮ.fstFieldOfContract x) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract x) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract x])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract x]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract x) (ฯsฮ.sndFieldOfContract x)))
rw [insertAndContract_none_prod_contractions ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a))]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract (congrLift โฏ (insertLift i none a)))
((ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a))))) =
โ x,
(if i.succAbove (ฯsฮ.fstFieldOfContract x) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract x) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract x])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract x]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract x) (ฯsฮ.sndFieldOfContract x))) ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a))]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract (congrLift โฏ (insertLift i none a)))
((ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a))))) =
โ x,
(if i.succAbove (ฯsฮ.fstFieldOfContract x) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract x) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract x])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract x]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract x) (ฯsฮ.sndFieldOfContract x)))] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข โ a,
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a))]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract (congrLift โฏ (insertLift i none a)))
((ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a))))) =
โ x,
(if i.succAbove (ฯsฮ.fstFieldOfContract x) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract x) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract x])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract x]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract x) (ฯsฮ.sndFieldOfContract x)))
congr e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข (fun a =>
(exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a))]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract (congrLift โฏ (insertLift i none a)))
((ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a)))))) =
fun x =>
(if i.succAbove (ฯsฮ.fstFieldOfContract x) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract x) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract x])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract x]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract x) (ฯsฮ.sndFieldOfContract x)))
funext a e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮโข (exchangeSign (๐|>โ(ฯs.insertIdx (โi) ฯ)[(ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a))]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset ((ฯsฮโฉฮฯ i none).fstFieldOfContract (congrLift โฏ (insertLift i none a)))
((ฯsฮโฉฮฯ i none).sndFieldOfContract (congrLift โฏ (insertLift i none a))))) =
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
(exchangeSign (๐|>โฯs[ฯsฮ.sndFieldOfContract a]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
simp only [Nat.succ_eq_add_one, insertAndContract_sndFieldOfContract,
finCongr_apply, Fin.getElem_fin, Fin.val_cast, insertIdx_getElem_fin,
insertAndContract_fstFieldOfContract, ite_mul, one_mul] e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮโข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
((ฯsฮโฉฮฯ i none).signFinset (Fin.cast โฏ (i.succAbove (ฯsฮ.fstFieldOfContract a)))
(Fin.cast โฏ (i.succAbove (ฯsฮ.sndFieldOfContract a))))) =
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
else
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
rw [signFinset_insertAndContract_none e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮโข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
insert ((finCongr โฏ) i)
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))) =
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
else
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))) e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮโข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
insert ((finCongr โฏ) i)
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))) =
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
else
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))]e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮโข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
insert ((finCongr โฏ) i)
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
else insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))) =
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
else
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
split e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(insert ((finCongr โฏ) i)
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))))) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:ยฌ(i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a))โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))) =
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))
ยท e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(insert ((finCongr โฏ) i)
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))))) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))) rw [ofFinset_insert e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
((๐|>โ(ฯs.insertIdx (โi) ฯ)[(finCongr โฏ) i]) *
ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))e_f.isTrue.h ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (finCongr โฏ) i โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)) e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
((๐|>โ(ฯs.insertIdx (โi) ฯ)[(finCongr โฏ) i]) *
ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))e_f.isTrue.h ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (finCongr โฏ) i โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))]e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
((๐|>โ(ฯs.insertIdx (โi) ฯ)[(finCongr โฏ) i]) *
ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))e_f.isTrue.h ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (finCongr โฏ) i โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))
simp only [Nat.succ_eq_add_one, finCongr_apply, Fin.getElem_fin, Fin.val_cast,
List.getElem_insertIdx_self, map_mul] e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)])) (๐|>โฯ) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))e_f.isTrue.h ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (finCongr โฏ) i โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))
rw [stat_ofFinset_of_insertAndContractLiftFinset e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)])) (๐|>โฯ) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))e_f.isTrue.h ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (finCongr โฏ) i โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)) e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)])) (๐|>โฯ) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))e_f.isTrue.h ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (finCongr โฏ) i โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))]e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)])) (๐|>โฯ) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) *
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))e_f.isTrue.h ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (finCongr โฏ) i โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))
simp only [exchangeSign_symm] e_f.isTrue.h ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (finCongr โฏ) i โ insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))
simp All goals completed! ๐
ยท e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:ยฌ(i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a))โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic (ฯs.insertIdx (โi) ฯ).get
(insertAndContractLiftFinset ฯ i (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a)))) =
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))) rw [stat_ofFinset_of_insertAndContractLiftFinset e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:ยฌ(i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a))โข (exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))) =
(exchangeSign (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]))
(ofFinset ๐.fieldOpStatistic ฯs.get (ฯsฮ.signFinset (ฯsฮ.fstFieldOfContract a) (ฯsฮ.sndFieldOfContract a))) All goals completed! ๐] All goals completed! ๐
lemma signInsertNone_eq_mul_fst_snd (ฯ : ๐.FieldOp) (ฯs : List ๐.FieldOp)
(ฯsฮ : WickContraction ฯs.length) (i : Fin ฯs.length.succ) :
ฯsฮ.signInsertNone ฯ ฯs i = โ (a : ฯsฮ.1),
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then
๐ข(๐ |>โ ฯ, ๐ |>โ ฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
(if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then
๐ข(๐ |>โ ฯ, ๐ |>โ ฯs[ฯsฮ.sndFieldOfContract a])
else 1) := by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข signInsertNone ฯ ฯs ฯsฮ i =
โ a,
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1
rw [signInsertNone ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข (โ a,
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
โ a,
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1 ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข (โ a,
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
โ a,
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข (โ a,
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
โ a,
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1
congr e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succโข (fun a =>
if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
fun a =>
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1
funext a e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮโข (if i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a) then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1
split e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) =
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:ยฌ(i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a))โข 1 =
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1
ยท e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) =
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1 rename_i h e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) =
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1
simp only [Fin.getElem_fin, h.1, โreduceIte, mul_ite, exchangeSign_mul_self,
mul_one] e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) =
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then 1 else (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)])
rw [if_neg e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)])e_f.isTrue.hnc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข ยฌi.succAbove (ฯsฮ.sndFieldOfContract a) < i e_f.isTrue.hnc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข ยฌi.succAbove (ฯsฮ.sndFieldOfContract a) < i]e_f.isTrue.hnc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a)โข ยฌi.succAbove (ฯsฮ.sndFieldOfContract a) < i
omega All goals completed! ๐
ยท e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮhโ:ยฌ(i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a))โข 1 =
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1 rename_i h e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:ยฌ(i.succAbove (ฯsฮ.fstFieldOfContract a) < i โง i < i.succAbove (ฯsฮ.sndFieldOfContract a))โข 1 =
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1
simp only [Nat.succ_eq_add_one, not_and, not_lt] at h e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค iโข 1 =
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1
split e_f.isFalse.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ihโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < iโข 1 =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1e_f.isFalse.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ihโ:ยฌi.succAbove (ฯsฮ.fstFieldOfContract a) < iโข 1 =
1 *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1 <;> e_f.isFalse.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ihโ:i.succAbove (ฯsฮ.fstFieldOfContract a) < iโข 1 =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1e_f.isFalse.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ihโ:ยฌi.succAbove (ฯsฮ.fstFieldOfContract a) < iโข 1 =
1 *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1 rename_i h1 e_f.isFalse.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:ยฌi.succAbove (ฯsฮ.fstFieldOfContract a) < iโข 1 =
1 *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1
ยท e_f.isFalse.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i.succAbove (ฯsฮ.fstFieldOfContract a) < iโข 1 =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1 simp_all only [forall_const, Fin.getElem_fin, mul_ite,
exchangeSign_mul_self, mul_one] e_f.isFalse.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i.succAbove (ฯsฮ.fstFieldOfContract a) < iโข 1 =
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then 1 else (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)])
rw [if_pos e_f.isFalse.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i.succAbove (ฯsฮ.fstFieldOfContract a) < iโข 1 = 1e_f.isFalse.isTrue.hc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i.succAbove (ฯsฮ.fstFieldOfContract a) < iโข i.succAbove (ฯsฮ.sndFieldOfContract a) < i e_f.isFalse.isTrue.hc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i.succAbove (ฯsฮ.fstFieldOfContract a) < iโข i.succAbove (ฯsฮ.sndFieldOfContract a) < i]e_f.isFalse.isTrue.hc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i.succAbove (ฯsฮ.fstFieldOfContract a) < iโข i.succAbove (ฯsฮ.sndFieldOfContract a) < i
have h1 :i.succAbove (ฯsฮ.sndFieldOfContract a) โ i :=
Fin.succAbove_ne i (ฯsฮ.sndFieldOfContract a) e_f.isFalse.isTrue.hc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1โ:i.succAbove (ฯsฮ.fstFieldOfContract a) < ih1:i.succAbove (ฯsฮ.sndFieldOfContract a) โ iโข i.succAbove (ฯsฮ.sndFieldOfContract a) < i
omega All goals completed! ๐
ยท e_f.isFalse.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:ยฌi.succAbove (ฯsฮ.fstFieldOfContract a) < iโข 1 =
1 *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1 simp only [not_lt] at h1 e_f.isFalse.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)โข 1 =
1 *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1
rw [if_neg e_f.isFalse.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)โข 1 = 1 * 1e_f.isFalse.isFalse.hnc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)โข ยฌi.succAbove (ฯsฮ.sndFieldOfContract a) < i e_f.isFalse.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)โข 1 = 1 * 1e_f.isFalse.isFalse.hnc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)โข ยฌi.succAbove (ฯsฮ.sndFieldOfContract a) < i]e_f.isFalse.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)โข 1 = 1 * 1e_f.isFalse.isFalse.hnc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)โข ยฌi.succAbove (ฯsฮ.sndFieldOfContract a) < i
simp only [mul_one] e_f.isFalse.isFalse.hnc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)โข ยฌi.succAbove (ฯsฮ.sndFieldOfContract a) < i
have hn := fstFieldOfContract_lt_sndFieldOfContract ฯsฮ a e_f.isFalse.isFalse.hnc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)hn:ฯsฮ.fstFieldOfContract a < ฯsฮ.sndFieldOfContract aโข ยฌi.succAbove (ฯsฮ.sndFieldOfContract a) < i
have hx := (Fin.succAbove_lt_succAbove_iff (p := i)).mpr hn e_f.isFalse.isFalse.hnc ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succa:โฅโฯsฮh:i.succAbove (ฯsฮ.fstFieldOfContract a) < i โ i.succAbove (ฯsฮ.sndFieldOfContract a) โค ih1:i โค i.succAbove (ฯsฮ.fstFieldOfContract a)hn:ฯsฮ.fstFieldOfContract a < ฯsฮ.sndFieldOfContract ahx:i.succAbove (ฯsฮ.fstFieldOfContract a) < i.succAbove (ฯsฮ.sndFieldOfContract a)โข ยฌi.succAbove (ฯsฮ.sndFieldOfContract a) < i
omega All goals completed! ๐
lemma signInsertNone_eq_prod_prod (ฯ : ๐.FieldOp) (ฯs : List ๐.FieldOp)
(ฯsฮ : WickContraction ฯs.length) (i : Fin ฯs.length.succ) (hG : GradingCompliant ฯs ฯsฮ) :
ฯsฮ.signInsertNone ฯ ฯs i = โ (a : ฯsฮ.1), โ (x : a),
(if i.succAbove x < i then ๐ข(๐ |>โ ฯ, ๐ |>โ ฯs[x.1]) else 1) := by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข signInsertNone ฯ ฯs ฯsฮ i = โ a, โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
rw [signInsertNone_eq_mul_fst_snd ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ a,
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
โ a, โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ a,
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
โ a, โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ a,
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
โ a, โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
congr e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (fun a =>
(if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
fun a => โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
funext a e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:โฅโฯsฮโข ((if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
rw [prod_finset_eq_mul_fst_snd e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:โฅโฯsฮโข ((if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
(if i.succAbove โโจฯsฮ.fstFieldOfContract a, โฏโฉ < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โโจฯsฮ.fstFieldOfContract a, โฏโฉ])
else 1) *
if i.succAbove โโจฯsฮ.sndFieldOfContract a, โฏโฉ < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โโจฯsฮ.sndFieldOfContract a, โฏโฉ])
else 1 e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:โฅโฯsฮโข ((if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
(if i.succAbove โโจฯsฮ.fstFieldOfContract a, โฏโฉ < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โโจฯsฮ.fstFieldOfContract a, โฏโฉ])
else 1) *
if i.succAbove โโจฯsฮ.sndFieldOfContract a, โฏโฉ < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โโจฯsฮ.sndFieldOfContract a, โฏโฉ])
else 1]e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:โฅโฯsฮโข ((if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1) *
if i.succAbove (ฯsฮ.sndFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a])
else 1) =
(if i.succAbove โโจฯsฮ.fstFieldOfContract a, โฏโฉ < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โโจฯsฮ.fstFieldOfContract a, โฏโฉ])
else 1) *
if i.succAbove โโจฯsฮ.sndFieldOfContract a, โฏโฉ < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โโจฯsฮ.sndFieldOfContract a, โฏโฉ])
else 1
congr 1 e_f.e_a ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:โฅโฯsฮโข (if i.succAbove (ฯsฮ.fstFieldOfContract a) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) else 1) =
if i.succAbove โโจฯsฮ.fstFieldOfContract a, โฏโฉ < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โโจฯsฮ.fstFieldOfContract a, โฏโฉ])
else 1
congr 1 e_f.e_a.e_t ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:โฅโฯsฮโข (exchangeSign (๐|>โฯ)) (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) =
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โโจฯsฮ.fstFieldOfContract a, โฏโฉ])
congr 1 e_f.e_a.e_t.e_6 ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:โฅโฯsฮโข (๐|>โฯs[ฯsฮ.sndFieldOfContract a]) = ๐|>โฯs[โโจฯsฮ.fstFieldOfContract a, โฏโฉ]
simp only [Fin.getElem_fin] e_f.e_a.e_t.e_6 ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:โฅโฯsฮโข (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) = ๐|>โฯs[โ(ฯsฮ.fstFieldOfContract a)]
rw [hG a e_f.e_a.e_t.e_6 ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:โฅโฯsฮโข (๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)]) = ๐|>โฯs[โ(ฯsฮ.sndFieldOfContract a)] All goals completed! ๐] All goals completed! ๐
lemma signInsertNone_eq_prod_getDual?_Some (ฯ : ๐.FieldOp) (ฯs : List ๐.FieldOp)
(ฯsฮ : WickContraction ฯs.length) (i : Fin ฯs.length.succ) (hG : GradingCompliant ฯs ฯsฮ) :
ฯsฮ.signInsertNone ฯ ฯs i = โ (x : Fin ฯs.length),
if (ฯsฮ.getDual? x).isSome then
(if i.succAbove x < i then ๐ข(๐ |>โ ฯ, ๐ |>โ ฯs[x.1]) else 1)
else 1 := by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข signInsertNone ฯ ฯs ฯsฮ i =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1
rw [signInsertNone_eq_prod_prod ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ a, โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ a, โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ a, โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
trans โ (x : (a : ฯsฮ.1) ร a), (if i.succAbove x.2 < i then ๐ข(๐ |>โ ฯ, ๐ |>โ ฯs[x.2.1]) else 1) ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ a, โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1) =
โ x, if i.succAbove โx.snd < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx.snd]) else 1๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x, if i.succAbove โx.snd < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx.snd]) else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
ยท ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ a, โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1) =
โ x, if i.succAbove โx.snd < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx.snd]) else 1 rw [Finset.prod_sigma' ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x โ Finset.univ.sigma fun a => Finset.univ,
if i.succAbove โx.snd < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx.snd]) else 1) =
โ x, if i.succAbove โx.snd < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx.snd]) else 1 ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x โ Finset.univ.sigma fun a => Finset.univ,
if i.succAbove โx.snd < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx.snd]) else 1) =
โ x, if i.succAbove โx.snd < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx.snd]) else 1] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x โ Finset.univ.sigma fun a => Finset.univ,
if i.succAbove โx.snd < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx.snd]) else 1) =
โ x, if i.succAbove โx.snd < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx.snd]) else 1
rfl All goals completed! ๐
rw [โ ฯsฮ.sigmaContractedEquiv.symm.prod_comp ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ i_1,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd])
else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ i_1,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd])
else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ i_1,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd])
else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
let e2 : Fin ฯs.length โ {x // (ฯsฮ.getDual? x).isSome} โ {x // ยฌ (ฯsฮ.getDual? x).isSome} := by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symmโข (โ i_1,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd])
else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
exact (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symm ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symmโข (โ i_1,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd])
else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symmโข (โ i_1,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd])
else 1) =
โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1 else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
rw [โ e2.symm.prod_comp ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symmโข (โ i_1,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd])
else 1) =
โ i_1,
if (ฯsฮ.getDual? (e2.symm i_1)).isSome = true then
if i.succAbove (e2.symm i_1) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(e2.symm i_1)]) else 1
else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symmโข (โ i_1,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd])
else 1) =
โ i_1,
if (ฯsฮ.getDual? (e2.symm i_1)).isSome = true then
if i.succAbove (e2.symm i_1) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(e2.symm i_1)]) else 1
else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symmโข (โ i_1,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(ฯsฮ.sigmaContractedEquiv.symm i_1).snd])
else 1) =
โ i_1,
if (ฯsฮ.getDual? (e2.symm i_1)).isSome = true then
if i.succAbove (e2.symm i_1) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(e2.symm i_1)]) else 1
else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
simp only [Fin.getElem_fin, Fintype.prod_sum_type] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symmโข (โ x,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm x).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โโ(ฯsฮ.sigmaContractedEquiv.symm x).snd])
else 1) =
(โ aโ,
if (ฯsฮ.getDual? (e2.symm (Sum.inl aโ))).isSome = true then
if i.succAbove (e2.symm (Sum.inl aโ)) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(e2.symm (Sum.inl aโ))]) else 1
else 1) *
โ aโ,
if (ฯsฮ.getDual? (e2.symm (Sum.inr aโ))).isSome = true then
if i.succAbove (e2.symm (Sum.inr aโ)) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(e2.symm (Sum.inr aโ))]) else 1
else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
conv_rhs =>
rhs ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symm| โ aโ,
if (ฯsฮ.getDual? (e2.symm (Sum.inr aโ))).isSome = true then
if i.succAbove (e2.symm (Sum.inr aโ)) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(e2.symm (Sum.inr aโ))]) else 1
else 1
enter [2, a] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symma:{ x // ยฌ(ฯsฮ.getDual? x).isSome = true }| if (ฯsฮ.getDual? (e2.symm (Sum.inr a))).isSome = true then
if i.succAbove (e2.symm (Sum.inr a)) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(e2.symm (Sum.inr a))]) else 1
else 1
rw [if_neg (by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symma:{ x // ยฌ(ฯsฮ.getDual? x).isSome = true }โข ยฌ(ฯsฮ.getDual? (e2.symm (Sum.inr a))).isSome = true simpa [e2] using a.2 All goals completed! ๐)]
conv_rhs =>
lhs ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symm| โ aโ,
if (ฯsฮ.getDual? (e2.symm (Sum.inl aโ))).isSome = true then
if i.succAbove (e2.symm (Sum.inl aโ)) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(e2.symm (Sum.inl aโ))]) else 1
else 1
enter [2, a] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symma:{ x // (ฯsฮ.getDual? x).isSome = true }| if (ฯsฮ.getDual? (e2.symm (Sum.inl a))).isSome = true then
if i.succAbove (e2.symm (Sum.inl a)) < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โ(e2.symm (Sum.inl a))]) else 1
else 1
rw [if_pos (by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symma:{ x // (ฯsฮ.getDual? x).isSome = true }โข (ฯsฮ.getDual? (e2.symm (Sum.inl a))).isSome = true simpa [e2] using a.2 All goals completed! ๐)]
simp only [Equiv.symm_symm, Equiv.sumCompl_apply_inl, Finset.prod_const_one, mul_one, e2] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮe2:Fin ฯs.length โ { x // (ฯsฮ.getDual? x).isSome = true } โ { x // ยฌ(ฯsฮ.getDual? x).isSome = true } := (Equiv.sumCompl fun a => (ฯsฮ.getDual? a).isSome = true).symmโข (โ x,
if i.succAbove โ(ฯsฮ.sigmaContractedEquiv.symm x).snd < i then
(exchangeSign (๐|>โฯ)) (๐|>โฯs[โโ(ฯsฮ.sigmaContractedEquiv.symm x).snd])
else 1) =
โ x, if i.succAbove โx < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โโx]) else 1hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
rfl hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
exact hG All goals completed! ๐
lemma signInsertNone_eq_filter_map (ฯ : ๐.FieldOp) (ฯs : List ๐.FieldOp)
(ฯsฮ : WickContraction ฯs.length) (i : Fin ฯs.length.succ) (hG : GradingCompliant ฯs ฯsฮ) :
ฯsฮ.signInsertNone ฯ ฯs i =
๐ข(๐ |>โ ฯ, ๐ |>โ ((List.filter (fun x => (ฯsฮ.getDual? x).isSome โง i.succAbove x < i)
(List.finRange ฯs.length)).map ฯs.get)) := by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข signInsertNone ฯ ฯs ฯsฮ i =
(exchangeSign (๐|>โฯ))
(ofList ๐.fieldOpStatistic
(List.map ฯs.get
(List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length))))
rw [signInsertNone_eq_prod_getDual?_Some ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
(exchangeSign (๐|>โฯ))
(ofList ๐.fieldOpStatistic
(List.map ฯs.get
(List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length))))hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
(exchangeSign (๐|>โฯ))
(ofList ๐.fieldOpStatistic
(List.map ฯs.get
(List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length))))hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
(exchangeSign (๐|>โฯ))
(ofList ๐.fieldOpStatistic
(List.map ฯs.get
(List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length))))hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
rw [FieldStatistic.ofList_map_eq_finset_prod ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
(exchangeSign (๐|>โฯ))
(โ i_1,
if
i_1 โ
List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i))
(List.finRange ฯs.length) then
๐|>โฯs[i_1]
else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
(exchangeSign (๐|>โฯ))
(โ i_1,
if
i_1 โ
List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i))
(List.finRange ฯs.length) then
๐|>โฯs[i_1]
else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
(exchangeSign (๐|>โฯ))
(โ i_1,
if
i_1 โ
List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i))
(List.finRange ฯs.length) then
๐|>โฯs[i_1]
else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
rw [map_prod ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
โ x,
(exchangeSign (๐|>โฯ))
(if
x โ
List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i))
(List.finRange ฯs.length) then
๐|>โฯs[x]
else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
โ x,
(exchangeSign (๐|>โฯ))
(if
x โ
List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i))
(List.finRange ฯs.length) then
๐|>โฯs[x]
else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
โ x,
(exchangeSign (๐|>โฯ))
(if
x โ
List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i))
(List.finRange ฯs.length) then
๐|>โฯs[x]
else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
congr e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (fun x =>
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
fun x =>
(exchangeSign (๐|>โฯ))
(if
x โ
List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i))
(List.finRange ฯs.length) then
๐|>โฯs[x]
else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
funext a e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthโข (if (ฯsฮ.getDual? a).isSome = true then if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1 else 1) =
(exchangeSign (๐|>โฯ))
(if
a โ
List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i))
(List.finRange ฯs.length) then
๐|>โฯs[a]
else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
simp only [Bool.decide_and, Bool.decide_eq_true, List.mem_filter,
List.mem_finRange, Bool.and_eq_true, decide_eq_true_eq, true_and, Fin.getElem_fin] e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthโข (if (ฯsฮ.getDual? a).isSome = true then if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1 else 1) =
(exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
split e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthhโ:(ฯsฮ.getDual? a).isSome = trueโข (if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1) =
(exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthhโ:ยฌ(ฯsฮ.getDual? a).isSome = trueโข 1 = (exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).NoduphG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
ยท e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthhโ:(ฯsฮ.getDual? a).isSome = trueโข (if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1) =
(exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1) rename_i h e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = trueโข (if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1) =
(exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)
simp only [h, true_and] e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = trueโข (if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1) =
(exchangeSign (๐|>โฯ)) (if i.succAbove a < i then ๐|>โฯs[โa] else 1)
split e_f.isTrue.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = truehโ:i.succAbove a < iโข (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) = (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa])e_f.isTrue.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = truehโ:ยฌi.succAbove a < iโข 1 = (exchangeSign (๐|>โฯ)) 1
ยท e_f.isTrue.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = truehโ:i.succAbove a < iโข (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) = (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) rfl All goals completed! ๐
ยท e_f.isTrue.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = truehโ:ยฌi.succAbove a < iโข 1 = (exchangeSign (๐|>โฯ)) 1 simp only [map_one] All goals completed! ๐
ยท e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthhโ:ยฌ(ฯsฮ.getDual? a).isSome = trueโข 1 = (exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1) rename_i h e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:ยฌ(ฯsฮ.getDual? a).isSome = trueโข 1 = (exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)
simp [h] All goals completed! ๐
ยท hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.filter (fun x => decide ((ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i)) (List.finRange ฯs.length)).Nodup refine List.Nodup.filter _ ?_ hl ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (List.finRange ฯs.length).Nodup
exact List.nodup_finRange ฯs.length All goals completed! ๐
ยท hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ exact hG All goals completed! ๐The following signs for a grading compliant Wick contraction are equal:
The sign ฯsฮ.signInsertNone ฯ ฯs i which is given by the following: For each
contracted pair {a1, a2} in ฯsฮ if a1 < a2
such that i is within the range a1 < i < a2 we pick up a sign equal to ๐ข(ฯ, ฯs[a2]).
The sign got by moving ฯ through ฯโโฆฯแตขโโ and only picking up a sign when ฯแตข has a dual.
These are equal since: Both ignore uncontracted fields, and for a contracted pair {a1, a2}
with a1 < a2
if i < a1 < a2 then we don't pick up a sign from either ฯโโ or ฯโโ.
if a1 < i < a2 then we pick up a sign from ฯโโ cases which is equal to ๐ข(ฯ, ฯs[a2])
(since ฯsฮ is grading compliant).
if a1 < a2 < i then we pick up a sign from both ฯโโ and ฯโโ which cancel each other out.
lemma signInsertNone_eq_filterset (ฯ : ๐.FieldOp) (ฯs : List ๐.FieldOp)
(ฯsฮ : WickContraction ฯs.length) (i : Fin ฯs.length.succ) (hG : GradingCompliant ฯs ฯsฮ) :
ฯsฮ.signInsertNone ฯ ฯs i = ๐ข(๐ |>โ ฯ, ๐ |>โ โจฯs.get, Finset.univ.filter
(fun x => (ฯsฮ.getDual? x).isSome โง i.succAbove x < i)โฉ) := by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข signInsertNone ฯ ฯs ฯsฮ i =
(exchangeSign (๐|>โฯ)) (ofFinset ๐.fieldOpStatistic ฯs.get {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i})
rw [ofFinset_eq_prod, ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข signInsertNone ฯ ฯs ฯsฮ i =
(exchangeSign (๐|>โฯ))
(โ i_1, if i_1 โ {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i} then ๐|>โฯs[i_1] else 1) ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
โ x, (exchangeSign (๐|>โฯ)) (if x โ {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i} then ๐|>โฯs[x] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ signInsertNone_eq_prod_getDual?_Some, ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
(exchangeSign (๐|>โฯ))
(โ i_1, if i_1 โ {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i} then ๐|>โฯs[i_1] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
โ x, (exchangeSign (๐|>โฯ)) (if x โ {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i} then ๐|>โฯs[x] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ map_prod ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
โ x, (exchangeSign (๐|>โฯ)) (if x โ {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i} then ๐|>โฯs[x] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
โ x, (exchangeSign (๐|>โฯ)) (if x โ {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i} then ๐|>โฯs[x] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (โ x,
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
โ x, (exchangeSign (๐|>โฯ)) (if x โ {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i} then ๐|>โฯs[x] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
congr e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (fun x =>
if (ฯsฮ.getDual? x).isSome = true then if i.succAbove x < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โx]) else 1
else 1) =
fun x =>
(exchangeSign (๐|>โฯ)) (if x โ {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i} then ๐|>โฯs[x] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
funext a e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthโข (if (ฯsฮ.getDual? a).isSome = true then if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1 else 1) =
(exchangeSign (๐|>โฯ)) (if a โ {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i} then ๐|>โฯs[a] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
simp only [Finset.mem_filter, Finset.mem_univ, true_and, Fin.getElem_fin] e_f ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthโข (if (ฯsฮ.getDual? a).isSome = true then if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1 else 1) =
(exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
split e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthhโ:(ฯsฮ.getDual? a).isSome = trueโข (if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1) =
(exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthhโ:ยฌ(ฯsฮ.getDual? a).isSome = trueโข 1 = (exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
ยท e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthhโ:(ฯsฮ.getDual? a).isSome = trueโข (if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1) =
(exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1) rename_i h e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = trueโข (if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1) =
(exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)
simp only [h, true_and] e_f.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = trueโข (if i.succAbove a < i then (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) else 1) =
(exchangeSign (๐|>โฯ)) (if i.succAbove a < i then ๐|>โฯs[โa] else 1)
split e_f.isTrue.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = truehโ:i.succAbove a < iโข (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) = (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa])e_f.isTrue.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = truehโ:ยฌi.succAbove a < iโข 1 = (exchangeSign (๐|>โฯ)) 1
ยท e_f.isTrue.isTrue ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = truehโ:i.succAbove a < iโข (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) = (exchangeSign (๐|>โฯ)) (๐|>โฯs[โa]) rfl All goals completed! ๐
ยท e_f.isTrue.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:(ฯsฮ.getDual? a).isSome = truehโ:ยฌi.succAbove a < iโข 1 = (exchangeSign (๐|>โฯ)) 1 simp only [map_one] All goals completed! ๐
ยท e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthhโ:ยฌ(ฯsฮ.getDual? a).isSome = trueโข 1 = (exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1) rename_i h e_f.isFalse ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮa:Fin ฯs.lengthh:ยฌ(ฯsฮ.getDual? a).isSome = trueโข 1 = (exchangeSign (๐|>โฯ)) (if (ฯsฮ.getDual? a).isSome = true โง i.succAbove a < i then ๐|>โฯs[โa] else 1)
simp [h] All goals completed! ๐
ยท hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ exact hG All goals completed! ๐
For a list ฯs = ฯโโฆฯโ of ๐.FieldOp, a graded compliant Wick contraction ฯsฮ of ฯs,
an i โค ฯs.length, and a ฯ in ๐.FieldOp, then
(ฯsฮ โฉฮ ฯ i none).sign = s * ฯsฮ.sign
where s is the sign arrived at by moving ฯ through the elements of ฯโโฆฯแตขโโ which
are contracted with some element.
The proof of this result involves a careful consideration of the contributions of different
FieldOps in ฯs to the sign of ฯsฮ โฉฮ ฯ i none.
lemma sign_insert_none (ฯ : ๐.FieldOp) (ฯs : List ๐.FieldOp)
(ฯsฮ : WickContraction ฯs.length) (i : Fin ฯs.length.succ) (hG : GradingCompliant ฯs ฯsฮ) :
(ฯsฮ โฉฮ ฯ i none).sign = ๐ข(๐ |>โ ฯ, ๐ |>โ โจฯs.get, Finset.univ.filter
(fun x => (ฯsฮ.getDual? x).isSome โง i.succAbove x < i)โฉ) * ฯsฮ.sign := by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข sign (ฯs.insertIdx (โi) ฯ) (ฯsฮโฉฮฯ i none) =
(exchangeSign (๐|>โฯ)) (ofFinset ๐.fieldOpStatistic ฯs.get {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i}) *
sign ฯs ฯsฮ
rw [sign_insert_none_eq_signInsertNone_mul_sign ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข signInsertNone ฯ ฯs ฯsฮ i * sign ฯs ฯsฮ =
(exchangeSign (๐|>โฯ)) (ofFinset ๐.fieldOpStatistic ฯs.get {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i}) *
sign ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข signInsertNone ฯ ฯs ฯsฮ i * sign ฯs ฯsฮ =
(exchangeSign (๐|>โฯ)) (ofFinset ๐.fieldOpStatistic ฯs.get {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i}) *
sign ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข signInsertNone ฯ ฯs ฯsฮ i * sign ฯs ฯsฮ =
(exchangeSign (๐|>โฯ)) (ofFinset ๐.fieldOpStatistic ฯs.get {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i}) *
sign ฯs ฯsฮ
rw [signInsertNone_eq_filterset ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข (exchangeSign (๐|>โฯ)) (ofFinset ๐.fieldOpStatistic ฯs.get {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i}) *
sign ฯs ฯsฮ =
(exchangeSign (๐|>โฯ)) (ofFinset ๐.fieldOpStatistic ฯs.get {x | (ฯsฮ.getDual? x).isSome = true โง i.succAbove x < i}) *
sign ฯs ฯsฮhG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ]hG ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthi:Fin ฯs.length.succhG:GradingCompliant ฯs ฯsฮโข GradingCompliant ฯs ฯsฮ
exact hG All goals completed! ๐
For a list ฯs = ฯโโฆฯโ of ๐.FieldOp, a graded compliant Wick contraction ฯsฮ of ฯs,
and a ฯ in ๐.FieldOp, then (ฯsฮ โฉฮ ฯ 0 none).sign = ฯsฮ.sign.
This is a direct corollary of sign_insert_none.
lemma sign_insert_none_zero (ฯ : ๐.FieldOp) (ฯs : List ๐.FieldOp)
(ฯsฮ : WickContraction ฯs.length) : (ฯsฮ โฉฮ ฯ 0 none).sign = ฯsฮ.sign := by ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthโข sign (ฯs.insertIdx (โ0) ฯ) (ฯsฮโฉฮฯ 0none) = sign ฯs ฯsฮ
rw [sign_insert_none_eq_signInsertNone_mul_sign ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthโข signInsertNone ฯ ฯs ฯsฮ 0 * sign ฯs ฯsฮ = sign ฯs ฯsฮ ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthโข signInsertNone ฯ ฯs ฯsฮ 0 * sign ฯs ฯsฮ = sign ฯs ฯsฮ] ๐:FieldSpecificationฯ:๐.FieldOpฯs:List ๐.FieldOpฯsฮ:WickContraction ฯs.lengthโข signInsertNone ฯ ฯs ฯsฮ 0 * sign ฯs ฯsฮ = sign ฯs ฯsฮ
simp [signInsertNone] All goals completed! ๐