Imports
/- Copyright (c) 2024 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.FieldStatistics.Basic public import Mathlib.Data.Finset.Sort

Field statistics of a finite set.

@[expose] public section

The field statistic associated with a map f : Fin n → 𝓕 (usually .get of a list) and a finite set of elements of Fin n.

def ofFinset {n : } (q : 𝓕 FieldStatistic) (f : Fin n 𝓕) (a : Finset (Fin n)) : FieldStatistic := ofList q ((a.sort (· ·)).map f)
@[simp] lemma ofFinset_empty (q : 𝓕 FieldStatistic) (f : Fin n 𝓕) : ofFinset q f = 1 := 𝓕:Typen:q:𝓕 FieldStatisticf:Fin n 𝓕ofFinset q f = 1 𝓕:Typen:q:𝓕 FieldStatisticf:Fin n 𝓕bosonic = 1 All goals completed! 🐙lemma ofFinset_singleton {n : } (q : 𝓕 FieldStatistic) (f : Fin n 𝓕) (i : Fin n) : ofFinset q f {i} = q (f i) := 𝓕:Typen:q:𝓕 FieldStatisticf:Fin n 𝓕i:Fin nofFinset q f {i} = q (f i) All goals completed! 🐙𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)(List.map f (List.map i (a.sort fun x1 x2 => x1 x2))).Perm (List.map f ((Finset.map { toFun := i, inj' := hi } a).sort fun x1 x2 => x1 x2)) 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)(List.map i (a.sort fun x1 x2 => x1 x2)).Perm ((Finset.map { toFun := i, inj' := hi } a).sort fun x1 x2 => x1 x2) 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)(List.map i (a.sort fun x1 x2 => x1 x2)).Nodup𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)((Finset.map { toFun := i, inj' := hi } a).sort fun x1 x2 => x1 x2).Nodup𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)(List.map i (a.sort fun x1 x2 => x1 x2)).toFinset = ((Finset.map { toFun := i, inj' := hi } a).sort fun x1 x2 => x1 x2).toFinset 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)(List.map i (a.sort fun x1 x2 => x1 x2)).Nodup 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)(a.sort fun x1 x2 => x1 x2).Nodup𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m) x a.sort fun x1 x2 => x1 x2, y a.sort fun x1 x2 => x1 x2, i x = i y x = y 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m) x a.sort fun x1 x2 => x1 x2, y a.sort fun x1 x2 => x1 x2, i x = i y x = y 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m) x a, y a, i x = i y x = y 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)x:Fin mhx:x ay:Fin mhy:y ai x = i y x = y All goals completed! 🐙 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)((Finset.map { toFun := i, inj' := hi } a).sort fun x1 x2 => x1 x2).Nodup All goals completed! 🐙 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a:Finset (Fin m)(List.map i (a.sort fun x1 x2 => x1 x2)).toFinset = ((Finset.map { toFun := i, inj' := hi } a).sort fun x1 x2 => x1 x2).toFinset 𝓕:Typen:m:q:𝓕 FieldStatistici:Fin m Fin nhi:Function.Injective if:Fin n 𝓕a✝:Finset (Fin m)a:Fin na (List.map i (a✝.sort fun x1 x2 => x1 x2)).toFinset a ((Finset.map { toFun := i, inj' := hi } a✝).sort fun x1 x2 => x1 x2).toFinset All goals completed! 🐙𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)ofList q (List.map φs.get ((insert i a).sort fun x1 x2 => x1 x2)) = ofList q (φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2)) erw [𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)ofList q (List.map φs.get ((insert i a).sort fun x1 x2 => x1 x2)) = ofList q (List.map φs.get (i :: a.sort fun x1 x2 => x1 x2))𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)ofList q (List.map φs.get ((insert i a).sort fun x1 x2 => x1 x2)) = ofList q (List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)) 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)(List.map φs.get ((insert i a).sort fun x1 x2 => x1 x2)).Perm (List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)) 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)((insert i a).sort fun x1 x2 => x1 x2).Perm (i :: a.sort fun x1 x2 => x1 x2) 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)((insert i a).sort fun x1 x2 => x1 x2).Nodup𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)(i :: a.sort fun x1 x2 => x1 x2).Nodup𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2) (a_1 : Fin φs.length), (a_1 (insert i a).sort fun x1 x2 => x1 x2) a_1 i :: a.sort fun x1 x2 => x1 x2 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)((insert i a).sort fun x1 x2 => x1 x2).Nodup All goals completed! 🐙 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)(i :: a.sort fun x1 x2 => x1 x2).Nodup 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)i a All goals completed! 🐙 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a✝:Finset (Fin φs.length)i:Fin φs.lengthh:i ah1:φs[i] :: List.map φs.get (a.sort fun x1 x2 => x1 x2) = List.map φs.get (i :: a.sort fun x1 x2 => x1 x2)a:Fin φs.length(a (insert i a✝).sort fun x1 x2 => x1 x2) a i :: a✝.sort fun x1 x2 => x1 x2 All goals completed! 🐙𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i aha:a = insert i (a.erase i)ofFinset q φs.get (a.erase i) = q φs[i] * q φs[i] * ofFinset q φs.get (a.erase i)𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i aha:a = insert i (a.erase i)i a.erase i 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.lengthh:i aha:a = insert i (a.erase i)i a.erase i All goals completed! 🐙𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)(∏ i, if i a.sort fun x1 x2 => x1 x2 then q φs[i] else 1) = i, if i a then q φs[i] else 1𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)(a.sort fun x1 x2 => x1 x2).Nodup 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)(fun i => if i a.sort fun x1 x2 => x1 x2 then q φs[i] else 1) = fun i => if i a then q φs[i] else 1𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)(a.sort fun x1 x2 => x1 x2).Nodup 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)i:Fin φs.length(if i a.sort fun x1 x2 => x1 x2 then q φs[i] else 1) = if i a then q φs[i] else 1𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)(a.sort fun x1 x2 => x1 x2).Nodup 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)(a.sort fun x1 x2 => x1 x2).Nodup All goals completed! 🐙𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)(∏ x, (if x a then q φs[x] else 1) * if x b then q φs[x] else 1) = i, if i (a b) \ (a b) then q φs[i] else 1 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)(fun x => (if x a then q φs[x] else 1) * if x b then q φs[x] else 1) = fun i => if i (a b) \ (a b) then q φs[i] else 1 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)x:Fin φs.length((if x a then q φs[x] else 1) * if x b then q φs[x] else 1) = if x (a b) \ (a b) then q φs[x] else 1 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)x:Fin φs.length(if x b then if x a then 1 else q φs[x] else if x a then q φs[x] else 1) = if (x a x b) (x a x b) then q φs[x] else 1 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)x:Fin φs.lengthh✝:x b(if x a then 1 else q φs[x]) = if (x a x b) (x a x b) then q φs[x] else 1𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)x:Fin φs.lengthh✝:x b(if x a then q φs[x] else 1) = if (x a x b) (x a x b) then q φs[x] else 1 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)x:Fin φs.lengthh✝:x b(if x a then 1 else q φs[x]) = if (x a x b) (x a x b) then q φs[x] else 1 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)x:Fin φs.lengthh:x b(if x a then 1 else q φs[x]) = if (x a x b) (x a x b) then q φs[x] else 1 All goals completed! 🐙 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)x:Fin φs.lengthh✝:x b(if x a then q φs[x] else 1) = if (x a x b) (x a x b) then q φs[x] else 1 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)x:Fin φs.lengthh:x b(if x a then q φs[x] else 1) = if (x a x b) (x a x b) then q φs[x] else 1 All goals completed! 🐙𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)b:Finset (Fin φs.length)h:Disjoint a bofFinset q φs.get ((a b) \ ) = ofFinset q φs.get (a b) All goals completed! 🐙𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)p:Fin φs.length Propinst✝:DecidablePred pofFinset q φs.get (Finset.filter p a {i a | ¬p i}) = ofFinset q φs.get a𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)p:Fin φs.length Propinst✝:DecidablePred pDisjoint (Finset.filter p a) ({i a | ¬p i}) 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)p:Fin φs.length Propinst✝:DecidablePred pFinset.filter p a {i a | ¬p i} = a𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)p:Fin φs.length Propinst✝:DecidablePred pDisjoint (Finset.filter p a) ({i a | ¬p i}) 𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)p:Fin φs.length Propinst✝:DecidablePred pDisjoint (Finset.filter p a) ({i a | ¬p i}) All goals completed! 🐙𝓕:Typeq:𝓕 FieldStatisticφs:List 𝓕a:Finset (Fin φs.length)p:Fin φs.length Propinst✝:DecidablePred pofFinset q φs.get (Finset.filter p a) = ofFinset q φs.get ({i a | ¬p i}) * ofFinset q φs.get ({i a | ¬p i}) * ofFinset q φs.get (Finset.filter p a) All goals completed! 🐙