feat: Grading on FieldOpAlgebra

This commit is contained in:
jstoobysmith 2025-02-05 07:22:14 +00:00
parent 35445a5be6
commit 7d9e6af80c
10 changed files with 609 additions and 160 deletions

View file

@ -127,6 +127,7 @@ import HepLean.PerturbationTheory.FeynmanDiagrams.Instances.ComplexScalar
import HepLean.PerturbationTheory.FeynmanDiagrams.Instances.Phi4
import HepLean.PerturbationTheory.FeynmanDiagrams.Momentum
import HepLean.PerturbationTheory.FieldOpAlgebra.Basic
import HepLean.PerturbationTheory.FieldOpAlgebra.Grading
import HepLean.PerturbationTheory.FieldOpAlgebra.NormalOrder
import HepLean.PerturbationTheory.FieldOpAlgebra.StaticWickTheorem
import HepLean.PerturbationTheory.FieldOpAlgebra.SuperCommute

View file

@ -60,7 +60,7 @@ def coBispinorDown (p : complexCo) :=
/-- The definitional tensor node relation for `contrBispinorUp`. -/
lemma tensorNode_contrBispinorUp (p : complexContr) :
{contrBispinorUp p | α β}ᵀ.tensor = {pauliCo | μ α β ⊗
(vecNodeE complexLorentzTensor .up p).tensor | μ}ᵀ.tensor := by
(vecNodeE complexLorentzTensor .up p).tensor | μ}ᵀ.tensor := by
rw [contrBispinorUp, tensorNode_tensor]
/-- The definitional tensor node relation for `contrBispinorDown`. -/

View file

@ -111,7 +111,7 @@ lemma tensorNode_rightMetric : {εR | β β'}ᵀ.tensor = (TensorTree.constTwoNo
/-- The definitional tensor node relation for `altLeftMetric`. -/
lemma tensorNode_altLeftMetric :
{εL' | α α'}ᵀ.tensor = (TensorTree.constTwoNodeE complexLorentzTensor
{εL' | α α'}ᵀ.tensor = (TensorTree.constTwoNodeE complexLorentzTensor
.downL .downL Fermion.altLeftMetric).tensor := by
rfl

View file

@ -214,141 +214,141 @@ lemma ι_eq_zero_iff_mem_ideal (x : FieldOpFreeAlgebra 𝓕) :
simp only
rfl
lemma bosonicProj_mem_fieldOpIdealSet_or_zero (x : FieldOpFreeAlgebra 𝓕)
lemma bosonicProjF_mem_fieldOpIdealSet_or_zero (x : FieldOpFreeAlgebra 𝓕)
(hx : x ∈ 𝓕.fieldOpIdealSet) :
x.bosonicProj.1 ∈ 𝓕.fieldOpIdealSet x.bosonicProj = 0 := by
x.bosonicProjF.1 ∈ 𝓕.fieldOpIdealSet x.bosonicProjF = 0 := by
have hx' := hx
simp only [fieldOpIdealSet, exists_prop, Set.mem_setOf_eq] at hx
rcases hx with ⟨φ1, φ2, φ3, rfl⟩ | ⟨φc, φc', hφc, hφc', rfl⟩ | ⟨φa, φa', hφa, hφa', rfl⟩ |
⟨φ, φ', hdiff, rfl⟩
· rcases superCommuteF_superCommuteF_ofCrAnOpF_bosonic_or_fermionic φ1 φ2 φ3 with h | h
· left
rw [bosonicProj_of_mem_bosonic _ h]
rw [bosonicProjF_of_mem_bosonic _ h]
simpa using hx'
· right
rw [bosonicProj_of_mem_fermionic _ h]
rw [bosonicProjF_of_mem_fermionic _ h]
· rcases superCommuteF_ofCrAnOpF_ofCrAnOpF_bosonic_or_fermionic φc φc' with h | h
· left
rw [bosonicProj_of_mem_bosonic _ h]
rw [bosonicProjF_of_mem_bosonic _ h]
simpa using hx'
· right
rw [bosonicProj_of_mem_fermionic _ h]
rw [bosonicProjF_of_mem_fermionic _ h]
· rcases superCommuteF_ofCrAnOpF_ofCrAnOpF_bosonic_or_fermionic φa φa' with h | h
· left
rw [bosonicProj_of_mem_bosonic _ h]
rw [bosonicProjF_of_mem_bosonic _ h]
simpa using hx'
· right
rw [bosonicProj_of_mem_fermionic _ h]
rw [bosonicProjF_of_mem_fermionic _ h]
· rcases superCommuteF_ofCrAnOpF_ofCrAnOpF_bosonic_or_fermionic φ φ' with h | h
· left
rw [bosonicProj_of_mem_bosonic _ h]
rw [bosonicProjF_of_mem_bosonic _ h]
simpa using hx'
· right
rw [bosonicProj_of_mem_fermionic _ h]
rw [bosonicProjF_of_mem_fermionic _ h]
lemma fermionicProj_mem_fieldOpIdealSet_or_zero (x : FieldOpFreeAlgebra 𝓕)
lemma fermionicProjF_mem_fieldOpIdealSet_or_zero (x : FieldOpFreeAlgebra 𝓕)
(hx : x ∈ 𝓕.fieldOpIdealSet) :
x.fermionicProj.1 ∈ 𝓕.fieldOpIdealSet x.fermionicProj = 0 := by
x.fermionicProjF.1 ∈ 𝓕.fieldOpIdealSet x.fermionicProjF = 0 := by
have hx' := hx
simp only [fieldOpIdealSet, exists_prop, Set.mem_setOf_eq] at hx
rcases hx with ⟨φ1, φ2, φ3, rfl⟩ | ⟨φc, φc', hφc, hφc', rfl⟩ | ⟨φa, φa', hφa, hφa', rfl⟩ |
⟨φ, φ', hdiff, rfl⟩
· rcases superCommuteF_superCommuteF_ofCrAnOpF_bosonic_or_fermionic φ1 φ2 φ3 with h | h
· right
rw [fermionicProj_of_mem_bosonic _ h]
rw [fermionicProjF_of_mem_bosonic _ h]
· left
rw [fermionicProj_of_mem_fermionic _ h]
rw [fermionicProjF_of_mem_fermionic _ h]
simpa using hx'
· rcases superCommuteF_ofCrAnOpF_ofCrAnOpF_bosonic_or_fermionic φc φc' with h | h
· right
rw [fermionicProj_of_mem_bosonic _ h]
rw [fermionicProjF_of_mem_bosonic _ h]
· left
rw [fermionicProj_of_mem_fermionic _ h]
rw [fermionicProjF_of_mem_fermionic _ h]
simpa using hx'
· rcases superCommuteF_ofCrAnOpF_ofCrAnOpF_bosonic_or_fermionic φa φa' with h | h
· right
rw [fermionicProj_of_mem_bosonic _ h]
rw [fermionicProjF_of_mem_bosonic _ h]
· left
rw [fermionicProj_of_mem_fermionic _ h]
rw [fermionicProjF_of_mem_fermionic _ h]
simpa using hx'
· rcases superCommuteF_ofCrAnOpF_ofCrAnOpF_bosonic_or_fermionic φ φ' with h | h
· right
rw [fermionicProj_of_mem_bosonic _ h]
rw [fermionicProjF_of_mem_bosonic _ h]
· left
rw [fermionicProj_of_mem_fermionic _ h]
rw [fermionicProjF_of_mem_fermionic _ h]
simpa using hx'
lemma bosonicProj_mem_ideal (x : FieldOpFreeAlgebra 𝓕)
lemma bosonicProjF_mem_ideal (x : FieldOpFreeAlgebra 𝓕)
(hx : x ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet) :
x.bosonicProj.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet := by
x.bosonicProjF.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet := by
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure] at hx
let p {k : Set 𝓕.FieldOpFreeAlgebra} (a : FieldOpFreeAlgebra 𝓕)
(h : a ∈ AddSubgroup.closure k) : Prop :=
a.bosonicProj.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet
a.bosonicProjF.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet
change p x hx
apply AddSubgroup.closure_induction
· intro x hx
simp only [p]
obtain ⟨a, ha, b, hb, rfl⟩ := Set.mem_mul.mp hx
obtain ⟨d, hd, y, hy, rfl⟩ := Set.mem_mul.mp ha
rw [bosonicProj_mul, bosonicProj_mul, fermionicProj_mul]
rw [bosonicProjF_mul, bosonicProjF_mul, fermionicProjF_mul]
simp only [add_mul]
rcases fermionicProj_mem_fieldOpIdealSet_or_zero y hy with hfy | hfy
<;> rcases bosonicProj_mem_fieldOpIdealSet_or_zero y hy with hby | hby
rcases fermionicProjF_mem_fieldOpIdealSet_or_zero y hy with hfy | hfy
<;> rcases bosonicProjF_mem_fieldOpIdealSet_or_zero y hy with hby | hby
· apply TwoSidedIdeal.add_mem
apply TwoSidedIdeal.add_mem
· /- boson, boson, boson mem-/
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure]
refine Set.mem_of_mem_of_subset ?_ AddSubgroup.subset_closure
apply Set.mem_mul.mpr
use ↑(bosonicProj d) * ↑(bosonicProj y)
use ↑(bosonicProjF d) * ↑(bosonicProjF y)
apply And.intro
· apply Set.mem_mul.mpr
use bosonicProj d
use bosonicProjF d
simp only [Set.mem_univ, mul_eq_mul_left_iff, ZeroMemClass.coe_eq_zero, true_and]
use (bosonicProj y).1
use (bosonicProjF y).1
simp [hby]
· use ↑(bosonicProj b)
· use ↑(bosonicProjF b)
simp
· /- fermion, fermion, boson mem-/
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure]
refine Set.mem_of_mem_of_subset ?_ AddSubgroup.subset_closure
apply Set.mem_mul.mpr
use ↑(fermionicProj d) * ↑(fermionicProj y)
use ↑(fermionicProjF d) * ↑(fermionicProjF y)
apply And.intro
· apply Set.mem_mul.mpr
use fermionicProj d
use fermionicProjF d
simp only [Set.mem_univ, mul_eq_mul_left_iff, ZeroMemClass.coe_eq_zero, true_and]
use (fermionicProj y).1
use (fermionicProjF y).1
simp [hby, hfy]
· use ↑(bosonicProj b)
· use ↑(bosonicProjF b)
simp
apply TwoSidedIdeal.add_mem
· /- boson, fermion, fermion mem-/
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure]
refine Set.mem_of_mem_of_subset ?_ AddSubgroup.subset_closure
apply Set.mem_mul.mpr
use ↑(bosonicProj d) * ↑(fermionicProj y)
use ↑(bosonicProjF d) * ↑(fermionicProjF y)
apply And.intro
· apply Set.mem_mul.mpr
use bosonicProj d
use bosonicProjF d
simp only [Set.mem_univ, mul_eq_mul_left_iff, ZeroMemClass.coe_eq_zero, true_and]
use (fermionicProj y).1
use (fermionicProjF y).1
simp [hby, hfy]
· use ↑(fermionicProj b)
· use ↑(fermionicProjF b)
simp
· /- fermion, boson, fermion mem-/
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure]
refine Set.mem_of_mem_of_subset ?_ AddSubgroup.subset_closure
apply Set.mem_mul.mpr
use ↑(fermionicProj d) * ↑(bosonicProj y)
use ↑(fermionicProjF d) * ↑(bosonicProjF y)
apply And.intro
· apply Set.mem_mul.mpr
use fermionicProj d
use fermionicProjF d
simp only [Set.mem_univ, mul_eq_mul_left_iff, ZeroMemClass.coe_eq_zero, true_and]
use (bosonicProj y).1
use (bosonicProjF y).1
simp [hby, hfy]
· use ↑(fermionicProj b)
· use ↑(fermionicProjF b)
simp
· simp only [hby, ZeroMemClass.coe_zero, mul_zero, zero_mul, zero_add, add_zero]
apply TwoSidedIdeal.add_mem
@ -356,27 +356,27 @@ lemma bosonicProj_mem_ideal (x : FieldOpFreeAlgebra 𝓕)
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure]
refine Set.mem_of_mem_of_subset ?_ AddSubgroup.subset_closure
apply Set.mem_mul.mpr
use ↑(fermionicProj d) * ↑(fermionicProj y)
use ↑(fermionicProjF d) * ↑(fermionicProjF y)
apply And.intro
· apply Set.mem_mul.mpr
use fermionicProj d
use fermionicProjF d
simp only [Set.mem_univ, mul_eq_mul_left_iff, ZeroMemClass.coe_eq_zero, true_and]
use (fermionicProj y).1
use (fermionicProjF y).1
simp [hby, hfy]
· use ↑(bosonicProj b)
· use ↑(bosonicProjF b)
simp
· /- boson, fermion, fermion mem-/
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure]
refine Set.mem_of_mem_of_subset ?_ AddSubgroup.subset_closure
apply Set.mem_mul.mpr
use ↑(bosonicProj d) * ↑(fermionicProj y)
use ↑(bosonicProjF d) * ↑(fermionicProjF y)
apply And.intro
· apply Set.mem_mul.mpr
use bosonicProj d
use bosonicProjF d
simp only [Set.mem_univ, mul_eq_mul_left_iff, ZeroMemClass.coe_eq_zero, true_and]
use (fermionicProj y).1
use (fermionicProjF y).1
simp [hby, hfy]
· use ↑(fermionicProj b)
· use ↑(fermionicProjF b)
simp
· simp only [hfy, ZeroMemClass.coe_zero, mul_zero, zero_mul, add_zero, zero_add]
apply TwoSidedIdeal.add_mem
@ -384,27 +384,27 @@ lemma bosonicProj_mem_ideal (x : FieldOpFreeAlgebra 𝓕)
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure]
refine Set.mem_of_mem_of_subset ?_ AddSubgroup.subset_closure
apply Set.mem_mul.mpr
use ↑(bosonicProj d) * ↑(bosonicProj y)
use ↑(bosonicProjF d) * ↑(bosonicProjF y)
apply And.intro
· apply Set.mem_mul.mpr
use bosonicProj d
use bosonicProjF d
simp only [Set.mem_univ, mul_eq_mul_left_iff, ZeroMemClass.coe_eq_zero, true_and]
use (bosonicProj y).1
use (bosonicProjF y).1
simp [hby]
· use ↑(bosonicProj b)
· use ↑(bosonicProjF b)
simp
· /- fermion, boson, fermion mem-/
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure]
refine Set.mem_of_mem_of_subset ?_ AddSubgroup.subset_closure
apply Set.mem_mul.mpr
use ↑(fermionicProj d) * ↑(bosonicProj y)
use ↑(fermionicProjF d) * ↑(bosonicProjF y)
apply And.intro
· apply Set.mem_mul.mpr
use fermionicProj d
use fermionicProjF d
simp only [Set.mem_univ, mul_eq_mul_left_iff, ZeroMemClass.coe_eq_zero, true_and]
use (bosonicProj y).1
use (bosonicProjF y).1
simp [hby, hfy]
· use ↑(fermionicProj b)
· use ↑(fermionicProjF b)
simp
· simp [hfy, hby]
· simp [p]
@ -416,26 +416,26 @@ lemma bosonicProj_mem_ideal (x : FieldOpFreeAlgebra 𝓕)
· intro x hx
simp [p]
lemma fermionicProj_mem_ideal (x : FieldOpFreeAlgebra 𝓕)
lemma fermionicProjF_mem_ideal (x : FieldOpFreeAlgebra 𝓕)
(hx : x ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet) :
x.fermionicProj.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet := by
have hb := bosonicProj_mem_ideal x hx
x.fermionicProjF.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet := by
have hb := bosonicProjF_mem_ideal x hx
rw [← ι_eq_zero_iff_mem_ideal] at hx hb ⊢
rw [← bosonicProj_add_fermionicProj x] at hx
rw [← bosonicProjF_add_fermionicProjF x] at hx
simp only [map_add] at hx
simp_all
lemma ι_eq_zero_iff_ι_bosonicProj_fermonicProj_zero (x : FieldOpFreeAlgebra 𝓕) :
ι x = 0 ↔ ι x.bosonicProj.1 = 0 ∧ ι x.fermionicProj.1 = 0 := by
lemma ι_eq_zero_iff_ι_bosonicProjF_fermonicProj_zero (x : FieldOpFreeAlgebra 𝓕) :
ι x = 0 ↔ ι x.bosonicProjF.1 = 0 ∧ ι x.fermionicProjF.1 = 0 := by
apply Iff.intro
· intro h
rw [ι_eq_zero_iff_mem_ideal] at h ⊢
rw [ι_eq_zero_iff_mem_ideal]
apply And.intro
· exact bosonicProj_mem_ideal x h
· exact fermionicProj_mem_ideal x h
· exact bosonicProjF_mem_ideal x h
· exact fermionicProjF_mem_ideal x h
· intro h
rw [← bosonicProj_add_fermionicProj x]
rw [← bosonicProjF_add_fermionicProjF x]
simp_all
/-!

View file

@ -0,0 +1,449 @@
/-
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.Basic
/-!
# Grading on the field operation algebra
-/
namespace FieldSpecification
open FieldOpFreeAlgebra
open HepLean.List
open FieldStatistic
namespace FieldOpAlgebra
variable {𝓕 : FieldSpecification}
/-- The submodule of `𝓕.FieldOpAlgebra` spanned by lists of field statistic `f`. -/
def statSubmodule (f : FieldStatistic) : Submodule 𝓕.FieldOpAlgebra :=
Submodule.span {a | ∃ φs, a = ofCrAnFieldOpList φs ∧ (𝓕 |>ₛ φs) = f}
lemma ofCrAnFieldOpList_mem_statSubmodule_of_eq (φs : List 𝓕.CrAnFieldOp) (f : FieldStatistic)
(h : (𝓕 |>ₛ φs) = f) : ofCrAnFieldOpList φs ∈ statSubmodule f :=
Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩
lemma ofCrAnFieldOpList_mem_statSubmodule (φs : List 𝓕.CrAnFieldOp) :
ofCrAnFieldOpList φs ∈ statSubmodule (𝓕 |>ₛ φs) :=
Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, rfl⟩⟩
lemma mem_bosonic_of_mem_free_bosonic (a : 𝓕.FieldOpFreeAlgebra)
(h : a ∈ statisticSubmodule bosonic) : ι a ∈ statSubmodule .bosonic := by
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule bosonic) : Prop :=
ι a ∈ statSubmodule .bosonic
change p a h
apply Submodule.span_induction
· intro x hx
simp only [Set.mem_setOf_eq] at hx
obtain ⟨φs, rfl, h⟩ := hx
simp [p]
apply ofCrAnFieldOpList_mem_statSubmodule_of_eq
exact h
· simp only [map_zero, p]
exact Submodule.zero_mem (statSubmodule bosonic)
· intro x y hx hy hpx hpy
simp_all only [p, map_add]
exact Submodule.add_mem _ hpx hpy
· intro a x hx hy
simp_all only [p, map_smul]
exact Submodule.smul_mem _ _ hy
lemma mem_fermionic_of_mem_free_fermionic (a : 𝓕.FieldOpFreeAlgebra)
(h : a ∈ statisticSubmodule fermionic) : ι a ∈ statSubmodule .fermionic := by
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule fermionic) : Prop :=
ι a ∈ statSubmodule .fermionic
change p a h
apply Submodule.span_induction
· intro x hx
simp only [Set.mem_setOf_eq] at hx
obtain ⟨φs, rfl, h⟩ := hx
simp [p]
apply ofCrAnFieldOpList_mem_statSubmodule_of_eq
exact h
· simp only [map_zero, p]
exact Submodule.zero_mem (statSubmodule fermionic)
· intro x y hx hy hpx hpy
simp_all only [p, map_add]
exact Submodule.add_mem _ hpx hpy
· intro a x hx hy
simp_all only [p, map_smul]
exact Submodule.smul_mem _ _ hy
lemma mem_statSubmodule_of_mem_statisticSubmodule (f : FieldStatistic) (a : 𝓕.FieldOpFreeAlgebra)
(h : a ∈ statisticSubmodule f) : ι a ∈ statSubmodule f := by
fin_cases f
· exact mem_bosonic_of_mem_free_bosonic a h
· exact mem_fermionic_of_mem_free_fermionic a h
/-- The projection of `statisticSubmodule (𝓕 := 𝓕) f` defined in the free algebra to
`statSubmodule (𝓕 := 𝓕) f`. -/
def ιStateSubmodule (f : FieldStatistic) :
statisticSubmodule (𝓕 := 𝓕) f →ₗ[] statSubmodule (𝓕 := 𝓕) f where
toFun a := ⟨a.1, mem_statSubmodule_of_mem_statisticSubmodule f a.1 a.2⟩
map_add' _ _ := rfl
map_smul' _ _ := rfl
noncomputable section
/-!
## Defining bosonicProj
-/
/-- The projection of `𝓕.FieldOpFreeAlgebra` to `statSubmodule (𝓕 := 𝓕) bosonic`. -/
def bosonicProjFree : 𝓕.FieldOpFreeAlgebra →ₗ[] statSubmodule (𝓕 := 𝓕) bosonic :=
ιStateSubmodule .bosonic ∘ₗ bosonicProjF
lemma bosonicProjFree_eq_ι_bosonicProjF (a : 𝓕.FieldOpFreeAlgebra) :
(bosonicProjFree a).1 = ι (bosonicProjF a) := rfl
lemma bosonicProjFree_zero_of_ι_zero (a : 𝓕.FieldOpFreeAlgebra) (h : ι a = 0) :
bosonicProjFree a = 0 := by
rw [ι_eq_zero_iff_ι_bosonicProjF_fermonicProj_zero] at h
apply Subtype.eq
rw [bosonicProjFree_eq_ι_bosonicProjF]
exact h.1
lemma bosonicProjFree_eq_of_equiv (a b : 𝓕.FieldOpFreeAlgebra) (h : a ≈ b) :
bosonicProjFree a = bosonicProjFree b := by
rw [equiv_iff_sub_mem_ideal, ← ι_eq_zero_iff_mem_ideal] at h
rw [LinearMap.sub_mem_ker_iff.mp]
simp only [LinearMap.mem_ker, ← map_sub]
exact bosonicProjFree_zero_of_ι_zero (a - b) h
/-- The projection of `𝓕.FieldOpAlgebra` to `statSubmodule (𝓕 := 𝓕) bosonic`. -/
def bosonicProj : 𝓕.FieldOpAlgebra →ₗ[] statSubmodule (𝓕 := 𝓕) bosonic where
toFun := Quotient.lift bosonicProjFree bosonicProjFree_eq_of_equiv
map_add' x y := by
obtain ⟨x, hx⟩ := ι_surjective x
obtain ⟨y, hy⟩ := ι_surjective y
subst hx hy
rw [← map_add, ι_apply, ι_apply, ι_apply]
rw [Quotient.lift_mk, Quotient.lift_mk, Quotient.lift_mk]
simp
map_smul' c y := by
obtain ⟨y, hy⟩ := ι_surjective y
subst hy
rw [← map_smul, ι_apply, ι_apply]
simp
lemma bosonicProj_eq_bosonicProjFree (a : 𝓕.FieldOpFreeAlgebra) :
bosonicProj (ι a) = bosonicProjFree a := rfl
/-!
## Defining fermionicProj
-/
/-- The projection of `𝓕.FieldOpFreeAlgebra` to `statSubmodule (𝓕 := 𝓕) fermionic`. -/
def fermionicProjFree : 𝓕.FieldOpFreeAlgebra →ₗ[] statSubmodule (𝓕 := 𝓕) fermionic :=
ιStateSubmodule .fermionic ∘ₗ fermionicProjF
lemma fermionicProjFree_eq_ι_fermionicProjF (a : 𝓕.FieldOpFreeAlgebra) :
(fermionicProjFree a).1 = ι (fermionicProjF a) := rfl
lemma fermionicProjFree_zero_of_ι_zero (a : 𝓕.FieldOpFreeAlgebra) (h : ι a = 0) :
fermionicProjFree a = 0 := by
rw [ι_eq_zero_iff_ι_bosonicProjF_fermonicProj_zero] at h
apply Subtype.eq
rw [fermionicProjFree_eq_ι_fermionicProjF]
exact h.2
lemma fermionicProjFree_eq_of_equiv (a b : 𝓕.FieldOpFreeAlgebra) (h : a ≈ b) :
fermionicProjFree a = fermionicProjFree b := by
rw [equiv_iff_sub_mem_ideal, ← ι_eq_zero_iff_mem_ideal] at h
rw [LinearMap.sub_mem_ker_iff.mp]
simp only [LinearMap.mem_ker, ← map_sub]
exact fermionicProjFree_zero_of_ι_zero (a - b) h
/-- The projection of `𝓕.FieldOpAlgebra` to `statSubmodule (𝓕 := 𝓕) fermionic`. -/
def fermionicProj : 𝓕.FieldOpAlgebra →ₗ[] statSubmodule (𝓕 := 𝓕) fermionic where
toFun := Quotient.lift fermionicProjFree fermionicProjFree_eq_of_equiv
map_add' x y := by
obtain ⟨x, hx⟩ := ι_surjective x
obtain ⟨y, hy⟩ := ι_surjective y
subst hx hy
rw [← map_add, ι_apply, ι_apply, ι_apply]
rw [Quotient.lift_mk, Quotient.lift_mk, Quotient.lift_mk]
simp
map_smul' c y := by
obtain ⟨y, hy⟩ := ι_surjective y
subst hy
rw [← map_smul, ι_apply, ι_apply]
simp
lemma fermionicProj_eq_fermionicProjFree (a : 𝓕.FieldOpFreeAlgebra) :
fermionicProj (ι a) = fermionicProjFree a := rfl
/-!
## Interactino between bosonicProj and fermionicProj
-/
lemma bosonicProj_add_fermionicProj (a : 𝓕.FieldOpAlgebra) :
bosonicProj a + (fermionicProj a).1 = a := by
obtain ⟨a, rfl⟩ := ι_surjective a
rw [fermionicProj_eq_fermionicProjFree, bosonicProj_eq_bosonicProjFree]
rw [bosonicProjFree_eq_ι_bosonicProjF, fermionicProjFree_eq_ι_fermionicProjF]
rw [← map_add, bosonicProjF_add_fermionicProjF]
lemma bosonicProj_mem_bosonic (a : 𝓕.FieldOpAlgebra) (ha : a ∈ statSubmodule .bosonic) :
bosonicProj a = ⟨a, ha⟩ := by
let p (a : 𝓕.FieldOpAlgebra) (hx : a ∈ statSubmodule bosonic) : Prop :=
(bosonicProj a) = ⟨a, hx⟩
change p a ha
apply Submodule.span_induction
· intro x hx
obtain ⟨φs, rfl, h⟩ := hx
simp only [p]
apply Subtype.eq
simp only
rw [ofCrAnFieldOpList]
rw [bosonicProj_eq_bosonicProjFree]
rw [bosonicProjFree_eq_ι_bosonicProjF]
rw [bosonicProjF_of_mem_bosonic]
exact ofCrAnListF_mem_statisticSubmodule_of _ _ h
· simp only [map_zero, p]
rfl
· intro x y hx hy hpx hpy
simp_all [p]
· intro a x hx hy
simp_all [p]
lemma fermionicProj_mem_fermionic (a : 𝓕.FieldOpAlgebra) (ha : a ∈ statSubmodule .fermionic) :
fermionicProj a = ⟨a, ha⟩ := by
let p (a : 𝓕.FieldOpAlgebra) (hx : a ∈ statSubmodule fermionic) : Prop :=
(fermionicProj a) = ⟨a, hx⟩
change p a ha
apply Submodule.span_induction
· intro x hx
obtain ⟨φs, rfl, h⟩ := hx
simp only [p]
apply Subtype.eq
simp only
rw [ofCrAnFieldOpList]
rw [fermionicProj_eq_fermionicProjFree]
rw [fermionicProjFree_eq_ι_fermionicProjF]
rw [fermionicProjF_of_mem_fermionic]
exact ofCrAnListF_mem_statisticSubmodule_of _ _ h
· simp only [map_zero, p]
rfl
· intro x y hx hy hpx hpy
simp_all [p]
· intro a x hx hy
simp_all [p]
lemma bosonicProj_mem_fermionic (a : 𝓕.FieldOpAlgebra) (ha : a ∈ statSubmodule .fermionic) :
bosonicProj a = 0 := by
have h := bosonicProj_add_fermionicProj a
rw [fermionicProj_mem_fermionic a ha] at h
simpa using h
lemma fermionicProj_mem_bosonic (a : 𝓕.FieldOpAlgebra) (ha : a ∈ statSubmodule .bosonic) :
fermionicProj a = 0 := by
have h := bosonicProj_add_fermionicProj a
rw [bosonicProj_mem_bosonic a ha] at h
simpa using h
lemma mem_bosonic_iff_fermionicProj_eq_zero (a : 𝓕.FieldOpAlgebra) :
a ∈ statSubmodule bosonic ↔ fermionicProj a = 0 := by
apply Iff.intro
· intro h
exact fermionicProj_mem_bosonic a h
· intro h
have ha := bosonicProj_add_fermionicProj a
rw [h] at ha
simp_all
rw [← ha]
exact (bosonicProj a).2
lemma mem_fermionic_iff_bosonicProj_eq_zero (a : 𝓕.FieldOpAlgebra) :
a ∈ statSubmodule fermionic ↔ bosonicProj a = 0 := by
apply Iff.intro
· intro h
exact bosonicProj_mem_fermionic a h
· intro h
have ha := bosonicProj_add_fermionicProj a
rw [h] at ha
simp_all
rw [← ha]
exact (fermionicProj a).2
lemma eq_zero_of_bosonic_and_fermionic {a : 𝓕.FieldOpAlgebra}
(hb : a ∈ statSubmodule bosonic) (hf : a ∈ statSubmodule fermionic) : a = 0 := by
have ha := bosonicProj_mem_bosonic a hb
have hb := fermionicProj_mem_fermionic a hf
have hc := (bosonicProj_add_fermionicProj a)
rw [ha, hb] at hc
simpa using hc
@[simp]
lemma bosonicProj_fermionicProj_eq_zero (a : 𝓕.FieldOpAlgebra) :
bosonicProj (fermionicProj a).1 = 0 := by
apply bosonicProj_mem_fermionic
exact Submodule.coe_mem (fermionicProj a)
@[simp]
lemma fermionicProj_bosonicProj_eq_zero (a : 𝓕.FieldOpAlgebra) :
fermionicProj (bosonicProj a).1 = 0 := by
apply fermionicProj_mem_bosonic
exact Submodule.coe_mem (bosonicProj a)
@[simp]
lemma bosonicProj_bosonicProj_eq_bosonicProj (a : 𝓕.FieldOpAlgebra) :
bosonicProj (bosonicProj a).1 = bosonicProj a := by
apply bosonicProj_mem_bosonic
@[simp]
lemma fermionicProj_fermionicProj_eq_fermionicProj (a : 𝓕.FieldOpAlgebra) :
fermionicProj (fermionicProj a).1 = fermionicProj a := by
apply fermionicProj_mem_fermionic
@[simp]
lemma bosonicProj_of_bosonic_part
(a : DirectSum FieldStatistic (fun i => (statSubmodule (𝓕 := 𝓕) i))) :
bosonicProj (a bosonic).1 = (a bosonic) := by
apply bosonicProj_mem_bosonic
@[simp]
lemma bosonicProj_of_fermionic_part
(a : DirectSum FieldStatistic (fun i => (statSubmodule (𝓕 := 𝓕) i))) :
bosonicProj (a fermionic).1 = 0 := by
apply bosonicProj_mem_fermionic
exact Submodule.coe_mem (a.toFun fermionic)
@[simp]
lemma fermionicProj_of_bosonic_part
(a : DirectSum FieldStatistic (fun i => (statSubmodule (𝓕 := 𝓕) i))) :
fermionicProj (a bosonic).1 = 0 := by
apply fermionicProj_mem_bosonic
exact Submodule.coe_mem (a.toFun bosonic)
@[simp]
lemma fermionicProj_of_fermionic_part
(a : DirectSum FieldStatistic (fun i => (statSubmodule (𝓕 := 𝓕) i))) :
fermionicProj (a fermionic).1 = (a fermionic) := by
apply fermionicProj_mem_fermionic
/-!
## The grading
-/
lemma coeAddMonoidHom_apply_eq_bosonic_plus_fermionic
(a : DirectSum FieldStatistic (fun i => (statSubmodule (𝓕 := 𝓕) i))) :
DirectSum.coeAddMonoidHom statSubmodule a = a.1 bosonic + a.1 fermionic := by
let C : DirectSum FieldStatistic (fun i => (statSubmodule (𝓕 := 𝓕) i)) → Prop :=
fun a => DirectSum.coeAddMonoidHom statSubmodule a = a.1 bosonic + a.1 fermionic
change C a
apply DirectSum.induction_on
· simp [C]
· intro i x
simp only [DFinsupp.toFun_eq_coe, DirectSum.coeAddMonoidHom_of, C]
rw [DirectSum.of_apply, DirectSum.of_apply]
match i with
| bosonic => simp
| fermionic => simp
· intro x y hx hy
simp_all only [C, DFinsupp.toFun_eq_coe, map_add, DirectSum.add_apply, Submodule.coe_add]
abel
lemma directSum_eq_bosonic_plus_fermionic
(a : DirectSum FieldStatistic (fun i => (statSubmodule (𝓕 := 𝓕) i))) :
a = (DirectSum.of (fun i => ↥(statSubmodule (𝓕 := 𝓕) i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => ↥(statSubmodule (𝓕 := 𝓕) i)) fermionic) (a fermionic) := by
let C : DirectSum FieldStatistic (fun i => (statSubmodule (𝓕 := 𝓕) i)) → Prop :=
fun a => a = (DirectSum.of (fun i => ↥(statSubmodule (𝓕 := 𝓕) i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => ↥(statSubmodule (𝓕 := 𝓕) i)) fermionic) (a fermionic)
change C a
apply DirectSum.induction_on
· simp [C]
· intro i x
simp only [C]
match i with
| bosonic =>
simp only [DirectSum.of_eq_same, self_eq_add_right]
rw [DirectSum.of_eq_of_ne]
simp only [map_zero]
simp
| fermionic =>
simp only [DirectSum.of_eq_same, add_zero]
rw [DirectSum.of_eq_of_ne]
simp only [map_zero, zero_add]
simp
· intro x y hx hy
simp only [DirectSum.add_apply, map_add, C] at hx hy ⊢
conv_lhs => rw [hx, hy]
abel
/-- For a field statistic `𝓕`, the algebra `𝓕.FieldOpAlgebra` is graded by `FieldStatistic`.
Those `ofCrAnFieldOpList φs` for which `φs` has `bosonic` statistics span one part of the grading,
whilst those where `φs` has `fermionic` statistics span the other part of the grading. -/
instance fieldOpAlgebraGrade : GradedAlgebra (A := 𝓕.FieldOpAlgebra) statSubmodule where
one_mem := by
simp only [statSubmodule]
refine Submodule.mem_span.mpr fun p a => a ?_
simp only [Set.mem_setOf_eq]
use []
simp only [ofCrAnFieldOpList, ofCrAnListF_nil, map_one, ofList_empty, true_and]
rfl
mul_mem f1 f2 a1 a2 h1 h2 := by
let p (a2 : 𝓕.FieldOpAlgebra) (hx : a2 ∈ statSubmodule f2) : Prop :=
a1 * a2 ∈ statSubmodule (f1 + f2)
change p a2 h2
apply Submodule.span_induction
· intro x hx
simp only [Set.mem_setOf_eq] at hx
obtain ⟨φs, rfl, h⟩ := hx
simp only [p]
let p (a1 : 𝓕.FieldOpAlgebra) (hx : a1 ∈ statSubmodule f1) : Prop :=
a1 * ofCrAnFieldOpList φs ∈ statSubmodule (f1 + f2)
change p a1 h1
apply Submodule.span_induction (p := p)
· intro y hy
obtain ⟨φs', rfl, h'⟩ := hy
simp only [p]
rw [← ofCrAnFieldOpList_append]
refine Submodule.mem_span.mpr fun p a => a ?_
simp only [Set.mem_setOf_eq]
use φs' ++ φs
simp only [ofList_append, h', h, true_and]
cases f1 <;> cases f2 <;> rfl
· simp [p]
· intro x y hx hy hx1 hx2
simp only [add_mul, p]
exact Submodule.add_mem _ hx1 hx2
· intro c a hx h1
simp only [Algebra.smul_mul_assoc, p]
exact Submodule.smul_mem _ _ h1
· exact h1
· simp [p]
· intro x y hx hy hx1 hx2
simp only [mul_add, p]
exact Submodule.add_mem _ hx1 hx2
· intro c a hx h1
simp only [Algebra.mul_smul_comm, p]
exact Submodule.smul_mem _ _ h1
decompose' a := DirectSum.of (fun i => (statSubmodule (𝓕 := 𝓕) i)) bosonic (bosonicProj a)
+ DirectSum.of (fun i => (statSubmodule (𝓕 := 𝓕) i)) fermionic (fermionicProj a)
left_inv a := by
trans a.bosonicProj + a.fermionicProj
· simp
· exact bosonicProj_add_fermionicProj a
right_inv a := by
rw [coeAddMonoidHom_apply_eq_bosonic_plus_fermionic]
simp only [DFinsupp.toFun_eq_coe, map_add, bosonicProj_of_bosonic_part,
bosonicProj_of_fermionic_part, add_zero, fermionicProj_of_bosonic_part,
fermionicProj_of_fermionic_part, zero_add]
conv_rhs => rw [directSum_eq_bosonic_plus_fermionic a]
end
end FieldOpAlgebra
end FieldSpecification

View file

@ -21,14 +21,14 @@ variable {𝓕 : FieldSpecification}
lemma ι_superCommuteF_eq_zero_of_ι_right_zero (a b : 𝓕.FieldOpFreeAlgebra) (h : ι b = 0) :
ι [a, b]ₛca = 0 := by
rw [superCommuteF_expand_bosonicProj_fermionicProj]
rw [ι_eq_zero_iff_ι_bosonicProj_fermonicProj_zero] at h
rw [superCommuteF_expand_bosonicProjF_fermionicProjF]
rw [ι_eq_zero_iff_ι_bosonicProjF_fermonicProj_zero] at h
simp_all
lemma ι_superCommuteF_eq_zero_of_ι_left_zero (a b : 𝓕.FieldOpFreeAlgebra) (h : ι a = 0) :
ι [a, b]ₛca = 0 := by
rw [superCommuteF_expand_bosonicProj_fermionicProj]
rw [ι_eq_zero_iff_ι_bosonicProj_fermonicProj_zero] at h
rw [superCommuteF_expand_bosonicProjF_fermionicProjF]
rw [ι_eq_zero_iff_ι_bosonicProjF_fermonicProj_zero] at h
simp_all
/-!

View file

@ -57,7 +57,7 @@ def ofCrAnOpF (φ : 𝓕.CrAnFieldOp) : FieldOpFreeAlgebra 𝓕 :=
/-- For a field specification `𝓕`, `ofCrAnListF φs` of `𝓕.FieldOpFreeAlgebra` formed by a
list `φs` of `𝓕.CrAnFieldOp`. For example for the list `[φ₁ᶜ, φ₂ᵃ, φ₃ᶜ]` we schematically
get `φ₁ᶜφ₂ᵃφ₃ᶜ`. The set of all `ofCrAnListF φs` forms a basis of `FieldOpFreeAlgebra 𝓕`. -/
get `φ₁ᶜφ₂ᵃφ₃ᶜ`. The set of all `ofCrAnListF φs` forms a basis of `FieldOpFreeAlgebra 𝓕`. -/
def ofCrAnListF (φs : List 𝓕.CrAnFieldOp) : FieldOpFreeAlgebra 𝓕 := (List.map ofCrAnOpF φs).prod
@[simp]
@ -74,7 +74,7 @@ lemma ofCrAnListF_singleton (φ : 𝓕.CrAnFieldOp) :
ofCrAnListF [φ] = ofCrAnOpF φ := by simp [ofCrAnListF]
/-- For a field specification `𝓕`, the element of `𝓕.FieldOpFreeAlgebra` formed by a
`𝓕.FieldOp` by summing over the creation and annihilation components of `𝓕.FieldOp`.
`𝓕.FieldOp` by summing over the creation and annihilation components of `𝓕.FieldOp`.
For example for `φ₁` an incoming asymptotic field operator we get `φ₁ᶜ`, and for `φ₁` a
position field operator we get `φ₁ᶜ + φ₁ᵃ`. -/
def ofFieldOpF (φ : 𝓕.FieldOp) : FieldOpFreeAlgebra 𝓕 :=

View file

@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Tooby-Smith
-/
import HepLean.PerturbationTheory.FieldOpFreeAlgebra.Basic
import HepLean.PerturbationTheory.Koszul.KoszulSign
import Mathlib.RingTheory.GradedAlgebra.Basic
/-!
@ -44,29 +43,29 @@ lemma ofCrAnOpF_bosonic_or_fermionic (φ : 𝓕.CrAnFieldOp) :
exact ofCrAnListF_bosonic_or_fermionic [φ]
/-- The projection of an element of `FieldOpFreeAlgebra` onto it's bosonic part. -/
def bosonicProj : 𝓕.FieldOpFreeAlgebra →ₗ[] statisticSubmodule (𝓕 := 𝓕) bosonic :=
def bosonicProjF : 𝓕.FieldOpFreeAlgebra →ₗ[] statisticSubmodule (𝓕 := 𝓕) bosonic :=
Basis.constr ofCrAnListFBasis fun φs =>
if h : (𝓕 |>ₛ φs) = bosonic then
⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩⟩
else
0
lemma bosonicProj_ofCrAnListF (φs : List 𝓕.CrAnFieldOp) :
bosonicProj (ofCrAnListF φs) = if h : (𝓕 |>ₛ φs) = bosonic then
lemma bosonicProjF_ofCrAnListF (φs : List 𝓕.CrAnFieldOp) :
bosonicProjF (ofCrAnListF φs) = if h : (𝓕 |>ₛ φs) = bosonic then
⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩⟩ else 0 := by
conv_lhs =>
rw [← ofListBasis_eq_ofList, bosonicProj, Basis.constr_basis]
rw [← ofListBasis_eq_ofList, bosonicProjF, Basis.constr_basis]
lemma bosonicProj_of_mem_bosonic (a : 𝓕.FieldOpFreeAlgebra) (h : a ∈ statisticSubmodule bosonic) :
bosonicProj a = ⟨a, h⟩ := by
lemma bosonicProjF_of_mem_bosonic (a : 𝓕.FieldOpFreeAlgebra) (h : a ∈ statisticSubmodule bosonic) :
bosonicProjF a = ⟨a, h⟩ := by
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule bosonic) : Prop :=
bosonicProj a = ⟨a, hx⟩
bosonicProjF a = ⟨a, hx⟩
change p a h
apply Submodule.span_induction
· intro x hx
simp only [Set.mem_setOf_eq] at hx
obtain ⟨φs, rfl, h⟩ := hx
simp [p, bosonicProj_ofCrAnListF, h]
simp [p, bosonicProjF_ofCrAnListF, h]
· simp only [map_zero, p]
rfl
· intro x y hx hy hpx hpy
@ -74,17 +73,17 @@ lemma bosonicProj_of_mem_bosonic (a : 𝓕.FieldOpFreeAlgebra) (h : a ∈ statis
· intro a x hx hy
simp_all [p]
lemma bosonicProj_of_mem_fermionic (a : 𝓕.FieldOpFreeAlgebra)
lemma bosonicProjF_of_mem_fermionic (a : 𝓕.FieldOpFreeAlgebra)
(h : a ∈ statisticSubmodule fermionic) :
bosonicProj a = 0 := by
bosonicProjF a = 0 := by
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule fermionic) : Prop :=
bosonicProj a = 0
bosonicProjF a = 0
change p a h
apply Submodule.span_induction
· intro x hx
simp only [Set.mem_setOf_eq] at hx
obtain ⟨φs, rfl, h⟩ := hx
simp [p, bosonicProj_ofCrAnListF, h]
simp [p, bosonicProjF_ofCrAnListF, h]
· simp [p]
· intro x y hx hy hpx hpy
simp_all [p]
@ -92,54 +91,54 @@ lemma bosonicProj_of_mem_fermionic (a : 𝓕.FieldOpFreeAlgebra)
simp_all [p]
@[simp]
lemma bosonicProj_of_bonosic_part
lemma bosonicProjF_of_bonosic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i))) :
bosonicProj (a bosonic) = a bosonic := by
apply bosonicProj_of_mem_bosonic
bosonicProjF (a bosonic) = a bosonic := by
apply bosonicProjF_of_mem_bosonic
@[simp]
lemma bosonicProj_of_fermionic_part
lemma bosonicProjF_of_fermionic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i))) :
bosonicProj (a fermionic).1 = 0 := by
apply bosonicProj_of_mem_fermionic
bosonicProjF (a fermionic).1 = 0 := by
apply bosonicProjF_of_mem_fermionic
exact Submodule.coe_mem (a.toFun fermionic)
/-- The projection of an element of `FieldOpFreeAlgebra` onto it's fermionic part. -/
def fermionicProj : 𝓕.FieldOpFreeAlgebra →ₗ[] statisticSubmodule (𝓕 := 𝓕) fermionic :=
def fermionicProjF : 𝓕.FieldOpFreeAlgebra →ₗ[] statisticSubmodule (𝓕 := 𝓕) fermionic :=
Basis.constr ofCrAnListFBasis fun φs =>
if h : (𝓕 |>ₛ φs) = fermionic then
⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩⟩
else
0
lemma fermionicProj_ofCrAnListF (φs : List 𝓕.CrAnFieldOp) :
fermionicProj (ofCrAnListF φs) = if h : (𝓕 |>ₛ φs) = fermionic then
lemma fermionicProjF_ofCrAnListF (φs : List 𝓕.CrAnFieldOp) :
fermionicProjF (ofCrAnListF φs) = if h : (𝓕 |>ₛ φs) = fermionic then
⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩⟩ else 0 := by
conv_lhs =>
rw [← ofListBasis_eq_ofList, fermionicProj, Basis.constr_basis]
rw [← ofListBasis_eq_ofList, fermionicProjF, Basis.constr_basis]
lemma fermionicProj_ofCrAnListF_if_bosonic (φs : List 𝓕.CrAnFieldOp) :
fermionicProj (ofCrAnListF φs) = if h : (𝓕 |>ₛ φs) = bosonic then
lemma fermionicProjF_ofCrAnListF_if_bosonic (φs : List 𝓕.CrAnFieldOp) :
fermionicProjF (ofCrAnListF φs) = if h : (𝓕 |>ₛ φs) = bosonic then
0 else ⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl,
by simpa using h⟩⟩⟩ := by
rw [fermionicProj_ofCrAnListF]
rw [fermionicProjF_ofCrAnListF]
by_cases h1 : (𝓕 |>ₛ φs) = fermionic
· simp [h1]
· simp only [h1, ↓reduceDIte]
simp only [neq_fermionic_iff_eq_bosonic] at h1
simp [h1]
lemma fermionicProj_of_mem_fermionic (a : 𝓕.FieldOpFreeAlgebra)
lemma fermionicProjF_of_mem_fermionic (a : 𝓕.FieldOpFreeAlgebra)
(h : a ∈ statisticSubmodule fermionic) :
fermionicProj a = ⟨a, h⟩ := by
fermionicProjF a = ⟨a, h⟩ := by
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule fermionic) : Prop :=
fermionicProj a = ⟨a, hx⟩
fermionicProjF a = ⟨a, hx⟩
change p a h
apply Submodule.span_induction
· intro x hx
simp only [Set.mem_setOf_eq] at hx
obtain ⟨φs, rfl, h⟩ := hx
simp [p, fermionicProj_ofCrAnListF, h]
simp [p, fermionicProjF_ofCrAnListF, h]
· simp only [map_zero, p]
rfl
· intro x y hx hy hpx hpy
@ -147,16 +146,16 @@ lemma fermionicProj_of_mem_fermionic (a : 𝓕.FieldOpFreeAlgebra)
· intro a x hx hy
simp_all [p]
lemma fermionicProj_of_mem_bosonic (a : 𝓕.FieldOpFreeAlgebra) (h : a ∈ statisticSubmodule bosonic) :
fermionicProj a = 0 := by
lemma fermionicProjF_of_mem_bosonic (a : 𝓕.FieldOpFreeAlgebra)
(h : a ∈ statisticSubmodule bosonic) : fermionicProjF a = 0 := by
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule bosonic) : Prop :=
fermionicProj a = 0
fermionicProjF a = 0
change p a h
apply Submodule.span_induction
· intro x hx
simp only [Set.mem_setOf_eq] at hx
obtain ⟨φs, rfl, h⟩ := hx
simp [p, fermionicProj_ofCrAnListF, h]
simp [p, fermionicProjF_ofCrAnListF, h]
· simp [p]
· intro x y hx hy hpx hpy
simp_all [p]
@ -164,29 +163,29 @@ lemma fermionicProj_of_mem_bosonic (a : 𝓕.FieldOpFreeAlgebra) (h : a ∈ stat
simp_all [p]
@[simp]
lemma fermionicProj_of_bosonic_part
lemma fermionicProjF_of_bosonic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i))) :
fermionicProj (a bosonic).1 = 0 := by
apply fermionicProj_of_mem_bosonic
fermionicProjF (a bosonic).1 = 0 := by
apply fermionicProjF_of_mem_bosonic
exact Submodule.coe_mem (a.toFun bosonic)
@[simp]
lemma fermionicProj_of_fermionic_part
lemma fermionicProjF_of_fermionic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i))) :
fermionicProj (a fermionic) = a fermionic := by
apply fermionicProj_of_mem_fermionic
fermionicProjF (a fermionic) = a fermionic := by
apply fermionicProjF_of_mem_fermionic
lemma bosonicProj_add_fermionicProj (a : 𝓕.FieldOpFreeAlgebra) :
a.bosonicProj + (a.fermionicProj).1 = a := by
lemma bosonicProjF_add_fermionicProjF (a : 𝓕.FieldOpFreeAlgebra) :
a.bosonicProjF + (a.fermionicProjF).1 = a := by
let f1 :𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra :=
(statisticSubmodule bosonic).subtype ∘ₗ bosonicProj
(statisticSubmodule bosonic).subtype ∘ₗ bosonicProjF
let f2 :𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra :=
(statisticSubmodule fermionic).subtype ∘ₗ fermionicProj
(statisticSubmodule fermionic).subtype ∘ₗ fermionicProjF
change (f1 + f2) a = LinearMap.id (R := ) a
refine LinearMap.congr_fun (ofCrAnListFBasis.ext fun φs ↦ ?_) a
simp only [ofListBasis_eq_ofList, LinearMap.add_apply, LinearMap.coe_comp, Submodule.coe_subtype,
Function.comp_apply, LinearMap.id_coe, id_eq, f1, f2]
rw [bosonicProj_ofCrAnListF, fermionicProj_ofCrAnListF_if_bosonic]
rw [bosonicProjF_ofCrAnListF, fermionicProjF_ofCrAnListF_if_bosonic]
by_cases h : (𝓕 |>ₛ φs) = bosonic
· simp [h]
· simp [h]
@ -287,39 +286,39 @@ instance fieldOpFreeAlgebraGrade :
simp only [Algebra.mul_smul_comm, p]
exact Submodule.smul_mem _ _ h1
· exact h2
decompose' a := DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) bosonic (bosonicProj a)
+ DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) fermionic (fermionicProj a)
decompose' a := DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) bosonic (bosonicProjF a)
+ DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) fermionic (fermionicProjF a)
left_inv a := by
trans a.bosonicProj + fermionicProj a
trans a.bosonicProjF + fermionicProjF a
· simp
· exact bosonicProj_add_fermionicProj a
· exact bosonicProjF_add_fermionicProjF a
right_inv a := by
rw [coeAddMonoidHom_apply_eq_bosonic_plus_fermionic]
simp only [DFinsupp.toFun_eq_coe, map_add, bosonicProj_of_bonosic_part,
bosonicProj_of_fermionic_part, add_zero, fermionicProj_of_bosonic_part,
fermionicProj_of_fermionic_part, zero_add]
simp only [DFinsupp.toFun_eq_coe, map_add, bosonicProjF_of_bonosic_part,
bosonicProjF_of_fermionic_part, add_zero, fermionicProjF_of_bosonic_part,
fermionicProjF_of_fermionic_part, zero_add]
conv_rhs => rw [directSum_eq_bosonic_plus_fermionic a]
lemma eq_zero_of_bosonic_and_fermionic {a : 𝓕.FieldOpFreeAlgebra}
(hb : a ∈ statisticSubmodule bosonic) (hf : a ∈ statisticSubmodule fermionic) : a = 0 := by
have ha := bosonicProj_of_mem_bosonic a hb
have hb := fermionicProj_of_mem_fermionic a hf
have hc := (bosonicProj_add_fermionicProj a)
have ha := bosonicProjF_of_mem_bosonic a hb
have hb := fermionicProjF_of_mem_fermionic a hf
have hc := (bosonicProjF_add_fermionicProjF a)
rw [ha, hb] at hc
simpa using hc
lemma bosonicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
(a * b).bosonicProj.1 = a.bosonicProj.1 * b.bosonicProj.1
+ a.fermionicProj.1 * b.fermionicProj.1 := by
lemma bosonicProjF_mul (a b : 𝓕.FieldOpFreeAlgebra) :
(a * b).bosonicProjF.1 = a.bosonicProjF.1 * b.bosonicProjF.1
+ a.fermionicProjF.1 * b.fermionicProjF.1 := by
conv_lhs =>
rw [← bosonicProj_add_fermionicProj a]
rw [← bosonicProj_add_fermionicProj b]
rw [← bosonicProjF_add_fermionicProjF a]
rw [← bosonicProjF_add_fermionicProjF b]
simp only [mul_add, add_mul, map_add, Submodule.coe_add]
rw [bosonicProj_of_mem_bosonic]
rw [bosonicProjF_of_mem_bosonic]
conv_lhs =>
left
right
rw [bosonicProj_of_mem_fermionic _
rw [bosonicProjF_of_mem_fermionic _
(by
have h1 : fermionic = fermionic + bosonic := by simp
conv_lhs => rw [h1]
@ -329,7 +328,7 @@ lemma bosonicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
conv_lhs =>
right
left
rw [bosonicProj_of_mem_fermionic _
rw [bosonicProjF_of_mem_fermionic _
(by
have h1 : fermionic = bosonic + fermionic := by simp
conv_lhs => rw [h1]
@ -339,7 +338,7 @@ lemma bosonicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
conv_lhs =>
right
right
rw [bosonicProj_of_mem_bosonic _
rw [bosonicProjF_of_mem_bosonic _
(by
have h1 : bosonic = fermionic + fermionic := by
simp only [add_eq_mul, instCommGroup, mul_self]
@ -357,17 +356,17 @@ lemma bosonicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
simp only [SetLike.coe_mem]
simp
lemma fermionicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
(a * b).fermionicProj.1 = a.bosonicProj.1 * b.fermionicProj.1
+ a.fermionicProj.1 * b.bosonicProj.1 := by
lemma fermionicProjF_mul (a b : 𝓕.FieldOpFreeAlgebra) :
(a * b).fermionicProjF.1 = a.bosonicProjF.1 * b.fermionicProjF.1
+ a.fermionicProjF.1 * b.bosonicProjF.1 := by
conv_lhs =>
rw [← bosonicProj_add_fermionicProj a]
rw [← bosonicProj_add_fermionicProj b]
rw [← bosonicProjF_add_fermionicProjF a]
rw [← bosonicProjF_add_fermionicProjF b]
simp only [mul_add, add_mul, map_add, Submodule.coe_add]
conv_lhs =>
left
left
rw [fermionicProj_of_mem_bosonic _
rw [fermionicProjF_of_mem_bosonic _
(by
have h1 : bosonic = bosonic + bosonic := by
simp only [add_eq_mul, instCommGroup, mul_self]
@ -379,7 +378,7 @@ lemma fermionicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
conv_lhs =>
left
right
rw [fermionicProj_of_mem_fermionic _
rw [fermionicProjF_of_mem_fermionic _
(by
have h1 : fermionic = fermionic + bosonic := by simp
conv_lhs => rw [h1]
@ -389,7 +388,7 @@ lemma fermionicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
conv_lhs =>
right
left
rw [fermionicProj_of_mem_fermionic _
rw [fermionicProjF_of_mem_fermionic _
(by
have h1 : fermionic = bosonic + fermionic := by simp
conv_lhs => rw [h1]
@ -399,7 +398,7 @@ lemma fermionicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
conv_lhs =>
right
right
rw [fermionicProj_of_mem_bosonic _
rw [fermionicProjF_of_mem_bosonic _
(by
have h1 : bosonic = fermionic + fermionic := by
simp only [add_eq_mul, instCommGroup, mul_self]

View file

@ -27,7 +27,7 @@ open FieldStatistic
map `𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra` such that
`superCommuteF (φ₀ᶜ…φₙᵃ) (φ₀'ᶜ…φₙ'ᶜ)` is equal to
`φ₀ᶜ…φₙᵃ * φ₀'ᶜ…φₙ'ᶜ - 𝓢(φ₀ᶜ…φₙᵃ, φ₀'ᶜ…φₙ'ᶜ) φ₀'ᶜ…φₙ'ᶜ * φ₀ᶜ…φₙᵃ`.
The notation `[a, b]ₛca` is used for this super commutator. -/
The notation `[a, b]ₛca` is used for this super commutator. -/
noncomputable def superCommuteF : 𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra →ₗ[]
𝓕.FieldOpFreeAlgebra :=
Basis.constr ofCrAnListFBasis fun φs =>
@ -637,7 +637,7 @@ lemma superCommuteF_fermionic_bonsonic {a b : 𝓕.FieldOpFreeAlgebra}
lemma superCommuteF_bonsonic {a b : 𝓕.FieldOpFreeAlgebra} (hb : b ∈ statisticSubmodule bosonic) :
[a, b]ₛca = a * b - b * a := by
rw [← bosonicProj_add_fermionicProj a]
rw [← bosonicProjF_add_fermionicProjF a]
simp only [map_add, LinearMap.add_apply]
rw [superCommuteF_bosonic_bosonic (by simp) hb, superCommuteF_fermionic_bonsonic (by simp) hb]
simp only [add_mul, mul_add]
@ -645,7 +645,7 @@ lemma superCommuteF_bonsonic {a b : 𝓕.FieldOpFreeAlgebra} (hb : b ∈ statist
lemma bosonic_superCommuteF {a b : 𝓕.FieldOpFreeAlgebra} (ha : a ∈ statisticSubmodule bosonic) :
[a, b]ₛca = a * b - b * a := by
rw [← bosonicProj_add_fermionicProj b]
rw [← bosonicProjF_add_fermionicProjF b]
simp only [map_add, LinearMap.add_apply]
rw [superCommuteF_bosonic_bosonic ha (by simp), superCommuteF_bosonic_fermionic ha (by simp)]
simp only [add_mul, mul_add]
@ -703,12 +703,12 @@ lemma superCommuteF_fermionic_fermionic_symm {a b : 𝓕.FieldOpFreeAlgebra}
rw [superCommuteF_fermionic_fermionic hb ha]
abel
lemma superCommuteF_expand_bosonicProj_fermionicProj (a b : 𝓕.FieldOpFreeAlgebra) :
[a, b]ₛca = bosonicProj a * bosonicProj b - bosonicProj b * bosonicProj a +
bosonicProj a * fermionicProj b - fermionicProj b * bosonicProj a +
fermionicProj a * bosonicProj b - bosonicProj b * fermionicProj a +
fermionicProj a * fermionicProj b + fermionicProj b * fermionicProj a := by
conv_lhs => rw [← bosonicProj_add_fermionicProj a, ← bosonicProj_add_fermionicProj b]
lemma superCommuteF_expand_bosonicProjF_fermionicProjF (a b : 𝓕.FieldOpFreeAlgebra) :
[a, b]ₛca = bosonicProjF a * bosonicProjF b - bosonicProjF b * bosonicProjF a +
bosonicProjF a * fermionicProjF b - fermionicProjF b * bosonicProjF a +
fermionicProjF a * bosonicProjF b - bosonicProjF b * fermionicProjF a +
fermionicProjF a * fermionicProjF b + fermionicProjF b * fermionicProjF a := by
conv_lhs => rw [← bosonicProjF_add_fermionicProjF a, ← bosonicProjF_add_fermionicProjF b]
simp only [map_add, LinearMap.add_apply]
rw [superCommuteF_bonsonic (by simp),
superCommuteF_fermionic_bonsonic (by simp) (by simp),

View file

@ -191,9 +191,9 @@ lemma timeOrderF_superCommuteF_ofCrAnOpF_ofCrAnOpF_not_crAnTimeOrderRel_mid
lemma timeOrderF_superCommuteF_superCommuteF_ofCrAnOpF_not_crAnTimeOrderRel
{φ1 φ2 : 𝓕.CrAnFieldOp} (h : ¬ crAnTimeOrderRel φ1 φ2) (a : 𝓕.FieldOpFreeAlgebra) :
𝓣ᶠ([a, [ofCrAnOpF φ1, ofCrAnOpF φ2]ₛca]ₛca) = 0 := by
rw [← bosonicProj_add_fermionicProj a]
rw [← bosonicProjF_add_fermionicProjF a]
simp only [map_add, LinearMap.add_apply]
rw [bosonic_superCommuteF (Submodule.coe_mem (bosonicProj a))]
rw [bosonic_superCommuteF (Submodule.coe_mem (bosonicProjF a))]
simp only [map_sub]
rw [timeOrderF_superCommuteF_ofCrAnOpF_ofCrAnOpF_not_crAnTimeOrderRel_left h]
rw [timeOrderF_superCommuteF_ofCrAnOpF_ofCrAnOpF_not_crAnTimeOrderRel_right h]
@ -205,7 +205,7 @@ lemma timeOrderF_superCommuteF_superCommuteF_ofCrAnOpF_not_crAnTimeOrderRel
rw [timeOrderF_superCommuteF_ofCrAnOpF_ofCrAnOpF_not_crAnTimeOrderRel_left h]
rw [timeOrderF_superCommuteF_ofCrAnOpF_ofCrAnOpF_not_crAnTimeOrderRel_right h]
simp
· rw [superCommuteF_fermionic_fermionic (Submodule.coe_mem (fermionicProj a)) h']
· rw [superCommuteF_fermionic_fermionic (Submodule.coe_mem (fermionicProjF a)) h']
simp only [ofCrAnListF_singleton, map_add]
rw [timeOrderF_superCommuteF_ofCrAnOpF_ofCrAnOpF_not_crAnTimeOrderRel_left h]
rw [timeOrderF_superCommuteF_ofCrAnOpF_ofCrAnOpF_not_crAnTimeOrderRel_right h]