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.Mathematics.List.InsertIdx public import Mathlib.Tactic.FinCases public import Mathlib.Algebra.BigOperators.Group.Finset.Piecewise public import Mathlib.Data.Fintype.Card public import Mathlib.Algebra.FreeMonoid.Basic public import Mathlib.Data.List.Sort

Field statistics

Basic properties related to whether a field, or list of fields, is bosonic or fermionic.

@[expose] public section

The type FieldStatistic is the type containing two elements bosonic and fermionic. This type is used to specify if a field or operator obeys bosonic or fermionic statistics.

inductive FieldStatistic : Type where | bosonic : FieldStatistic | fermionic : FieldStatistic deriving DecidableEq

The type FieldStatistic carries an instance of a commutative group in which

    bosonic * bosonic = bosonic

    bosonic * fermionic = fermionic

    fermionic * bosonic = fermionic

    fermionic * fermionic = bosonic

This group is isomorphic to ℤ₂.

@[simp] instance : CommGroup FieldStatistic where one := bosonic mul a b := match a, b with | bosonic, bosonic => bosonic | bosonic, fermionic => fermionic | fermionic, bosonic => fermionic | fermionic, fermionic => bosonic inv a := a mul_assoc a b c := 𝓕:Typea:FieldStatisticb:FieldStatisticc:FieldStatistic⊢ a * b * c = a * (b * c) 𝓕:Typeb:FieldStatisticc:FieldStatistic⊢ bosonic * b * c = bosonic * (b * c)𝓕:Typeb:FieldStatisticc:FieldStatistic⊢ fermionic * b * c = fermionic * (b * c) 𝓕:Typeb:FieldStatisticc:FieldStatistic⊢ bosonic * b * c = bosonic * (b * c)𝓕:Typeb:FieldStatisticc:FieldStatistic⊢ fermionic * b * c = fermionic * (b * c) 𝓕:Typec:FieldStatistic⊢ fermionic * bosonic * c = fermionic * (bosonic * c)𝓕:Typec:FieldStatistic⊢ fermionic * fermionic * c = fermionic * (fermionic * c) 𝓕:Typec:FieldStatistic⊢ bosonic * bosonic * c = bosonic * (bosonic * c)𝓕:Typec:FieldStatistic⊢ bosonic * fermionic * c = bosonic * (fermionic * c)𝓕:Typec:FieldStatistic⊢ fermionic * bosonic * c = fermionic * (bosonic * c)𝓕:Typec:FieldStatistic⊢ fermionic * fermionic * c = fermionic * (fermionic * c) 𝓕:Type⊢ fermionic * fermionic * bosonic = fermionic * (fermionic * bosonic)𝓕:Type⊢ fermionic * fermionic * fermionic = fermionic * (fermionic * fermionic) 𝓕:Type⊢ bosonic * bosonic * bosonic = bosonic * (bosonic * bosonic)𝓕:Type⊢ bosonic * bosonic * fermionic = bosonic * (bosonic * fermionic)𝓕:Type⊢ bosonic * fermionic * bosonic = bosonic * (fermionic * bosonic)𝓕:Type⊢ bosonic * fermionic * fermionic = bosonic * (fermionic * fermionic)𝓕:Type⊢ fermionic * bosonic * bosonic = fermionic * (bosonic * bosonic)𝓕:Type⊢ fermionic * bosonic * fermionic = fermionic * (bosonic * fermionic)𝓕:Type⊢ fermionic * fermionic * bosonic = fermionic * (fermionic * bosonic)𝓕:Type⊢ fermionic * fermionic * fermionic = fermionic * (fermionic * fermionic) All goals completed! 🐙 one_mul a := 𝓕:Typea:FieldStatistic⊢ 1 * a = a 𝓕:Type⊢ 1 * bosonic = bosonic𝓕:Type⊢ 1 * fermionic = fermionic 𝓕:Type⊢ 1 * bosonic = bosonic𝓕:Type⊢ 1 * fermionic = fermionic All goals completed! 🐙 mul_one a := 𝓕:Typea:FieldStatistic⊢ a * 1 = a 𝓕:Type⊢ bosonic * 1 = bosonic𝓕:Type⊢ fermionic * 1 = fermionic 𝓕:Type⊢ bosonic * 1 = bosonic𝓕:Type⊢ fermionic * 1 = fermionic All goals completed! 🐙 inv_mul_cancel a := 𝓕:Typea:FieldStatistic⊢ a * a = 1 𝓕:Type⊢ bosonic * bosonic = 1𝓕:Type⊢ fermionic * fermionic = 1 𝓕:Type⊢ bosonic * bosonic = 1𝓕:Type⊢ fermionic * fermionic = 1 𝓕:Type⊢ bosonic = 1 𝓕:Type⊢ bosonic = 1𝓕:Type⊢ bosonic = 1 All goals completed! 🐙 mul_comm a b := 𝓕:Typea:FieldStatisticb:FieldStatistic⊢ a * b = b * a 𝓕:Typeb:FieldStatistic⊢ bosonic * b = b * bosonic𝓕:Typeb:FieldStatistic⊢ fermionic * b = b * fermionic 𝓕:Typeb:FieldStatistic⊢ bosonic * b = b * bosonic𝓕:Typeb:FieldStatistic⊢ fermionic * b = b * fermionic 𝓕:Type⊢ fermionic * bosonic = bosonic * fermionic𝓕:Type⊢ fermionic * fermionic = fermionic * fermionic 𝓕:Type⊢ bosonic * bosonic = bosonic * bosonic𝓕:Type⊢ bosonic * fermionic = fermionic * bosonic𝓕:Type⊢ fermionic * bosonic = bosonic * fermionic𝓕:Type⊢ fermionic * fermionic = fermionic * fermionic All goals completed! 🐙
@[simp] lemma bosonic_mul_bosonic : bosonic * bosonic = bosonic := rfl@[simp] lemma bosonic_mul_fermionic : bosonic * fermionic = fermionic := rfl@[simp] lemma fermionic_mul_bosonic : fermionic * bosonic = fermionic := rfl@[simp] lemma fermionic_mul_fermionic : fermionic * fermionic = bosonic := rfl@[simp] lemma mul_bosonic (a : FieldStatistic) : a * bosonic = a := a:FieldStatistic⊢ a * bosonic = a ⊢ bosonic * bosonic = bosonic⊢ fermionic * bosonic = fermionic ⊢ bosonic * bosonic = bosonic⊢ fermionic * bosonic = fermionic All goals completed! 🐙@[simp] lemma mul_self (a : FieldStatistic) : a * a = 1 := a:FieldStatistic⊢ a * a = 1 ⊢ bosonic * bosonic = 1⊢ fermionic * fermionic = 1 ⊢ bosonic * bosonic = 1⊢ fermionic * fermionic = 1 All goals completed! 🐙

Field statics form a finite type.

instance : Fintype FieldStatistic where elems := {bosonic, fermionic} complete := 𝓕:Type⊢ ∀ (x : FieldStatistic), x ∈ {bosonic, fermionic} 𝓕:Typec:FieldStatistic⊢ c ∈ {bosonic, fermionic} 𝓕:Type⊢ bosonic ∈ {bosonic, fermionic}𝓕:Type⊢ fermionic ∈ {bosonic, fermionic} 𝓕:Type⊢ bosonic ∈ {bosonic, fermionic} All goals completed! 🐙 𝓕:Type⊢ fermionic ∈ {bosonic, fermionic} 𝓕:Type⊢ {fermionic, bosonic, fermionic} = {bosonic, fermionic} All goals completed! 🐙
@[simp] lemma fermionic_not_eq_bonsic : ¬ fermionic = bosonic := ⊢ ¬fermionic = bosonic h:fermionic = bosonic⊢ False All goals completed! 🐙lemma bonsic_eq_fermionic_false : bosonic = fermionic ↔ false := ⊢ bosonic = fermionic ↔ false = true All goals completed! 🐙@[simp] lemma neq_fermionic_iff_eq_bosonic (a : FieldStatistic) : ¬ a = fermionic ↔ a = bosonic := a:FieldStatistic⊢ ¬a = fermionic ↔ a = bosonic ⊢ ¬bosonic = fermionic ↔ bosonic = bosonic⊢ ¬fermionic = fermionic ↔ fermionic = bosonic ⊢ ¬bosonic = fermionic ↔ bosonic = bosonic All goals completed! 🐙 ⊢ ¬fermionic = fermionic ↔ fermionic = bosonic All goals completed! 🐙@[simp] lemma neq_bosonic_iff_eq_fermionic (a : FieldStatistic) : ¬ a = bosonic ↔ a = fermionic := a:FieldStatistic⊢ ¬a = bosonic ↔ a = fermionic ⊢ ¬bosonic = bosonic ↔ bosonic = fermionic⊢ ¬fermionic = bosonic ↔ fermionic = fermionic ⊢ ¬bosonic = bosonic ↔ bosonic = fermionic All goals completed! 🐙 ⊢ ¬fermionic = bosonic ↔ fermionic = fermionic All goals completed! 🐙@[simp] lemma bosonic_ne_iff_fermionic_eq (a : FieldStatistic) : ¬ bosonic = a ↔ fermionic = a := a:FieldStatistic⊢ ¬bosonic = a ↔ fermionic = a ⊢ ¬bosonic = bosonic ↔ fermionic = bosonic⊢ ¬bosonic = fermionic ↔ fermionic = fermionic ⊢ ¬bosonic = bosonic ↔ fermionic = bosonic All goals completed! 🐙 ⊢ ¬bosonic = fermionic ↔ fermionic = fermionic All goals completed! 🐙@[simp] lemma fermionic_ne_iff_bosonic_eq (a : FieldStatistic) : ¬ fermionic = a ↔ bosonic = a := a:FieldStatistic⊢ ¬fermionic = a ↔ bosonic = a ⊢ ¬fermionic = bosonic ↔ bosonic = bosonic⊢ ¬fermionic = fermionic ↔ bosonic = fermionic ⊢ ¬fermionic = bosonic ↔ bosonic = bosonic All goals completed! 🐙 ⊢ ¬fermionic = fermionic ↔ bosonic = fermionic All goals completed! 🐙lemma eq_self_if_eq_bosonic {a : FieldStatistic} : (if a = bosonic then bosonic else fermionic) = a := a:FieldStatistic⊢ (if a = bosonic then bosonic else fermionic) = a ⊢ (if bosonic = bosonic then bosonic else fermionic) = bosonic⊢ (if fermionic = bosonic then bosonic else fermionic) = fermionic ⊢ (if bosonic = bosonic then bosonic else fermionic) = bosonic⊢ (if fermionic = bosonic then bosonic else fermionic) = fermionic All goals completed! 🐙lemma eq_self_if_bosonic_eq {a : FieldStatistic} : (if bosonic = a then bosonic else fermionic) = a := a:FieldStatistic⊢ (if bosonic = a then bosonic else fermionic) = a ⊢ (if bosonic = bosonic then bosonic else fermionic) = bosonic⊢ (if bosonic = fermionic then bosonic else fermionic) = fermionic ⊢ (if bosonic = bosonic then bosonic else fermionic) = bosonic⊢ (if bosonic = fermionic then bosonic else fermionic) = fermionic All goals completed! 🐙lemma mul_eq_one_iff (a b : FieldStatistic) : a * b = 1 ↔ a = b := a:FieldStatisticb:FieldStatistic⊢ a * b = 1 ↔ a = b b:FieldStatistic⊢ bosonic * b = 1 ↔ bosonic = bb:FieldStatistic⊢ fermionic * b = 1 ↔ fermionic = b b:FieldStatistic⊢ bosonic * b = 1 ↔ bosonic = bb:FieldStatistic⊢ fermionic * b = 1 ↔ fermionic = b ⊢ fermionic * bosonic = 1 ↔ fermionic = bosonic⊢ fermionic * fermionic = 1 ↔ fermionic = fermionic ⊢ bosonic * bosonic = 1 ↔ bosonic = bosonic⊢ bosonic * fermionic = 1 ↔ bosonic = fermionic⊢ fermionic * bosonic = 1 ↔ fermionic = bosonic⊢ fermionic * fermionic = 1 ↔ fermionic = fermionic All goals completed! 🐙lemma one_eq_mul_iff (a b : FieldStatistic) : 1 = a * b ↔ a = b := a:FieldStatisticb:FieldStatistic⊢ 1 = a * b ↔ a = b b:FieldStatistic⊢ 1 = bosonic * b ↔ bosonic = bb:FieldStatistic⊢ 1 = fermionic * b ↔ fermionic = b b:FieldStatistic⊢ 1 = bosonic * b ↔ bosonic = bb:FieldStatistic⊢ 1 = fermionic * b ↔ fermionic = b ⊢ 1 = fermionic * bosonic ↔ fermionic = bosonic⊢ 1 = fermionic * fermionic ↔ fermionic = fermionic ⊢ 1 = bosonic * bosonic ↔ bosonic = bosonic⊢ 1 = bosonic * fermionic ↔ bosonic = fermionic⊢ 1 = fermionic * bosonic ↔ fermionic = bosonic⊢ 1 = fermionic * fermionic ↔ fermionic = fermionic All goals completed! 🐙lemma mul_eq_iff_eq_mul (a b c : FieldStatistic) : a * b = c ↔ a = b * c := a:FieldStatisticb:FieldStatisticc:FieldStatistic⊢ a * b = c ↔ a = b * c b:FieldStatisticc:FieldStatistic⊢ bosonic * b = c ↔ bosonic = b * cb:FieldStatisticc:FieldStatistic⊢ fermionic * b = c ↔ fermionic = b * c b:FieldStatisticc:FieldStatistic⊢ bosonic * b = c ↔ bosonic = b * cb:FieldStatisticc:FieldStatistic⊢ fermionic * b = c ↔ fermionic = b * c c:FieldStatistic⊢ fermionic * bosonic = c ↔ fermionic = bosonic * cc:FieldStatistic⊢ fermionic * fermionic = c ↔ fermionic = fermionic * c c:FieldStatistic⊢ bosonic * bosonic = c ↔ bosonic = bosonic * cc:FieldStatistic⊢ bosonic * fermionic = c ↔ bosonic = fermionic * cc:FieldStatistic⊢ fermionic * bosonic = c ↔ fermionic = bosonic * cc:FieldStatistic⊢ fermionic * fermionic = c ↔ fermionic = fermionic * c ⊢ fermionic * fermionic = bosonic ↔ fermionic = fermionic * bosonic⊢ fermionic * fermionic = fermionic ↔ fermionic = fermionic * fermionic ⊢ bosonic * bosonic = bosonic ↔ bosonic = bosonic * bosonic⊢ bosonic * bosonic = fermionic ↔ bosonic = bosonic * fermionic⊢ bosonic * fermionic = bosonic ↔ bosonic = fermionic * bosonic⊢ bosonic * fermionic = fermionic ↔ bosonic = fermionic * fermionic⊢ fermionic * bosonic = bosonic ↔ fermionic = bosonic * bosonic⊢ fermionic * bosonic = fermionic ↔ fermionic = bosonic * fermionic⊢ fermionic * fermionic = bosonic ↔ fermionic = fermionic * bosonic⊢ fermionic * fermionic = fermionic ↔ fermionic = fermionic * fermionic All goals completed! 🐙 all_goals All goals completed! 🐙lemma mul_eq_iff_eq_mul' (a b c : FieldStatistic) : a * b = c ↔ b = a * c := a:FieldStatisticb:FieldStatisticc:FieldStatistic⊢ a * b = c ↔ b = a * c b:FieldStatisticc:FieldStatistic⊢ bosonic * b = c ↔ b = bosonic * cb:FieldStatisticc:FieldStatistic⊢ fermionic * b = c ↔ b = fermionic * c b:FieldStatisticc:FieldStatistic⊢ bosonic * b = c ↔ b = bosonic * cb:FieldStatisticc:FieldStatistic⊢ fermionic * b = c ↔ b = fermionic * c c:FieldStatistic⊢ fermionic * bosonic = c ↔ bosonic = fermionic * cc:FieldStatistic⊢ fermionic * fermionic = c ↔ fermionic = fermionic * c c:FieldStatistic⊢ bosonic * bosonic = c ↔ bosonic = bosonic * cc:FieldStatistic⊢ bosonic * fermionic = c ↔ fermionic = bosonic * cc:FieldStatistic⊢ fermionic * bosonic = c ↔ bosonic = fermionic * cc:FieldStatistic⊢ fermionic * fermionic = c ↔ fermionic = fermionic * c ⊢ fermionic * fermionic = bosonic ↔ fermionic = fermionic * bosonic⊢ fermionic * fermionic = fermionic ↔ fermionic = fermionic * fermionic ⊢ bosonic * bosonic = bosonic ↔ bosonic = bosonic * bosonic⊢ bosonic * bosonic = fermionic ↔ bosonic = bosonic * fermionic⊢ bosonic * fermionic = bosonic ↔ fermionic = bosonic * bosonic⊢ bosonic * fermionic = fermionic ↔ fermionic = bosonic * fermionic⊢ fermionic * bosonic = bosonic ↔ bosonic = fermionic * bosonic⊢ fermionic * bosonic = fermionic ↔ bosonic = fermionic * fermionic⊢ fermionic * fermionic = bosonic ↔ fermionic = fermionic * bosonic⊢ fermionic * fermionic = fermionic ↔ fermionic = fermionic * fermionic All goals completed! 🐙 all_goals All goals completed! 🐙

The field statistics of a list of fields is fermionic if there is an odd number of fermions, otherwise it is bosonic.

def ofList (s : 𝓕 → FieldStatistic) : (φs : List 𝓕) → FieldStatistic | [] => bosonic | φ :: φs => if s φ = ofList s φs then bosonic else fermionic
𝓕:Types:𝓕 → FieldStatisticφ:𝓕φs:List 𝓕ha:∀ (a b : FieldStatistic), (if a = b then bosonic else fermionic) = a * b⊢ ofList s (φ :: φs) = s φ * ofList s φs All goals completed! 🐙All goals completed! 🐙All goals completed! 🐙@[simp] lemma ofList_freeMonoid (s : 𝓕 → FieldStatistic) (φ : 𝓕) : ofList s (FreeMonoid.of φ) = s φ := ofList_singleton s φ@[simp] lemma ofList_empty (s : 𝓕 → FieldStatistic) : ofList s [] = bosonic := rfl𝓕:Types:𝓕 → FieldStatisticφs':List 𝓕a:𝓕l:List 𝓕ih:ofList s (l ++ φs') = if ofList s l = ofList s φs' then bosonic else fermionichab:∀ (a b c : FieldStatistic), (if a = if b = c then bosonic else fermionic then bosonic else fermionic) = if (if a = b then bosonic else fermionic) = c then bosonic else fermionic⊢ ofList s (a :: l ++ φs') = if ofList s (a :: l) = ofList s φs' then bosonic else fermionic All goals completed! 🐙𝓕:Types:𝓕 → FieldStatisticφs:List 𝓕φs':List 𝓕ha:∀ (a b : FieldStatistic), (if a = b then bosonic else fermionic) = a * b⊢ (if ofList s φs = ofList s φs' then bosonic else fermionic) = ofList s φs * ofList s φs' All goals completed! 🐙𝓕:Types:𝓕 → FieldStatisticl:List 𝓕l':List 𝓕h:l.Perm l'⊢ (List.map s l).prod = (List.map s l').prod All goals completed! 🐙lemma ofList_orderedInsert (s : 𝓕 → FieldStatistic) (le1 : 𝓕 → 𝓕 → Prop) [DecidableRel le1] (φs : List 𝓕) (φ : 𝓕) : ofList s (List.orderedInsert le1 φ φs) = ofList s (φ :: φs) := ofList_perm s (List.perm_orderedInsert le1 φ φs)@[simp] lemma ofList_insertionSort (s : 𝓕 → FieldStatistic) (le1 : 𝓕 → 𝓕 → Prop) [DecidableRel le1] (φs : List 𝓕) : ofList s (List.insertionSort le1 φs) = ofList s φs := ofList_perm s (List.perm_insertionSort le1 φs)𝓕:Types:𝓕 → FieldStatisticφ:𝓕φs:List 𝓕i:Fin (φ :: φs).lengthl:List (Fin (φ :: φs).length)hl:(i :: l).Noduph1:s (φ :: φs)[i] = ∏ j, if j = i then s (φ :: φs)[i] else 1a:Fin (φ :: φs).lengthha:a = i⊢ s (φ :: φs)[i] = s (φ :: φs)[↑i]𝓕:Types:𝓕 → FieldStatisticφ:𝓕φs:List 𝓕i:Fin (φ :: φs).lengthl:List (Fin (φ :: φs).length)hl:(i :: l).Noduph1:s (φ :: φs)[i] = ∏ j, if j = i then s (φ :: φs)[i] else 1a:Fin (φ :: φs).lengthha:a = i⊢ i ∉ l 𝓕:Types:𝓕 → FieldStatisticφ:𝓕φs:List 𝓕i:Fin (φ :: φs).lengthl:List (Fin (φ :: φs).length)hl:(i :: l).Noduph1:s (φ :: φs)[i] = ∏ j, if j = i then s (φ :: φs)[i] else 1a:Fin (φ :: φs).lengthha:a = i⊢ i ∉ l 𝓕:Types:𝓕 → FieldStatisticφ:𝓕φs:List 𝓕i:Fin (φ :: φs).lengthl:List (Fin (φ :: φs).length)h1:s (φ :: φs)[i] = ∏ j, if j = i then s (φ :: φs)[i] else 1a:Fin (φ :: φs).lengthha:a = ihl:i ∉ l ∧ l.Nodup⊢ i ∉ l All goals completed! 🐙 𝓕:Types:𝓕 → FieldStatisticφ:𝓕φs:List 𝓕i:Fin (φ :: φs).lengthl:List (Fin (φ :: φs).length)hl:(i :: l).Noduph1:s (φ :: φs)[i] = ∏ j, if j = i then s (φ :: φs)[i] else 1a:Fin (φ :: φs).lengthha:¬a = i⊢ (if a ∈ l then if a = i then s (φ :: φs)[i] * s (φ :: φs)[a] else s (φ :: φs)[a] else if a = i then s (φ :: φs)[i] else 1) = if a = i ∨ a ∈ l then s (φ :: φs)[↑a] else 1 𝓕:Types:𝓕 → FieldStatisticφ:𝓕φs:List 𝓕i:Fin (φ :: φs).lengthl:List (Fin (φ :: φs).length)hl:(i :: l).Noduph1:s (φ :: φs)[i] = ∏ j, if j = i then s (φ :: φs)[i] else 1a:Fin (φ :: φs).lengthha:¬a = i⊢ (if a ∈ l then s (φ :: φs)[a] else 1) = if a ∈ l then s (φ :: φs)[↑a] else 1 All goals completed! 🐙 𝓕:Types:𝓕 → FieldStatisticφ:𝓕φs:List 𝓕i:Fin (φ :: φs).lengthl:List (Fin (φ :: φs).length)hl:i ∉ l ∧ l.Nodup⊢ l.Nodup All goals completed! 🐙All goals completed! 🐙

ofList and take

All goals completed! 🐙All goals completed! 🐙lemma ofList_take_zero (φs : List 𝓕) : ofList q (List.take 0 φs) = 1 := 𝓕:Typeq:𝓕 → FieldStatisticφs:List 𝓕⊢ ofList q (List.take 0 φs) = 1 𝓕:Typeq:𝓕 → FieldStatisticφs:List 𝓕⊢ bosonic = 1 All goals completed! 🐙All goals completed! 🐙All goals completed! 🐙lemma ofList_insert_lt_eq (n m : ℕ) (φ1 : 𝓕) (φs : List 𝓕) (hn : m ≤ n) (hm : m ≤ φs.length) : ofList q ((List.insertIdx φs m φ1).take (n + 1)) = ofList q ((φ1 :: φs).take (n + 1)) := 𝓕:Typeq:𝓕 → FieldStatisticn:ℕm:ℕφ1:𝓕φs:List 𝓕hn:m ≤ nhm:m ≤ φs.length⊢ ofList q (List.take (n + 1) (φs.insertIdx m φ1)) = ofList q (List.take (n + 1) (φ1 :: φs)) 𝓕:Typeq:𝓕 → FieldStatisticn:ℕm:ℕφ1:𝓕φs:List 𝓕hn:m ≤ nhm:m ≤ φs.length⊢ (List.take (n + 1) (φs.insertIdx m φ1)).Perm (List.take (n + 1) (φ1 :: φs)) 𝓕:Typeq:𝓕 → FieldStatisticn:ℕm:ℕφ1:𝓕φs:List 𝓕hn:m ≤ nhm:m ≤ φs.length⊢ (List.take (n + 1) (φs.insertIdx m φ1)).Perm (φ1 :: List.take n φs) All goals completed! 🐙𝓕:Typeq:𝓕 → FieldStatisticn:ℕm:ℕφ1:𝓕φs:List 𝓕hn:m ≤ nhm:m ≤ φs.length⊢ m ≤ n𝓕:Typeq:𝓕 → FieldStatisticn:ℕm:ℕφ1:𝓕φs:List 𝓕hn:m ≤ nhm:m ≤ φs.length⊢ m ≤ φs.length 𝓕:Typeq:𝓕 → FieldStatisticn:ℕm:ℕφ1:𝓕φs:List 𝓕hn:m ≤ nhm:m ≤ φs.length⊢ m ≤ n All goals completed! 🐙 𝓕:Typeq:𝓕 → FieldStatisticn:ℕm:ℕφ1:𝓕φs:List 𝓕hn:m ≤ nhm:m ≤ φs.length⊢ m ≤ φs.length All goals completed! 🐙

The instance of an additive monoid on FieldStatistic.

All goals completed! 🐙 nsmul_succ a n := 𝓕:Typeq:𝓕 → FieldStatistica:ℕn:FieldStatistic⊢ (a + 1) • n = a • n + n 𝓕:Typeq:𝓕 → FieldStatistica:ℕn:FieldStatistic⊢ ∏ _i, n = (∏ _i, n) * n All goals completed! 🐙
@[simp] lemma add_eq_mul (a b : FieldStatistic) : a + b = a * b := rfl