/- Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Joseph Tooby-Smith -/ import HepLean.PerturbationTheory.FieldOpAlgebra.NormalOrder.Basic /-! # Basic properties of normal ordering -/ namespace FieldSpecification open FieldOpFreeAlgebra open HepLean.List open FieldStatistic namespace FieldOpAlgebra variable {๐“• : FieldSpecification} /-! ## Properties of normal ordering. -/ lemma normalOrder_eq_ฮน_normalOrderF (a : ๐“•.FieldOpFreeAlgebra) : ๐“(ฮน a) = ฮน ๐“แถ (a) := rfl lemma normalOrder_ofCrAnList (ฯ†s : List ๐“•.CrAnFieldOp) : ๐“(ofCrAnList ฯ†s) = normalOrderSign ฯ†s โ€ข ofCrAnList (normalOrderList ฯ†s) := by rw [ofCrAnList, normalOrder_eq_ฮน_normalOrderF, normalOrderF_ofCrAnListF] rfl @[simp] lemma normalOrder_one_eq_one : normalOrder (๐“• := ๐“•) 1 = 1 := by have h1 : 1 = ofCrAnList (๐“• := ๐“•) [] := by simp [ofCrAnList] rw [h1] rw [normalOrder_ofCrAnList] simp @[simp] lemma normalOrder_ofFieldOpList_nil : normalOrder (๐“• := ๐“•) (ofFieldOpList []) = 1 := by rw [ofFieldOpList] rw [normalOrder_eq_ฮน_normalOrderF] simp only [ofFieldOpListF_nil] change normalOrder (๐“• := ๐“•) 1 = _ simp @[simp] lemma normalOrder_ofCrAnList_nil : normalOrder (๐“• := ๐“•) (ofCrAnList []) = 1 := by rw [normalOrder_ofCrAnList] simp only [normalOrderSign_nil, normalOrderList_nil, one_smul] rfl lemma ofCrAnList_eq_normalOrder (ฯ†s : List ๐“•.CrAnFieldOp) : ofCrAnList (normalOrderList ฯ†s) = normalOrderSign ฯ†s โ€ข ๐“(ofCrAnList ฯ†s) := by rw [normalOrder_ofCrAnList, smul_smul, normalOrderSign, Wick.koszulSign_mul_self, one_smul] lemma normalOrder_normalOrder_mid (a b c : ๐“•.FieldOpAlgebra) : ๐“(a * b * c) = ๐“(a * ๐“(b) * c) := by obtain โŸจa, rflโŸฉ := ฮน_surjective a obtain โŸจb, rflโŸฉ := ฮน_surjective b obtain โŸจc, rflโŸฉ := ฮน_surjective c rw [normalOrder_eq_ฮน_normalOrderF] simp only [โ† map_mul] rw [normalOrder_eq_ฮน_normalOrderF] rw [normalOrderF_normalOrderF_mid] rfl lemma normalOrder_normalOrder_left (a b : ๐“•.FieldOpAlgebra) : ๐“(a * b) = ๐“(๐“(a) * b) := by obtain โŸจa, rflโŸฉ := ฮน_surjective a obtain โŸจb, rflโŸฉ := ฮน_surjective b rw [normalOrder_eq_ฮน_normalOrderF] simp only [โ† map_mul] rw [normalOrder_eq_ฮน_normalOrderF] rw [normalOrderF_normalOrderF_left] rfl lemma normalOrder_normalOrder_right (a b : ๐“•.FieldOpAlgebra) : ๐“(a * b) = ๐“(a * ๐“(b)) := by obtain โŸจa, rflโŸฉ := ฮน_surjective a obtain โŸจb, rflโŸฉ := ฮน_surjective b rw [normalOrder_eq_ฮน_normalOrderF] simp only [โ† map_mul] rw [normalOrder_eq_ฮน_normalOrderF] rw [normalOrderF_normalOrderF_right] rfl lemma normalOrder_normalOrder (a : ๐“•.FieldOpAlgebra) : ๐“(๐“(a)) = ๐“(a) := by trans ๐“(๐“(a) * 1) ยท simp ยท rw [โ† normalOrder_normalOrder_left] simp /-! ## mul anpart and crpart -/ lemma normalOrder_mul_anPart (ฯ† : ๐“•.FieldOp) (a : ๐“•.FieldOpAlgebra) : ๐“(a * anPart ฯ†) = ๐“(a) * anPart ฯ† := by obtain โŸจa, rflโŸฉ := ฮน_surjective a rw [anPart, โ† map_mul, normalOrder_eq_ฮน_normalOrderF, normalOrderF_mul_anPartF] rfl lemma crPart_mul_normalOrder (ฯ† : ๐“•.FieldOp) (a : ๐“•.FieldOpAlgebra) : ๐“(crPart ฯ† * a) = crPart ฯ† * ๐“(a) := by obtain โŸจa, rflโŸฉ := ฮน_surjective a rw [crPart, โ† map_mul, normalOrder_eq_ฮน_normalOrderF, normalOrderF_crPartF_mul] rfl /-! ### Normal order and super commutes -/ /-- For a field specification `๐“•`, and `a` and `b` in `๐“•.FieldOpAlgebra` the normal ordering of the super commutator of `a` and `b` vanishes, i.e. `๐“([a,b]โ‚›) = 0`. -/ @[simp] lemma normalOrder_superCommute_eq_zero (a b : ๐“•.FieldOpAlgebra) : ๐“([a, b]โ‚›) = 0 := by obtain โŸจa, rflโŸฉ := ฮน_surjective a obtain โŸจb, rflโŸฉ := ฮน_surjective b rw [superCommute_eq_ฮน_superCommuteF, normalOrder_eq_ฮน_normalOrderF] simp @[simp] lemma normalOrder_superCommute_left_eq_zero (a b c: ๐“•.FieldOpAlgebra) : ๐“([a, b]โ‚› * c) = 0 := by obtain โŸจa, rflโŸฉ := ฮน_surjective a obtain โŸจb, rflโŸฉ := ฮน_surjective b obtain โŸจc, rflโŸฉ := ฮน_surjective c rw [superCommute_eq_ฮน_superCommuteF, โ† map_mul, normalOrder_eq_ฮน_normalOrderF] simp @[simp] lemma normalOrder_superCommute_right_eq_zero (a b c: ๐“•.FieldOpAlgebra) : ๐“(c * [a, b]โ‚›) = 0 := by obtain โŸจa, rflโŸฉ := ฮน_surjective a obtain โŸจb, rflโŸฉ := ฮน_surjective b obtain โŸจc, rflโŸฉ := ฮน_surjective c rw [superCommute_eq_ฮน_superCommuteF, โ† map_mul, normalOrder_eq_ฮน_normalOrderF] simp @[simp] lemma normalOrder_superCommute_mid_eq_zero (a b c d : ๐“•.FieldOpAlgebra) : ๐“(a * [c, d]โ‚› * b) = 0 := by obtain โŸจa, rflโŸฉ := ฮน_surjective a obtain โŸจb, rflโŸฉ := ฮน_surjective b obtain โŸจc, rflโŸฉ := ฮน_surjective c obtain โŸจd, rflโŸฉ := ฮน_surjective d rw [superCommute_eq_ฮน_superCommuteF, โ† map_mul, โ† map_mul, normalOrder_eq_ฮน_normalOrderF] simp /-! ### Swapping terms in a normal order. -/ lemma normalOrder_ofFieldOp_ofFieldOp_swap (ฯ† ฯ†' : ๐“•.FieldOp) : ๐“(ofFieldOp ฯ† * ofFieldOp ฯ†') = ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†') โ€ข ๐“(ofFieldOp ฯ†' * ofFieldOp ฯ†) := by rw [ofFieldOp_mul_ofFieldOp_eq_superCommute] simp lemma normalOrder_ofCrAnOp_ofCrAnList (ฯ† : ๐“•.CrAnFieldOp) (ฯ†s : List ๐“•.CrAnFieldOp) : ๐“(ofCrAnOp ฯ† * ofCrAnList ฯ†s) = ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†s) โ€ข ๐“(ofCrAnList ฯ†s * ofCrAnOp ฯ†) := by rw [โ† ofCrAnList_singleton, ofCrAnList_mul_ofCrAnList_eq_superCommute] simp lemma normalOrder_ofCrAnOp_ofFieldOpList_swap (ฯ† : ๐“•.CrAnFieldOp) (ฯ†' : List ๐“•.FieldOp) : ๐“(ofCrAnOp ฯ† * ofFieldOpList ฯ†') = ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†') โ€ข ๐“(ofFieldOpList ฯ†' * ofCrAnOp ฯ†) := by rw [โ† ofCrAnList_singleton, ofCrAnList_mul_ofFieldOpList_eq_superCommute] simp lemma normalOrder_anPart_ofFieldOpList_swap (ฯ† : ๐“•.FieldOp) (ฯ†' : List ๐“•.FieldOp) : ๐“(anPart ฯ† * ofFieldOpList ฯ†') = ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†') โ€ข ๐“(ofFieldOpList ฯ†' * anPart ฯ†) := by match ฯ† with | .inAsymp ฯ† => simp | .position ฯ† => simp only [anPart_position, instCommGroup.eq_1] rw [normalOrder_ofCrAnOp_ofFieldOpList_swap] rfl | .outAsymp ฯ† => simp only [anPart_posAsymp, instCommGroup.eq_1] rw [normalOrder_ofCrAnOp_ofFieldOpList_swap] rfl lemma normalOrder_ofFieldOpList_anPart_swap (ฯ† : ๐“•.FieldOp) (ฯ†' : List ๐“•.FieldOp) : ๐“(ofFieldOpList ฯ†' * anPart ฯ†) = ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†') โ€ข ๐“(anPart ฯ† * ofFieldOpList ฯ†') := by rw [normalOrder_anPart_ofFieldOpList_swap] simp [smul_smul, FieldStatistic.exchangeSign_mul_self] lemma normalOrder_ofFieldOpList_mul_anPart_swap (ฯ† : ๐“•.FieldOp) (ฯ†s : List ๐“•.FieldOp) : ๐“(ofFieldOpList ฯ†s) * anPart ฯ† = ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†s) โ€ข ๐“(anPart ฯ† * ofFieldOpList ฯ†s) := by rw [โ† normalOrder_mul_anPart] rw [normalOrder_ofFieldOpList_anPart_swap] lemma anPart_mul_normalOrder_ofFieldOpList_eq_superCommute (ฯ† : ๐“•.FieldOp) (ฯ†s' : List ๐“•.FieldOp) : anPart ฯ† * ๐“(ofFieldOpList ฯ†s') = ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†s') โ€ข ๐“(ofFieldOpList ฯ†s' * anPart ฯ†) + [anPart ฯ†, ๐“(ofFieldOpList ฯ†s')]โ‚› := by rw [anPart, ofFieldOpList, normalOrder_eq_ฮน_normalOrderF, โ† map_mul] rw [anPartF_mul_normalOrderF_ofFieldOpListF_eq_superCommuteF] simp only [instCommGroup.eq_1, map_add, map_smul] rfl /-! ## Super commutators with a normal ordered term as sums -/ /-- For a field specification `๐“•`, an element `ฯ†` of `๐“•.CrAnFieldOp`, a list `ฯ†s` of `๐“•.CrAnFieldOp`, the following relation holds `[ฯ†, ๐“(ฯ†โ‚€โ€ฆฯ†โ‚™)]โ‚› = โˆ‘ i, ๐“ข(ฯ†, ฯ†โ‚€โ€ฆฯ†แตขโ‚‹โ‚) โ€ข [ฯ†, ฯ†แตข]โ‚› * ๐“(ฯ†โ‚€โ€ฆฯ†แตขโ‚‹โ‚ฯ†แตขโ‚Šโ‚โ€ฆฯ†โ‚™)`. The proof of this result ultimately goes as follows - The definition of `normalOrder` is used to rewrite `๐“(ฯ†โ‚€โ€ฆฯ†โ‚™)` as a scalar multiple of a `ofCrAnList ฯ†sn` where `ฯ†sn` is the normal ordering of `ฯ†โ‚€โ€ฆฯ†โ‚™`. - `superCommuteF_ofCrAnListF_ofCrAnListF_eq_sum` is used to rewrite the super commutator of `ฯ†` (considered as a list with one element) with `ofCrAnList ฯ†sn` as a sum of super commutators, one for each element of `ฯ†sn`. - The fact that super-commutators are in the center of `๐“•.FieldOpAlgebra` is used to rearrange terms. - Properties of ordered lists, and `normalOrderSign_eraseIdx` are then used to complete the proof. -/ lemma ofCrAnOp_superCommute_normalOrder_ofCrAnList_sum (ฯ† : ๐“•.CrAnFieldOp) (ฯ†s : List ๐“•.CrAnFieldOp) : [ofCrAnOp ฯ†, ๐“(ofCrAnList ฯ†s)]โ‚› = โˆ‘ n : Fin ฯ†s.length, ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› (ฯ†s.take n)) โ€ข [ofCrAnOp ฯ†, ofCrAnOp ฯ†s[n]]โ‚› * ๐“(ofCrAnList (ฯ†s.eraseIdx n)) := by rw [normalOrder_ofCrAnList, map_smul] rw [superCommute_ofCrAnOp_ofCrAnList_eq_sum, Finset.smul_sum, sum_normalOrderList_length] congr funext n simp only [instCommGroup.eq_1, List.get_eq_getElem, normalOrderList_get_normalOrderEquiv, normalOrderList_eraseIdx_normalOrderEquiv, Algebra.smul_mul_assoc, Fin.getElem_fin] rw [ofCrAnList_eq_normalOrder, mul_smul_comm, smul_smul, smul_smul] by_cases hs : (๐“• |>โ‚› ฯ†) = (๐“• |>โ‚› ฯ†s[n]) ยท congr erw [normalOrderSign_eraseIdx, โ† hs] trans (normalOrderSign ฯ†s * normalOrderSign ฯ†s) * (๐“ข(๐“• |>โ‚› (ฯ†s.get n), ๐“• |>โ‚› ((normalOrderList ฯ†s).take (normalOrderEquiv n))) * ๐“ข(๐“• |>โ‚› (ฯ†s.get n), ๐“• |>โ‚› ((normalOrderList ฯ†s).take (normalOrderEquiv n)))) * ๐“ข(๐“• |>โ‚› (ฯ†s.get n), ๐“• |>โ‚› (ฯ†s.take n)) ยท ring_nf rw [hs] rfl ยท simp [hs] ยท erw [superCommute_diff_statistic hs] simp lemma ofCrAnOp_superCommute_normalOrder_ofFieldOpList_sum (ฯ† : ๐“•.CrAnFieldOp) (ฯ†s : List ๐“•.FieldOp) : [ofCrAnOp ฯ†, ๐“(ofFieldOpList ฯ†s)]โ‚› = โˆ‘ n : Fin ฯ†s.length, ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› (ฯ†s.take n)) โ€ข [ofCrAnOp ฯ†, ofFieldOp ฯ†s[n]]โ‚› * ๐“(ofFieldOpList (ฯ†s.eraseIdx n)) := by conv_lhs => rw [ofFieldOpList_eq_sum, map_sum, map_sum] enter [2, s] rw [ofCrAnOp_superCommute_normalOrder_ofCrAnList_sum, CrAnSection.sum_over_length] enter [2, n] rw [CrAnSection.take_statistics_eq_take_state_statistics, smul_mul_assoc] rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun n _ => ?_) simp only [instCommGroup.eq_1, Fin.coe_cast, Fin.getElem_fin, CrAnSection.sum_eraseIdxEquiv n _ n.prop, CrAnSection.eraseIdxEquiv_symm_getElem, CrAnSection.eraseIdxEquiv_symm_eraseIdx, โ† Finset.smul_sum, Algebra.smul_mul_assoc] conv_lhs => enter [2, 2, n] rw [โ† Finset.mul_sum] rw [โ† Finset.sum_mul, โ† map_sum, โ† map_sum, โ† ofFieldOp_eq_sum, โ† ofFieldOpList_eq_sum] /-- The commutator of the annihilation part of a field operator with a normal ordered list of field operators can be decomposed into the sum of the commutators of the annihilation part with each element of the list of field operators, i.e. `[anPart ฯ†, ๐“(ฯ†โ‚€โ€ฆฯ†โ‚™)]โ‚›= โˆ‘ i, ๐“ข(ฯ†, ฯ†โ‚€โ€ฆฯ†แตขโ‚‹โ‚) โ€ข [anPart ฯ†, ฯ†แตข]โ‚› * ๐“(ฯ†โ‚€โ€ฆฯ†แตขโ‚‹โ‚ฯ†แตขโ‚Šโ‚โ€ฆฯ†โ‚™)`. -/ lemma anPart_superCommute_normalOrder_ofFieldOpList_sum (ฯ† : ๐“•.FieldOp) (ฯ†s : List ๐“•.FieldOp) : [anPart ฯ†, ๐“(ofFieldOpList ฯ†s)]โ‚› = โˆ‘ n : Fin ฯ†s.length, ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› (ฯ†s.take n)) โ€ข [anPart ฯ†, ofFieldOpF ฯ†s[n]]โ‚› * ๐“(ofFieldOpList (ฯ†s.eraseIdx n)) := by match ฯ† with | .inAsymp ฯ† => simp | .position ฯ† => simp only [anPart_position, instCommGroup.eq_1, Fin.getElem_fin, Algebra.smul_mul_assoc] rw [ofCrAnOp_superCommute_normalOrder_ofFieldOpList_sum] simp only [instCommGroup.eq_1, crAnStatistics, Function.comp_apply, crAnFieldOpToFieldOp_prod, Fin.getElem_fin, Algebra.smul_mul_assoc] rfl | .outAsymp ฯ† => simp only [anPart_posAsymp, instCommGroup.eq_1, Fin.getElem_fin, Algebra.smul_mul_assoc] rw [ofCrAnOp_superCommute_normalOrder_ofFieldOpList_sum] simp only [instCommGroup.eq_1, crAnStatistics, Function.comp_apply, crAnFieldOpToFieldOp_prod, Fin.getElem_fin, Algebra.smul_mul_assoc] rfl /-! ## Multiplying with normal ordered terms -/ /-- Within a proto-operator algebra we have that `anPartF ฯ† * ๐“(ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) = ๐“((anPart ฯ†)ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) + [anpart ฯ†, ๐“(ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™)]โ‚›`. -/ lemma anPart_mul_normalOrder_ofFieldOpList_eq_superCommute_reorder (ฯ† : ๐“•.FieldOp) (ฯ†s : List ๐“•.FieldOp) : anPart ฯ† * ๐“(ofFieldOpList ฯ†s) = ๐“(anPart ฯ† * ofFieldOpList ฯ†s) + [anPart ฯ†, ๐“(ofFieldOpList ฯ†s)]โ‚› := by rw [anPart_mul_normalOrder_ofFieldOpList_eq_superCommute] simp only [instCommGroup.eq_1, add_left_inj] rw [normalOrder_anPart_ofFieldOpList_swap] /-- Within a proto-operator algebra we have that `ฯ† * ๐“แถ (ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) = ๐“แถ (ฯ†ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) + [anpart ฯ†, ๐“แถ (ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™)]โ‚›ca`. -/ lemma ofFieldOp_mul_normalOrder_ofFieldOpList_eq_superCommute (ฯ† : ๐“•.FieldOp) (ฯ†s : List ๐“•.FieldOp) : ofFieldOp ฯ† * ๐“(ofFieldOpList ฯ†s) = ๐“(ofFieldOp ฯ† * ofFieldOpList ฯ†s) + [anPart ฯ†, ๐“(ofFieldOpList ฯ†s)]โ‚› := by conv_lhs => rw [ofFieldOp_eq_crPart_add_anPart] rw [add_mul, anPart_mul_normalOrder_ofFieldOpList_eq_superCommute_reorder, โ† add_assoc, โ† crPart_mul_normalOrder, โ† map_add] conv_lhs => lhs rw [โ† add_mul, โ† ofFieldOp_eq_crPart_add_anPart] /-- In the expansion of `ofFieldOpF ฯ† * normalOrderF (ofFieldOpListF ฯ†s)` the element of `๐“ž.A` associated with contracting `ฯ†` with the (optional) `n`th element of `ฯ†s`. -/ noncomputable def contractStateAtIndex (ฯ† : ๐“•.FieldOp) (ฯ†s : List ๐“•.FieldOp) (n : Option (Fin ฯ†s.length)) : ๐“•.FieldOpAlgebra := match n with | none => 1 | some n => ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› (ฯ†s.take n)) โ€ข [anPart ฯ†, ofFieldOp ฯ†s[n]]โ‚› /-- For a field specification `๐“•`, a `ฯ†` in `๐“•.FieldOp` and a list `ฯ†s` of `๐“•.FieldOp` then `ฯ† * ๐“(ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™)` is equal to `๐“(ฯ†ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) + โˆ‘ i, (๐“ข(ฯ†,ฯ†โ‚€ฯ†โ‚โ€ฆฯ†แตขโ‚‹โ‚) โ€ข [anPart ฯ†, ฯ†แตข]โ‚›) * ๐“(ฯ†โ‚€โ€ฆฯ†แตขโ‚‹โ‚ฯ†แตขโ‚Šโ‚โ€ฆฯ†โ‚™)`. The proof of ultimately goes as follows: - `ofFieldOp_eq_crPart_add_anPart` is used to split `ฯ†` into its creation and annihilation parts. - The following relation is then used `crPart ฯ† * ๐“(ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) = ๐“(crPart ฯ† * ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™)`. - It used that `anPart ฯ† * ๐“(ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™)` is equal to `๐“ข(ฯ†, ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) ๐“(ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) * anPart ฯ† + [anPart ฯ†, ๐“(ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™)]` - Then it is used that `๐“ข(ฯ†, ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) ๐“(ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) * anPart ฯ† = ๐“(anPart ฯ† * ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™)` - The result `ofCrAnOp_superCommute_normalOrder_ofCrAnList_sum` is used to expand `[anPart ฯ†, ๐“(ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™)]` as a sum. -/ lemma ofFieldOp_mul_normalOrder_ofFieldOpList_eq_sum (ฯ† : ๐“•.FieldOp) (ฯ†s : List ๐“•.FieldOp) : ofFieldOp ฯ† * ๐“(ofFieldOpList ฯ†s) = โˆ‘ n : Option (Fin ฯ†s.length), contractStateAtIndex ฯ† ฯ†s n * ๐“(ofFieldOpList (optionEraseZ ฯ†s ฯ† n)) := by rw [ofFieldOp_mul_normalOrder_ofFieldOpList_eq_superCommute] rw [anPart_superCommute_normalOrder_ofFieldOpList_sum] simp only [instCommGroup.eq_1, Fin.getElem_fin, Algebra.smul_mul_assoc, contractStateAtIndex, Fintype.sum_option, one_mul] rfl /-! ## Cons vs insertIdx for a normal ordered term. -/ /-- Within a proto-operator algebra, `N(ฯ†ฯ†โ‚€ฯ†โ‚โ€ฆฯ†โ‚™) = s โ€ข N(ฯ†โ‚€โ€ฆฯ†โ‚–โ‚‹โ‚ฯ†ฯ†โ‚–โ€ฆฯ†โ‚™)`, where `s` is the exchange sign for `ฯ†` and `ฯ†โ‚€โ€ฆฯ†โ‚–โ‚‹โ‚`. -/ lemma ofFieldOpList_normalOrder_insert (ฯ† : ๐“•.FieldOp) (ฯ†s : List ๐“•.FieldOp) (k : Fin ฯ†s.length.succ) : ๐“(ofFieldOpList (ฯ† :: ฯ†s)) = ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†s.take k) โ€ข ๐“(ofFieldOpList (ฯ†s.insertIdx k ฯ†)) := by have hl : ฯ†s.insertIdx k ฯ† = ฯ†s.take k ++ [ฯ†] ++ ฯ†s.drop k := by rw [HepLean.List.insertIdx_eq_take_drop] simp rw [hl] rw [ofFieldOpList_append, ofFieldOpList_append] rw [ofFieldOpList_mul_ofFieldOpList_eq_superCommute, add_mul] simp only [instCommGroup.eq_1, Nat.succ_eq_add_one, ofList_singleton, Algebra.smul_mul_assoc, map_add, map_smul, normalOrder_superCommute_left_eq_zero, add_zero, smul_smul, exchangeSign_mul_self_swap, one_smul] rw [โ† ofFieldOpList_append, โ† ofFieldOpList_append] simp /-! ## The normal ordering of a product of two states -/ @[simp] lemma normalOrder_crPart_mul_crPart (ฯ† ฯ†' : ๐“•.FieldOp) : ๐“(crPart ฯ† * crPart ฯ†') = crPart ฯ† * crPart ฯ†' := by rw [crPart, crPart, โ† map_mul, normalOrder_eq_ฮน_normalOrderF, normalOrderF_crPartF_mul_crPartF] @[simp] lemma normalOrder_anPart_mul_anPart (ฯ† ฯ†' : ๐“•.FieldOp) : ๐“(anPart ฯ† * anPart ฯ†') = anPart ฯ† * anPart ฯ†' := by rw [anPart, anPart, โ† map_mul, normalOrder_eq_ฮน_normalOrderF, normalOrderF_anPartF_mul_anPartF] @[simp] lemma normalOrder_crPart_mul_anPart (ฯ† ฯ†' : ๐“•.FieldOp) : ๐“(crPart ฯ† * anPart ฯ†') = crPart ฯ† * anPart ฯ†' := by rw [crPart, anPart, โ† map_mul, normalOrder_eq_ฮน_normalOrderF, normalOrderF_crPartF_mul_anPartF] @[simp] lemma normalOrder_anPart_mul_crPart (ฯ† ฯ†' : ๐“•.FieldOp) : ๐“(anPart ฯ† * crPart ฯ†') = ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†') โ€ข crPart ฯ†' * anPart ฯ† := by rw [anPart, crPart, โ† map_mul, normalOrder_eq_ฮน_normalOrderF, normalOrderF_anPartF_mul_crPartF] simp lemma normalOrder_ofFieldOp_mul_ofFieldOp (ฯ† ฯ†' : ๐“•.FieldOp) : ๐“(ofFieldOp ฯ† * ofFieldOp ฯ†') = crPart ฯ† * crPart ฯ†' + ๐“ข(๐“• |>โ‚› ฯ†, ๐“• |>โ‚› ฯ†') โ€ข (crPart ฯ†' * anPart ฯ†) + crPart ฯ† * anPart ฯ†' + anPart ฯ† * anPart ฯ†' := by rw [ofFieldOp, ofFieldOp, โ† map_mul, normalOrder_eq_ฮน_normalOrderF, normalOrderF_ofFieldOpF_mul_ofFieldOpF] rfl end FieldOpAlgebra end FieldSpecification