Skip to content

Commit 2cfbef6

Browse files
committed
czero, cscale
1 parent 5b0020f commit 2cfbef6

File tree

1 file changed

+101
-17
lines changed

1 file changed

+101
-17
lines changed

theories/charge.v

Lines changed: 101 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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 => /=.
8789
by rewrite bigcup_mkord -big_distrr/= => -[].
8890
Qed.
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

98111
HB.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)]
103116
HB.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

107120
Notation "{ '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

113126
HB.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

249262
End 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+
251334
Section positive_negative_set.
252335
Context d (R : realType) (T : measurableType d).
253336
Implicit 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.
375458
move=> /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)//.
377461
by rewrite (le_trans _ (ltW mmuB)).
378462
Qed.
379463

0 commit comments

Comments
 (0)