Imports
/-
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Tooby-Smith
-/
module
public import Physlib.QFT.PerturbationTheory.FieldSpecification.CrAnSectionCreation and annihilation free-algebra
This module defines the creation and annihilation algebra for a field structure.
The creation and annihilation algebra extends from the state algebra by adding information about whether a state is a creation or annihilation operator.
The algebra is spanned by lists of creation/annihilation states.
The main structures defined in this module are:
FieldOpFreeAlgebra - The creation and annihilation algebra
ofCrAnOpF - Maps a creation/annihilation state to the algebra
ofCrAnListF - Maps a list of creation/annihilation states to the algebra
ofFieldOpF - Maps a state to a sum of creation and annihilation operators
crPartF - The creation part of a state in the algebra
anPartF - The annihilation part of a state in the algebra
superCommuteF - The super commutator on the algebra
The key lemmas show how these operators interact, particularly focusing on the super commutation relations between creation and annihilation operators.
@[expose] public section
For a field specification 𝓕, the algebra 𝓕.FieldOpFreeAlgebra is
the free algebra generated by 𝓕.CrAnFieldOp.
abbrev FieldOpFreeAlgebra (𝓕 : FieldSpecification) : Type := FreeAlgebra ℂ 𝓕.CrAnFieldOp
For a field specification 𝓕, and a element φ of 𝓕.CrAnFieldOp,
ofCrAnOpF φ is defined as the element of 𝓕.FieldOpFreeAlgebra formed by φ.
def ofCrAnOpF (φ : 𝓕.CrAnFieldOp) : FieldOpFreeAlgebra 𝓕 :=
FreeAlgebra.ι ℂ φ
The algebra 𝓕.FieldOpFreeAlgebra satisfies the universal property that for any other algebra
A (e.g. the operator algebra of the theory) with a map f : 𝓕.CrAnFieldOp → A (e.g.
the inclusion of the creation and annihilation parts of field operators into the
operator algebra) there is a unique algebra map g : 𝓕.FieldOpFreeAlgebra → A
such that g ∘ ofCrAnOpF = f.
The unique g is given by FreeAlgebra.lift ℂ f.
lemma universality {A : Type} [Semiring A] [Algebra ℂ A] (f : 𝓕.CrAnFieldOp → A) :
∃! g : FieldOpFreeAlgebra 𝓕 →ₐ[ℂ] A, g ∘ ofCrAnOpF = f := 𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → A⊢ ∃! g, ⇑g ∘ ofCrAnOpF = f
𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → A⊢ (fun g => ⇑g ∘ ofCrAnOpF = f) ((FreeAlgebra.lift ℂ) f) ∧
∀ (y : 𝓕.FieldOpFreeAlgebra →ₐ[ℂ] A), (fun g => ⇑g ∘ ofCrAnOpF = f) y → y = (FreeAlgebra.lift ℂ) f
𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → A⊢ (fun g => ⇑g ∘ ofCrAnOpF = f) ((FreeAlgebra.lift ℂ) f)𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → A⊢ ∀ (y : 𝓕.FieldOpFreeAlgebra →ₐ[ℂ] A), (fun g => ⇑g ∘ ofCrAnOpF = f) y → y = (FreeAlgebra.lift ℂ) f
𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → A⊢ (fun g => ⇑g ∘ ofCrAnOpF = f) ((FreeAlgebra.lift ℂ) f) 𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → Ax:𝓕.CrAnFieldOp⊢ (⇑((FreeAlgebra.lift ℂ) f) ∘ ofCrAnOpF) x = f x
All goals completed! 🐙
𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → A⊢ ∀ (y : 𝓕.FieldOpFreeAlgebra →ₐ[ℂ] A), (fun g => ⇑g ∘ ofCrAnOpF = f) y → y = (FreeAlgebra.lift ℂ) f 𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → Ag:𝓕.FieldOpFreeAlgebra →ₐ[ℂ] Ahg:⇑g ∘ ofCrAnOpF = f⊢ g = (FreeAlgebra.lift ℂ) f
𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → Ag:𝓕.FieldOpFreeAlgebra →ₐ[ℂ] Ahg:⇑g ∘ ofCrAnOpF = fx:𝓕.CrAnFieldOp⊢ (⇑g ∘ FreeAlgebra.ι ℂ) x = (⇑((FreeAlgebra.lift ℂ) f) ∘ FreeAlgebra.ι ℂ) x
𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → Ag:𝓕.FieldOpFreeAlgebra →ₐ[ℂ] Ahg:⇑g ∘ ofCrAnOpF = fx:𝓕.CrAnFieldOph1:(⇑g ∘ ofCrAnOpF) x = f x⊢ (⇑g ∘ FreeAlgebra.ι ℂ) x = (⇑((FreeAlgebra.lift ℂ) f) ∘ FreeAlgebra.ι ℂ) x
𝓕:FieldSpecificationA:Typeinst✝¹:Semiring Ainst✝:Algebra ℂ Af:𝓕.CrAnFieldOp → Ag:𝓕.FieldOpFreeAlgebra →ₐ[ℂ] Ahg:⇑g ∘ ofCrAnOpF = fx:𝓕.CrAnFieldOph1:g (ofCrAnOpF x) = f x⊢ g (FreeAlgebra.ι ℂ x) = f x
All goals completed! 🐙
For a field specification 𝓕, and a list φs of 𝓕.CrAnFieldOp,
ofCrAnListF φs is defined as the element of 𝓕.FieldOpFreeAlgebra
obtained by the product of ofCrAnListF φ for each φ in φs.
For example ofCrAnListF [φ₁, φ₂, φ₃] = ofCrAnOpF φ₁ * ofCrAnOpF φ₂ * ofCrAnOpF φ₃.
The set of all ofCrAnListF φs forms a basis of FieldOpFreeAlgebra 𝓕.
def ofCrAnListF (φs : List 𝓕.CrAnFieldOp) : FieldOpFreeAlgebra 𝓕 := (List.map ofCrAnOpF φs).prod@[simp]
lemma ofCrAnListF_nil : ofCrAnListF ([] : List 𝓕.CrAnFieldOp) = 1 := rfllemma ofCrAnListF_cons (φ : 𝓕.CrAnFieldOp) (φs : List 𝓕.CrAnFieldOp) :
ofCrAnListF (φ :: φs) = ofCrAnOpF φ * ofCrAnListF φs := rfllemma ofCrAnListF_append (φs φs' : List 𝓕.CrAnFieldOp) :
ofCrAnListF (φs ++ φs') = ofCrAnListF φs * ofCrAnListF φs' := 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ ofCrAnListF (φs ++ φs') = ofCrAnListF φs * ofCrAnListF φs'
All goals completed! 🐙lemma ofCrAnListF_singleton (φ : 𝓕.CrAnFieldOp) :
ofCrAnListF [φ] = ofCrAnOpF φ := 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOp⊢ ofCrAnListF [φ] = ofCrAnOpF φ All goals completed! 🐙
For a field specification 𝓕, and an element φ of 𝓕.FieldOp,
ofFieldOpF φ is the element of 𝓕.FieldOpFreeAlgebra formed by summing over
ofCrAnOpF of the
creation and annihilation parts of φ.
For example, for φ an incoming asymptotic field operator we get
ofCrAnOpF ⟨φ, ()⟩, and for φ a
position field operator we get ofCrAnOpF ⟨φ, .create⟩ + ofCrAnOpF ⟨φ, .annihilate⟩.
def ofFieldOpF (φ : 𝓕.FieldOp) : FieldOpFreeAlgebra 𝓕 :=
∑ (i : 𝓕.fieldOpToCrAnType φ), ofCrAnOpF ⟨φ, i⟩
For a field specification 𝓕, and a list φs of 𝓕.FieldOp,
𝓕.ofFieldOpListF φs is defined as the element of 𝓕.FieldOpFreeAlgebra
obtained by the product of ofFieldOpF φ for each φ in φs.
For example ofFieldOpListF [φ₁, φ₂, φ₃] = ofFieldOpF φ₁ * ofFieldOpF φ₂ * ofFieldOpF φ₃.
def ofFieldOpListF (φs : List 𝓕.FieldOp) : FieldOpFreeAlgebra 𝓕 := (List.map ofFieldOpF φs).prod
Coercion from List 𝓕.FieldOp to FieldOpFreeAlgebra 𝓕 through ofFieldOpListF.
instance : Coe (List 𝓕.FieldOp) (FieldOpFreeAlgebra 𝓕) := ⟨ofFieldOpListF⟩@[simp]
lemma ofFieldOpListF_nil : ofFieldOpListF ([] : List 𝓕.FieldOp) = 1 := rfllemma ofFieldOpListF_cons (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) :
ofFieldOpListF (φ :: φs) = ofFieldOpF φ * ofFieldOpListF φs := rfllemma ofFieldOpListF_singleton (φ : 𝓕.FieldOp) :
ofFieldOpListF [φ] = ofFieldOpF φ := 𝓕:FieldSpecificationφ:𝓕.FieldOp⊢ ofFieldOpListF [φ] = ofFieldOpF φ All goals completed! 🐙All goals completed! 🐙
lemma ofFieldOpListF_sum (φs : List 𝓕.FieldOp) :
ofFieldOpListF φs = ∑ (s : CrAnSection φs), ofCrAnListF s.1 := by 𝓕:FieldSpecificationφs:List 𝓕.FieldOp⊢ ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s
induction φs with
| nil => nil 𝓕:FieldSpecification⊢ ofFieldOpListF [] = ∑ s, ofCrAnListF ↑s simp All goals completed! 🐙
| cons φ φs ih => cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpListF (φ :: φs) = ∑ s, ofCrAnListF ↑s
rw [CrAnSection.sum_cons cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpListF (φ :: φs) = ∑ a, ∑ s, ofCrAnListF ↑(CrAnSection.cons a s) cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpListF (φ :: φs) = ∑ a, ∑ s, ofCrAnListF ↑(CrAnSection.cons a s)] cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpListF (φ :: φs) = ∑ a, ∑ s, ofCrAnListF ↑(CrAnSection.cons a s)
dsimp only [CrAnSection.cons, ofCrAnListF_cons] cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpListF (φ :: φs) = ∑ a, ∑ s, ofCrAnOpF ⟨φ, a⟩ * ofCrAnListF ↑s
conv_rhs =>
enter [2, x] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑sx:𝓕.fieldOpToCrAnType φ| ∑ s, ofCrAnOpF ⟨φ, x⟩ * ofCrAnListF ↑s
rw [← Finset.mul_sum] 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑sx:𝓕.fieldOpToCrAnType φ| ofCrAnOpF ⟨φ, x⟩ * ∑ i, ofCrAnListF ↑i
rw [← Finset.sum_mul, cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpListF (φ :: φs) = (∑ i, ofCrAnOpF ⟨φ, i⟩) * ∑ i, ofCrAnListF ↑i cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpF φ * ofFieldOpListF φs = (∑ i, ofCrAnOpF ⟨φ, i⟩) * ofFieldOpListF φs ofFieldOpListF_cons, cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpF φ * ofFieldOpListF φs = (∑ i, ofCrAnOpF ⟨φ, i⟩) * ∑ i, ofCrAnListF ↑icons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpF φ * ofFieldOpListF φs = (∑ i, ofCrAnOpF ⟨φ, i⟩) * ofFieldOpListF φs ← ih cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpF φ * ofFieldOpListF φs = (∑ i, ofCrAnOpF ⟨φ, i⟩) * ofFieldOpListF φscons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpF φ * ofFieldOpListF φs = (∑ i, ofCrAnOpF ⟨φ, i⟩) * ofFieldOpListF φs]cons 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpih:ofFieldOpListF φs = ∑ s, ofCrAnListF ↑s⊢ ofFieldOpF φ * ofFieldOpListF φs = (∑ i, ofCrAnOpF ⟨φ, i⟩) * ofFieldOpListF φs
rfl All goals completed! 🐙Creation and annihilation parts of a state
The algebra map taking an element of the free-state algebra to the part of it in the creation and annihilation free algebra spanned by creation operators.
def crPartF : 𝓕.FieldOp → 𝓕.FieldOpFreeAlgebra := fun φ =>
match φ with
| FieldOp.inAsymp φ => ofCrAnOpF ⟨FieldOp.inAsymp φ, ()⟩
| FieldOp.position φ => ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.create⟩
| FieldOp.outAsymp _ => 0@[simp]
lemma crPartF_negAsymp (φ : (Σ f, 𝓕.AsymptoticLabel f) × Momentum) :
crPartF (FieldOp.inAsymp φ) = ofCrAnOpF ⟨FieldOp.inAsymp φ, ()⟩ := by 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.AsymptoticLabel f) × Momentum⊢ crPartF (FieldOp.inAsymp φ) = ofCrAnOpF ⟨FieldOp.inAsymp φ, ()⟩
simp [crPartF] All goals completed! 🐙@[simp]
lemma crPartF_position (φ : (Σ f, 𝓕.PositionLabel f) × SpaceTime) :
crPartF (FieldOp.position φ) =
ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.create⟩ := by 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.PositionLabel f) × SpaceTime⊢ crPartF (FieldOp.position φ) = ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.create⟩
simp [crPartF] All goals completed! 🐙@[simp]
lemma crPartF_posAsymp (φ : (Σ f, 𝓕.AsymptoticLabel f) × Momentum) :
crPartF (FieldOp.outAsymp φ) = 0 := by 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.AsymptoticLabel f) × Momentum⊢ crPartF (FieldOp.outAsymp φ) = 0
simp [crPartF] All goals completed! 🐙The algebra map taking an element of the free-state algebra to the part of it in the creation and annihilation free algebra spanned by annihilation operators.
def anPartF : 𝓕.FieldOp → 𝓕.FieldOpFreeAlgebra := fun φ =>
match φ with
| FieldOp.inAsymp _ => 0
| FieldOp.position φ => ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.annihilate⟩
| FieldOp.outAsymp φ => ofCrAnOpF ⟨FieldOp.outAsymp φ, ()⟩@[simp]
lemma anPartF_negAsymp (φ : (Σ f, 𝓕.AsymptoticLabel f) × Momentum) :
anPartF (FieldOp.inAsymp φ) = 0 := by 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.AsymptoticLabel f) × Momentum⊢ anPartF (FieldOp.inAsymp φ) = 0
simp [anPartF] All goals completed! 🐙@[simp]
lemma anPartF_position (φ : (Σ f, 𝓕.PositionLabel f) × SpaceTime) :
anPartF (FieldOp.position φ) =
ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.annihilate⟩ := by 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.PositionLabel f) × SpaceTime⊢ anPartF (FieldOp.position φ) = ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.annihilate⟩
simp [anPartF] All goals completed! 🐙@[simp]
lemma anPartF_posAsymp (φ : (Σ f, 𝓕.AsymptoticLabel f) × Momentum) :
anPartF (FieldOp.outAsymp φ) = ofCrAnOpF ⟨FieldOp.outAsymp φ, ()⟩ := by 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.AsymptoticLabel f) × Momentum⊢ anPartF (FieldOp.outAsymp φ) = ofCrAnOpF ⟨FieldOp.outAsymp φ, ()⟩
simp [anPartF] All goals completed! 🐙
lemma ofFieldOpF_eq_crPartF_add_anPartF (φ : 𝓕.FieldOp) :
ofFieldOpF φ = crPartF φ + anPartF φ := by 𝓕:FieldSpecificationφ:𝓕.FieldOp⊢ ofFieldOpF φ = crPartF φ + anPartF φ
rw [ofFieldOpF 𝓕:FieldSpecificationφ:𝓕.FieldOp⊢ ∑ i, ofCrAnOpF ⟨φ, i⟩ = crPartF φ + anPartF φ 𝓕:FieldSpecificationφ:𝓕.FieldOp⊢ ∑ i, ofCrAnOpF ⟨φ, i⟩ = crPartF φ + anPartF φ] 𝓕:FieldSpecificationφ:𝓕.FieldOp⊢ ∑ i, ofCrAnOpF ⟨φ, i⟩ = crPartF φ + anPartF φ
cases φ with
| inAsymp φ => inAsymp 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.AsymptoticLabel f) × Momentum⊢ ∑ i, ofCrAnOpF ⟨FieldOp.inAsymp φ, i⟩ = crPartF (FieldOp.inAsymp φ) + anPartF (FieldOp.inAsymp φ) simp [fieldOpToCrAnType] All goals completed! 🐙
| position φ => position 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.PositionLabel f) × SpaceTime⊢ ∑ i, ofCrAnOpF ⟨FieldOp.position φ, i⟩ = crPartF (FieldOp.position φ) + anPartF (FieldOp.position φ) simp [fieldOpToCrAnType] position 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.PositionLabel f) × SpaceTime⊢ ∑ x, ofCrAnOpF ⟨FieldOp.position φ, x⟩ =
ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.create⟩ + ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.annihilate⟩; erw [CreateAnnihilate.sum_eq position 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.PositionLabel f) × SpaceTime⊢ ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.create⟩ + ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.annihilate⟩ =
ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.create⟩ + ofCrAnOpF ⟨FieldOp.position φ, CreateAnnihilate.annihilate⟩] All goals completed! 🐙
| outAsymp φ => outAsymp 𝓕:FieldSpecificationφ:((f : 𝓕.Field) × 𝓕.AsymptoticLabel f) × Momentum⊢ ∑ i, ofCrAnOpF ⟨FieldOp.outAsymp φ, i⟩ = crPartF (FieldOp.outAsymp φ) + anPartF (FieldOp.outAsymp φ) simp [fieldOpToCrAnType] All goals completed! 🐙The basis of the creation and annihilation free-algebra.
set_option backward.isDefEq.respectTransparency false in
@[simp]
lemma ofListBasis_eq_ofList (φs : List 𝓕.CrAnFieldOp) :
ofCrAnListFBasis φs = ofCrAnListF φs := by 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOp⊢ ofCrAnListFBasis φs = ofCrAnListF φs
have key : ∀ ψs : List 𝓕.CrAnFieldOp, FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs)
= MonoidAlgebra.single (FreeMonoid.ofList ψs) 1 := by
intro ψs 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOp⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs
induction ψs with
| nil => nil 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOp⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF []) = MonoidAlgebra.single (FreeMonoid.ofList []) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs simp [ofCrAnListF, MonoidAlgebra.one_def] All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs
| cons φ ψs ih => cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF (φ :: ψs)) = MonoidAlgebra.single (FreeMonoid.ofList (φ :: ψs)) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs
rw [ofCrAnListF, cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (List.map ofCrAnOpF (φ :: ψs)).prod =
MonoidAlgebra.single (FreeMonoid.ofList (φ :: ψs)) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs List.map_cons, cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnOpF φ :: List.map ofCrAnOpF ψs).prod =
MonoidAlgebra.single (FreeMonoid.ofList (φ :: ψs)) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs List.prod_cons, cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnOpF φ * (List.map ofCrAnOpF ψs).prod) =
MonoidAlgebra.single (FreeMonoid.ofList (φ :: ψs)) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs ← ofCrAnListF, cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnOpF φ * ofCrAnListF ψs) =
MonoidAlgebra.single (FreeMonoid.ofList (φ :: ψs)) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs map_mul, cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnOpF φ) * FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) =
MonoidAlgebra.single (FreeMonoid.ofList (φ :: ψs)) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs ih, cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnOpF φ) * MonoidAlgebra.single (FreeMonoid.ofList ψs) 1 =
MonoidAlgebra.single (FreeMonoid.ofList (φ :: ψs)) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs
FreeMonoid.ofList_cons, cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnOpF φ) * MonoidAlgebra.single (FreeMonoid.ofList ψs) 1 =
MonoidAlgebra.single (FreeMonoid.of φ * FreeMonoid.ofList ψs) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs
show FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnOpF φ)
= MonoidAlgebra.single (FreeMonoid.of φ) 1 by 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOp⊢ ofCrAnListFBasis φs = ofCrAnListF φs 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs
simp [ofCrAnOpF, FreeAlgebra.equivMonoidAlgebraFreeMonoid, MonoidAlgebra.of_apply] All goals completed! 🐙 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs,
MonoidAlgebra.single_mul_single, cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ MonoidAlgebra.single (FreeMonoid.of φ * FreeMonoid.ofList ψs) (1 * 1) =
MonoidAlgebra.single (FreeMonoid.of φ * FreeMonoid.ofList ψs) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs one_mul cons 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφ:𝓕.CrAnFieldOpψs:List 𝓕.CrAnFieldOpih:FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ MonoidAlgebra.single (FreeMonoid.of φ * FreeMonoid.ofList ψs) 1 =
MonoidAlgebra.single (FreeMonoid.of φ * FreeMonoid.ofList ψs) 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs] 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis φs = ofCrAnListF φs
rw [Basis.apply_eq_iff 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis.repr (ofCrAnListF φs) = Finsupp.single φs 1 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis.repr (ofCrAnListF φs) = Finsupp.single φs 1] 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ ofCrAnListFBasis.repr (ofCrAnListF φs) = Finsupp.single φs 1
simp only [ofCrAnListFBasis, LinearEquiv.trans_apply, AlgEquiv.toLinearEquiv_apply, key] 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpkey:∀ (ψs : List 𝓕.CrAnFieldOp),
FreeAlgebra.equivMonoidAlgebraFreeMonoid (ofCrAnListF ψs) = MonoidAlgebra.single (FreeMonoid.ofList ψs) 1⊢ (MonoidAlgebra.coeffLinearEquiv ℂ) (MonoidAlgebra.single (FreeMonoid.ofList φs) 1) = Finsupp.single φs 1
rfl All goals completed! 🐙
lemma ofCrAnListF_injective : Function.Injective (ofCrAnListF (𝓕 := 𝓕)) := by 𝓕:FieldSpecification⊢ Function.Injective ofCrAnListF
intro φs φs' h 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOph:ofCrAnListF φs = ofCrAnListF φs'⊢ φs = φs'
rw [← ofListBasis_eq_ofList, 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOph:ofCrAnListFBasis φs = ofCrAnListF φs'⊢ φs = φs' 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOph:ofCrAnListFBasis φs = ofCrAnListFBasis φs'⊢ φs = φs' ← ofListBasis_eq_ofList 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOph:ofCrAnListFBasis φs = ofCrAnListFBasis φs'⊢ φs = φs' 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOph:ofCrAnListFBasis φs = ofCrAnListFBasis φs'⊢ φs = φs'] at h 𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOph:ofCrAnListFBasis φs = ofCrAnListFBasis φs'⊢ φs = φs'
exact Basis.injective ofCrAnListFBasis h All goals completed! 🐙Some useful multi-linear maps.
lemma mulLinearMap_apply (a b : FieldOpFreeAlgebra 𝓕) :
mulLinearMap a b = a * b := rfl