PhysLean/HepLean/PerturbationTheory/FieldOpFreeAlgebra/Grading.lean

417 lines
15 KiB
Text
Raw Normal View History

2025-01-28 09:48:38 +00:00
/-
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
-/
2025-02-03 12:12:36 +00:00
import HepLean.PerturbationTheory.FieldOpFreeAlgebra.Basic
2025-01-28 09:48:38 +00:00
import HepLean.PerturbationTheory.Koszul.KoszulSign
import Mathlib.RingTheory.GradedAlgebra.Basic
/-!
2025-02-03 11:05:43 +00:00
# Grading on the FieldOpFreeAlgebra
2025-01-28 09:48:38 +00:00
-/
namespace FieldSpecification
variable {𝓕 : FieldSpecification}
open FieldStatistic
2025-02-03 11:05:43 +00:00
namespace FieldOpFreeAlgebra
2025-01-28 09:48:38 +00:00
noncomputable section
2025-02-03 11:05:43 +00:00
/-- 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}
2025-01-28 09:48:38 +00:00
2025-02-03 11:28:14 +00:00
lemma ofCrAnListF_mem_statisticSubmodule_of (φs : List 𝓕.CrAnFieldOp) (f : FieldStatistic)
2025-01-30 05:35:42 +00:00
(h : (𝓕 |>ₛ φs) = f) :
ofCrAnListF φs ∈ statisticSubmodule f := by
2025-01-28 11:53:24 +00:00
refine Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩
2025-02-03 11:28:14 +00:00
lemma ofCrAnListF_bosonic_or_fermionic (φs : List 𝓕.CrAnFieldOp) :
2025-02-03 11:42:56 +00:00
ofCrAnListF φs ∈ statisticSubmodule bosonic
ofCrAnListF φs ∈ statisticSubmodule fermionic := by
2025-01-28 11:53:24 +00:00
by_cases h : (𝓕 |>ₛ φs) = bosonic
· left
exact ofCrAnListF_mem_statisticSubmodule_of φs bosonic h
2025-01-28 11:53:24 +00:00
· right
exact ofCrAnListF_mem_statisticSubmodule_of φs fermionic (by simpa using h)
2025-01-28 11:53:24 +00:00
2025-02-03 11:28:14 +00:00
lemma ofCrAnOpF_bosonic_or_fermionic (φ : 𝓕.CrAnFieldOp) :
ofCrAnOpF φ ∈ statisticSubmodule bosonic ofCrAnOpF φ ∈ statisticSubmodule fermionic := by
rw [← ofCrAnListF_singleton]
exact ofCrAnListF_bosonic_or_fermionic [φ]
2025-02-03 11:05:43 +00:00
/-- The projection of an element of `FieldOpFreeAlgebra` onto it's bosonic part. -/
def bosonicProj : 𝓕.FieldOpFreeAlgebra →ₗ[] statisticSubmodule (𝓕 := 𝓕) bosonic :=
Basis.constr ofCrAnListFBasis fun φs =>
2025-01-28 09:48:38 +00:00
if h : (𝓕 |>ₛ φs) = bosonic then
⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩⟩
2025-01-28 09:48:38 +00:00
else
0
2025-02-03 11:28:14 +00:00
lemma bosonicProj_ofCrAnListF (φs : List 𝓕.CrAnFieldOp) :
bosonicProj (ofCrAnListF φs) = if h : (𝓕 |>ₛ φs) = bosonic then
⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩⟩ else 0 := by
2025-01-28 09:48:38 +00:00
conv_lhs =>
rw [← ofListBasis_eq_ofList, bosonicProj, Basis.constr_basis]
2025-02-03 11:05:43 +00:00
lemma bosonicProj_of_mem_bosonic (a : 𝓕.FieldOpFreeAlgebra) (h : a ∈ statisticSubmodule bosonic) :
2025-01-28 09:48:38 +00:00
bosonicProj a = ⟨a, h⟩ := by
2025-02-03 11:05:43 +00:00
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule bosonic) : Prop :=
2025-01-28 09:48:38 +00:00
bosonicProj a = ⟨a, hx⟩
change p a h
apply Submodule.span_induction
· intro x hx
2025-01-28 09:58:02 +00:00
simp only [Set.mem_setOf_eq] at hx
2025-01-28 09:48:38 +00:00
obtain ⟨φs, rfl, h⟩ := hx
simp [p, bosonicProj_ofCrAnListF, h]
2025-01-28 09:58:02 +00:00
· simp only [map_zero, p]
2025-01-28 09:48:38 +00:00
rfl
· intro x y hx hy hpx hpy
simp_all [p]
· intro a x hx hy
simp_all [p]
2025-02-03 11:42:56 +00:00
lemma bosonicProj_of_mem_fermionic (a : 𝓕.FieldOpFreeAlgebra)
(h : a ∈ statisticSubmodule fermionic) :
2025-01-28 09:48:38 +00:00
bosonicProj a = 0 := by
2025-02-03 11:05:43 +00:00
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule fermionic) : Prop :=
2025-01-28 09:48:38 +00:00
bosonicProj a = 0
change p a h
apply Submodule.span_induction
· intro x hx
2025-01-28 09:58:02 +00:00
simp only [Set.mem_setOf_eq] at hx
2025-01-28 09:48:38 +00:00
obtain ⟨φs, rfl, h⟩ := hx
simp [p, bosonicProj_ofCrAnListF, h]
2025-01-28 09:48:38 +00:00
· simp [p]
· intro x y hx hy hpx hpy
simp_all [p]
· intro a x hx hy
simp_all [p]
@[simp]
lemma bosonicProj_of_bonosic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i))) :
bosonicProj (a bosonic) = a bosonic := by
apply bosonicProj_of_mem_bosonic
@[simp]
lemma bosonicProj_of_fermionic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i))) :
bosonicProj (a fermionic).1 = 0 := by
apply bosonicProj_of_mem_fermionic
exact Submodule.coe_mem (a.toFun fermionic)
2025-02-03 11:05:43 +00:00
/-- The projection of an element of `FieldOpFreeAlgebra` onto it's fermionic part. -/
def fermionicProj : 𝓕.FieldOpFreeAlgebra →ₗ[] statisticSubmodule (𝓕 := 𝓕) fermionic :=
Basis.constr ofCrAnListFBasis fun φs =>
2025-01-28 09:48:38 +00:00
if h : (𝓕 |>ₛ φs) = fermionic then
⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩⟩
2025-01-28 09:48:38 +00:00
else
0
2025-02-03 11:28:14 +00:00
lemma fermionicProj_ofCrAnListF (φs : List 𝓕.CrAnFieldOp) :
fermionicProj (ofCrAnListF φs) = if h : (𝓕 |>ₛ φs) = fermionic then
⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩⟩ else 0 := by
2025-01-28 09:48:38 +00:00
conv_lhs =>
rw [← ofListBasis_eq_ofList, fermionicProj, Basis.constr_basis]
2025-02-03 11:28:14 +00:00
lemma fermionicProj_ofCrAnListF_if_bosonic (φs : List 𝓕.CrAnFieldOp) :
fermionicProj (ofCrAnListF φs) = if h : (𝓕 |>ₛ φs) = bosonic then
0 else ⟨ofCrAnListF φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl,
2025-01-29 16:06:28 +00:00
by simpa using h⟩⟩⟩ := by
rw [fermionicProj_ofCrAnListF]
2025-01-28 09:48:38 +00:00
by_cases h1 : (𝓕 |>ₛ φs) = fermionic
· simp [h1]
2025-01-28 09:58:02 +00:00
· simp only [h1, ↓reduceDIte]
2025-01-28 09:48:38 +00:00
simp only [neq_fermionic_iff_eq_bosonic] at h1
simp [h1]
2025-02-03 11:42:56 +00:00
lemma fermionicProj_of_mem_fermionic (a : 𝓕.FieldOpFreeAlgebra)
(h : a ∈ statisticSubmodule fermionic) :
2025-01-28 09:48:38 +00:00
fermionicProj a = ⟨a, h⟩ := by
2025-02-03 11:05:43 +00:00
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule fermionic) : Prop :=
2025-01-28 09:48:38 +00:00
fermionicProj a = ⟨a, hx⟩
change p a h
apply Submodule.span_induction
· intro x hx
2025-01-28 09:58:02 +00:00
simp only [Set.mem_setOf_eq] at hx
2025-01-28 09:48:38 +00:00
obtain ⟨φs, rfl, h⟩ := hx
simp [p, fermionicProj_ofCrAnListF, h]
2025-01-28 09:58:02 +00:00
· simp only [map_zero, p]
2025-01-28 09:48:38 +00:00
rfl
· intro x y hx hy hpx hpy
simp_all [p]
· intro a x hx hy
simp_all [p]
2025-02-03 11:05:43 +00:00
lemma fermionicProj_of_mem_bosonic (a : 𝓕.FieldOpFreeAlgebra) (h : a ∈ statisticSubmodule bosonic) :
2025-01-28 09:48:38 +00:00
fermionicProj a = 0 := by
2025-02-03 11:05:43 +00:00
let p (a : 𝓕.FieldOpFreeAlgebra) (hx : a ∈ statisticSubmodule bosonic) : Prop :=
2025-01-28 09:48:38 +00:00
fermionicProj a = 0
change p a h
apply Submodule.span_induction
· intro x hx
2025-01-28 09:58:02 +00:00
simp only [Set.mem_setOf_eq] at hx
2025-01-28 09:48:38 +00:00
obtain ⟨φs, rfl, h⟩ := hx
simp [p, fermionicProj_ofCrAnListF, h]
2025-01-28 09:48:38 +00:00
· simp [p]
· intro x y hx hy hpx hpy
simp_all [p]
· intro a x hx hy
simp_all [p]
@[simp]
lemma fermionicProj_of_bosonic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i))) :
fermionicProj (a bosonic).1 = 0 := by
apply fermionicProj_of_mem_bosonic
exact Submodule.coe_mem (a.toFun bosonic)
@[simp]
lemma fermionicProj_of_fermionic_part
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i))) :
fermionicProj (a fermionic) = a fermionic := by
apply fermionicProj_of_mem_fermionic
2025-02-03 11:05:43 +00:00
lemma bosonicProj_add_fermionicProj (a : 𝓕.FieldOpFreeAlgebra) :
2025-01-28 09:48:38 +00:00
a.bosonicProj + (a.fermionicProj).1 = a := by
2025-02-03 11:05:43 +00:00
let f1 :𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra :=
2025-01-28 09:48:38 +00:00
(statisticSubmodule bosonic).subtype ∘ₗ bosonicProj
2025-02-03 11:05:43 +00:00
let f2 :𝓕.FieldOpFreeAlgebra →ₗ[] 𝓕.FieldOpFreeAlgebra :=
2025-01-28 09:48:38 +00:00
(statisticSubmodule fermionic).subtype ∘ₗ fermionicProj
change (f1 + f2) a = LinearMap.id (R := ) a
refine LinearMap.congr_fun (ofCrAnListFBasis.ext fun φs ↦ ?_) a
2025-01-28 09:58:02 +00:00
simp only [ofListBasis_eq_ofList, LinearMap.add_apply, LinearMap.coe_comp, Submodule.coe_subtype,
Function.comp_apply, LinearMap.id_coe, id_eq, f1, f2]
rw [bosonicProj_ofCrAnListF, fermionicProj_ofCrAnListF_if_bosonic]
2025-01-28 09:48:38 +00:00
by_cases h : (𝓕 |>ₛ φs) = bosonic
· simp [h]
· simp [h]
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
let C : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) → Prop :=
fun a => DirectSum.coeAddMonoidHom statisticSubmodule a = a.1 bosonic + a.1 fermionic
change C a
apply DirectSum.induction_on
· simp [C]
· intro i x
2025-01-28 09:58:02 +00:00
simp only [DFinsupp.toFun_eq_coe, DirectSum.coeAddMonoidHom_of, C]
2025-01-28 09:48:38 +00:00
rw [DirectSum.of_apply, DirectSum.of_apply]
match i with
| bosonic => simp
| fermionic => simp
· intro x y hx hy
2025-01-28 09:58:02 +00:00
simp_all only [C, DFinsupp.toFun_eq_coe, map_add, DirectSum.add_apply, Submodule.coe_add]
2025-01-28 09:48:38 +00:00
abel
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
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)
change C a
apply DirectSum.induction_on
· simp [C]
· intro i x
2025-01-28 09:58:02 +00:00
simp only [C]
2025-01-28 09:48:38 +00:00
match i with
| bosonic =>
simp only [DirectSum.of_eq_same, self_eq_add_right]
rw [DirectSum.of_eq_of_ne]
2025-01-28 09:58:02 +00:00
simp only [map_zero]
2025-01-28 09:48:38 +00:00
simp
| fermionic =>
simp only [DirectSum.of_eq_same, add_zero]
rw [DirectSum.of_eq_of_ne]
2025-01-28 09:58:02 +00:00
simp only [map_zero, zero_add]
2025-01-28 09:48:38 +00:00
simp
· intro x y hx hy
2025-01-28 09:58:02 +00:00
simp only [DirectSum.add_apply, map_add, C] at hx hy ⊢
2025-01-28 09:48:38 +00:00
conv_lhs => rw [hx, hy]
abel
2025-02-03 11:05:43 +00:00
/-- The instance of a graded algebra on `FieldOpFreeAlgebra`. -/
2025-02-03 11:42:56 +00:00
instance fieldOpFreeAlgebraGrade :
GradedAlgebra (A := 𝓕.FieldOpFreeAlgebra) statisticSubmodule where
2025-01-28 09:48:38 +00:00
one_mem := by
2025-01-28 09:58:02 +00:00
simp only [statisticSubmodule]
2025-01-28 09:48:38 +00:00
refine Submodule.mem_span.mpr fun p a => a ?_
2025-01-28 09:58:02 +00:00
simp only [Set.mem_setOf_eq]
2025-01-28 09:48:38 +00:00
use []
simp only [ofCrAnListF_nil, ofList_empty, true_and]
2025-01-28 09:48:38 +00:00
rfl
mul_mem f1 f2 a1 a2 h1 h2 := by
2025-02-03 11:05:43 +00:00
let p (a2 : 𝓕.FieldOpFreeAlgebra) (hx : a2 ∈ statisticSubmodule f2) : Prop :=
2025-01-29 16:06:28 +00:00
a1 * a2 ∈ statisticSubmodule (f1 + f2)
2025-01-28 09:48:38 +00:00
change p a2 h2
apply Submodule.span_induction (p := p)
· intro x hx
2025-01-28 09:58:02 +00:00
simp only [Set.mem_setOf_eq] at hx
2025-01-28 09:48:38 +00:00
obtain ⟨φs, rfl, h⟩ := hx
2025-01-28 09:58:02 +00:00
simp only [p]
2025-02-03 11:05:43 +00:00
let p (a1 : 𝓕.FieldOpFreeAlgebra) (hx : a1 ∈ statisticSubmodule f1) : Prop :=
a1 * ofCrAnListF φs ∈ statisticSubmodule (f1 + f2)
2025-01-28 09:48:38 +00:00
change p a1 h1
apply Submodule.span_induction (p := p)
· intro y hy
obtain ⟨φs', rfl, h'⟩ := hy
2025-01-28 09:58:02 +00:00
simp only [p]
rw [← ofCrAnListF_append]
2025-01-28 09:48:38 +00:00
refine Submodule.mem_span.mpr fun p a => a ?_
2025-01-28 09:58:02 +00:00
simp only [Set.mem_setOf_eq]
2025-01-28 09:48:38 +00:00
use φs' ++ φs
2025-01-28 09:58:02 +00:00
simp only [ofList_append, h', h, true_and]
2025-01-28 09:48:38 +00:00
cases f1 <;> cases f2 <;> rfl
· simp [p]
· intro x y hx hy hx1 hx2
2025-01-28 09:58:02 +00:00
simp only [add_mul, p]
2025-01-28 09:48:38 +00:00
exact Submodule.add_mem _ hx1 hx2
· intro c a hx h1
2025-01-28 09:58:02 +00:00
simp only [Algebra.smul_mul_assoc, p]
2025-01-28 09:48:38 +00:00
exact Submodule.smul_mem _ _ h1
· exact h1
· simp [p]
· intro x y hx hy hx1 hx2
2025-01-28 09:58:02 +00:00
simp only [mul_add, p]
2025-01-28 09:48:38 +00:00
exact Submodule.add_mem _ hx1 hx2
· intro c a hx h1
2025-01-28 09:58:02 +00:00
simp only [Algebra.mul_smul_comm, p]
2025-01-28 09:48:38 +00:00
exact Submodule.smul_mem _ _ h1
· exact h2
2025-01-29 16:06:28 +00:00
decompose' a := DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) bosonic (bosonicProj a)
+ DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) fermionic (fermionicProj a)
2025-01-28 09:48:38 +00:00
left_inv a := by
2025-01-29 16:06:28 +00:00
trans a.bosonicProj + fermionicProj a
2025-01-28 09:48:38 +00:00
· simp
· exact bosonicProj_add_fermionicProj a
right_inv a := by
rw [coeAddMonoidHom_apply_eq_bosonic_plus_fermionic]
2025-01-28 09:58:02 +00:00
simp only [DFinsupp.toFun_eq_coe, map_add, bosonicProj_of_bonosic_part,
bosonicProj_of_fermionic_part, add_zero, fermionicProj_of_bosonic_part,
fermionicProj_of_fermionic_part, zero_add]
2025-01-28 09:48:38 +00:00
conv_rhs => rw [directSum_eq_bosonic_plus_fermionic a]
2025-02-03 11:05:43 +00:00
lemma eq_zero_of_bosonic_and_fermionic {a : 𝓕.FieldOpFreeAlgebra}
2025-01-28 11:53:24 +00:00
(hb : a ∈ statisticSubmodule bosonic) (hf : a ∈ statisticSubmodule fermionic) : a = 0 := by
have ha := bosonicProj_of_mem_bosonic a hb
have hb := fermionicProj_of_mem_fermionic a hf
have hc := (bosonicProj_add_fermionicProj a)
rw [ha, hb] at hc
simpa using hc
2025-02-03 11:05:43 +00:00
lemma bosonicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
(a * b).bosonicProj.1 = a.bosonicProj.1 * b.bosonicProj.1
+ a.fermionicProj.1 * b.fermionicProj.1 := by
conv_lhs =>
rw [← bosonicProj_add_fermionicProj a]
rw [← bosonicProj_add_fermionicProj b]
2025-01-29 16:41:10 +00:00
simp only [mul_add, add_mul, map_add, Submodule.coe_add]
rw [bosonicProj_of_mem_bosonic]
conv_lhs =>
left
right
rw [bosonicProj_of_mem_fermionic _
(by
have h1 : fermionic = fermionic + bosonic := by simp
conv_lhs => rw [h1]
2025-02-03 11:05:43 +00:00
apply fieldOpFreeAlgebraGrade.mul_mem
2025-01-29 16:41:10 +00:00
simp only [SetLike.coe_mem]
simp)]
conv_lhs =>
right
left
rw [bosonicProj_of_mem_fermionic _
(by
have h1 : fermionic = bosonic + fermionic := by simp
conv_lhs => rw [h1]
2025-02-03 11:05:43 +00:00
apply fieldOpFreeAlgebraGrade.mul_mem
2025-01-29 16:41:10 +00:00
simp only [SetLike.coe_mem]
simp)]
conv_lhs =>
right
right
rw [bosonicProj_of_mem_bosonic _
(by
2025-01-29 16:41:10 +00:00
have h1 : bosonic = fermionic + fermionic := by
simp only [add_eq_mul, instCommGroup, mul_self]
rfl
conv_lhs => rw [h1]
2025-02-03 11:05:43 +00:00
apply fieldOpFreeAlgebraGrade.mul_mem
2025-01-29 16:41:10 +00:00
simp only [SetLike.coe_mem]
simp)]
2025-01-29 16:41:10 +00:00
simp only [ZeroMemClass.coe_zero, add_zero, zero_add]
· have h1 : bosonic = bosonic + bosonic := by
simp only [add_eq_mul, instCommGroup, mul_self]
rfl
conv_lhs => rw [h1]
2025-02-03 11:05:43 +00:00
apply fieldOpFreeAlgebraGrade.mul_mem
2025-01-29 16:41:10 +00:00
simp only [SetLike.coe_mem]
simp
2025-02-03 11:05:43 +00:00
lemma fermionicProj_mul (a b : 𝓕.FieldOpFreeAlgebra) :
(a * b).fermionicProj.1 = a.bosonicProj.1 * b.fermionicProj.1
+ a.fermionicProj.1 * b.bosonicProj.1 := by
conv_lhs =>
rw [← bosonicProj_add_fermionicProj a]
rw [← bosonicProj_add_fermionicProj b]
2025-01-29 16:41:10 +00:00
simp only [mul_add, add_mul, map_add, Submodule.coe_add]
conv_lhs =>
left
left
rw [fermionicProj_of_mem_bosonic _
(by
2025-01-29 16:41:10 +00:00
have h1 : bosonic = bosonic + bosonic := by
simp only [add_eq_mul, instCommGroup, mul_self]
rfl
conv_lhs => rw [h1]
2025-02-03 11:05:43 +00:00
apply fieldOpFreeAlgebraGrade.mul_mem
2025-01-29 16:41:10 +00:00
simp only [SetLike.coe_mem]
simp)]
conv_lhs =>
left
right
rw [fermionicProj_of_mem_fermionic _
(by
have h1 : fermionic = fermionic + bosonic := by simp
conv_lhs => rw [h1]
2025-02-03 11:05:43 +00:00
apply fieldOpFreeAlgebraGrade.mul_mem
2025-01-29 16:41:10 +00:00
simp only [SetLike.coe_mem]
simp)]
conv_lhs =>
right
left
rw [fermionicProj_of_mem_fermionic _
(by
have h1 : fermionic = bosonic + fermionic := by simp
conv_lhs => rw [h1]
2025-02-03 11:05:43 +00:00
apply fieldOpFreeAlgebraGrade.mul_mem
2025-01-29 16:41:10 +00:00
simp only [SetLike.coe_mem]
simp)]
conv_lhs =>
right
right
rw [fermionicProj_of_mem_bosonic _
(by
2025-01-29 16:41:10 +00:00
have h1 : bosonic = fermionic + fermionic := by
simp only [add_eq_mul, instCommGroup, mul_self]
rfl
conv_lhs => rw [h1]
2025-02-03 11:05:43 +00:00
apply fieldOpFreeAlgebraGrade.mul_mem
2025-01-29 16:41:10 +00:00
simp only [SetLike.coe_mem]
simp)]
2025-01-29 16:41:10 +00:00
simp only [ZeroMemClass.coe_zero, zero_add, add_zero]
abel
2025-01-28 11:53:24 +00:00
2025-01-28 09:48:38 +00:00
end
2025-02-03 11:05:43 +00:00
end FieldOpFreeAlgebra
2025-01-28 09:48:38 +00:00
end FieldSpecification