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.FieldOpFreeAlgebra.Basic
public import Mathlib.RingTheory.GradedAlgebra.BasicGrading on the FieldOpFreeAlgebra
@[expose] public section
The submodule of FieldOpFreeAlgebra spanned by lists of field statistic f.
def statisticSubmodule (f : FieldStatistic) : Submodule β π.FieldOpFreeAlgebra :=
Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ (π |>β Οs) = f}lemma ofCrAnListF_mem_statisticSubmodule_of (Οs : List π.CrAnFieldOp) (f : FieldStatistic)
(h : (π |>β Οs) = f) :
ofCrAnListF Οs β statisticSubmodule f := π:FieldSpecificationΟs:List π.CrAnFieldOpf:FieldStatistich:ofList π.crAnStatistics Οs = fβ’ ofCrAnListF Οs β statisticSubmodule f
All goals completed! πlemma ofCrAnListF_bosonic_or_fermionic (Οs : List π.CrAnFieldOp) :
ofCrAnListF Οs β statisticSubmodule bosonic β¨
ofCrAnListF Οs β statisticSubmodule fermionic := π:FieldSpecificationΟs:List π.CrAnFieldOpβ’ ofCrAnListF Οs β statisticSubmodule bosonic β¨ ofCrAnListF Οs β statisticSubmodule fermionic
π:FieldSpecificationΟs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = bosonicβ’ ofCrAnListF Οs β statisticSubmodule bosonic β¨ ofCrAnListF Οs β statisticSubmodule fermionicπ:FieldSpecificationΟs:List π.CrAnFieldOph:Β¬ofList π.crAnStatistics Οs = bosonicβ’ ofCrAnListF Οs β statisticSubmodule bosonic β¨ ofCrAnListF Οs β statisticSubmodule fermionic
π:FieldSpecificationΟs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = bosonicβ’ ofCrAnListF Οs β statisticSubmodule bosonic β¨ ofCrAnListF Οs β statisticSubmodule fermionic π:FieldSpecificationΟs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = bosonicβ’ ofCrAnListF Οs β statisticSubmodule bosonic
All goals completed! π
π:FieldSpecificationΟs:List π.CrAnFieldOph:Β¬ofList π.crAnStatistics Οs = bosonicβ’ ofCrAnListF Οs β statisticSubmodule bosonic β¨ ofCrAnListF Οs β statisticSubmodule fermionic π:FieldSpecificationΟs:List π.CrAnFieldOph:Β¬ofList π.crAnStatistics Οs = bosonicβ’ ofCrAnListF Οs β statisticSubmodule fermionic
exact ofCrAnListF_mem_statisticSubmodule_of Οs fermionic (π:FieldSpecificationΟs:List π.CrAnFieldOph:Β¬ofList π.crAnStatistics Οs = bosonicβ’ ofList π.crAnStatistics Οs = fermionic All goals completed! π)π:FieldSpecificationΟ:π.CrAnFieldOpβ’ ofCrAnListF [Ο] β statisticSubmodule bosonic β¨ ofCrAnListF [Ο] β statisticSubmodule fermionic
exact ofCrAnListF_bosonic_or_fermionic [Ο] All goals completed! π
The projection of an element of FieldOpFreeAlgebra onto it's bosonic part.
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
0lemma 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 π:FieldSpecificationΟs:List π.CrAnFieldOpβ’ bosonicProjF (ofCrAnListF Οs) = if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0
conv_lhs =>
rw [β ofListBasis_eq_ofList, bosonicProjF, Basis.constr_basis] π:FieldSpecificationΟs:List π.CrAnFieldOp| if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0set_option backward.isDefEq.respectTransparency false in
lemma bosonicProjF_of_mem_bosonic (a : π.FieldOpFreeAlgebra) (h : a β statisticSubmodule bosonic) :
bosonicProjF a = β¨a, hβ© := by π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicβ’ bosonicProjF a = β¨a, hβ©
let p (a : π.FieldOpFreeAlgebra) (hx : a β statisticSubmodule bosonic) : Prop :=
bosonicProjF a = β¨a, hxβ© π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ bosonicProjF a = β¨a, hβ©
change p a h π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ p a h
apply Submodule.span_induction mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}), p x β―zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ p 0 β―add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}),
p x hx β p y hy β p (x + y) β―smul π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}),
p x hx β p (a β’ x) β―
Β· mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}), p x β― intro x hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©x:π.FieldOpFreeAlgebrahx:x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}β’ p x β―
simp only [Set.mem_setOf_eq] at hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©x:π.FieldOpFreeAlgebrahx:β Οs, x = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonicβ’ p x β―
obtain β¨Οs, rfl, hβ© := hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrahβ:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = bosonicβ’ p (ofCrAnListF Οs) β―
simp [p, bosonicProjF_ofCrAnListF, h] All goals completed! π
Β· zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ p 0 β― simp only [map_zero, p] zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ 0 = β¨0, β―β©
rfl All goals completed! π
Β· add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}),
p x hx β p y hy β p (x + y) β― intro x y hx hy hpx hpy add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©x:π.FieldOpFreeAlgebray:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}hy:y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}hpx:p x hxhpy:p y hyβ’ p (x + y) β―
simp_all [p] All goals completed! π
Β· smul π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}),
p x hx β p (a β’ x) β― intro a x hx hy smul π:FieldSpecificationaβ:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => bosonicProjF a = β¨a, hxβ©a:βx:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}hy:p x hxβ’ p (a β’ x) β―
simp_all [p] All goals completed! πlemma bosonicProjF_of_mem_fermionic (a : π.FieldOpFreeAlgebra)
(h : a β statisticSubmodule fermionic) :
bosonicProjF a = 0 := by π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicβ’ bosonicProjF a = 0
let p (a : π.FieldOpFreeAlgebra) (hx : a β statisticSubmodule fermionic) : Prop :=
bosonicProjF a = 0 π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ bosonicProjF a = 0
change p a h π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ p a h
apply Submodule.span_induction mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}), p x β―zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ p 0 β―add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}),
p x hx β p y hy β p (x + y) β―smul π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}),
p x hx β p (a β’ x) β―
Β· mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}), p x β― intro x hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0x:π.FieldOpFreeAlgebrahx:x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}β’ p x β―
simp only [Set.mem_setOf_eq] at hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0x:π.FieldOpFreeAlgebrahx:β Οs, x = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionicβ’ p x β―
obtain β¨Οs, rfl, hβ© := hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrahβ:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = fermionicβ’ p (ofCrAnListF Οs) β―
simp [p, bosonicProjF_ofCrAnListF, h] All goals completed! π
Β· zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ p 0 β― simp [p] All goals completed! π
Β· add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}),
p x hx β p y hy β p (x + y) β― intro x y hx hy hpx hpy add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0x:π.FieldOpFreeAlgebray:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}hy:y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}hpx:p x hxhpy:p y hyβ’ p (x + y) β―
simp_all [p] All goals completed! π
Β· smul π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}),
p x hx β p (a β’ x) β― intro a x hx hy smul π:FieldSpecificationaβ:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => bosonicProjF a = 0a:βx:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}hy:p x hxβ’ p (a β’ x) β―
simp_all [p] All goals completed! π@[simp]
lemma bosonicProjF_of_bonosic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (π := π) i))) :
bosonicProjF (a bosonic) = a bosonic := by π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ bosonicProjF β(a bosonic) = a bosonic
apply bosonicProjF_of_mem_bosonic All goals completed! π@[simp]
lemma bosonicProjF_of_fermionic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (π := π) i))) :
bosonicProjF (a fermionic).1 = 0 := by π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ bosonicProjF β(a fermionic) = 0
apply bosonicProjF_of_mem_fermionic π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ β(a fermionic) β statisticSubmodule fermionic
exact Submodule.coe_mem (a.toFun fermionic) All goals completed! π
The projection of an element of FieldOpFreeAlgebra onto it's fermionic part.
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
0lemma 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 π:FieldSpecificationΟs:List π.CrAnFieldOpβ’ fermionicProjF (ofCrAnListF Οs) = if h : ofList π.crAnStatistics Οs = fermionic then β¨ofCrAnListF Οs, β―β© else 0
conv_lhs =>
rw [β ofListBasis_eq_ofList, fermionicProjF, Basis.constr_basis] π:FieldSpecificationΟs:List π.CrAnFieldOp| if h : ofList π.crAnStatistics Οs = fermionic then β¨ofCrAnListF Οs, β―β© else 0
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 π:FieldSpecificationΟs:List π.CrAnFieldOph:Β¬ofList π.crAnStatistics Οs = bosonicxβ:Submodule β π.FieldOpFreeAlgebraa:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic} β βxββ’ ofList π.crAnStatistics Οs = fermionic simpa using h All goals completed! πβ©β©β© := by π:FieldSpecificationΟs:List π.CrAnFieldOpβ’ fermionicProjF (ofCrAnListF Οs) = if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©
rw [fermionicProjF_ofCrAnListF π:FieldSpecificationΟs:List π.CrAnFieldOpβ’ (if h : ofList π.crAnStatistics Οs = fermionic then β¨ofCrAnListF Οs, β―β© else 0) =
if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β© π:FieldSpecificationΟs:List π.CrAnFieldOpβ’ (if h : ofList π.crAnStatistics Οs = fermionic then β¨ofCrAnListF Οs, β―β© else 0) =
if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©] π:FieldSpecificationΟs:List π.CrAnFieldOpβ’ (if h : ofList π.crAnStatistics Οs = fermionic then β¨ofCrAnListF Οs, β―β© else 0) =
if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©
by_cases h1 : (π |>β Οs) = fermionic pos π:FieldSpecificationΟs:List π.CrAnFieldOph1:ofList π.crAnStatistics Οs = fermionicβ’ (if h : ofList π.crAnStatistics Οs = fermionic then β¨ofCrAnListF Οs, β―β© else 0) =
if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©neg π:FieldSpecificationΟs:List π.CrAnFieldOph1:Β¬ofList π.crAnStatistics Οs = fermionicβ’ (if h : ofList π.crAnStatistics Οs = fermionic then β¨ofCrAnListF Οs, β―β© else 0) =
if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©
Β· pos π:FieldSpecificationΟs:List π.CrAnFieldOph1:ofList π.crAnStatistics Οs = fermionicβ’ (if h : ofList π.crAnStatistics Οs = fermionic then β¨ofCrAnListF Οs, β―β© else 0) =
if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β© simp [h1] All goals completed! π
Β· neg π:FieldSpecificationΟs:List π.CrAnFieldOph1:Β¬ofList π.crAnStatistics Οs = fermionicβ’ (if h : ofList π.crAnStatistics Οs = fermionic then β¨ofCrAnListF Οs, β―β© else 0) =
if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β© simp only [h1, βreduceDIte] neg π:FieldSpecificationΟs:List π.CrAnFieldOph1:Β¬ofList π.crAnStatistics Οs = fermionicβ’ 0 = if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©
simp only [neq_fermionic_iff_eq_bosonic] at h1 neg π:FieldSpecificationΟs:List π.CrAnFieldOph1:ofList π.crAnStatistics Οs = bosonicβ’ 0 = if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©
simp [h1] All goals completed! πset_option backward.isDefEq.respectTransparency false in
lemma fermionicProjF_of_mem_fermionic (a : π.FieldOpFreeAlgebra)
(h : a β statisticSubmodule fermionic) :
fermionicProjF a = β¨a, hβ© := by π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicβ’ fermionicProjF a = β¨a, hβ©
let p (a : π.FieldOpFreeAlgebra) (hx : a β statisticSubmodule fermionic) : Prop :=
fermionicProjF a = β¨a, hxβ© π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ fermionicProjF a = β¨a, hβ©
change p a h π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ p a h
apply Submodule.span_induction mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}), p x β―zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ p 0 β―add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}),
p x hx β p y hy β p (x + y) β―smul π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}),
p x hx β p (a β’ x) β―
Β· mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}), p x β― intro x hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©x:π.FieldOpFreeAlgebrahx:x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}β’ p x β―
simp only [Set.mem_setOf_eq] at hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©x:π.FieldOpFreeAlgebrahx:β Οs, x = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionicβ’ p x β―
obtain β¨Οs, rfl, hβ© := hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrahβ:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = fermionicβ’ p (ofCrAnListF Οs) β―
simp [p, fermionicProjF_ofCrAnListF, h] All goals completed! π
Β· zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ p 0 β― simp only [map_zero, p] zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ 0 = β¨0, β―β©
rfl All goals completed! π
Β· add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}),
p x hx β p y hy β p (x + y) β― intro x y hx hy hpx hpy add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©x:π.FieldOpFreeAlgebray:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}hy:y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}hpx:p x hxhpy:p y hyβ’ p (x + y) β―
simp_all [p] All goals completed! π
Β· smul π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}),
p x hx β p (a β’ x) β― intro a x hx hy smul π:FieldSpecificationaβ:π.FieldOpFreeAlgebrah:a β statisticSubmodule fermionicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule fermionic β Prop := fun a hx => fermionicProjF a = β¨a, hxβ©a:βx:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic}hy:p x hxβ’ p (a β’ x) β―
simp_all [p] All goals completed! πlemma fermionicProjF_of_mem_bosonic (a : π.FieldOpFreeAlgebra)
(h : a β statisticSubmodule bosonic) : fermionicProjF a = 0 := by π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicβ’ fermionicProjF a = 0
let p (a : π.FieldOpFreeAlgebra) (hx : a β statisticSubmodule bosonic) : Prop :=
fermionicProjF a = 0 π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ fermionicProjF a = 0
change p a h π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ p a h
apply Submodule.span_induction mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}), p x β―zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ p 0 β―add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}),
p x hx β p y hy β p (x + y) β―smul π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}),
p x hx β p (a β’ x) β―
Β· mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}), p x β― intro x hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0x:π.FieldOpFreeAlgebrahx:x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}β’ p x β―
simp only [Set.mem_setOf_eq] at hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0x:π.FieldOpFreeAlgebrahx:β Οs, x = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonicβ’ p x β―
obtain β¨Οs, rfl, hβ© := hx mem π:FieldSpecificationa:π.FieldOpFreeAlgebrahβ:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = bosonicβ’ p (ofCrAnListF Οs) β―
simp [p, fermionicProjF_ofCrAnListF, h] All goals completed! π
Β· zero π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ p 0 β― simp [p] All goals completed! π
Β· add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}),
p x hx β p y hy β p (x + y) β― intro x y hx hy hpx hpy add π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0x:π.FieldOpFreeAlgebray:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}hy:y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}hpx:p x hxhpy:p y hyβ’ p (x + y) β―
simp_all [p] All goals completed! π
Β· smul π:FieldSpecificationa:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}),
p x hx β p (a β’ x) β― intro a x hx hy smul π:FieldSpecificationaβ:π.FieldOpFreeAlgebrah:a β statisticSubmodule bosonicp:(a : π.FieldOpFreeAlgebra) β a β statisticSubmodule bosonic β Prop := fun a hx => fermionicProjF a = 0a:βx:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic}hy:p x hxβ’ p (a β’ x) β―
simp_all [p] All goals completed! π@[simp]
lemma fermionicProjF_of_bosonic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (π := π) i))) :
fermionicProjF (a bosonic).1 = 0 := by π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ fermionicProjF β(a bosonic) = 0
apply fermionicProjF_of_mem_bosonic π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ β(a bosonic) β statisticSubmodule bosonic
exact Submodule.coe_mem (a.toFun bosonic) All goals completed! π@[simp]
lemma fermionicProjF_of_fermionic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (π := π) i))) :
fermionicProjF (a fermionic) = a fermionic := by π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ fermionicProjF β(a fermionic) = a fermionic
apply fermionicProjF_of_mem_fermionic All goals completed! π
lemma bosonicProjF_add_fermionicProjF (a : π.FieldOpFreeAlgebra) :
a.bosonicProjF + (a.fermionicProjF).1 = a := by π:FieldSpecificationa:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) + β(fermionicProjF a) = a
let f1 :π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra :=
(statisticSubmodule bosonic).subtype ββ bosonicProjF π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFβ’ β(bosonicProjF a) + β(fermionicProjF a) = a
let f2 :π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra :=
(statisticSubmodule fermionic).subtype ββ fermionicProjF π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFβ’ β(bosonicProjF a) + β(fermionicProjF a) = a
change (f1 + f2) a = LinearMap.id (R := β) a π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFβ’ (f1 + f2) a = LinearMap.id a
refine LinearMap.congr_fun (ofCrAnListFBasis.ext fun Οs β¦ ?_) a π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOpβ’ (f1 + f2) (ofCrAnListFBasis Οs) = LinearMap.id (ofCrAnListFBasis Οs)
simp only [ofListBasis_eq_ofList, LinearMap.add_apply, LinearMap.coe_comp, Submodule.coe_subtype,
Function.comp_apply, LinearMap.id_coe, id_eq, f1, f2] π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOpβ’ β(bosonicProjF (ofCrAnListF Οs)) + β(fermionicProjF (ofCrAnListF Οs)) = ofCrAnListF Οs
rw [bosonicProjF_ofCrAnListF, π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOpβ’ β(if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0) + β(fermionicProjF (ofCrAnListF Οs)) =
ofCrAnListF Οs π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOpβ’ β(if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0) +
β(if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©) =
ofCrAnListF Οs fermionicProjF_ofCrAnListF_if_bosonic π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOpβ’ β(if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0) +
β(if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©) =
ofCrAnListF Οs π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOpβ’ β(if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0) +
β(if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©) =
ofCrAnListF Οs] π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOpβ’ β(if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0) +
β(if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©) =
ofCrAnListF Οs
by_cases h : (π |>β Οs) = bosonic pos π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = bosonicβ’ β(if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0) +
β(if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©) =
ofCrAnListF Οsneg π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOph:Β¬ofList π.crAnStatistics Οs = bosonicβ’ β(if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0) +
β(if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©) =
ofCrAnListF Οs
Β· pos π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = bosonicβ’ β(if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0) +
β(if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©) =
ofCrAnListF Οs simp [h] All goals completed! π
Β· neg π:FieldSpecificationa:π.FieldOpFreeAlgebraf1:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule bosonic).subtype ββ bosonicProjFf2:π.FieldOpFreeAlgebra ββ[β] π.FieldOpFreeAlgebra := (statisticSubmodule fermionic).subtype ββ fermionicProjFΟs:List π.CrAnFieldOph:Β¬ofList π.crAnStatistics Οs = bosonicβ’ β(if h : ofList π.crAnStatistics Οs = bosonic then β¨ofCrAnListF Οs, β―β© else 0) +
β(if h : ofList π.crAnStatistics Οs = bosonic then 0 else β¨ofCrAnListF Οs, β―β©) =
ofCrAnListF Οs simp [h] All goals completed! π
lemma coeAddMonoidHom_apply_eq_bosonic_plus_fermionic
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (π := π) i))) :
DirectSum.coeAddMonoidHom statisticSubmodule a = a.1 bosonic + a.1 fermionic := by π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)
let C : DirectSum FieldStatistic (fun i => (statisticSubmodule (π := π) i)) β Prop :=
fun a => DirectSum.coeAddMonoidHom statisticSubmodule a = a.1 bosonic + a.1 fermionic π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)β’ (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)
change C a π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)β’ C a
apply DirectSum.induction_on zero π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)β’ C 0of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)β’ β (i : FieldStatistic) (x : β₯(statisticSubmodule i)), C ((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x)add π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)β’ β (x y : DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)), C x β C y β C (x + y)
Β· zero π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)β’ C 0 simp [C] All goals completed! π
Β· of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)β’ β (i : FieldStatistic) (x : β₯(statisticSubmodule i)), C ((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x) intro i x of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)i:FieldStatisticx:β₯(statisticSubmodule i)β’ C ((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x)
simp only [DFinsupp.toFun_eq_coe, DirectSum.coeAddMonoidHom_of, C] of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)i:FieldStatisticx:β₯(statisticSubmodule i)β’ βx =
β(((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x) bosonic) +
β(((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x) fermionic)
rw [DirectSum.of_apply, of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)i:FieldStatisticx:β₯(statisticSubmodule i)β’ βx =
β(if h : i = bosonic then Eq.recOn h x else 0) + β(((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x) fermionic) of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)i:FieldStatisticx:β₯(statisticSubmodule i)β’ βx = β(if h : i = bosonic then Eq.recOn h x else 0) + β(if h : i = fermionic then Eq.recOn h x else 0) DirectSum.of_apply of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)i:FieldStatisticx:β₯(statisticSubmodule i)β’ βx = β(if h : i = bosonic then Eq.recOn h x else 0) + β(if h : i = fermionic then Eq.recOn h x else 0) of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)i:FieldStatisticx:β₯(statisticSubmodule i)β’ βx = β(if h : i = bosonic then Eq.recOn h x else 0) + β(if h : i = fermionic then Eq.recOn h x else 0)]of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)i:FieldStatisticx:β₯(statisticSubmodule i)β’ βx = β(if h : i = bosonic then Eq.recOn h x else 0) + β(if h : i = fermionic then Eq.recOn h x else 0)
match i with
| bosonic => π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ βx = β(if h : bosonic = bosonic then Eq.recOn h x else 0) + β(if h : bosonic = fermionic then Eq.recOn h x else 0) simp All goals completed! π
| fermionic => π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ βx = β(if h : fermionic = bosonic then Eq.recOn h x else 0) + β(if h : fermionic = fermionic then Eq.recOn h x else 0) simp All goals completed! π
Β· add π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)β’ β (x y : DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)), C x β C y β C (x + y) intro x y hx hy add π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)x:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)y:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)hx:C xhy:C yβ’ C (x + y)
simp_all only [C, DFinsupp.toFun_eq_coe, map_add, DirectSum.add_apply, Submodule.coe_add] add π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop := fun a => (DirectSum.coeAddMonoidHom statisticSubmodule) a = β(a.toFun bosonic) + β(a.toFun fermionic)x:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)y:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)hx:(DirectSum.coeAddMonoidHom statisticSubmodule) x = β(x bosonic) + β(x fermionic)hy:(DirectSum.coeAddMonoidHom statisticSubmodule) y = β(y bosonic) + β(y fermionic)β’ β(x bosonic) + β(x fermionic) + (β(y bosonic) + β(y fermionic)) =
β(x bosonic) + β(y bosonic) + (β(x fermionic) + β(y fermionic))
abel All goals completed! π
lemma directSum_eq_bosonic_plus_fermionic
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (π := π) i))) :
a = (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic) := by π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)
let C : DirectSum FieldStatistic (fun i => (statisticSubmodule (π := π) i)) β Prop :=
fun a => a = (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic) π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)β’ a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)
change C a π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)β’ C a
apply DirectSum.induction_on zero π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)β’ C 0of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)β’ β (i : FieldStatistic) (x : β₯(statisticSubmodule i)), C ((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x)add π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)β’ β (x y : DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)), C x β C y β C (x + y)
Β· zero π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)β’ C 0 simp [C] All goals completed! π
Β· of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)β’ β (i : FieldStatistic) (x : β₯(statisticSubmodule i)), C ((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x) intro i x of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule i)β’ C ((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x)
simp only [C] of π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule i)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic)
(((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x) bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic)
(((DirectSum.of (fun i => β₯(statisticSubmodule i)) i) x) fermionic)
match i with
| bosonic => π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic)
(((DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x) bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic)
(((DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x) fermionic)
simp only [DirectSum.of_eq_same] π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic)
(((DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x) fermionic)
rw [DirectSum.of_eq_of_ne π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) 0h π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ fermionic β bosonic π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) 0h π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ fermionic β bosonic] π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) 0h π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ fermionic β bosonic
simp only [map_zero] π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) x + 0h π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ fermionic β bosonic
grind h π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule bosonic)β’ fermionic β bosonic
grind All goals completed! π
| fermionic => π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic)
(((DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) x) bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic)
(((DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) x) fermionic)
simp only [DirectSum.of_eq_same] π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic)
(((DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) x) bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) x
rw [DirectSum.of_eq_of_ne π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) 0 +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) xh π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ bosonic β fermionic π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) 0 +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) xh π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ bosonic β fermionic] π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) 0 +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) xh π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ bosonic β fermionic
simp only [map_zero, zero_add] h π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)i:FieldStatisticx:β₯(statisticSubmodule fermionic)β’ bosonic β fermionic
simp All goals completed! π
Β· add π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)β’ β (x y : DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)), C x β C y β C (x + y) intro x y hx hy add π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)x:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)y:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)hx:C xhy:C yβ’ C (x + y)
simp only [DirectSum.add_apply, map_add, C] at hx hy β’ add π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)x:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)y:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)hx:x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (x bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (x fermionic)hy:y =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (y bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (y fermionic)β’ x + y =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (x bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (y bosonic) +
((DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (x fermionic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (y fermionic))
conv_lhs => rw [hx, hy] π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)C:(DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)) β Prop :=
fun a =>
a =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)x:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)y:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)hx:x =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (x bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (x fermionic)hy:y =
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (y bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (y fermionic)| (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (x bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (x fermionic) +
((DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (y bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (y fermionic))
abel All goals completed! π
For a field specification π, the algebra π.FieldOpFreeAlgebra is graded by FieldStatistic.
Those ofCrAnListF Οs for which Οs has an overall bosonic statistic
(i.e. π |>β Οs = bosonic) span bosonic
submodule, whilst those ofCrAnListF Οs for which Οs has an overall fermionic statistic
(i.e. π |>β Οs = fermionic) span
the fermionic submodule.
instance fieldOpFreeAlgebraGrade :
GradedAlgebra (A := π.FieldOpFreeAlgebra) statisticSubmodule where
one_mem := by π:FieldSpecificationβ’ 1 β statisticSubmodule 0
simp only [statisticSubmodule] π:FieldSpecificationβ’ 1 β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = 0}
refine Submodule.mem_span.mpr fun p a => a ?_ π:FieldSpecificationp:Submodule β π.FieldOpFreeAlgebraa:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = 0} β βpβ’ 1 β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = 0}
simp only [Set.mem_setOf_eq] π:FieldSpecificationp:Submodule β π.FieldOpFreeAlgebraa:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = 0} β βpβ’ β Οs, 1 = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = 0
use [] h π:FieldSpecificationp:Submodule β π.FieldOpFreeAlgebraa:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = 0} β βpβ’ 1 = ofCrAnListF [] β§ ofList π.crAnStatistics [] = 0
simp only [ofCrAnListF_nil, ofList_empty, true_and] h π:FieldSpecificationp:Submodule β π.FieldOpFreeAlgebraa:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = 0} β βpβ’ bosonic = 0
rfl All goals completed! π
mul_mem f1 f2 a1 a2 h1 h2 := by π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2β’ a1 * a2 β statisticSubmodule (f1 + f2)
let p (a2 : π.FieldOpFreeAlgebra) (hx : a2 β statisticSubmodule f2) : Prop :=
a1 * a2 β statisticSubmodule (f1 + f2) π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ a1 * a2 β statisticSubmodule (f1 + f2)
change p a2 h2 π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ p a2 h2
apply Submodule.span_induction (p := p) mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}), p x β―zero π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ p 0 β―add π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}),
p x hx β p y hy β p (x + y) β―smul π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}), p x hx β p (a β’ x) β―hx π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ a2 β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}
Β· mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}), p x β― intro x hx mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)x:π.FieldOpFreeAlgebrahx:x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}β’ p x β―
simp only [Set.mem_setOf_eq] at hx mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)x:π.FieldOpFreeAlgebrahx:β Οs, x = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2β’ p x β―
obtain β¨Οs, rfl, hβ© := hx mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2β’ p (ofCrAnListF Οs) β―
simp only [p] mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2β’ a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)
let p (a1 : π.FieldOpFreeAlgebra) (hx : a1 β statisticSubmodule f1) : Prop :=
a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2) mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)
change p a1 h1 mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ p a1 h1
apply Submodule.span_induction (p := p) mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}), p x β―mem.zero π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ p 0 β―mem.add π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}),
p x hx β p y hy β p (x + y) β―mem.smul π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}), p x hx β p (a β’ x) β―mem.hx π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ a1 β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}
Β· mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ β (x : π.FieldOpFreeAlgebra) (h : x β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}), p x β― intro y hy mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)y:π.FieldOpFreeAlgebrahy:y β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}β’ p y β―
obtain β¨Οs', rfl, h'β© := hy mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)Οs':List π.CrAnFieldOph':ofList π.crAnStatistics Οs' = f1β’ p (ofCrAnListF Οs') β―
simp only [p] mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)Οs':List π.CrAnFieldOph':ofList π.crAnStatistics Οs' = f1β’ ofCrAnListF Οs' * ofCrAnListF Οs β statisticSubmodule (f1 + f2)
rw [β ofCrAnListF_append mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)Οs':List π.CrAnFieldOph':ofList π.crAnStatistics Οs' = f1β’ ofCrAnListF (Οs' ++ Οs) β statisticSubmodule (f1 + f2) mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)Οs':List π.CrAnFieldOph':ofList π.crAnStatistics Οs' = f1β’ ofCrAnListF (Οs' ++ Οs) β statisticSubmodule (f1 + f2)] mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)Οs':List π.CrAnFieldOph':ofList π.crAnStatistics Οs' = f1β’ ofCrAnListF (Οs' ++ Οs) β statisticSubmodule (f1 + f2)
refine Submodule.mem_span.mpr fun p a => a ?_ mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβΒΉ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2pβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)Οs':List π.CrAnFieldOph':ofList π.crAnStatistics Οs' = f1p:Submodule β π.FieldOpFreeAlgebraa:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1 + f2} β βpβ’ ofCrAnListF (Οs' ++ Οs) β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1 + f2}
simp only [Set.mem_setOf_eq] mem.mem π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβΒΉ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2pβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)Οs':List π.CrAnFieldOph':ofList π.crAnStatistics Οs' = f1p:Submodule β π.FieldOpFreeAlgebraa:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1 + f2} β βpβ’ β Οs_1, ofCrAnListF (Οs' ++ Οs) = ofCrAnListF Οs_1 β§ ofList π.crAnStatistics Οs_1 = f1 + f2
use Οs' ++ Οs h π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβΒΉ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2pβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)Οs':List π.CrAnFieldOph':ofList π.crAnStatistics Οs' = f1p:Submodule β π.FieldOpFreeAlgebraa:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1 + f2} β βpβ’ ofCrAnListF (Οs' ++ Οs) = ofCrAnListF (Οs' ++ Οs) β§ ofList π.crAnStatistics (Οs' ++ Οs) = f1 + f2
simp only [ofList_append, h', h, true_and] h π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβΒΉ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2pβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)Οs':List π.CrAnFieldOph':ofList π.crAnStatistics Οs' = f1p:Submodule β π.FieldOpFreeAlgebraa:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1 + f2} β βpβ’ (if f1 = f2 then bosonic else fermionic) = f1 + f2
cases f1 h.bosonic π:FieldSpecificationf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah2:a2 β statisticSubmodule f2Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2Οs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule bosonicpβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (bosonic + f2)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule bosonic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (bosonic + f2)h':ofList π.crAnStatistics Οs' = bosonica:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic + f2} β βpβΒΉβ’ (if bosonic = f2 then bosonic else fermionic) = bosonic + f2h.fermionic π:FieldSpecificationf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah2:a2 β statisticSubmodule f2Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2Οs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule fermionicpβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (fermionic + f2)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule fermionic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (fermionic + f2)h':ofList π.crAnStatistics Οs' = fermionica:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic + f2} β βpβΒΉβ’ (if fermionic = f2 then bosonic else fermionic) = fermionic + f2 <;> h.bosonic π:FieldSpecificationf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah2:a2 β statisticSubmodule f2Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2Οs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule bosonicpβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (bosonic + f2)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule bosonic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (bosonic + f2)h':ofList π.crAnStatistics Οs' = bosonica:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic + f2} β βpβΒΉβ’ (if bosonic = f2 then bosonic else fermionic) = bosonic + f2h.fermionic π:FieldSpecificationf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah2:a2 β statisticSubmodule f2Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2Οs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule fermionicpβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (fermionic + f2)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule fermionic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (fermionic + f2)h':ofList π.crAnStatistics Οs' = fermionica:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic + f2} β βpβΒΉβ’ (if fermionic = f2 then bosonic else fermionic) = fermionic + f2 cases f2 h.fermionic.bosonic π:FieldSpecificationa1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebraΟs:List π.CrAnFieldOpΟs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule fermionich':ofList π.crAnStatistics Οs' = fermionich2:a2 β statisticSubmodule bosonich:ofList π.crAnStatistics Οs = bosonicpβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule bosonic β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (fermionic + bosonic)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule fermionic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (fermionic + bosonic)a:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic + bosonic} β βpβΒΉβ’ (if fermionic = bosonic then bosonic else fermionic) = fermionic + bosonich.fermionic.fermionic π:FieldSpecificationa1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebraΟs:List π.CrAnFieldOpΟs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule fermionich':ofList π.crAnStatistics Οs' = fermionich2:a2 β statisticSubmodule fermionich:ofList π.crAnStatistics Οs = fermionicpβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule fermionic β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (fermionic + fermionic)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule fermionic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (fermionic + fermionic)a:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic + fermionic} β βpβΒΉβ’ (if fermionic = fermionic then bosonic else fermionic) = fermionic + fermionic <;> h.bosonic.bosonic π:FieldSpecificationa1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebraΟs:List π.CrAnFieldOpΟs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule bosonich':ofList π.crAnStatistics Οs' = bosonich2:a2 β statisticSubmodule bosonich:ofList π.crAnStatistics Οs = bosonicpβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule bosonic β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (bosonic + bosonic)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule bosonic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (bosonic + bosonic)a:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic + bosonic} β βpβΒΉβ’ (if bosonic = bosonic then bosonic else fermionic) = bosonic + bosonich.bosonic.fermionic π:FieldSpecificationa1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebraΟs:List π.CrAnFieldOpΟs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule bosonich':ofList π.crAnStatistics Οs' = bosonich2:a2 β statisticSubmodule fermionich:ofList π.crAnStatistics Οs = fermionicpβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule fermionic β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (bosonic + fermionic)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule bosonic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (bosonic + fermionic)a:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = bosonic + fermionic} β βpβΒΉβ’ (if bosonic = fermionic then bosonic else fermionic) = bosonic + fermionich.fermionic.bosonic π:FieldSpecificationa1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebraΟs:List π.CrAnFieldOpΟs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule fermionich':ofList π.crAnStatistics Οs' = fermionich2:a2 β statisticSubmodule bosonich:ofList π.crAnStatistics Οs = bosonicpβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule bosonic β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (fermionic + bosonic)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule fermionic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (fermionic + bosonic)a:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic + bosonic} β βpβΒΉβ’ (if fermionic = bosonic then bosonic else fermionic) = fermionic + bosonich.fermionic.fermionic π:FieldSpecificationa1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebraΟs:List π.CrAnFieldOpΟs':List π.CrAnFieldOppβΒΉ:Submodule β π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule fermionich':ofList π.crAnStatistics Οs' = fermionich2:a2 β statisticSubmodule fermionich:ofList π.crAnStatistics Οs = fermionicpβ:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule fermionic β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (fermionic + fermionic)p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule fermionic β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (fermionic + fermionic)a:{a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = fermionic + fermionic} β βpβΒΉβ’ (if fermionic = fermionic then bosonic else fermionic) = fermionic + fermionic rfl All goals completed! π
Β· mem.zero π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ p 0 β― simp [p] All goals completed! π
Β· mem.add π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}),
p x hx β p y hy β p (x + y) β― intro x y hx hy hx1 hx2 mem.add π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)x:π.FieldOpFreeAlgebray:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}hy:y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}hx1:p x hxhx2:p y hyβ’ p (x + y) β―
simp only [add_mul, p] mem.add π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)x:π.FieldOpFreeAlgebray:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}hy:y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}hx1:p x hxhx2:p y hyβ’ x * ofCrAnListF Οs + y * ofCrAnListF Οs β statisticSubmodule (f1 + f2)
exact Submodule.add_mem _ hx1 hx2 All goals completed! π
Β· mem.smul π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}), p x hx β p (a β’ x) β― intro c a hx h1 mem.smul π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1β:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)c:βa:π.FieldOpFreeAlgebrahx:a β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}h1:p a hxβ’ p (c β’ a) β―
simp only [Algebra.smul_mul_assoc, p] mem.smul π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1β:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)c:βa:π.FieldOpFreeAlgebrahx:a β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1}h1:p a hxβ’ c β’ (a * ofCrAnListF Οs) β statisticSubmodule (f1 + f2)
exact Submodule.smul_mem _ _ h1 All goals completed! π
Β· mem.hx π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2pβ:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)Οs:List π.CrAnFieldOph:ofList π.crAnStatistics Οs = f2p:(a1 : π.FieldOpFreeAlgebra) β a1 β statisticSubmodule f1 β Prop := fun a1 hx => a1 * ofCrAnListF Οs β statisticSubmodule (f1 + f2)β’ a1 β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f1} exact h1 All goals completed! π
Β· zero π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ p 0 β― simp [p] All goals completed! π
Β· add π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ β (x y : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2})
(hy : y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}),
p x hx β p y hy β p (x + y) β― intro x y hx hy hx1 hx2 add π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)x:π.FieldOpFreeAlgebray:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}hy:y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}hx1:p x hxhx2:p y hyβ’ p (x + y) β―
simp only [mul_add, p] add π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)x:π.FieldOpFreeAlgebray:π.FieldOpFreeAlgebrahx:x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}hy:y β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}hx1:p x hxhx2:p y hyβ’ a1 * x + a1 * y β statisticSubmodule (f1 + f2)
exact Submodule.add_mem _ hx1 hx2 All goals completed! π
Β· smul π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ β (a : β) (x : π.FieldOpFreeAlgebra)
(hx : x β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}), p x hx β p (a β’ x) β― intro c a hx h1 smul π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1β:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)c:βa:π.FieldOpFreeAlgebrahx:a β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}h1:p a hxβ’ p (c β’ a) β―
simp only [Algebra.mul_smul_comm, p] smul π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1β:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)c:βa:π.FieldOpFreeAlgebrahx:a β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2}h1:p a hxβ’ c β’ (a1 * a) β statisticSubmodule (f1 + f2)
exact Submodule.smul_mem _ _ h1 All goals completed! π
Β· hx π:FieldSpecificationf1:FieldStatisticf2:FieldStatistica1:π.FieldOpFreeAlgebraa2:π.FieldOpFreeAlgebrah1:a1 β statisticSubmodule f1h2:a2 β statisticSubmodule f2p:(a2 : π.FieldOpFreeAlgebra) β a2 β statisticSubmodule f2 β Prop := fun a2 hx => a1 * a2 β statisticSubmodule (f1 + f2)β’ a2 β Submodule.span β {a | β Οs, a = ofCrAnListF Οs β§ ofList π.crAnStatistics Οs = f2} exact h2 All goals completed! π
decompose' a := DirectSum.of (fun i => (statisticSubmodule (π := π) i)) bosonic (bosonicProjF a)
+ DirectSum.of (fun i => (statisticSubmodule (π := π) i)) fermionic (fermionicProjF a)
left_inv a := by π:FieldSpecificationa:π.FieldOpFreeAlgebraβ’ (DirectSum.coeAddMonoidHom statisticSubmodule)
((fun a =>
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (bosonicProjF a) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (fermionicProjF a))
a) =
a
trans a.bosonicProjF + fermionicProjF a π:FieldSpecificationa:π.FieldOpFreeAlgebraβ’ (DirectSum.coeAddMonoidHom statisticSubmodule)
((fun a =>
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (bosonicProjF a) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (fermionicProjF a))
a) =
β(bosonicProjF a) + β(fermionicProjF a)π:FieldSpecificationa:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) + β(fermionicProjF a) = a
Β· π:FieldSpecificationa:π.FieldOpFreeAlgebraβ’ (DirectSum.coeAddMonoidHom statisticSubmodule)
((fun a =>
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (bosonicProjF a) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (fermionicProjF a))
a) =
β(bosonicProjF a) + β(fermionicProjF a) simp All goals completed! π
Β· π:FieldSpecificationa:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) + β(fermionicProjF a) = a exact bosonicProjF_add_fermionicProjF a All goals completed! π
right_inv a := by π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ (fun a =>
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (bosonicProjF a) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (fermionicProjF a))
((DirectSum.coeAddMonoidHom statisticSubmodule) a) =
a
rw [coeAddMonoidHom_apply_eq_bosonic_plus_fermionic π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ (fun a =>
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (bosonicProjF a) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (fermionicProjF a))
(β(a.toFun bosonic) + β(a.toFun fermionic)) =
a π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ (fun a =>
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (bosonicProjF a) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (fermionicProjF a))
(β(a.toFun bosonic) + β(a.toFun fermionic)) =
a] π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ (fun a =>
(DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (bosonicProjF a) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (fermionicProjF a))
(β(a.toFun bosonic) + β(a.toFun fermionic)) =
a
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] π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)β’ (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic) =
a
conv_rhs => rw [directSum_eq_bosonic_plus_fermionic a] π:FieldSpecificationa:DirectSum FieldStatistic fun i => β₯(statisticSubmodule i)| (DirectSum.of (fun i => β₯(statisticSubmodule i)) bosonic) (a bosonic) +
(DirectSum.of (fun i => β₯(statisticSubmodule i)) fermionic) (a fermionic)
lemma eq_zero_of_bosonic_and_fermionic {a : π.FieldOpFreeAlgebra}
(hb : a β statisticSubmodule bosonic) (hf : a β statisticSubmodule fermionic) : a = 0 := by π:FieldSpecificationa:π.FieldOpFreeAlgebrahb:a β statisticSubmodule bosonichf:a β statisticSubmodule fermionicβ’ a = 0
have ha := bosonicProjF_of_mem_bosonic a hb π:FieldSpecificationa:π.FieldOpFreeAlgebrahb:a β statisticSubmodule bosonichf:a β statisticSubmodule fermionicha:bosonicProjF a = β¨a, hbβ©β’ a = 0
have hb := fermionicProjF_of_mem_fermionic a hf π:FieldSpecificationa:π.FieldOpFreeAlgebrahbβ:a β statisticSubmodule bosonichf:a β statisticSubmodule fermionicha:bosonicProjF a = β¨a, hbβ©hb:fermionicProjF a = β¨a, hfβ©β’ a = 0
have hc := (bosonicProjF_add_fermionicProjF a) π:FieldSpecificationa:π.FieldOpFreeAlgebrahbβ:a β statisticSubmodule bosonichf:a β statisticSubmodule fermionicha:bosonicProjF a = β¨a, hbβ©hb:fermionicProjF a = β¨a, hfβ©hc:β(bosonicProjF a) + β(fermionicProjF a) = aβ’ a = 0
rw [ha, π:FieldSpecificationa:π.FieldOpFreeAlgebrahbβ:a β statisticSubmodule bosonichf:a β statisticSubmodule fermionicha:bosonicProjF a = β¨a, hbβ©hb:fermionicProjF a = β¨a, hfβ©hc:ββ¨a, hbββ© + β(fermionicProjF a) = aβ’ a = 0 π:FieldSpecificationa:π.FieldOpFreeAlgebrahbβ:a β statisticSubmodule bosonichf:a β statisticSubmodule fermionicha:bosonicProjF a = β¨a, hbβ©hb:fermionicProjF a = β¨a, hfβ©hc:ββ¨a, hbββ© + ββ¨a, hfβ© = aβ’ a = 0 hb π:FieldSpecificationa:π.FieldOpFreeAlgebrahbβ:a β statisticSubmodule bosonichf:a β statisticSubmodule fermionicha:bosonicProjF a = β¨a, hbβ©hb:fermionicProjF a = β¨a, hfβ©hc:ββ¨a, hbββ© + ββ¨a, hfβ© = aβ’ a = 0 π:FieldSpecificationa:π.FieldOpFreeAlgebrahbβ:a β statisticSubmodule bosonichf:a β statisticSubmodule fermionicha:bosonicProjF a = β¨a, hbβ©hb:fermionicProjF a = β¨a, hfβ©hc:ββ¨a, hbββ© + ββ¨a, hfβ© = aβ’ a = 0] at hc π:FieldSpecificationa:π.FieldOpFreeAlgebrahbβ:a β statisticSubmodule bosonichf:a β statisticSubmodule fermionicha:bosonicProjF a = β¨a, hbβ©hb:fermionicProjF a = β¨a, hfβ©hc:ββ¨a, hbββ© + ββ¨a, hfβ© = aβ’ a = 0
simpa using hc All goals completed! π
lemma bosonicProjF_mul (a b : π.FieldOpFreeAlgebra) :
(a * b).bosonicProjF.1 = a.bosonicProjF.1 * b.bosonicProjF.1
+ a.fermionicProjF.1 * b.fermionicProjF.1 := by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF (a * b)) = β(bosonicProjF a) * β(bosonicProjF b) + β(fermionicProjF a) * β(fermionicProjF b)
conv_lhs =>
rw [β bosonicProjF_add_fermionicProjF a] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(bosonicProjF ((β(bosonicProjF a) + β(fermionicProjF a)) * b))
rw [β bosonicProjF_add_fermionicProjF b] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(bosonicProjF ((β(bosonicProjF a) + β(fermionicProjF a)) * (β(bosonicProjF b) + β(fermionicProjF b))))
simp only [mul_add, add_mul, map_add, Submodule.coe_add] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF (β(bosonicProjF a) * β(bosonicProjF b))) + β(bosonicProjF (β(fermionicProjF a) * β(bosonicProjF b))) +
(β(bosonicProjF (β(bosonicProjF a) * β(fermionicProjF b))) +
β(bosonicProjF (β(fermionicProjF a) * β(fermionicProjF b)))) =
β(bosonicProjF a) * β(bosonicProjF b) + β(fermionicProjF a) * β(fermionicProjF b)
rw [bosonicProjF_of_mem_bosonic π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ ββ¨β(bosonicProjF a) * β(bosonicProjF b), ?hβ© + β(bosonicProjF (β(fermionicProjF a) * β(bosonicProjF b))) +
(β(bosonicProjF (β(bosonicProjF a) * β(fermionicProjF b))) +
β(bosonicProjF (β(fermionicProjF a) * β(fermionicProjF b)))) =
β(bosonicProjF a) * β(bosonicProjF b) + β(fermionicProjF a) * β(fermionicProjF b)h π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ ββ¨β(bosonicProjF a) * β(bosonicProjF b), ?hβ© + β(bosonicProjF (β(fermionicProjF a) * β(bosonicProjF b))) +
(β(bosonicProjF (β(bosonicProjF a) * β(fermionicProjF b))) +
β(bosonicProjF (β(fermionicProjF a) * β(fermionicProjF b)))) =
β(bosonicProjF a) * β(bosonicProjF b) + β(fermionicProjF a) * β(fermionicProjF b)h π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ ββ¨β(bosonicProjF a) * β(bosonicProjF b), ?hβ© + β(bosonicProjF (β(fermionicProjF a) * β(bosonicProjF b))) +
(β(bosonicProjF (β(bosonicProjF a) * β(fermionicProjF b))) +
β(bosonicProjF (β(fermionicProjF a) * β(fermionicProjF b)))) =
β(bosonicProjF a) * β(bosonicProjF b) + β(fermionicProjF a) * β(fermionicProjF b)h π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic
conv_lhs =>
left π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| ββ¨β(bosonicProjF a) * β(bosonicProjF b), ?hβ© + β(bosonicProjF (β(fermionicProjF a) * β(bosonicProjF b)))
right π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(bosonicProjF (β(fermionicProjF a) * β(bosonicProjF b)))
rw [bosonicProjF_of_mem_fermionic _
(by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(fermionicProjF a) * β(bosonicProjF b) β statisticSubmodule fermionic
have h1 : fermionic = fermionic + bosonic := by simp π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(fermionicProjF a) * β(bosonicProjF b) β statisticSubmodule fermionic π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(fermionicProjF a) * β(bosonicProjF b) β statisticSubmodule fermionic
conv_lhs => rw [h1] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonic| statisticSubmodule (fermionic + bosonic)
apply fieldOpFreeAlgebraGrade.mul_mem a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(fermionicProjF a) β statisticSubmodule fermionica π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(bosonicProjF b) β statisticSubmodule bosonic
simp only [SetLike.coe_mem] a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(bosonicProjF b) β statisticSubmodule bosonic
simp All goals completed! π)]
conv_lhs =>
right π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(bosonicProjF (β(bosonicProjF a) * β(fermionicProjF b))) + β(bosonicProjF (β(fermionicProjF a) * β(fermionicProjF b)))
left π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(bosonicProjF (β(bosonicProjF a) * β(fermionicProjF b)))
rw [bosonicProjF_of_mem_fermionic _
(by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) * β(fermionicProjF b) β statisticSubmodule fermionic
have h1 : fermionic = bosonic + fermionic := by simp π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(bosonicProjF a) * β(fermionicProjF b) β statisticSubmodule fermionic π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(bosonicProjF a) * β(fermionicProjF b) β statisticSubmodule fermionic
conv_lhs => rw [h1] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionic| statisticSubmodule (bosonic + fermionic)
apply fieldOpFreeAlgebraGrade.mul_mem a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(bosonicProjF a) β statisticSubmodule bosonica π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(fermionicProjF b) β statisticSubmodule fermionic
simp only [SetLike.coe_mem] a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(fermionicProjF b) β statisticSubmodule fermionic
simp All goals completed! π)]
conv_lhs =>
right π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β0 + β(bosonicProjF (β(fermionicProjF a) * β(fermionicProjF b)))
right π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(bosonicProjF (β(fermionicProjF a) * β(fermionicProjF b)))
rw [bosonicProjF_of_mem_bosonic _
(by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(fermionicProjF a) * β(fermionicProjF b) β statisticSubmodule bosonic
have h1 : bosonic = fermionic + fermionic := by
simp only [add_eq_mul, mul_self] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ bosonic = 1 π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF a) * β(fermionicProjF b) β statisticSubmodule bosonic
rfl π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF a) * β(fermionicProjF b) β statisticSubmodule bosonic π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF a) * β(fermionicProjF b) β statisticSubmodule bosonic
conv_lhs => rw [h1] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionic| statisticSubmodule (fermionic + fermionic)
apply fieldOpFreeAlgebraGrade.mul_mem a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF a) β statisticSubmodule fermionica π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF b) β statisticSubmodule fermionic
simp only [SetLike.coe_mem] a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF b) β statisticSubmodule fermionic
simp All goals completed! π)]
simp only [ZeroMemClass.coe_zero, add_zero, zero_add] h π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic
Β· h π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic have h1 : bosonic = bosonic + bosonic := by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF (a * b)) = β(bosonicProjF a) * β(bosonicProjF b) + β(fermionicProjF a) * β(fermionicProjF b) h π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic
simp only [add_eq_mul, mul_self] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ bosonic = 1h π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic
rflh π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonich π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic
conv_lhs => rw [h1] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonic| statisticSubmodule (bosonic + bosonic)
apply fieldOpFreeAlgebraGrade.mul_mem h.a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF a) β statisticSubmodule bosonich.a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF b) β statisticSubmodule bosonic
simp only [SetLike.coe_mem] h.a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF b) β statisticSubmodule bosonic
simp All goals completed! π
lemma fermionicProjF_mul (a b : π.FieldOpFreeAlgebra) :
(a * b).fermionicProjF.1 = a.bosonicProjF.1 * b.fermionicProjF.1
+ a.fermionicProjF.1 * b.bosonicProjF.1 := by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(fermionicProjF (a * b)) = β(bosonicProjF a) * β(fermionicProjF b) + β(fermionicProjF a) * β(bosonicProjF b)
conv_lhs =>
rw [β bosonicProjF_add_fermionicProjF a] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(fermionicProjF ((β(bosonicProjF a) + β(fermionicProjF a)) * b))
rw [β bosonicProjF_add_fermionicProjF b] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(fermionicProjF ((β(bosonicProjF a) + β(fermionicProjF a)) * (β(bosonicProjF b) + β(fermionicProjF b))))
simp only [mul_add, add_mul, map_add, Submodule.coe_add] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(fermionicProjF (β(bosonicProjF a) * β(bosonicProjF b))) +
β(fermionicProjF (β(fermionicProjF a) * β(bosonicProjF b))) +
(β(fermionicProjF (β(bosonicProjF a) * β(fermionicProjF b))) +
β(fermionicProjF (β(fermionicProjF a) * β(fermionicProjF b)))) =
β(bosonicProjF a) * β(fermionicProjF b) + β(fermionicProjF a) * β(bosonicProjF b)
conv_lhs =>
left π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(fermionicProjF (β(bosonicProjF a) * β(bosonicProjF b))) + β(fermionicProjF (β(fermionicProjF a) * β(bosonicProjF b)))
left π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(fermionicProjF (β(bosonicProjF a) * β(bosonicProjF b)))
rw [fermionicProjF_of_mem_bosonic _
(by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic
have h1 : bosonic = bosonic + bosonic := by
simp only [add_eq_mul, mul_self] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ bosonic = 1 π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic
rfl π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF a) * β(bosonicProjF b) β statisticSubmodule bosonic
conv_lhs => rw [h1] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonic| statisticSubmodule (bosonic + bosonic)
apply fieldOpFreeAlgebraGrade.mul_mem a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF a) β statisticSubmodule bosonica π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF b) β statisticSubmodule bosonic
simp only [SetLike.coe_mem] a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = bosonic + bosonicβ’ β(bosonicProjF b) β statisticSubmodule bosonic
simp All goals completed! π)]
conv_lhs =>
left π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β0 + β(fermionicProjF (β(fermionicProjF a) * β(bosonicProjF b)))
right π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(fermionicProjF (β(fermionicProjF a) * β(bosonicProjF b)))
rw [fermionicProjF_of_mem_fermionic _
(by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(fermionicProjF a) * β(bosonicProjF b) β statisticSubmodule fermionic
have h1 : fermionic = fermionic + bosonic := by simp π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(fermionicProjF a) * β(bosonicProjF b) β statisticSubmodule fermionic π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(fermionicProjF a) * β(bosonicProjF b) β statisticSubmodule fermionic
conv_lhs => rw [h1] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonic| statisticSubmodule (fermionic + bosonic)
apply fieldOpFreeAlgebraGrade.mul_mem a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(fermionicProjF a) β statisticSubmodule fermionica π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(bosonicProjF b) β statisticSubmodule bosonic
simp only [SetLike.coe_mem] a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = fermionic + bosonicβ’ β(bosonicProjF b) β statisticSubmodule bosonic
simp All goals completed! π)]
conv_lhs =>
right π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(fermionicProjF (β(bosonicProjF a) * β(fermionicProjF b))) +
β(fermionicProjF (β(fermionicProjF a) * β(fermionicProjF b)))
left π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(fermionicProjF (β(bosonicProjF a) * β(fermionicProjF b)))
rw [fermionicProjF_of_mem_fermionic _
(by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(bosonicProjF a) * β(fermionicProjF b) β statisticSubmodule fermionic
have h1 : fermionic = bosonic + fermionic := by simp π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(bosonicProjF a) * β(fermionicProjF b) β statisticSubmodule fermionic π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(bosonicProjF a) * β(fermionicProjF b) β statisticSubmodule fermionic
conv_lhs => rw [h1] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionic| statisticSubmodule (bosonic + fermionic)
apply fieldOpFreeAlgebraGrade.mul_mem a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(bosonicProjF a) β statisticSubmodule bosonica π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(fermionicProjF b) β statisticSubmodule fermionic
simp only [SetLike.coe_mem] a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:fermionic = bosonic + fermionicβ’ β(fermionicProjF b) β statisticSubmodule fermionic
simp All goals completed! π)]
conv_lhs =>
right π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| ββ¨β(bosonicProjF a) * β(fermionicProjF b), β―β© + β(fermionicProjF (β(fermionicProjF a) * β(fermionicProjF b)))
right π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebra| β(fermionicProjF (β(fermionicProjF a) * β(fermionicProjF b)))
rw [fermionicProjF_of_mem_bosonic _
(by π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(fermionicProjF a) * β(fermionicProjF b) β statisticSubmodule bosonic
have h1 : bosonic = fermionic + fermionic := by
simp only [add_eq_mul, mul_self] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ bosonic = 1 π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF a) * β(fermionicProjF b) β statisticSubmodule bosonic
rfl π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF a) * β(fermionicProjF b) β statisticSubmodule bosonic π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF a) * β(fermionicProjF b) β statisticSubmodule bosonic
conv_lhs => rw [h1] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionic| statisticSubmodule (fermionic + fermionic)
apply fieldOpFreeAlgebraGrade.mul_mem a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF a) β statisticSubmodule fermionica π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF b) β statisticSubmodule fermionic
simp only [SetLike.coe_mem] a π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebrah1:bosonic = fermionic + fermionicβ’ β(fermionicProjF b) β statisticSubmodule fermionic
simp All goals completed! π)]
simp only [ZeroMemClass.coe_zero, zero_add, add_zero] π:FieldSpecificationa:π.FieldOpFreeAlgebrab:π.FieldOpFreeAlgebraβ’ β(fermionicProjF a) * β(bosonicProjF b) + β(bosonicProjF a) * β(fermionicProjF b) =
β(bosonicProjF a) * β(fermionicProjF b) + β(fermionicProjF a) * β(bosonicProjF b)
abel All goals completed! π