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.TimeOrder public import Physlib.QFT.PerturbationTheory.FieldOpFreeAlgebra.SuperCommute

Time Ordering in the FieldOpFreeAlgebra

@[expose] public section

Time order

For a field specification 𝓕, timeOrderF is the linear map

FieldOpFreeAlgebra 𝓕 →ₗ[ℂ] FieldOpFreeAlgebra 𝓕

defined by its action on the basis ofCrAnListF φs, taking ofCrAnListF φs to

crAnTimeOrderSign φs • ofCrAnListF (crAnTimeOrderList φs).

That is, timeOrderF time-orders the field operators and multiplies by the sign of the time order.

The notation 𝓣ᶠ(a) is used for timeOrderF a

def timeOrderF : FieldOpFreeAlgebra 𝓕 →ₗ[] FieldOpFreeAlgebra 𝓕 := Basis.constr ofCrAnListFBasis fun φs => crAnTimeOrderSign φs ofCrAnListF (crAnTimeOrderList φs)
@[inherit_doc timeOrderF] scoped[FieldSpecification.FieldOpFreeAlgebra] notation "𝓣ᶠ(" a ")" => timeOrderF a𝓕:FieldSpecificationφs:List 𝓕.CrAnFieldOptimeOrderF (ofCrAnListFBasis φs) = crAnTimeOrderSign φs ofCrAnListF (crAnTimeOrderList φs) All goals completed! 🐙All goals completed! 🐙 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs)φs':List 𝓕.CrAnFieldOppa:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun a ha => timeOrderF (a * ofCrAnListF φs' * ofCrAnListF φs) = timeOrderF (a * timeOrderF (ofCrAnListF φs') * ofCrAnListF φs)pa 0 All goals completed! 🐙 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs)φs':List 𝓕.CrAnFieldOppa:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun a ha => timeOrderF (a * ofCrAnListF φs' * ofCrAnListF φs) = timeOrderF (a * timeOrderF (ofCrAnListF φs') * ofCrAnListF φs) (x y : 𝓕.FieldOpFreeAlgebra) (hx : x Submodule.span (Set.range ofCrAnListFBasis)) (hy : y Submodule.span (Set.range ofCrAnListFBasis)), pa x hx pa y hy pa (x + y) 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs)φs':List 𝓕.CrAnFieldOppa:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun a ha => timeOrderF (a * ofCrAnListF φs' * ofCrAnListF φs) = timeOrderF (a * timeOrderF (ofCrAnListF φs') * ofCrAnListF φs)x:𝓕.FieldOpFreeAlgebray:𝓕.FieldOpFreeAlgebrahx:x Submodule.span (Set.range ofCrAnListFBasis)hy:y Submodule.span (Set.range ofCrAnListFBasis)h1:pa x hxh2:pa y hypa (x + y) All goals completed! 🐙 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs)φs':List 𝓕.CrAnFieldOppa:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun a ha => timeOrderF (a * ofCrAnListF φs' * ofCrAnListF φs) = timeOrderF (a * timeOrderF (ofCrAnListF φs') * ofCrAnListF φs) (a : ) (x : 𝓕.FieldOpFreeAlgebra) (hx : x Submodule.span (Set.range ofCrAnListFBasis)), pa x hx pa (a x) 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs)φs':List 𝓕.CrAnFieldOppa:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun a ha => timeOrderF (a * ofCrAnListF φs' * ofCrAnListF φs) = timeOrderF (a * timeOrderF (ofCrAnListF φs') * ofCrAnListF φs)x:hx:𝓕.FieldOpFreeAlgebrah:hx Submodule.span (Set.range ofCrAnListFBasis)pa hx h pa (x hx) All goals completed! 🐙 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs)pb 0 All goals completed! 🐙 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs) (x y : 𝓕.FieldOpFreeAlgebra) (hx : x Submodule.span (Set.range ofCrAnListFBasis)) (hy : y Submodule.span (Set.range ofCrAnListFBasis)), pb x hx pb y hy pb (x + y) 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs)x:𝓕.FieldOpFreeAlgebray:𝓕.FieldOpFreeAlgebrahx:x Submodule.span (Set.range ofCrAnListFBasis)hy:y Submodule.span (Set.range ofCrAnListFBasis)h1:pb x hxh2:pb y hypb (x + y) All goals completed! 🐙 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs) (a : ) (x : 𝓕.FieldOpFreeAlgebra) (hx : x Submodule.span (Set.range ofCrAnListFBasis)), pb x hx pb (a x) 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)φs:List 𝓕.CrAnFieldOppb:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun b hb => timeOrderF (a * b * ofCrAnListF φs) = timeOrderF (a * timeOrderF b * ofCrAnListF φs)x:hx:𝓕.FieldOpFreeAlgebrah:hx Submodule.span (Set.range ofCrAnListFBasis)pb hx h pb (x hx) All goals completed! 🐙 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)pc 0 All goals completed! 🐙 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c) (x y : 𝓕.FieldOpFreeAlgebra) (hx : x Submodule.span (Set.range ofCrAnListFBasis)) (hy : y Submodule.span (Set.range ofCrAnListFBasis)), pc x hx pc y hy pc (x + y) 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)x:𝓕.FieldOpFreeAlgebray:𝓕.FieldOpFreeAlgebrahx:x Submodule.span (Set.range ofCrAnListFBasis)hy:y Submodule.span (Set.range ofCrAnListFBasis)h1:pc x hxh2:pc y hypc (x + y) All goals completed! 🐙 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c) (a : ) (x : 𝓕.FieldOpFreeAlgebra) (hx : x Submodule.span (Set.range ofCrAnListFBasis)), pc x hx pc (a x) 𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebrac:𝓕.FieldOpFreeAlgebrapc:(c : 𝓕.FieldOpFreeAlgebra) c Submodule.span (Set.range ofCrAnListFBasis) Prop := fun c hc => timeOrderF (a * b * c) = timeOrderF (a * timeOrderF b * c)x:hx:𝓕.FieldOpFreeAlgebrah:hx Submodule.span (Set.range ofCrAnListFBasis)hp:pc hx hpc (x hx) All goals completed! 🐙𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebratimeOrderF (a * timeOrderF b * 1) = timeOrderF (a * timeOrderF b) All goals completed! 🐙𝓕:FieldSpecificationa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebratimeOrderF (1 * timeOrderF a * b) = timeOrderF (timeOrderF a * b) All goals completed! 🐙𝓕:FieldSpecificationφs:List 𝓕.FieldOp x, ofCrAnListF (crAnTimeOrderList x) = s, ofCrAnListF (crAnSectionTimeOrder φs s) All goals completed! 🐙𝓕:FieldSpecificationtimeOrderSign [] ofFieldOpListF (timeOrderList []) = 1 All goals completed! 🐙@[simp] lemma timeOrderF_ofFieldOpListF_singleton (φ : 𝓕.FieldOp) : 𝓣ᶠ(ofFieldOpListF [φ]) = ofFieldOpListF [φ] := 𝓕:FieldSpecificationφ:𝓕.FieldOptimeOrderF (ofFieldOpListF [φ]) = ofFieldOpListF [φ] All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.FieldOpψ:𝓕.FieldOph:timeOrderRel φ ψ1 ofFieldOpListF [φ, ψ] = ofFieldOpListF [φ, ψ] All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.FieldOpψ:𝓕.FieldOph:¬timeOrderRel φ ψ(exchangeSign (𝓕|>ₛφ)) (𝓕|>ₛψ) ofFieldOpListF [ψ, φ] = (exchangeSign (𝓕|>ₛφ)) (𝓕|>ₛψ) (ofFieldOpListF [ψ] * ofFieldOpListF [φ]) All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.FieldOpψ:𝓕.FieldOph:¬timeOrderRel φ ψ(exchangeSign (𝓕|>ₛφ)) (𝓕|>ₛψ) ofFieldOpF ψ * ofFieldOpF φ = (exchangeSign (𝓕|>ₛφ)) (𝓕|>ₛψ) (ofFieldOpF ψ * ofFieldOpF φ)𝓕:FieldSpecificationφ:𝓕.FieldOpψ:𝓕.FieldOph:¬timeOrderRel φ ψtimeOrderRel ψ φ 𝓕:FieldSpecificationφ:𝓕.FieldOpψ:𝓕.FieldOph:¬timeOrderRel φ ψtimeOrderRel ψ φ 𝓕:FieldSpecificationφ:𝓕.FieldOpψ:𝓕.FieldOph:¬timeOrderRel φ ψhx:timeOrderRel ψ φ timeOrderRel φ ψtimeOrderRel ψ φ All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpψ:𝓕.CrAnFieldOph:¬crAnTimeOrderRel φ ψh1:crAnTimeOrderRel φ ψ crAnTimeOrderRel ψ φcrAnTimeOrderRel ψ φ All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpψ:𝓕.CrAnFieldOph:¬crAnTimeOrderRel φ ψa:𝓕.FieldOpFreeAlgebratimeOrderF (a * 0) = 0 All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpψ:𝓕.CrAnFieldOph:¬crAnTimeOrderRel φ ψa:𝓕.FieldOpFreeAlgebratimeOrderF (0 * a) = 0 All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpψ:𝓕.CrAnFieldOph:¬crAnTimeOrderRel φ ψa:𝓕.FieldOpFreeAlgebrab:𝓕.FieldOpFreeAlgebratimeOrderF (a * 0 * b) = 0 All goals completed! 🐙𝓕:FieldSpecificationφ1:𝓕.CrAnFieldOpφ2:𝓕.CrAnFieldOph:¬crAnTimeOrderRel φ1 φ2a:𝓕.FieldOpFreeAlgebrah':(superCommuteF (ofCrAnListF [φ1])) (ofCrAnListF [φ2]) statisticSubmodule fermionic0 + 0 = 0 All goals completed! 🐙𝓕:FieldSpecificationφ1:𝓕.CrAnFieldOpφ2:𝓕.CrAnFieldOpφ3:𝓕.CrAnFieldOph12:¬crAnTimeOrderRel φ1 φ2h13:¬crAnTimeOrderRel φ1 φ3(exchangeSign (𝓕.crAnStatistics φ1)) (𝓕.crAnStatistics φ2) = 0 (exchangeSign (𝓕.crAnStatistics φ3)) (𝓕.crAnStatistics φ1) = 0 0 = 0 All goals completed! 🐙𝓕:FieldSpecificationφ1:𝓕.CrAnFieldOpφ2:𝓕.CrAnFieldOpφ3:𝓕.CrAnFieldOph12:¬crAnTimeOrderRel φ2 φ1h13:¬crAnTimeOrderRel φ3 φ1(exchangeSign (𝓕.crAnStatistics φ1)) (𝓕.crAnStatistics φ2) = 0 0 = 0 All goals completed! 🐙All goals completed! 🐙 𝓕:FieldSpecificationφ1:𝓕.CrAnFieldOpφ2:𝓕.CrAnFieldOpφ3:𝓕.CrAnFieldOph:¬crAnTimeOrderRel φ3 φ1h23:crAnTimeOrderRel φ2 φ3h32:crAnTimeOrderRel φ3 φ2h12:crAnTimeOrderRel φ1 φ2h13:crAnTimeOrderRel φ1 φ3h21:crAnTimeOrderRel φ2 φ1timeOrderF ((superCommuteF (ofCrAnOpF φ1)) ((superCommuteF (ofCrAnOpF φ2)) (ofCrAnOpF φ3))) = 0 𝓕:FieldSpecificationφ1:𝓕.CrAnFieldOpφ2:𝓕.CrAnFieldOpφ3:𝓕.CrAnFieldOph:¬crAnTimeOrderRel φ3 φ1h23:crAnTimeOrderRel φ2 φ3h32:crAnTimeOrderRel φ3 φ2h12:crAnTimeOrderRel φ1 φ2h13:crAnTimeOrderRel φ1 φ3h21:crAnTimeOrderRel φ2 φ1crAnTimeOrderRel φ3 φ1 All goals completed! 🐙𝓕:FieldSpecificationφ:𝓕.CrAnFieldOpψ:𝓕.CrAnFieldOph1:crAnTimeOrderRel φ ψh2:crAnTimeOrderRel ψ φ1 ofCrAnListF [φ, ψ] - (exchangeSign (𝓕.crAnStatistics φ)) (𝓕.crAnStatistics ψ) 1 ofCrAnListF [ψ, φ] = ofCrAnListF [φ, ψ] - (exchangeSign (𝓕.crAnStatistics φ)) (𝓕.crAnStatistics ψ) ofCrAnListF [ψ, φ] All goals completed! 🐙

Interaction with maxTimeField

In the state algebra time, ordering obeys T(φ₀φ₁…φₙ) = s * φᵢ * T(φ₀φ₁…φᵢ₋₁φᵢ₊₁…φₙ) where φᵢ is the state which has maximum time and s is the exchange sign of φᵢ and φ₀φ₁…φᵢ₋₁.

𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOptimeOrderSign (φ :: φs) = timeOrderSign (φ :: φs) * ((exchangeSign (𝓕|>ₛmaxTimeField φ φs)) (ofList 𝓕.fieldOpStatistic (List.take (maxTimeFieldPos φ φs) (φ :: φs))) * (exchangeSign (𝓕|>ₛmaxTimeField φ φs)) (ofList 𝓕.fieldOpStatistic (List.take (maxTimeFieldPos φ φs) (φ :: φs)))) All goals completed! 🐙

In the state algebra time, ordering obeys T(φ₀φ₁…φₙ) = s * φᵢ * T(φ₀φ₁…φᵢ₋₁φᵢ₊₁…φₙ) where φᵢ is the state which has maximum time and s is the exchange sign of φᵢ and φ₀φ₁…φᵢ₋₁. Here s is written using finite sets.

set_option backward.isDefEq.respectTransparency false in𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1(if i < insertionSortMinPos timeOrderRel φ φs then i, else i + 1, ) < (insertionSortMinPos timeOrderRel φ φs), 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1h✝:i < insertionSortMinPos timeOrderRel φ φsi, < (insertionSortMinPos timeOrderRel φ φs), 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1h✝:¬i < insertionSortMinPos timeOrderRel φ φsi, < (insertionSortMinPos timeOrderRel φ φs), 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1h✝:i < insertionSortMinPos timeOrderRel φ φsi, < (insertionSortMinPos timeOrderRel φ φs), 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1h✝:i < insertionSortMinPos timeOrderRel φ φsi < insertionSortMinPos timeOrderRel φ φs All goals completed! 🐙 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1h✝:¬i < insertionSortMinPos timeOrderRel φ φsi, < (insertionSortMinPos timeOrderRel φ φs), All goals completed! 🐙 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1Fin.cast ((Fin.cast (insertionSortMinPos timeOrderRel φ φs)).succAbove i, ) = i 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1(if i, < Fin.cast (insertionSortMinPos timeOrderRel φ φs) then i, else i + 1, ) = i 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1h✝:i, < Fin.cast (insertionSortMinPos timeOrderRel φ φs)i, = i𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1h✝:¬i, < Fin.cast (insertionSortMinPos timeOrderRel φ φs)i + 1, = i 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1h✝:i, < Fin.cast (insertionSortMinPos timeOrderRel φ φs)i, = i All goals completed! 🐙 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthhi:i < insertionSortMinPos timeOrderRel φ φsh2:(insertionSortMinPos timeOrderRel φ φs) < ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).length + 1h✝:¬i, < Fin.cast (insertionSortMinPos timeOrderRel φ φs)i + 1, = i All goals completed! 🐙 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthh: a, (maxTimeFieldPosFin φ φs).succAbove a < maxTimeFieldPosFin φ φs Fin.cast ((Fin.cast (insertionSortMinPos timeOrderRel φ φs)).succAbove a) = ii < insertionSortMinPos timeOrderRel φ φs 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpi:Fin (φ :: φs).lengthj:Fin ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).lengthh1:(maxTimeFieldPosFin φ φs).succAbove j < maxTimeFieldPosFin φ φsh2:Fin.cast ((Fin.cast (insertionSortMinPos timeOrderRel φ φs)).succAbove j) = ii < insertionSortMinPos timeOrderRel φ φs 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpj:Fin ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).lengthh1:(maxTimeFieldPosFin φ φs).succAbove j < maxTimeFieldPosFin φ φsFin.cast ((Fin.cast (insertionSortMinPos timeOrderRel φ φs)).succAbove j) < insertionSortMinPos timeOrderRel φ φs 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpj:Fin ((φ :: φs).eraseIdx (insertionSortMinPos timeOrderRel φ φs)).lengthh1:(maxTimeFieldPosFin φ φs).succAbove j < maxTimeFieldPosFin φ φs((Fin.cast (insertionSortMinPos timeOrderRel φ φs)).succAbove j) < (insertionSortMinPos timeOrderRel φ φs) All goals completed! 🐙 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOp(List.take (maxTimeFieldPos φ φs) (List.finRange (φs.length + 1))).Nodup All goals completed! 🐙 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOp(List.map (Fin.cast (Fin.cast (insertionSortMinPos timeOrderRel φ φs)).succAbove) ({x | (maxTimeFieldPosFin φ φs).succAbove x < maxTimeFieldPosFin φ φs}.sort fun x1 x2 => x1 x2)).Nodup 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpFunction.Injective (Fin.cast (Fin.cast (insertionSortMinPos timeOrderRel φ φs)).succAbove)𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOp({x | (maxTimeFieldPosFin φ φs).succAbove x < maxTimeFieldPosFin φ φs}.sort fun x1 x2 => x1 x2).Nodup 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpFunction.Injective (Fin.cast (Fin.cast (insertionSortMinPos timeOrderRel φ φs)).succAbove) 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOpFunction.Injective (Fin.cast ) All goals completed! 🐙 𝓕:FieldSpecificationφ:𝓕.FieldOpφs:List 𝓕.FieldOp({x | (maxTimeFieldPosFin φ φs).succAbove x < maxTimeFieldPosFin φ φs}.sort fun x1 x2 => x1 x2).Nodup All goals completed! 🐙