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.MinimallyAllowsTerm.OfFinsetCompletions of charges
i. Overview
Recall that a charge spectrum has optional Hu and Hd charges, and
can have an empty set of 5-bar or 10 charges.
We say a charge spectrum is complete if it has all types of fields present, i.e.
the Hd and Hu charges are present, and the sets of 5-bar and 10 charges are non-empty.
Given a non-complete charge spectrum x we can find all the completions of x,
which charges in given subsets. That is, all charge spectra y which are a super set of x,
are complete, and have their charges in the given subsets.
ii. Key results
IsComplete : A predicate saying a charge spectrum is complete.
completions : Given a charge spectrum x and finite sets of charges S5 and S10,
the multiset of completions of x with charges in S5 and S10.
completionsTopYukawa : A fast version of completions for an x which is in
minimallyAllowsTermsOfFinset S5 S10 .topYukawa, or in other words has a qHu charge,
a non-empty set of 10 charges, but does not have a qHd charge or any 5-bar charges.
iii. Table of contents
A. The IsComplete predicate
A.1. The empty spectrum is not complete
A.2. The predicate IsCompelete is monotonic
B. Multiset of completions
B.1. A membership condition
B.2. No duplicate condition
B.3. Completions of a complete charge spectrum
B.4. Membership of own completions
B.5. Completeness of members of completions
B.6. Subset of members of completions
C. Completions for top Yukawa
C.1. No duplicates in completionsTopYukawa
C.2. Equivalence of completions and completionsTopYukawa
iv. References
There are no known references for the material in this module.
@[expose] public sectionA. The IsComplete predicate
We say a charge spectrum is complete if it has all types of fields present, i.e.
the Hd and Hu charges are present, and the sets of 5-bar and 10 charges are non-empty.
A charge spectrum is complete if it has all types of fields.
def IsComplete (x : ChargeSpectrum 𝓩) : Prop :=
x.qHd.isSome ∧ x.qHu.isSome ∧ x.Q5 ≠ ∅ ∧ x.Q10 ≠ ∅instance [DecidableEq 𝓩] (x : ChargeSpectrum 𝓩) : Decidable (IsComplete x) :=
inferInstanceAs (Decidable (x.qHd.isSome ∧ x.qHu.isSome ∧ x.Q5 ≠ ∅ ∧ x.Q10 ≠ ∅))A.1. The empty spectrum is not complete
The empty charge spectrum is not complete, since it has no charges present.
@[simp]
lemma not_isComplete_empty : ¬ IsComplete (∅ : ChargeSpectrum 𝓩) := 𝓩:Type⊢ ¬∅.IsComplete
All goals completed! 🐙
A.2. The predicate IsCompelete is monotonic
The predicate IsComplete is monotonic with respect to the subset relation. That is, if x is a
subset of y and x is complete, then y is also complete.
refine_2 𝓩:Typex:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hd:x.qHd.toFinset ⊆ y.qHd.toFinseth5:x.Q5 ⊆ y.Q5h10:x.Q10 ⊆ y.Q10hxd:x.qHd.isSome = truehxu:x.qHu.isSome = truehx5:x.Q5 ≠ ∅hx10:x.Q10 ≠ ∅a:𝓩hu:a ∈ y.qHuha:x.qHu = some a⊢ y.qHu.isSome = true
exact Option.isSome_of_mem hu All goals completed! 🐙
· refine_3 𝓩:Typex:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hd:x.qHd.toFinset ⊆ y.qHd.toFinsethu:x.qHu.toFinset ⊆ y.qHu.toFinseth5:x.Q5 ⊆ y.Q5h10:x.Q10 ⊆ y.Q10hxd:x.qHd.isSome = truehxu:x.qHu.isSome = truehx5:x.Q5 ≠ ∅hx10:x.Q10 ≠ ∅⊢ y.Q5 ≠ ∅ exact fun hy => hx5 (Finset.subset_empty.mp (hy ▸ h5)) All goals completed! 🐙
· refine_4 𝓩:Typex:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hd:x.qHd.toFinset ⊆ y.qHd.toFinsethu:x.qHu.toFinset ⊆ y.qHu.toFinseth5:x.Q5 ⊆ y.Q5h10:x.Q10 ⊆ y.Q10hxd:x.qHd.isSome = truehxu:x.qHu.isSome = truehx5:x.Q5 ≠ ∅hx10:x.Q10 ≠ ∅⊢ y.Q10 ≠ ∅ exact fun hy => hx10 (Finset.subset_empty.mp (hy ▸ h10)) All goals completed! 🐙B. Multiset of completions
The completions of a charge spectrum x with charges in given finite sets S5 and S10
are all the charge spectra y which are a super set of x, are complete, and have
their charges in S5 and S10.
Given a collection of charges x in ofFinset S5 S10,
the minimal charges y in ofFinset S5 S10 which are a super sets of x and are
complete.
def completions (S5 S10 : Finset 𝓩) (x : ChargeSpectrum 𝓩) : Multiset (ChargeSpectrum 𝓩) :=
let SqHd := if x.qHd.isSome then {x.qHd} else S5.val.map fun y => some y
let SqHu := if x.qHu.isSome then {x.qHu} else S5.val.map fun y => some y
let SQ5 := if x.Q5 ≠ ∅ then {x.Q5} else S5.val.map fun y => {y}
let SQ10 := if x.Q10 ≠ ∅ then {x.Q10} else S10.val.map fun y => {y}
(SqHd ×ˢ SqHu ×ˢ SQ5 ×ˢ SQ10).map (toProd).symmB.1. A membership condition
A simple relation for membership of a charge spectrum in the completions of another.
lemma mem_completions_iff {S5 S10 : Finset 𝓩} {x y : ChargeSpectrum 𝓩} :
y ∈ completions S5 S10 x ↔
y.qHd ∈ (if x.qHd.isSome then {x.qHd} else S5.val.map fun y => some y) ∧
y.qHu ∈ (if x.qHu.isSome then {x.qHu} else S5.val.map fun y => some y) ∧
y.Q5 ∈ (if x.Q5 ≠ ∅ then {x.Q5} else S5.val.map fun y => {y}) ∧
y.Q10 ∈ (if x.Q10 ≠ ∅ then {x.Q10} else S10.val.map fun y => {y}) := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ y ∈ completions S5 S10 x ↔
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val
rw [completions 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ y ∈
Multiset.map (⇑toProd.symm)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val) ↔
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ y ∈
Multiset.map (⇑toProd.symm)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val) ↔
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val] 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ y ∈
Multiset.map (⇑toProd.symm)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val) ↔
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val
rw [Multiset.mem_map 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ (∃
a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val,
toProd.symm a = y) ↔
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ (∃
a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val,
toProd.symm a = y) ↔
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val] 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ (∃
a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val,
toProd.symm a = y) ↔
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val
constructor mp 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ (∃
a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val,
toProd.symm a = y) →
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.valmpr 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ ((y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val) →
∃
a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val,
toProd.symm a = y
· mp 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ (∃
a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val,
toProd.symm a = y) →
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val rintro ⟨a, h, hy⟩ mp 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩a:Option 𝓩 × Option 𝓩 × Finset 𝓩 × Finset 𝓩h:a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.valhy:toProd.symm a = y⊢ (y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val
have ha : a = toProd y := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ y ∈ completions S5 S10 x ↔
(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val mp 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩a:Option 𝓩 × Option 𝓩 × Finset 𝓩 × Finset 𝓩h:a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.valhy:toProd.symm a = yha:a = toProd y⊢ (y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val subst hy 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩a:Option 𝓩 × Option 𝓩 × Finset 𝓩 × Finset 𝓩h:a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val⊢ a = toProd (toProd.symm a)mp 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩a:Option 𝓩 × Option 𝓩 × Finset 𝓩 × Finset 𝓩h:a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.valhy:toProd.symm a = yha:a = toProd y⊢ (y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val; simpmp 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩a:Option 𝓩 × Option 𝓩 × Finset 𝓩 × Finset 𝓩h:a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.valhy:toProd.symm a = yha:a = toProd y⊢ (y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.valmp 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩a:Option 𝓩 × Option 𝓩 × Finset 𝓩 × Finset 𝓩h:a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.valhy:toProd.symm a = yha:a = toProd y⊢ (y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val
subst ha mp 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩h:toProd y ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.valhy:toProd.symm (toProd y) = y⊢ (y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val
simpa [toProd] using h All goals completed! 🐙
· mpr 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩⊢ ((y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val) →
∃
a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val,
toProd.symm a = y intro h mpr 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩h:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val⊢ ∃
a ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val,
toProd.symm a = y
use toProd y h 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩h:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ∧
y.Q10 ∈ if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val⊢ (toProd y ∈
(if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 ≠ ∅ then {x.Q5} else Multiset.map (fun y => {y}) S5.val) ×ˢ
if x.Q10 ≠ ∅ then {x.Q10} else Multiset.map (fun y => {y}) S10.val) ∧
toProd.symm (toProd y) = y
simpa [toProd] using h All goals completed! 🐙B.2. No duplicate condition
For speed we define completions to be a multiset, but in fact it has no duplicates,
so it could be defined as a finite set.
lemma completions_nodup (S5 S10 : Finset 𝓩) (x : ChargeSpectrum 𝓩) :
(completions S5 S10 x).Nodup := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩⊢ (completions S5 S10 x).Nodup
simp [completions] 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩⊢ (Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10})).Nodup
split_ifs pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:x.qHd.isSome = trueh✝²:x.qHu.isSome = trueh✝¹:x.Q5 = ∅h✝:x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
({x.qHd} ×ˢ {x.qHu} ×ˢ Multiset.map (fun y => {y}) S5.val ×ˢ Multiset.map (fun y => {y}) S10.val)).Nodupneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:x.qHd.isSome = trueh✝²:x.qHu.isSome = trueh✝¹:x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x) ({x.qHd} ×ˢ {x.qHu} ×ˢ Multiset.map (fun y => {y}) S5.val ×ˢ {x.Q10})).Noduppos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:x.qHd.isSome = trueh✝²:x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x) ({x.qHd} ×ˢ {x.qHu} ×ˢ {x.Q5} ×ˢ Multiset.map (fun y => {y}) S10.val)).Nodupneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:x.qHd.isSome = trueh✝²:x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x) ({x.qHd} ×ˢ {x.qHu} ×ˢ {x.Q5} ×ˢ {x.Q10})).Noduppos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:x.Q5 = ∅h✝:x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
({x.qHd} ×ˢ
Multiset.map (fun y => some y) S5.val ×ˢ
Multiset.map (fun y => {y}) S5.val ×ˢ Multiset.map (fun y => {y}) S10.val)).Nodupneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
({x.qHd} ×ˢ Multiset.map (fun y => some y) S5.val ×ˢ Multiset.map (fun y => {y}) S5.val ×ˢ {x.Q10})).Noduppos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
({x.qHd} ×ˢ Multiset.map (fun y => some y) S5.val ×ˢ {x.Q5} ×ˢ Multiset.map (fun y => {y}) S10.val)).Nodupneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x) ({x.qHd} ×ˢ Multiset.map (fun y => some y) S5.val ×ˢ {x.Q5} ×ˢ {x.Q10})).Noduppos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:x.qHu.isSome = trueh✝¹:x.Q5 = ∅h✝:x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
(Multiset.map (fun y => some y) S5.val ×ˢ
{x.qHu} ×ˢ Multiset.map (fun y => {y}) S5.val ×ˢ Multiset.map (fun y => {y}) S10.val)).Nodupneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:x.qHu.isSome = trueh✝¹:x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
(Multiset.map (fun y => some y) S5.val ×ˢ {x.qHu} ×ˢ Multiset.map (fun y => {y}) S5.val ×ˢ {x.Q10})).Noduppos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
(Multiset.map (fun y => some y) S5.val ×ˢ {x.qHu} ×ˢ {x.Q5} ×ˢ Multiset.map (fun y => {y}) S10.val)).Nodupneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x) (Multiset.map (fun y => some y) S5.val ×ˢ {x.qHu} ×ˢ {x.Q5} ×ˢ {x.Q10})).Noduppos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:x.Q5 = ∅h✝:x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
(Multiset.map (fun y => some y) S5.val ×ˢ
Multiset.map (fun y => some y) S5.val ×ˢ
Multiset.map (fun y => {y}) S5.val ×ˢ Multiset.map (fun y => {y}) S10.val)).Nodupneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
(Multiset.map (fun y => some y) S5.val ×ˢ
Multiset.map (fun y => some y) S5.val ×ˢ Multiset.map (fun y => {y}) S5.val ×ˢ {x.Q10})).Noduppos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
(Multiset.map (fun y => some y) S5.val ×ˢ
Multiset.map (fun y => some y) S5.val ×ˢ {x.Q5} ×ˢ Multiset.map (fun y => {y}) S10.val)).Nodupneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun x => toProd.symm x)
(Multiset.map (fun y => some y) S5.val ×ˢ Multiset.map (fun y => some y) S5.val ×ˢ {x.Q5} ×ˢ {x.Q10})).Nodup
all_goals
refine Multiset.Nodup.map toProd.symm.injective ?_ neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun y => some y) S5.val ×ˢ Multiset.map (fun y => some y) S5.val ×ˢ {x.Q5} ×ˢ {x.Q10}).Nodup
refine Multiset.Nodup.product ?_ (Multiset.Nodup.product ?_ (Multiset.Nodup.product ?_ ?_)) neg.refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun y => some y) S5.val).Nodupneg.refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ (Multiset.map (fun y => some y) S5.val).Nodupneg.refine_3 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ {x.Q5}.Nodupneg.refine_4 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ {x.Q10}.Nodup
any_goals exact Multiset.nodup_singleton _ All goals completed! 🐙
any_goals exact Finset.nodup_map_iff_injOn.mpr (by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h✝³:¬x.qHd.isSome = trueh✝²:¬x.qHu.isSome = trueh✝¹:¬x.Q5 = ∅h✝:¬x.Q10 = ∅⊢ Set.InjOn (fun y => some y) ↑S5 simp All goals completed! 🐙)B.3. Completions of a complete charge spectrum
The completions of a complete charge spectrum is just the singleton containing itself.
lemma completions_eq_singleton_of_complete {S5 S10 : Finset 𝓩} (x : ChargeSpectrum 𝓩)
(hcomplete : IsComplete x) :
completions S5 S10 x = {x} := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.IsComplete⊢ completions S5 S10 x = {x}
simp [completions] 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.IsComplete⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}
simp [IsComplete] at hcomplete 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}
by_cases h1 : x.qHd.isSome pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = true⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:¬x.qHd.isSome = true⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}
case' neg => neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:¬x.qHd.isSome = true⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x} simp_all All goals completed! 🐙
by_cases h2 : x.qHu.isSome pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = trueh2:x.qHu.isSome = true⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = trueh2:¬x.qHu.isSome = true⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}
case' neg => neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = trueh2:¬x.qHu.isSome = true⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x} simp_all All goals completed! 🐙
by_cases h3 : x.Q5 ≠ ∅ pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:x.Q5 ≠ ∅⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:¬x.Q5 ≠ ∅⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}
case' neg => neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:¬x.Q5 ≠ ∅⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x} simp_all All goals completed! 🐙
by_cases h4 : x.Q10 ≠ ∅ pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:x.Q5 ≠ ∅h4:x.Q10 ≠ ∅⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:x.Q5 ≠ ∅h4:¬x.Q10 ≠ ∅⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x}
case' neg => neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hcomplete:x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:x.Q5 ≠ ∅h4:¬x.Q10 ≠ ∅⊢ Multiset.map (fun x => toProd.symm x)
((if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ×ˢ
(if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ×ˢ
if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) =
{x} simp_all All goals completed! 🐙
simp_all pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:¬x.Q5 = ∅h4:¬x.Q10 = ∅⊢ toProd.symm (x.qHd, x.qHu, x.Q5, x.Q10) = x
rfl All goals completed! 🐙B.4. Membership of own completions
If a charge spectrum x is a member of its own completion then it is complete,
and vice versa.
@[simp]
lemma self_mem_completions_iff_isComplete {S5 S10 : Finset 𝓩} (x : ChargeSpectrum 𝓩) :
x ∈ completions S5 S10 x ↔ IsComplete x := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩⊢ x ∈ completions S5 S10 x ↔ x.IsComplete
simp [mem_completions_iff, IsComplete] 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅
by_cases h1 : x.qHd.isSome pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = true⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:¬x.qHd.isSome = true⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅
case neg => 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:¬x.qHd.isSome = true⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅ simp_all All goals completed! 🐙
by_cases h2 : x.qHu.isSome pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:x.qHu.isSome = true⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:¬x.qHu.isSome = true⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅
case' neg => neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:¬x.qHu.isSome = true⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅ simp_all All goals completed! 🐙
by_cases h3 : x.Q5 ≠ ∅ pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:x.Q5 ≠ ∅⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:¬x.Q5 ≠ ∅⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅
case' neg => neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:¬x.Q5 ≠ ∅⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅ simp_all All goals completed! 🐙
by_cases h4 : x.Q10 ≠ ∅ pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:x.Q5 ≠ ∅h4:x.Q10 ≠ ∅⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:x.Q5 ≠ ∅h4:¬x.Q10 ≠ ∅⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅
case' neg => neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩h1:x.qHd.isSome = trueh2:x.qHu.isSome = trueh3:x.Q5 ≠ ∅h4:¬x.Q10 ≠ ∅⊢ ((x.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(x.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(x.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
x.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}) ↔
x.qHd.isSome = true ∧ x.qHu.isSome = true ∧ ¬x.Q5 = ∅ ∧ ¬x.Q10 = ∅ simp_all All goals completed! 🐙
simp_all All goals completed! 🐙B.5. Completeness of members of completions
We now show that any member of the completions of a charge spectrum is complete.
A charge spectrum which is a member of the completions of another charge spectrum is complete.
lemma mem_completions_isComplete {S5 S10 : Finset 𝓩} {x y : ChargeSpectrum 𝓩}
(hx : y ∈ completions S5 S10 x) : IsComplete y := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hx:y ∈ completions S5 S10 x⊢ y.IsComplete
match y with
| ⟨qHd, qHu, Q5, Q10⟩ => 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩hx:{ qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 } ∈ completions S5 S10 x⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.IsComplete
simp [mem_completions_iff] at hx 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩hx:(qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.IsComplete
match x with
| ⟨x1, x2, x3, x4⟩ => 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd}
else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu}
else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val
else {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5}) ∧
Q10 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val
else {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.IsComplete
simp_all 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.IsComplete
rw [IsComplete 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHd.isSome = true ∧
{ qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHu.isSome = true ∧
{ qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q5 ≠ ∅ ∧ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q10 ≠ ∅ 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHd.isSome = true ∧
{ qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHu.isSome = true ∧
{ qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q5 ≠ ∅ ∧ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q10 ≠ ∅] 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHd.isSome = true ∧
{ qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHu.isSome = true ∧
{ qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q5 ≠ ∅ ∧ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q10 ≠ ∅
refine ⟨?_, ?_, ?_, ?_⟩ refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHd.isSome = truerefine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHu.isSome = truerefine_3 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q5 ≠ ∅refine_4 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q10 ≠ ∅
· refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHd.isSome = true simp refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ qHd.isSome = true
by_cases hs : x1.isSome pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x1.isSome = true⊢ qHd.isSome = trueneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:¬x1.isSome = true⊢ qHd.isSome = true
· pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x1.isSome = true⊢ qHd.isSome = true simp_all All goals completed! 🐙
· neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:¬x1.isSome = true⊢ qHd.isSome = true simp_all neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(∃ a ∈ S5, some a = qHd) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x1 = none⊢ qHd.isSome = true
obtain ⟨a, h, rfl⟩ := hx.1 neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hs:x1 = nonea:𝓩h:a ∈ S5hx:(∃ a_1 ∈ S5, some a_1 = some a) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ (some a).isSome = true
simp All goals completed! 🐙
· refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.qHu.isSome = true simp refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ qHu.isSome = true
by_cases hs : x2.isSome pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x2.isSome = true⊢ qHu.isSome = trueneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:¬x2.isSome = true⊢ qHu.isSome = true
· pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x2.isSome = true⊢ qHu.isSome = true simp_all All goals completed! 🐙
· neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:¬x2.isSome = true⊢ qHu.isSome = true simp_all neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(∃ a ∈ S5, some a = qHu) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x2 = none⊢ qHu.isSome = true
obtain ⟨a, h, rfl⟩ := hx.2.1 neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hs:x2 = nonea:𝓩h:a ∈ S5hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(∃ a_1 ∈ S5, some a_1 = some a) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ (some a).isSome = true
simp All goals completed! 🐙
· refine_3 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q5 ≠ ∅ simp refine_3 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ ¬Q5 = ∅
by_cases hs : x3 ≠ ∅ pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x3 ≠ ∅⊢ ¬Q5 = ∅neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:¬x3 ≠ ∅⊢ ¬Q5 = ∅
· pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x3 ≠ ∅⊢ ¬Q5 = ∅ simp_all All goals completed! 🐙
· neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:¬x3 ≠ ∅⊢ ¬Q5 = ∅ simp_all neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(∃ a ∈ S5, {a} = Q5) ∧ Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x3 = ∅⊢ ¬Q5 = ∅
obtain ⟨a, h, rfl⟩ := hx.2.2.1 neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hs:x3 = ∅a:𝓩h:a ∈ S5hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(∃ a_1 ∈ S5, {a_1} = {a}) ∧ Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ ¬{a} = ∅
simp All goals completed! 🐙
· refine_4 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ { qHd := qHd, qHu := qHu, Q5 := Q5, Q10 := Q10 }.Q10 ≠ ∅ simp refine_4 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}⊢ ¬Q10 = ∅
by_cases hs : x4 ≠ ∅ pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x4 ≠ ∅⊢ ¬Q10 = ∅neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:¬x4 ≠ ∅⊢ ¬Q10 = ∅
· pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:x4 ≠ ∅⊢ ¬Q10 = ∅ simp_all All goals completed! 🐙
· neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧
Q10 ∈ if x4 = ∅ then Multiset.map (fun y => {y}) S10.val else {x4}hs:¬x4 ≠ ∅⊢ ¬Q10 = ∅ simp_all neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩Q10:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧ ∃ a ∈ S10, {a} = Q10hs:x4 = ∅⊢ ¬Q10 = ∅
obtain ⟨a, h, rfl⟩ := hx.2.2.2 neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩qHd:Option 𝓩qHu:Option 𝓩Q5:Finset 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩hs:x4 = ∅a:𝓩h:a ∈ S10hx:(qHd ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val) ∧
(qHu ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val) ∧
(Q5 ∈ if x3 = ∅ then Multiset.map (fun y => {y}) S5.val else {x3}) ∧ ∃ a_1 ∈ S10, {a_1} = {a}⊢ ¬{a} = ∅
simp All goals completed! 🐙B.6. Subset of members of completions
We show that any member of the completions of a charge spectrum is a super set of that charge spectrum.
If y is in the completions of x then x ⊆ y.
lemma self_subset_mem_completions (S5 S10 : Finset 𝓩) (x y : ChargeSpectrum 𝓩)
(hy : y ∈ completions S5 S10 x) : x ⊆ y := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:y ∈ completions S5 S10 x⊢ x ⊆ y
simp [mem_completions_iff] at hy 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x ⊆ y
rw [Subset 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ hasSubset.1 x y 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ hasSubset.1 x y] 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ hasSubset.1 x y
dsimp [hasSubset] 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x.qHd.toFinset ⊆ y.qHd.toFinset ∧ x.qHu.toFinset ⊆ y.qHu.toFinset ∧ x.Q5 ⊆ y.Q5 ∧ x.Q10 ⊆ y.Q10
refine ⟨?_, ?_, ?_, ?_⟩ refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x.qHd.toFinset ⊆ y.qHd.toFinsetrefine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x.qHu.toFinset ⊆ y.qHu.toFinsetrefine_3 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x.Q5 ⊆ y.Q5refine_4 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x.Q10 ⊆ y.Q10
· refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x.qHd.toFinset ⊆ y.qHd.toFinset by_cases h : x.qHd.isSome pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:x.qHd.isSome = true⊢ x.qHd.toFinset ⊆ y.qHd.toFinsetneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:¬x.qHd.isSome = true⊢ x.qHd.toFinset ⊆ y.qHd.toFinset
· pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:x.qHd.isSome = true⊢ x.qHd.toFinset ⊆ y.qHd.toFinset simp_all All goals completed! 🐙
· neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:¬x.qHd.isSome = true⊢ x.qHd.toFinset ⊆ y.qHd.toFinset simp_all All goals completed! 🐙
· refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x.qHu.toFinset ⊆ y.qHu.toFinset by_cases h : x.qHu.isSome pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:x.qHu.isSome = true⊢ x.qHu.toFinset ⊆ y.qHu.toFinsetneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:¬x.qHu.isSome = true⊢ x.qHu.toFinset ⊆ y.qHu.toFinset
· pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:x.qHu.isSome = true⊢ x.qHu.toFinset ⊆ y.qHu.toFinset simp_all All goals completed! 🐙
· neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:¬x.qHu.isSome = true⊢ x.qHu.toFinset ⊆ y.qHu.toFinset simp_all All goals completed! 🐙
· refine_3 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x.Q5 ⊆ y.Q5 by_cases h : x.Q5 ≠ ∅ pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:x.Q5 ≠ ∅⊢ x.Q5 ⊆ y.Q5neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:¬x.Q5 ≠ ∅⊢ x.Q5 ⊆ y.Q5
· pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:x.Q5 ≠ ∅⊢ x.Q5 ⊆ y.Q5 simp_all All goals completed! 🐙
· neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:¬x.Q5 ≠ ∅⊢ x.Q5 ⊆ y.Q5 simp_all All goals completed! 🐙
· refine_4 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}⊢ x.Q10 ⊆ y.Q10 by_cases h : x.Q10 ≠ ∅ pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:x.Q10 ≠ ∅⊢ x.Q10 ⊆ y.Q10neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:¬x.Q10 ≠ ∅⊢ x.Q10 ⊆ y.Q10
· pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:x.Q10 ≠ ∅⊢ x.Q10 ⊆ y.Q10 simp_all All goals completed! 🐙
· neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hy:(y.qHd ∈ if x.qHd.isSome = true then {x.qHd} else Multiset.map (fun y => some y) S5.val) ∧
(y.qHu ∈ if x.qHu.isSome = true then {x.qHu} else Multiset.map (fun y => some y) S5.val) ∧
(y.Q5 ∈ if x.Q5 = ∅ then Multiset.map (fun y => {y}) S5.val else {x.Q5}) ∧
y.Q10 ∈ if x.Q10 = ∅ then Multiset.map (fun y => {y}) S10.val else {x.Q10}h:¬x.Q10 ≠ ∅⊢ x.Q10 ⊆ y.Q10 simp_all All goals completed! 🐙
If x is a subset of y and y is complete, then there is a completion of x which is also
a subset of y.
lemma exist_completions_subset_of_complete (S5 S10 : Finset 𝓩) (x y : ChargeSpectrum 𝓩)
(hsubset : x ⊆ y) (hy : y ∈ ofFinset S5 S10) (hycomplete : IsComplete y) :
∃ z ∈ completions S5 S10 x, z ⊆ y := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x ⊆ yhy:y ∈ ofFinset S5 S10hycomplete:y.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y
by_cases hx : IsComplete x pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x ⊆ yhy:y ∈ ofFinset S5 S10hycomplete:y.IsCompletehx:x.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ yneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x ⊆ yhy:y ∈ ofFinset S5 S10hycomplete:y.IsCompletehx:¬x.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y
· pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x ⊆ yhy:y ∈ ofFinset S5 S10hycomplete:y.IsCompletehx:x.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y use x h 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x ⊆ yhy:y ∈ ofFinset S5 S10hycomplete:y.IsCompletehx:x.IsComplete⊢ x ∈ completions S5 S10 x ∧ x ⊆ y
simp_all All goals completed! 🐙
rw [Subset neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:hasSubset.1 x yhy:y ∈ ofFinset S5 S10hycomplete:y.IsCompletehx:¬x.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:hasSubset.1 x yhy:y ∈ ofFinset S5 S10hycomplete:y.IsCompletehx:¬x.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y] at hsubset neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:hasSubset.1 x yhy:y ∈ ofFinset S5 S10hycomplete:y.IsCompletehx:¬x.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y
dsimp [hasSubset] at hsubset neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x.qHd.toFinset ⊆ y.qHd.toFinset ∧ x.qHu.toFinset ⊆ y.qHu.toFinset ∧ x.Q5 ⊆ y.Q5 ∧ x.Q10 ⊆ y.Q10hy:y ∈ ofFinset S5 S10hycomplete:y.IsCompletehx:¬x.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y
match x, y with
| ⟨x1, x2, x3, x4⟩, ⟨y1, y2, y3, y4⟩ => 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y1:Option 𝓩y2:Option 𝓩y3:Finset 𝓩y4:Finset 𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.IsCompletehx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsComplete⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }
simp [IsComplete] at hycomplete 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y1:Option 𝓩y2:Option 𝓩y3:Finset 𝓩y4:Finset 𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:y1.isSome = true ∧ y2.isSome = true ∧ ¬y3 = ∅ ∧ ¬y4 = ∅hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsComplete⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }
rw [Option.isSome_iff_exists, 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y1:Option 𝓩y2:Option 𝓩y3:Finset 𝓩y4:Finset 𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, y1 = some a) ∧ y2.isSome = true ∧ ¬y3 = ∅ ∧ ¬y4 = ∅hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsComplete⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y1:Option 𝓩y2:Option 𝓩y3:Finset 𝓩y4:Finset 𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, y1 = some a) ∧ (∃ a, y2 = some a) ∧ ¬y3 = ∅ ∧ ¬y4 = ∅hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsComplete⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } Option.isSome_iff_exists 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y1:Option 𝓩y2:Option 𝓩y3:Finset 𝓩y4:Finset 𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, y1 = some a) ∧ (∃ a, y2 = some a) ∧ ¬y3 = ∅ ∧ ¬y4 = ∅hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsComplete⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y1:Option 𝓩y2:Option 𝓩y3:Finset 𝓩y4:Finset 𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, y1 = some a) ∧ (∃ a, y2 = some a) ∧ ¬y3 = ∅ ∧ ¬y4 = ∅hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsComplete⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }] at hycomplete 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y1:Option 𝓩y2:Option 𝓩y3:Finset 𝓩y4:Finset 𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, y1 = some a) ∧ (∃ a, y2 = some a) ∧ ¬y3 = ∅ ∧ ¬y4 = ∅hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsComplete⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := y1, qHu := y2, Q5 := y3, Q10 := y4 }
obtain ⟨y1, rfl⟩ := hycomplete.1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y2:Option 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, some y1 = some a) ∧ (∃ a, y2 = some a) ∧ ¬y3 = ∅ ∧ ¬y4 = ∅⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := y2, Q5 := y3, Q10 := y4 }
obtain ⟨y2, rfl⟩ := hycomplete.2.1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, some y1 = some a) ∧ (∃ a, some y2 = some a) ∧ ¬y3 = ∅ ∧ ¬y4 = ∅⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
rw [Finset.eq_empty_iff_forall_notMem, 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, some y1 = some a) ∧ (∃ a, some y2 = some a) ∧ (¬∀ (x : 𝓩), x ∉ y3) ∧ ¬y4 = ∅⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, some y1 = some a) ∧ (∃ a, some y2 = some a) ∧ (¬∀ (x : 𝓩), x ∉ y3) ∧ ¬∀ (x : 𝓩), x ∉ y4⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } Finset.eq_empty_iff_forall_notMem 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, some y1 = some a) ∧ (∃ a, some y2 = some a) ∧ (¬∀ (x : 𝓩), x ∉ y3) ∧ ¬∀ (x : 𝓩), x ∉ y4⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, some y1 = some a) ∧ (∃ a, some y2 = some a) ∧ (¬∀ (x : 𝓩), x ∉ y3) ∧ ¬∀ (x : 𝓩), x ∉ y4⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }] at hycomplete 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ a, some y1 = some a) ∧ (∃ a, some y2 = some a) ∧ (¬∀ (x : 𝓩), x ∉ y3) ∧ ¬∀ (x : 𝓩), x ∉ y4⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
simp at hycomplete 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
obtain ⟨z3, hz3⟩ := hycomplete.1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
obtain ⟨z4, hz4⟩ := hycomplete.2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hy:{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } ∈ ofFinset S5 S10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
simp [mem_ofFinset_iff] at hy 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
have hz3Mem : z3 ∈ S5 := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x ⊆ yhy:y ∈ ofFinset S5 S10hycomplete:y.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
apply hy.2.2.1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10⊢ z3 ∈ y3 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
simp_all 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
have hz4Mem : z4 ∈ S10 := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x ⊆ yhy:y ∈ ofFinset S5 S10hycomplete:y.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
apply hy.2.2.2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5⊢ z4 ∈ y4 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
simp_all 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
have hy1' : some y1 ∈ if x1.isSome = true then {x1} else
Multiset.map (fun y => some y) S5.val := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x ⊆ yhy:y ∈ ofFinset S5 S10hycomplete:y.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
match x1 with
| none => 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩y1:𝓩y2:𝓩hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hx:¬{ qHd := none, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletehsubset:{ qHd := none, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := none, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := none, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := none, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10⊢ some y1 ∈ if none.isSome = true then {none} else Multiset.map (fun y => some y) S5.val 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } simpa using hy.1 All goals completed! 🐙 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
| some a => 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩y1:𝓩y2:𝓩hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10a:𝓩hx:¬{ qHd := some a, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletehsubset:{ qHd := some a, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := some a, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := some a, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := some a, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10⊢ some y1 ∈ if (some a).isSome = true then {some a} else Multiset.map (fun y => some y) S5.val 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } simp_all 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
have hy2' : some y2 ∈ if x2.isSome = true then {x2} else
Multiset.map (fun y => some y) S5.val := by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩hsubset:x ⊆ yhy:y ∈ ofFinset S5 S10hycomplete:y.IsComplete⊢ ∃ z ∈ completions S5 S10 x, z ⊆ y 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
match x2 with
| none => 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩y1:𝓩y2:𝓩hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhx:¬{ qHd := x1, qHu := none, Q5 := x3, Q10 := x4 }.IsCompletehsubset:{ qHd := x1, qHu := none, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := none, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := none, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := none, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10⊢ some y2 ∈ if none.isSome = true then {none} else Multiset.map (fun y => some y) S5.val 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } simpa using hy.2.1 All goals completed! 🐙 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
| some a => 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩y1:𝓩y2:𝓩hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.vala:𝓩hx:¬{ qHd := x1, qHu := some a, Q5 := x3, Q10 := x4 }.IsCompletehsubset:{ qHd := x1, qHu := some a, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := some a, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := some a, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := some a, Q5 := x3, Q10 := x4 }.Q10 ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10⊢ some y2 ∈ if (some a).isSome = true then {some a} else Multiset.map (fun y => some y) S5.val 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } simp_all 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩hsubset:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHd.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.toFinset ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.qHu.toFinset ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q5 ∧
{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }.Q10hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4z3:𝓩hz3:z3 ∈ y3z4:𝓩hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
simp_all 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ∃ z ∈ completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 },
z ⊆ { qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
refine ⟨⟨y1, y2, if x3 = ∅ then {z3} else x3, if x4 = ∅ then {z4} else x4⟩, ?_, ?_⟩ refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 } ∈
completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 } ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
· refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 } ∈
completions S5 S10 { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 } rw [mem_completions_iff refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ({ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.qHd ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd}
else Multiset.map (fun y => some y) S5.val) ∧
({ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.qHu ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu}
else Multiset.map (fun y => some y) S5.val) ∧
({ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.Q5 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅ then {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5}
else Multiset.map (fun y => {y}) S5.val) ∧
{ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.Q10 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅ then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10}
else Multiset.map (fun y => {y}) S10.val refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ({ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.qHd ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd}
else Multiset.map (fun y => some y) S5.val) ∧
({ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.qHu ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu}
else Multiset.map (fun y => some y) S5.val) ∧
({ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.Q5 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅ then {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5}
else Multiset.map (fun y => {y}) S5.val) ∧
{ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.Q10 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅ then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10}
else Multiset.map (fun y => {y}) S10.val]refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ ({ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.qHd ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd}
else Multiset.map (fun y => some y) S5.val) ∧
({ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.qHu ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu}
else Multiset.map (fun y => some y) S5.val) ∧
({ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.Q5 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅ then {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5}
else Multiset.map (fun y => {y}) S5.val) ∧
{ qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.Q10 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅ then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10}
else Multiset.map (fun y => {y}) S10.val
refine ⟨by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.qHd ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHd}
else Multiset.map (fun y => some y) S5.val simp_all All goals completed! 🐙, by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.qHu ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu.isSome = true then
{{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.qHu}
else Multiset.map (fun y => some y) S5.val simp_all All goals completed! 🐙, ?_, ?_⟩
· refine_1.refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.Q5 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅ then {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5}
else Multiset.map (fun y => {y}) S5.val split_ifs with h3 pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := {z4} }.Q5 ∈ {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5}neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := x4 }.Q5 ∈ {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5}pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝¹:x3 = ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := {z4} }.Q5 ∈ Multiset.map (fun y => {y}) S5.valneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝¹:x3 = ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := x4 }.Q5 ∈ Multiset.map (fun y => {y}) S5.valpos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝¹:¬x3 = ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := {z4} }.Q5 ∈ Multiset.map (fun y => {y}) S5.valneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝¹:¬x3 = ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := x4 }.Q5 ∈ Multiset.map (fun y => {y}) S5.val <;> pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := {z4} }.Q5 ∈ {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5}neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := x4 }.Q5 ∈ {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5}pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝¹:x3 = ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := {z4} }.Q5 ∈ Multiset.map (fun y => {y}) S5.valneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝¹:x3 = ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := x4 }.Q5 ∈ Multiset.map (fun y => {y}) S5.valpos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝¹:¬x3 = ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := {z4} }.Q5 ∈ Multiset.map (fun y => {y}) S5.valneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q5 ≠ ∅h✝¹:¬x3 = ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := x4 }.Q5 ∈ Multiset.map (fun y => {y}) S5.val simp_all All goals completed! 🐙
· refine_1.refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }.Q10 ∈
if { qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅ then {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10}
else Multiset.map (fun y => {y}) S10.val split_ifs with h4 pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝:x3 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := x4 }.Q10 ∈ {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10}neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝:¬x3 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := x4 }.Q10 ∈ {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10}pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝¹:x3 = ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := {z4} }.Q10 ∈ Multiset.map (fun y => {y}) S10.valneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝¹:x3 = ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := x4 }.Q10 ∈ Multiset.map (fun y => {y}) S10.valpos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝¹:¬x3 = ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := {z4} }.Q10 ∈ Multiset.map (fun y => {y}) S10.valneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝¹:¬x3 = ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := x4 }.Q10 ∈ Multiset.map (fun y => {y}) S10.val <;> pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝:x3 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := x4 }.Q10 ∈ {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10}neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝:¬x3 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := x4 }.Q10 ∈ {{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10}pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝¹:x3 = ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := {z4} }.Q10 ∈ Multiset.map (fun y => {y}) S10.valneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝¹:x3 = ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := {z3}, Q10 := x4 }.Q10 ∈ Multiset.map (fun y => {y}) S10.valpos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝¹:¬x3 = ∅h✝:x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := {z4} }.Q10 ∈ Multiset.map (fun y => {y}) S10.valneg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.Q10 ≠ ∅h✝¹:¬x3 = ∅h✝:¬x4 = ∅⊢ { qHd := some y1, qHu := some y2, Q5 := x3, Q10 := x4 }.Q10 ∈ Multiset.map (fun y => {y}) S10.val simp_all All goals completed! 🐙
· refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 } ⊆
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } rw [Subset refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ hasSubset.1 { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 } refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ hasSubset.1 { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }]refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ hasSubset.1 { qHd := some y1, qHu := some y2, Q5 := if x3 = ∅ then {z3} else x3, Q10 := if x4 = ∅ then {z4} else x4 }
{ qHd := some y1, qHu := some y2, Q5 := y3, Q10 := y4 }
dsimp [hasSubset] refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ {y1} ⊆ {y1} ∧ {y2} ⊆ {y2} ∧ (if x3 = ∅ then {z3} else x3) ⊆ y3 ∧ (if x4 = ∅ then {z4} else x4) ⊆ y4
refine ⟨by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ {y1} ⊆ {y1} simp_all All goals completed! 🐙, by 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ {y2} ⊆ {y2} simp_all All goals completed! 🐙, ?_, ?_⟩
· refine_2.refine_1 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ (if x3 = ∅ then {z3} else x3) ⊆ y3 split_ifs with h3 pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:x3 = ∅⊢ {z3} ⊆ y3neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬x3 = ∅⊢ x3 ⊆ y3 <;> pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:x3 = ∅⊢ {z3} ⊆ y3neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh3:¬x3 = ∅⊢ x3 ⊆ y3 simp_all [Finset.singleton_subset_iff] All goals completed! 🐙
· refine_2.refine_2 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.val⊢ (if x4 = ∅ then {z4} else x4) ⊆ y4 split_ifs with h4 pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:x4 = ∅⊢ {z4} ⊆ y4neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬x4 = ∅⊢ x4 ⊆ y4 <;> pos 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:x4 = ∅⊢ {z4} ⊆ y4neg 𝓩:Typeinst✝:DecidableEq 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩y:ChargeSpectrum 𝓩x1:Option 𝓩x2:Option 𝓩x3:Finset 𝓩x4:Finset 𝓩y3:Finset 𝓩y4:Finset 𝓩hx:¬{ qHd := x1, qHu := x2, Q5 := x3, Q10 := x4 }.IsCompletey1:𝓩y2:𝓩z3:𝓩z4:𝓩hsubset:(x1.toFinset = ∅ ∨ x1.toFinset = {y1}) ∧ (x2.toFinset = ∅ ∨ x2.toFinset = {y2}) ∧ x3 ⊆ y3 ∧ x4 ⊆ y4hycomplete:(∃ x, x ∈ y3) ∧ ∃ x, x ∈ y4hz3:z3 ∈ y3hz4:z4 ∈ y4hy:y1 ∈ S5 ∧ y2 ∈ S5 ∧ y3 ⊆ S5 ∧ y4 ⊆ S10hz3Mem:z3 ∈ S5hz4Mem:z4 ∈ S10hy1':some y1 ∈ if x1.isSome = true then {x1} else Multiset.map (fun y => some y) S5.valhy2':some y2 ∈ if x2.isSome = true then {x2} else Multiset.map (fun y => some y) S5.valh4:¬x4 = ∅⊢ x4 ⊆ y4 simp_all [Finset.singleton_subset_iff] All goals completed! 🐙C. Completions for top Yukawa
We give a fast version of completions in the case when x has a qHu charge,
and a non-empty set of 10 charges, but does not have a qHd charge or any 5-bar charges.
Here we only need to specify the allowed 5-bar charges, not the allowed 10 charges.
This is the case for charges which minimally allow the top Yukawa coupling.
These definitions are primarily for speed, as this is the most common case we will look at.
A fast version of completions for an x which is in
minimallyAllowsTermsOfFinset S5 S10 .topYukawa.
def completionsTopYukawa (S5 : Finset 𝓩) (x : ChargeSpectrum 𝓩) :
Multiset (ChargeSpectrum 𝓩) :=
(S5.val ×ˢ S5.val).map fun (qHd, q5) => ⟨qHd, x.qHu, {q5}, x.Q10⟩C.1. No duplicates in completionsTopYukawa
Like for completions, we define completionsTopYukawa as a multiset for speed,
however, we can show it has no duplicates.
The multiset completionsTopYukawa S5 x has no duplicates.
omit [DecidableEq 𝓩] inlemma completionsTopYukawa_nodup {S5 : Finset 𝓩} (x : ChargeSpectrum 𝓩) :
(completionsTopYukawa S5 x).Nodup := by 𝓩:TypeS5:Finset 𝓩x:ChargeSpectrum 𝓩⊢ (completionsTopYukawa S5 x).Nodup
simp [completionsTopYukawa] 𝓩:TypeS5:Finset 𝓩x:ChargeSpectrum 𝓩⊢ (Multiset.map (fun x_1 => { qHd := some x_1.1, qHu := x.qHu, Q5 := {x_1.2}, Q10 := x.Q10 }) (S5.val ×ˢ S5.val)).Nodup
refine Multiset.Nodup.map_on ?_ ?_ refine_1 𝓩:TypeS5:Finset 𝓩x:ChargeSpectrum 𝓩⊢ ∀ x_1 ∈ S5.val ×ˢ S5.val,
∀ y ∈ S5.val ×ˢ S5.val,
{ qHd := some x_1.1, qHu := x.qHu, Q5 := {x_1.2}, Q10 := x.Q10 } =
{ qHd := some y.1, qHu := x.qHu, Q5 := {y.2}, Q10 := x.Q10 } →
x_1 = yrefine_2 𝓩:TypeS5:Finset 𝓩x:ChargeSpectrum 𝓩⊢ (S5.val ×ˢ S5.val).Nodup
intro (z1, z2) hz (y1, y2) hy h refine_1 𝓩:TypeS5:Finset 𝓩x:ChargeSpectrum 𝓩z1:𝓩z2:𝓩hz:(z1, z2) ∈ S5.val ×ˢ S5.valy1:𝓩y2:𝓩hy:(y1, y2) ∈ S5.val ×ˢ S5.valh:{ qHd := some (z1, z2).1, qHu := x.qHu, Q5 := {(z1, z2).2}, Q10 := x.Q10 } =
{ qHd := some (y1, y2).1, qHu := x.qHu, Q5 := {(y1, y2).2}, Q10 := x.Q10 }⊢ (z1, z2) = (y1, y2)refine_2 𝓩:TypeS5:Finset 𝓩x:ChargeSpectrum 𝓩⊢ (S5.val ×ˢ S5.val).Nodup
simp [eq_iff] at h refine_1 𝓩:TypeS5:Finset 𝓩x:ChargeSpectrum 𝓩z1:𝓩z2:𝓩hz:(z1, z2) ∈ S5.val ×ˢ S5.valy1:𝓩y2:𝓩hy:(y1, y2) ∈ S5.val ×ˢ S5.valh:z1 = y1 ∧ z2 = y2⊢ (z1, z2) = (y1, y2)refine_2 𝓩:TypeS5:Finset 𝓩x:ChargeSpectrum 𝓩⊢ (S5.val ×ˢ S5.val).Nodup
simp_all refine_2 𝓩:TypeS5:Finset 𝓩x:ChargeSpectrum 𝓩⊢ (S5.val ×ˢ S5.val).Nodup
exact (S5.product S5).nodup All goals completed! 🐙C.2. Equivalence of completions and completionsTopYukawa
For charges x which are in minimallyAllowsTermsOfFinset S5 S10 .topYukawa,
we show that completions S5 S10 x and completionsTopYukawa S5 x are equal multisets.
The multisets completions S5 S10 x and completionsTopYukawa S5 x are equivalent if
x minimally allows the top Yukawa.
lemma completions_eq_completionsTopYukawa_of_mem_minimallyAllowsTermsOfFinset [AddCommGroup 𝓩]
{S5 S10 : Finset 𝓩} (x : ChargeSpectrum 𝓩)
(hx : x ∈ minimallyAllowsTermsOfFinset S5 S10 .topYukawa) :
completions S5 S10 x = completionsTopYukawa S5 x := by 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hx:x ∈ minimallyAllowsTermsOfFinset S5 S10 PotentialTerm.topYukawa⊢ completions S5 S10 x = completionsTopYukawa S5 x
refine (Multiset.Nodup.ext ?_ ?_).mpr ?_ refine_1 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hx:x ∈ minimallyAllowsTermsOfFinset S5 S10 PotentialTerm.topYukawa⊢ (completions S5 S10 x).Noduprefine_2 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hx:x ∈ minimallyAllowsTermsOfFinset S5 S10 PotentialTerm.topYukawa⊢ (completionsTopYukawa S5 x).Noduprefine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hx:x ∈ minimallyAllowsTermsOfFinset S5 S10 PotentialTerm.topYukawa⊢ ∀ (a : ChargeSpectrum 𝓩), a ∈ completions S5 S10 x ↔ a ∈ completionsTopYukawa S5 x
· refine_1 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hx:x ∈ minimallyAllowsTermsOfFinset S5 S10 PotentialTerm.topYukawa⊢ (completions S5 S10 x).Nodup exact completions_nodup S5 S10 x All goals completed! 🐙
· refine_2 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hx:x ∈ minimallyAllowsTermsOfFinset S5 S10 PotentialTerm.topYukawa⊢ (completionsTopYukawa S5 x).Nodup exact completionsTopYukawa_nodup x All goals completed! 🐙
intro a refine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hx:x ∈ minimallyAllowsTermsOfFinset S5 S10 PotentialTerm.topYukawaa:ChargeSpectrum 𝓩⊢ a ∈ completions S5 S10 x ↔ a ∈ completionsTopYukawa S5 x
simp [minimallyAllowsTermsOfFinset] at hx refine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩a:ChargeSpectrum 𝓩hx:∃ a b,
((a ∈ S5 ∧ b.toFinset ⊆ S10 ∧ b.card = 2) ∧ -a + b.sum = 0) ∧
{ qHd := none, qHu := some a, Q5 := ∅, Q10 := b.toFinset } = x⊢ a ∈ completions S5 S10 x ↔ a ∈ completionsTopYukawa S5 x
obtain ⟨qHu, Q10, ⟨⟨h1, ⟨h2, hcard⟩⟩, h3⟩, rfl⟩ := hx refine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2⊢ a ∈ completions S5 S10 { qHd := none, qHu := some qHu, Q5 := ∅, Q10 := Q10.toFinset } ↔
a ∈ completionsTopYukawa S5 { qHd := none, qHu := some qHu, Q5 := ∅, Q10 := Q10.toFinset }
simp [completions, completionsTopYukawa] refine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2⊢ (∃ b a_1 a_2,
(a_2 ∈ S5 ∧ a_1 ∈ S5 ∧ b ∈ if Q10 = 0 then Multiset.map (fun y => {y}) S10.val else {Q10.toFinset}) ∧
toProd.symm (some a_2, some qHu, {a_1}, b) = a) ↔
∃ a_1 b, (a_1 ∈ S5 ∧ b ∈ S5) ∧ { qHd := some a_1, qHu := some qHu, Q5 := {b}, Q10 := Q10.toFinset } = a
have Q10_ne_zero : Q10 ≠ 0 := by 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩x:ChargeSpectrum 𝓩hx:x ∈ minimallyAllowsTermsOfFinset S5 S10 PotentialTerm.topYukawa⊢ completions S5 S10 x = completionsTopYukawa S5 x refine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2Q10_ne_zero:Q10 ≠ 0⊢ (∃ b a_1 a_2,
(a_2 ∈ S5 ∧ a_1 ∈ S5 ∧ b ∈ if Q10 = 0 then Multiset.map (fun y => {y}) S10.val else {Q10.toFinset}) ∧
toProd.symm (some a_2, some qHu, {a_1}, b) = a) ↔
∃ a_1 b, (a_1 ∈ S5 ∧ b ∈ S5) ∧ { qHd := some a_1, qHu := some qHu, Q5 := {b}, Q10 := Q10.toFinset } = a
by_contra hn 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2hn:Q10 = 0⊢ False refine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2Q10_ne_zero:Q10 ≠ 0⊢ (∃ b a_1 a_2,
(a_2 ∈ S5 ∧ a_1 ∈ S5 ∧ b ∈ if Q10 = 0 then Multiset.map (fun y => {y}) S10.val else {Q10.toFinset}) ∧
toProd.symm (some a_2, some qHu, {a_1}, b) = a) ↔
∃ a_1 b, (a_1 ∈ S5 ∧ b ∈ S5) ∧ { qHd := some a_1, qHu := some qHu, Q5 := {b}, Q10 := Q10.toFinset } = a
subst hn 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩h1:qHu ∈ S5h3:-qHu + Multiset.sum 0 = 0h2:Multiset.toFinset 0 ⊆ S10hcard:Multiset.card 0 = 2⊢ Falserefine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2Q10_ne_zero:Q10 ≠ 0⊢ (∃ b a_1 a_2,
(a_2 ∈ S5 ∧ a_1 ∈ S5 ∧ b ∈ if Q10 = 0 then Multiset.map (fun y => {y}) S10.val else {Q10.toFinset}) ∧
toProd.symm (some a_2, some qHu, {a_1}, b) = a) ↔
∃ a_1 b, (a_1 ∈ S5 ∧ b ∈ S5) ∧ { qHd := some a_1, qHu := some qHu, Q5 := {b}, Q10 := Q10.toFinset } = a
simp at hcardrefine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2Q10_ne_zero:Q10 ≠ 0⊢ (∃ b a_1 a_2,
(a_2 ∈ S5 ∧ a_1 ∈ S5 ∧ b ∈ if Q10 = 0 then Multiset.map (fun y => {y}) S10.val else {Q10.toFinset}) ∧
toProd.symm (some a_2, some qHu, {a_1}, b) = a) ↔
∃ a_1 b, (a_1 ∈ S5 ∧ b ∈ S5) ∧ { qHd := some a_1, qHu := some qHu, Q5 := {b}, Q10 := Q10.toFinset } = arefine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2Q10_ne_zero:Q10 ≠ 0⊢ (∃ b a_1 a_2,
(a_2 ∈ S5 ∧ a_1 ∈ S5 ∧ b ∈ if Q10 = 0 then Multiset.map (fun y => {y}) S10.val else {Q10.toFinset}) ∧
toProd.symm (some a_2, some qHu, {a_1}, b) = a) ↔
∃ a_1 b, (a_1 ∈ S5 ∧ b ∈ S5) ∧ { qHd := some a_1, qHu := some qHu, Q5 := {b}, Q10 := Q10.toFinset } = a
simp [Q10_ne_zero] refine_3 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2Q10_ne_zero:Q10 ≠ 0⊢ (∃ a_1 a_2, (a_2 ∈ S5 ∧ a_1 ∈ S5) ∧ toProd.symm (some a_2, some qHu, {a_1}, Q10.toFinset) = a) ↔
∃ a_1 b, (a_1 ∈ S5 ∧ b ∈ S5) ∧ { qHd := some a_1, qHu := some qHu, Q5 := {b}, Q10 := Q10.toFinset } = a
match a with
| ⟨xqHd, xqHu, xQ5, xQ10⟩ => 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2Q10_ne_zero:Q10 ≠ 0xqHd:Option 𝓩xqHu:Option 𝓩xQ5:Finset 𝓩xQ10:Finset 𝓩⊢ (∃ a a_1,
(a_1 ∈ S5 ∧ a ∈ S5) ∧
toProd.symm (some a_1, some qHu, {a}, Q10.toFinset) = { qHd := xqHd, qHu := xqHu, Q5 := xQ5, Q10 := xQ10 }) ↔
∃ a b,
(a ∈ S5 ∧ b ∈ S5) ∧
{ qHd := some a, qHu := some qHu, Q5 := {b}, Q10 := Q10.toFinset } =
{ qHd := xqHd, qHu := xqHu, Q5 := xQ5, Q10 := xQ10 }
simp [eq_iff] 𝓩:Typeinst✝¹:DecidableEq 𝓩inst✝:AddCommGroup 𝓩S5:Finset 𝓩S10:Finset 𝓩a:ChargeSpectrum 𝓩qHu:𝓩Q10:Multiset 𝓩h3:-qHu + Q10.sum = 0h1:qHu ∈ S5h2:Q10.toFinset ⊆ S10hcard:Q10.card = 2Q10_ne_zero:Q10 ≠ 0xqHd:Option 𝓩xqHu:Option 𝓩xQ5:Finset 𝓩xQ10:Finset 𝓩⊢ (∃ a a_1,
(a_1 ∈ S5 ∧ a ∈ S5) ∧
(toProd.symm (some a_1, some qHu, {a}, Q10.toFinset)).qHd = xqHd ∧
(toProd.symm (some a_1, some qHu, {a}, Q10.toFinset)).qHu = xqHu ∧
(toProd.symm (some a_1, some qHu, {a}, Q10.toFinset)).Q5 = xQ5 ∧
(toProd.symm (some a_1, some qHu, {a}, Q10.toFinset)).Q10 = xQ10) ↔
∃ a b, (a ∈ S5 ∧ b ∈ S5) ∧ some a = xqHd ∧ some qHu = xqHu ∧ {b} = xQ5 ∧ Q10.toFinset = xQ10
aesop All goals completed! 🐙