@@ -14,16 +14,18 @@ Require Import lebesgue_measure lebesgue_integral.
1414(* decomposition theorem. *)
1515(* *)
1616(* charge (a.k.a. signed measure): *)
17- (* isCharge0 == mixin for measure functions with fin_num values *)
18- (* isAdditiveCharge == mixin for additive charges *)
17+ (* isCharge0 == mixin for measure functions with fin_num *)
18+ (* values *)
19+ (* isAdditiveCharge == mixin for additive charges *)
1920(* {additive_charge set T -> \bar R} == additive charge over T, a semiring *)
2021(* of sets *)
21- (* isCharge == mixin for charges *)
22+ (* isCharge == mixin for charges *)
2223(* {charge set T -> \bar R} == charge over T, a semiring of sets *)
23- (* crestr D mu == restriction of the charge mu to the domain D *)
24- (* *)
25- (* positive_set nu P == P is a positive set *)
26- (* negative_set nu N == N is a negative set *)
24+ (* crestr D mu == restriction of the charge mu to the domain D *)
25+ (* czero == zero charge *)
26+ (* cscale == scaled charge *)
27+ (* positive_set nu P == P is a positive set *)
28+ (* negative_set nu N == N is a negative set *)
2729(* *)
2830(***************************************************************************** *)
2931
@@ -87,22 +89,33 @@ move=> x [Sx [Fnx UFx]]; split=> //; apply: contra_not UFx => /=.
8789by rewrite bigcup_mkord -big_distrr/= => -[].
8890Qed .
8991
90- HB.mixin Record isCharge0 d (R : numFieldType)
91- (T : semiRingOfSetsType d) (mu : set T -> \bar R) := {
92- isfinite : forall U, measurable U -> mu U \is a fin_num}.
92+ HB.mixin Record isCharge0 d (T : semiRingOfSetsType d) (R : numFieldType)
93+ (mu : set T -> \bar R) := {
94+ isfinite : forall U, measurable U -> mu U \is a fin_num}.
95+
96+ HB.structure Definition Charge0 d (T : semiRingOfSetsType d) (R : numFieldType) := {
97+ mu of @isCharge0 d T R mu }.
98+ Arguments isfinite {d T R} s.
99+
100+ HB.structure Definition FiniteMeasure d (T : semiRingOfSetsType d) (R : realFieldType) :=
101+ {mu of isCharge0 d T R mu & SigmaFiniteMeasure d mu}.
102+
103+ Notation "{ 'finite_measure' 'set' T '->' '\bar' R }" := (FiniteMeasure.type T R)
104+ (at level 36, T, R at next level,
105+ format "{ 'finite_measure' 'set' T '->' '\bar' R }") : ring_scope.
93106
94- HB.structure Definition Charge0 d
95- (R : numFieldType) (T : semiRingOfSetsType d) := {
96- mu of isCharge0 d R T mu } .
107+ Lemma finite_measureT d (T : measurableType d) (R : realFieldType) (mu : {finite_measure set T -> \bar R}) :
108+ finite_measure mu.
109+ Proof . by rewrite /finite_measure fin_num_ltey// isfinite. Qed .
97110
98111HB.mixin Record isAdditiveCharge d (R : numFieldType)
99- (T : semiRingOfSetsType d) mu of isCharge0 d R T mu := {
112+ (T : semiRingOfSetsType d) ( mu : set T -> \bar R) := {
100113 charge_semi_additive : semi_additive mu }.
101114
102115#[short(type=additive_charge)]
103116HB.structure Definition AdditiveCharge d (R : numFieldType)
104117 (T : semiRingOfSetsType d) :=
105- { mu of isAdditiveCharge d R T mu & Charge0 d mu }.
118+ { mu of isAdditiveCharge d R T mu & @isCharge0 d T R mu }.
106119
107120Notation "{ 'additive_charge' 'set' T '->' '\bar' R }" :=
108121 (additive_charge R T) (at level 36, T, R at next level,
@@ -111,7 +124,7 @@ Notation "{ 'additive_charge' 'set' T '->' '\bar' R }" :=
111124#[export] Hint Resolve charge_semi_additive : core.
112125
113126HB.mixin Record isCharge d (R : numFieldType) (T : semiRingOfSetsType d)
114- mu of isAdditiveCharge d R T mu & isCharge0 d R T mu := {
127+ ( mu : set T -> \bar R) := {
115128 charge_semi_sigma_additive : semi_sigma_additive mu }.
116129
117130#[short(type=charge)]
@@ -248,6 +261,76 @@ HB.instance Definition _ :=
248261
249262End charge_restriction.
250263
264+ Section charge_zero.
265+ Context d (T : measurableType d) (R : realFieldType).
266+ Local Open Scope ereal_scope.
267+
268+ Definition czero (A : set T) : \bar R := 0.
269+
270+ Let czero0 : czero set0 = 0. Proof . by []. Qed .
271+
272+ Let czero_isfinite B :measurable B -> czero B \is a fin_num. Proof . by []. Qed .
273+
274+ HB.instance Definition _ := isCharge0.Build _ _ _ czero czero_isfinite.
275+
276+ Let czero_semi_additive : semi_additive czero.
277+ Proof . by move=> F n mF tF mUF; rewrite /czero big1. Qed .
278+
279+ HB.instance Definition _ :=
280+ isAdditiveCharge.Build _ _ _ czero czero_semi_additive.
281+
282+ Let czero_sigma_additive : semi_sigma_additive czero.
283+ Proof .
284+ move=> F mF tF mUF; rewrite [X in X --> _](_ : _ = cst 0); first exact: cvg_cst.
285+ by apply/funext => n; rewrite big1.
286+ Qed .
287+
288+ HB.instance Definition _ := isCharge.Build _ _ _ czero czero_sigma_additive.
289+
290+ End charge_zero.
291+ Arguments czero {d T R}.
292+
293+ Section charge_scale.
294+ Local Open Scope ereal_scope.
295+ Context d (T : measurableType d) (R : realType). (* R : realFieldType? *)
296+ Variables (r : R) (m : {charge set T -> \bar R}).
297+
298+ Definition cscale (A : set T) : \bar R := r%:E * m A.
299+
300+ Let cscale0 : cscale set0 = 0. Proof . by rewrite /cscale charge0 mule0. Qed .
301+
302+ Let cscale_isfinite U : measurable U -> cscale U \is a fin_num.
303+ Proof . by move=> mU; apply: fin_numM => //; exact: isfinite. Qed .
304+
305+ HB.instance Definition _ := isCharge0.Build _ _ _ cscale cscale_isfinite.
306+
307+ Let cscale_semi_additive : semi_additive cscale.
308+ Proof .
309+ move=> F n mF tF mU; rewrite /cscale charge_semi_additive//.
310+ rewrite fin_num_sume_distrr// => i j _ _.
311+ by rewrite fin_num_adde_defl// isfinite.
312+ Qed .
313+
314+ HB.instance Definition _ :=
315+ isAdditiveCharge.Build _ _ _ cscale cscale_semi_additive.
316+
317+ Let cscale_sigma_additive : semi_sigma_additive cscale.
318+ Proof .
319+ move=> F mF tF mUF; rewrite /cscale; rewrite [X in X --> _](_ : _ =
320+ (fun n => r%:E * \sum_(0 <= i < n) m (F i))); last first.
321+ apply/funext => k; rewrite fin_num_sume_distrr// => i j _ _.
322+ by rewrite fin_num_adde_defl// isfinite.
323+ rewrite /mscale; have [->|r0] := eqVneq r 0%R.
324+ rewrite mul0e [X in X --> _](_ : _ = (fun=> 0)); first exact: cvg_cst.
325+ by under eq_fun do rewrite mul0e.
326+ by apply: cvgeMl => //; apply: charge_semi_sigma_additive.
327+ Qed .
328+
329+ HB.instance Definition _ := isCharge.Build _ _ _ cscale
330+ cscale_sigma_additive.
331+
332+ End charge_scale.
333+
251334Section positive_negative_set.
252335Context d (R : realType) (T : measurableType d).
253336Implicit Types nu : set T -> \bar R.
@@ -373,7 +456,8 @@ have : m < dd A.
373456 rewrite ltr_pdivr_mulr// ltr_pmulr// ?ltr1n// fine_gt0// d_gt0/=.
374457 by rewrite lt_neqAle dn1oo/= leey.
375458move=> /ereal_sup_gt/cid2[x/= /cid[B [-> mB BDA mmuB]]].
376- exists B; split => //; first by rewrite (le_trans _ (ltW mmuB))// ltW.
459+ exists B; split => //.
460+ by rewrite ltW// (lt_trans _ mmuB)//.
377461by rewrite (le_trans _ (ltW mmuB)).
378462Qed .
379463
0 commit comments