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.CrAnFieldOp

Filters of lists of CrAnFieldOp

@[expose] public section

Given a list of creation and annihilation states, the filtered list only containing the creation states. As a schematic example, for the list:

    [φ1c, φ1a, φ2c, φ2a] this will return [φ1c, φ2c].

def createFilter (φs : List 𝓕.CrAnFieldOp) : List 𝓕.CrAnFieldOp := List.filter (fun φ => 𝓕 |>ᶜ φ = CreateAnnihilate.create) φs
𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ decide (𝓕|>ᶜφ = CreateAnnihilate.create) = true All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ ¬decide (𝓕|>ᶜφ = CreateAnnihilate.create) = true All goals completed! 🐙𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs ++ List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.create)) φs' = createFilter φs ++ createFilter φs' All goals completed! 🐙lemma createFilter_singleton_create (φ : 𝓕.CrAnFieldOp) (hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.create) : createFilter [φ] = [φ] := 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ createFilter [φ] = [φ] All goals completed! 🐙lemma createFilter_singleton_annihilate (φ : 𝓕.CrAnFieldOp) (hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate) : createFilter [φ] = [] := 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ createFilter [φ] = [] All goals completed! 🐙

Given a list of creation and annihilation states, the filtered list only containing the annihilation states. As a schematic example, for the list:

    [φ1c, φ1a, φ2c, φ2a] this will return [φ1a, φ2a].

def annihilateFilter (φs : List 𝓕.CrAnFieldOp) : List 𝓕.CrAnFieldOp := List.filter (fun φ => 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate) φs
𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.createφs:List 𝓕.CrAnFieldOp⊢ ¬decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate) = true All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilateφs:List 𝓕.CrAnFieldOp⊢ decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate) = true All goals completed! 🐙𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOpφs':List 𝓕.CrAnFieldOp⊢ List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs ++ List.filter (fun φ => decide (𝓕|>ᶜφ = CreateAnnihilate.annihilate)) φs' = annihilateFilter φs ++ annihilateFilter φs' All goals completed! 🐙lemma annihilateFilter_singleton_create (φ : 𝓕.CrAnFieldOp) (hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.create) : annihilateFilter [φ] = [] := 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.create⊢ annihilateFilter [φ] = [] All goals completed! 🐙lemma annihilateFilter_singleton_annihilate (φ : 𝓕.CrAnFieldOp) (hφ : 𝓕 |>ᶜ φ = CreateAnnihilate.annihilate) : annihilateFilter [φ] = [φ] := 𝓕:FieldSpecificationφ:𝓕.CrAnFieldOphφ:𝓕|>ᶜφ = CreateAnnihilate.annihilate⊢ annihilateFilter [φ] = [φ] All goals completed! 🐙