From Coq Require Import Reals Lra.
Core: Reachable Threshold
Class ReachableThreshold V Cv (threshold : R) `{Hm : Measurable V} `{FinSet V Cv} : Prop := { rt_positive : (0 <= threshold)%R; rt_reachable : exists (vs : Cv), (sum_weights vs > threshold)%R; }. #[global] Hint Mode ReachableThreshold - - - ! ! ! ! ! ! ! ! ! ! : typeclass_instances. Section sec_reachable_threshold_props. Context (threshold : R) `{Hrt : ReachableThreshold V Cv threshold} .
Given a list with no duplicates and whose added weight does not pass the
threshold, we can iteratively add elements into it until it passes the
threshold. Hence, the last element added will tip over the threshold.
threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∀ vsfix vss : list V, NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∀ vsfix vss : list V, NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R∃ vs : list V, NoDup vs ∧ vs ⊆ a :: vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
H7: (sum_weights_list (vss ++ vsfix) <= threshold)%R∃ vs : list V, NoDup vs ∧ vs ⊆ a :: vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
Hgt: (threshold < sum_weights_list (vss ++ vsfix))%R∃ vs : list V, NoDup vs ∧ vs ⊆ a :: vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
H7: (sum_weights_list (vss ++ vsfix) <= threshold)%R∃ vs : list V, NoDup vs ∧ vs ⊆ a :: vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
H7: (sum_weights_list (vss ++ vsfix) <= threshold)%RNoDup (a :: vss) ∧ a :: vss ⊆ a :: vss ∧ (sum_weights_list ((a :: vss) ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ a :: vss ∧ (sum_weights_list (set_remove v (a :: vss) ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
H7: (sum_weights_list (vss ++ vsfix) <= threshold)%RNoDup (a :: vss)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
H7: (sum_weights_list (vss ++ vsfix) <= threshold)%R∃ v : V, v ∈ a :: vss ∧ (sum_weights_list (set_remove v (a :: vss) ++ vsfix) <= threshold)%Rby apply nodup_append_left in Hnd_all.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
H7: (sum_weights_list (vss ++ vsfix) <= threshold)%RNoDup (a :: vss)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
H7: (sum_weights_list (vss ++ vsfix) <= threshold)%R∃ v : V, v ∈ a :: vss ∧ (sum_weights_list (set_remove v (a :: vss) ++ vsfix) <= threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
H7: (sum_weights_list (vss ++ vsfix) <= threshold)%Ra ∈ a :: vss ∧ (sum_weights_list (set_remove a (a :: vss) ++ vsfix) <= threshold)%Rby cbn; rewrite decide_True.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
H7: (sum_weights_list (vss ++ vsfix) <= threshold)%R(sum_weights_list (set_remove a (a :: vss) ++ vsfix) <= threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnd_all: NoDup ((a :: vss) ++ vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
Hgt: (threshold < sum_weights_list (vss ++ vsfix))%R∃ vs : list V, NoDup vs ∧ vs ⊆ a :: vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnin: a ∉ (fix app (l m : list V) {struct l} : list V := match l with | [] => m | a :: l1 => a :: app l1 m end) vss vsfix
Hvss: NoDup ((fix app (l m : list V) {struct l} : list V := match l with | [] => m | a :: l1 => a :: app l1 m end) vss vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
Hgt: (threshold < sum_weights_list (vss ++ vsfix))%R∃ vs : list V, NoDup vs ∧ vs ⊆ a :: vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnin: a ∉ (fix app (l m : list V) {struct l} : list V := match l with | [] => m | a :: l1 => a :: app l1 m end) vss vsfix
Hvss: NoDup ((fix app (l m : list V) {struct l} : list V := match l with | [] => m | a :: l1 => a :: app l1 m end) vss vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
vs: list V
Hvs: NoDup vs
Hincl: vs ⊆ vss
Hex: (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)∃ vs : list V, NoDup vs ∧ vs ⊆ a :: vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnin: a ∉ (fix app (l m : list V) {struct l} : list V := match l with | [] => m | a :: l1 => a :: app l1 m end) vss vsfix
Hvss: NoDup ((fix app (l m : list V) {struct l} : list V := match l with | [] => m | a :: l1 => a :: app l1 m end) vss vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
vs: list V
Hvs: NoDup vs
Hincl: vs ⊆ vss
Hex: (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)NoDup vs ∧ vs ⊆ a :: vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)by right; apply Hincl. Qed.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix: list V
a: V
vss: list V
IHvss: NoDup vsfix → (sum_weights_list vsfix <= threshold)%R → NoDup (vss ++ vsfix) → (sum_weights_list (vss ++ vsfix) > threshold)%R → ∃ vs : list V, NoDup vs ∧ vs ⊆ vss ∧ (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)
Hnd_vsfix: NoDup vsfix
Hvsfix: (sum_weights_list vsfix <= threshold)%R
Hnin: a ∉ (fix app (l m : list V) {struct l} : list V := match l with | [] => m | a :: l1 => a :: app l1 m end) vss vsfix
Hvss: NoDup ((fix app (l m : list V) {struct l} : list V := match l with | [] => m | a :: l1 => a :: app l1 m end) vss vsfix)
Hall: (`(weight a) + sum_weights_list (vss ++ vsfix) > threshold)%R
vs: list V
Hvs: NoDup vs
Hincl: vs ⊆ vss
Hex: (sum_weights_list (vs ++ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights_list (set_remove v vs ++ vsfix) <= threshold)%R)vs ⊆ a :: vss
The FinSet version of the pivotal_validator_extension_list result.
threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∀ vsfix vss : Cv, (sum_weights vsfix <= threshold)%R → vss ## vsfix → (sum_weights (vss ∪ vsfix) > threshold)%R → ∃ vs : Cv, vs ⊆ vss ∧ (sum_weights (vs ∪ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]} ∪ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∀ vsfix vss : Cv, (sum_weights vsfix <= threshold)%R → vss ## vsfix → (sum_weights (vss ∪ vsfix) > threshold)%R → ∃ vs : Cv, vs ⊆ vss ∧ (sum_weights (vs ∪ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]} ∪ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R∃ vs : Cv, vs ⊆ vss ∧ (sum_weights (vs ∪ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]} ∪ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%RNoDup (elements vss ++ elements vsfix)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R(sum_weights_list (elements vss ++ elements vsfix) > threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R∃ vs : Cv, vs ⊆ vss ∧ (sum_weights (vs ∪ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]} ∪ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%RNoDup (elements vss ++ elements vsfix)by intro; rewrite !elem_of_elements; intros ? ?; eapply Hdisj.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R∀ x : V, x ∈ elements vss → x ∉ elements vsfixthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R(sum_weights_list (elements vss ++ elements vsfix) > threshold)%Rby rewrite sum_weights_disj_union in Hall.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R(sum_weights_list (elements vss) + sum_weights_list (elements vsfix) > threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R∃ vs : Cv, vs ⊆ vss ∧ (sum_weights (vs ∪ vsfix) > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]} ∪ vsfix) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rlist_to_set vs ⊆ vssthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R(sum_weights (list_to_set vs ∪ vsfix) > threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R∃ v : V, v ∈ list_to_set vs ∧ (sum_weights (list_to_set vs ∖ {[v]} ∪ vsfix) <= threshold)%Rby intros a Ha; apply elem_of_list_to_set, Hincl, elem_of_elements in Ha.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rlist_to_set vs ⊆ vssthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R(sum_weights (list_to_set vs ∪ vsfix) > threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list vs + sum_weights_list (elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R(sum_weights (list_to_set vs ∪ vsfix) > threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list vs + sum_weights_list (elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R(sum_weights (list_to_set vs) + sum_weights vsfix > threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list vs + sum_weights_list (elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rlist_to_set vs ## vsfixthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list vs + sum_weights_list (elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R(sum_weights (list_to_set vs) + sum_weights vsfix > threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list vs + sum_weights_list (elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rsum_weights_list vs = sum_weights (list_to_set vs)by rewrite elements_list_to_set.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list vs + sum_weights_list (elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rvs ≡ₚ elements (list_to_set vs)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list vs + sum_weights_list (elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rlist_to_set vs ## vsfixthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list vs + sum_weights_list (elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R
x: Vx ∈ vs → x ∈ vsfix → Falseby eapply elem_of_elements, Hincl.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list vs + sum_weights_list (elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R
x: V
Hx_vs: x ∈ vs
Hx_vsfix: x ∈ vsfixx ∈ vssthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R∃ v : V, v ∈ list_to_set vs ∧ (sum_weights (list_to_set vs ∖ {[v]} ∪ vsfix) <= threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R(sum_weights (list_to_set vs ∖ {[v]} ∪ vsfix) <= threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rsum_weights_list (set_remove v vs ++ elements vsfix) = sum_weights (list_to_set vs ∖ {[v]} ∪ vsfix)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rset_remove v vs ++ elements vsfix ≡ₚ elements (list_to_set vs ∖ {[v]} ∪ vsfix)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rset_remove v vs ++ elements vsfix ≡ₚ elements (list_to_set vs ∖ {[v]}) ++ elements vsfixthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rlist_to_set vs ∖ {[v]} ## vsfixthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rset_remove v vs ++ elements vsfix ≡ₚ elements (list_to_set vs ∖ {[v]}) ++ elements vsfixthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rset_remove v vs ≡ₚ elements (list_to_set vs ∖ {[v]})threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Relements (list_to_set (set_remove v vs)) ≡ₚ elements (list_to_set vs ∖ {[v]})threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rlist_to_set (set_remove v vs) ≡ list_to_set vs ∖ {[v]}threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R
x: Vx ∈ list_to_set (set_remove v vs) ↔ x ∈ list_to_set vs ∖ {[v]}by rewrite set_remove_iff, elem_of_singleton.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R
x: Vx ∈ set_remove v vs ↔ x ∈ vs ∧ x ∉ {[v]}threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%Rlist_to_set vs ∖ {[v]} ## vsfixby intros [] ?; eapply Hdisj; [apply elem_of_elements, Hincl |]. Qed.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vsfix, vss: Cv
Hvsfix: (sum_weights vsfix <= threshold)%R
Hdisj: vss ## vsfix
Hall: (sum_weights (vss ∪ vsfix) > threshold)%R
vs: list V
Hnd_vs: NoDup vs
Hincl: vs ⊆ elements vss
Hvs: (sum_weights_list (vs ++ elements vsfix) > threshold)%R
v: V
Hv: v ∈ vs
Hvs_v: (sum_weights_list (set_remove v vs ++ elements vsfix) <= threshold)%R
x: Vx ∈ vs ∧ x ≠ v → x ∈ vsfix → False
Given a set of validators whose combined weight passes the threshold, we can
iteratively remove elements until the combined weight decreases below the
threshold. The last element removed tips over the threshold.
threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∀ vss : Cv, (sum_weights vss > threshold)%R → ∃ vs : Cv, vs ⊆ vss ∧ (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∀ vss : Cv, (sum_weights vss > threshold)%R → ∃ vs : Cv, vs ⊆ vss ∧ (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%R∃ vs : Cv, vs ⊆ vss ∧ (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%R(sum_weights ∅ <= threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%Rvss ## ∅threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%R(sum_weights (vss ∪ ∅) > threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%R
vs: Cv
Hincl: vs ⊆ vss
Hvs: (sum_weights (vs ∪ ∅) > threshold)%R
v: V
Hv: v ∈ vs
Hvs': (sum_weights (vs ∖ {[v]} ∪ ∅) <= threshold)%R∃ vs : Cv, vs ⊆ vss ∧ (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%R(sum_weights ∅ <= threshold)%Rby apply (rt_positive (H6 := H6)).threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%R(0 <= threshold)%Rby apply disjoint_empty_r.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%Rvss ## ∅by rewrite sum_weights_union_empty.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%R(sum_weights (vss ∪ ∅) > threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%R
vs: Cv
Hincl: vs ⊆ vss
Hvs: (sum_weights (vs ∪ ∅) > threshold)%R
v: V
Hv: v ∈ vs
Hvs': (sum_weights (vs ∖ {[v]} ∪ ∅) <= threshold)%R∃ vs : Cv, vs ⊆ vss ∧ (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)by repeat esplit. Qed.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vss: Cv
Hvss: (sum_weights vss > threshold)%R
vs: Cv
Hincl: vs ⊆ vss
Hvs: (sum_weights vs > threshold)%R
v: V
Hv: v ∈ vs
Hvs': (sum_weights (vs ∖ {[v]}) <= threshold)%R∃ vs : Cv, vs ⊆ vss ∧ (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)
There exists a set whose combined weight passes the threshold and containing
an element such that, if the element is removed, the combined weight decreases
below the threshold.
threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∃ vs : Cv, (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∃ vs : Cv, (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs: Cv
Hweight: (sum_weights vs > threshold)%R∃ vs : Cv, (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)by exists vs'. Qed.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs, vs': Cv
Hincl: vs' ⊆ vs
Hvs': (sum_weights vs' > threshold)%R ∧ (∃ v : V, v ∈ vs' ∧ (sum_weights (vs' ∖ {[v]}) <= threshold)%R)∃ vs : Cv, (sum_weights vs > threshold)%R ∧ (∃ v : V, v ∈ vs ∧ (sum_weights (vs ∖ {[v]}) <= threshold)%R)
A validator
v
is called potentially pivotal if there exists a set of
validators whose combined weight is below the threshold such that, if
adding v
to the set, the combine weight would pass over the threshold.
Definition potentially_pivotal (v : V) : Prop :=
exists (vs : Cv),
v ∉ vs /\
(sum_weights vs <= threshold)%R /\
(sum_weights vs > threshold - weight v)%R.
The main result of this section proves the existence of a potentially_pivotal
validator.
threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∃ v : V, potentially_pivotal vthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold∃ v : V, potentially_pivotal vthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs: Cv
Hgt: (sum_weights vs > threshold)%R
v: V
Hin: v ∈ vs
Hlte: (sum_weights (vs ∖ {[v]}) <= threshold)%R∃ v : V, potentially_pivotal vthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs: Cv
Hgt: (sum_weights vs > threshold)%R
v: V
Hin: v ∈ vs
Hlte: (sum_weights (vs ∖ {[v]}) <= threshold)%Rv ∉ vs ∖ {[v]}threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs: Cv
Hgt: (sum_weights vs > threshold)%R
v: V
Hin: v ∈ vs
Hlte: (sum_weights (vs ∖ {[v]}) <= threshold)%R(sum_weights (vs ∖ {[v]}) <= threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs: Cv
Hgt: (sum_weights vs > threshold)%R
v: V
Hin: v ∈ vs
Hlte: (sum_weights (vs ∖ {[v]}) <= threshold)%R(sum_weights (vs ∖ {[v]}) > threshold - weight v)%Rby rewrite elem_of_difference, elem_of_singleton; intros [].threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs: Cv
Hgt: (sum_weights vs > threshold)%R
v: V
Hin: v ∈ vs
Hlte: (sum_weights (vs ∖ {[v]}) <= threshold)%Rv ∉ vs ∖ {[v]}done.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs: Cv
Hgt: (sum_weights vs > threshold)%R
v: V
Hin: v ∈ vs
Hlte: (sum_weights (vs ∖ {[v]}) <= threshold)%R(sum_weights (vs ∖ {[v]}) <= threshold)%Rthreshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs: Cv
Hgt: (sum_weights vs > threshold)%R
v: V
Hin: v ∈ vs
Hlte: (sum_weights (vs ∖ {[v]}) <= threshold)%R(sum_weights (vs ∖ {[v]}) > threshold - weight v)%Rby clear Hlte; cbv in *; lra. Qed. End sec_reachable_threshold_props.threshold: R
V, Cv: Type
Hm: Measurable V
H: ElemOf V Cv
H0: Empty Cv
H1: Singleton V Cv
H2: Union Cv
H3: Intersection Cv
H4: Difference Cv
H5: Elements V Cv
EqDecision0: EqDecision V
H6: FinSet V Cv
Hrt: ReachableThreshold V Cv threshold
vs: Cv
v: V
Hgt: (`(weight v) + sum_weights (vs ∖ {[v]}) > threshold)%R
Hin: v ∈ vs
Hlte: (sum_weights (vs ∖ {[v]}) <= threshold)%R(sum_weights (vs ∖ {[v]}) > threshold - weight v)%R