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.Particles.SuperSymmetry.SU5.ChargeSpectrum.AllowsTermCharge spectrum which minimally allows terms
i. Overview
We can say that a charge spectrum x : ChargeSpectrum π© minimally allows a potential term
T : PotentialTerm if it allows the term T and no strict subset of x allows T.
That is to say, you need all of the charges in x to allow the term T.
We show that any charge spectrum which allows T has a subset which minimally allows T.
We show that every charge spectrum which minimally allows T is of the form
allowsTermForm a b c T for some a b c : π©, and the reverse is true for
T not equal to W1 or W2.
ii. Key results
MinimallyAllowsTerm : Predicate on charge spectra which is true if the charge spectrum
minimally allows a potential term.
allowsTerm_iff_subset_minimallyAllowsTerm : A charge spectrum which allows a term
has a subset which minimally allows the term, and vice versa.
eq_allowsTermForm_of_minimallyAllowsTerm : Any charge spectrum which minimally allows a term
is of the form allowsTermForm a b c T for some a b c : π©.
iii. Table of contents
A. Charge spectra which minimally allow potential terms
A.1. Decidability of MinimallyAllowsTerm
A.2. A charge spectrum which minimally allows a term allows the term
A.3. Spectrum with a subset which minimally allows a term, allows the term
A.4. Minimally allows term iff only member of powerset allowing term
A.5. Minimally allows term iff powerset allowing term has cardinal one
A.6. A charge spectrum which allows a term has a subset which minimally allows the term
A.7. A charge spectrum allows a term iff it has a subset which minimally allows the term
A.8. Cardinality of spectrum which minimally allows term is at most degree of term
B. Relation between MinimallyAllowsTerm and allowsTermForm
B.1. A charge spectrum which minimally allows a term is of the form allowsTermForm a b c T
B.2. allowsTermForm a b c T minimally allows T if T is not W1 or W2
iv. References
There are no known references for this material.
@[expose] public sectionA. Charge spectra which minimally allow potential terms
We define the predicate MinimallyAllowsTerm on charge spectra
which is true if the charge spectrum allows a given potential term and no strict subset of
it allows the term.
We prove properties of charge spectra which minimally allow potential terms.
A collection of charges x : Charges is said to minimally allow
the potential term T if it allows T and no strict subset of it allows T.
def MinimallyAllowsTerm (x : ChargeSpectrum π©) (T : PotentialTerm) : Prop :=
β y β x.powerset, y = x β y.AllowsTerm T
A.1. Decidability of MinimallyAllowsTerm
We show that MinimallyAllowsTerm is decidable.
instance (x : ChargeSpectrum π©) (T : PotentialTerm) : Decidable (x.MinimallyAllowsTerm T) :=
inferInstanceAs (Decidable (β y β powerset x, y = x β y.AllowsTerm T))A.2. A charge spectrum which minimally allows a term allows the term
Somewhat trivially a charge spectrum which minimally allows the term does indeed allow the term.
lemma allowsTerm_of_minimallyAllowsTerm (h : x.MinimallyAllowsTerm T) : x.AllowsTerm T := π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:x.MinimallyAllowsTerm Tβ’ x.AllowsTerm T
π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:β y β x.powerset, y = x β y.AllowsTerm Tβ’ x.AllowsTerm T
All goals completed! πA.3. Spectrum with a subset which minimally allows a term, allows the term
If a charge spectrum x has a subset which minimally allows a term T, then x allows T.
lemma allowsTerm_of_has_minimallyAllowsTerm_subset
(hx : β y β powerset x, y.MinimallyAllowsTerm T) : x.AllowsTerm T := π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:β y β x.powerset, y.MinimallyAllowsTerm Tβ’ x.AllowsTerm T
π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β x.powerset β§ y.MinimallyAllowsTerm Tβ’ x.AllowsTerm T
π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β x β§ y.MinimallyAllowsTerm Tβ’ x.AllowsTerm T
π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β x β§ y.MinimallyAllowsTerm Tβ’ y.AllowsTerm T
All goals completed! πA.4. Minimally allows term iff only member of powerset allowing term
A charge spectrum x minimally allows a term T if and only if the only member of its
own powerset which allows T is itself.
mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:x β {y β x.powerset | y.AllowsTerm T} β§ β x_1 β {y β x.powerset | y.AllowsTerm T}, x_1 = xy:ChargeSpectrum π©hy:y β xβ’ y = x β y.AllowsTerm T
simp at h mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xβ’ y = x β y.AllowsTerm T
constructor mpr.mp π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xβ’ y = x β y.AllowsTerm Tmpr.mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xβ’ y.AllowsTerm T β y = x
Β· mpr.mp π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xβ’ y = x β y.AllowsTerm T intro h1 mpr.mp π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xh1:y = xβ’ y.AllowsTerm T
subst h1 mpr.mp π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermy:ChargeSpectrum π©hy:y β yh:y.AllowsTerm T β§ β x β y, x.AllowsTerm T β x = yβ’ y.AllowsTerm T
exact h.1 All goals completed! π
Β· mpr.mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xβ’ y.AllowsTerm T β y = x intro h1 mpr.mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xh1:y.AllowsTerm Tβ’ y = x
apply h.2 mpr.mpr.a π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xh1:y.AllowsTerm Tβ’ y β xmpr.mpr.a π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xh1:y.AllowsTerm Tβ’ y.AllowsTerm T
Β· mpr.mpr.a π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xh1:y.AllowsTerm Tβ’ y β x exact hy All goals completed! π
Β· mpr.mpr.a π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©y:ChargeSpectrum π©hy:y β xh:x.AllowsTerm T β§ β x_1 β x, x_1.AllowsTerm T β x_1 = xh1:y.AllowsTerm Tβ’ y.AllowsTerm T exact h1 All goals completed! πA.5. Minimally allows term iff powerset allowing term has cardinal one
A charge spectrum x minimally allows a term T if and only the
the number of members of its powerset which allow T is one.
lemma minimallyAllowsTerm_iff_powerset_countP_eq_one :
x.MinimallyAllowsTerm T β x.powerset.val.countP (fun y => y.AllowsTerm T) = 1 := by π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ x.MinimallyAllowsTerm T β Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1
rw [minimallyAllowsTerm_iff_powerset_filter_eq π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ {y β x.powerset | y.AllowsTerm T} = {x} β Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1 π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ {y β x.powerset | y.AllowsTerm T} = {x} β Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1] π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ {y β x.powerset | y.AllowsTerm T} = {x} β Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1
constructor mp π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ {y β x.powerset | y.AllowsTerm T} = {x} β Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1 β {y β x.powerset | y.AllowsTerm T} = {x}
Β· mp π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ {y β x.powerset | y.AllowsTerm T} = {x} β Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1 intro h mp π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}β’ Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1
trans (Finset.filter (fun y => y.AllowsTerm T) x.powerset).card π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}β’ Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = {y β x.powerset | y.AllowsTerm T}.cardπ©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}β’ {y β x.powerset | y.AllowsTerm T}.card = 1
Β· π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}β’ Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = {y β x.powerset | y.AllowsTerm T}.card change _ = (Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}β’ Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val =
(Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card
exact Multiset.countP_eq_card_filter (fun y => y.AllowsTerm T) x.powerset.val All goals completed! π
Β· π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}β’ {y β x.powerset | y.AllowsTerm T}.card = 1 rw [h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}β’ {x}.card = 1 π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}β’ {x}.card = 1] π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}β’ {x}.card = 1
simp All goals completed! π
Β· mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1 β {y β x.powerset | y.AllowsTerm T} = {x} intro h mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1β’ {y β x.powerset | y.AllowsTerm T} = {x}
have h1 : (Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card = 1 := by π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ x.MinimallyAllowsTerm T β Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1 mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1h1:(Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card = 1β’ {y β x.powerset | y.AllowsTerm T} = {x}
rw [β h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1β’ (Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card =
Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1β’ (Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card =
Multiset.countP (fun y => y.AllowsTerm T) x.powerset.valmpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1h1:(Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card = 1β’ {y β x.powerset | y.AllowsTerm T} = {x}] π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1β’ (Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card =
Multiset.countP (fun y => y.AllowsTerm T) x.powerset.valmpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1h1:(Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card = 1β’ {y β x.powerset | y.AllowsTerm T} = {x}
exact Eq.symm (Multiset.countP_eq_card_filter (fun y => y.AllowsTerm T) x.powerset.val)mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1h1:(Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card = 1β’ {y β x.powerset | y.AllowsTerm T} = {x}mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1h1:(Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val).card = 1β’ {y β x.powerset | y.AllowsTerm T} = {x}
rw [Multiset.card_eq_one mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1h1:β a, Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}β’ {y β x.powerset | y.AllowsTerm T} = {x} mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1h1:β a, Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}β’ {y β x.powerset | y.AllowsTerm T} = {x}] at h1mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1h1:β a, Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}β’ {y β x.powerset | y.AllowsTerm T} = {x}
obtain β¨a, haβ© := h1 mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}β’ {y β x.powerset | y.AllowsTerm T} = {x}
have haMem : a β Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val := by π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ x.MinimallyAllowsTerm T β Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1 mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β Multiset.filter (fun y => y.AllowsTerm T) x.powerset.valβ’ {y β x.powerset | y.AllowsTerm T} = {x}
simp [ha]mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β Multiset.filter (fun y => y.AllowsTerm T) x.powerset.valβ’ {y β x.powerset | y.AllowsTerm T} = {x}mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β Multiset.filter (fun y => y.AllowsTerm T) x.powerset.valβ’ {y β x.powerset | y.AllowsTerm T} = {x}
simp at haMem mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β x β§ a.AllowsTerm Tβ’ {y β x.powerset | y.AllowsTerm T} = {x}
have hxMem : x β Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val := by π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©β’ x.MinimallyAllowsTerm T β Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1 mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β x β§ a.AllowsTerm ThxMem:x β Multiset.filter (fun y => y.AllowsTerm T) x.powerset.valβ’ {y β x.powerset | y.AllowsTerm T} = {x}
simpa using allowsTerm_mono haMem.1 haMem.2mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β x β§ a.AllowsTerm ThxMem:x β Multiset.filter (fun y => y.AllowsTerm T) x.powerset.valβ’ {y β x.powerset | y.AllowsTerm T} = {x}mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β x β§ a.AllowsTerm ThxMem:x β Multiset.filter (fun y => y.AllowsTerm T) x.powerset.valβ’ {y β x.powerset | y.AllowsTerm T} = {x}
rw [ha mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β x β§ a.AllowsTerm ThxMem:x β {a}β’ {y β x.powerset | y.AllowsTerm T} = {x} mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β x β§ a.AllowsTerm ThxMem:x β {a}β’ {y β x.powerset | y.AllowsTerm T} = {x}] at hxMemmpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β x β§ a.AllowsTerm ThxMem:x β {a}β’ {y β x.powerset | y.AllowsTerm T} = {x}
simp at hxMem mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1a:ChargeSpectrum π©ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {a}haMem:a β x β§ a.AllowsTerm ThxMem:x = aβ’ {y β x.powerset | y.AllowsTerm T} = {x}
subst hxMem mpr π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:Multiset.countP (fun y => y.AllowsTerm T) x.powerset.val = 1ha:Multiset.filter (fun y => y.AllowsTerm T) x.powerset.val = {x}haMem:x β x β§ x.AllowsTerm Tβ’ {y β x.powerset | y.AllowsTerm T} = {x}
exact Finset.val_inj.mp ha All goals completed! πA.6. A charge spectrum which allows a term has a subset which minimally allows the term
If a charge spectrum x allows a term T, then it has a subset which minimally allows T.
lemma subset_minimallyAllowsTerm_of_allowsTerm
(hx : x.AllowsTerm T) : β y β powerset x, y.MinimallyAllowsTerm T := by π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Tβ’ β y β x.powerset, y.MinimallyAllowsTerm T
have hPresent : (x.powerset.filter (fun y => y.AllowsTerm T)) β β
:= by
rw [β @Finset.nonempty_iff_ne_empty π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Tβ’ {y β x.powerset | y.AllowsTerm T}.Nonempty π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Tβ’ {y β x.powerset | y.AllowsTerm T}.Nonempty π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm ThPresent:{y β x.powerset | y.AllowsTerm T} β β
β’ β y β x.powerset, y.MinimallyAllowsTerm T] π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Tβ’ {y β x.powerset | y.AllowsTerm T}.Nonempty π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm ThPresent:{y β x.powerset | y.AllowsTerm T} β β
β’ β y β x.powerset, y.MinimallyAllowsTerm T
use x h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Tβ’ x β {y β x.powerset | y.AllowsTerm T} π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm ThPresent:{y β x.powerset | y.AllowsTerm T} β β
β’ β y β x.powerset, y.MinimallyAllowsTerm T
simp [hx] π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm ThPresent:{y β x.powerset | y.AllowsTerm T} β β
β’ β y β x.powerset, y.MinimallyAllowsTerm T π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm ThPresent:{y β x.powerset | y.AllowsTerm T} β β
β’ β y β x.powerset, y.MinimallyAllowsTerm T
obtain β¨y, h1, h2β© := min_exists (x.powerset.filter (fun y => y.AllowsTerm T)) hPresent π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm ThPresent:{y β x.powerset | y.AllowsTerm T} β β
y:ChargeSpectrum π©h1:y β {y β x.powerset | y.AllowsTerm T}h2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}β’ β y β x.powerset, y.MinimallyAllowsTerm T
use y h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm ThPresent:{y β x.powerset | y.AllowsTerm T} β β
y:ChargeSpectrum π©h1:y β {y β x.powerset | y.AllowsTerm T}h2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}β’ y β x.powerset β§ y.MinimallyAllowsTerm T
simp at h1 h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm ThPresent:{y β x.powerset | y.AllowsTerm T} β β
y:ChargeSpectrum π©h2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tβ’ y β x.powerset β§ y.MinimallyAllowsTerm T
simp_all h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tβ’ y.MinimallyAllowsTerm T
rw [minimallyAllowsTerm_iff_powerset_filter_eq h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tβ’ {y β y.powerset | y.AllowsTerm T} = {y} h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tβ’ {y β y.powerset | y.AllowsTerm T} = {y}]h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tβ’ {y β y.powerset | y.AllowsTerm T} = {y}
rw [β h2 h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tβ’ {y β y.powerset | y.AllowsTerm T} = y.powerset β© {y β x.powerset | y.AllowsTerm T} h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tβ’ {y β y.powerset | y.AllowsTerm T} = y.powerset β© {y β x.powerset | y.AllowsTerm T}]h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tβ’ {y β y.powerset | y.AllowsTerm T} = y.powerset β© {y β x.powerset | y.AllowsTerm T}
ext z h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tz:ChargeSpectrum π©β’ z β {y β y.powerset | y.AllowsTerm T} β z β y.powerset β© {y β x.powerset | y.AllowsTerm T}
simp only [Finset.mem_filter, mem_powerset_iff_subset, Finset.mem_inter, and_congr_right_iff,
iff_and_self] h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tz:ChargeSpectrum π©β’ z β y β z.AllowsTerm T β z β x
intro hzy hzpres h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©hx:x.AllowsTerm Ty:ChargeSpectrum π©hPresent:β x_1 β x, x_1.AllowsTerm Th2:y.powerset β© {y β x.powerset | y.AllowsTerm T} = {y}h1:y β x β§ y.AllowsTerm Tz:ChargeSpectrum π©hzy:z β yhzpres:z.AllowsTerm Tβ’ z β x
exact subset_trans hzy h1.1 All goals completed! πA.7. A charge spectrum allows a term iff it has a subset which minimally allows the term
We combine results above to show that a charge spectrum allows a term if and only if it has a subset which minimally allows the term.
lemma allowsTerm_iff_subset_minimallyAllowsTerm :
x.AllowsTerm T β β y β powerset x, y.MinimallyAllowsTerm T :=
β¨fun h => subset_minimallyAllowsTerm_of_allowsTerm h, fun h =>
allowsTerm_of_has_minimallyAllowsTerm_subset hβ©A.8. Cardinality of spectrum which minimally allows term is at most degree of term
We show that the cardinality of a charge spectrum which minimally allows a term T is at most the
degree of T.
lemma card_le_degree_of_minimallyAllowsTerm (h : x.MinimallyAllowsTerm T) :
x.card β€ T.degree := by π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:x.MinimallyAllowsTerm Tβ’ x.card β€ T.degree
obtain β¨y, y_mem_power, y_card,y_presentβ© :=
subset_card_le_degree_allowsTerm_of_allowsTerm (allowsTerm_of_minimallyAllowsTerm h) π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:x.MinimallyAllowsTerm Ty:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Tβ’ x.card β€ T.degree
have hy : y β x.powerset.filter (fun y => y.AllowsTerm T) := by
simp_all π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:x.MinimallyAllowsTerm Ty:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Thy:y β {y β x.powerset | y.AllowsTerm T}β’ x.card β€ T.degree π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:x.MinimallyAllowsTerm Ty:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Thy:y β {y β x.powerset | y.AllowsTerm T}β’ x.card β€ T.degree
rw [minimallyAllowsTerm_iff_powerset_filter_eq π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}y:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Thy:y β {y β x.powerset | y.AllowsTerm T}β’ x.card β€ T.degree π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}y:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Thy:y β {y β x.powerset | y.AllowsTerm T}β’ x.card β€ T.degree] at h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}y:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Thy:y β {y β x.powerset | y.AllowsTerm T}β’ x.card β€ T.degree
rw [h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}y:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Thy:y β {x}β’ x.card β€ T.degree π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}y:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Thy:y β {x}β’ x.card β€ T.degree] at hy π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}y:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Thy:y β {x}β’ x.card β€ T.degree
simp at hy π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h:{y β x.powerset | y.AllowsTerm T} = {x}y:ChargeSpectrum π©y_mem_power:y β x.powersety_card:y.card β€ T.degreey_present:y.AllowsTerm Thy:y = xβ’ x.card β€ T.degree
subst hy π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermy:ChargeSpectrum π©y_card:y.card β€ T.degreey_present:y.AllowsTerm Th:{y β y.powerset | y.AllowsTerm T} = {y}y_mem_power:y β y.powersetβ’ y.card β€ T.degree
exact y_card All goals completed! π
B. Relation between MinimallyAllowsTerm and allowsTermForm
We now relate the predicate MinimallyAllowsTerm to charge spectra of the form
allowsTermForm a b c T.
B.1. A charge spectrum which minimally allows a term is of the form allowsTermForm a b c T
We show that any charge spectrum which minimally allows a term T is of the form
allowsTermForm a b c T for some a b c : π©.
lemma eq_allowsTermForm_of_minimallyAllowsTerm (h1 : x.MinimallyAllowsTerm T) :
β a b c, x = allowsTermForm a b c T := by π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:x.MinimallyAllowsTerm Tβ’ β a b c, x = allowsTermForm a b c T
obtain β¨a, b, c, h2, h3β© := allowsTermForm_subset_allowsTerm_of_allowsTerm
(allowsTerm_of_minimallyAllowsTerm h1) π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:x.MinimallyAllowsTerm Ta:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Tβ’ β a b c, x = allowsTermForm a b c T
use a, b, c h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:x.MinimallyAllowsTerm Ta:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Tβ’ x = allowsTermForm a b c T
have hy : allowsTermForm a b c T β x.powerset.filter (fun y => y.AllowsTerm T) := by π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:x.MinimallyAllowsTerm Tβ’ β a b c, x = allowsTermForm a b c T h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:x.MinimallyAllowsTerm Ta:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T β {y β x.powerset | y.AllowsTerm T}β’ x = allowsTermForm a b c T
simp_all h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:x.MinimallyAllowsTerm Ta:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T β {y β x.powerset | y.AllowsTerm T}β’ x = allowsTermForm a b c Th π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:x.MinimallyAllowsTerm Ta:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T β {y β x.powerset | y.AllowsTerm T}β’ x = allowsTermForm a b c T
rw [minimallyAllowsTerm_iff_powerset_filter_eq h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:{y β x.powerset | y.AllowsTerm T} = {x}a:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T β {y β x.powerset | y.AllowsTerm T}β’ x = allowsTermForm a b c T h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:{y β x.powerset | y.AllowsTerm T} = {x}a:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T β {y β x.powerset | y.AllowsTerm T}β’ x = allowsTermForm a b c T] at h1h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:{y β x.powerset | y.AllowsTerm T} = {x}a:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T β {y β x.powerset | y.AllowsTerm T}β’ x = allowsTermForm a b c T
rw [h1 h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:{y β x.powerset | y.AllowsTerm T} = {x}a:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T β {x}β’ x = allowsTermForm a b c T h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:{y β x.powerset | y.AllowsTerm T} = {x}a:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T β {x}β’ x = allowsTermForm a b c T] at hyh π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:{y β x.powerset | y.AllowsTerm T} = {x}a:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T β {x}β’ x = allowsTermForm a b c T
simp at hy h π©:TypeinstβΒΉ:AddCommGroup π©instβ:DecidableEq π©T:PotentialTermx:ChargeSpectrum π©h1:{y β x.powerset | y.AllowsTerm T} = {x}a:π©b:π©c:π©h2:allowsTermForm a b c T β xh3:(allowsTermForm a b c T).AllowsTerm Thy:allowsTermForm a b c T = xβ’ x = allowsTermForm a b c T
exact hy.symm All goals completed! π
B.2. allowsTermForm a b c T minimally allows T if T is not W1 or W2
We show that charge spectra of the form allowsTermForm a b c T minimally allow T provided that
T is not one of W1 or W2.