Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.1. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+โ†‘ Ctrl+โ†“ to navigate, Ctrl+๐Ÿ–ฑ๏ธ to focus. On Mac, use โŒ˜ instead of Ctrl.
[Loading ML file ring_plugin.cmxs (using legacy method) ... done]
[Loading ML file zify_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_plugin.cmxs (using legacy method) ... done]
[Loading ML file btauto_plugin.cmxs (using legacy method) ... done]
From Coq Require Import Reals Lra.
[Loading ML file coq-itauto.plugin ... done]

Utility: Measure Related Definitions and Results

The type of positive real numbers.
Definition pos_R := {r : R | (r > 0)%R}.

Definition weight_proj1_sig (w : pos_R) : R := proj1_sig w.
We can treat a positive real number as if it were an ordinary real number.
Coercion weight_proj1_sig : pos_R >-> R.

Class Measurable (V : Type) : Type := weight : V -> pos_R.

#[global] Hint Mode Measurable ! : typeclass_instances.

Section sec_measurable_props.

Context
  `{Measurable V}
  `{FinSet V Cv}
  .

Definition sum_weights (l : Cv) : R :=
  set_fold (fun v r => (proj1_sig (weight v) + r)%R) 0%R l.

Definition sum_weights_list (vs : list V) :=
  fold_right (fun v r => (proj1_sig (weight v) + r)%R) 0%R vs.

V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l: Cv

sum_weights l = sum_weights_list (elements l)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l: Cv

sum_weights l = sum_weights_list (elements l)
done. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ l : Cv, l โ‰ก โˆ… โ†’ sum_weights l = 0%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ l : Cv, l โ‰ก โˆ… โ†’ sum_weights l = 0%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l: Cv
Hl: l โ‰ก โˆ…

sum_weights l = 0%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l: Cv
Hl: l โ‰ก โˆ…

foldr (ฮป (v : V) (r : R), (`(weight v) + r)%R) 0%R (elements l) = 0%R
by apply elements_empty_iff in Hl as ->. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ x : V, sum_weights {[x]} = `(weight x)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ x : V, sum_weights {[x]} = `(weight x)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
x: V

set_fold (ฮป (v : V) (r : R), (`(weight v) + r)%R) 0%R {[x]} = `(weight x)
by rewrite set_fold_singleton; lra. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l: list V

(0 <= sum_weights_list l)%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l: list V

(0 <= sum_weights_list l)%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
l: list V
IHl: (0 <= sum_weights_list l)%R

(0 <= sum_weights_list (a :: l))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
l: list V
IHl: (0 <= sum_weights_list l)%R

(0 <= `(weight a) + sum_weights_list l)%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
l: list V
IHl: (0 <= sum_weights_list l)%R

(0 <= `(weight a))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
l: list V
IHl: (0 <= sum_weights_list l)%R
x: R
r: (x > 0)%R

(0 <= x)%R
by apply Rlt_le. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l: Cv

(0 <= sum_weights l)%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l: Cv

(0 <= sum_weights l)%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l: Cv

(0 <= sum_weights_list (elements l))%R
by apply sum_weights_positive_list. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ (v : V) (vs : list V), NoDup vs โ†’ v โˆˆ vs โ†’ sum_weights_list vs = (`(weight v) + sum_weights_list (set_remove v vs))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ (v : V) (vs : list V), NoDup vs โ†’ v โˆˆ vs โ†’ sum_weights_list vs = (`(weight v) + sum_weights_list (set_remove v vs))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: NoDup vs โ†’ a โˆˆ vs โ†’ sum_weights_list vs = (`(weight a) + sum_weights_list (set_remove a vs))%R
Hnodup: NoDup (a :: vs)

(`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs)%R = (`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 (if decide (a = a) then vs else a :: set_remove a vs))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v, a: V
vs: list V
IHvs: NoDup vs โ†’ v โˆˆ vs โ†’ sum_weights_list vs = (`(weight v) + sum_weights_list (set_remove v vs))%R
Hnodup: NoDup (a :: vs)
Hv': v โˆˆ vs
(`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs)%R = (`(weight v) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 (if decide (v = a) then vs else a :: set_remove v vs))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: NoDup vs โ†’ a โˆˆ vs โ†’ sum_weights_list vs = (`(weight a) + sum_weights_list (set_remove a vs))%R
Hnodup: NoDup (a :: vs)

(`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs)%R = (`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 (if decide (a = a) then vs else a :: set_remove a vs))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: NoDup vs โ†’ a โˆˆ vs โ†’ sum_weights_list vs = (`(weight a) + sum_weights_list (set_remove a vs))%R
H10: a โˆ‰ vs
H11: NoDup vs

(`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs)%R = (`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 (if decide (a = a) then vs else a :: set_remove a vs))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: NoDup vs โ†’ a โˆˆ vs โ†’ sum_weights_list vs = (`(weight a) + sum_weights_list (set_remove a vs))%R
H10: a โˆ‰ vs
H11: NoDup vs

foldr (ฮป (v : V) (r : R), (`(weight v) + r)%R) 0%R vs = foldr (ฮป (v : V) (r : R), (`(weight v) + r)%R) 0%R (if decide (a = a) then vs else a :: set_remove a vs)
by rewrite decide_True.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v, a: V
vs: list V
IHvs: NoDup vs โ†’ v โˆˆ vs โ†’ sum_weights_list vs = (`(weight v) + sum_weights_list (set_remove v vs))%R
Hnodup: NoDup (a :: vs)
Hv': v โˆˆ vs

(`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs)%R = (`(weight v) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 (if decide (v = a) then vs else a :: set_remove v vs))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v, a: V
vs: list V
IHvs: NoDup vs โ†’ v โˆˆ vs โ†’ sum_weights_list vs = (`(weight v) + sum_weights_list (set_remove v vs))%R
Hv': v โˆˆ vs
Ha: a โˆ‰ vs
Hnodup': NoDup vs

(`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs)%R = (`(weight v) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 (if decide (v = a) then vs else a :: set_remove v vs))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v, a: V
vs: list V
IHvs: NoDup vs โ†’ v โˆˆ vs โ†’ sum_weights_list vs = (`(weight v) + sum_weights_list (set_remove v vs))%R
Hv': v โˆˆ vs
Ha: a โˆ‰ vs
Hnodup': NoDup vs

(`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs)%R = (`(weight v) + (`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 (set_remove v vs)))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v, a: V
vs: list V
IHvs: NoDup vs โ†’ v โˆˆ vs โ†’ sum_weights_list vs = (`(weight v) + sum_weights_list (set_remove v vs))%R
Hv': v โˆˆ vs
Ha: a โˆ‰ vs
Hnodup': NoDup vs

(`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs)%R = (`(weight a) + (`(weight v) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 (set_remove v vs)))%R
by apply Rplus_eq_compat_l, IHvs. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ vs vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ vs vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs: NoDup (a :: vs)
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'

(sum_weights_list (a :: vs) <= sum_weights_list vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs: NoDup (a :: vs)
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': a โˆˆ vs' โ†’ sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R

(sum_weights_list (a :: vs) <= sum_weights_list vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs: NoDup (a :: vs)
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R

(sum_weights_list (a :: vs) <= sum_weights_list vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs: NoDup (a :: vs)
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R

(`(weight a) + foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs <= `(weight a) + sum_weights_list (set_remove a vs'))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs: NoDup (a :: vs)
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R

(foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs <= sum_weights_list (set_remove a vs'))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R
H10: a โˆ‰ vs
H11: NoDup vs

(foldr (ฮป (v : V) (r : R), `(weight v) + r) 0 vs <= sum_weights_list (set_remove a vs'))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R
H10: a โˆ‰ vs
H11: NoDup vs

vs โІ set_remove a vs'
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R
H10: a โˆ‰ vs
H11: NoDup vs
v: V
Hv: v โˆˆ vs

v โˆˆ set_remove a vs'
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R
H10: a โˆ‰ vs
H11: NoDup vs
v: V
Hv: v โˆˆ vs

v โˆˆ vs' โˆง v โ‰  a
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R
H10: a โˆ‰ vs
H11: NoDup vs
v: V
Hv: v โˆˆ vs

v โˆˆ vs'
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R
H10: a โˆ‰ vs
H11: NoDup vs
v: V
Hv: v โˆˆ vs
v โ‰  a
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R
H10: a โˆ‰ vs
H11: NoDup vs
v: V
Hv: v โˆˆ vs

v โˆˆ vs'
by apply Hincl; right.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
a: V
vs: list V
IHvs: โˆ€ vs' : list V, NoDup vs โ†’ NoDup vs' โ†’ vs โІ vs' โ†’ (sum_weights_list vs <= sum_weights_list vs')%R
vs': list V
Hnodup_vs': NoDup vs'
Hincl: a :: vs โІ vs'
Hvs': sum_weights_list vs' = (`(weight a) + sum_weights_list (set_remove a vs'))%R
H10: a โˆ‰ vs
H11: NoDup vs
v: V
Hv: v โˆˆ vs

v โ‰  a
by intros ->. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ vs vs' : Cv, vs โІ vs' โ†’ (sum_weights vs <= sum_weights vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ vs vs' : Cv, vs โІ vs' โ†’ (sum_weights vs <= sum_weights vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hincl: vs โІ vs'

(sum_weights vs <= sum_weights vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hincl: vs โІ vs'

(sum_weights_list (elements vs) <= sum_weights_list (elements vs'))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hincl: vs โІ vs'

NoDup (elements vs)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hincl: vs โІ vs'
NoDup (elements vs')
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hincl: vs โІ vs'
elements vs โІ elements vs'
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hincl: vs โІ vs'

NoDup (elements vs)
by apply NoDup_elements.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hincl: vs โІ vs'

NoDup (elements vs')
by apply NoDup_elements.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hincl: vs โІ vs'

elements vs โІ elements vs'
by intro v; rewrite !elem_of_elements; apply Hincl. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

Proper (equiv ==> eq) sum_weights
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

Proper (equiv ==> eq) sum_weights
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
x, y: Cv
Hequiv: x โ‰ก y

sum_weights x = sum_weights y
by apply Rle_antisym; apply sum_weights_subseteq; intro a; apply Hequiv. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ (v : V) (vs : Cv), v โˆˆ vs โ†’ sum_weights vs = (`(weight v) + sum_weights (vs โˆ– {[v]}))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ (v : V) (vs : Cv), v โˆˆ vs โ†’ sum_weights vs = (`(weight v) + sum_weights (vs โˆ– {[v]}))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

sum_weights vs = (`(weight v) + sum_weights (vs โˆ– {[v]}))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

NoDup (elements vs)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
v โˆˆ elements vs
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
(`(weight v) + sum_weights_list (set_remove v (elements vs)))%R = (`(weight v) + sum_weights (vs โˆ– {[v]}))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

NoDup (elements vs)
by apply NoDup_elements.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

v โˆˆ elements vs
by apply elem_of_elements.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

(`(weight v) + sum_weights_list (set_remove v (elements vs)))%R = (`(weight v) + sum_weights (vs โˆ– {[v]}))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

NoDup (set_remove v (elements vs))
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
NoDup (elements (vs โˆ– {[v]}))
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
set_remove v (elements vs) โІ elements (vs โˆ– {[v]})
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
NoDup (elements (vs โˆ– {[v]}))
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
NoDup (set_remove v (elements vs))
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
elements (vs โˆ– {[v]}) โІ set_remove v (elements vs)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

NoDup (set_remove v (elements vs))
by apply set_remove_nodup, NoDup_elements.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

NoDup (elements (vs โˆ– {[v]}))
by apply NoDup_elements.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

set_remove v (elements vs) โІ elements (vs โˆ– {[v]})
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
x: V
Hx: x โˆˆ set_remove v (elements vs)

x โˆˆ elements (vs โˆ– {[v]})
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
x: V
Hx: x โˆˆ set_remove v (elements vs)

x โˆˆ vs โˆ– {[v]}
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
x: V
Hx: x โˆˆ elements vs โˆง x โ‰  v

x โˆˆ vs โˆ– {[v]}
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
x: V
Hx: x โˆˆ vs โˆง x โ‰  v

x โˆˆ vs โˆ– {[v]}
by rewrite elem_of_difference, elem_of_singleton.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

NoDup (elements (vs โˆ– {[v]}))
by apply NoDup_elements.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

NoDup (set_remove v (elements vs))
by apply set_remove_nodup, NoDup_elements.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs

elements (vs โˆ– {[v]}) โІ set_remove v (elements vs)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
x: V
Hx: x โˆˆ elements (vs โˆ– {[v]})

x โˆˆ set_remove v (elements vs)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
x: V
Hx: x โˆˆ vs โˆง x โ‰  v

x โˆˆ set_remove v (elements vs)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
v: V
vs: Cv
Hv: v โˆˆ vs
x: V
Hx: x โˆˆ vs โˆง x โ‰  v

x โˆˆ elements vs โˆง x โ‰  v
by rewrite elem_of_elements. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ vs vs' : list V, sum_weights_list (vs ++ vs') = (sum_weights_list vs + sum_weights_list vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ vs vs' : list V, sum_weights_list (vs ++ vs') = (sum_weights_list vs + sum_weights_list vs')%R
by induction vs; intros; simpl; [| rewrite IHvs]; lra. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

Proper (Permutation ==> eq) sum_weights_list
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

Proper (Permutation ==> eq) sum_weights_list
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l1, l2: list V
Hl: l1 โ‰กโ‚š l2

sum_weights_list l1 = sum_weights_list l2
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l1, l2: list V
Hl: l1 โ‰กโ‚š l2

PreOrder eq
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l1, l2: list V
Hl: l1 โ‰กโ‚š l2
โˆ€ x : V, Proper (eq ==> eq) (ฮป r : R, (`(weight x) + r)%R)
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l1, l2: list V
Hl: l1 โ‰กโ‚š l2
โˆ€ (a1 a2 : V) (b : R), (`(weight a1) + (`(weight a2) + b))%R = (`(weight a2) + (`(weight a1) + b))%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l1, l2: list V
Hl: l1 โ‰กโ‚š l2

PreOrder eq
by typeclasses eauto.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l1, l2: list V
Hl: l1 โ‰กโ‚š l2

โˆ€ x : V, Proper (eq ==> eq) (ฮป r : R, (`(weight x) + r)%R)
by congruence.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
l1, l2: list V
Hl: l1 โ‰กโ‚š l2

โˆ€ (a1 a2 : V) (b : R), (`(weight a1) + (`(weight a2) + b))%R = (`(weight a2) + (`(weight a1) + b))%R
by intros; lra. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ vs vs' : Cv, vs ## vs' โ†’ sum_weights (vs โˆช vs') = (sum_weights vs + sum_weights vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv

โˆ€ vs vs' : Cv, vs ## vs' โ†’ sum_weights (vs โˆช vs') = (sum_weights vs + sum_weights vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hdisj: vs ## vs'

sum_weights (vs โˆช vs') = (sum_weights vs + sum_weights vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hdisj: sum_weights_list (elements (vs โˆช vs')) = sum_weights_list (elements vs ++ elements vs')

sum_weights (vs โˆช vs') = (sum_weights vs + sum_weights vs')%R
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs, vs': Cv
Hdisj: sum_weights_list (elements (vs โˆช vs')) = sum_weights_list (elements vs ++ elements vs')

sum_weights_list (elements vs ++ elements vs') = (sum_weights vs + sum_weights vs')%R
apply sum_weights_app_list. Qed.
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs: Cv

sum_weights (vs โˆช โˆ…) = sum_weights vs
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs: Cv

sum_weights (vs โˆช โˆ…) = sum_weights vs
V: Type
H: Measurable V
Cv: Type
H0: ElemOf V Cv
H1: Empty Cv
H2: Singleton V Cv
H3: Union Cv
H4: Intersection Cv
H5: Difference Cv
H6: Elements V Cv
EqDecision0: EqDecision V
H7: FinSet V Cv
vs: Cv

(sum_weights vs + sum_weights โˆ…)%R = sum_weights vs
by rewrite (sum_weights_empty โˆ…); [lra |]. Qed. End sec_measurable_props.