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.FieldSpecification.Filters
public import Physlib.QFT.PerturbationTheory.Koszul.KoszulSign
import all Mathlib.Data.List.SortNormal Ordering of states
@[expose] public section
For a field specification 𝓕, 𝓕.normalOrderRel is a relation on 𝓕.CrAnFieldOp
representing normal ordering. It is defined such that 𝓕.normalOrderRel φ₀ φ₁
is true if one of the following is true
φ₀ is a field creation operator
φ₁ is a field annihilation operator.
Thus, colloquially 𝓕.normalOrderRel φ₀ φ₁ says the creation operators are less than
annihilation operators.
def normalOrderRel : 𝓕.CrAnFieldOp → 𝓕.CrAnFieldOp → Prop :=
fun a b => CreateAnnihilate.normalOrder (𝓕 |>ᶜ a) (𝓕 |>ᶜ b)Normal ordering is total.
instance : Std.Total 𝓕.normalOrderRel where
total _ _ := total_of CreateAnnihilate.normalOrder _ _Normal ordering is transitive.
instance : IsTrans 𝓕.CrAnFieldOp 𝓕.normalOrderRel where
trans _ _ _ := fun h h' => IsTrans.trans (α := CreateAnnihilate) _ _ _ h h'A decidable instance on the normal ordering relation.
instance (φ φ' : 𝓕.CrAnFieldOp) : Decidable (normalOrderRel φ φ') :=
CreateAnnihilate.instDecidableNormalOrder (𝓕 |>ᶜ φ) (𝓕 |>ᶜ φ')Normal order sign.
For a field specification 𝓕, and a list φs of 𝓕.CrAnFieldOp, 𝓕.normalOrderSign φs is the
sign corresponding to the number of fermionic-fermionic exchanges undertaken to normal-order
φs using the insertion sort algorithm.
def normalOrderSign (φs : List 𝓕.CrAnFieldOp) : ℂ :=
Wick.koszulSign 𝓕.crAnStatistics 𝓕.normalOrderRel φs@[simp]
lemma normalOrderSign_mul_self (φs : List 𝓕.CrAnFieldOp) :
normalOrderSign φs * normalOrderSign φs = 1 := 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign φs * normalOrderSign φs = 1
All goals completed! 🐙hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ CreateAnnihilate.create.normalOrder (𝓕|>ᶜφ')
dsimp [CreateAnnihilate.normalOrder] All goals completed! 🐙lemma normalOrderSign_cons_create (φ : 𝓕.CrAnFieldOp)
(hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.create) (φs : List 𝓕.CrAnFieldOp) :
normalOrderSign (φ :: φs) = normalOrderSign φs := by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φ :: φs) = normalOrderSign φs
simp [normalOrderSign, Wick.koszulSign, koszulSignInsert_create φ hφ φs] All goals completed! 🐙@[simp]
lemma normalOrderSign_singleton (φ : 𝓕.CrAnFieldOp) : normalOrderSign [φ] = 1 := by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOp⊢ normalOrderSign [φ] = 1
simp [normalOrderSign] All goals completed! 🐙@[simp]
lemma normalOrderSign_nil : normalOrderSign (𝓕 := 𝓕) [] = 1 := rfl
lemma koszulSignInsert_append_annihilate (φ' φ : 𝓕.CrAnFieldOp)
(hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate) :
(φs : List 𝓕.CrAnFieldOp) →
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φs ++ [φ]) =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs
| [] => 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' ([] ++ [φ]) =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' [] by 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' ([] ++ [φ]) =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' []
simp only [List.nil_append, Wick.koszulSignInsert, normalOrderRel, hφ, ite_eq_left_iff,
CreateAnnihilate.not_normalOrder_annihilate_iff_false, ite_eq_right_iff, and_imp,
IsEmpty.forall_iff] All goals completed! 🐙
| φ'' :: φs => 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φ'' :: φs ++ [φ]) =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φ'' :: φs) by 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φ'' :: φs ++ [φ]) =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φ'' :: φs)
dsimp only [List.cons_append, Wick.koszulSignInsert] 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ (if normalOrderRel φ' φ'' then Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φs ++ [φ])
else
if 𝓕.crAnStatistics φ' = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φ'' = FieldStatistic.fermionic then
-Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φs ++ [φ])
else Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φs ++ [φ])) =
if normalOrderRel φ' φ'' then Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs
else
if 𝓕.crAnStatistics φ' = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φ'' = FieldStatistic.fermionic then
-Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs
else Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs
rw [koszulSignInsert_append_annihilate φ' φ hφ φs 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ (if normalOrderRel φ' φ'' then Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs
else
if 𝓕.crAnStatistics φ' = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φ'' = FieldStatistic.fermionic then
-Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs
else Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs) =
if normalOrderRel φ' φ'' then Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs
else
if 𝓕.crAnStatistics φ' = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φ'' = FieldStatistic.fermionic then
-Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs
else Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs All goals completed! 🐙] All goals completed! 🐙
lemma normalOrderSign_append_annihilate (φ : 𝓕.CrAnFieldOp)
(hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate) :
(φs : List 𝓕.CrAnFieldOp) →
normalOrderSign (φs ++ [φ]) = normalOrderSign φs
| [] => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ normalOrderSign ([] ++ [φ]) = normalOrderSign [] by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ normalOrderSign ([] ++ [φ]) = normalOrderSign [] simp All goals completed! 🐙
| φ' :: φs => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φ' :: φs ++ [φ]) = normalOrderSign (φ' :: φs) by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φ' :: φs ++ [φ]) = normalOrderSign (φ' :: φs)
dsimp only [List.cons_append, normalOrderSign, Wick.koszulSign] 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φs ++ [φ]) *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ [φ]) =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs * Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs
have hi := normalOrderSign_append_annihilate φ hφ φs 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:normalOrderSign (φs ++ [φ]) = normalOrderSign φs⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φs ++ [φ]) *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ [φ]) =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs * Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs
dsimp only [normalOrderSign] at hi 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ [φ]) = Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φs ++ [φ]) *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ [φ]) =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs * Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs
rw [hi, 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ [φ]) = Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' (φs ++ [φ]) *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs * Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs All goals completed! 🐙 koszulSignInsert_append_annihilate φ' φ hφ φs 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ [φ]) = Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs * Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ' φs * Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs All goals completed! 🐙] All goals completed! 🐙
lemma koszulSignInsert_annihilate_cons_create (φc φa : 𝓕.CrAnFieldOp)
(hφc : 𝓕 |>ᶜ φc = CreateAnnihilate.create)
(hφa : 𝓕 |>ᶜ φa = CreateAnnihilate.annihilate)
(φs : List 𝓕.CrAnFieldOp) :
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φc :: φs)
= FieldStatistic.exchangeSign (𝓕.crAnStatistics φc) (𝓕.crAnStatistics φa) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs := by 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φc :: φs) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs
rw [Wick.koszulSignInsert_cons 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φc *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φc *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φc *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs
simp only [mul_eq_mul_right_iff] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φc =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) ∨
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs = 0
apply Or.inl 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φc =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa)
rw [Wick.koszulSignCons, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ (if normalOrderRel φa φc then 1
else
if 𝓕.crAnStatistics φa = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φc = FieldStatistic.fermionic then -1 else 1) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬normalOrderRel φa φc if_neg, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ (if 𝓕.crAnStatistics φa = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φc = FieldStatistic.fermionic then -1 else 1) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa)hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬normalOrderRel φa φchnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬normalOrderRel φa φc FieldStatistic.exchangeSign_symm, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ (if 𝓕.crAnStatistics φa = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φc = FieldStatistic.fermionic then -1 else 1) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φa)) (𝓕.crAnStatistics φc)hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬normalOrderRel φa φchnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬normalOrderRel φa φc
FieldStatistic.exchangeSign_eq_if 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ (if 𝓕.crAnStatistics φa = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φc = FieldStatistic.fermionic then -1 else 1) =
if 𝓕.crAnStatistics φa = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φc = FieldStatistic.fermionic then -1 else 1hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬normalOrderRel φa φchnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬normalOrderRel φa φc]hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬normalOrderRel φa φc
rw [normalOrderRel, hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬(𝓕|>ᶜφa).normalOrder (𝓕|>ᶜφc) hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.create hφa, hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬CreateAnnihilate.annihilate.normalOrder (𝓕|>ᶜφc)hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.create hφc hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.createhnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.create]hnc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.create
simp [CreateAnnihilate.normalOrder] All goals completed! 🐙
lemma normalOrderSign_swap_create_annihilate_fst (φc φa : 𝓕.CrAnFieldOp)
(hφc : 𝓕 |>ᶜ φc = CreateAnnihilate.create)
(hφa : 𝓕 |>ᶜ φa = CreateAnnihilate.annihilate)
(φs : List 𝓕.CrAnFieldOp) :
normalOrderSign (φc :: φa :: φs) =
FieldStatistic.exchangeSign (𝓕.crAnStatistics φc) (𝓕.crAnStatistics φa) *
normalOrderSign (φa :: φc :: φs) := by 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φc :: φa :: φs) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) * normalOrderSign (φa :: φc :: φs)
rw [normalOrderSign_cons_create φc hφc (φa :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) * normalOrderSign (φa :: φc :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) * normalOrderSign (φa :: φc :: φs)] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) * normalOrderSign (φa :: φc :: φs)
conv_rhs =>
rw [normalOrderSign, Wick.koszulSign, ← normalOrderSign] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp| (FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φc :: φs) * normalOrderSign (φc :: φs))
rw [koszulSignInsert_annihilate_cons_create φc φa hφc hφa φs] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp| (FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
((FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
normalOrderSign (φc :: φs))
rw [← mul_assoc, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
((FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs) *
normalOrderSign (φc :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
1 * Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign (φc :: φs) ← mul_assoc, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
normalOrderSign (φc :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
1 * Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign (φc :: φs) FieldStatistic.exchangeSign_mul_self 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
1 * Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign (φc :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
1 * Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign (φc :: φs)] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) =
1 * Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign (φc :: φs)
rw [one_mul, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) = Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign (φc :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) = Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign φs normalOrderSign_cons_create φc hφc φs 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) = Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign φs 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) = Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign φs] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φs) = Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * normalOrderSign φs
rfl All goals completed! 🐙lemma koszulSignInsert_swap (φ φc φa : 𝓕.CrAnFieldOp) (φs φs' : List 𝓕.CrAnFieldOp) :
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φc :: φs')
= Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') :=
Wick.koszulSignInsert_eq_perm _ _ _ _ _ (List.Perm.append_left φs (List.Perm.swap φc φa φs'))
lemma normalOrderSign_swap_create_annihilate (φc φa : 𝓕.CrAnFieldOp)
(hφc : 𝓕 |>ᶜ φc = CreateAnnihilate.create) (hφa : 𝓕 |>ᶜ φa = CreateAnnihilate.annihilate) :
(φs φs' : List 𝓕.CrAnFieldOp) → normalOrderSign (φs ++ φc :: φa :: φs') =
FieldStatistic.exchangeSign (𝓕.crAnStatistics φc) (𝓕.crAnStatistics φa) *
normalOrderSign (φs ++ φa :: φc :: φs')
| [], φs' => normalOrderSign_swap_create_annihilate_fst φc φa hφc hφa φs'
| φ :: φs, φs' => 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign (φ :: φs ++ φc :: φa :: φs') =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: φs ++ φa :: φc :: φs') by 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign (φ :: φs ++ φc :: φa :: φs') =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: φs ++ φa :: φc :: φs')
rw [normalOrderSign 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φ :: φs ++ φc :: φa :: φs') =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: φs ++ φa :: φc :: φs') 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φ :: φs ++ φc :: φa :: φs') =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: φs ++ φa :: φc :: φs')] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φ :: φs ++ φc :: φa :: φs') =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: φs ++ φa :: φc :: φs')
dsimp only [List.cons_append, Wick.koszulSign, FieldStatistic.instCommGroup.eq_1] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ φc :: φa :: φs') =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs'))
rw [← normalOrderSign, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
normalOrderSign (φs ++ φc :: φa :: φs') =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs')) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
((FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φs ++ φa :: φc :: φs')) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs')) normalOrderSign_swap_create_annihilate φc φa hφc hφa φs φs' 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
((FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φs ++ φa :: φc :: φs')) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs')) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
((FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φs ++ φa :: φc :: φs')) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs'))] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
((FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φs ++ φa :: φc :: φs')) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs'))
rw [← mul_assoc, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φs ++ φa :: φc :: φs') =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs')) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ (FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
normalOrderSign (φs ++ φa :: φc :: φs')) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs')) mul_comm _ (FieldStatistic.exchangeSign _ _), 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ (FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
normalOrderSign (φs ++ φa :: φc :: φs') =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs')) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ (FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
normalOrderSign (φs ++ φa :: φc :: φs')) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs')) mul_assoc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ (FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
normalOrderSign (φs ++ φa :: φc :: φs')) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs')) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ (FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
normalOrderSign (φs ++ φa :: φc :: φs')) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs'))] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ (FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
normalOrderSign (φs ++ φa :: φc :: φs')) =
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) *
normalOrderSign (φ :: (φs ++ φa :: φc :: φs'))
simp only [mul_eq_mul_left_iff] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
normalOrderSign (φs ++ φa :: φc :: φs') =
normalOrderSign (φ :: (φs ++ φa :: φc :: φs')) ∨
(FieldStatistic.exchangeSign (𝓕.crAnStatistics φc)) (𝓕.crAnStatistics φa) = 0
apply Or.inl 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') *
normalOrderSign (φs ++ φa :: φc :: φs') =
normalOrderSign (φ :: (φs ++ φa :: φc :: φs'))
conv_rhs => rw [normalOrderSign, Wick.koszulSign, ← normalOrderSign] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp| Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φc :: φs') *
normalOrderSign (φs ++ φa :: φc :: φs')
simp only [mul_eq_mul_right_iff] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φc :: φs') ∨
normalOrderSign (φs ++ φa :: φc :: φs') = 0
left 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φa :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φc :: φs')
rw [koszulSignInsert_swap 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φc :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φc :: φs') All goals completed! 🐙] All goals completed! 🐙
lemma normalOrderSign_swap_create_create_fst (φc φc' : 𝓕.CrAnFieldOp)
(hφc : 𝓕 |>ᶜ φc = CreateAnnihilate.create) (hφc' : 𝓕 |>ᶜ φc' = CreateAnnihilate.create)
(φs : List 𝓕.CrAnFieldOp) :
normalOrderSign (φc :: φc' :: φs) = normalOrderSign (φc' :: φc :: φs) := by 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φc :: φc' :: φs) = normalOrderSign (φc' :: φc :: φs)
rw [normalOrderSign_cons_create φc hφc, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φc' :: φs) = normalOrderSign (φc' :: φc :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign φs = normalOrderSign (φc' :: φc :: φs) normalOrderSign_cons_create φc' hφc' 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign φs = normalOrderSign (φc' :: φc :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign φs = normalOrderSign (φc' :: φc :: φs)] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign φs = normalOrderSign (φc' :: φc :: φs)
rw [normalOrderSign_cons_create φc' hφc', 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign φs = normalOrderSign (φc :: φs) All goals completed! 🐙 normalOrderSign_cons_create φc hφc 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign φs = normalOrderSign φs All goals completed! 🐙] All goals completed! 🐙
lemma normalOrderSign_swap_create_create (φc φc' : 𝓕.CrAnFieldOp)
(hφc : 𝓕 |>ᶜ φc = CreateAnnihilate.create) (hφc' : 𝓕 |>ᶜ φc' = CreateAnnihilate.create) :
(φs φs' : List 𝓕.CrAnFieldOp) →
normalOrderSign (φs ++ φc :: φc' :: φs') = normalOrderSign (φs ++ φc' :: φc :: φs')
| [], φs' => 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign ([] ++ φc :: φc' :: φs') = normalOrderSign ([] ++ φc' :: φc :: φs') by 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign ([] ++ φc :: φc' :: φs') = normalOrderSign ([] ++ φc' :: φc :: φs')
exact normalOrderSign_swap_create_create_fst φc φc' hφc hφc' φs' All goals completed! 🐙
| φ :: φs, φs' => 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign (φ :: φs ++ φc :: φc' :: φs') = normalOrderSign (φ :: φs ++ φc' :: φc :: φs') by 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign (φ :: φs ++ φc :: φc' :: φs') = normalOrderSign (φ :: φs ++ φc' :: φc :: φs')
rw [normalOrderSign 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φ :: φs ++ φc :: φc' :: φs') =
normalOrderSign (φ :: φs ++ φc' :: φc :: φs') 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φ :: φs ++ φc :: φc' :: φs') =
normalOrderSign (φ :: φs ++ φc' :: φc :: φs')] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φ :: φs ++ φc :: φc' :: φs') =
normalOrderSign (φ :: φs ++ φc' :: φc :: φs')
dsimp only [List.cons_append, Wick.koszulSign] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ φc :: φc' :: φs') =
normalOrderSign (φ :: (φs ++ φc' :: φc :: φs'))
rw [← normalOrderSign, 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
normalOrderSign (φs ++ φc :: φc' :: φs') =
normalOrderSign (φ :: (φs ++ φc' :: φc :: φs')) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs') =
normalOrderSign (φ :: (φs ++ φc' :: φc :: φs')) normalOrderSign_swap_create_create φc φc' hφc hφc' 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs') =
normalOrderSign (φ :: (φs ++ φc' :: φc :: φs')) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs') =
normalOrderSign (φ :: (φs ++ φc' :: φc :: φs'))] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs') =
normalOrderSign (φ :: (φs ++ φc' :: φc :: φs'))
dsimp only [normalOrderSign, Wick.koszulSign] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ φc' :: φc :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc' :: φc :: φs') *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ φc' :: φc :: φs')
rw [← normalOrderSign 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc' :: φc :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs') 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc' :: φc :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs')] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc' :: φc :: φs') *
normalOrderSign (φs ++ φc' :: φc :: φs')
simp only [mul_eq_mul_right_iff] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc :: φc' :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φc' :: φc :: φs') ∨
normalOrderSign (φs ++ φc' :: φc :: φs') = 0
apply Or.inl (Wick.koszulSignInsert_eq_perm _ _ _ _ _ _) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφc':𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφc':𝓕|>ᶜφc' = CreateAnnihilate.createφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ (φs ++ φc :: φc' :: φs').Perm (φs ++ φc' :: φc :: φs')
exact List.Perm.append_left φs (List.Perm.swap φc' φc φs') All goals completed! 🐙
lemma normalOrderSign_swap_annihilate_annihilate_fst (φa φa' : 𝓕.CrAnFieldOp)
(hφa : 𝓕 |>ᶜ φa = CreateAnnihilate.annihilate)
(hφa' : 𝓕 |>ᶜ φa' = CreateAnnihilate.annihilate)
(φs : List 𝓕.CrAnFieldOp) :
normalOrderSign (φa :: φa' :: φs) =
normalOrderSign (φa' :: φa :: φs) := by 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderSign (φa :: φa' :: φs) = normalOrderSign (φa' :: φa :: φs)
rw [normalOrderSign, 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φa :: φa' :: φs) = normalOrderSign (φa' :: φa :: φs) 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φa :: φa' :: φs) =
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φa' :: φa :: φs) normalOrderSign 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φa :: φa' :: φs) =
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φa' :: φa :: φs) 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φa :: φa' :: φs) =
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φa' :: φa :: φs)] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φa :: φa' :: φs) =
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φa' :: φa :: φs)
dsimp only [Wick.koszulSign] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φa' :: φs) *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs) =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' (φa :: φs) *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs)
rw [← mul_assoc, 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φa' :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' (φa :: φs) *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs * Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs) 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φa' :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' (φa :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs ← mul_assoc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φa' :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' (φa :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φa' :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' (φa :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φa' :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' (φa :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs
congr 1 e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa (φa' :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' (φa :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs
rw [Wick.koszulSignInsert_cons, e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' (φa :: φs) *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs) =
Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φa *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs) Wick.koszulSignInsert_cons, e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs =
Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φa *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φse_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs) =
Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φa *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs) mul_assoc, e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs) =
Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φa *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φse_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs) =
Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φa *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs) mul_assoc e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs) =
Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φa *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs)e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs) =
Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φa *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs)]e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs) =
Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φa *
(Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs)
congr 1 e_a.e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' = Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φae_a.e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs
· e_a.e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa φa' = Wick.koszulSignCons 𝓕.crAnStatistics normalOrderRel φa' φa dsimp only [Wick.koszulSignCons] e_a.e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ (if normalOrderRel φa φa' then 1
else
if 𝓕.crAnStatistics φa = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φa' = FieldStatistic.fermionic then -1
else 1) =
if normalOrderRel φa' φa then 1
else
if 𝓕.crAnStatistics φa' = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φa = FieldStatistic.fermionic then -1 else 1
rw [if_pos, e_a.e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ 1 =
if normalOrderRel φa' φa then 1
else
if 𝓕.crAnStatistics φa' = FieldStatistic.fermionic ∧ 𝓕.crAnStatistics φa = FieldStatistic.fermionic then -1 else 1e_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa φa' e_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa' φae_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa φa' if_pos e_a.e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ 1 = 1e_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa' φae_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa φa'e_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa' φae_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa φa']e_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa' φae_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa φa'
· e_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa' φa simp [normalOrderRel, hφa, hφa', CreateAnnihilate.normalOrder] All goals completed! 🐙
· e_a.e_a.hc 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φa φa' simp [normalOrderRel, hφa, hφa', CreateAnnihilate.normalOrder] All goals completed! 🐙
· e_a.e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs rw [NonUnitalNormedCommRing.mul_comm e_a.e_a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa' φs *
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φa φs All goals completed! 🐙] All goals completed! 🐙
lemma normalOrderSign_swap_annihilate_annihilate (φa φa' : 𝓕.CrAnFieldOp)
(hφa : 𝓕 |>ᶜ φa = CreateAnnihilate.annihilate)
(hφa' : 𝓕 |>ᶜ φa' = CreateAnnihilate.annihilate) : (φs φs' : List 𝓕.CrAnFieldOp) →
normalOrderSign (φs ++ φa :: φa' :: φs') = normalOrderSign (φs ++ φa' :: φa :: φs')
| [], φs' => 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign ([] ++ φa :: φa' :: φs') = normalOrderSign ([] ++ φa' :: φa :: φs') by 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign ([] ++ φa :: φa' :: φs') = normalOrderSign ([] ++ φa' :: φa :: φs')
exact normalOrderSign_swap_annihilate_annihilate_fst φa φa' hφa hφa' φs' All goals completed! 🐙
| φ :: φs, φs' => 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign (φ :: φs ++ φa :: φa' :: φs') = normalOrderSign (φ :: φs ++ φa' :: φa :: φs') by 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ normalOrderSign (φ :: φs ++ φa :: φa' :: φs') = normalOrderSign (φ :: φs ++ φa' :: φa :: φs')
rw [normalOrderSign 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φ :: φs ++ φa :: φa' :: φs') =
normalOrderSign (φ :: φs ++ φa' :: φa :: φs') 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φ :: φs ++ φa :: φa' :: φs') =
normalOrderSign (φ :: φs ++ φa' :: φa :: φs')] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φ :: φs ++ φa :: φa' :: φs') =
normalOrderSign (φ :: φs ++ φa' :: φa :: φs')
dsimp only [List.cons_append, Wick.koszulSign] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ φa :: φa' :: φs') =
normalOrderSign (φ :: (φs ++ φa' :: φa :: φs'))
rw [← normalOrderSign 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
normalOrderSign (φs ++ φa :: φa' :: φs') =
normalOrderSign (φ :: (φs ++ φa' :: φa :: φs')) 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
normalOrderSign (φs ++ φa :: φa' :: φs') =
normalOrderSign (φ :: (φs ++ φa' :: φa :: φs'))] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
normalOrderSign (φs ++ φa :: φa' :: φs') =
normalOrderSign (φ :: (φs ++ φa' :: φa :: φs'))
rw [normalOrderSign_swap_annihilate_annihilate φa φa' hφa hφa' 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
normalOrderSign (φs ++ φa' :: φa :: φs') =
normalOrderSign (φ :: (φs ++ φa' :: φa :: φs')) 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
normalOrderSign (φs ++ φa' :: φa :: φs') =
normalOrderSign (φ :: (φs ++ φa' :: φa :: φs'))] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
normalOrderSign (φs ++ φa' :: φa :: φs') =
normalOrderSign (φ :: (φs ++ φa' :: φa :: φs'))
dsimp only [normalOrderSign, Wick.koszulSign] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ φa' :: φa :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa' :: φa :: φs') *
Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs ++ φa' :: φa :: φs')
rw [← normalOrderSign 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
normalOrderSign (φs ++ φa' :: φa :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa' :: φa :: φs') *
normalOrderSign (φs ++ φa' :: φa :: φs') 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
normalOrderSign (φs ++ φa' :: φa :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa' :: φa :: φs') *
normalOrderSign (φs ++ φa' :: φa :: φs')] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') *
normalOrderSign (φs ++ φa' :: φa :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa' :: φa :: φs') *
normalOrderSign (φs ++ φa' :: φa :: φs')
simp only [mul_eq_mul_right_iff] 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa' :: φa :: φs') ∨
normalOrderSign (φs ++ φa' :: φa :: φs') = 0
apply Or.inl 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa :: φa' :: φs') =
Wick.koszulSignInsert 𝓕.crAnStatistics normalOrderRel φ (φs ++ φa' :: φa :: φs')
apply Wick.koszulSignInsert_eq_perm 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ (φs ++ φa :: φa' :: φs').Perm (φs ++ φa' :: φa :: φs')
refine List.Perm.append_left φs ?h.h.a h.h.a 𝓕:FieldSpecificationφa:𝓕.CrAnFieldOpφa':𝓕.CrAnFieldOphφa:𝓕|>ᶜφa = CreateAnnihilate.annihilatehφa':𝓕|>ᶜφa' = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ (φa :: φa' :: φs').Perm (φa' :: φa :: φs')
exact List.Perm.swap φa' φa φs' All goals completed! 🐙## Normal order of lists
For a field specification 𝓕, and a list φs of 𝓕.CrAnFieldOp,
𝓕.normalOrderList φs is the list φs normal-ordered using the
insertion sort algorithm. It puts creation operators on the left and annihilation operators on
the right. For example:
𝓕.normalOrderList [φ1c, φ1a, φ2c, φ2a] = [φ1c, φ2c, φ1a, φ2a]
def normalOrderList (φs : List 𝓕.CrAnFieldOp) : List 𝓕.CrAnFieldOp :=
List.insertionSort 𝓕.normalOrderRel φs@[simp]
lemma normalOrderList_nil : normalOrderList (𝓕 := 𝓕) [] = [] := by 𝓕:FieldSpecification⊢ normalOrderList [] = []
simp [normalOrderList] All goals completed! 🐙@[simp]
lemma normalOrderList_statistics (φs : List 𝓕.CrAnFieldOp) :
(𝓕 |>ₛ (normalOrderList φs)) = 𝓕 |>ₛ φs := by 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOp⊢ ofList 𝓕.crAnStatistics (normalOrderList φs) = ofList 𝓕.crAnStatistics φs
simp [normalOrderList] All goals completed! 🐙
lemma orderedInsert_create (φ : 𝓕.CrAnFieldOp)
(hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.create) :
(φs : List 𝓕.CrAnFieldOp) → List.orderedInsert normalOrderRel φ φs = φ :: φs
| [] => rfl
| φ' :: φs => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (φ' :: φs) = φ :: φ' :: φs by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (φ' :: φs) = φ :: φ' :: φs
simp only [List.orderedInsert.eq_2] 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ (if normalOrderRel φ φ' then φ :: φ' :: φs else φ' :: List.orderedInsert normalOrderRel φ φs) = φ :: φ' :: φs
rw [if_pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ φ :: φ' :: φs = φ :: φ' :: φshc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φ φ' hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φ φ'] hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderRel φ φ'
dsimp only [normalOrderRel] hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ (𝓕|>ᶜφ).normalOrder (𝓕|>ᶜφ')
rw [hφ hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ CreateAnnihilate.create.normalOrder (𝓕|>ᶜφ') hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ CreateAnnihilate.create.normalOrder (𝓕|>ᶜφ')]hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ CreateAnnihilate.create.normalOrder (𝓕|>ᶜφ')
dsimp [CreateAnnihilate.normalOrder] All goals completed! 🐙
lemma normalOrderList_cons_create (φ : 𝓕.CrAnFieldOp)
(hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.create) (φs : List 𝓕.CrAnFieldOp) :
normalOrderList (φ :: φs) = φ :: normalOrderList φs := by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ normalOrderList (φ :: φs) = φ :: normalOrderList φs
simp only [normalOrderList, List.insertionSort_cons] 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel φs) = φ :: List.insertionSort normalOrderRel φs
rw [orderedInsert_create φ hφ 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ φ :: List.insertionSort normalOrderRel φs = φ :: List.insertionSort normalOrderRel φs All goals completed! 🐙] All goals completed! 🐙
lemma orderedInsert_append_annihilate (φ' φ : 𝓕.CrAnFieldOp)
(hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate) :
(φs : List 𝓕.CrAnFieldOp) → List.orderedInsert normalOrderRel φ' (φs ++ [φ]) =
List.orderedInsert normalOrderRel φ' φs ++ [φ]
| [] => 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ' ([] ++ [φ]) = List.orderedInsert normalOrderRel φ' [] ++ [φ] by 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ' ([] ++ [φ]) = List.orderedInsert normalOrderRel φ' [] ++ [φ]
simp [normalOrderRel, hφ] All goals completed! 🐙
| φ'' :: φs => 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ' (φ'' :: φs ++ [φ]) = List.orderedInsert normalOrderRel φ' (φ'' :: φs) ++ [φ] by 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ' (φ'' :: φs ++ [φ]) = List.orderedInsert normalOrderRel φ' (φ'' :: φs) ++ [φ]
simp only [List.cons_append, List.orderedInsert.eq_2] 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ (if normalOrderRel φ' φ'' then φ' :: φ'' :: (φs ++ [φ]) else φ'' :: List.orderedInsert normalOrderRel φ' (φs ++ [φ])) =
(if normalOrderRel φ' φ'' then φ' :: φ'' :: φs else φ'' :: List.orderedInsert normalOrderRel φ' φs) ++ [φ]
have hi := orderedInsert_append_annihilate φ' φ hφ φs 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.orderedInsert normalOrderRel φ' (φs ++ [φ]) = List.orderedInsert normalOrderRel φ' φs ++ [φ]⊢ (if normalOrderRel φ' φ'' then φ' :: φ'' :: (φs ++ [φ]) else φ'' :: List.orderedInsert normalOrderRel φ' (φs ++ [φ])) =
(if normalOrderRel φ' φ'' then φ' :: φ'' :: φs else φ'' :: List.orderedInsert normalOrderRel φ' φs) ++ [φ]
rw [hi 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.orderedInsert normalOrderRel φ' (φs ++ [φ]) = List.orderedInsert normalOrderRel φ' φs ++ [φ]⊢ (if normalOrderRel φ' φ'' then φ' :: φ'' :: (φs ++ [φ]) else φ'' :: (List.orderedInsert normalOrderRel φ' φs ++ [φ])) =
(if normalOrderRel φ' φ'' then φ' :: φ'' :: φs else φ'' :: List.orderedInsert normalOrderRel φ' φs) ++ [φ] 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.orderedInsert normalOrderRel φ' (φs ++ [φ]) = List.orderedInsert normalOrderRel φ' φs ++ [φ]⊢ (if normalOrderRel φ' φ'' then φ' :: φ'' :: (φs ++ [φ]) else φ'' :: (List.orderedInsert normalOrderRel φ' φs ++ [φ])) =
(if normalOrderRel φ' φ'' then φ' :: φ'' :: φs else φ'' :: List.orderedInsert normalOrderRel φ' φs) ++ [φ]] 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.orderedInsert normalOrderRel φ' (φs ++ [φ]) = List.orderedInsert normalOrderRel φ' φs ++ [φ]⊢ (if normalOrderRel φ' φ'' then φ' :: φ'' :: (φs ++ [φ]) else φ'' :: (List.orderedInsert normalOrderRel φ' φs ++ [φ])) =
(if normalOrderRel φ' φ'' then φ' :: φ'' :: φs else φ'' :: List.orderedInsert normalOrderRel φ' φs) ++ [φ]
split isTrue 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.orderedInsert normalOrderRel φ' (φs ++ [φ]) = List.orderedInsert normalOrderRel φ' φs ++ [φ]h✝:normalOrderRel φ' φ''⊢ φ' :: φ'' :: (φs ++ [φ]) = φ' :: φ'' :: φs ++ [φ]isFalse 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.orderedInsert normalOrderRel φ' (φs ++ [φ]) = List.orderedInsert normalOrderRel φ' φs ++ [φ]h✝:¬normalOrderRel φ' φ''⊢ φ'' :: (List.orderedInsert normalOrderRel φ' φs ++ [φ]) = φ'' :: List.orderedInsert normalOrderRel φ' φs ++ [φ]
next h => 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.orderedInsert normalOrderRel φ' (φs ++ [φ]) = List.orderedInsert normalOrderRel φ' φs ++ [φ]h:normalOrderRel φ' φ''⊢ φ' :: φ'' :: (φs ++ [φ]) = φ' :: φ'' :: φs ++ [φ] simp_all only [List.cons_append] All goals completed! 🐙
next h => 𝓕:FieldSpecificationφ':𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ'':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.orderedInsert normalOrderRel φ' (φs ++ [φ]) = List.orderedInsert normalOrderRel φ' φs ++ [φ]h:¬normalOrderRel φ' φ''⊢ φ'' :: (List.orderedInsert normalOrderRel φ' φs ++ [φ]) = φ'' :: List.orderedInsert normalOrderRel φ' φs ++ [φ] simp_all only [List.cons_append] All goals completed! 🐙
lemma normalOrderList_append_annihilate (φ : 𝓕.CrAnFieldOp)
(hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate) :
(φs : List 𝓕.CrAnFieldOp) →
normalOrderList (φs ++ [φ]) = normalOrderList φs ++ [φ]
| [] => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ normalOrderList ([] ++ [φ]) = normalOrderList [] ++ [φ] by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ normalOrderList ([] ++ [φ]) = normalOrderList [] ++ [φ] simp [normalOrderList] All goals completed! 🐙
| φ' :: φs => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderList (φ' :: φs ++ [φ]) = normalOrderList (φ' :: φs) ++ [φ] by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderList (φ' :: φs ++ [φ]) = normalOrderList (φ' :: φs) ++ [φ]
simp only [normalOrderList, List.insertionSort_cons] 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ List.insertionSort normalOrderRel (φ' :: φs ++ [φ]) =
List.orderedInsert normalOrderRel φ' (List.insertionSort normalOrderRel φs) ++ [φ]
have hi := normalOrderList_append_annihilate φ hφ φs 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:normalOrderList (φs ++ [φ]) = normalOrderList φs ++ [φ]⊢ List.insertionSort normalOrderRel (φ' :: φs ++ [φ]) =
List.orderedInsert normalOrderRel φ' (List.insertionSort normalOrderRel φs) ++ [φ]
dsimp only [normalOrderList] at hi 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φs ++ [φ]) = List.insertionSort normalOrderRel φs ++ [φ]⊢ List.insertionSort normalOrderRel (φ' :: φs ++ [φ]) =
List.orderedInsert normalOrderRel φ' (List.insertionSort normalOrderRel φs) ++ [φ]
simp only [List.cons_append, List.insertionSort_cons] 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φs ++ [φ]) = List.insertionSort normalOrderRel φs ++ [φ]⊢ List.orderedInsert normalOrderRel φ' (List.insertionSort normalOrderRel (φs ++ [φ])) =
List.orderedInsert normalOrderRel φ' (List.insertionSort normalOrderRel φs) ++ [φ]
rw [hi, 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φs ++ [φ]) = List.insertionSort normalOrderRel φs ++ [φ]⊢ List.orderedInsert normalOrderRel φ' (List.insertionSort normalOrderRel φs ++ [φ]) =
List.orderedInsert normalOrderRel φ' (List.insertionSort normalOrderRel φs) ++ [φ] All goals completed! 🐙 orderedInsert_append_annihilate φ' φ hφ 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φs ++ [φ]) = List.insertionSort normalOrderRel φs ++ [φ]⊢ List.orderedInsert normalOrderRel φ' (List.insertionSort normalOrderRel φs) ++ [φ] =
List.orderedInsert normalOrderRel φ' (List.insertionSort normalOrderRel φs) ++ [φ] All goals completed! 🐙] All goals completed! 🐙
lemma normalOrder_swap_create_annihilate_fst (φc φa : 𝓕.CrAnFieldOp)
(hφc : 𝓕 |>ᶜ φc = CreateAnnihilate.create)
(hφa : 𝓕 |>ᶜ φa = CreateAnnihilate.annihilate)
(φs : List 𝓕.CrAnFieldOp) :
normalOrderList (φc :: φa :: φs) = normalOrderList (φa :: φc :: φs) := by 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ normalOrderList (φc :: φa :: φs) = normalOrderList (φa :: φc :: φs)
rw [normalOrderList_cons_create φc hφc (φa :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ φc :: normalOrderList (φa :: φs) = normalOrderList (φa :: φc :: φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ φc :: normalOrderList (φa :: φs) = normalOrderList (φa :: φc :: φs)] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ φc :: normalOrderList (φa :: φs) = normalOrderList (φa :: φc :: φs)
conv_rhs =>
rw [normalOrderList, List.insertionSort_cons] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp| List.orderedInsert normalOrderRel φa (List.insertionSort normalOrderRel (φc :: φs))
have hi := normalOrderList_cons_create φc hφc φs 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:normalOrderList (φc :: φs) = φc :: normalOrderList φs⊢ φc :: normalOrderList (φa :: φs) = List.orderedInsert normalOrderRel φa (List.insertionSort normalOrderRel (φc :: φs))
rw [normalOrderList 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φs⊢ φc :: normalOrderList (φa :: φs) = List.orderedInsert normalOrderRel φa (List.insertionSort normalOrderRel (φc :: φs)) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φs⊢ φc :: normalOrderList (φa :: φs) = List.orderedInsert normalOrderRel φa (List.insertionSort normalOrderRel (φc :: φs))] at hi 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φs⊢ φc :: normalOrderList (φa :: φs) = List.orderedInsert normalOrderRel φa (List.insertionSort normalOrderRel (φc :: φs))
rw [hi 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φs⊢ φc :: normalOrderList (φa :: φs) = List.orderedInsert normalOrderRel φa (φc :: normalOrderList φs) 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φs⊢ φc :: normalOrderList (φa :: φs) = List.orderedInsert normalOrderRel φa (φc :: normalOrderList φs)] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φs⊢ φc :: normalOrderList (φa :: φs) = List.orderedInsert normalOrderRel φa (φc :: normalOrderList φs)
simp only [List.orderedInsert.eq_2] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φs⊢ φc :: normalOrderList (φa :: φs) =
if normalOrderRel φa φc then φa :: φc :: normalOrderList φs
else φc :: List.orderedInsert normalOrderRel φa (normalOrderList φs)
split isTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh✝:normalOrderRel φa φc⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φsisFalse 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh✝:¬normalOrderRel φa φc⊢ φc :: normalOrderList (φa :: φs) = φc :: List.orderedInsert normalOrderRel φa (normalOrderList φs)
· isTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh✝:normalOrderRel φa φc⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φs rename_i h isTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh:normalOrderRel φa φc⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φs
rw [normalOrderRel, isTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh:(𝓕|>ᶜφa).normalOrder (𝓕|>ᶜφc)⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φs isTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh:CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.create⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φs hφa, isTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh:CreateAnnihilate.annihilate.normalOrder (𝓕|>ᶜφc)⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φsisTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh:CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.create⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φs hφc isTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh:CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.create⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φsisTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh:CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.create⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φs] at hisTrue 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh:CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.create⊢ φc :: normalOrderList (φa :: φs) = φa :: φc :: normalOrderList φs
dsimp [CreateAnnihilate.normalOrder] at h All goals completed! 🐙
· isFalse 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φc :: φs) = φc :: normalOrderList φsh✝:¬normalOrderRel φa φc⊢ φc :: normalOrderList (φa :: φs) = φc :: List.orderedInsert normalOrderRel φa (normalOrderList φs) rfl All goals completed! 🐙
lemma normalOrderList_swap_create_annihilate (φc φa : 𝓕.CrAnFieldOp)
(hφc : 𝓕 |>ᶜ φc = CreateAnnihilate.create)
(hφa : 𝓕 |>ᶜ φa = CreateAnnihilate.annihilate) :
(φs φs' : List 𝓕.CrAnFieldOp) →
normalOrderList (φs ++ φc :: φa :: φs') = normalOrderList (φs ++ φa :: φc :: φs')
| [], φs' => normalOrder_swap_create_annihilate_fst φc φa hφc hφa φs'
| φ :: φs, φs' => 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ normalOrderList (φ :: φs ++ φc :: φa :: φs') = normalOrderList (φ :: φs ++ φa :: φc :: φs') by 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ normalOrderList (φ :: φs ++ φc :: φa :: φs') = normalOrderList (φ :: φs ++ φa :: φc :: φs')
simp only [List.cons_append, normalOrderList, List.insertionSort_cons] 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel (φs ++ φc :: φa :: φs')) =
List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel (φs ++ φa :: φc :: φs'))
have hi := normalOrderList_swap_create_annihilate φc φa hφc hφa φs φs' 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphi:normalOrderList (φs ++ φc :: φa :: φs') = normalOrderList (φs ++ φa :: φc :: φs')⊢ List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel (φs ++ φc :: φa :: φs')) =
List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel (φs ++ φa :: φc :: φs'))
dsimp only [normalOrderList] at hi 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φs ++ φc :: φa :: φs') = List.insertionSort normalOrderRel (φs ++ φa :: φc :: φs')⊢ List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel (φs ++ φc :: φa :: φs')) =
List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel (φs ++ φa :: φc :: φs'))
rw [hi 𝓕:FieldSpecificationφc:𝓕.CrAnFieldOpφa:𝓕.CrAnFieldOphφc:𝓕|>ᶜφc = CreateAnnihilate.createhφa:𝓕|>ᶜφa = CreateAnnihilate.annihilateφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphi:List.insertionSort normalOrderRel (φs ++ φc :: φa :: φs') = List.insertionSort normalOrderRel (φs ++ φa :: φc :: φs')⊢ List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel (φs ++ φa :: φc :: φs')) =
List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel (φs ++ φa :: φc :: φs')) All goals completed! 🐙] All goals completed! 🐙
For a list of creation and annihilation states, the equivalence between
Fin φs.length and Fin (normalOrderList φs).length taking each position in φs
to it's corresponding position in the normal ordered list. This assumes that
we are using the insertion sort method.
For example:
For [φ1c, φ1a, φ2c, φ2a] this equivalence sends 0 ↦ 0, 1 ↦ 2, 2 ↦ 1, 3 ↦ 3.
def normalOrderEquiv {φs : List 𝓕.CrAnFieldOp} : Fin φs.length ≃ Fin (normalOrderList φs).length :=
Physlib.List.insertionSortEquiv 𝓕.normalOrderRel φslemma sum_normalOrderList_length {M : Type} [AddCommMonoid M]
(φs : List 𝓕.CrAnFieldOp) (f : Fin (normalOrderList φs).length → M) :
∑ (n : Fin (normalOrderList φs).length), f n = ∑ (n : Fin φs.length), f (normalOrderEquiv n) :=
Eq.symm (Equiv.sum_comp normalOrderEquiv f)set_option backward.isDefEq.respectTransparency false in
@[simp]
lemma normalOrderList_get_normalOrderEquiv {φs : List 𝓕.CrAnFieldOp} (n : Fin φs.length) :
(normalOrderList φs)[(normalOrderEquiv n).val] = φs[n.val] := by 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpn:Fin φs.length⊢ (normalOrderList φs)[↑(normalOrderEquiv n)] = φs[↑n]
change (normalOrderList φs).get (normalOrderEquiv n) = _ 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpn:Fin φs.length⊢ (normalOrderList φs).get (normalOrderEquiv n) = φs[↑n]
simp only [normalOrderList, normalOrderEquiv] 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpn:Fin φs.length⊢ (List.insertionSort normalOrderRel φs).get ((Physlib.List.insertionSortEquiv normalOrderRel φs) n) = φs[↑n]
erw [← Physlib.List.insertionSortEquiv_get 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpn:Fin φs.length⊢ (φs.get ∘ ⇑(Physlib.List.insertionSortEquiv normalOrderRel φs).symm)
((Physlib.List.insertionSortEquiv normalOrderRel φs) n) =
φs[↑n]] 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpn:Fin φs.length⊢ (φs.get ∘ ⇑(Physlib.List.insertionSortEquiv normalOrderRel φs).symm)
((Physlib.List.insertionSortEquiv normalOrderRel φs) n) =
φs[↑n]
simp All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
@[simp]
lemma normalOrderList_eraseIdx_normalOrderEquiv {φs : List 𝓕.CrAnFieldOp} (n : Fin φs.length) :
(normalOrderList φs).eraseIdx (normalOrderEquiv n).val =
normalOrderList (φs.eraseIdx n.val) := by 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpn:Fin φs.length⊢ (normalOrderList φs).eraseIdx ↑(normalOrderEquiv n) = normalOrderList (φs.eraseIdx ↑n)
simp only [normalOrderList, normalOrderEquiv] 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpn:Fin φs.length⊢ (List.insertionSort normalOrderRel φs).eraseIdx ↑((Physlib.List.insertionSortEquiv normalOrderRel φs) n) =
List.insertionSort normalOrderRel (φs.eraseIdx ↑n)
rw [Physlib.List.eraseIdx_insertionSort_fin 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpn:Fin φs.length⊢ List.insertionSort normalOrderRel (φs.eraseIdx ↑n) = List.insertionSort normalOrderRel (φs.eraseIdx ↑n) All goals completed! 🐙] All goals completed! 🐙
For a field specification 𝓕, a list φs = φ₀…φₙ of 𝓕.CrAnFieldOp and an i < φs.length,
then
normalOrderSign (φ₀…φᵢ₋₁φᵢ₊₁…φₙ) is equal to the product of
normalOrderSign φ₀…φₙ,
𝓢(φᵢ, φ₀…φᵢ₋₁) i.e. the sign needed to remove φᵢ from φ₀…φₙ,
𝓢(φᵢ, _) where _ is the list of elements appearing before φᵢ after normal ordering,
i.e.
the sign needed to insert φᵢ back into the normal-ordered list at the correct place.
lemma normalOrderSign_eraseIdx (φs : List 𝓕.CrAnFieldOp) (i : Fin φs.length) :
normalOrderSign (φs.eraseIdx i) = normalOrderSign φs *
𝓢(𝓕 |>ₛ (φs.get i), 𝓕 |>ₛ (φs.take i)) *
𝓢(𝓕 |>ₛ (φs.get i), 𝓕 |>ₛ ((normalOrderList φs).take (normalOrderEquiv i))) := by 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpi:Fin φs.length⊢ normalOrderSign (φs.eraseIdx ↑i) =
normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics (List.take (↑(normalOrderEquiv i)) (normalOrderList φs)))
rw [normalOrderSign, 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpi:Fin φs.length⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel (φs.eraseIdx ↑i) =
normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics (List.take (↑(normalOrderEquiv i)) (normalOrderList φs))) 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpi:Fin φs.length⊢ normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics
(List.take (↑((Physlib.List.insertionSortEquiv normalOrderRel φs) i)) (List.insertionSort normalOrderRel φs))) =
normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics (List.take (↑(normalOrderEquiv i)) (normalOrderList φs))) Wick.koszulSign_eraseIdx, 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpi:Fin φs.length⊢ Wick.koszulSign 𝓕.crAnStatistics normalOrderRel φs *
(exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics
(List.take (↑((Physlib.List.insertionSortEquiv normalOrderRel φs) i)) (List.insertionSort normalOrderRel φs))) =
normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics (List.take (↑(normalOrderEquiv i)) (normalOrderList φs))) 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpi:Fin φs.length⊢ normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics
(List.take (↑((Physlib.List.insertionSortEquiv normalOrderRel φs) i)) (List.insertionSort normalOrderRel φs))) =
normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics (List.take (↑(normalOrderEquiv i)) (normalOrderList φs))) ← normalOrderSign 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpi:Fin φs.length⊢ normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics
(List.take (↑((Physlib.List.insertionSortEquiv normalOrderRel φs) i)) (List.insertionSort normalOrderRel φs))) =
normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics (List.take (↑(normalOrderEquiv i)) (normalOrderList φs))) 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpi:Fin φs.length⊢ normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics
(List.take (↑((Physlib.List.insertionSortEquiv normalOrderRel φs) i)) (List.insertionSort normalOrderRel φs))) =
normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics (List.take (↑(normalOrderEquiv i)) (normalOrderList φs)))] 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpi:Fin φs.length⊢ normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics
(List.take (↑((Physlib.List.insertionSortEquiv normalOrderRel φs) i)) (List.insertionSort normalOrderRel φs))) =
normalOrderSign φs * (exchangeSign (𝓕.crAnStatistics (φs.get i))) (ofList 𝓕.crAnStatistics (List.take (↑i) φs)) *
(exchangeSign (𝓕.crAnStatistics (φs.get i)))
(ofList 𝓕.crAnStatistics (List.take (↑(normalOrderEquiv i)) (normalOrderList φs)))
rfl All goals completed! 🐙
lemma orderedInsert_createFilter_append_annihilate (φ : 𝓕.CrAnFieldOp)
(hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate) : (φs φs' : List 𝓕.CrAnFieldOp) →
List.orderedInsert normalOrderRel φ (createFilter φs ++ φs') =
createFilter φs ++ List.orderedInsert normalOrderRel φ φs'
| [], φs' => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφs':List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (createFilter [] ++ φs') =
createFilter [] ++ List.orderedInsert normalOrderRel φ φs' by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφs':List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (createFilter [] ++ φs') =
createFilter [] ++ List.orderedInsert normalOrderRel φ φs' simp [createFilter] All goals completed! 🐙
| φ' :: φs, φs' => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (createFilter (φ' :: φs) ++ φs') =
createFilter (φ' :: φs) ++ List.orderedInsert normalOrderRel φ φs' by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (createFilter (φ' :: φs) ++ φs') =
createFilter (φ' :: φs) ++ List.orderedInsert normalOrderRel φ φs'
rcases CreateAnnihilate.eq_create_or_annihilate (𝓕 |>ᶜ φ') with hφ' | hφ' inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (createFilter (φ' :: φs) ++ φs') =
createFilter (φ' :: φs) ++ List.orderedInsert normalOrderRel φ φs'inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (createFilter (φ' :: φs) ++ φs') =
createFilter (φ' :: φs) ++ List.orderedInsert normalOrderRel φ φs'
· inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (createFilter (φ' :: φs) ++ φs') =
createFilter (φ' :: φs) ++ List.orderedInsert normalOrderRel φ φs' rw [createFilter_cons_create hφ' inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (φ' :: createFilter φs ++ φs') =
φ' :: createFilter φs ++ List.orderedInsert normalOrderRel φ φs' inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (φ' :: createFilter φs ++ φs') =
φ' :: createFilter φs ++ List.orderedInsert normalOrderRel φ φs'] inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (φ' :: createFilter φs ++ φs') =
φ' :: createFilter φs ++ List.orderedInsert normalOrderRel φ φs'
simp only [List.cons_append, List.orderedInsert.eq_2] inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ (if normalOrderRel φ φ' then φ :: φ' :: (createFilter φs ++ φs')
else φ' :: List.orderedInsert normalOrderRel φ (createFilter φs ++ φs')) =
φ' :: (createFilter φs ++ List.orderedInsert normalOrderRel φ φs')
rw [if_neg, inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ φ' :: List.orderedInsert normalOrderRel φ (createFilter φs ++ φs') =
φ' :: (createFilter φs ++ List.orderedInsert normalOrderRel φ φs')inl.hnc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ ¬normalOrderRel φ φ' inl.hnc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ ¬normalOrderRel φ φ' orderedInsert_createFilter_append_annihilate φ hφ φs φs' inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ φ' :: (createFilter φs ++ List.orderedInsert normalOrderRel φ φs') =
φ' :: (createFilter φs ++ List.orderedInsert normalOrderRel φ φs')inl.hnc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ ¬normalOrderRel φ φ'inl.hnc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ ¬normalOrderRel φ φ']inl.hnc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ ¬normalOrderRel φ φ'
simp [normalOrderRel, hφ, hφ', CreateAnnihilate.normalOrder] All goals completed! 🐙
· inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (createFilter (φ' :: φs) ++ φs') =
createFilter (φ' :: φs) ++ List.orderedInsert normalOrderRel φ φs' rw [createFilter_cons_annihilate hφ', inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (createFilter φs ++ φs') =
createFilter φs ++ List.orderedInsert normalOrderRel φ φs' All goals completed! 🐙 orderedInsert_createFilter_append_annihilate φ hφ φs inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ createFilter φs ++ List.orderedInsert normalOrderRel φ φs' = createFilter φs ++ List.orderedInsert normalOrderRel φ φs' All goals completed! 🐙] All goals completed! 🐙
lemma orderedInsert_annihilateFilter (φ : 𝓕.CrAnFieldOp) : (φs : List 𝓕.CrAnFieldOp) →
List.orderedInsert normalOrderRel φ (annihilateFilter φs) =
φ :: annihilateFilter φs
| [] => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (annihilateFilter []) = φ :: annihilateFilter [] by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (annihilateFilter []) = φ :: annihilateFilter [] simp [annihilateFilter] All goals completed! 🐙
| φ' :: φs => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (annihilateFilter (φ' :: φs)) = φ :: annihilateFilter (φ' :: φs) by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (annihilateFilter (φ' :: φs)) = φ :: annihilateFilter (φ' :: φs)
rcases CreateAnnihilate.eq_create_or_annihilate (𝓕 |>ᶜ φ') with hφ' | hφ' inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (annihilateFilter (φ' :: φs)) = φ :: annihilateFilter (φ' :: φs)inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (annihilateFilter (φ' :: φs)) = φ :: annihilateFilter (φ' :: φs)
· inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (annihilateFilter (φ' :: φs)) = φ :: annihilateFilter (φ' :: φs) rw [annihilateFilter_cons_create hφ', inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (annihilateFilter φs) = φ :: annihilateFilter φs All goals completed! 🐙 orderedInsert_annihilateFilter φ φs inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.create⊢ φ :: annihilateFilter φs = φ :: annihilateFilter φs All goals completed! 🐙] All goals completed! 🐙
· inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (annihilateFilter (φ' :: φs)) = φ :: annihilateFilter (φ' :: φs) rw [annihilateFilter_cons_annihilate hφ' inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (φ' :: annihilateFilter φs) = φ :: φ' :: annihilateFilter φs inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (φ' :: annihilateFilter φs) = φ :: φ' :: annihilateFilter φs]inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (φ' :: annihilateFilter φs) = φ :: φ' :: annihilateFilter φs
simp only [List.orderedInsert.eq_2] inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ (if normalOrderRel φ φ' then φ :: φ' :: annihilateFilter φs
else φ' :: List.orderedInsert normalOrderRel φ (annihilateFilter φs)) =
φ :: φ' :: annihilateFilter φs
rw [if_pos inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ φ :: φ' :: annihilateFilter φs = φ :: φ' :: annihilateFilter φsinr.hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ normalOrderRel φ φ' inr.hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ normalOrderRel φ φ']inr.hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ normalOrderRel φ φ'
dsimp only [normalOrderRel] inr.hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ (𝓕|>ᶜφ).normalOrder (𝓕|>ᶜφ')
rw [hφ' inr.hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ (𝓕|>ᶜφ).normalOrder CreateAnnihilate.annihilate inr.hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ (𝓕|>ᶜφ).normalOrder CreateAnnihilate.annihilate]inr.hc 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilate⊢ (𝓕|>ᶜφ).normalOrder CreateAnnihilate.annihilate
rcases CreateAnnihilate.eq_create_or_annihilate (𝓕 |>ᶜ φ) with hφ | hφ inr.hc.inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ (𝓕|>ᶜφ).normalOrder CreateAnnihilate.annihilateinr.hc.inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ (𝓕|>ᶜφ).normalOrder CreateAnnihilate.annihilate
· inr.hc.inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ (𝓕|>ᶜφ).normalOrder CreateAnnihilate.annihilate rw [hφ inr.hc.inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ CreateAnnihilate.create.normalOrder CreateAnnihilate.annihilate inr.hc.inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ CreateAnnihilate.create.normalOrder CreateAnnihilate.annihilate]inr.hc.inl 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ CreateAnnihilate.create.normalOrder CreateAnnihilate.annihilate
simp only [CreateAnnihilate.normalOrder] All goals completed! 🐙
· inr.hc.inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ (𝓕|>ᶜφ).normalOrder CreateAnnihilate.annihilate rw [hφ inr.hc.inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.annihilate inr.hc.inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.annihilate]inr.hc.inr 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφ':𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ':𝓕|>ᶜφ' = CreateAnnihilate.annihilatehφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ CreateAnnihilate.annihilate.normalOrder CreateAnnihilate.annihilate
simp [CreateAnnihilate.normalOrder] All goals completed! 🐙
lemma orderedInsert_createFilter_append_annihilateFilter_annihilate (φ : 𝓕.CrAnFieldOp)
(hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate) (φs : List 𝓕.CrAnFieldOp) :
List.orderedInsert normalOrderRel φ (createFilter φs ++ annihilateFilter φs) =
createFilter φs ++ φ :: annihilateFilter φs := by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ List.orderedInsert normalOrderRel φ (createFilter φs ++ annihilateFilter φs) =
createFilter φs ++ φ :: annihilateFilter φs
rw [orderedInsert_createFilter_append_annihilate φ hφ, 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ createFilter φs ++ List.orderedInsert normalOrderRel φ (annihilateFilter φs) =
createFilter φs ++ φ :: annihilateFilter φs All goals completed! 🐙 orderedInsert_annihilateFilter 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ createFilter φs ++ φ :: annihilateFilter φs = createFilter φs ++ φ :: annihilateFilter φs All goals completed! 🐙] All goals completed! 🐙
lemma normalOrderList_eq_createFilter_append_annihilateFilter : (φs : List 𝓕.CrAnFieldOp) →
normalOrderList φs = createFilter φs ++ annihilateFilter φs
| [] => 𝓕:FieldSpecification⊢ normalOrderList [] = createFilter [] ++ annihilateFilter [] by 𝓕:FieldSpecification⊢ normalOrderList [] = createFilter [] ++ annihilateFilter [] simp [normalOrderList, createFilter, annihilateFilter] All goals completed! 🐙
| φ :: φs => 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderList (φ :: φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs) by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderList (φ :: φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
by_cases hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.create pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ normalOrderList (φ :: φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.create⊢ normalOrderList (φ :: φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
· pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ normalOrderList (φ :: φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs) rw [normalOrderList_cons_create φ hφ φs pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs) pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)] pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
dsimp only [createFilter] pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) (φ :: φs) ++ annihilateFilter (φ :: φs)
rw [List.filter_cons_of_pos pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ :: List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++ annihilateFilter (φ :: φs)pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ decide (𝓕|>ᶜφ = CreateAnnihilate.create) = true pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ :: List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++ annihilateFilter (φ :: φs)pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ decide (𝓕|>ᶜφ = CreateAnnihilate.create) = true]pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ :: List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++ annihilateFilter (φ :: φs)pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ decide (𝓕|>ᶜφ = CreateAnnihilate.create) = true
swap pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ decide (𝓕|>ᶜφ = CreateAnnihilate.create) = truepos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ :: List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++ annihilateFilter (φ :: φs)
simp only [hφ, decide_true] pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ :: List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++ annihilateFilter (φ :: φs)
dsimp only [annihilateFilter, List.cons_append] pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ ::
(List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) (φ :: φs))
rw [List.filter_cons_of_neg pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ ::
(List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs)pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ ¬decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate) = true pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ ::
(List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs)pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ ¬decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate) = true]pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ ::
(List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs)pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ ¬decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate) = true
swap pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ ¬decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate) = truepos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ ::
(List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs)
simp only [hφ, reduceCtorEq, decide_false, Bool.false_eq_true, not_false_eq_true] pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: normalOrderList φs =
φ ::
(List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs)
rw [normalOrderList_eq_createFilter_append_annihilateFilter φs pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: (createFilter φs ++ annihilateFilter φs) =
φ ::
(List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs) pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: (createFilter φs ++ annihilateFilter φs) =
φ ::
(List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs)]pos 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ φ :: (createFilter φs ++ annihilateFilter φs) =
φ ::
(List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++
List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs)
rfl All goals completed! 🐙
· neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.create⊢ normalOrderList (φ :: φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs) simp only [normalOrderList, List.insertionSort_cons] neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (List.insertionSort normalOrderRel φs) =
createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
rw [← normalOrderList neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (normalOrderList φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs) neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (normalOrderList φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)]neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.create⊢ List.orderedInsert normalOrderRel φ (normalOrderList φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
have hφ' : 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate := by 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOp⊢ normalOrderList (φ :: φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs) neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (normalOrderList φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
have hx := CreateAnnihilate.eq_create_or_annihilate (𝓕 |>ᶜ φ) 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhx:𝓕|>ᶜφ = CreateAnnihilate.create ∨ 𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ 𝓕|>ᶜφ = CreateAnnihilate.annihilateneg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (normalOrderList φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
simp_allneg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (normalOrderList φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (normalOrderList φs) = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
rw [normalOrderList_eq_createFilter_append_annihilateFilter φs neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (createFilter φs ++ annihilateFilter φs) =
createFilter (φ :: φs) ++ annihilateFilter (φ :: φs) neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (createFilter φs ++ annihilateFilter φs) =
createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)]neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ List.orderedInsert normalOrderRel φ (createFilter φs ++ annihilateFilter φs) =
createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
rw [orderedInsert_createFilter_append_annihilateFilter_annihilate φ hφ' neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ createFilter φs ++ φ :: annihilateFilter φs = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs) neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ createFilter φs ++ φ :: annihilateFilter φs = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)]neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ createFilter φs ++ φ :: annihilateFilter φs = createFilter (φ :: φs) ++ annihilateFilter (φ :: φs)
rw [createFilter_cons_annihilate hφ', neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ createFilter φs ++ φ :: annihilateFilter φs = createFilter φs ++ annihilateFilter (φ :: φs) All goals completed! 🐙 annihilateFilter_cons_annihilate hφ' neg 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpφs:List 𝓕.CrAnFieldOphφ:¬𝓕|>ᶜφ = CreateAnnihilate.createhφ':𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ createFilter φs ++ φ :: annihilateFilter φs = createFilter φs ++ φ :: annihilateFilter φs All goals completed! 🐙] All goals completed! 🐙