Skip to content

Commit eba6c90

Browse files
affeldt-aistt6s
andauthored
measurable types are not pointed by default any more (#1949)
* measurable types are not pointed by default any more --------- Co-authored-by: Takafumi Saikawa <tscompor@gmail.com>
1 parent 046735a commit eba6c90

12 files changed

Lines changed: 128 additions & 66 deletions

File tree

CHANGELOG_UNRELEASED.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@
7878

7979
- in `measure_extension.v`:
8080
+ definition `caratheodory_measure`
81+
- in `measurable_structure.v`:
82+
+ structure `PMeasurable`, notation `pmeasurableType`
8183

8284
### Changed
8385

@@ -163,6 +165,29 @@
163165
- in `measurable_structure.v`:
164166
+ lemma `sigma_algebra_measurable` (not specialized to `setT` anymore)
165167

168+
- in `measurable_function.v`:
169+
+ lemma `preimage_set_system_measurable_fun`
170+
171+
- in `measurable_structure.v`
172+
+ structure `SemiRingOfSets`, mixin `isSigmaRing`, factories `isRingOfSets`,
173+
`isRingOfSets_setY`, `isAlgebraOfSets`, `isAlgebraOfSets_setD`, `isMeasurable`
174+
are not required to be pointed anymore
175+
+ lemmas `measurable_g_measurableTypeE`, `g_sigma_algebra_preimageType`,
176+
`g_sigma_algebra_preimage`, `g_sigma_preimageE`, `g_sigma_preimageE`,
177+
`g_sigma_algebra_rectangle` are generalized from `pointedType` to `choiceType`
178+
(the list might not be exhaustive)
179+
180+
- in `ereal.v`:
181+
+ lemma `funID` generalized from `pointedType` to `Type`
182+
183+
- in `numfun.v`:
184+
+ lemma `indic_restrict` generalized from `pointedType` to `Type`
185+
+ factory `FiniteDecomp` generalized from `pointedType`/`nzRingType` to
186+
`Type/pzRingType`
187+
188+
- in `simple_functions.v`:
189+
+ lemmas `fctD`, `fctN`, `fctM`, `fctZ`
190+
166191
### Deprecated
167192

168193
### Removed

theories/ereal.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ End DualAddTheory.
353353

354354
HB.instance Definition _ (R : numDomainType) := isPointed.Build (\bar R) 0%E.
355355

356-
Lemma funID {aT : pointedType} (D : set aT) {R : numDomainType}
356+
Lemma funID {aT : Type} (D : set aT) {R : numDomainType}
357357
(f : aT -> \bar R) : f = (f \_ (~` D)) \+ (f \_ D).
358358
Proof.
359359
by apply/funext => x; rewrite !patchE in_setC; case: ifPn => [xD|/negPn ->];

theories/kernel.v

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,10 @@ Lemma measure_fam_uubP : measure_fam_uub <->
195195
exists r : {posnum R}, forall x, k x [set: Y] < r%:num%:E.
196196
Proof.
197197
split => [|] [r kr]; last by exists r%:num.
198-
suff r_gt0 : (0 < r)%R by exists (PosNum r_gt0).
199-
by rewrite -lte_fin; exact: le_lt_trans (kr point).
198+
have [[point _]|/forallNP empty] := pselect (exists r : X, True).
199+
suff r_gt0 : (0 < r)%R by exists (PosNum r_gt0).
200+
rewrite -lte_fin; exact: le_lt_trans (kr point).
201+
by exists (PosNum ltr01) => x; have := empty x.
200202
Qed.
201203

202204
End measure_fam_uub.
@@ -925,7 +927,7 @@ HB.instance Definition _ (P : probability Y R):=
925927
End knormalize.
926928

927929
Lemma measurable_fun_mnormalize d d' (X : measurableType d)
928-
(Y : measurableType d') (R : realType) (k : R.-ker X ~> Y) :
930+
(Y : pmeasurableType d') (R : realType) (k : R.-ker X ~> Y) :
929931
measurable_fun [set: X] (fun x => mnormalize (k x) point : pprobability Y R).
930932
Proof.
931933
apply: (measurability (@pset _ _ _ : set (set (pprobability Y R)))) => //.
@@ -1123,9 +1125,11 @@ HB.instance Definition _ n := @isMeasurableFun.Build _ _ _ _ _ (mk_2 n).
11231125

11241126
Let fk_2 n : finite_set (range (k_2 n)).
11251127
Proof.
1126-
have := fimfunP (k_ n).
1127-
suff : range (k_ n) = range (k_2 n) by move=> <-.
1128-
by apply/seteqP; split => r [y ?] <-; [exists (point, y)|exists y.2].
1128+
have [[point _]|/forallNP empty] := pselect (exists point : X, True).
1129+
have := fimfunP (k_ n).
1130+
suff : range (k_ n) = range (k_2 n) by move=> <-.
1131+
by apply/seteqP; split => r [y ?] <-; [exists (point, y)|exists y.2].
1132+
by rewrite (_ : range _ = set0)// -subset0 => r [[x]]; have := empty x.
11291133
Qed.
11301134

11311135
HB.instance Definition _ n := @FiniteImage.Build _ _ _ (fk_2 n).

theories/lebesgue_integral_theory/simple_functions.v

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ From mathcomp Require Import lebesgue_measure numfun realfun measurable_realfun.
2929
(* Detailed contents: *)
3030
(* ```` *)
3131
(* {sfun T >-> R} == type of simple functions *)
32+
(* They form a (potentially zero) ring. *)
3233
(* {nnsfun T >-> R} == type of non-negative simple functions *)
3334
(* indic_sfun mD := mindic _ mD *)
3435
(* cst_sfun r == constant simple function *)
@@ -149,13 +150,13 @@ Lemma cst_sfunE x : @cst_sfun x =1 cst x. Proof. by []. Qed.
149150
End sfun.
150151

151152
(* a better way to refactor function stuffs *)
152-
Lemma fctD (T : pointedType) (K : pzRingType) (f g : T -> K) : f + g = f \+ g.
153+
Lemma fctD (T : Type) (K : pzRingType) (f g : T -> K) : f + g = f \+ g.
153154
Proof. by []. Qed.
154-
Lemma fctN (T : pointedType) (K : pzRingType) (f : T -> K) : - f = \- f.
155+
Lemma fctN (T : Type) (K : pzRingType) (f : T -> K) : - f = \- f.
155156
Proof. by []. Qed.
156-
Lemma fctM (T : pointedType) (K : pzRingType) (f g : T -> K) : f * g = f \* g.
157+
Lemma fctM (T : Type) (K : pzRingType) (f g : T -> K) : f * g = f \* g.
157158
Proof. by []. Qed.
158-
Lemma fctZ (T : pointedType) (K : pzRingType) (L : lmodType K) k (f : T -> L) :
159+
Lemma fctZ (T : Type) (K : pzRingType) (L : lmodType K) k (f : T -> L) :
159160
k *: f = k \*: f.
160161
Proof. by []. Qed.
161162
Arguments cst _ _ _ _ /.
@@ -172,7 +173,7 @@ Qed.
172173

173174
HB.instance Definition _ := GRing.isSubringClosed.Build _ sfun
174175
sfun_subring_closed.
175-
HB.instance Definition _ := [SubChoice_isSubComNzRing of {sfun aT >-> rT} by <:].
176+
HB.instance Definition _ := [SubChoice_isSubComPzRing of {sfun aT >-> rT} by <:].
176177

177178
Implicit Types (f g : {sfun aT >-> rT}).
178179

theories/measurable_realfun.v

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,12 @@ HB.instance Definition _ :=
10711071

10721072
End mfun_realType.
10731073

1074+
(* NB: should appear in MathComp 2.6.0 (PR #1586) *)
1075+
Notation "[ 'SubChoice_isSubComPzRing' 'of' U 'by' <: ]" :=
1076+
(GRing.SubChoice_isSubComPzRing.Build _ _ U (subringClosedP _))
1077+
(format "[ 'SubChoice_isSubComPzRing' 'of' U 'by' <: ]")
1078+
: form_scope.
1079+
10741080
Section ring.
10751081
Context d (aT : measurableType d) (rT : realType).
10761082

@@ -1083,7 +1089,8 @@ split=> [|f g|f g]; rewrite !inE/=.
10831089
Qed.
10841090
HB.instance Definition _ := GRing.isSubringClosed.Build _
10851091
(@mfun d default_measure_display aT rT) mfun_subring_closed.
1086-
HB.instance Definition _ := [SubChoice_isSubComNzRing of {mfun aT >-> rT} by <:].
1092+
1093+
HB.instance Definition _ := [SubChoice_isSubComPzRing of {mfun aT >-> rT} by <:].
10871094

10881095
Implicit Types (f g : {mfun aT >-> rT}).
10891096

theories/measure_theory/measurable_function.v

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -210,19 +210,11 @@ HB.instance Definition _ x := isMeasurableFun.Build d _ aT rT (cst x)
210210

211211
End mfun.
212212

213-
Section measurable_fun_measurableType.
214-
Context d1 d2 d3 (T1 : measurableType d1) (T2 : measurableType d2)
215-
(T3 : measurableType d3).
213+
Section measurable_fun_restrict.
214+
Context d1 d2 d3 (T1 : measurableType d1) (T2 : pmeasurableType d2)
215+
(T3 : measurableType d3).
216216
Implicit Type D E : set T1.
217217

218-
Lemma measurableT_comp (f : T2 -> T3) E (g : T1 -> T2) :
219-
measurable_fun [set: T2] f -> measurable_fun E g -> measurable_fun E (f \o g).
220-
Proof. exact: measurable_comp. Qed.
221-
222-
Lemma measurable_funTS D (f : T1 -> T2) :
223-
measurable_fun [set: T1] f -> measurable_fun D f.
224-
Proof. exact: measurable_funS. Qed.
225-
226218
Lemma measurable_restrict D E (f : T1 -> T2) : measurable D -> measurable E ->
227219
measurable_fun (E `&` D) f <-> measurable_fun E (f \_ D).
228220
Proof.
@@ -244,6 +236,21 @@ Proof.
244236
by move=> mD; have := measurable_restrict f mD measurableT; rewrite setTI.
245237
Qed.
246238

239+
End measurable_fun_restrict.
240+
241+
Section measurable_fun_measurableType.
242+
Context d1 d2 d3 (T1 : measurableType d1) (T2 : measurableType d2)
243+
(T3 : measurableType d3).
244+
Implicit Type D E : set T1.
245+
246+
Lemma measurableT_comp (f : T2 -> T3) E (g : T1 -> T2) :
247+
measurable_fun [set: T2] f -> measurable_fun E g -> measurable_fun E (f \o g).
248+
Proof. exact: measurable_comp. Qed.
249+
250+
Lemma measurable_funTS D (f : T1 -> T2) :
251+
measurable_fun [set: T1] f -> measurable_fun D f.
252+
Proof. exact: measurable_funS. Qed.
253+
247254
Lemma measurable_fun_ifT (g h : T1 -> T2) (f : T1 -> bool)
248255
(mf : measurable_fun [set: T1] f) :
249256
measurable_fun [set: T1] g -> measurable_fun [set: T1] h ->
@@ -360,7 +367,7 @@ Arguments g_sigma_algebra_preimage_comp {d T d1 T1 d2 T2 X} f.
360367
Section measurability.
361368

362369
(* f is measurable on the sigma-algebra generated by itself *)
363-
Lemma preimage_set_system_measurable_fun d (aT : pointedType)
370+
Lemma preimage_set_system_measurable_fun d (aT : choiceType)
364371
(rT : measurableType d) (D : set aT) (f : aT -> rT) :
365372
measurable_fun
366373
(D : set (g_sigma_algebraType (preimage_set_system D f measurable))) f.

theories/measure_theory/measurable_structure.v

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ From mathcomp Require Import ereal topology normedtype sequences.
3535
(* The HB class is AlgebraOfsets. *)
3636
(* measurableType == the type of sigma-algebras *)
3737
(* The HB class is Measurable. *)
38+
(* pmeasurableType == the type of pointed sigma-algebras *)
39+
(* The HB class is PMeasurable. *)
3840
(* ``` *)
3941
(* *)
4042
(* ## Instances of mathematical structures *)
@@ -856,7 +858,7 @@ HB.mixin Record isSemiRingOfSets (d : measure_display) T := {
856858

857859
#[short(type="semiRingOfSetsType")]
858860
HB.structure Definition SemiRingOfSets d :=
859-
{T of Pointed T & isSemiRingOfSets d T}.
861+
{T of Choice T & isSemiRingOfSets d T}.
860862

861863
Arguments measurable {d}%_measure_display_scope {s} _%_classical_set_scope.
862864

@@ -906,7 +908,7 @@ HB.end.
906908
HB.structure Definition SigmaRing d :=
907909
{T of SemiRingOfSets d T & hasMeasurableCountableUnion d T}.
908910

909-
HB.factory Record isSigmaRing (d : measure_display) T & Pointed T := {
911+
HB.factory Record isSigmaRing (d : measure_display) T & Choice T := {
910912
measurable : set (set T) ;
911913
measurable0 : measurable set0 ;
912914
measurableD : setD_closed measurable ;
@@ -934,7 +936,10 @@ HB.end.
934936
HB.structure Definition Measurable d :=
935937
{T of AlgebraOfSets d T & hasMeasurableCountableUnion d T }.
936938

937-
HB.factory Record isRingOfSets (d : measure_display) T & Pointed T := {
939+
#[short(type="pmeasurableType")]
940+
HB.structure Definition PMeasurable d := {T of Pointed T & Measurable d T}.
941+
942+
HB.factory Record isRingOfSets (d : measure_display) T & Choice T := {
938943
measurable : set (set T) ;
939944
measurable0 : measurable set0 ;
940945
measurableU : setU_closed measurable;
@@ -958,7 +963,7 @@ HB.instance Definition _ := SemiRingOfSets_isRingOfSets.Build d T measurableU.
958963
HB.end.
959964

960965
HB.factory Record isRingOfSets_setY (d : measure_display) T
961-
& Pointed T := {
966+
& Choice T := {
962967
measurable : set (set T) ;
963968
measurable_nonempty : measurable !=set0 ;
964969
measurable_setY : setY_closed measurable ;
@@ -989,7 +994,7 @@ HB.instance Definition _ := isRingOfSets.Build d T m0 mU mD.
989994

990995
HB.end.
991996

992-
HB.factory Record isAlgebraOfSets (d : measure_display) T & Pointed T := {
997+
HB.factory Record isAlgebraOfSets (d : measure_display) T & Choice T := {
993998
measurable : set (set T) ;
994999
measurable0 : measurable set0 ;
9951000
measurableU : setU_closed measurable;
@@ -1014,7 +1019,7 @@ HB.instance Definition _ := RingOfSets_isAlgebraOfSets.Build d T measurableT.
10141019

10151020
HB.end.
10161021

1017-
HB.factory Record isAlgebraOfSets_setD (d : measure_display) T & Pointed T := {
1022+
HB.factory Record isAlgebraOfSets_setD (d : measure_display) T & Choice T := {
10181023
measurable : set (set T) ;
10191024
measurableT : measurable [set: T] ;
10201025
measurableD : setD_closed measurable
@@ -1038,7 +1043,7 @@ HB.instance Definition _ := RingOfSets_isAlgebraOfSets.Build d T measurableT.
10381043

10391044
HB.end.
10401045

1041-
HB.factory Record isMeasurable (d : measure_display) T & Pointed T := {
1046+
HB.factory Record isMeasurable (d : measure_display) T & Choice T := {
10421047
measurable : set (set T) ;
10431048
measurable0 : measurable set0 ;
10441049
measurableC : forall A, measurable A -> measurable (~` A) ;
@@ -1282,12 +1287,12 @@ Proof. exact. Qed.
12821287
Definition g_sigma_algebraType {T} (G : set (set T)) := T.
12831288

12841289
Section g_salgebra_instance.
1285-
Variables (T : pointedType) (G : set (set T)).
1290+
Variables (T : choiceType) (G : set (set T)).
12861291

12871292
Lemma sigma_algebraC (A : set T) : <<s G >> A -> <<s G >> (~` A).
12881293
Proof. by move=> sGA; rewrite -setTD; exact: sigma_algebraCD. Qed.
12891294

1290-
HB.instance Definition _ := Pointed.on (g_sigma_algebraType G).
1295+
HB.instance Definition _ := Choice.on (g_sigma_algebraType G).
12911296
HB.instance Definition _ := @isMeasurable.Build (sigma_display G)
12921297
(g_sigma_algebraType G)
12931298
<<s G >> (@sigma_algebra0 _ setT G) (@sigma_algebraC)
@@ -1299,7 +1304,7 @@ Notation "G .-sigma" := (sigma_display G) : measure_display_scope.
12991304
Notation "G .-sigma.-measurable" :=
13001305
(measurable : set (set (g_sigma_algebraType G))) : classical_set_scope.
13011306

1302-
Lemma measurable_g_measurableTypeE (T : pointedType) (G : set (set T)) :
1307+
Lemma measurable_g_measurableTypeE (T : choiceType) (G : set (set T)) :
13031308
sigma_algebra setT G -> G.-sigma.-measurable = G.
13041309
Proof. exact: sigma_algebra_id. Qed.
13051310

@@ -1326,15 +1331,15 @@ Qed.
13261331
Definition preimage_display {T T'} : (T -> T') -> measure_display.
13271332
Proof. exact. Qed.
13281333

1329-
Definition g_sigma_algebra_preimageType d' (T : pointedType)
1334+
Definition g_sigma_algebra_preimageType d' (T : choiceType)
13301335
(T' : measurableType d') (f : T -> T') : Type := T.
13311336

1332-
Definition g_sigma_algebra_preimage d' (T : pointedType)
1337+
Definition g_sigma_algebra_preimage d' (T : choiceType)
13331338
(T' : measurableType d') (f : T -> T') :=
13341339
preimage_set_system setT f (@measurable _ T').
13351340

13361341
Section preimage_generated_sigma_algebra.
1337-
Context {d'} (T : pointedType) (T' : measurableType d').
1342+
Context {d'} (T : choiceType) (T' : measurableType d').
13381343
Variable f : T -> T'.
13391344

13401345
Let preimage_set0 : g_sigma_algebra_preimage f set0.
@@ -1363,7 +1368,7 @@ rewrite setTI /g preimage_bigcup; apply: eq_bigcupr => k _.
13631368
by case: (mg k) => _; rewrite setTI.
13641369
Qed.
13651370

1366-
HB.instance Definition _ := Pointed.on (g_sigma_algebra_preimageType f).
1371+
HB.instance Definition _ := Choice.on (g_sigma_algebra_preimageType f).
13671372

13681373
HB.instance Definition _ := @isMeasurable.Build (preimage_display f)
13691374
(g_sigma_algebra_preimageType f) (g_sigma_algebra_preimage f)
@@ -1393,7 +1398,7 @@ move=> [G0 GC GU]; split; rewrite /image_set_system.
13931398
- by move=> F /= mF; rewrite preimage_bigcup setI_bigcupr; exact: GU.
13941399
Qed.
13951400

1396-
Lemma g_sigma_preimageE aT (rT : pointedType) (D : set aT)
1401+
Lemma g_sigma_preimageE aT (rT : choiceType) (D : set aT)
13971402
(f : aT -> rT) (G' : set (set rT)) :
13981403
<<s D, preimage_set_system D f G' >> =
13991404
preimage_set_system D f (G'.-sigma.-measurable).
@@ -1539,7 +1544,7 @@ move=> sA sB; split=> [AB|AB]; last by rewrite AB.
15391544
by apply/seteqP; split; exact/AB.
15401545
Qed.
15411546

1542-
Lemma g_sigma_algebra_cross {T1 T2 : pointedType} (X : set_system T1)
1547+
Lemma g_sigma_algebra_cross {T1 T2 : choiceType} (X : set_system T1)
15431548
(Y : set_system T2) :
15441549
<<s X `x` <<s Y >> >> = <<s X `x` Y >>.
15451550
Proof.
@@ -1562,7 +1567,7 @@ Notation preimage_classes := g_sigma_preimageU (only parsing).
15621567

15631568
Section product_lemma.
15641569
Context d1 d2 (T1 : semiRingOfSetsType d1) (T2 : semiRingOfSetsType d2).
1565-
Variables (T : pointedType) (f1 : T -> T1) (f2 : T -> T2).
1570+
Variables (T : choiceType) (f1 : T -> T1) (f2 : T -> T2).
15661571
Variables (T3 : Type) (g : T3 -> T).
15671572

15681573
Lemma g_sigma_preimageU_comp : g_sigma_preimageU (f1 \o g) (f2 \o g) =
@@ -1604,7 +1609,7 @@ Let prod_salgebra_bigcup (F : _^nat) :
16041609
g_sigma_preimageU f1 f2 (\bigcup_i (F i)).
16051610
Proof. exact: sigma_algebra_bigcup. Qed.
16061611

1607-
HB.instance Definition _ := Pointed.on (T1 * T2)%type.
1612+
HB.instance Definition _ := Choice.on (T1 * T2)%type.
16081613
HB.instance Definition prod_salgebra_mixin :=
16091614
@isMeasurable.Build (measure_prod_display (d1, d2))
16101615
(T1 * T2)%type (g_sigma_preimageU f1 f2)
@@ -1626,7 +1631,7 @@ rewrite -(setIT A) -(setTI B) setXI setXT setTX; apply: measurableI.
16261631
- by apply: sub_sigma_algebra; right; exists B => //; rewrite setTI.
16271632
Qed.
16281633

1629-
Lemma g_sigma_algebra_rectangle {T1 T2 : pointedType} (X : set_system T1)
1634+
Lemma g_sigma_algebra_rectangle {T1 T2 : choiceType} (X : set_system T1)
16301635
(Y : set_system T2) : X [set: T1] -> Y [set: T2] ->
16311636
<<s rectangle X Y >> = <<s X `x` Y >>.
16321637
Proof.
@@ -1657,7 +1662,7 @@ End product_salgebra_algebraOfSetsType.
16571662
Notation measurable_prod_measurableType := prod_measurable_rectangle (only parsing).
16581663

16591664
Section product_salgebra_g_measurableTypeR.
1660-
Context d1 (T1 : algebraOfSetsType d1) (T2 : pointedType) (C2 : set (set T2)).
1665+
Context d1 (T1 : algebraOfSetsType d1) (T2 : choiceType) (C2 : set (set T2)).
16611666
Hypothesis setTC2 : setT `<=` C2.
16621667

16631668
#[deprecated(since="mathcomp-analysis 1.17.0")]
@@ -1674,7 +1679,7 @@ Qed.
16741679
End product_salgebra_g_measurableTypeR.
16751680

16761681
Section product_salgebra_g_measurableType.
1677-
Variables (T1 T2 : pointedType) (C1 : set (set T1)) (C2 : set (set T2)).
1682+
Variables (T1 T2 : choiceType) (C1 : set (set T1)) (C2 : set (set T2)).
16781683
Hypotheses (setTC1 : setT `<=` C1) (setTC2 : setT `<=` C2).
16791684

16801685
#[deprecated(since="mathcomp-analysis 1.17.0")]
@@ -1695,7 +1700,7 @@ Definition g_sigma_preimage d (rT : semiRingOfSetsType d) (aT : Type)
16951700
<<s \big[setU/set0]_(i < n) preimage_set_system setT (f i) measurable >>.
16961701

16971702
Lemma g_sigma_preimage_comp d1 {T1 : semiRingOfSetsType d1} n
1698-
{T : pointedType} (f : 'I_n -> T -> T1) {T2 : Type} (g : T2 -> T) :
1703+
{T : choiceType} (f : 'I_n -> T -> T1) {T2 : Type} (g : T2 -> T) :
16991704
g_sigma_preimage (fun i => f i \o g) =
17001705
preimage_set_system [set: T2] g (g_sigma_preimage f).
17011706
Proof.

0 commit comments

Comments
 (0)