From 6526d2b814dcd1f9ea551b7a4f68ea9535bd94de Mon Sep 17 00:00:00 2001 From: adjevahi Date: Wed, 8 Jul 2026 15:37:24 +0200 Subject: [PATCH 01/38] sigma-algebra for normed modules + sfun codomain sigma ring & module structure --- CHANGELOG_UNRELEASED.md | 430 ++++++++++++++++++ classical/filter.v | 2 +- theories/hoelder.v | 2 +- theories/kernel.v | 4 - theories/lebesgue_integral_theory/giry.v | 3 + .../lebesgue_integral_definition.v | 10 - .../lebesgue_integral_differentiation.v | 1 - .../lebesgue_integral_monotone_convergence.v | 3 - .../lebesgue_integral_nonneg.v | 7 - .../measurable_fun_approximation.v | 6 +- .../simple_functions.v | 180 ++++++-- .../probability_theory/normal_distribution.v | 1 + .../probability_theory/uniform_distribution.v | 1 - .../real_measure/lebesgue_stieltjes_measure.v | 120 +++-- 14 files changed, 650 insertions(+), 120 deletions(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index d7f0405803..f8d087d901 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -3,6 +3,271 @@ ## [Unreleased] ### Added +- in `borel_hierarchy.v`: + + definition `borel_type` + + lemmas `singleton_bigcap`, `measurable1` + +- in `simple_functions.v`: + + lemmas `sfun_op`, `sfun_submod_closed` + + `{sfun aT >-> borel_type V}` is an `lmodType` when `V` is a `normedModType` + +- in `simple_functions.v`: + + lemmas `mem_sfun_comp_pair`, `sfun_submod_closed` + + `{sfun aT >-> V}` is an `lmodType` when `V` is a `normedModType` + + definitions `indic_lmod` `mindic_lmod` `mindic_lmod_sfun` + + lemmas `indic_lmodE` `preimage_indic_mod` `measurable_indic_lmod` + +- in `set_interval.v`: + + lemmas `setU_itvob1`, `setU_1itvob` + +- in `realfun.v`: + + lemma `derivable_sqrt` +- in `classical_sets.v`: + + definition `rectangle` + + lemmas `rectangle_setX`, `setI_closed_rectangle` + + definitions `cross`, `cross12` + + lemmas `smallest_sub_sub`, `bigcap_closed_smallest`, `smallest_sub_iff` + + lemma `preimage_set_systemS` + + lemma `setD_bigcapr` + +- in `measurable_structure.v`: + + lemmas `g_sigma_algebra_cross`, `g_sigma_algebra_rectangle` + + lemma `sigma_algebra_sub` + +- in `measurable_function.v`: + + lemma `preimage_measurability` + +- in `pseudometric_normed_Zmodule.v`: + + lemma `itv_center_shift` + +- in `normed_module.v`: + + lemmas `closure_itvoo` +- in `unstable.v`: + + structures `SemiNorm`, `Norm` + + lemmas `normMn`, `normN`, `ler_norm_sum` + +- in `normed_module.v`: + + structure `NormedVector` + + notation `normedVectType` + + definition `max_space` + + lemmas `sup_closed_ball_compact`, `equivalence_norms`, + `linear_findim_continuous` + +- in `tvs.v`: + + lemmas `cvg_sum`, `sum_continuous` + +- in `classical_sets.v`: + + lemmas `setI_closed_setT`, `setI_closed_set0` + +- in `measurable_function.v`: + + lemma `g_sigma_algebra_preimage_comp` + +- in `measure_function.v`: + + lemma `g_sigma_algebra_finite_measure_unique` + +- new file `independence.v`: + + definition `independent_events` + + definition `mutual_independence` + + lemma `eq_mutual_independence` + + definition `independence2`, `independence2P` + + lemma `mutual_independence_fset` + + lemma `mutual_independence_finiteS` + + theorem `mutual_independence_finite_g_sigma` + + lemma `mutual_dependence_bigcup` + + definition `independent_RVs` + + lemma `independent_RVsD1` + + theorem `independent_generators` + + definition `independent_RVs2` + + lemmas `independent_RVs2_comp`, `independent_RVs2_funrposneg`, + `independent_RVs2_funrnegpos`, `independent_RVs2_funrnegneg`, + `independent_RVs2_funrpospos` + + definition `pairRV`, lemma `measurable_pairRV` + + lemmas `independent_RVs2_product_measure1` + + lemmas `independent_RVs2_setI_preimage`, + `independent_Lfun1_expectation_product_measure_lty` + + lemma `ge0_independent_expectationM` + + lemmas `independent_Lfun1_expectationM_lty`, `independent_Lfun1M`, + `independent_expectationM` + +- in `ereal.v`: + + lemma `ge0_addBefctE` + +- in `measure_extension.v`: + + definition `caratheodory_measure` +- in `measurable_structure.v`: + + structure `PMeasurable`, notation `pmeasurableType` + +- in `subspace_topology.v`: + + lemma `withinU_continuous_patch` +- in `matrix_normedtype.v`: + + lemma `continuous_mx` + +- in `derive.v`: + + instance `is_derive_mx` + + fact `dmx` + + lemma `diffmx` + + lemma `is_diff_mx` + + instance `is_diff_mx` +- in `realsum.v`: + + lemma `esum_psum` + + lemma `esum_sum` + +- in `constructive_ereal.v`: + + definition `esg` + + lemmas `numEesg`, `gte0_esg`, `lte0_esg`, `esg0` + +- in `esum.v`: + + lemmas `esum_eq0P`, `esumZ`, `exchange_esum` + + lemmas `le_esum`, `esumN` + + lemmas `summable_le_esum`, `summable_esum_funepos`, `summable_esumN`, + `summableZ`, `summable_esumZ` + + lemmas `esum_if_eq_op` + + lemmas `exchange_esum_ereal_sup` + +- in `ereal.v`: + + lemmas `exchange_ereal_sup`, `ge0_ereal_supZl`, `ge0_ereal_supZl_range` + +- in `sequences.v`: + + lemmas `ereal_supD`, `ereal_sup_sum` + +- in `reals.v`: + + lemmas `sup_ge0`, `has_sup_wpZl`, `gt0_has_supZl`, `has_sup_Mn`, `sup_Mn` +- in `mathcomp_extra.v`: + + lemmas `divDl_ge0`, `divDl_le1` + +- in `unstable.v`: + + lemmas `divD_onem` + +- in `filter.v`: + + mixin `isSubNbhs`, structure `SubNbhs`, notation `subNbhsType` + +- in `topology_structure.v`: + + structure `SubTopological`, notation `subTopologicalType` + +- in `tvs.v`: + + structure `SubConvexTvs`, notation `subConvexTvsType` + +- in `normed_module.v`: + + structure `SubNormedModule`, notation `subNormedModType` + + instance `ent_xsection_filter` + + light-weigth factory `subLmodule_isSubNormedmodule` + +- new file `hahn_banach_theorem.v`: + + module `LinearGraph` + * definitions `graph`, `linear_graph` + * lemmas `lingraph_00`, `lingraphZ`, `lingraphD` + + module `HahnBanachZorn` + * definitions `extend_graph`, `le_graph`, `functional_graph`, `le_extend_graph` + * record `zorn_type` + * definition `zphi` + * lemma `zorn_type_eq` + * definition `zornS` + * lemmas `zornS_ex`, `domain_extend`, `hahn_banach_witness` + + theorems `hahn_banach_extension`, `hahn_banach_extension_normed` +- in `normal_distribution.v`: + + lemma `normal_funN` + + lemma `normal_fun_sym` + + lemma `normal_fun0abs` + + lemma `normal_pdf_sym` + + lemma `normal_fun_center_new` + + lemma `normal_fun_shift` + + lemma `normal_pdf_uniq_ae` + + lemma `normal_prob_continuous` + + lemma `integral_normal_prob` + + lemma `measurable_normal_prob` + + lemma `emeasurable_bounded_integrable` + + lemmas `integrable_normal_probD1`, `normal_probD1`, `normal_probD2`, `normal_probD` + +- in `lebesgue_stieltjes_measure.v`: + + definition `lebesgue_display` + +- in `realsum.v`: + + lemma `esum_summableP` + +- in `esum.v`: + + lemma `fsetsTE` +- in `ftc.v`: + + lemma `ge0_integration_by_substitution_shift_itvy`, + `ge0_integration_by_substitution_shift_itvNy` +- in `derive.v`: + + lemmas `derivable_row_mx`, `derive_row_mx` + + instance `is_derive_row_mx` + +- in `matrix_normedtype.v` + + lemmas `norm_row_mx`, `norm_row_mx0r`, `norm_row_mx0l`, `cvg_row_mx` + +- in `unstable.v`: + + lemma `sub_row_mx` + +- in `derive.v`: + + lemmas `eqo_row_mx`, `drow_mx`, `diff_row_mx`, + `differentiable_row_mx` + + instance `is_diff_row_mx` + +- in `functions.v`: + + lemmas `zerofctE`, `onefctE` + +- in `functions.v`: + + lemmas `linfunP`, `linfun_eqP` + + instances of `SubLmodule` and `pointedType` on `{linear _->_ | _ }` + +- in `tvs.v`: + + structure `LinearContinuous` + + factory `isLinearContinuous` + + instance of `ChoiceType` on `{linear_continuous _ -> _ }` + + instance of `LinearContinuous` with the composition of two functions of type `LinearContinuous` + + instance of `LinearContinuous` with the sum of two functions of type `LinearContinuous` + + instance of `LinearContinuous` with the scalar multiplication of a function of type + `LinearContinuous` + + instance of `Continuous` on \-f when f is of type `LinearContinuous` + + instance of `SubModClosed` on `{linear_continuous _ -> _}` + + instance of `SubLModule` on `{linear_continuous _ -> _ }` + + instance of `LinearContinuous` on the null function + + notations `{linear_continuous _ -> _ | _ }` and `{linear_continuous _ -> _ }` + + definitions `lcfun`, `lcfun_key`, `lcfunP` + + lemmas `lcfun_eqP`, `null_fun_continuous`, `fun_cvgD`, + `fun_cvgN`, `fun_cvgZ`, `fun_cvgZr` + + lemmas `lcfun_continuous` and `lcfun_linear` + +- new files `signed_measure.v` and `radon_nikodym.v` + + with the contents of `charge.v` (deprecated) + +- in `esum.v`: + + lemma `ge0_esum` + + lemma `esum_ge` + +- in `functions.v`: + + lemma `preimageD1` + +- in `measure_function.v`: + + lemmas `cvg_measure_bigcap`, `cvg_measure_bigcup` + +- in `classical_sets.v`: + + lemma `bigcup_bigsetU` + +- in `measurable_structure.v`: + + lemmas `countable_bigcap_measurable`, `countable_bigcup_measurable` + +- in `lebesgue_stieltjes_measure.v`: + + module `MeasurableRocitv` + + definition `open_type` + + notations `.-open`, `.-open.-measurable` + + module `MeasurableOpen` + * definition `measurableTypeO` + + definition `borel_display` + * definition `measurableO` + * definition `measurableTypeR` + + definition `lebesgue_display` + * definition `measurableR` + + lemmas `measurable_set1`, `measurable_itv` (also declared as hints) + + lemma `measurable_ball_norm` + + definition `ocitv_measure`, lemma `ocitv_measure_ext` + + module `MeasurableR` + + module `RGenOpenSets` + * lemma `measurableE` + +- in `real_interval.v`: + + lemma `set1_bigcap_oo` - in `exp.v`: + lemmas `cvgy_expR`, `cvgNy_expR`, `lny`, `ge0_lt1_powR_cvg0`, @@ -28,12 +293,177 @@ ### Changed +- in `realsum.v`: + + lemma `__admitted__psumB` proved and renamed to `psumB` + +- moved from `measurable_structure.v` to `classical_sets.v`: + + definition `preimage_set_system` + + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, + `preimage_set_system_id` + +- moved from `measurable_structure.v` to `classical_sets.v`: + + definition `preimage_set_system` + + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, + `preimage_set_system_id` + +- moved from `topology_structure.v` to `filter.v`: + + lemma `continuous_comp` (and generalized) + +- in `numfun.v`: + + `fune_abse` renamed to `funeposDneg` and direction of the equality changed + + `funeposneg` renamed to `funeposBneg` and direction of the equality changed + + `funeD_posD` renamed to `funeDB` and direction of the equality changed + +- in `constructive_ereal.v`: + + lemmas `EFin_semi_additive` and `dEFin_semi_additive` turned into `Let`s + +- moved from `charge.v` to `signed_measure.v`: + + mixin `isAdditiveCharge`, structure `AdditiveCharge` + + mixin `isSemiSigmaAdditive`, structure `Charge` + + factory `isCharge` + + lemmas `charge0`, `charge_semi_additiveW`, `charge_semi_additive2E`, + `charge_semi_additive2`, `chargeU`, `chargeDI`, `charge_partition` + + definitions `measure_of_charge`, `charge_of_finite_measure` + + lemma `chargeD` + + definitions `crestr`, `crestr0`, `czero`, `cscale` + + lemmas `dominates_cscalel`, `dominates_cscaler` + + definition `copp` + + lemma `cscaleN1` + + definition `cadd` + + lemmas `dominates_cadd`, `dominates_pushforward` + + definitions `positive_set`, `negative_set` + + lemmas `negative_set_charge_le0`, `negative_set0`, + `positive_negative0`, `bigcup_negative_set`, `negative_setU`, + `hahn_decomposition_lemma` + + definition `hahn_decomposition` + + theorem `Hahn_decomposition` + + lemmas `Hahn_decomposition_uniq`, `cjordan_posE`, `cjordan_negE` + + definitions `jordan_pos`, `jordan_neg` + + lemmas `jordan_posE`, `jordan_negE`, `jordan_decomp`, `jordan_pos_dominates`, + `jordan_neg_dominates` + + definition `charge_variation`, `charge_dominates` + + lemmas `abse_charge_variation`, `null_charge_dominatesP`, + `content_charge_dominatesP`, `charge_variation_continuous` + +- moved from `charge.v` to `radon_nikodym.v`: + + definition `induced_charge` + + lemmas `semi_sigma_additive_nng_induced`, `dominates_induced`, + `integral_normr_continuous` + + definitions `approxRN`, `int_approxRN`, `sup_int_approxRN` + + lemmas `sup_int_approxRN_ge0`, `radon_nikodym_finite`, + `radon_nikodym_sigma_finite`, `change_of_variables`, `integrableM`, + `chain_rule` + + definition `Radon_Nikodym` + + lemmas `Radon_NikodymE`, `Radon_Nikodym_fin_num`, `Radon_Nikodym_integrable`, + `ae_eq_Radon_Nikodym_SigmaFinite`, `Radon_Nikodym_change_of_variables`, + `Radon_Nikodym_cscale`, `Radon_Nikodym_cadd`, `Radon_Nikodym_chain_rule` +- in `realsum.v`: + + the following now use `funrpos` and `funrneg`: + * definition `sum` + * lemmas `summable_funrpos`, `summable_funrneg` + + lemma `sum0` (now uses `cst`) + +- moved from `realsum` to `numfun.v`: + + now use `funrpos` and `funrneg`: + * lemmas `eq_funrpos`, `eq_funrneg` + * lemma `fpos0` (renamed to `funrpos_cst0`) + * lemma `fneg0` (renamed to `funrneg_cst0`) + * lemmas `funrposZ`, `funrnegZ` + * lemmas `funrpos_natrM`, `funrneg_natrM` + * lemmas `le_funrpos_norm` + +- moved from `numfun.v` to `unstable.v`: + + notations `nondecreasing_fun`, `nonincreasing_fun`, + `decreasing_fun`, `increasing_fun` + +- in `esum.v`: + + definition `esum` + + lemma `esum_fset` + + lemma `esum_ge` -> `PosEsum.pos_esum_ge` + + lemma `le_esum` -> `PosEsum.le_pos_esum` + +- moved from `normed_module.v` to `metric_structure.v` + + lemma `squeeze_cvgr` + +- moved from `pseudometric_normed_Zmodule.v` to `metric_structure.v` + + lemmas `real_cvgr_lt`, `real_cvgr_le`, `real_cvgr_le`, `real_cvgr_gt` + + lemmas `cvgr_lt`, `cvgr_gt`, `cvgr_ge`, `cvgr_le` +- in `normal_distribution.v: + + `normal_fun_center` -> `normal_fun_center0` + +- moved from `measurable_structure.v` to `measure_function.v`: + + definition `subset_sigma_subadditive` + +- moved from `measurable_structure.v` to `unstable.v`: + + notations `nondecreasing_seq`, `nonincreasing_seq` + +- moved from `measurable_structure.v` to `classical_sets.v`: + + notation `^nat` + + defintion `sequence` + + defintion `seqDU` + + lemmas `seqDU_bigcup_eq`, `trivIset_seqDU` + + definition `seqD` + + lemmas `eq_bigcup_seqD`, `trivIset_seqD`, `seqDU_seqD`, `bigcup_bigsetU_bigcup` + +- in `functions.v` + + lemma `fctE` (include `zerofctE` and `onefctE`) + +- in `classical_sets.v` + + lemma `bigcupDr` -> `setD_bigcupr` (deprecating `bigcupDr`) + +- moved from `measurable_realfun.v` to `lebesgue_stieltjes_measure.v` + + module `RGenOInfty` + + module `RGenInftyO` + + module `RGenCInfty` + + module `RGenOpens` + +- moved inside module `MeasurableRocitv` (`lebesgue_stieltjes_measure.v`): + + lemmas `measurable_set1`, `measurable_itv` + +- in `lebesgue_stieltjes_measure.v`: + + lemma `lebesgue_stieltjes_measure_unique` is now about the sigma-algebra generated by open sets + ### Renamed ### Generalized - in `lebesgue_integral_nonneg.v`: + lemmas `ge0_integralZl`, `ge0_integralZr` +- in `measurable_structure.v`: + + lemma `sigma_algebra_measurable` (not specialized to `setT` anymore) + +- in `measurable_function.v`: + + lemma `preimage_set_system_measurable_fun` + +- in `measurable_structure.v` + + structure `SemiRingOfSets`, mixin `isSigmaRing`, factories `isRingOfSets`, + `isRingOfSets_setY`, `isAlgebraOfSets`, `isAlgebraOfSets_setD`, `isMeasurable` + are not required to be pointed anymore + + lemmas `measurable_g_measurableTypeE`, `g_sigma_algebra_preimageType`, + `g_sigma_algebra_preimage`, `g_sigma_preimageE`, `g_sigma_preimageE`, + `g_sigma_algebra_rectangle` are generalized from `pointedType` to `choiceType` + (the list might not be exhaustive) + +- in `ereal.v`: + + lemma `funID` generalized from `pointedType` to `Type` + +- in `numfun.v`: + + lemma `indic_restrict` generalized from `pointedType` to `Type` + + factory `FiniteDecomp` generalized from `pointedType`/`nzRingType` to + `Type/pzRingType` + +- in `simple_functions.v`: + + lemmas `fctD`, `fctN`, `fctM`, `fctZ` + + lemmas `sfun0`, `sfunN`, `sfunD`, `sfunB`, `sfunZ`, `sfun_sum`, `sfunprod` + + lemma `simple_bounded` + + structure `SimpleFun` (and notation `{sfun aT >-> _}`): codomain + generalized from `realType` to `sigmaRingType d'`, adding a display parameter `d'`; + +- in `ereal.v`: + + lemmas `ge0_mule_fsumr`, `ge0_mule_fsuml` + +- in `esum.v`: + + lemma `esum_set1` ### Deprecated diff --git a/classical/filter.v b/classical/filter.v index 591459b297..461e0135df 100644 --- a/classical/filter.v +++ b/classical/filter.v @@ -1239,7 +1239,7 @@ move=> near_hom fFG; apply/cvg_to_withinP; split. Qed. Lemma filter_bigI_within T (I : choiceType) (D : {fset I}) (f : I -> set T) - (F : set_system T) (P : set T) : + (F : set_system T) (P : set T) : Filter F -> (forall i, i \in D -> F [set j | P j -> f i j]) -> F ([set j | P j -> (\bigcap_(i in [set` D]) f i) j]). Proof. move=> FF FfD; exact: (@filter_bigI T I D f _ (within_filter P FF)). Qed. diff --git a/theories/hoelder.v b/theories/hoelder.v index 44fce50f98..11c333ec1b 100644 --- a/theories/hoelder.v +++ b/theories/hoelder.v @@ -860,7 +860,7 @@ Reserved Notation "{ 'mfun_' mu , U >-> V }" Notation "{ 'mfun_' mu , aT >-> T }" := (@aeEqMfun _ _ aT T _ mu) : form_scope. -Import numFieldNormedType.Exports HBNNSimple. +Import numFieldNormedType.Exports. HB.mixin Record isFinLebesgue d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}) (p : \bar R) (p1 : (1 <= p)%E) diff --git a/theories/kernel.v b/theories/kernel.v index 1f418be452..c669004aa6 100644 --- a/theories/kernel.v +++ b/theories/kernel.v @@ -1062,7 +1062,6 @@ HB.export KCOMP_SFINITE_KERNEL. Section measurable_fun_preimage_integral. Context d d' (X : measurableType d) (Y : measurableType d') (R : realType). -Import HBNNSimple. Variables (k : Y -> \bar R) (k_ : ({nnsfun Y >-> R}) ^nat) (ndk_ : nondecreasing_seq (k_ : (Y -> R)^nat)) @@ -1109,7 +1108,6 @@ End measurable_fun_preimage_integral. Section measurable_fun_integral_kernel. -Import HBNNSimple. Lemma measurable_fun_integral_kernel d d' (X : measurableType d) (Y : measurableType d') (R : realType) @@ -1140,7 +1138,6 @@ rewrite integral_indic//= /kcomp. by apply: eq_integral => y _; rewrite integral_indic. Qed. -Import HBNNSimple. Let integral_kcomp_nnsfun x (f : {nnsfun Z >-> R}) : \int[kcomp l k x]_z (f z)%:E = \int[l x]_y (\int[k (x, y)]_z (f z)%:E). @@ -1322,7 +1319,6 @@ split => //. + by split => //; rewrite kfcompkindic. Qed. -Import HBNNSimple. (* [Lemma 14.20, Klenke 2014] *) Lemma measurable_kfcomp : measurable_fun [set: T1 * T2] f -> diff --git a/theories/lebesgue_integral_theory/giry.v b/theories/lebesgue_integral_theory/giry.v index 3c98adfd58..f756f62a4d 100644 --- a/theories/lebesgue_integral_theory/giry.v +++ b/theories/lebesgue_integral_theory/giry.v @@ -290,7 +290,10 @@ apply: measurable_giry_codensity => //= B mB. by apply: measurable_giry_int => //; exact: measurable_giry_ev. Qed. +<<<<<<< HEAD Import HBNNSimple. +======= +>>>>>>> 1d806e2cf (sigma-algebra for normed modules + sfun codomain sigma ring & module structure) Import MeasurableR. Lemma sintegral_giry_join (M : giry (giry T R) R) (h : {nnsfun T >-> R}) : diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v index ad2b814d30..39122860ca 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v @@ -84,7 +84,6 @@ rewrite sintegralE fsbig1// => r _; rewrite preimage_cst. by case: ifPn => [/[!inE] <-|]; rewrite ?mul0e// measure0 mule0. Qed. -Import HBNNSimple. Lemma sintegral_ge0 (f : {nnsfun T >-> R}) : 0 <= sintegral mu f. Proof. by rewrite sintegralE fsume_ge0// => r _; exact: nnsfun_mulemu_ge0. Qed. @@ -140,7 +139,6 @@ Local Open Scope ereal_scope. Context d (T : sigmaRingType d) (R : realType). Variables (m : {measure set T -> \bar R}) (r : R) (f : {nnsfun T >-> R}). -Import HBNNSimple. Lemma sintegralrM : sintegral m (cst r \* f)%R = r%:E * sintegral m f. Proof. @@ -197,7 +195,6 @@ Section le_sintegral. Context d (T : measurableType d) (R : realType) (m : {measure set T -> \bar R}). Variables f g : {nnsfun T >-> R}. -Import HBNNSimple. Hypothesis fg : forall x, f x <= g x. @@ -214,7 +211,6 @@ Qed. End le_sintegral. Section is_cvg_sintegral. -Import HBNNSimple. Lemma is_cvg_sintegral d (T : measurableType d) (R : realType) (m : {measure set T -> \bar R}) (f : {nnsfun T >-> R}^nat) : @@ -231,7 +227,6 @@ Context d (T : measurableType d) (R : realType). Variable mu : {measure set T -> \bar R}. Variables (g : {nnsfun T >-> R}^nat) (f : {nnsfun T >-> R}). -Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~ x). Hypothesis gf : forall x, cvgn (g^~ x) -> f x <= limn (g^~ x). @@ -351,7 +346,6 @@ Context d (T : measurableType d) (R : realType). Variable mu : {measure set T -> \bar R}. Variables (g : {nnsfun T >-> R}^nat) (f : {nnsfun T >-> R}). -Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~ x). Hypothesis gf : forall x, g ^~ x @ \oo --> f x. @@ -378,7 +372,6 @@ Local Open Scope ereal_scope. Context d (T : measurableType d) (R : realType). Implicit Types (f g : T -> \bar R) (D : set T). -Import HBNNSimple. Let nnintegral mu f := ereal_sup [set sintegral mu h | h in [set h : {nnsfun T >-> R} | forall x, (h x)%:E <= f x]]. @@ -477,7 +470,6 @@ Context {d} {T : measurableType d} {R : realType}. Variables m1 m2 : {measure set T -> \bar R}. Hypothesis m12 : forall S, measurable S -> m1 S <= m2 S. -Import HBNNSimple. Lemma ge0_le_measure_integral (f : T -> \bar R) S : measurable S -> (forall x, 0 <= f x) -> measurable_fun [set: T] f -> @@ -496,7 +488,6 @@ Context d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}) (D : set T) (mD : measurable D). Implicit Type A : set T. -Import HBNNSimple. Lemma integral_indic A : measurable A -> \int[mu]_(x in D) (\1_A x)%:E = mu (A `&` D). @@ -515,7 +506,6 @@ Context {d} {T : measurableType d} {R : realType} Lemma integral_mkcond D f : \int[mu]_(x in D) f x = \int[mu]_x (f \_ D) x. Proof. by rewrite /integral patch_setT. Qed. -Import HBNNSimple. Lemma integralT_nnsfun (h : {nnsfun T >-> R}) : \int[mu]_x (h x)%:E = sintegral mu h. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v index 41a86b07f3..c650da9ce9 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v @@ -81,7 +81,6 @@ Import MeasurableR. Let R : measurableType _ := measurableTypeR rT. Local Open Scope ereal_scope. -Import HBSimple. Lemma approximation_continuous_integrable (E : set _) (f : rT -> rT): measurable E -> mu E < +oo -> mu.-integrable E (EFin \o f) -> diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v index 2ede24962a..1eb4406df9 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v @@ -35,7 +35,6 @@ Variables (mu : {measure set T -> \bar R}) (f : T -> \bar R) Hypothesis f0 : forall x, 0 <= f x. Hypothesis mf : measurable_fun setT f. -Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~x). Hypothesis gf : forall x, EFin \o g^~ x @ \oo --> f x. @@ -90,7 +89,6 @@ Hypothesis f10 : forall x, D x -> 0 <= f1 x. Hypothesis mf1 : measurable_fun D f1. Hypothesis mf2 : measurable_fun D f2. -Import HBNNSimple. Lemma ge0_le_integral : (forall x, D x -> f1 x <= f2 x) -> \int[mu]_(x in D) f1 x <= \int[mu]_(x in D) f2 x. @@ -163,7 +161,6 @@ Local Definition max_g2' : (T -> R)^nat := Local Definition max_g2 : {nnsfun T >-> R}^nat := fun k => bigmax_nnsfun (g2^~ k) k. -Import HBNNSimple. Let is_cvg_g2 n t : cvgn (EFin \o (g2 n ^~ t)). Proof. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v index a4af3f425b..5189d5c04f 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v @@ -85,7 +85,6 @@ Context d (T : measurableType d) (R : realType). Let sintegral_measure_zero (f : T -> R) : sintegral mzero f = 0. Proof. by rewrite sintegralE big1// => r _ /=; rewrite /mzero mule0. Qed. -Import HBNNSimple. Lemma integral_measure_zero (D : set T) (f : T -> \bar R) : \int[mzero]_(x in D) f x = 0. @@ -118,7 +117,6 @@ Context {d} {T : measurableType d} {R : realType} Hypothesis f0 : forall x, D x -> 0 <= f x. Hypothesis mf : measurable_fun D f. -Import HBNNSimple. Let ge0_integralZl_EFin_subproof k : (0 <= k)%R -> \int[mu]_(x in D) (k%:E * f x) = k%:E * \int[mu]_(x in D) f x. @@ -203,7 +201,6 @@ Hypothesis mf1 : measurable_fun D f1. Hypothesis f20 : forall x, D x -> 0 <= f2 x. Hypothesis mf2 : measurable_fun D f2. -Import HBNNSimple. Lemma ge0_integralD : \int[mu]_(x in D) (f1 x + f2 x) = \int[mu]_(x in D) f1 x + \int[mu]_(x in D) f2 x. @@ -449,7 +446,6 @@ rewrite !fsbig_set1 mul0e add0e preimage_restrict//. by rewrite ifN ?set0U ?setIidl//= notin_setE => /esym; exact/eqP. Qed. -Import HBNNSimple. Local Lemma integral_cstr r : \int[mu]_(x in D) r%:E = r%:E * mu D. Proof. @@ -691,7 +687,6 @@ Qed. End integral_measure_sum_nnsfun. Section integral_measure_add_nnsfun. -Import HBNNSimple. Lemma integral_measure_add_nnsfun d (T : measurableType d) (R : realType) (m1 m2 : {measure set T -> \bar R}) (D : set T) (mD : measurable D) @@ -710,7 +705,6 @@ Local Open Scope ereal_scope. Context {d} {T : measurableType d} {R : realType} (m_ : {measure set T -> \bar R}^nat). -Import HBNNSimple. Lemma ge0_integral_measure_sum (D : set T) (mD : measurable D) (f : T -> \bar R) : @@ -808,7 +802,6 @@ Context {d} {T : measurableType d} {R : realType} (m_ : {measure set T -> \bar R}^nat). Let m := mseries m_ O. -Import HBNNSimple. Lemma ge0_integral_measure_series (D : set T) (mD : measurable D) (f : T -> \bar R) : (forall t, D t -> 0 <= f t) -> diff --git a/theories/lebesgue_integral_theory/measurable_fun_approximation.v b/theories/lebesgue_integral_theory/measurable_fun_approximation.v index cc5f2ab413..6b238370f5 100644 --- a/theories/lebesgue_integral_theory/measurable_fun_approximation.v +++ b/theories/lebesgue_integral_theory/measurable_fun_approximation.v @@ -351,7 +351,6 @@ Definition nnsfun_approx : {nnsfun T >-> R}^nat := fun n => locked (add_nnsfun else nnsfun0) (n * 2 ^ n)%N) (scale_nnsfun (indic_nnsfun _ (mB n)) (ler0n _ n))). -Import HBNNSimple. Lemma nnsfun_approxE n : nnsfun_approx n = approx n :> (T -> R). Proof. @@ -377,13 +376,11 @@ End approximation. Section approximation_sfun. Context d (T : measurableType d) (R : realType) (f : T -> \bar R). Variables (D : set T) (mD : measurable D) (mf : measurable_fun D f). - -Import HBSimple. +Import MeasurableR. (* NB: already instantiated in cardinality.v *) (*HB.instance Definition _ x : @FImFun T R (cst x) := FImFun.on (cst x).*) (* generates Warning: HB: no new instance is generated [HB.no-new-instance,HB,elpi,default] *) -Import HBNNSimple. (* NB: already instantiated in lebesgue_integral.v *) (*HB.instance Definition _ x : @NonNegFun T R (cst x%:num) := NonNegFun.on (cst x%:num).*) @@ -707,7 +704,6 @@ Let R : measurableType _ := measurableTypeR rT. Hypothesis mA : measurable A. Hypothesis finA : mu A < +oo. -Import HBSimple. Let lusin_simple (f : {sfun R >-> rT}) (eps : rT) : (0 < eps)%R -> exists K, [/\ compact K, K `<=` A, mu (A `\` K) < eps%:E & diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 71977785e5..90d6986baa 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -28,8 +28,9 @@ From mathcomp Require Import real_measure numfun realfun. (* *) (* Detailed contents: *) (* ```` *) -(* {sfun T >-> R} == type of simple functions *) -(* They form a (potentially zero) ring. *) +(* {sfun aT >-> bT} == type of simple functions *) +(* They can form a ring or a module depending on *) +(* the structure of bT *) (* {nnsfun T >-> R} == type of non-negative simple functions *) (* indic_sfun mD := mindic _ mD *) (* cst_sfun r == constant simple function *) @@ -73,24 +74,19 @@ Local Open Scope ring_scope. Module HBSimple. Import MeasurableR. -HB.structure Definition SimpleFun d (aT : sigmaRingType d) (rT : realType) := - {f of @isMeasurableFun d _ aT rT f & @FiniteImage aT rT f}. +HB.structure Definition SimpleFun d d' + (aT : sigmaRingType d) (rT : sigmaRingType d') := + {f of @isMeasurableFun d d' aT rT f & @FiniteImage aT rT f}. -End HBSimple. - -Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ aT T) : form_scope. +Notation "{ 'sfun' aT >-> T }" := (@SimpleFun.type _ _ aT T) : form_scope. Notation "[ 'sfun' 'of' f ]" := [the {sfun _ >-> _} of f] : form_scope. -Module HBNNSimple. -Import HBSimple. HB.structure Definition NonNegSimpleFun d (aT : sigmaRingType d) (rT : realType) := - {f of @SimpleFun d _ _ f & @NonNegFun aT rT f}. - -End HBNNSimple. + {f of @SimpleFun d _ aT rT f & @NonNegFun aT rT f}. -Notation "{ 'nnsfun' aT >-> T }" := (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. +Notation "{ 'nnsfun' aT >-> T }" := (@NonNegSimpleFun.type _ aT%type T) : form_scope. Notation "[ 'nnsfun' 'of' f ]" := [the {nnsfun _ >-> _} of f] : form_scope. Section sfun_pred. @@ -104,19 +100,18 @@ Lemma sub_sfun_fimfun : {subset sfun <= fimfun}. Proof. by move=> x /andP[]. Qed End sfun_pred. Section sfun. -Context {d} {aT : measurableType d} {rT : realType}. +Context {d d'} {aT : measurableType d} {rT : measurableType d'}. Notation T := {sfun aT >-> rT}. -Notation sfun := (@sfun _ aT rT). +Notation sfun := (@sfun _ _ aT rT). Section Sub. Context (f : aT -> rT) (fP : f \in sfun). Import MeasurableR. Definition sfun_Sub1_subproof := - @isMeasurableFun.Build d _ aT rT f (set_mem (sub_sfun_mfun fP)). + @isMeasurableFun.Build d d' aT rT f (set_mem (sub_sfun_mfun fP)). #[local] HB.instance Definition _ := sfun_Sub1_subproof. Definition sfun_Sub2_subproof := @FiniteImage.Build aT rT f (set_mem (sub_sfun_fimfun fP)). -Import HBSimple. #[local] HB.instance Definition _ := sfun_Sub2_subproof. Definition sfun_Sub := [sfun of f]. @@ -131,7 +126,6 @@ have -> : Pf2 = set_mem (sub_sfun_fimfun Pf) by []. exact: Ksub. Qed. -Import HBSimple. Lemma sfun_valP f (Pf : f \in sfun) : sfun_Sub Pf = f :> (_ -> _). Proof. by []. Qed. @@ -155,9 +149,9 @@ Lemma cst_sfunE x : @cst_sfun x =1 cst x. Proof. by []. Qed. End sfun. (* a better way to refactor function stuffs *) -Lemma fctD (T : Type) (K : pzRingType) (f g : T -> K) : f + g = f \+ g. +Lemma fctD (T : Type) (N : nmodType) (f g : T -> N) : f + g = f \+ g. Proof. by []. Qed. -Lemma fctN (T : Type) (K : pzRingType) (f : T -> K) : - f = \- f. +Lemma fctN (T : Type) (N : zmodType) (f : T -> N) : - f = \- f. Proof. by []. Qed. Lemma fctM (T : Type) (K : pzRingType) (f g : T -> K) : f * g = f \* g. Proof. by []. Qed. @@ -170,32 +164,20 @@ Definition fctWE := (fctD, fctN, fctM, fctZ). Section ring. Context d (aT : measurableType d) (rT : realType). -Lemma sfun_subring_closed : subring_closed (@sfun d aT rT). +Lemma sfun_subring_closed : subring_closed (@sfun d _ aT rT). Proof. by split=> [|f g|f g]; rewrite ?inE/= ?rpred1//; move=> /andP[/= mf ff] /andP[/= mg fg]; rewrite !(rpredB, rpredM). Qed. -HB.instance Definition _ := GRing.isSubringClosed.Build _ sfun +HB.instance Definition _ := GRing.isSubringClosed.Build _ (@sfun d _ aT rT) sfun_subring_closed. HB.instance Definition _ := [SubChoice_isSubComPzRing of {sfun aT >-> rT} by <:]. Implicit Types (f g : {sfun aT >-> rT}). -Import HBSimple. - -Lemma sfun0 : (0 : {sfun aT >-> rT}) =1 cst 0. Proof. by []. Qed. Lemma sfun1 : (1 : {sfun aT >-> rT}) =1 cst 1. Proof. by []. Qed. -Lemma sfunN f : - f =1 \- f. Proof. by []. Qed. -Lemma sfunD f g : f + g =1 f \+ g. Proof. by []. Qed. -Lemma sfunB f g : f - g =1 f \- g. Proof. by []. Qed. Lemma sfunM f g : f * g =1 f \* g. Proof. by []. Qed. -Lemma sfun_sum I r (P : {pred I}) (f : I -> {sfun aT >-> rT}) (x : aT) : - (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. -Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. -Lemma sfun_prod I r (P : {pred I}) (f : I -> {sfun aT >-> rT}) (x : aT) : - (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. -Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. Lemma sfunX f n : f ^+ n =1 (fun x => f x ^+ n). Proof. by move=> x; elim: n => [|n IHn]//; rewrite !exprS sfunM/= IHn. Qed. @@ -206,7 +188,6 @@ HB.instance Definition _ f g := MeasurableFun.copy (\- f) (- f). HB.instance Definition _ f g := MeasurableFun.copy (f \- g) (f - g). HB.instance Definition _ f g := MeasurableFun.copy (f \* g) (f * g). -Import HBSimple. (* TODO: mv to `measurable_realfun.v`? *) HB.instance Definition _ (D : set aT) (mD : measurable D) : @@ -214,12 +195,123 @@ HB.instance Definition _ (D : set aT) (mD : measurable D) : Definition indic_sfun (D : set aT) (mD : measurable D) : {sfun aT >-> rT} := mindic rT mD. -HB.instance Definition _ k f := MeasurableFun.copy (k \o* f) (f * cst_sfun k). -Definition scale_sfun k f : {sfun aT >-> rT} := k \o* f. - End ring. + Arguments indic_sfun {d aT rT} _. +Section sfun_lmodType. +Context d (aT : measurableType d) (R : realType) (N : normedModType R). + +Lemma mem_sfun_comp_pair (U V W : normedModType R) (f : {sfun aT >-> U}) + (g : {sfun aT >-> V}) (h : U * V -> W) : + (fun x => h (f x, g x)) \in @sfun _ _ aT W. +Proof. +rewrite inE; apply/andP; split; rewrite inE/=. + move=> _ Y mY; rewrite setTI. + rewrite (_ : _ @^-1` Y = + \bigcup_(a in range f) (\bigcup_(b in range g) + ((f @^-1` [set a] `&` g @^-1` [set b]) `&` [set _ | Y (h (a, b))]))). + apply/seteqP; split=> [x/= Yfg|x [a _] [b _] [[/= <- <-]]//]. + by exists (f x); [exists x|exists (g x); [exists x|]]. + apply: fin_bigcup_measurable; first exact: fimfunP. + move=> a _; apply: fin_bigcup_measurable; first exact: fimfunP. + move=> b _; apply: measurableI. + exact: measurableI. + have [Yhab|Yhab] := pselect (Y (h (a, b))). + by rewrite (_ : [set _ | _] = setT); + [apply/seteqP; split|exact: measurableT]. + rewrite (_ : [set _ | _] = set0); last exact: measurable0. + by apply/seteqP; split. +apply: (@sub_finite_set _ _ (h @` (range f `*` range g))). + by move=> _ [x _ <-]/=; exists (f x, g x) => //; split; exists x. +exact/finite_image/finite_setX/fimfunP. +Qed. + +Lemma sfun_submod_closed : + submod_closed (@sfun _ _ aT N). +Proof. +split=> [|k f g sf sg]; first exact: (valP (cst_sfun (0 : N))). +exact: (mem_sfun_comp_pair (sfun_Sub sf) (sfun_Sub sg) (fun t => k *: t.1 + t.2)). +Qed. + +HB.instance Definition _ := + GRing.isSubmodClosed.Build _ _ (@sfun _ _ aT N) + sfun_submod_closed. +HB.instance Definition _ := + [SubChoice_isSubLmodule of {sfun aT >-> N} by <:]. + +Implicit Types (f g : {sfun aT >-> N} : lmodType _). + +Lemma sfun0 : (0 : {sfun aT >-> N} : lmodType _) =1 cst 0. Proof. by []. Qed. +Lemma sfunN f : - f =1 \- f. Proof. by []. Qed. +Lemma sfunD f g : f + g =1 f \+ g. Proof. by []. Qed. +Lemma sfunB f g : f - g =1 f \- g. Proof. by []. Qed. +Lemma sfunZ k f : k *: f =1 k \*: f. Proof. by []. Qed. +Lemma sfun_sum I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : + (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. +Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. +Lemma sfun_prod I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : + (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. +Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. + +HB.instance Definition _ f g := MeasurableFun.copy (f \+ g) (f + g). +HB.instance Definition _ f g := MeasurableFun.copy (\- f) (- f). +HB.instance Definition _ f g := MeasurableFun.copy (f \- g) (f - g). +HB.instance Definition _ k f := MeasurableFun.copy (k \*: f) (k *: f). + +End sfun_lmodType. + +(* This could be moved elsewhere *) +Section indic_lmod. +Context {T : Type} {K : pzRingType} {L : lmodType K}. + +Definition indic_lmod (A : set T) (z : L) := ( *:%R^~ z) \o \1_A. + +Lemma indic_lmodE A z : indic_lmod A z = (fun x => if x \in A then z else 0). +Proof. +by apply/funext=> x; rewrite/indic_lmod/= indicE; +case: ifPn=> _ /=; rewrite ?scale0r ?scale1r. +Qed. + +Lemma preimage_indic_mod A (B : set L) (z : L) : + (indic_lmod A z) @^-1` B = if z \in B then if 0 \in B then [set: T] else A + else if 0 \in B then ~` A else set0. +Proof. +rewrite comp_preimage preimage_indic. by do 4 (case: ifPn => [|]); + rewrite ?in_setE ?notin_setE //= ?scale0r ?scale1r. +Qed. + +Lemma indic_lmod_fimfun_subproof (A : set T) (z : L) : +@FiniteImage T L (indic_lmod A z). Proof. by []. Qed. + +HB.instance Definition _ A z := @indic_lmod_fimfun_subproof A z. + +End indic_lmod. + +Section mindic_lmod. +Context d {aT : measurableType d} {rT : realType} {nT : normedModType rT}. + +Definition mindic_lmod (A : set aT) (mA : measurable A) := + @indic_lmod aT rT nT A. + +Lemma measurable_indic_lmod {D} (A : set aT) (mA : d.-measurable A) (z:nT) : +measurable_fun D (mindic_lmod mA z). +Proof. +move=> mD Y mY; rewrite preimage_indic_mod //. +do 2 (case: ifP => _); apply: measurableI=>//; exact: measurableC. +Qed. + +HB.instance Definition _ A mA z := @isMeasurableFun.Build _ _ aT nT + (mindic_lmod mA z) (@measurable_indic_lmod [set: aT] A mA z). + +HB.instance Definition _ (D : set aT) (mD : measurable D) (z : nT) : + @FImFun aT nT (mindic_lmod mD z) := FImFun.on (mindic_lmod mD z). + +Definition mindic_lmod_sfun (D : set aT) (mD : measurable D) (z : nT) : + {sfun aT >-> nT} := mindic_lmod mD z. + +End mindic_lmod. + Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : t < 0 -> f @^-1` [set t] = set0. Proof. @@ -235,11 +327,13 @@ by split=> [z/= <-|z/= ->]; rewrite [x * _]mulrC (mulfK, divfK). Qed. Section simple_bounded. +<<<<<<< HEAD Context {d} {T : sigmaRingType d} {R : realType}. +======= +Context d (T : sigmaRingType d) (R : realType) (N : normedModType R). +>>>>>>> b5e0fd857 (sigma-algebra for normed modules + sfun codomain sigma ring & module structure) -Import HBSimple. - -Lemma simple_bounded (f : {sfun T >-> R}) : bounded_fun f. +Lemma simple_bounded (f : {sfun T >-> N}) : bounded_fun f. Proof. have /finite_seqP[r fr] := fimfunP f. exists (fine (\big[maxe/-oo%E]_(i <- r) `|i|%:E)). @@ -331,7 +425,6 @@ Definition proj_nnsfun d (T : measurableType d) (R : realType) mul_nnsfun f (indic_nnsfun R mA). Section mrestrict. -Import HBNNSimple. Lemma mrestrict d (T : measurableType d) (R : realType) (f : {nnsfun T >-> R}) A (mA : measurable A) : f \_ A = proj_nnsfun f mA. @@ -348,7 +441,6 @@ Variable f : {nnsfun T >-> R}^nat. Definition sum_nnsfun n := \big[add_nnsfun/nnsfun0]_(i < n) f i. -Import HBNNSimple. Lemma sum_nnsfunE n t : sum_nnsfun n t = \sum_(i < n) (f i t). Proof. by rewrite /sum_nnsfun; elim/big_ind2 : _ => [|x g y h <- <-|]. Qed. @@ -365,7 +457,6 @@ Local Open Scope ereal_scope. Context d (T : measurableType d) (R : realType). Variable f : {nnsfun T >-> R}. -Import HBNNSimple. Lemma nnsfun_cover : \big[setU/set0]_(i \in range f) (f @^-1` [set i]) = setT. Proof. by rewrite fsbig_setU//= -subTset => x _; exists (f x). Qed. @@ -437,7 +528,6 @@ by move=> xA; rewrite (@mulef_ge0 _ _ (mu \o _))//= => /xA ->; rewrite measure0. Qed. Global Arguments mulemu_ge0 {d T R mu x} A. -Import HBNNSimple. Lemma nnsfun_mulemu_ge0 d (T : sigmaRingType d) (R : realType) (mu : {measure set T -> \bar R}) (f : {nnsfun T >-> R}) x : diff --git a/theories/probability_theory/normal_distribution.v b/theories/probability_theory/normal_distribution.v index a2df3f5dc2..ed296f469f 100644 --- a/theories/probability_theory/normal_distribution.v +++ b/theories/probability_theory/normal_distribution.v @@ -588,6 +588,7 @@ Section normal_prob_lemmas. Context {R : realType}. Local Notation mu := lebesgue_measure. Local Open Scope ereal_scope. +Import MeasurableR. Import MeasurableR. diff --git a/theories/probability_theory/uniform_distribution.v b/theories/probability_theory/uniform_distribution.v index db21ea3dde..4ea91d5f4d 100644 --- a/theories/probability_theory/uniform_distribution.v +++ b/theories/probability_theory/uniform_distribution.v @@ -149,7 +149,6 @@ case: ifPn => //. by rewrite inE/= in_itv/= => axb; rewrite indicE (negbTE xE) mule0. Qed. -Import HBNNSimple. Let integral_uniform_nnsfun (f : {nnsfun _ >-> R}) : (\int[uniform_prob ab]_x (f x)%:E = diff --git a/theories/real_measure/lebesgue_stieltjes_measure.v b/theories/real_measure/lebesgue_stieltjes_measure.v index 0ddbb8bffd..946ab0ea68 100644 --- a/theories/real_measure/lebesgue_stieltjes_measure.v +++ b/theories/real_measure/lebesgue_stieltjes_measure.v @@ -463,85 +463,127 @@ Qed. End rgenopensets. End RGenOpenSets. +(* Could be moved elsewhere and generalized to metric spaces *) +Section normed_lemmas. +Context {R : realType} {N : normedModType R}. + +Lemma set1_bigcap_ball (x : N) : [set x] = \bigcap_n ball x n.+1%:R^-1. +Proof. +rewrite eqEsubset/bigcap; split=> [y -> n _ | y /= bn]/=. + by apply: ballxx; rewrite invr_gt0. +apply: close_eq _=>//; rewrite ball_close=> e0; rewrite ball_symE. +apply: (le_ball _ (bn (truncn e0%:num^-1) I)). rewrite invf_ple ?posrE//. +exact: (ltW (truncnS_gt _)). +Qed. + +End normed_lemmas. + +(* Should be moved to a more general file *) Section open. -Context {R : realType}. +Context {R : realType} {N : normedModType R}. -Definition open_type : Type := R. +Definition open_type : Type := N. HB.instance Definition _ := Pointed.on open_type. -Let measurable : set_system R := @measurable _ (g_sigma_algebraType (@open R)). +Let measurable : set_system N := @measurable _ (g_sigma_algebraType (@open N)). Let measurable0 : measurable set0. Proof. exact: measurable0. Qed. Let measurableC A : measurable A -> measurable (~` A). Proof. by move=> /measurableC. Qed. -Let measurable_bigcup (F : (set R)^nat) : (forall i, measurable (F i)) -> +Let measurable_bigcup (F : (set N)^nat) : (forall i, measurable (F i)) -> measurable (\bigcup_i (F i)). Proof. move=> mF; exact: bigcupT_measurable. Qed. HB.instance Definition _ := - @isMeasurable.Build (sigma_display (@open R)) + @isMeasurable.Build (sigma_display (@open N)) open_type measurable measurable0 measurableC measurable_bigcup. End open. -Notation "R .-open" := (sigma_display (@open R)) : measure_display_scope. -Notation "R .-open.-measurable" := (measurable : set_system (@open_type R)) : +Notation "N .-open" := (sigma_display (@open N)) : measure_display_scope. +Notation "N .-open.-measurable" := (measurable : set_system (@open_type _ N)) : classical_set_scope. -Module MeasurableRopen. -Section measurableRopen. -Context {R : realType}. +Module MeasurableOpen. +Section measurableOpen. +Context {R : realType} {N : normedModType R}. -Definition measurableTypeR := g_sigma_algebraType (@open R). +Definition measurableTypeO := g_sigma_algebraType (@open N). -Definition lebesgue_display : measure_display := R.-open. +Definition borel_display : measure_display := N.-open. -Definition measurableR : set_system R := R.-open.-measurable. +Definition measurableO : set_system N := N.-open.-measurable. -HB.instance Definition _ : Measurable lebesgue_display measurableTypeR := - Measurable.on measurableTypeR. +HB.instance Definition _ : Measurable borel_display measurableTypeO := + Measurable.on measurableTypeO. (* Presumably it is safe to use NFI here because morally R is unique and nothing else can be used here *) #[non_forgetful_inheritance] -HB.instance Definition _ := Measurable.copy R measurableTypeR. +HB.instance Definition _ := Measurable.copy N measurableTypeO. -Lemma measurable_set1 (r : R) : measurable [set r]. +Lemma measurable_set1 (x : N) : measurable [set x]. Proof. -rewrite set1_bigcap_oo; apply: bigcap_measurable => // k _. -exact: sub_sigma_algebra. +rewrite set1_bigcap_ball; apply: bigcap_measurable => // k _. +apply: sub_sigma_algebra; exact: ball_open. Qed. #[local] Hint Resolve measurable_set1 : core. -Lemma measurable_itv (i : interval R) : measurable [set` i]. -Proof. -have := MeasurableRocitv.measurable_itv i. -rewrite /MeasurableRocitv.lebesgue_display. -by rewrite RGenOpenSets.measurableE. -Qed. +Lemma measurable_ball_norm (x : N) e : measurable (ball x e). +Proof. by apply: (sub_sigma_algebra (ball_open _ _)). Qed. -End measurableRopen. -Arguments measurableTypeR : clear implicits. +End measurableOpen. +Arguments measurableTypeO : clear implicits. #[global] Hint Extern 0 (measurable (_ @^-1` [set _])) => solve [apply: measurable_funPTI; exact: measurable_set1] : core. #[global] Hint Extern 0 (measurable [set _]) => solve [apply: measurable_set1] : core. -#[global] -Hint Extern 0 (measurable [set` _] ) => exact: measurable_itv : core. -Lemma measurable_funP1 {d} {aT : measurableType d} {rT : realType} - (f : {mfun aT >-> rT}) D (y : rT) : - measurable D -> measurable (D `&` f @^-1` [set y]). +Lemma measurable_funP1 {d} {aT : measurableType d} {rT : realType} + {nT : normedModType rT} (f : {mfun aT >-> nT}) D (z : nT) : + measurable D -> measurable (D `&` f @^-1` [set z]). Proof. by move=> /(measurable_funP f); exact. Qed. #[deprecated(since="mathcomp-analysis 1.13.0", use=measurable_funP1)] Notation measurable_sfun_inP := measurable_funP1 (only parsing). #[global] Hint Extern 0 (measurable (_ `&` _ @^-1` [set _])) => solve [apply: measurable_funP1; assumption] : core. +Section measurableReal. +Context {R : realType}. +Import numFieldNormedType.Exports. + +Definition measurableTypeR := @measurableTypeO R R. + +Definition lebesgue_display : measure_display := @borel_display R R. + +Definition measurableR := @measurableO R R. +(* Shouldn't be needing ideally... *) +HB.instance Definition _ := Measurable.copy R measurableTypeR. + +Lemma measurable_itv (i : interval R) : measurable [set` i]. +Proof. +have := MeasurableRocitv.measurable_itv i. +rewrite /MeasurableRocitv.lebesgue_display. +by rewrite RGenOpenSets.measurableE. +Qed. + +End measurableReal. +Arguments measurableTypeR : clear implicits. +#[global] +Hint Extern 0 (measurable [set` _] ) => exact: measurable_itv : core. + +End MeasurableOpen. + +Module MeasurableR. +Export numFieldNormedType.Exports. +Export MeasurableOpen. +End MeasurableR. + Section ocitv_measure. +Import MeasurableR. Context {R : realType} (mu : measure (measurableTypeR R) R). Definition ocitv_measure : set (MeasurableRocitv.measurableTypeR R) -> \bar R := @@ -568,12 +610,6 @@ Lemma ocitv_measure_ext A : ocitv_measure A = mu A. Proof. by []. Qed. End ocitv_measure. -End MeasurableRopen. - -Module MeasurableR. -Export MeasurableRopen. -End MeasurableR. - (** The construction of the Lebesgue-Stieltjes measure actually starts here. *) Section wlength. @@ -950,13 +986,13 @@ Let ocitv_lebesgue_stieltjes_measure_unique Proof. move=> muE A mA. apply: measure_extension_unique => //=. -- exact: wlength_sigma_finite. -- by move=> X mX; rewrite -muE// -measurable_mu_extE. -- by rewrite RGenOpenSets.measurableE. + exact: wlength_sigma_finite. +by move=> X mX; rewrite -muE// -measurable_mu_extE. +by rewrite RGenOpenSets.measurableE. Qed. Lemma lebesgue_stieltjes_measure_unique - (mu : {measure set (MeasurableRopen.measurableTypeR R) -> \bar R}) : + (mu : {measure set (measurableTypeR R) -> \bar R}) : (forall X, ocitv X -> lebesgue_stieltjes_measure f X = mu X) -> forall A : set R, measurable A -> lebesgue_stieltjes_measure f A = mu A. Proof. From 5e79d432801e67b0544049ff737216e8ae11bed1 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Thu, 9 Jul 2026 15:30:15 +0200 Subject: [PATCH 02/38] added image_indic_lmod_sub --- theories/lebesgue_integral_theory/simple_functions.v | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 90d6986baa..63ec57e9ae 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -273,7 +273,14 @@ by apply/funext=> x; rewrite/indic_lmod/= indicE; case: ifPn=> _ /=; rewrite ?scale0r ?scale1r. Qed. -Lemma preimage_indic_mod A (B : set L) (z : L) : +Lemma image_indic_lmod_sub A z D : (indic_lmod A z) @` D `<=` [set 0;z]. +Proof. +rewrite -image_comp; apply: (subset_trans (image_subset ( *:%R ^~ z) _)); + first exact: image_indic_sub. +move=> y /= [x [->|->]]; rewrite ?scale0r ?scale1r=> ->; first by left. by right. +Qed. + +Lemma preimage_indic_lmod A (B : set L) (z : L) : (indic_lmod A z) @^-1` B = if z \in B then if 0 \in B then [set: T] else A else if 0 \in B then ~` A else set0. Proof. @@ -297,7 +304,7 @@ Definition mindic_lmod (A : set aT) (mA : measurable A) := Lemma measurable_indic_lmod {D} (A : set aT) (mA : d.-measurable A) (z:nT) : measurable_fun D (mindic_lmod mA z). Proof. -move=> mD Y mY; rewrite preimage_indic_mod //. +move=> mD Y mY; rewrite preimage_indic_lmod //. do 2 (case: ifP => _); apply: measurableI=>//; exact: measurableC. Qed. From de4f13ac1d5a151d3e7586f9b476da333e0d9eca Mon Sep 17 00:00:00 2001 From: arthurd Date: Tue, 10 Nov 2026 11:05:31 +0100 Subject: [PATCH 03/38] rebase --- CHANGELOG_UNRELEASED.md | 430 ------------------ classical/filter.v | 2 +- theories/hoelder.v | 2 +- theories/kernel.v | 4 + theories/lebesgue_integral_theory/giry.v | 3 - .../lebesgue_integral_definition.v | 10 + .../lebesgue_integral_differentiation.v | 1 + .../lebesgue_integral_monotone_convergence.v | 3 + .../lebesgue_integral_nonneg.v | 7 + .../measurable_fun_approximation.v | 6 +- .../probability_theory/normal_distribution.v | 1 - .../probability_theory/uniform_distribution.v | 1 + .../real_measure/lebesgue_stieltjes_measure.v | 2 +- 13 files changed, 34 insertions(+), 438 deletions(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index f8d087d901..d7f0405803 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -3,271 +3,6 @@ ## [Unreleased] ### Added -- in `borel_hierarchy.v`: - + definition `borel_type` - + lemmas `singleton_bigcap`, `measurable1` - -- in `simple_functions.v`: - + lemmas `sfun_op`, `sfun_submod_closed` - + `{sfun aT >-> borel_type V}` is an `lmodType` when `V` is a `normedModType` - -- in `simple_functions.v`: - + lemmas `mem_sfun_comp_pair`, `sfun_submod_closed` - + `{sfun aT >-> V}` is an `lmodType` when `V` is a `normedModType` - + definitions `indic_lmod` `mindic_lmod` `mindic_lmod_sfun` - + lemmas `indic_lmodE` `preimage_indic_mod` `measurable_indic_lmod` - -- in `set_interval.v`: - + lemmas `setU_itvob1`, `setU_1itvob` - -- in `realfun.v`: - + lemma `derivable_sqrt` -- in `classical_sets.v`: - + definition `rectangle` - + lemmas `rectangle_setX`, `setI_closed_rectangle` - + definitions `cross`, `cross12` - + lemmas `smallest_sub_sub`, `bigcap_closed_smallest`, `smallest_sub_iff` - + lemma `preimage_set_systemS` - + lemma `setD_bigcapr` - -- in `measurable_structure.v`: - + lemmas `g_sigma_algebra_cross`, `g_sigma_algebra_rectangle` - + lemma `sigma_algebra_sub` - -- in `measurable_function.v`: - + lemma `preimage_measurability` - -- in `pseudometric_normed_Zmodule.v`: - + lemma `itv_center_shift` - -- in `normed_module.v`: - + lemmas `closure_itvoo` -- in `unstable.v`: - + structures `SemiNorm`, `Norm` - + lemmas `normMn`, `normN`, `ler_norm_sum` - -- in `normed_module.v`: - + structure `NormedVector` - + notation `normedVectType` - + definition `max_space` - + lemmas `sup_closed_ball_compact`, `equivalence_norms`, - `linear_findim_continuous` - -- in `tvs.v`: - + lemmas `cvg_sum`, `sum_continuous` - -- in `classical_sets.v`: - + lemmas `setI_closed_setT`, `setI_closed_set0` - -- in `measurable_function.v`: - + lemma `g_sigma_algebra_preimage_comp` - -- in `measure_function.v`: - + lemma `g_sigma_algebra_finite_measure_unique` - -- new file `independence.v`: - + definition `independent_events` - + definition `mutual_independence` - + lemma `eq_mutual_independence` - + definition `independence2`, `independence2P` - + lemma `mutual_independence_fset` - + lemma `mutual_independence_finiteS` - + theorem `mutual_independence_finite_g_sigma` - + lemma `mutual_dependence_bigcup` - + definition `independent_RVs` - + lemma `independent_RVsD1` - + theorem `independent_generators` - + definition `independent_RVs2` - + lemmas `independent_RVs2_comp`, `independent_RVs2_funrposneg`, - `independent_RVs2_funrnegpos`, `independent_RVs2_funrnegneg`, - `independent_RVs2_funrpospos` - + definition `pairRV`, lemma `measurable_pairRV` - + lemmas `independent_RVs2_product_measure1` - + lemmas `independent_RVs2_setI_preimage`, - `independent_Lfun1_expectation_product_measure_lty` - + lemma `ge0_independent_expectationM` - + lemmas `independent_Lfun1_expectationM_lty`, `independent_Lfun1M`, - `independent_expectationM` - -- in `ereal.v`: - + lemma `ge0_addBefctE` - -- in `measure_extension.v`: - + definition `caratheodory_measure` -- in `measurable_structure.v`: - + structure `PMeasurable`, notation `pmeasurableType` - -- in `subspace_topology.v`: - + lemma `withinU_continuous_patch` -- in `matrix_normedtype.v`: - + lemma `continuous_mx` - -- in `derive.v`: - + instance `is_derive_mx` - + fact `dmx` - + lemma `diffmx` - + lemma `is_diff_mx` - + instance `is_diff_mx` -- in `realsum.v`: - + lemma `esum_psum` - + lemma `esum_sum` - -- in `constructive_ereal.v`: - + definition `esg` - + lemmas `numEesg`, `gte0_esg`, `lte0_esg`, `esg0` - -- in `esum.v`: - + lemmas `esum_eq0P`, `esumZ`, `exchange_esum` - + lemmas `le_esum`, `esumN` - + lemmas `summable_le_esum`, `summable_esum_funepos`, `summable_esumN`, - `summableZ`, `summable_esumZ` - + lemmas `esum_if_eq_op` - + lemmas `exchange_esum_ereal_sup` - -- in `ereal.v`: - + lemmas `exchange_ereal_sup`, `ge0_ereal_supZl`, `ge0_ereal_supZl_range` - -- in `sequences.v`: - + lemmas `ereal_supD`, `ereal_sup_sum` - -- in `reals.v`: - + lemmas `sup_ge0`, `has_sup_wpZl`, `gt0_has_supZl`, `has_sup_Mn`, `sup_Mn` -- in `mathcomp_extra.v`: - + lemmas `divDl_ge0`, `divDl_le1` - -- in `unstable.v`: - + lemmas `divD_onem` - -- in `filter.v`: - + mixin `isSubNbhs`, structure `SubNbhs`, notation `subNbhsType` - -- in `topology_structure.v`: - + structure `SubTopological`, notation `subTopologicalType` - -- in `tvs.v`: - + structure `SubConvexTvs`, notation `subConvexTvsType` - -- in `normed_module.v`: - + structure `SubNormedModule`, notation `subNormedModType` - + instance `ent_xsection_filter` - + light-weigth factory `subLmodule_isSubNormedmodule` - -- new file `hahn_banach_theorem.v`: - + module `LinearGraph` - * definitions `graph`, `linear_graph` - * lemmas `lingraph_00`, `lingraphZ`, `lingraphD` - + module `HahnBanachZorn` - * definitions `extend_graph`, `le_graph`, `functional_graph`, `le_extend_graph` - * record `zorn_type` - * definition `zphi` - * lemma `zorn_type_eq` - * definition `zornS` - * lemmas `zornS_ex`, `domain_extend`, `hahn_banach_witness` - + theorems `hahn_banach_extension`, `hahn_banach_extension_normed` -- in `normal_distribution.v`: - + lemma `normal_funN` - + lemma `normal_fun_sym` - + lemma `normal_fun0abs` - + lemma `normal_pdf_sym` - + lemma `normal_fun_center_new` - + lemma `normal_fun_shift` - + lemma `normal_pdf_uniq_ae` - + lemma `normal_prob_continuous` - + lemma `integral_normal_prob` - + lemma `measurable_normal_prob` - + lemma `emeasurable_bounded_integrable` - + lemmas `integrable_normal_probD1`, `normal_probD1`, `normal_probD2`, `normal_probD` - -- in `lebesgue_stieltjes_measure.v`: - + definition `lebesgue_display` - -- in `realsum.v`: - + lemma `esum_summableP` - -- in `esum.v`: - + lemma `fsetsTE` -- in `ftc.v`: - + lemma `ge0_integration_by_substitution_shift_itvy`, - `ge0_integration_by_substitution_shift_itvNy` -- in `derive.v`: - + lemmas `derivable_row_mx`, `derive_row_mx` - + instance `is_derive_row_mx` - -- in `matrix_normedtype.v` - + lemmas `norm_row_mx`, `norm_row_mx0r`, `norm_row_mx0l`, `cvg_row_mx` - -- in `unstable.v`: - + lemma `sub_row_mx` - -- in `derive.v`: - + lemmas `eqo_row_mx`, `drow_mx`, `diff_row_mx`, - `differentiable_row_mx` - + instance `is_diff_row_mx` - -- in `functions.v`: - + lemmas `zerofctE`, `onefctE` - -- in `functions.v`: - + lemmas `linfunP`, `linfun_eqP` - + instances of `SubLmodule` and `pointedType` on `{linear _->_ | _ }` - -- in `tvs.v`: - + structure `LinearContinuous` - + factory `isLinearContinuous` - + instance of `ChoiceType` on `{linear_continuous _ -> _ }` - + instance of `LinearContinuous` with the composition of two functions of type `LinearContinuous` - + instance of `LinearContinuous` with the sum of two functions of type `LinearContinuous` - + instance of `LinearContinuous` with the scalar multiplication of a function of type - `LinearContinuous` - + instance of `Continuous` on \-f when f is of type `LinearContinuous` - + instance of `SubModClosed` on `{linear_continuous _ -> _}` - + instance of `SubLModule` on `{linear_continuous _ -> _ }` - + instance of `LinearContinuous` on the null function - + notations `{linear_continuous _ -> _ | _ }` and `{linear_continuous _ -> _ }` - + definitions `lcfun`, `lcfun_key`, `lcfunP` - + lemmas `lcfun_eqP`, `null_fun_continuous`, `fun_cvgD`, - `fun_cvgN`, `fun_cvgZ`, `fun_cvgZr` - + lemmas `lcfun_continuous` and `lcfun_linear` - -- new files `signed_measure.v` and `radon_nikodym.v` - + with the contents of `charge.v` (deprecated) - -- in `esum.v`: - + lemma `ge0_esum` - + lemma `esum_ge` - -- in `functions.v`: - + lemma `preimageD1` - -- in `measure_function.v`: - + lemmas `cvg_measure_bigcap`, `cvg_measure_bigcup` - -- in `classical_sets.v`: - + lemma `bigcup_bigsetU` - -- in `measurable_structure.v`: - + lemmas `countable_bigcap_measurable`, `countable_bigcup_measurable` - -- in `lebesgue_stieltjes_measure.v`: - + module `MeasurableRocitv` - + definition `open_type` - + notations `.-open`, `.-open.-measurable` - + module `MeasurableOpen` - * definition `measurableTypeO` - + definition `borel_display` - * definition `measurableO` - * definition `measurableTypeR` - + definition `lebesgue_display` - * definition `measurableR` - + lemmas `measurable_set1`, `measurable_itv` (also declared as hints) - + lemma `measurable_ball_norm` - + definition `ocitv_measure`, lemma `ocitv_measure_ext` - + module `MeasurableR` - + module `RGenOpenSets` - * lemma `measurableE` - -- in `real_interval.v`: - + lemma `set1_bigcap_oo` - in `exp.v`: + lemmas `cvgy_expR`, `cvgNy_expR`, `lny`, `ge0_lt1_powR_cvg0`, @@ -293,177 +28,12 @@ ### Changed -- in `realsum.v`: - + lemma `__admitted__psumB` proved and renamed to `psumB` - -- moved from `measurable_structure.v` to `classical_sets.v`: - + definition `preimage_set_system` - + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, - `preimage_set_system_id` - -- moved from `measurable_structure.v` to `classical_sets.v`: - + definition `preimage_set_system` - + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, - `preimage_set_system_id` - -- moved from `topology_structure.v` to `filter.v`: - + lemma `continuous_comp` (and generalized) - -- in `numfun.v`: - + `fune_abse` renamed to `funeposDneg` and direction of the equality changed - + `funeposneg` renamed to `funeposBneg` and direction of the equality changed - + `funeD_posD` renamed to `funeDB` and direction of the equality changed - -- in `constructive_ereal.v`: - + lemmas `EFin_semi_additive` and `dEFin_semi_additive` turned into `Let`s - -- moved from `charge.v` to `signed_measure.v`: - + mixin `isAdditiveCharge`, structure `AdditiveCharge` - + mixin `isSemiSigmaAdditive`, structure `Charge` - + factory `isCharge` - + lemmas `charge0`, `charge_semi_additiveW`, `charge_semi_additive2E`, - `charge_semi_additive2`, `chargeU`, `chargeDI`, `charge_partition` - + definitions `measure_of_charge`, `charge_of_finite_measure` - + lemma `chargeD` - + definitions `crestr`, `crestr0`, `czero`, `cscale` - + lemmas `dominates_cscalel`, `dominates_cscaler` - + definition `copp` - + lemma `cscaleN1` - + definition `cadd` - + lemmas `dominates_cadd`, `dominates_pushforward` - + definitions `positive_set`, `negative_set` - + lemmas `negative_set_charge_le0`, `negative_set0`, - `positive_negative0`, `bigcup_negative_set`, `negative_setU`, - `hahn_decomposition_lemma` - + definition `hahn_decomposition` - + theorem `Hahn_decomposition` - + lemmas `Hahn_decomposition_uniq`, `cjordan_posE`, `cjordan_negE` - + definitions `jordan_pos`, `jordan_neg` - + lemmas `jordan_posE`, `jordan_negE`, `jordan_decomp`, `jordan_pos_dominates`, - `jordan_neg_dominates` - + definition `charge_variation`, `charge_dominates` - + lemmas `abse_charge_variation`, `null_charge_dominatesP`, - `content_charge_dominatesP`, `charge_variation_continuous` - -- moved from `charge.v` to `radon_nikodym.v`: - + definition `induced_charge` - + lemmas `semi_sigma_additive_nng_induced`, `dominates_induced`, - `integral_normr_continuous` - + definitions `approxRN`, `int_approxRN`, `sup_int_approxRN` - + lemmas `sup_int_approxRN_ge0`, `radon_nikodym_finite`, - `radon_nikodym_sigma_finite`, `change_of_variables`, `integrableM`, - `chain_rule` - + definition `Radon_Nikodym` - + lemmas `Radon_NikodymE`, `Radon_Nikodym_fin_num`, `Radon_Nikodym_integrable`, - `ae_eq_Radon_Nikodym_SigmaFinite`, `Radon_Nikodym_change_of_variables`, - `Radon_Nikodym_cscale`, `Radon_Nikodym_cadd`, `Radon_Nikodym_chain_rule` -- in `realsum.v`: - + the following now use `funrpos` and `funrneg`: - * definition `sum` - * lemmas `summable_funrpos`, `summable_funrneg` - + lemma `sum0` (now uses `cst`) - -- moved from `realsum` to `numfun.v`: - + now use `funrpos` and `funrneg`: - * lemmas `eq_funrpos`, `eq_funrneg` - * lemma `fpos0` (renamed to `funrpos_cst0`) - * lemma `fneg0` (renamed to `funrneg_cst0`) - * lemmas `funrposZ`, `funrnegZ` - * lemmas `funrpos_natrM`, `funrneg_natrM` - * lemmas `le_funrpos_norm` - -- moved from `numfun.v` to `unstable.v`: - + notations `nondecreasing_fun`, `nonincreasing_fun`, - `decreasing_fun`, `increasing_fun` - -- in `esum.v`: - + definition `esum` - + lemma `esum_fset` - + lemma `esum_ge` -> `PosEsum.pos_esum_ge` - + lemma `le_esum` -> `PosEsum.le_pos_esum` - -- moved from `normed_module.v` to `metric_structure.v` - + lemma `squeeze_cvgr` - -- moved from `pseudometric_normed_Zmodule.v` to `metric_structure.v` - + lemmas `real_cvgr_lt`, `real_cvgr_le`, `real_cvgr_le`, `real_cvgr_gt` - + lemmas `cvgr_lt`, `cvgr_gt`, `cvgr_ge`, `cvgr_le` -- in `normal_distribution.v: - + `normal_fun_center` -> `normal_fun_center0` - -- moved from `measurable_structure.v` to `measure_function.v`: - + definition `subset_sigma_subadditive` - -- moved from `measurable_structure.v` to `unstable.v`: - + notations `nondecreasing_seq`, `nonincreasing_seq` - -- moved from `measurable_structure.v` to `classical_sets.v`: - + notation `^nat` - + defintion `sequence` - + defintion `seqDU` - + lemmas `seqDU_bigcup_eq`, `trivIset_seqDU` - + definition `seqD` - + lemmas `eq_bigcup_seqD`, `trivIset_seqD`, `seqDU_seqD`, `bigcup_bigsetU_bigcup` - -- in `functions.v` - + lemma `fctE` (include `zerofctE` and `onefctE`) - -- in `classical_sets.v` - + lemma `bigcupDr` -> `setD_bigcupr` (deprecating `bigcupDr`) - -- moved from `measurable_realfun.v` to `lebesgue_stieltjes_measure.v` - + module `RGenOInfty` - + module `RGenInftyO` - + module `RGenCInfty` - + module `RGenOpens` - -- moved inside module `MeasurableRocitv` (`lebesgue_stieltjes_measure.v`): - + lemmas `measurable_set1`, `measurable_itv` - -- in `lebesgue_stieltjes_measure.v`: - + lemma `lebesgue_stieltjes_measure_unique` is now about the sigma-algebra generated by open sets - ### Renamed ### Generalized - in `lebesgue_integral_nonneg.v`: + lemmas `ge0_integralZl`, `ge0_integralZr` -- in `measurable_structure.v`: - + lemma `sigma_algebra_measurable` (not specialized to `setT` anymore) - -- in `measurable_function.v`: - + lemma `preimage_set_system_measurable_fun` - -- in `measurable_structure.v` - + structure `SemiRingOfSets`, mixin `isSigmaRing`, factories `isRingOfSets`, - `isRingOfSets_setY`, `isAlgebraOfSets`, `isAlgebraOfSets_setD`, `isMeasurable` - are not required to be pointed anymore - + lemmas `measurable_g_measurableTypeE`, `g_sigma_algebra_preimageType`, - `g_sigma_algebra_preimage`, `g_sigma_preimageE`, `g_sigma_preimageE`, - `g_sigma_algebra_rectangle` are generalized from `pointedType` to `choiceType` - (the list might not be exhaustive) - -- in `ereal.v`: - + lemma `funID` generalized from `pointedType` to `Type` - -- in `numfun.v`: - + lemma `indic_restrict` generalized from `pointedType` to `Type` - + factory `FiniteDecomp` generalized from `pointedType`/`nzRingType` to - `Type/pzRingType` - -- in `simple_functions.v`: - + lemmas `fctD`, `fctN`, `fctM`, `fctZ` - + lemmas `sfun0`, `sfunN`, `sfunD`, `sfunB`, `sfunZ`, `sfun_sum`, `sfunprod` - + lemma `simple_bounded` - + structure `SimpleFun` (and notation `{sfun aT >-> _}`): codomain - generalized from `realType` to `sigmaRingType d'`, adding a display parameter `d'`; - -- in `ereal.v`: - + lemmas `ge0_mule_fsumr`, `ge0_mule_fsuml` - -- in `esum.v`: - + lemma `esum_set1` ### Deprecated diff --git a/classical/filter.v b/classical/filter.v index 461e0135df..591459b297 100644 --- a/classical/filter.v +++ b/classical/filter.v @@ -1239,7 +1239,7 @@ move=> near_hom fFG; apply/cvg_to_withinP; split. Qed. Lemma filter_bigI_within T (I : choiceType) (D : {fset I}) (f : I -> set T) - (F : set_system T) (P : set T) : + (F : set_system T) (P : set T) : Filter F -> (forall i, i \in D -> F [set j | P j -> f i j]) -> F ([set j | P j -> (\bigcap_(i in [set` D]) f i) j]). Proof. move=> FF FfD; exact: (@filter_bigI T I D f _ (within_filter P FF)). Qed. diff --git a/theories/hoelder.v b/theories/hoelder.v index 11c333ec1b..44fce50f98 100644 --- a/theories/hoelder.v +++ b/theories/hoelder.v @@ -860,7 +860,7 @@ Reserved Notation "{ 'mfun_' mu , U >-> V }" Notation "{ 'mfun_' mu , aT >-> T }" := (@aeEqMfun _ _ aT T _ mu) : form_scope. -Import numFieldNormedType.Exports. +Import numFieldNormedType.Exports HBNNSimple. HB.mixin Record isFinLebesgue d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}) (p : \bar R) (p1 : (1 <= p)%E) diff --git a/theories/kernel.v b/theories/kernel.v index c669004aa6..1f418be452 100644 --- a/theories/kernel.v +++ b/theories/kernel.v @@ -1062,6 +1062,7 @@ HB.export KCOMP_SFINITE_KERNEL. Section measurable_fun_preimage_integral. Context d d' (X : measurableType d) (Y : measurableType d') (R : realType). +Import HBNNSimple. Variables (k : Y -> \bar R) (k_ : ({nnsfun Y >-> R}) ^nat) (ndk_ : nondecreasing_seq (k_ : (Y -> R)^nat)) @@ -1108,6 +1109,7 @@ End measurable_fun_preimage_integral. Section measurable_fun_integral_kernel. +Import HBNNSimple. Lemma measurable_fun_integral_kernel d d' (X : measurableType d) (Y : measurableType d') (R : realType) @@ -1138,6 +1140,7 @@ rewrite integral_indic//= /kcomp. by apply: eq_integral => y _; rewrite integral_indic. Qed. +Import HBNNSimple. Let integral_kcomp_nnsfun x (f : {nnsfun Z >-> R}) : \int[kcomp l k x]_z (f z)%:E = \int[l x]_y (\int[k (x, y)]_z (f z)%:E). @@ -1319,6 +1322,7 @@ split => //. + by split => //; rewrite kfcompkindic. Qed. +Import HBNNSimple. (* [Lemma 14.20, Klenke 2014] *) Lemma measurable_kfcomp : measurable_fun [set: T1 * T2] f -> diff --git a/theories/lebesgue_integral_theory/giry.v b/theories/lebesgue_integral_theory/giry.v index f756f62a4d..3c98adfd58 100644 --- a/theories/lebesgue_integral_theory/giry.v +++ b/theories/lebesgue_integral_theory/giry.v @@ -290,10 +290,7 @@ apply: measurable_giry_codensity => //= B mB. by apply: measurable_giry_int => //; exact: measurable_giry_ev. Qed. -<<<<<<< HEAD Import HBNNSimple. -======= ->>>>>>> 1d806e2cf (sigma-algebra for normed modules + sfun codomain sigma ring & module structure) Import MeasurableR. Lemma sintegral_giry_join (M : giry (giry T R) R) (h : {nnsfun T >-> R}) : diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v index 39122860ca..ad2b814d30 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v @@ -84,6 +84,7 @@ rewrite sintegralE fsbig1// => r _; rewrite preimage_cst. by case: ifPn => [/[!inE] <-|]; rewrite ?mul0e// measure0 mule0. Qed. +Import HBNNSimple. Lemma sintegral_ge0 (f : {nnsfun T >-> R}) : 0 <= sintegral mu f. Proof. by rewrite sintegralE fsume_ge0// => r _; exact: nnsfun_mulemu_ge0. Qed. @@ -139,6 +140,7 @@ Local Open Scope ereal_scope. Context d (T : sigmaRingType d) (R : realType). Variables (m : {measure set T -> \bar R}) (r : R) (f : {nnsfun T >-> R}). +Import HBNNSimple. Lemma sintegralrM : sintegral m (cst r \* f)%R = r%:E * sintegral m f. Proof. @@ -195,6 +197,7 @@ Section le_sintegral. Context d (T : measurableType d) (R : realType) (m : {measure set T -> \bar R}). Variables f g : {nnsfun T >-> R}. +Import HBNNSimple. Hypothesis fg : forall x, f x <= g x. @@ -211,6 +214,7 @@ Qed. End le_sintegral. Section is_cvg_sintegral. +Import HBNNSimple. Lemma is_cvg_sintegral d (T : measurableType d) (R : realType) (m : {measure set T -> \bar R}) (f : {nnsfun T >-> R}^nat) : @@ -227,6 +231,7 @@ Context d (T : measurableType d) (R : realType). Variable mu : {measure set T -> \bar R}. Variables (g : {nnsfun T >-> R}^nat) (f : {nnsfun T >-> R}). +Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~ x). Hypothesis gf : forall x, cvgn (g^~ x) -> f x <= limn (g^~ x). @@ -346,6 +351,7 @@ Context d (T : measurableType d) (R : realType). Variable mu : {measure set T -> \bar R}. Variables (g : {nnsfun T >-> R}^nat) (f : {nnsfun T >-> R}). +Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~ x). Hypothesis gf : forall x, g ^~ x @ \oo --> f x. @@ -372,6 +378,7 @@ Local Open Scope ereal_scope. Context d (T : measurableType d) (R : realType). Implicit Types (f g : T -> \bar R) (D : set T). +Import HBNNSimple. Let nnintegral mu f := ereal_sup [set sintegral mu h | h in [set h : {nnsfun T >-> R} | forall x, (h x)%:E <= f x]]. @@ -470,6 +477,7 @@ Context {d} {T : measurableType d} {R : realType}. Variables m1 m2 : {measure set T -> \bar R}. Hypothesis m12 : forall S, measurable S -> m1 S <= m2 S. +Import HBNNSimple. Lemma ge0_le_measure_integral (f : T -> \bar R) S : measurable S -> (forall x, 0 <= f x) -> measurable_fun [set: T] f -> @@ -488,6 +496,7 @@ Context d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}) (D : set T) (mD : measurable D). Implicit Type A : set T. +Import HBNNSimple. Lemma integral_indic A : measurable A -> \int[mu]_(x in D) (\1_A x)%:E = mu (A `&` D). @@ -506,6 +515,7 @@ Context {d} {T : measurableType d} {R : realType} Lemma integral_mkcond D f : \int[mu]_(x in D) f x = \int[mu]_x (f \_ D) x. Proof. by rewrite /integral patch_setT. Qed. +Import HBNNSimple. Lemma integralT_nnsfun (h : {nnsfun T >-> R}) : \int[mu]_x (h x)%:E = sintegral mu h. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v index c650da9ce9..41a86b07f3 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v @@ -81,6 +81,7 @@ Import MeasurableR. Let R : measurableType _ := measurableTypeR rT. Local Open Scope ereal_scope. +Import HBSimple. Lemma approximation_continuous_integrable (E : set _) (f : rT -> rT): measurable E -> mu E < +oo -> mu.-integrable E (EFin \o f) -> diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v index 1eb4406df9..2ede24962a 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v @@ -35,6 +35,7 @@ Variables (mu : {measure set T -> \bar R}) (f : T -> \bar R) Hypothesis f0 : forall x, 0 <= f x. Hypothesis mf : measurable_fun setT f. +Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~x). Hypothesis gf : forall x, EFin \o g^~ x @ \oo --> f x. @@ -89,6 +90,7 @@ Hypothesis f10 : forall x, D x -> 0 <= f1 x. Hypothesis mf1 : measurable_fun D f1. Hypothesis mf2 : measurable_fun D f2. +Import HBNNSimple. Lemma ge0_le_integral : (forall x, D x -> f1 x <= f2 x) -> \int[mu]_(x in D) f1 x <= \int[mu]_(x in D) f2 x. @@ -161,6 +163,7 @@ Local Definition max_g2' : (T -> R)^nat := Local Definition max_g2 : {nnsfun T >-> R}^nat := fun k => bigmax_nnsfun (g2^~ k) k. +Import HBNNSimple. Let is_cvg_g2 n t : cvgn (EFin \o (g2 n ^~ t)). Proof. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v index 5189d5c04f..a4af3f425b 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v @@ -85,6 +85,7 @@ Context d (T : measurableType d) (R : realType). Let sintegral_measure_zero (f : T -> R) : sintegral mzero f = 0. Proof. by rewrite sintegralE big1// => r _ /=; rewrite /mzero mule0. Qed. +Import HBNNSimple. Lemma integral_measure_zero (D : set T) (f : T -> \bar R) : \int[mzero]_(x in D) f x = 0. @@ -117,6 +118,7 @@ Context {d} {T : measurableType d} {R : realType} Hypothesis f0 : forall x, D x -> 0 <= f x. Hypothesis mf : measurable_fun D f. +Import HBNNSimple. Let ge0_integralZl_EFin_subproof k : (0 <= k)%R -> \int[mu]_(x in D) (k%:E * f x) = k%:E * \int[mu]_(x in D) f x. @@ -201,6 +203,7 @@ Hypothesis mf1 : measurable_fun D f1. Hypothesis f20 : forall x, D x -> 0 <= f2 x. Hypothesis mf2 : measurable_fun D f2. +Import HBNNSimple. Lemma ge0_integralD : \int[mu]_(x in D) (f1 x + f2 x) = \int[mu]_(x in D) f1 x + \int[mu]_(x in D) f2 x. @@ -446,6 +449,7 @@ rewrite !fsbig_set1 mul0e add0e preimage_restrict//. by rewrite ifN ?set0U ?setIidl//= notin_setE => /esym; exact/eqP. Qed. +Import HBNNSimple. Local Lemma integral_cstr r : \int[mu]_(x in D) r%:E = r%:E * mu D. Proof. @@ -687,6 +691,7 @@ Qed. End integral_measure_sum_nnsfun. Section integral_measure_add_nnsfun. +Import HBNNSimple. Lemma integral_measure_add_nnsfun d (T : measurableType d) (R : realType) (m1 m2 : {measure set T -> \bar R}) (D : set T) (mD : measurable D) @@ -705,6 +710,7 @@ Local Open Scope ereal_scope. Context {d} {T : measurableType d} {R : realType} (m_ : {measure set T -> \bar R}^nat). +Import HBNNSimple. Lemma ge0_integral_measure_sum (D : set T) (mD : measurable D) (f : T -> \bar R) : @@ -802,6 +808,7 @@ Context {d} {T : measurableType d} {R : realType} (m_ : {measure set T -> \bar R}^nat). Let m := mseries m_ O. +Import HBNNSimple. Lemma ge0_integral_measure_series (D : set T) (mD : measurable D) (f : T -> \bar R) : (forall t, D t -> 0 <= f t) -> diff --git a/theories/lebesgue_integral_theory/measurable_fun_approximation.v b/theories/lebesgue_integral_theory/measurable_fun_approximation.v index 6b238370f5..cc5f2ab413 100644 --- a/theories/lebesgue_integral_theory/measurable_fun_approximation.v +++ b/theories/lebesgue_integral_theory/measurable_fun_approximation.v @@ -351,6 +351,7 @@ Definition nnsfun_approx : {nnsfun T >-> R}^nat := fun n => locked (add_nnsfun else nnsfun0) (n * 2 ^ n)%N) (scale_nnsfun (indic_nnsfun _ (mB n)) (ler0n _ n))). +Import HBNNSimple. Lemma nnsfun_approxE n : nnsfun_approx n = approx n :> (T -> R). Proof. @@ -376,11 +377,13 @@ End approximation. Section approximation_sfun. Context d (T : measurableType d) (R : realType) (f : T -> \bar R). Variables (D : set T) (mD : measurable D) (mf : measurable_fun D f). -Import MeasurableR. + +Import HBSimple. (* NB: already instantiated in cardinality.v *) (*HB.instance Definition _ x : @FImFun T R (cst x) := FImFun.on (cst x).*) (* generates Warning: HB: no new instance is generated [HB.no-new-instance,HB,elpi,default] *) +Import HBNNSimple. (* NB: already instantiated in lebesgue_integral.v *) (*HB.instance Definition _ x : @NonNegFun T R (cst x%:num) := NonNegFun.on (cst x%:num).*) @@ -704,6 +707,7 @@ Let R : measurableType _ := measurableTypeR rT. Hypothesis mA : measurable A. Hypothesis finA : mu A < +oo. +Import HBSimple. Let lusin_simple (f : {sfun R >-> rT}) (eps : rT) : (0 < eps)%R -> exists K, [/\ compact K, K `<=` A, mu (A `\` K) < eps%:E & diff --git a/theories/probability_theory/normal_distribution.v b/theories/probability_theory/normal_distribution.v index ed296f469f..a2df3f5dc2 100644 --- a/theories/probability_theory/normal_distribution.v +++ b/theories/probability_theory/normal_distribution.v @@ -588,7 +588,6 @@ Section normal_prob_lemmas. Context {R : realType}. Local Notation mu := lebesgue_measure. Local Open Scope ereal_scope. -Import MeasurableR. Import MeasurableR. diff --git a/theories/probability_theory/uniform_distribution.v b/theories/probability_theory/uniform_distribution.v index 4ea91d5f4d..db21ea3dde 100644 --- a/theories/probability_theory/uniform_distribution.v +++ b/theories/probability_theory/uniform_distribution.v @@ -149,6 +149,7 @@ case: ifPn => //. by rewrite inE/= in_itv/= => axb; rewrite indicE (negbTE xE) mule0. Qed. +Import HBNNSimple. Let integral_uniform_nnsfun (f : {nnsfun _ >-> R}) : (\int[uniform_prob ab]_x (f x)%:E = diff --git a/theories/real_measure/lebesgue_stieltjes_measure.v b/theories/real_measure/lebesgue_stieltjes_measure.v index 946ab0ea68..0f9d55a829 100644 --- a/theories/real_measure/lebesgue_stieltjes_measure.v +++ b/theories/real_measure/lebesgue_stieltjes_measure.v @@ -1,6 +1,6 @@ (* mathcomp analysis (c) 2026 Inria and AIST. License: CeCILL-C. *) From HB Require Import structures. -From mathcomp Require Import boot order finmap ssralg ssrnum ssrint interval. +From mathcomp Require Import boot order finmap ssralg ssrnum ssrint algebra interval. From mathcomp Require Import interval_inference archimedean. #[warning="-warn-library-file-internal-analysis"] From mathcomp Require Import unstable. From bf3fdfd52302ce85db7058d1ad1c87d2594cda26 Mon Sep 17 00:00:00 2001 From: arthurd Date: Tue, 10 Nov 2026 12:24:19 +0100 Subject: [PATCH 04/38] small fixes --- .../simple_functions.v | 187 +++++------------- .../real_measure/lebesgue_stieltjes_measure.v | 41 ++-- theories/topology_theory/metric_structure.v | 14 ++ 3 files changed, 73 insertions(+), 169 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 63ec57e9ae..71977785e5 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -28,9 +28,8 @@ From mathcomp Require Import real_measure numfun realfun. (* *) (* Detailed contents: *) (* ```` *) -(* {sfun aT >-> bT} == type of simple functions *) -(* They can form a ring or a module depending on *) -(* the structure of bT *) +(* {sfun T >-> R} == type of simple functions *) +(* They form a (potentially zero) ring. *) (* {nnsfun T >-> R} == type of non-negative simple functions *) (* indic_sfun mD := mindic _ mD *) (* cst_sfun r == constant simple function *) @@ -74,19 +73,24 @@ Local Open Scope ring_scope. Module HBSimple. Import MeasurableR. -HB.structure Definition SimpleFun d d' - (aT : sigmaRingType d) (rT : sigmaRingType d') := - {f of @isMeasurableFun d d' aT rT f & @FiniteImage aT rT f}. +HB.structure Definition SimpleFun d (aT : sigmaRingType d) (rT : realType) := + {f of @isMeasurableFun d _ aT rT f & @FiniteImage aT rT f}. -Notation "{ 'sfun' aT >-> T }" := (@SimpleFun.type _ _ aT T) : form_scope. +End HBSimple. + +Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ aT T) : form_scope. Notation "[ 'sfun' 'of' f ]" := [the {sfun _ >-> _} of f] : form_scope. +Module HBNNSimple. +Import HBSimple. HB.structure Definition NonNegSimpleFun d (aT : sigmaRingType d) (rT : realType) := - {f of @SimpleFun d _ aT rT f & @NonNegFun aT rT f}. + {f of @SimpleFun d _ _ f & @NonNegFun aT rT f}. + +End HBNNSimple. -Notation "{ 'nnsfun' aT >-> T }" := (@NonNegSimpleFun.type _ aT%type T) : form_scope. +Notation "{ 'nnsfun' aT >-> T }" := (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. Notation "[ 'nnsfun' 'of' f ]" := [the {nnsfun _ >-> _} of f] : form_scope. Section sfun_pred. @@ -100,18 +104,19 @@ Lemma sub_sfun_fimfun : {subset sfun <= fimfun}. Proof. by move=> x /andP[]. Qed End sfun_pred. Section sfun. -Context {d d'} {aT : measurableType d} {rT : measurableType d'}. +Context {d} {aT : measurableType d} {rT : realType}. Notation T := {sfun aT >-> rT}. -Notation sfun := (@sfun _ _ aT rT). +Notation sfun := (@sfun _ aT rT). Section Sub. Context (f : aT -> rT) (fP : f \in sfun). Import MeasurableR. Definition sfun_Sub1_subproof := - @isMeasurableFun.Build d d' aT rT f (set_mem (sub_sfun_mfun fP)). + @isMeasurableFun.Build d _ aT rT f (set_mem (sub_sfun_mfun fP)). #[local] HB.instance Definition _ := sfun_Sub1_subproof. Definition sfun_Sub2_subproof := @FiniteImage.Build aT rT f (set_mem (sub_sfun_fimfun fP)). +Import HBSimple. #[local] HB.instance Definition _ := sfun_Sub2_subproof. Definition sfun_Sub := [sfun of f]. @@ -126,6 +131,7 @@ have -> : Pf2 = set_mem (sub_sfun_fimfun Pf) by []. exact: Ksub. Qed. +Import HBSimple. Lemma sfun_valP f (Pf : f \in sfun) : sfun_Sub Pf = f :> (_ -> _). Proof. by []. Qed. @@ -149,9 +155,9 @@ Lemma cst_sfunE x : @cst_sfun x =1 cst x. Proof. by []. Qed. End sfun. (* a better way to refactor function stuffs *) -Lemma fctD (T : Type) (N : nmodType) (f g : T -> N) : f + g = f \+ g. +Lemma fctD (T : Type) (K : pzRingType) (f g : T -> K) : f + g = f \+ g. Proof. by []. Qed. -Lemma fctN (T : Type) (N : zmodType) (f : T -> N) : - f = \- f. +Lemma fctN (T : Type) (K : pzRingType) (f : T -> K) : - f = \- f. Proof. by []. Qed. Lemma fctM (T : Type) (K : pzRingType) (f g : T -> K) : f * g = f \* g. Proof. by []. Qed. @@ -164,20 +170,32 @@ Definition fctWE := (fctD, fctN, fctM, fctZ). Section ring. Context d (aT : measurableType d) (rT : realType). -Lemma sfun_subring_closed : subring_closed (@sfun d _ aT rT). +Lemma sfun_subring_closed : subring_closed (@sfun d aT rT). Proof. by split=> [|f g|f g]; rewrite ?inE/= ?rpred1//; move=> /andP[/= mf ff] /andP[/= mg fg]; rewrite !(rpredB, rpredM). Qed. -HB.instance Definition _ := GRing.isSubringClosed.Build _ (@sfun d _ aT rT) +HB.instance Definition _ := GRing.isSubringClosed.Build _ sfun sfun_subring_closed. HB.instance Definition _ := [SubChoice_isSubComPzRing of {sfun aT >-> rT} by <:]. Implicit Types (f g : {sfun aT >-> rT}). +Import HBSimple. + +Lemma sfun0 : (0 : {sfun aT >-> rT}) =1 cst 0. Proof. by []. Qed. Lemma sfun1 : (1 : {sfun aT >-> rT}) =1 cst 1. Proof. by []. Qed. +Lemma sfunN f : - f =1 \- f. Proof. by []. Qed. +Lemma sfunD f g : f + g =1 f \+ g. Proof. by []. Qed. +Lemma sfunB f g : f - g =1 f \- g. Proof. by []. Qed. Lemma sfunM f g : f * g =1 f \* g. Proof. by []. Qed. +Lemma sfun_sum I r (P : {pred I}) (f : I -> {sfun aT >-> rT}) (x : aT) : + (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. +Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. +Lemma sfun_prod I r (P : {pred I}) (f : I -> {sfun aT >-> rT}) (x : aT) : + (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. +Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. Lemma sfunX f n : f ^+ n =1 (fun x => f x ^+ n). Proof. by move=> x; elim: n => [|n IHn]//; rewrite !exprS sfunM/= IHn. Qed. @@ -188,6 +206,7 @@ HB.instance Definition _ f g := MeasurableFun.copy (\- f) (- f). HB.instance Definition _ f g := MeasurableFun.copy (f \- g) (f - g). HB.instance Definition _ f g := MeasurableFun.copy (f \* g) (f * g). +Import HBSimple. (* TODO: mv to `measurable_realfun.v`? *) HB.instance Definition _ (D : set aT) (mD : measurable D) : @@ -195,130 +214,12 @@ HB.instance Definition _ (D : set aT) (mD : measurable D) : Definition indic_sfun (D : set aT) (mD : measurable D) : {sfun aT >-> rT} := mindic rT mD. -End ring. +HB.instance Definition _ k f := MeasurableFun.copy (k \o* f) (f * cst_sfun k). +Definition scale_sfun k f : {sfun aT >-> rT} := k \o* f. +End ring. Arguments indic_sfun {d aT rT} _. -Section sfun_lmodType. -Context d (aT : measurableType d) (R : realType) (N : normedModType R). - -Lemma mem_sfun_comp_pair (U V W : normedModType R) (f : {sfun aT >-> U}) - (g : {sfun aT >-> V}) (h : U * V -> W) : - (fun x => h (f x, g x)) \in @sfun _ _ aT W. -Proof. -rewrite inE; apply/andP; split; rewrite inE/=. - move=> _ Y mY; rewrite setTI. - rewrite (_ : _ @^-1` Y = - \bigcup_(a in range f) (\bigcup_(b in range g) - ((f @^-1` [set a] `&` g @^-1` [set b]) `&` [set _ | Y (h (a, b))]))). - apply/seteqP; split=> [x/= Yfg|x [a _] [b _] [[/= <- <-]]//]. - by exists (f x); [exists x|exists (g x); [exists x|]]. - apply: fin_bigcup_measurable; first exact: fimfunP. - move=> a _; apply: fin_bigcup_measurable; first exact: fimfunP. - move=> b _; apply: measurableI. - exact: measurableI. - have [Yhab|Yhab] := pselect (Y (h (a, b))). - by rewrite (_ : [set _ | _] = setT); - [apply/seteqP; split|exact: measurableT]. - rewrite (_ : [set _ | _] = set0); last exact: measurable0. - by apply/seteqP; split. -apply: (@sub_finite_set _ _ (h @` (range f `*` range g))). - by move=> _ [x _ <-]/=; exists (f x, g x) => //; split; exists x. -exact/finite_image/finite_setX/fimfunP. -Qed. - -Lemma sfun_submod_closed : - submod_closed (@sfun _ _ aT N). -Proof. -split=> [|k f g sf sg]; first exact: (valP (cst_sfun (0 : N))). -exact: (mem_sfun_comp_pair (sfun_Sub sf) (sfun_Sub sg) (fun t => k *: t.1 + t.2)). -Qed. - -HB.instance Definition _ := - GRing.isSubmodClosed.Build _ _ (@sfun _ _ aT N) - sfun_submod_closed. -HB.instance Definition _ := - [SubChoice_isSubLmodule of {sfun aT >-> N} by <:]. - -Implicit Types (f g : {sfun aT >-> N} : lmodType _). - -Lemma sfun0 : (0 : {sfun aT >-> N} : lmodType _) =1 cst 0. Proof. by []. Qed. -Lemma sfunN f : - f =1 \- f. Proof. by []. Qed. -Lemma sfunD f g : f + g =1 f \+ g. Proof. by []. Qed. -Lemma sfunB f g : f - g =1 f \- g. Proof. by []. Qed. -Lemma sfunZ k f : k *: f =1 k \*: f. Proof. by []. Qed. -Lemma sfun_sum I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : - (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. -Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. -Lemma sfun_prod I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : - (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. -Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. - -HB.instance Definition _ f g := MeasurableFun.copy (f \+ g) (f + g). -HB.instance Definition _ f g := MeasurableFun.copy (\- f) (- f). -HB.instance Definition _ f g := MeasurableFun.copy (f \- g) (f - g). -HB.instance Definition _ k f := MeasurableFun.copy (k \*: f) (k *: f). - -End sfun_lmodType. - -(* This could be moved elsewhere *) -Section indic_lmod. -Context {T : Type} {K : pzRingType} {L : lmodType K}. - -Definition indic_lmod (A : set T) (z : L) := ( *:%R^~ z) \o \1_A. - -Lemma indic_lmodE A z : indic_lmod A z = (fun x => if x \in A then z else 0). -Proof. -by apply/funext=> x; rewrite/indic_lmod/= indicE; -case: ifPn=> _ /=; rewrite ?scale0r ?scale1r. -Qed. - -Lemma image_indic_lmod_sub A z D : (indic_lmod A z) @` D `<=` [set 0;z]. -Proof. -rewrite -image_comp; apply: (subset_trans (image_subset ( *:%R ^~ z) _)); - first exact: image_indic_sub. -move=> y /= [x [->|->]]; rewrite ?scale0r ?scale1r=> ->; first by left. by right. -Qed. - -Lemma preimage_indic_lmod A (B : set L) (z : L) : - (indic_lmod A z) @^-1` B = if z \in B then if 0 \in B then [set: T] else A - else if 0 \in B then ~` A else set0. -Proof. -rewrite comp_preimage preimage_indic. by do 4 (case: ifPn => [|]); - rewrite ?in_setE ?notin_setE //= ?scale0r ?scale1r. -Qed. - -Lemma indic_lmod_fimfun_subproof (A : set T) (z : L) : -@FiniteImage T L (indic_lmod A z). Proof. by []. Qed. - -HB.instance Definition _ A z := @indic_lmod_fimfun_subproof A z. - -End indic_lmod. - -Section mindic_lmod. -Context d {aT : measurableType d} {rT : realType} {nT : normedModType rT}. - -Definition mindic_lmod (A : set aT) (mA : measurable A) := - @indic_lmod aT rT nT A. - -Lemma measurable_indic_lmod {D} (A : set aT) (mA : d.-measurable A) (z:nT) : -measurable_fun D (mindic_lmod mA z). -Proof. -move=> mD Y mY; rewrite preimage_indic_lmod //. -do 2 (case: ifP => _); apply: measurableI=>//; exact: measurableC. -Qed. - -HB.instance Definition _ A mA z := @isMeasurableFun.Build _ _ aT nT - (mindic_lmod mA z) (@measurable_indic_lmod [set: aT] A mA z). - -HB.instance Definition _ (D : set aT) (mD : measurable D) (z : nT) : - @FImFun aT nT (mindic_lmod mD z) := FImFun.on (mindic_lmod mD z). - -Definition mindic_lmod_sfun (D : set aT) (mD : measurable D) (z : nT) : - {sfun aT >-> nT} := mindic_lmod mD z. - -End mindic_lmod. - Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : t < 0 -> f @^-1` [set t] = set0. Proof. @@ -334,13 +235,11 @@ by split=> [z/= <-|z/= ->]; rewrite [x * _]mulrC (mulfK, divfK). Qed. Section simple_bounded. -<<<<<<< HEAD Context {d} {T : sigmaRingType d} {R : realType}. -======= -Context d (T : sigmaRingType d) (R : realType) (N : normedModType R). ->>>>>>> b5e0fd857 (sigma-algebra for normed modules + sfun codomain sigma ring & module structure) -Lemma simple_bounded (f : {sfun T >-> N}) : bounded_fun f. +Import HBSimple. + +Lemma simple_bounded (f : {sfun T >-> R}) : bounded_fun f. Proof. have /finite_seqP[r fr] := fimfunP f. exists (fine (\big[maxe/-oo%E]_(i <- r) `|i|%:E)). @@ -432,6 +331,7 @@ Definition proj_nnsfun d (T : measurableType d) (R : realType) mul_nnsfun f (indic_nnsfun R mA). Section mrestrict. +Import HBNNSimple. Lemma mrestrict d (T : measurableType d) (R : realType) (f : {nnsfun T >-> R}) A (mA : measurable A) : f \_ A = proj_nnsfun f mA. @@ -448,6 +348,7 @@ Variable f : {nnsfun T >-> R}^nat. Definition sum_nnsfun n := \big[add_nnsfun/nnsfun0]_(i < n) f i. +Import HBNNSimple. Lemma sum_nnsfunE n t : sum_nnsfun n t = \sum_(i < n) (f i t). Proof. by rewrite /sum_nnsfun; elim/big_ind2 : _ => [|x g y h <- <-|]. Qed. @@ -464,6 +365,7 @@ Local Open Scope ereal_scope. Context d (T : measurableType d) (R : realType). Variable f : {nnsfun T >-> R}. +Import HBNNSimple. Lemma nnsfun_cover : \big[setU/set0]_(i \in range f) (f @^-1` [set i]) = setT. Proof. by rewrite fsbig_setU//= -subTset => x _; exists (f x). Qed. @@ -535,6 +437,7 @@ by move=> xA; rewrite (@mulef_ge0 _ _ (mu \o _))//= => /xA ->; rewrite measure0. Qed. Global Arguments mulemu_ge0 {d T R mu x} A. +Import HBNNSimple. Lemma nnsfun_mulemu_ge0 d (T : sigmaRingType d) (R : realType) (mu : {measure set T -> \bar R}) (f : {nnsfun T >-> R}) x : diff --git a/theories/real_measure/lebesgue_stieltjes_measure.v b/theories/real_measure/lebesgue_stieltjes_measure.v index 0f9d55a829..77bc93a252 100644 --- a/theories/real_measure/lebesgue_stieltjes_measure.v +++ b/theories/real_measure/lebesgue_stieltjes_measure.v @@ -463,21 +463,6 @@ Qed. End rgenopensets. End RGenOpenSets. -(* Could be moved elsewhere and generalized to metric spaces *) -Section normed_lemmas. -Context {R : realType} {N : normedModType R}. - -Lemma set1_bigcap_ball (x : N) : [set x] = \bigcap_n ball x n.+1%:R^-1. -Proof. -rewrite eqEsubset/bigcap; split=> [y -> n _ | y /= bn]/=. - by apply: ballxx; rewrite invr_gt0. -apply: close_eq _=>//; rewrite ball_close=> e0; rewrite ball_symE. -apply: (le_ball _ (bn (truncn e0%:num^-1) I)). rewrite invf_ple ?posrE//. -exact: (ltW (truncnS_gt _)). -Qed. - -End normed_lemmas. - (* Should be moved to a more general file *) Section open. Context {R : realType} {N : normedModType R}. @@ -507,22 +492,23 @@ Notation "N .-open" := (sigma_display (@open N)) : measure_display_scope. Notation "N .-open.-measurable" := (measurable : set_system (@open_type _ N)) : classical_set_scope. -Module MeasurableOpen. +Module MeasurableNormedModuleOpen. Section measurableOpen. Context {R : realType} {N : normedModType R}. +Import numFieldNormedType.Exports. -Definition measurableTypeO := g_sigma_algebraType (@open N). +Definition measurableTypeNormedModule := g_sigma_algebraType (@open N). Definition borel_display : measure_display := N.-open. -Definition measurableO : set_system N := N.-open.-measurable. +Definition measurableNormedModule : set_system N := N.-open.-measurable. -HB.instance Definition _ : Measurable borel_display measurableTypeO := - Measurable.on measurableTypeO. +HB.instance Definition _ : Measurable borel_display measurableTypeNormedModule := + Measurable.on measurableTypeNormedModule. (* Presumably it is safe to use NFI here because morally R is unique and nothing else can be used here *) #[non_forgetful_inheritance] -HB.instance Definition _ := Measurable.copy N measurableTypeO. +HB.instance Definition _ := Measurable.copy N measurableTypeNormedModule. Lemma measurable_set1 (x : N) : measurable [set x]. Proof. @@ -535,14 +521,14 @@ Lemma measurable_ball_norm (x : N) e : measurable (ball x e). Proof. by apply: (sub_sigma_algebra (ball_open _ _)). Qed. End measurableOpen. -Arguments measurableTypeO : clear implicits. +Arguments measurableTypeNormedModule : clear implicits. #[global] Hint Extern 0 (measurable (_ @^-1` [set _])) => solve [apply: measurable_funPTI; exact: measurable_set1] : core. #[global] Hint Extern 0 (measurable [set _]) => solve [apply: measurable_set1] : core. -Lemma measurable_funP1 {d} {aT : measurableType d} {rT : realType} +Lemma measurable_funP1 {d} {aT : measurableType d} {rT : realType} {nT : normedModType rT} (f : {mfun aT >-> nT}) D (z : nT) : measurable D -> measurable (D `&` f @^-1` [set z]). Proof. by move=> /(measurable_funP f); exact. Qed. @@ -555,11 +541,12 @@ Section measurableReal. Context {R : realType}. Import numFieldNormedType.Exports. -Definition measurableTypeR := @measurableTypeO R R. +Definition measurableTypeR := @measurableTypeNormedModule R R. Definition lebesgue_display : measure_display := @borel_display R R. -Definition measurableR := @measurableO R R. +Definition measurableR := @measurableNormedModule R R. + (* Shouldn't be needing ideally... *) HB.instance Definition _ := Measurable.copy R measurableTypeR. @@ -575,11 +562,11 @@ Arguments measurableTypeR : clear implicits. #[global] Hint Extern 0 (measurable [set` _] ) => exact: measurable_itv : core. -End MeasurableOpen. +End MeasurableNormedModuleOpen. Module MeasurableR. Export numFieldNormedType.Exports. -Export MeasurableOpen. +Export MeasurableNormedModuleOpen. End MeasurableR. Section ocitv_measure. diff --git a/theories/topology_theory/metric_structure.v b/theories/topology_theory/metric_structure.v index 06f4b1a94e..7eba93cbab 100644 --- a/theories/topology_theory/metric_structure.v +++ b/theories/topology_theory/metric_structure.v @@ -109,6 +109,20 @@ Qed. End metric_numFieldType. +Section metric_archiRealFieldType. +Context {R : archiRealFieldType} {N : metricType R}. + +Lemma set1_bigcap_ball (x : N) : [set x] = \bigcap_n ball x n.+1%:R^-1. +Proof. +rewrite eqEsubset; split=> [y -> n _ | y /= bn]/=; first by apply: ballxx; + rewrite invr_gt0. +apply: close_eq _=>//; first exact: metric_hausdorff; rewrite ball_close=> e0; +rewrite ball_symE. apply: (le_ball _ (bn (truncn e0%:num^-1) I)). +by rewrite invf_ple ?posrE//; exact: (ltW (truncnS_gt _)). +Qed. + +End metric_archiRealFieldType. + Section prod_metric. Context {K : numDomainType} (T U : metricType K). From d5cfc5588f65b322b4adbe24d99e560711956d2e Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Thu, 12 Nov 2026 21:27:40 +0900 Subject: [PATCH 05/38] add normedtype_measure.v --- _CoqProject | 1 + theories/Make | 1 + .../lebesgue_integral_differentiation.v | 6 +- .../lebesgue_integral_nonneg.v | 6 +- .../measurable_fun_approximation.v | 2 +- theories/probability_theory/random_variable.v | 8 +- theories/real_measure/lebesgue_measure.v | 17 +- .../real_measure/lebesgue_stieltjes_measure.v | 175 +++++------------- theories/real_measure/measurable_realfun.v | 48 +++-- theories/real_measure/normedtype_measure.v | 116 ++++++++++++ 10 files changed, 203 insertions(+), 177 deletions(-) create mode 100644 theories/real_measure/normedtype_measure.v diff --git a/_CoqProject b/_CoqProject index 0dcbd12ffa..e3cf7974b9 100644 --- a/_CoqProject +++ b/_CoqProject @@ -116,6 +116,7 @@ theories/measure_theory/measurable_function.v theories/measure_theory/signed_measure.v theories/measure_theory/measure.v +theories/real_measure/normedtype_measure.v theories/real_measure/lebesgue_stieltjes_measure.v theories/real_measure/lebesgue_measure.v theories/real_measure/measurable_realfun.v diff --git a/theories/Make b/theories/Make index 15781fc7db..3120733ea3 100644 --- a/theories/Make +++ b/theories/Make @@ -83,6 +83,7 @@ measure_theory/measurable_function.v measure_theory/signed_measure.v measure_theory/measure.v +real_measure/normedtype_measure.v real_measure/lebesgue_stieltjes_measure.v real_measure/lebesgue_measure.v real_measure/measurable_realfun.v diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v index 41a86b07f3..ab9855cd3d 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v @@ -58,7 +58,7 @@ Section continuous_compact_integrable. Context {rT : realType}. Let mu : measure _ _ := @lebesgue_measure rT. Import MeasurableR. -Let R : measurableType _ := measurableTypeR rT. +Let R : measurableType _ := (*measurableTypeR*) rT. Local Open Scope ereal_scope. Lemma continuous_compact_integrable (f : R -> R^o) (A : set R^o) : @@ -78,7 +78,7 @@ Section continuous_density_L1. Context (rT : realType). Let mu : measure _ _ := @lebesgue_measure rT. Import MeasurableR. -Let R : measurableType _ := measurableTypeR rT. +Let R : measurableType _ := (*measurableTypeR*) rT. Local Open Scope ereal_scope. Import HBSimple. @@ -180,7 +180,7 @@ Section lebesgue_differentiation_continuous. Context {rT : realType}. Let mu : measure _ _ := @lebesgue_measure rT. Import MeasurableR. -Let R : measurableType _ := measurableTypeR rT. +Let R : measurableType _ := (*measurableTypeR*) rT. Let ballE (x : R) (r : {posnum rT}) : ball x r%:num = `](x - r%:num), (x + r%:num)[%classic :> set rT. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v index a4af3f425b..c142c7979c 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v @@ -557,7 +557,7 @@ Local Notation mu := lebesgue_measure. Import MeasurableR. Lemma lebesgue_measureN (A : set R) : measurable A -> - pushforward mu (-%R : _ -> measurableTypeR R) A = mu A. + pushforward mu (-%R : _ -> (*measurableTypeR*) R) A = mu A. Proof. move=> mA; apply/esym/lebesgue_measure_unique => //= _ [[a b]] _ <-. rewrite /pushforward opp_preimage_itvbndbnd/= !lebesgue_measure_itv/=. @@ -569,7 +569,7 @@ Lemma ge0_integration_by_substitution0 (f : R -> \bar R) : \int[mu]_(r in `[0%R, +oo[) f r = \int[mu]_(r in `]-oo, 0%R]) f (- r)%R. Proof. move=> mf f0; rewrite (_ : `]-oo, 0%R]%classic = - (-%R : _ -> measurableTypeR R) @^-1` `[0%R, +oo[). + (-%R : _ -> (*measurableTypeR*) R) @^-1` `[0%R, +oo[). by rewrite opp_preimage_itvbndy oppr0. rewrite -ge0_integral_pushforward//=; first exact: measurable_funS mf. by apply: eq_measure_integral => //= A mA AS; exact/esym/lebesgue_measureN. @@ -1068,7 +1068,7 @@ End integral_patch. Section ge0_cvgn_integral. Local Open Scope ereal_scope. Import MeasurableR. -Context {R : realType} (mu : {measure set (@measurableTypeR R) -> \bar R}) +Context {R : realType} (mu : {measure set ((*@measurableTypeR*) R) -> \bar R}) (f : R -> R). Hypothesis f0 : (forall x, 0 <= f x)%R. diff --git a/theories/lebesgue_integral_theory/measurable_fun_approximation.v b/theories/lebesgue_integral_theory/measurable_fun_approximation.v index cc5f2ab413..8794f07ef1 100644 --- a/theories/lebesgue_integral_theory/measurable_fun_approximation.v +++ b/theories/lebesgue_integral_theory/measurable_fun_approximation.v @@ -703,7 +703,7 @@ Hint Extern 0 (hausdorff_space _) => (exact: Rhausdorff) : core. Local Open Scope ereal_scope. Context (rT : realType) (A : set rT). Let mu : measure _ _ := @lebesgue_measure rT. -Let R : measurableType _ := measurableTypeR rT. +Let R : measurableType _ := rT(*measurableTypeR rT*). Hypothesis mA : measurable A. Hypothesis finA : mu A < +oo. diff --git a/theories/probability_theory/random_variable.v b/theories/probability_theory/random_variable.v index efebbbfa82..bcd8f48fef 100644 --- a/theories/probability_theory/random_variable.v +++ b/theories/probability_theory/random_variable.v @@ -381,7 +381,7 @@ Context {R : realType} (f : cumulativeBounded (0:R) (1:R)). Local Open Scope measure_display_scope. Import MeasurableR. -Let idTR : measurableTypeR R -> R := idfun. +Let idTR : (*measurableTypeR*) R -> R := idfun. #[local] HB.instance Definition _ := @isMeasurableFun.Build _ _ _ _ idTR (@measurable_id _ _ setT). @@ -410,10 +410,10 @@ End cdf_of_lebesgue_stieltjes_measure. Section lebesgue_stieltjes_measure_of_cdf. Import MeasurableR. -Context {R : realType} (P : probability (measurableTypeR R) R). +Context {R : realType} (P : probability ((*measurableTypeR*) R) R). Local Open Scope measure_display_scope. -Let idTR : measurableTypeR R -> R := idfun. +Let idTR : (*measurableTypeR*) R -> R := idfun. #[local] HB.instance Definition _ := @isMeasurableFun.Build _ _ _ _ idTR (@measurable_id _ _ setT). @@ -626,7 +626,7 @@ Let mu : {measure set _ -> \bar R} := @lebesgue_measure R. Lemma ge0_expectation_ccdf (X : {RV P >-> R}) : (forall x, 0 <= X x)%R -> 'E_P[X] = \int[mu]_(r in `[0%R, +oo[) ccdf X r. Proof. -pose GR := measurableTypeR R. +pose GR := (*measurableTypeR*) R. pose distrX := distribution P X. pose D : set R := `[0%R, +oo[%classic. move=> X_ge0. diff --git a/theories/real_measure/lebesgue_measure.v b/theories/real_measure/lebesgue_measure.v index 246eff542f..9102eec35a 100644 --- a/theories/real_measure/lebesgue_measure.v +++ b/theories/real_measure/lebesgue_measure.v @@ -8,7 +8,7 @@ From mathcomp Require Import boolp classical_sets functions cardinality fsbigop reals. From mathcomp Require Import topology ereal numfun normedtype sequences esum measure. -From mathcomp Require Export lebesgue_stieltjes_measure measurable_realfun. +From mathcomp Require Export normedtype_measure lebesgue_stieltjes_measure measurable_realfun. (**md**************************************************************************) (* # Lebesgue Measure *) @@ -572,9 +572,7 @@ apply: (@measure_semi_sigma_additive _ _ _ (@lebesgue_measure R) move=> [X mX [X' mX']] XX'Fn. apply: measurable_image_fine. rewrite -XX'Fn. - apply: measurableU. - apply: measurable_image_EFin. - by rewrite RGenOpenSets.measurableE/= in mX. + apply: measurableU; first exact: measurable_image_EFin. by case: mX' => //; exact: measurableU. - move=> i j _ _ [x [[a [Fia aoo ax] [b [Fjb boo] bx]]]]. move: tF => /(_ i j Logic.I Logic.I); apply. @@ -591,17 +589,16 @@ apply: (@measure_semi_sigma_additive _ _ _ (@lebesgue_measure R) + by rewrite not_orP => -[]/(_ erefl). + by rewrite not_orP => -[]/(_ erefl). - move: mUF. - rewrite {1}/measurable /emeasurable /= => -[X mX [Y []]] {Y}; - have moX : measurable X by rewrite -RGenOpenSets.measurableE. + rewrite {1}/measurable /emeasurable /= => -[X mX [Y []]] {Y}. + rewrite setU0 => h. - rewrite [X in measurable X](_ : _ = X) // predeqE => r; split => [|Xr]. + rewrite [X in measurable X](_ : _ = X)// predeqE => r; split => [|Xr]. move=> -[n _ [x [Fnx xoo <-{r}]]]. have : (\bigcup_n F n) x by exists n. by rewrite -h => -[x' Xx' <-]. have [n _ Fnr] : (\bigcup_n F n) r%:E by rewrite -h; exists r. by exists n => //; exists r%:E => //; split => // -[]. + move=> h. - rewrite [X in measurable X](_ : _ = X) // predeqE => r; split => [|Xr]. + rewrite [X in measurable X](_ : _ = X)// predeqE => r; split => [|Xr]. move=> -[n _ [x [Fnx xoo <-]]]. have : (\bigcup_n F n) x by exists n. by rewrite -h => -[[x' Xx' <-//]|xoo']; move/not_orP : xoo => -[]. @@ -609,14 +606,14 @@ apply: (@measure_semi_sigma_additive _ _ _ (@lebesgue_measure R) by exists n => //; exists r%:E => //; split => // -[]. + (* NB: almost the same as the previous one, factorize?*) move=> h. - rewrite [X in measurable X](_ : _ = X) // predeqE => r; split => [|Xr]. + rewrite [X in measurable X](_ : _ = X)// predeqE => r; split => [|Xr]. move=> -[n _ [x [Fnx xoo <-]]]. have : (\bigcup_n F n) x by exists n. by rewrite -h => -[[x' Xx' <-//]|xoo']; move/not_orP : xoo => -[]. have [n _ Fnr] : (\bigcup_n F n) r%:E by rewrite -h; left; exists r. by exists n => //; exists r%:E => //; split => // -[]. + move=> h. - rewrite [X in measurable X](_ : _ = X) // predeqE => r; split => [|Xr]. + rewrite [X in measurable X](_ : _ = X)// predeqE => r; split => [|Xr]. move=> -[n _ [x [Fnx xoo <-]]]. have : (\bigcup_n F n) x by exists n. by rewrite -h => -[[x' Xx' <-//]|]. diff --git a/theories/real_measure/lebesgue_stieltjes_measure.v b/theories/real_measure/lebesgue_stieltjes_measure.v index 77bc93a252..dea64c85ea 100644 --- a/theories/real_measure/lebesgue_stieltjes_measure.v +++ b/theories/real_measure/lebesgue_stieltjes_measure.v @@ -6,7 +6,7 @@ From mathcomp Require Import interval_inference archimedean. From mathcomp Require Import unstable. From mathcomp Require Import boolp classical_sets fsbigop cardinality. From mathcomp Require Import reals ereal topology normedtype sequences esum - measure realfun. + measure realfun normedtype_measure. (**md**************************************************************************) (* # Lebesgue Stieltjes Measure *) @@ -30,7 +30,7 @@ From mathcomp Require Import reals ereal topology normedtype sequences esum (* The HB class is CumulativeBounded. *) (* ``` *) (* *) -(* The modules RGenOInfty, RGenInftyO, RGenCInfty, RGenOpens, ROpenSets *) +(* The modules RGenOInfty, RGenInftyO, RGenCInfty, RGenItvoo, ROpenSets *) (* provide proofs of equivalence between the sigma-algebra generated by *) (* open-closed intervals and the sigma-algebras generated by open rays, *) (* closed rays, open intervals, and open sets. *) @@ -43,7 +43,6 @@ From mathcomp Require Import reals ereal topology normedtype sequences esum (* x and y are real numbers *) (* R.-ocitv == display for ocitv_type R *) (* R.-ocitv.-measurable == semiring of sets of open-closed intervals *) -(* open_type R == alias for R : realType *) (* R.-open := sigma_display (@open R) *) (* R.-open.-measurable == sigma-algebra generated by open sets *) (* ``` *) @@ -54,9 +53,7 @@ From mathcomp Require Import reals ereal topology normedtype sequences esum (* measurableTypeR R == measurableType generated by *) (* R.-ocitv or R.-open *) (* @lebesgue_display R == (measure_)display for the sigma-algebra *) -(* generated by R.-ocitv or R.-open *) -(* @measurableR R == measurable sets generated by *) -(* R.-ocitv or R.-open *) +(* generated by R.-open *) (* ``` *) (* The module `MeasurableR` contains the default sigma-algebra, which is *) (* `MeasurableRopen`. The latter contains in addition: *) @@ -97,9 +94,6 @@ Local Open Scope ring_scope. Reserved Notation "R .-ocitv" (at level 1, format "R .-ocitv"). Reserved Notation "R .-ocitv.-measurable" (at level 2, format "R .-ocitv.-measurable"). -Reserved Notation "R .-open" (at level 1, format "R .-open"). -Reserved Notation "R .-open.-measurable" - (at level 2, format "R .-open.-measurable"). Notation right_continuous f := (forall x, f%function @ at_right x --> f%function x). @@ -167,11 +161,11 @@ Definition ocitv := [set `]x.1, x.2]%classic | x in [set: R * R]]. Lemma is_ocitv a b : ocitv `]a, b]%classic. Proof. by exists (a, b); split => //=; rewrite in_itv/= andbT. Qed. -Hint Extern 0 (ocitv _) => solve [apply: is_ocitv] : core. +#[local] Hint Extern 0 (ocitv _) => solve [apply: is_ocitv] : core. Lemma ocitv0 : ocitv set0. Proof. by exists (1, 0); rewrite //= set_itv_ge ?bnd_simp//= ltr10. Qed. -Hint Resolve ocitv0 : core. +#[local] Hint Resolve ocitv0 : core. Lemma ocitvP X : ocitv X <-> X = set0 \/ exists2 x, x.1 < x.2 & X = `]x.1, x.2]%classic. Proof. @@ -234,41 +228,40 @@ Context {R : realType}. Definition measurableTypeR := g_sigma_algebraType (@ocitv R). -Definition lebesgue_display : measure_display := (@ocitv R).-sigma. +Let ocitv_lebesgue_display : measure_display := (@ocitv R).-sigma. -Definition measurableR : set_system R := (@ocitv R).-sigma.-measurable. +Let measurableR : set_system R := (@ocitv R).-sigma.-measurable. -HB.instance Definition _ : Measurable lebesgue_display measurableTypeR := +HB.instance Definition _ : Measurable ocitv_lebesgue_display measurableTypeR := Measurable.on measurableTypeR. (* Presumably it is safe to use NFI here because morally R is unique and nothing else can be used here *) #[non_forgetful_inheritance] HB.instance Definition _ := Measurable.copy R measurableTypeR. -Lemma measurable_set1 (r : R) : measurable [set r]. +Lemma ocitv_measurable_set1 (r : R) : measurable [set r]. Proof. rewrite set1_bigcap_oc; apply: bigcap_measurable => // k _. by apply: sub_sigma_algebra; exact/is_ocitv. Qed. -#[local] Hint Resolve measurable_set1 : core. +#[local] Hint Resolve ocitv_measurable_set1 : core. -Lemma measurable_itv (i : interval R) : measurable [set` i]. +Lemma ocitv_measurable_itv (i : interval R) : measurable [set` i]. Proof. have moc (a b : R) : measurable `]a, b]. - by apply: sub_sigma_algebra; apply: is_ocitv. + by apply: sub_sigma_algebra; exact: is_ocitv. have mopoo (x : R) : measurable `]x, +oo[. by rewrite itv_bndy_bigcup_BRight; exact: bigcup_measurable. have mnooc (x : R) : measurable `]-oo, x]. by rewrite -setCitvr; exact/measurableC. -have ooE (a b : R) : `]a, b[%classic = `]a, b] `\ b. - by rewrite setDitv1r. +have ooE (a b : R) : `]a, b[%classic = `]a, b] `\ b by rewrite setDitv1r. have moo (a b : R) : measurable `]a, b[ by rewrite ooE; exact: measurableD. have mcc (a b : R) : measurable `[a, b]. case: (boolP (a <= b)) => ab; last by rewrite set_itv_ge. - by rewrite -setU_1itvob//; apply/measurableU. + by rewrite -setU_1itvob//; exact/measurableU. have mco (a b : R) : measurable `[a, b[. case: (boolP (a < b)) => ab; last by rewrite set_itv_ge. - by rewrite -setU_1itvob//; apply/measurableU. + by rewrite -setU_1itvob//; exact/measurableU. have oooE (b : R) : `]-oo, b[%classic = `]-oo, b] `\ b. by rewrite setDitv1r. case: i => [[[] a|[]] [[] b|[]]] => //; do ?by rewrite set_itv_ge. @@ -279,13 +272,6 @@ Qed. End measurableRocitv. Arguments measurableTypeR : clear implicits. -#[global] -Hint Extern 0 (measurable (_ @^-1` [set _])) => - solve [apply: measurable_funPTI; exact: measurable_set1] : core. -#[global] -Hint Extern 0 (measurable [set _]) => solve [apply: measurable_set1] : core. -#[global] -Hint Extern 0 (measurable [set` _] ) => exact: measurable_itv : core. End MeasurableRocitv. Module RGenOInfty. @@ -317,7 +303,8 @@ Proof. rewrite eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +exact: MeasurableRocitv.ocitv_measurable_itv. Qed. End rgenoinfty. @@ -353,7 +340,8 @@ Proof. rewrite eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +exact: MeasurableRocitv.ocitv_measurable_itv. Qed. End rgeninftyo. @@ -388,13 +376,14 @@ Proof. rewrite eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +exact: MeasurableRocitv.ocitv_measurable_itv. Qed. End rgencinfty. End RGenCInfty. -Module RGenOpens. +Module RGenItvoo. Section rgenopens. Context (R : realType). Implicit Types x y z : R. @@ -437,11 +426,12 @@ Proof. rewrite eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. +apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. +exact: MeasurableRocitv.ocitv_measurable_itv. Qed. End rgenopens. -End RGenOpens. +End RGenItvoo. Module RGenOpenSets. Section rgenopensets. @@ -451,127 +441,49 @@ Import MeasurableRocitv. Lemma measurableE : (@ocitv R).-sigma.-measurable = open.-sigma.-measurable. Proof. -rewrite eqEsubset; split; [rewrite RGenOpens.measurableE|]; +rewrite eqEsubset; split; [rewrite RGenItvoo.measurableE|]; apply: sigma_algebra_subl=> U. -- by rewrite /RGenOpens.G/= => -[a [b ->]]; exact: sub_sigma_algebra. +- by rewrite /RGenItvoo.G/= => -[a [b ->]]; exact: sub_sigma_algebra. - move=> oU; rewrite (open_disjoint_itv_bigcup oU). apply: sigma_algebra_bigcup => k. have /is_intervalP -> := @open_disjoint_itv_is_interval _ U oU k. - exact: measurable_itv. + exact: ocitv_measurable_itv. Qed. End rgenopensets. End RGenOpenSets. -(* Should be moved to a more general file *) -Section open. -Context {R : realType} {N : normedModType R}. - -Definition open_type : Type := N. - -HB.instance Definition _ := Pointed.on open_type. - -Let measurable : set_system N := @measurable _ (g_sigma_algebraType (@open N)). - -Let measurable0 : measurable set0. Proof. exact: measurable0. Qed. - -Let measurableC A : measurable A -> measurable (~` A). -Proof. by move=> /measurableC. Qed. - -Let measurable_bigcup (F : (set N)^nat) : (forall i, measurable (F i)) -> - measurable (\bigcup_i (F i)). -Proof. move=> mF; exact: bigcupT_measurable. Qed. - -HB.instance Definition _ := - @isMeasurable.Build (sigma_display (@open N)) - open_type measurable measurable0 measurableC measurable_bigcup. - -End open. - -Notation "N .-open" := (sigma_display (@open N)) : measure_display_scope. -Notation "N .-open.-measurable" := (measurable : set_system (@open_type _ N)) : - classical_set_scope. - -Module MeasurableNormedModuleOpen. -Section measurableOpen. -Context {R : realType} {N : normedModType R}. -Import numFieldNormedType.Exports. - -Definition measurableTypeNormedModule := g_sigma_algebraType (@open N). - -Definition borel_display : measure_display := N.-open. - -Definition measurableNormedModule : set_system N := N.-open.-measurable. - -HB.instance Definition _ : Measurable borel_display measurableTypeNormedModule := - Measurable.on measurableTypeNormedModule. -(* Presumably it is safe to use NFI here because morally R is unique - and nothing else can be used here *) -#[non_forgetful_inheritance] -HB.instance Definition _ := Measurable.copy N measurableTypeNormedModule. - -Lemma measurable_set1 (x : N) : measurable [set x]. -Proof. -rewrite set1_bigcap_ball; apply: bigcap_measurable => // k _. -apply: sub_sigma_algebra; exact: ball_open. -Qed. -#[local] Hint Resolve measurable_set1 : core. - -Lemma measurable_ball_norm (x : N) e : measurable (ball x e). -Proof. by apply: (sub_sigma_algebra (ball_open _ _)). Qed. - -End measurableOpen. -Arguments measurableTypeNormedModule : clear implicits. -#[global] -Hint Extern 0 (measurable (_ @^-1` [set _])) => - solve [apply: measurable_funPTI; exact: measurable_set1] : core. -#[global] -Hint Extern 0 (measurable [set _]) => solve [apply: measurable_set1] : core. - -Lemma measurable_funP1 {d} {aT : measurableType d} {rT : realType} - {nT : normedModType rT} (f : {mfun aT >-> nT}) D (z : nT) : - measurable D -> measurable (D `&` f @^-1` [set z]). -Proof. by move=> /(measurable_funP f); exact. Qed. -#[deprecated(since="mathcomp-analysis 1.13.0", use=measurable_funP1)] -Notation measurable_sfun_inP := measurable_funP1 (only parsing). -#[global] Hint Extern 0 (measurable (_ `&` _ @^-1` [set _])) => - solve [apply: measurable_funP1; assumption] : core. - +Module MeasurableROpen. Section measurableReal. Context {R : realType}. Import numFieldNormedType.Exports. -Definition measurableTypeR := @measurableTypeNormedModule R R. +Import MeasurableNormedModule. Definition lebesgue_display : measure_display := @borel_display R R. -Definition measurableR := @measurableNormedModule R R. - -(* Shouldn't be needing ideally... *) -HB.instance Definition _ := Measurable.copy R measurableTypeR. +#[non_forgetful_inheritance] +HB.instance Definition _ := Measurable.copy R (g_sigma_algebraType (@open R)). Lemma measurable_itv (i : interval R) : measurable [set` i]. Proof. -have := MeasurableRocitv.measurable_itv i. -rewrite /MeasurableRocitv.lebesgue_display. -by rewrite RGenOpenSets.measurableE. +by rewrite -RGenOpenSets.measurableE; exact: MeasurableRocitv.ocitv_measurable_itv. Qed. End measurableReal. -Arguments measurableTypeR : clear implicits. -#[global] -Hint Extern 0 (measurable [set` _] ) => exact: measurable_itv : core. +#[global] Hint Extern 0 (measurable [set` _]) => exact: measurable_itv : core. -End MeasurableNormedModuleOpen. +End MeasurableROpen. Module MeasurableR. Export numFieldNormedType.Exports. -Export MeasurableNormedModuleOpen. +Export MeasurableNormedModule. +Export MeasurableROpen. End MeasurableR. Section ocitv_measure. Import MeasurableR. -Context {R : realType} (mu : measure (measurableTypeR R) R). +Context {R : realType} (mu : {measure set R -> \bar R}). Definition ocitv_measure : set (MeasurableRocitv.measurableTypeR R) -> \bar R := mu. @@ -807,7 +719,7 @@ HB.instance Definition _ (f : cumulative R R) := (wlength_ge0 f) (wlength_semi_additive f). -Hint Extern 0 (measurable _) => solve [apply: is_ocitv] : core. +(*Hint Extern 0 (measurable _) => solve [apply: is_ocitv] : core.*) Lemma cumulative_content_sub_fsum (f : cumulative R R) (D : {fset nat}) a0 b0 (a b : nat -> R) : (forall i, i \in D -> a i <= b i) -> @@ -819,7 +731,8 @@ move=> Dab h; have [ab|ab] := leP a0 b0; last first. by rewrite subr_le0 cumulative_is_nondecreasing// ltW. rewrite big_seq sumr_ge0// => i iD. by rewrite subr_ge0 cumulative_is_nondecreasing// Dab. -have mab k : [set` D] k -> R.-ocitv.-measurable `]a k, b k]%classic by []. +have mab k : [set` D] k -> R.-ocitv.-measurable `]a k, b k]%classic. + by move=> ?; exact: is_ocitv. move: h; rewrite -bigcup_fset. move/(content_sub_fsum (wlength f) (finite_fset D) mab (is_ocitv a0 b0)) => /=. rewrite wlength_itv_bnd// -lee_fin => /le_trans; apply. @@ -907,8 +820,8 @@ Proof. exists (fun k => `](- k%:R), k%:R]%classic). apply/esym; rewrite -subTset => /= x _ /=. by exists (Num.bound x); rewrite //= in_itv/= ltrNl ltrNbound ltW// ltr_bound. -move=> k; split => //; rewrite wlength_itv /= -EFinB. -by case: ifP; rewrite ltey. +move=> k; split; first exact: is_ocitv. +by rewrite wlength_itv /= -EFinB; case: ifP; rewrite ltey. Qed. Definition ocitv_lebesgue_stieltjes_measure (f : cumulative R R) := @@ -979,7 +892,7 @@ by rewrite RGenOpenSets.measurableE. Qed. Lemma lebesgue_stieltjes_measure_unique - (mu : {measure set (measurableTypeR R) -> \bar R}) : + (mu : {measure set ((*measurableTypeR*) R) -> \bar R}) : (forall X, ocitv X -> lebesgue_stieltjes_measure f X = mu X) -> forall A : set R, measurable A -> lebesgue_stieltjes_measure f A = mu A. Proof. diff --git a/theories/real_measure/measurable_realfun.v b/theories/real_measure/measurable_realfun.v index 90857b09cf..e8cf442a54 100644 --- a/theories/real_measure/measurable_realfun.v +++ b/theories/real_measure/measurable_realfun.v @@ -7,7 +7,7 @@ From mathcomp Require Import unstable. From mathcomp Require Import boolp classical_sets functions. From mathcomp Require Import reals ereal topology numfun normedtype sequences measure realfun exp. -From mathcomp Require Import lebesgue_stieltjes_measure. +From mathcomp Require Import lebesgue_stieltjes_measure normedtype_measure. (**md**************************************************************************) (* # Measurable Functions over $\mathbb{R}$ and $\overline{\mathbb{R}}$ *) @@ -186,7 +186,7 @@ End puncture_ereal_itv. Section salgebra_R_ssets. Context {R : realType}. -HB.instance Definition _ := (ereal_isMeasurable (R.-ocitv.-measurable)). +HB.instance Definition _ := ereal_isMeasurable (@open R). (* NB: Until we dropped support for Coq 8.12, we were using HB.instance (\bar (Real.sort R)) (ereal_isMeasurable (@measurable (@itvs_semiRingOfSets R))). @@ -205,7 +205,7 @@ Import MeasurableR. Lemma measurable_image_EFin (A : set R) : measurable A -> measurable (EFin @` A). Proof. -move=> mA; exists A; first by rewrite RGenOpenSets.measurableE. +move=> mA; exists A => //. by exists set0; [constructor|rewrite setU0]. Qed. @@ -224,7 +224,7 @@ Let emeasurable_itv_bndy b (y : \bar R) : measurable [set` Interval (BSide b y) +oo%O]. Proof. move: y => [y| |]. -- exists [set` Interval (BSide b y) +oo%O]; first by []. +- exists [set` Interval (BSide b y) +oo%O] => //. by exists [set +oo%E]; [constructor|rewrite -punct_eitv_bndy]. - by case: b; rewrite ?itv_oyy ?itv_cyy. - case: b; first by rewrite itv_cNyy. @@ -249,24 +249,24 @@ Lemma measurable_image_fine (X : set \bar R) : measurable X -> Proof. case => Y mY [X' [ | <-{X} | <-{X} | <-{X} ]]. - rewrite setU0 => <-{X}. - rewrite [X in measurable X](_ : _ = Y) -?RGenOpenSets.measurableE// predeqE => r; split. + rewrite [X in measurable X](_ : _ = Y)// predeqE => r; split. by move=> [x [[x' Yx' <-{x}/= _ <-//]]]. by move=> Yr; exists r%:E; split => [|[]//]; exists r. -- rewrite [X in measurable X](_ : _ = Y) -?RGenOpenSets.measurableE// predeqE => r; split. +- rewrite [X in measurable X](_ : _ = Y)// predeqE => r; split. move=> [x [[[x' Yx' <- _ <-//]|]]]. by move=> <-; rewrite not_orP => -[]/(_ erefl). by move=> Yr; exists r%:E => //; split => [|[]//]; left; exists r. -- rewrite [X in measurable X](_ : _ = Y) -?RGenOpenSets.measurableE// predeqE => r; split. +- rewrite [X in measurable X](_ : _ = Y)// predeqE => r; split. move=> [x [[[x' Yx' <-{x} _ <-//]|]]]. by move=> ->; rewrite not_orP => -[_]/(_ erefl). by move=> Yr; exists r%:E => //; split => [|[]//]; left; exists r. -- rewrite [X in measurable X](_ : _ = Y) -?RGenOpenSets.measurableE// predeqE => r; split. +- rewrite [X in measurable X](_ : _ = Y)// predeqE => r; split. by rewrite setDUl setDv setU0 => -[_ [[x' Yx' <-]] _ <-]. by move=> Yr; exists r%:E => //; split => [|[]//]; left; exists r. Qed. Lemma measurable_ball (x : R) e : measurable (ball x e). -Proof. by rewrite ball_itv -?RGenOpenSets.measurableE//. Qed. +Proof. by rewrite ball_itv. Qed. Lemma measurable_closed_ball (x : R) r : measurable (closed_ball x r). Proof. @@ -444,9 +444,9 @@ rewrite eset1y; apply: bigcapT_measurable => i. by apply: sub_sigma_algebra; exists i%:R. Qed. -Lemma measurableE : emeasurable (@ocitv R) = G.-sigma.-measurable. +Lemma measurableE : emeasurable (@open R) = G.-sigma.-measurable. Proof. -apply/seteqP; split; last first. +rewrite /emeasurable -RGenOpenSets.measurableE; apply/seteqP; split; last first. apply: smallest_sub. split; first exact: emeasurable0. by move=> *; rewrite setTD; exact: emeasurableC. @@ -497,9 +497,9 @@ apply: bigcap_measurable => // j _; rewrite -setCitvr; apply: measurableC. by apply: sub_sigma_algebra; exists (i%:R + j.+1%:R^-1)%R. Qed. -Lemma measurableE : emeasurable (@ocitv R) = G.-sigma.-measurable. +Lemma measurableE : emeasurable (@open R) = G.-sigma.-measurable. Proof. -apply/seteqP; split; last first. +rewrite /emeasurable -RGenOpenSets.measurableE; apply/seteqP; split; last first. apply: smallest_sub. split; first exact: emeasurable0. by move=> *; rewrite setTD; exact: emeasurableC. @@ -533,7 +533,7 @@ Context (R : realType). Definition G := [set A : set \bar R | exists r, A = `]-oo, r%:E[%classic]. -Lemma measurableE : emeasurable (@ocitv R) = G.-sigma.-measurable. +Lemma measurableE : emeasurable (@open R) = G.-sigma.-measurable. Proof. rewrite ErealGenCInfty.measurableE eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. @@ -551,7 +551,7 @@ End ErealGenInftyO. Lemma is_interval_measurable (R : realType) (I : set R) : is_interval I -> measurable I. -Proof. by move/is_intervalP => ->; rewrite -?RGenOpenSets.measurableE//. Qed. +Proof. by move/is_intervalP => ->. Qed. Section coutinuous_measurable. Context {R : realType}. @@ -582,8 +582,8 @@ Lemma subspace_continuous_measurable_fun (D : set R) (f : subspace D -> R) : measurable D -> continuous f -> measurable_fun D f. Proof. move=> mD /continuousP cf. -rewrite /measurable_fun -?RGenOpenSets.measurableE. -apply: (measurability _ (RGenOpens.measurableE R)). +rewrite /measurable_fun -!RGenOpenSets.measurableE. +apply: (measurability _ (RGenItvoo.measurableE R)). move=> _ [_ [a [b ->] <-]]. rewrite RGenOpenSets.measurableE. apply: open_measurable_subspace => //. @@ -608,7 +608,8 @@ End coutinuous_measurable. Lemma lower_semicontinuous_measurable {R : realType} (f : R -> \bar R) : lower_semicontinuous f -> measurable_fun setT f. Proof. -move=> scif; apply: (measurability _ (ErealGenOInfty.measurableE R)). +move=> scif. +apply: (measurability _ (ErealGenOInfty.measurableE R)). move=> /= _ [_ [a ->]] <-; apply: measurableI => //; apply: open_measurable. by rewrite preimage_itvoy; move/lower_semicontinuousP : scif; exact. Qed. @@ -635,7 +636,7 @@ have [x0|x0] := leP 0 x; last first. rewrite [X in measurable X](_ : _ = setT)// predeqE => r. by split => // _; rewrite /= in_itv /= andbT (lt_le_trans x0). rewrite [X in measurable X](_ : _ = `]-oo, (- x)[ `|` `]x, +oo[); last first. - exact: measurableU. + by apply: measurableU => //; exact: MeasurableRocitv.ocitv_measurable_itv. rewrite predeqE => r; split => [|[|]]; rewrite preimage_itv ?in_itv ?andbT/=. - (have [r0|r0] := leP 0 r; [rewrite ger0_norm|rewrite ltr0_norm]) => // xr; rewrite 2!in_itv/=. @@ -1238,7 +1239,7 @@ Lemma EFin_measurable (D : set R) : measurable_fun D EFin. Proof. move=> mD; apply: (measurability _ (ErealGenOInfty.measurableE R)) => //. move=> /= _ [_ [x ->]] <-; apply: measurableI => //. -by rewrite -RGenOpenSets.measurableE preimage_itvoy EFin_itv. +by rewrite preimage_itvoy EFin_itv. Qed. Lemma abse_measurable (D : set (\bar R)) : measurable_fun D abse. @@ -1249,14 +1250,12 @@ rewrite [X in _ @^-1` X](punct_eitv_bndy _ x) preimage_setU setIUr. apply: measurableU; last first. by rewrite preimage_abse_pinfty; apply: measurableI => //; exact: measurableU. apply: measurableI => //; exists (normr @^-1` `]x, +oo[%classic). - rewrite -[X in measurable X]setTI. - rewrite RGenOpenSets.measurableE. - exact: normr_measurable. + by rewrite -[X in measurable X]setTI; exact: normr_measurable. exists set0; first by constructor. rewrite setU0 predeqE => -[y| |]; split => /= => -[r]; rewrite ?/= /= ?in_itv /= ?andbT => xr//. + by move=> [ry]; exists `|y| => //=; rewrite in_itv/= andbT -ry. - + by move=> [ry]; exists y => //=; rewrite /= in_itv/= andbT -ry. + + by move=> [ry]; exists y => //=; rewrite in_itv/= andbT -ry. Qed. Lemma oppe_measurable (D : set (\bar R)) : @@ -1284,7 +1283,6 @@ Proof. split=> [mf mD A mA|]; last by move=> mg; exact: measurableT_comp. rewrite [X in measurable X](_ : _ = D `&` (EFin \o g) @^-1` (EFin @` A)); last first. apply: mf => //; exists A => //. - by rewrite RGenOpenSets.measurableE//. by exists set0; [constructor|rewrite setU0]. congr (_ `&` _);rewrite eqEsubset; split=> [|? []/= _ /[swap] -[->//]]. by move=> ? ?; exact: preimage_image. diff --git a/theories/real_measure/normedtype_measure.v b/theories/real_measure/normedtype_measure.v new file mode 100644 index 0000000000..d5245fb9e8 --- /dev/null +++ b/theories/real_measure/normedtype_measure.v @@ -0,0 +1,116 @@ +(* mathcomp analysis (c) 2026 Inria and AIST. License: CeCILL-C. *) +From HB Require Import structures. +From mathcomp Require Import boot order algebra. +From mathcomp Require Import boolp classical_sets. +From mathcomp Require Import topology normedtype measure. + +(**md**************************************************************************) +(* # Sigma-algebra for normed modules *) +(* *) +(* `open_type N` *) +(* : alias for `N : normedModType R` *) +(* *) +(* `N .-open.-measurable` *) +(* : the set of measurable sets *) +(* *) +(* `MeasurableNormedModule` *) +(* : module that contains the definition of the sigma-algebra for normed *) +(* : modules *) +(* *) +(******************************************************************************) + +Reserved Notation "R .-open" (at level 1, format "R .-open"). +Reserved Notation "R .-open.-measurable" + (at level 2, format "R .-open.-measurable"). + +Set Implicit Arguments. +Unset Strict Implicit. +Unset Printing Implicit Defensive. + +Local Open Scope classical_set_scope. +Local Open Scope ring_scope. + +Section open. +Context {R : numFieldType} {N : normedModType R}. + +(* TODO: borel_type? *) +Definition open_type : Type := N. + +HB.instance Definition _ := Pointed.on open_type. + +Let measurable : set_system N := @measurable _ (g_sigma_algebraType (@open N)). + +Let measurable0 : measurable set0. Proof. exact: measurable0. Qed. + +Let measurableC A : measurable A -> measurable (~` A). +Proof. by move=> /measurableC. Qed. + +Let measurable_bigcup (F : (set N)^nat) : (forall i, measurable (F i)) -> + measurable (\bigcup_i (F i)). +Proof. move=> mF; exact: bigcupT_measurable. Qed. + +HB.instance Definition _ := + @isMeasurable.Build (sigma_display (@open N)) + open_type measurable measurable0 measurableC measurable_bigcup. + +End open. + +Notation "N .-open" := (sigma_display (@open N)) : measure_display_scope. +Notation "N .-open.-measurable" := (measurable : set_system (@open_type _ N)) : + classical_set_scope. + +Module MeasurableNormedModuleOpen. +Section measurableOpen. +Context {R : archiRealFieldType} {N : normedModType R}. +Import numFieldNormedType.Exports. + +Let measurableTypeNormedModule := g_sigma_algebraType (@open N). + +Definition borel_display : measure_display := N.-open. + +Let measurableNormedModule : set_system N := N.-open.-measurable. + +HB.instance Definition _ : Measurable borel_display measurableTypeNormedModule := + Measurable.on measurableTypeNormedModule. +(* Presumably it is safe to use NFI here because morally R is unique + and nothing else can be used here *) +#[non_forgetful_inheritance] +HB.instance Definition _ := Measurable.copy N measurableTypeNormedModule. + +Lemma measurable_set1 (x : N) : measurable [set x]. +Proof. +rewrite set1_bigcap_ball; apply: bigcap_measurable => // k _. +by apply: sub_sigma_algebra; exact: ball_open. +Qed. +#[local] Hint Resolve measurable_set1 : core. + +Lemma measurable_ball_norm (x : N) e : measurable (ball x e). +Proof. exact: (sub_sigma_algebra (ball_open _ _)). Qed. + +End measurableOpen. + +Lemma measurable_funP1 {d} {aT : measurableType d} {rT : archiRealFieldType} + {nT : normedModType rT} (f : {mfun aT >-> nT}) D (z : nT) : + measurable D -> measurable (D `&` f @^-1` [set z]). +Proof. +by move=> /(measurable_funP f); apply => //; exact: measurable_set1. +Qed. + +(* NB: really used, e.g., in simple_functions.v *) +#[global] Hint Extern 0 (measurable (_ @^-1` [set _])) => + solve [apply: measurable_funPTI; exact: measurable_set1] : core. + +(* NB: really used, e.g., in radon_nikodym.v *) +#[global] Hint Extern 0 (measurable (_ `&` _ @^-1` [set _])) => + solve [apply: measurable_funP1; assumption] : core. + +(* NB: really used, e.g., in realfun.v *) +#[global] Hint Extern 0 (measurable [set _]) => + solve [apply: measurable_set1] : core. + +End MeasurableNormedModuleOpen. + +Module MeasurableNormedModule. +Export numFieldNormedType.Exports. +Export MeasurableNormedModuleOpen. +End MeasurableNormedModule. From 5e2fb8d560d8442825c05844dcc839f4c44bccbf Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Thu, 12 Nov 2026 21:58:23 +0900 Subject: [PATCH 06/38] changelog --- CHANGELOG_UNRELEASED.md | 28 ++++++++++++++++++- _CoqProject | 2 +- theories/Make | 2 +- theories/real_measure/lebesgue_measure.v | 3 +- .../real_measure/lebesgue_stieltjes_measure.v | 6 ++-- theories/real_measure/measurable_realfun.v | 6 ++-- ...type_measure.v => normedtype_measurable.v} | 2 +- theories/real_measure/real_measure.v | 1 + 8 files changed, 37 insertions(+), 13 deletions(-) rename theories/real_measure/{normedtype_measure.v => normedtype_measurable.v} (98%) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index d7f0405803..b0daa261f1 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -10,6 +10,16 @@ `pownMexpr_cvgn0` + instance `is_derive1_powRl` +- in `metric_structure.v`: + + lemma `set1_bigcap_ball` + +- file `normedtype_measurable.v` + + module `MeasurableNormedModuleOpen` + * definition `borel_display` + * lemma `measurable_set1` + * lemma `measurable_ball_norm` + * lemma ` measurable_funP1` + ### Changed - in `lebesgue_integral_nonneg.v`, generalized and deprecated: @@ -26,10 +36,22 @@ `derivable_oo_LRcontinuousN`, `derivable_oo_LRcontinuous_shift`, `derivable_oo_LRcontinuousS` -### Changed +- from `lebesgue_stieltjes_measure.v` to (new) `normedtyped_measurable.v`: + + move definition `open_type` + + move notations `.-open`, `.-open.-measurable` + +- in `lebesgue_stieltjes_measure.v`: + + sigma-algebra for `\bar R` now uses open sets instead of octiv ### Renamed +- in `lebesgue_stieltjes_measure.v`: + + `RGenOpens` -> `RGenItvoo` + + `MeasurableRocitv.measurable_set1` -> `MeasurableRocitv.ocitv_measurable_set1` + + `MeasurableRocitv.measurable_itv` -> `MeasurableRocitv.ocitv_measurable_itv` + +- in `lebesgue_stieltjes_measure.v`: + ### Generalized - in `lebesgue_integral_nonneg.v`: @@ -39,6 +61,10 @@ ### Removed +- in `lebesgue_stieltjes_measure.v`: + + definition `MeasurableRocitv.lebesgue_display` + + definition `MeasurableRocitv.measurableR` + ### Infrastructure ### Misc diff --git a/_CoqProject b/_CoqProject index e3cf7974b9..20e376835e 100644 --- a/_CoqProject +++ b/_CoqProject @@ -116,7 +116,7 @@ theories/measure_theory/measurable_function.v theories/measure_theory/signed_measure.v theories/measure_theory/measure.v -theories/real_measure/normedtype_measure.v +theories/real_measure/normedtype_measurable.v theories/real_measure/lebesgue_stieltjes_measure.v theories/real_measure/lebesgue_measure.v theories/real_measure/measurable_realfun.v diff --git a/theories/Make b/theories/Make index 3120733ea3..b228cf3b83 100644 --- a/theories/Make +++ b/theories/Make @@ -83,7 +83,7 @@ measure_theory/measurable_function.v measure_theory/signed_measure.v measure_theory/measure.v -real_measure/normedtype_measure.v +real_measure/normedtype_measurable.v real_measure/lebesgue_stieltjes_measure.v real_measure/lebesgue_measure.v real_measure/measurable_realfun.v diff --git a/theories/real_measure/lebesgue_measure.v b/theories/real_measure/lebesgue_measure.v index 9102eec35a..110626a7af 100644 --- a/theories/real_measure/lebesgue_measure.v +++ b/theories/real_measure/lebesgue_measure.v @@ -8,7 +8,8 @@ From mathcomp Require Import boolp classical_sets functions cardinality fsbigop reals. From mathcomp Require Import topology ereal numfun normedtype sequences esum measure. -From mathcomp Require Export normedtype_measure lebesgue_stieltjes_measure measurable_realfun. +From mathcomp Require Export normedtype_measurable lebesgue_stieltjes_measure + measurable_realfun. (**md**************************************************************************) (* # Lebesgue Measure *) diff --git a/theories/real_measure/lebesgue_stieltjes_measure.v b/theories/real_measure/lebesgue_stieltjes_measure.v index dea64c85ea..2baa90cfc8 100644 --- a/theories/real_measure/lebesgue_stieltjes_measure.v +++ b/theories/real_measure/lebesgue_stieltjes_measure.v @@ -6,7 +6,7 @@ From mathcomp Require Import interval_inference archimedean. From mathcomp Require Import unstable. From mathcomp Require Import boolp classical_sets fsbigop cardinality. From mathcomp Require Import reals ereal topology normedtype sequences esum - measure realfun normedtype_measure. + measure realfun normedtype_measurable. (**md**************************************************************************) (* # Lebesgue Stieltjes Measure *) @@ -719,8 +719,6 @@ HB.instance Definition _ (f : cumulative R R) := (wlength_ge0 f) (wlength_semi_additive f). -(*Hint Extern 0 (measurable _) => solve [apply: is_ocitv] : core.*) - Lemma cumulative_content_sub_fsum (f : cumulative R R) (D : {fset nat}) a0 b0 (a b : nat -> R) : (forall i, i \in D -> a i <= b i) -> `]a0, b0] `<=` \big[setU/set0]_(i <- D) `]a i, b i]%classic -> @@ -892,7 +890,7 @@ by rewrite RGenOpenSets.measurableE. Qed. Lemma lebesgue_stieltjes_measure_unique - (mu : {measure set ((*measurableTypeR*) R) -> \bar R}) : + (mu : {measure set R -> \bar R}) : (forall X, ocitv X -> lebesgue_stieltjes_measure f X = mu X) -> forall A : set R, measurable A -> lebesgue_stieltjes_measure f A = mu A. Proof. diff --git a/theories/real_measure/measurable_realfun.v b/theories/real_measure/measurable_realfun.v index e8cf442a54..6534efc8f7 100644 --- a/theories/real_measure/measurable_realfun.v +++ b/theories/real_measure/measurable_realfun.v @@ -7,7 +7,7 @@ From mathcomp Require Import unstable. From mathcomp Require Import boolp classical_sets functions. From mathcomp Require Import reals ereal topology numfun normedtype sequences measure realfun exp. -From mathcomp Require Import lebesgue_stieltjes_measure normedtype_measure. +From mathcomp Require Import lebesgue_stieltjes_measure normedtype_measurable. (**md**************************************************************************) (* # Measurable Functions over $\mathbb{R}$ and $\overline{\mathbb{R}}$ *) @@ -45,7 +45,6 @@ From mathcomp Require Import lebesgue_stieltjes_measure normedtype_measure. (* ``` *) (******************************************************************************) -Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -608,8 +607,7 @@ End coutinuous_measurable. Lemma lower_semicontinuous_measurable {R : realType} (f : R -> \bar R) : lower_semicontinuous f -> measurable_fun setT f. Proof. -move=> scif. -apply: (measurability _ (ErealGenOInfty.measurableE R)). +move=> scif; apply: (measurability _ (ErealGenOInfty.measurableE R)). move=> /= _ [_ [a ->]] <-; apply: measurableI => //; apply: open_measurable. by rewrite preimage_itvoy; move/lower_semicontinuousP : scif; exact. Qed. diff --git a/theories/real_measure/normedtype_measure.v b/theories/real_measure/normedtype_measurable.v similarity index 98% rename from theories/real_measure/normedtype_measure.v rename to theories/real_measure/normedtype_measurable.v index d5245fb9e8..a30c1fd2fb 100644 --- a/theories/real_measure/normedtype_measure.v +++ b/theories/real_measure/normedtype_measurable.v @@ -14,7 +14,7 @@ From mathcomp Require Import topology normedtype measure. (* : the set of measurable sets *) (* *) (* `MeasurableNormedModule` *) -(* : module that contains the definition of the sigma-algebra for normed *) +(* : module that contains the definition of a sigma-algebra for normed *) (* : modules *) (* *) (******************************************************************************) diff --git a/theories/real_measure/real_measure.v b/theories/real_measure/real_measure.v index 44582f4c6a..480fac9700 100644 --- a/theories/real_measure/real_measure.v +++ b/theories/real_measure/real_measure.v @@ -1,4 +1,5 @@ (* mathcomp analysis (c) 2026 Inria and AIST. License: CeCILL-C. *) +From mathcomp Require Export normedtype_measurable. From mathcomp Require Export lebesgue_stieltjes_measure. From mathcomp Require Export lebesgue_measure. From mathcomp Require Export measurable_realfun. From 893c16237efbc001c28b103bfafae8c992f34a81 Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Thu, 12 Nov 2026 22:00:18 +0900 Subject: [PATCH 07/38] fix changelog --- CHANGELOG_UNRELEASED.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index b0daa261f1..efa7371a0d 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -10,6 +10,21 @@ `pownMexpr_cvgn0` + instance `is_derive1_powRl` +- in `function_spaces.v`: + + lemma `within_continuous_big` + +- in `nat_topology.v`: + + lemma `near_infty_after` + +- in `num_topology.v`: + + lemmas `at_rightD`, `at_leftD`, `near_at_rightD`, `near_at_leftD`, + `at_left_shift`, `at_right_shift` + +- in `realfun.v`: + + lemmas `derivable_oo_LRcontinuousZ`, `derivable_oo_LRcontinuousD`, + `derivable_oo_LRcontinuousN`, `derivable_oo_LRcontinuous_shift`, + `derivable_oo_LRcontinuousS` + - in `metric_structure.v`: + lemma `set1_bigcap_ball` @@ -24,17 +39,6 @@ - in `lebesgue_integral_nonneg.v`, generalized and deprecated: + lemma `ge0_integralZl_EFin` (no condition on `k`) -- in file `function_spaces.v`, - + new lemma `within_continuous_big`. -- in file `nat_topology.v`, - + new lemma `near_infty_after`. -- in file `num_topology.v`, - + new lemmas `at_rightD`, `at_leftD`, `near_at_rightD`, `near_at_leftD`, - `at_left_shift`, and `at_right_shift`. -- in `realfun.v`: - + lemmas `derivable_oo_LRcontinuousZ`, `derivable_oo_LRcontinuousD`, - `derivable_oo_LRcontinuousN`, `derivable_oo_LRcontinuous_shift`, - `derivable_oo_LRcontinuousS` - from `lebesgue_stieltjes_measure.v` to (new) `normedtyped_measurable.v`: + move definition `open_type` From 9661ebebfab844f461ef72b50ad926ee38e74a59 Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Thu, 12 Nov 2026 23:00:35 +0900 Subject: [PATCH 08/38] improvement? --- CHANGELOG_UNRELEASED.md | 3 +- theories/real_measure/normedtype_measurable.v | 42 +++++++------------ theories/topology_theory/metric_structure.v | 8 ++-- 3 files changed, 22 insertions(+), 31 deletions(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index efa7371a0d..ab374cb110 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -29,8 +29,9 @@ + lemma `set1_bigcap_ball` - file `normedtype_measurable.v` + + definition `borel_type` + + definition `borel_display` + module `MeasurableNormedModuleOpen` - * definition `borel_display` * lemma `measurable_set1` * lemma `measurable_ball_norm` * lemma ` measurable_funP1` diff --git a/theories/real_measure/normedtype_measurable.v b/theories/real_measure/normedtype_measurable.v index a30c1fd2fb..ed642432b8 100644 --- a/theories/real_measure/normedtype_measurable.v +++ b/theories/real_measure/normedtype_measurable.v @@ -7,9 +7,12 @@ From mathcomp Require Import topology normedtype measure. (**md**************************************************************************) (* # Sigma-algebra for normed modules *) (* *) -(* `open_type N` *) +(* `borel_type N` *) (* : alias for `N : normedModType R` *) (* *) +(* `borel_display N` *) +(* : display for `borel_type N` *) +(* *) (* `N .-open.-measurable` *) (* : the set of measurable sets *) (* *) @@ -33,47 +36,34 @@ Local Open Scope ring_scope. Section open. Context {R : numFieldType} {N : normedModType R}. -(* TODO: borel_type? *) -Definition open_type : Type := N. - -HB.instance Definition _ := Pointed.on open_type. - -Let measurable : set_system N := @measurable _ (g_sigma_algebraType (@open N)). - -Let measurable0 : measurable set0. Proof. exact: measurable0. Qed. +Definition borel_type : Type := N. -Let measurableC A : measurable A -> measurable (~` A). -Proof. by move=> /measurableC. Qed. +Definition borel_display : measure_display := sigma_display (@open N). -Let measurable_bigcup (F : (set N)^nat) : (forall i, measurable (F i)) -> - measurable (\bigcup_i (F i)). -Proof. move=> mF; exact: bigcupT_measurable. Qed. +(*HB.instance Definition _ := Pointed.on borel_type.*) HB.instance Definition _ := - @isMeasurable.Build (sigma_display (@open N)) - open_type measurable measurable0 measurableC measurable_bigcup. + Measurable.copy borel_type (g_sigma_algebraType (@open N)). End open. +Arguments borel_type {R} N. +Arguments borel_display {R} N. -Notation "N .-open" := (sigma_display (@open N)) : measure_display_scope. -Notation "N .-open.-measurable" := (measurable : set_system (@open_type _ N)) : +Notation "N .-open" := (borel_display N) : measure_display_scope. +Notation "N .-open.-measurable" := (measurable : set_system (@borel_type _ N)) : classical_set_scope. Module MeasurableNormedModuleOpen. Section measurableOpen. Context {R : archiRealFieldType} {N : normedModType R}. -Import numFieldNormedType.Exports. Let measurableTypeNormedModule := g_sigma_algebraType (@open N). -Definition borel_display : measure_display := N.-open. - -Let measurableNormedModule : set_system N := N.-open.-measurable. - -HB.instance Definition _ : Measurable borel_display measurableTypeNormedModule := +HB.instance Definition _ : Measurable (borel_display N) measurableTypeNormedModule := Measurable.on measurableTypeNormedModule. -(* Presumably it is safe to use NFI here because morally R is unique - and nothing else can be used here *) + +(* Presumably it is safe to use NFI here because the sigma-algebra of opens + for N is unique and nothing else can be used here *) #[non_forgetful_inheritance] HB.instance Definition _ := Measurable.copy N measurableTypeNormedModule. diff --git a/theories/topology_theory/metric_structure.v b/theories/topology_theory/metric_structure.v index 7eba93cbab..4abf633194 100644 --- a/theories/topology_theory/metric_structure.v +++ b/theories/topology_theory/metric_structure.v @@ -114,10 +114,10 @@ Context {R : archiRealFieldType} {N : metricType R}. Lemma set1_bigcap_ball (x : N) : [set x] = \bigcap_n ball x n.+1%:R^-1. Proof. -rewrite eqEsubset; split=> [y -> n _ | y /= bn]/=; first by apply: ballxx; - rewrite invr_gt0. -apply: close_eq _=>//; first exact: metric_hausdorff; rewrite ball_close=> e0; -rewrite ball_symE. apply: (le_ball _ (bn (truncn e0%:num^-1) I)). +rewrite eqEsubset; split=> [y -> n _ | y /= bn]/=; first exact: ballxx. +apply: close_eq _ => //; first exact: metric_hausdorff. +rewrite ball_close => e0. +apply/ball_sym/(le_ball _ (bn (truncn e0%:num^-1) Logic.I)). by rewrite invf_ple ?posrE//; exact: (ltW (truncnS_gt _)). Qed. From 9cb23cca8d6b7e7ac3ac9a2401b2abc1f8481ec1 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 12:25:28 +0200 Subject: [PATCH 09/38] generalize SimpleFun codomain from realType to sigmaRingType Co-authored-by: Arthur Djevahirdjian --- CHANGELOG_UNRELEASED.md | 33 +++++++++++++++ .../measurable_fun_approximation.v | 2 + .../simple_functions.v | 42 ++++++++++--------- 3 files changed, 57 insertions(+), 20 deletions(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index ab374cb110..1356d7c83e 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -61,6 +61,39 @@ - in `lebesgue_integral_nonneg.v`: + lemmas `ge0_integralZl`, `ge0_integralZr` +- in `measurable_structure.v`: + + lemma `sigma_algebra_measurable` (not specialized to `setT` anymore) + +- in `measurable_function.v`: + + lemma `preimage_set_system_measurable_fun` + +- in `measurable_structure.v` + + structure `SemiRingOfSets`, mixin `isSigmaRing`, factories `isRingOfSets`, + `isRingOfSets_setY`, `isAlgebraOfSets`, `isAlgebraOfSets_setD`, `isMeasurable` + are not required to be pointed anymore + + lemmas `measurable_g_measurableTypeE`, `g_sigma_algebra_preimageType`, + `g_sigma_algebra_preimage`, `g_sigma_preimageE`, `g_sigma_preimageE`, + `g_sigma_algebra_rectangle` are generalized from `pointedType` to `choiceType` + (the list might not be exhaustive) + +- in `ereal.v`: + + lemma `funID` generalized from `pointedType` to `Type` + +- in `numfun.v`: + + lemma `indic_restrict` generalized from `pointedType` to `Type` + + factory `FiniteDecomp` generalized from `pointedType`/`nzRingType` to + `Type/pzRingType` + +- in `simple_functions.v`: + + lemmas `fctD`, `fctN`, `fctM`, `fctZ` + + structure `SimpleFun` (and notation `{sfun aT >-> _}`): codomain + generalized from `realType` to `sigmaRingType d'`, adding a display parameter `d'`; + +- in `ereal.v`: + + lemmas `ge0_mule_fsumr`, `ge0_mule_fsuml` + +- in `esum.v`: + + lemma `esum_set1` ### Deprecated diff --git a/theories/lebesgue_integral_theory/measurable_fun_approximation.v b/theories/lebesgue_integral_theory/measurable_fun_approximation.v index 8794f07ef1..722264dcbf 100644 --- a/theories/lebesgue_integral_theory/measurable_fun_approximation.v +++ b/theories/lebesgue_integral_theory/measurable_fun_approximation.v @@ -389,6 +389,8 @@ Import HBNNSimple. NonNegFun.on (cst x%:num).*) (* generates Warning: HB: no new instance is generated [HB.no-new-instance,HB,elpi,default] *) +Import MeasurableR. + Lemma approximation_sfun : exists g : {sfun T >-> R}^nat, (forall x, D x -> EFin \o g ^~ x @ \oo --> f x). Proof. diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 71977785e5..65a267476d 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -73,20 +73,22 @@ Local Open Scope ring_scope. Module HBSimple. Import MeasurableR. -HB.structure Definition SimpleFun d (aT : sigmaRingType d) (rT : realType) := - {f of @isMeasurableFun d _ aT rT f & @FiniteImage aT rT f}. +HB.structure Definition SimpleFun d d' (aT : sigmaRingType d) + (bT : sigmaRingType d') := + {f of @isMeasurableFun d d' aT bT f & @FiniteImage aT bT f}. End HBSimple. -Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ aT T) : form_scope. +Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. Notation "[ 'sfun' 'of' f ]" := [the {sfun _ >-> _} of f] : form_scope. Module HBNNSimple. Import HBSimple. +Import MeasurableR. HB.structure Definition NonNegSimpleFun d (aT : sigmaRingType d) (rT : realType) := - {f of @SimpleFun d _ _ f & @NonNegFun aT rT f}. + {f of @SimpleFun d _ _ _ f & @NonNegFun aT rT f}. End HBNNSimple. @@ -94,9 +96,8 @@ Notation "{ 'nnsfun' aT >-> T }" := (@HBNNSimple.NonNegSimpleFun.type _ aT%type Notation "[ 'nnsfun' 'of' f ]" := [the {nnsfun _ >-> _} of f] : form_scope. Section sfun_pred. -Context {d} {aT : sigmaRingType d} {rT : realType}. -Import MeasurableR. -Definition sfun : {pred _ -> _} := [predI @mfun _ _ aT rT & fimfun]. +Context {d} {aT : sigmaRingType d} {d'} {bT : sigmaRingType d'}. +Definition sfun : {pred _ -> _} := [predI @mfun _ _ aT bT & fimfun]. Definition sfun_key : pred_key sfun. Proof. exact. Qed. Canonical sfun_keyed := KeyedPred sfun_key. Lemma sub_sfun_mfun : {subset sfun <= mfun}. Proof. by move=> x /andP[]. Qed. @@ -104,17 +105,16 @@ Lemma sub_sfun_fimfun : {subset sfun <= fimfun}. Proof. by move=> x /andP[]. Qed End sfun_pred. Section sfun. -Context {d} {aT : measurableType d} {rT : realType}. -Notation T := {sfun aT >-> rT}. -Notation sfun := (@sfun _ aT rT). +Context {d} {aT : measurableType d} {d'} {bT : sigmaRingType d'}. +Notation T := {sfun aT >-> bT}. +Notation sfun := (@sfun _ aT _ bT). Section Sub. -Context (f : aT -> rT) (fP : f \in sfun). -Import MeasurableR. +Context (f : aT -> bT) (fP : f \in sfun). Definition sfun_Sub1_subproof := - @isMeasurableFun.Build d _ aT rT f (set_mem (sub_sfun_mfun fP)). + @isMeasurableFun.Build d d' aT bT f (set_mem (sub_sfun_mfun fP)). #[local] HB.instance Definition _ := sfun_Sub1_subproof. Definition sfun_Sub2_subproof := - @FiniteImage.Build aT rT f (set_mem (sub_sfun_fimfun fP)). + @FiniteImage.Build aT bT f (set_mem (sub_sfun_fimfun fP)). Import HBSimple. @@ -138,17 +138,17 @@ Proof. by []. Qed. HB.instance Definition _ := isSub.Build _ _ T sfun_rect sfun_valP. -Lemma sfuneqP (f g : {sfun aT >-> rT}) : f = g <-> f =1 g. +Lemma sfuneqP (f g : {sfun aT >-> bT}) : f = g <-> f =1 g. Proof. by split=> [->//|fg]; apply/val_inj/funext. Qed. -HB.instance Definition _ := [Choice of {sfun aT >-> rT} by <:]. +HB.instance Definition _ := [Choice of {sfun aT >-> bT} by <:]. Import MeasurableR. (* NB: already in cardinality.v *) -HB.instance Definition _ x : @FImFun aT rT (cst x) := FImFun.on (cst x). +HB.instance Definition _ x : @FImFun aT bT (cst x) := FImFun.on (cst x). -Definition cst_sfun x : {sfun aT >-> rT} := cst x. +Definition cst_sfun x : {sfun aT >-> bT} := cst x. Lemma cst_sfunE x : @cst_sfun x =1 cst x. Proof. by []. Qed. @@ -169,14 +169,15 @@ Definition fctWE := (fctD, fctN, fctM, fctZ). Section ring. Context d (aT : measurableType d) (rT : realType). +Import MeasurableR. -Lemma sfun_subring_closed : subring_closed (@sfun d aT rT). +Lemma sfun_subring_closed : subring_closed (@sfun d aT _ rT). Proof. by split=> [|f g|f g]; rewrite ?inE/= ?rpred1//; move=> /andP[/= mf ff] /andP[/= mg fg]; rewrite !(rpredB, rpredM). Qed. -HB.instance Definition _ := GRing.isSubringClosed.Build _ sfun +HB.instance Definition _ := GRing.isSubringClosed.Build _ (@sfun d aT _ rT) sfun_subring_closed. HB.instance Definition _ := [SubChoice_isSubComPzRing of {sfun aT >-> rT} by <:]. @@ -238,6 +239,7 @@ Section simple_bounded. Context {d} {T : sigmaRingType d} {R : realType}. Import HBSimple. +Import MeasurableR. Lemma simple_bounded (f : {sfun T >-> R}) : bounded_fun f. Proof. From abf11fd30b100eff2d08dc6b468846aea5a5bf4b Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 11:47:58 +0000 Subject: [PATCH 10/38] generalize fctD and fctN codomain from pzRingType to nmodType and zmodType Co-authored-by: Arthur Djevahirdjian --- theories/lebesgue_integral_theory/simple_functions.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 65a267476d..3d70a03f83 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -155,9 +155,9 @@ Lemma cst_sfunE x : @cst_sfun x =1 cst x. Proof. by []. Qed. End sfun. (* a better way to refactor function stuffs *) -Lemma fctD (T : Type) (K : pzRingType) (f g : T -> K) : f + g = f \+ g. +Lemma fctD (T : Type) (N : nmodType) (f g : T -> N) : f + g = f \+ g. Proof. by []. Qed. -Lemma fctN (T : Type) (K : pzRingType) (f : T -> K) : - f = \- f. +Lemma fctN (T : Type) (N : zmodType) (f : T -> N) : - f = \- f. Proof. by []. Qed. Lemma fctM (T : Type) (K : pzRingType) (f g : T -> K) : f * g = f \* g. Proof. by []. Qed. From b8a1dbf0c3c016670d609f3ec7695ac2515820f4 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 18:57:20 +0000 Subject: [PATCH 11/38] 80 char limit --- theories/lebesgue_integral_theory/simple_functions.v | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 3d70a03f83..ae1601a582 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -73,13 +73,14 @@ Local Open Scope ring_scope. Module HBSimple. Import MeasurableR. -HB.structure Definition SimpleFun d d' (aT : sigmaRingType d) - (bT : sigmaRingType d') := +HB.structure Definition SimpleFun d d' + (aT : sigmaRingType d) (bT : sigmaRingType d') := {f of @isMeasurableFun d d' aT bT f & @FiniteImage aT bT f}. End HBSimple. -Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. +Notation "{ 'sfun' aT >-> T }" := + (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. Notation "[ 'sfun' 'of' f ]" := [the {sfun _ >-> _} of f] : form_scope. Module HBNNSimple. @@ -92,7 +93,8 @@ HB.structure Definition NonNegSimpleFun End HBNNSimple. -Notation "{ 'nnsfun' aT >-> T }" := (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. +Notation "{ 'nnsfun' aT >-> T }" := + (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. Notation "[ 'nnsfun' 'of' f ]" := [the {nnsfun _ >-> _} of f] : form_scope. Section sfun_pred. From 0e8d64bcf157cb22e6480a2974aa1dea1421f52d Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 19:58:48 +0000 Subject: [PATCH 12/38] add Borel sigma-algebra wrapper borel_type and measurable singletons Co-authored-by: Arthur Djevahirdjian --- CHANGELOG_UNRELEASED.md | 6 ++++++ theories/borel_hierarchy.v | 27 ++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index 1356d7c83e..e73f878b76 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -19,6 +19,12 @@ - in `num_topology.v`: + lemmas `at_rightD`, `at_leftD`, `near_at_rightD`, `near_at_leftD`, `at_left_shift`, `at_right_shift` +- in `borel_hierarchy.v`: + + definition `borel_type` + + lemmas `singleton_bigcap`, `measurable1` + +- in `set_interval.v`: + + lemmas `setU_itvob1`, `setU_1itvob` - in `realfun.v`: + lemmas `derivable_oo_LRcontinuousZ`, `derivable_oo_LRcontinuousD`, diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v index 880301fbe7..f8ab536ae7 100644 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -19,7 +19,7 @@ Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. -Import Order.TTheory GRing.Theory Num.Theory. +Import Order.TTheory GRing.Theory Num.Def Num.Theory. Import numFieldNormedType.Exports. Local Open Scope classical_set_scope. @@ -81,6 +81,31 @@ Qed. End irrational_Gdelta. +Definition borel_type (T : topologicalType) := g_sigma_algebraType (@open T). + +Section borel_normedModType. +Local Open Scope ring_scope. +Context {R : realType} {V : normedModType R}. + +Lemma singleton_bigcap (x : V) : + [set x] = \bigcap_(k : nat) ball x (k.+1%:R)^-1. +Proof. +apply/seteqP; split => [_ -> k _|y xy]. + by rewrite -ball_normE/= subrr normr0 invr_gt0 ltr0n. +apply/eqP; rewrite eq_sym -subr_eq0 -normr_eq0 eq_le normr_ge0 andbT. +apply/ler_addgt0Pl => e e0; rewrite addr0. +have := xy (truncn e^-1) I; rewrite -ball_normE/= => /ltW/le_trans; apply. +by rewrite invf_ple ?posrE ?ltr0n ?invr_gt0//; apply/ltW/truncnS_gt. +Qed. + +Lemma measurable1 (x : borel_type V) : measurable [set x]. +Proof. +rewrite singleton_bigcap; apply: bigcap_measurable => // k _. +by apply: sub_sigma_algebra; exact: ball_open. +Qed. + +End borel_normedModType. + Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R). Proof. apply/forall2NP => A; apply/not_andP => -[oA ratrA]. From 73372b3aec8c2a45c7913c7e5ef0a46f1a69e07c Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 20:27:20 +0000 Subject: [PATCH 13/38] lmodType structure on simple functions valued in a normed module Co-authored-by: Arthur Djevahirdjian --- CHANGELOG_UNRELEASED.md | 4 ++ .../simple_functions.v | 51 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index e73f878b76..4ab4b63457 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -23,6 +23,10 @@ + definition `borel_type` + lemmas `singleton_bigcap`, `measurable1` +- in `simple_functions.v`: + + lemmas `sfun_op`, `sfun_submod_closed` + + `{sfun aT >-> borel_type V}` is an `lmodType` when `V` is a `normedModType` + - in `set_interval.v`: + lemmas `setU_itvob1`, `setU_1itvob` diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index ae1601a582..0bf13dc780 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -223,6 +223,57 @@ Definition scale_sfun k f : {sfun aT >-> rT} := k \o* f. End ring. Arguments indic_sfun {d aT rT} _. +Section sfun_lmodType. +Context d (aT : measurableType d) (R : realType). +Import HBSimple. + +HB.instance Definition _ (V : normedModType R) := GRing.Lmodule.on (borel_type V). + +Import MeasurableNormedModuleOpen. + +Lemma sfun_op (U V W : normedModType R) + (f : {sfun aT >-> borel_type U}) (g : {sfun aT >-> borel_type V}) + (h : U * V -> W) : + (fun x => h (f x, g x)) \in @sfun _ aT _ (borel_type W). +Proof. +rewrite inE; apply/andP; split; rewrite inE/=. + move=> _ Y mY; rewrite setTI. + rewrite (_ : _ @^-1` Y = + \bigcup_(a in range f) (\bigcup_(b in range g) + ((f @^-1` [set a] `&` g @^-1` [set b]) `&` [set _ | Y (h (a, b))]))). + apply/seteqP; split=> [x/= Yfg|x [a _] [b _] [[/= <- <-]]//]. + by exists (f x); [exists x|exists (g x); [exists x|split]]. + apply: fin_bigcup_measurable; first exact: fimfunP. + move=> a _; apply: fin_bigcup_measurable; first exact: fimfunP. + move=> b _; apply: measurableI; last first. + have [Yhab|Yhab] := pselect (Y (h (a, b))). + by rewrite (_ : [set _ | _] = setT); + [apply/seteqP; split|exact: measurableT]. + rewrite (_ : [set _ | _] = set0); last exact: measurable0. + by apply/seteqP; split. + apply: measurableI. + exact: (measurable_funPTI f (measurable_set1 a)). + exact: (measurable_funPTI g (measurable_set1 b)). +apply: (sub_finite_set (B := h @` (range f `*` range g))). + by move=> _ [x _ <-]/=; exists (f x, g x) => //; split; exists x. +by apply: finite_image; apply: finite_setX; exact: fimfunP. +Qed. + +Lemma sfun_submod_closed (V : normedModType R) : + submod_closed (@sfun _ aT _ (borel_type V)). +Proof. +split=> [|k f g sf sg]; first exact: (valP (cst_sfun (0 : borel_type V))). +exact: (sfun_op (sfun_Sub sf) (sfun_Sub sg) (fun t => k *: t.1 + t.2)). +Qed. + +HB.instance Definition _ (V : normedModType R) := + GRing.isSubmodClosed.Build _ _ (@sfun _ aT _ (borel_type V)) + (sfun_submod_closed V). +HB.instance Definition _ (V : normedModType R) := + [SubChoice_isSubLmodule of {sfun aT >-> borel_type V} by <:]. + +End sfun_lmodType. + Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : t < 0 -> f @^-1` [set t] = set0. Proof. From fcecb86c29d2fc2e4844bd15f901d58f215d11d0 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Mon, 8 Jun 2026 10:59:31 +0200 Subject: [PATCH 14/38] added doc --- theories/lebesgue_integral_theory/simple_functions.v | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 0bf13dc780..d5e9bf9404 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -28,8 +28,9 @@ From mathcomp Require Import real_measure numfun realfun. (* *) (* Detailed contents: *) (* ```` *) -(* {sfun T >-> R} == type of simple functions *) -(* They form a (potentially zero) ring. *) +(* {sfun aT >-> bT} == type of simple functions *) +(* They can form a ring or a module depending on *) +(* the structure of bT *) (* {nnsfun T >-> R} == type of non-negative simple functions *) (* indic_sfun mD := mindic _ mD *) (* cst_sfun r == constant simple function *) From c5590e86515b5c79def0bdd60373863106926a44 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Tue, 16 Jun 2026 13:54:34 +0000 Subject: [PATCH 15/38] copy on borel_type --- theories/borel_hierarchy.v | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v index f8ab536ae7..ed43c9c00a 100644 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -1,4 +1,5 @@ (* mathcomp analysis (c) 2026 Inria and AIST. License: CeCILL-C. *) +From HB Require Import structures. From mathcomp Require Import boot order algebra. From mathcomp Require Import boolp classical_sets functions cardinality. From mathcomp Require Import reals topology normedtype sequences. @@ -106,6 +107,10 @@ Qed. End borel_normedModType. +#[non_forgetful_inheritance] +HB.instance Definition _ (R : realType) (V : normedModType R) := + Measurable.copy V (borel_type V). + Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R). Proof. apply/forall2NP => A; apply/not_andP => -[oA ratrA]. From 92bffaf228c349b2372724cc12fdba2924973e4d Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Fri, 19 Jun 2026 16:05:01 +0200 Subject: [PATCH 16/38] drop borel_type wrap on sfun_op and submodule structure --- theories/lebesgue_integral_theory/simple_functions.v | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index d5e9bf9404..be482a5576 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -233,7 +233,7 @@ HB.instance Definition _ (V : normedModType R) := GRing.Lmodule.on (borel_type V Import MeasurableNormedModuleOpen. Lemma sfun_op (U V W : normedModType R) - (f : {sfun aT >-> borel_type U}) (g : {sfun aT >-> borel_type V}) + (f : {sfun aT >-> U}) (g : {sfun aT >-> V}) (h : U * V -> W) : (fun x => h (f x, g x)) \in @sfun _ aT _ (borel_type W). Proof. @@ -263,7 +263,7 @@ Qed. Lemma sfun_submod_closed (V : normedModType R) : submod_closed (@sfun _ aT _ (borel_type V)). Proof. -split=> [|k f g sf sg]; first exact: (valP (cst_sfun (0 : borel_type V))). +split=> [|k f g sf sg]; first exact: (valP (cst_sfun (0 : V))). exact: (sfun_op (sfun_Sub sf) (sfun_Sub sg) (fun t => k *: t.1 + t.2)). Qed. @@ -271,7 +271,7 @@ HB.instance Definition _ (V : normedModType R) := GRing.isSubmodClosed.Build _ _ (@sfun _ aT _ (borel_type V)) (sfun_submod_closed V). HB.instance Definition _ (V : normedModType R) := - [SubChoice_isSubLmodule of {sfun aT >-> borel_type V} by <:]. + [SubChoice_isSubLmodule of {sfun aT >-> V} by <:]. End sfun_lmodType. From b8bcd17b8fe0de4fd9a7e8a04459a9edca6d1298 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Mon, 22 Jun 2026 10:50:01 +0200 Subject: [PATCH 17/38] started work on top of pr 1988 --- theories/lebesgue_integral_theory/simple_functions.v | 3 +++ 1 file changed, 3 insertions(+) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index be482a5576..b007455110 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -273,6 +273,9 @@ HB.instance Definition _ (V : normedModType R) := HB.instance Definition _ (V : normedModType R) := [SubChoice_isSubLmodule of {sfun aT >-> V} by <:]. +Lemma sfun0r : (0 : {sfun aT >-> R}) =1 cst 0. +Lemma sfun0m {V : normedModType R} : (0 : {sfun aT >-> V}) =1 cst 0. + End sfun_lmodType. Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : From 9fb4b86ad2df6caf5aa0f7f9491a0cd39df0918a Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 12:25:28 +0200 Subject: [PATCH 18/38] generalize SimpleFun codomain from realType to sigmaRingType Co-authored-by: Arthur Djevahirdjian --- theories/lebesgue_integral_theory/simple_functions.v | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index b007455110..6490b859c1 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -61,7 +61,6 @@ Reserved Notation "{ 'sfun' aT >-> T }" Reserved Notation "[ 'sfun' 'of' f ]" (at level 0, format "[ 'sfun' 'of' f ]"). -Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -74,14 +73,13 @@ Local Open Scope ring_scope. Module HBSimple. Import MeasurableR. -HB.structure Definition SimpleFun d d' - (aT : sigmaRingType d) (bT : sigmaRingType d') := +HB.structure Definition SimpleFun d d' (aT : sigmaRingType d) + (bT : sigmaRingType d') := {f of @isMeasurableFun d d' aT bT f & @FiniteImage aT bT f}. End HBSimple. -Notation "{ 'sfun' aT >-> T }" := - (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. +Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. Notation "[ 'sfun' 'of' f ]" := [the {sfun _ >-> _} of f] : form_scope. Module HBNNSimple. @@ -273,9 +271,6 @@ HB.instance Definition _ (V : normedModType R) := HB.instance Definition _ (V : normedModType R) := [SubChoice_isSubLmodule of {sfun aT >-> V} by <:]. -Lemma sfun0r : (0 : {sfun aT >-> R}) =1 cst 0. -Lemma sfun0m {V : normedModType R} : (0 : {sfun aT >-> V}) =1 cst 0. - End sfun_lmodType. Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : From 62d50f6b212996b373114fe3fdbdbd129d4f28e5 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 18:57:20 +0000 Subject: [PATCH 19/38] 80 char limit --- theories/lebesgue_integral_theory/simple_functions.v | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 6490b859c1..f48b6da673 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -73,13 +73,14 @@ Local Open Scope ring_scope. Module HBSimple. Import MeasurableR. -HB.structure Definition SimpleFun d d' (aT : sigmaRingType d) - (bT : sigmaRingType d') := +HB.structure Definition SimpleFun d d' + (aT : sigmaRingType d) (bT : sigmaRingType d') := {f of @isMeasurableFun d d' aT bT f & @FiniteImage aT bT f}. End HBSimple. -Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. +Notation "{ 'sfun' aT >-> T }" := + (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. Notation "[ 'sfun' 'of' f ]" := [the {sfun _ >-> _} of f] : form_scope. Module HBNNSimple. From ad5f37590d764c329df689120d5933b4f997df35 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 19:58:48 +0000 Subject: [PATCH 20/38] add Borel sigma-algebra wrapper borel_type and measurable singletons Co-authored-by: Arthur Djevahirdjian --- theories/borel_hierarchy.v | 4 ---- 1 file changed, 4 deletions(-) diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v index ed43c9c00a..20cddccc9b 100644 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -107,10 +107,6 @@ Qed. End borel_normedModType. -#[non_forgetful_inheritance] -HB.instance Definition _ (R : realType) (V : normedModType R) := - Measurable.copy V (borel_type V). - Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R). Proof. apply/forall2NP => A; apply/not_andP => -[oA ratrA]. From 94d09c49a885c83c0bb2a7b36ad8f52060a722de Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 12:25:28 +0200 Subject: [PATCH 21/38] generalize SimpleFun codomain from realType to sigmaRingType Co-authored-by: Arthur Djevahirdjian --- theories/lebesgue_integral_theory/simple_functions.v | 2 -- 1 file changed, 2 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index f48b6da673..fb7c4c341f 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -145,8 +145,6 @@ Proof. by split=> [->//|fg]; apply/val_inj/funext. Qed. HB.instance Definition _ := [Choice of {sfun aT >-> bT} by <:]. -Import MeasurableR. - (* NB: already in cardinality.v *) HB.instance Definition _ x : @FImFun aT bT (cst x) := FImFun.on (cst x). From 75316cd91043b156b5c47fb3b4e4975f6b363924 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Tue, 16 Jun 2026 13:54:34 +0000 Subject: [PATCH 22/38] copy on borel_type --- theories/borel_hierarchy.v | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v index 20cddccc9b..ed43c9c00a 100644 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -107,6 +107,10 @@ Qed. End borel_normedModType. +#[non_forgetful_inheritance] +HB.instance Definition _ (R : realType) (V : normedModType R) := + Measurable.copy V (borel_type V). + Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R). Proof. apply/forall2NP => A; apply/not_andP => -[oA ratrA]. From ab23af5938364bf3fa52e1d8cc60eb94d2513ef9 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Mon, 22 Jun 2026 10:50:01 +0200 Subject: [PATCH 23/38] started work on top of pr 1988 --- theories/lebesgue_integral_theory/simple_functions.v | 3 +++ 1 file changed, 3 insertions(+) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index fb7c4c341f..c6448bb1a2 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -270,6 +270,9 @@ HB.instance Definition _ (V : normedModType R) := HB.instance Definition _ (V : normedModType R) := [SubChoice_isSubLmodule of {sfun aT >-> V} by <:]. +Lemma sfun0r : (0 : {sfun aT >-> R}) =1 cst 0. +Lemma sfun0m {V : normedModType R} : (0 : {sfun aT >-> V}) =1 cst 0. + End sfun_lmodType. Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : From 19fcef91fd8e91b44035a79063b0bfbfd41a36ec Mon Sep 17 00:00:00 2001 From: adjevahi Date: Wed, 8 Jul 2026 15:10:55 +0200 Subject: [PATCH 24/38] merge with measurableTypeNormed --- CHANGELOG_UNRELEASED.md | 50 +++++- theories/borel_hierarchy.v | 31 +--- theories/hoelder.v | 2 +- theories/kernel.v | 4 - .../lebesgue_integral_definition.v | 16 +- .../lebesgue_integral_differentiation.v | 1 - .../lebesgue_integral_monotone_convergence.v | 3 - .../lebesgue_integral_nonneg.v | 30 +++- .../measurable_fun_approximation.v | 6 +- .../simple_functions.v | 124 ++++++++++---- theories/probability_theory/independence.v | 3 + .../probability_theory/normal_distribution.v | 3 +- .../probability_theory/uniform_distribution.v | 1 - theories/real_measure/lebesgue_measure.v | 3 +- .../real_measure/lebesgue_stieltjes_measure.v | 3 + theories/real_measure/measurable_realfun.v | 162 +++++++++++++++++- 16 files changed, 344 insertions(+), 98 deletions(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index 4ab4b63457..fa989e4e34 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -24,8 +24,10 @@ + lemmas `singleton_bigcap`, `measurable1` - in `simple_functions.v`: - + lemmas `sfun_op`, `sfun_submod_closed` - + `{sfun aT >-> borel_type V}` is an `lmodType` when `V` is a `normedModType` + + lemmas `mem_sfun_comp_pair`, `sfun_submod_closed` + + `{sfun aT >-> V}` is an `lmodType` when `V` is a `normedModType` + + definitions `indic_lmod` `mindic_lmod` `mindic_lmod_sfun` + + lemmas `indic_lmodE` `preimage_indic_mod` `measurable_indic_lmod` - in `set_interval.v`: + lemmas `setU_itvob1`, `setU_1itvob` @@ -46,6 +48,27 @@ * lemma `measurable_ball_norm` * lemma ` measurable_funP1` +- in `lebesgue_stieltjes_measure.v`: + + module `MeasurableRocitv` + + definition `open_type` + + notations `.-open`, `.-open.-measurable` + + module `MeasurableOpen` + * definition `measurableTypeO` + + definition `borel_display` + * definition `measurableO` + * definition `measurableTypeR` + + definition `lebesgue_display` + * definition `measurableR` + + lemmas `measurable_set1`, `measurable_itv` (also declared as hints) + + lemma `measurable_ball_norm` + + definition `ocitv_measure`, lemma `ocitv_measure_ext` + + module `MeasurableR` + + module `RGenOpenSets` + * lemma `measurableE` + +- in `real_interval.v`: + + lemma `set1_bigcap_oo` + ### Changed - in `lebesgue_integral_nonneg.v`, generalized and deprecated: @@ -54,10 +77,31 @@ - from `lebesgue_stieltjes_measure.v` to (new) `normedtyped_measurable.v`: + move definition `open_type` + move notations `.-open`, `.-open.-measurable` +- moved from `measurable_structure.v` to `classical_sets.v`: + + definition `preimage_set_system` + + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, + `preimage_set_system_id` + +- moved from `measurable_structure.v` to `classical_sets.v`: + + definition `preimage_set_system` + + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, + `preimage_set_system_id` - in `lebesgue_stieltjes_measure.v`: + sigma-algebra for `\bar R` now uses open sets instead of octiv +- moved from `measurable_realfun.v` to `lebesgue_stieltjes_measure.v` + + module `RGenOInfty` + + module `RGenInftyO` + + module `RGenCInfty` + + module `RGenOpens` + +- moved inside module `MeasurableRocitv` (`lebesgue_stieltjes_measure.v`): + + lemmas `measurable_set1`, `measurable_itv` + +- in `lebesgue_stieltjes_measure.v`: + + lemma `lebesgue_stieltjes_measure_unique` is now about the sigma-algebra generated by open sets + ### Renamed - in `lebesgue_stieltjes_measure.v`: @@ -96,6 +140,8 @@ - in `simple_functions.v`: + lemmas `fctD`, `fctN`, `fctM`, `fctZ` + + lemmas `sfun0`, `sfunN`, `sfunD`, `sfunB`, `sfunZ`, `sfun_sum`, `sfunprod` + + lemma `simple_bounded` + structure `SimpleFun` (and notation `{sfun aT >-> _}`): codomain generalized from `realType` to `sigmaRingType d'`, adding a display parameter `d'`; diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v index ed43c9c00a..4a033ed6a9 100644 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -20,7 +20,7 @@ Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. -Import Order.TTheory GRing.Theory Num.Def Num.Theory. +Import Order.TTheory GRing.Theory Num.Theory. Import numFieldNormedType.Exports. Local Open Scope classical_set_scope. @@ -82,35 +82,6 @@ Qed. End irrational_Gdelta. -Definition borel_type (T : topologicalType) := g_sigma_algebraType (@open T). - -Section borel_normedModType. -Local Open Scope ring_scope. -Context {R : realType} {V : normedModType R}. - -Lemma singleton_bigcap (x : V) : - [set x] = \bigcap_(k : nat) ball x (k.+1%:R)^-1. -Proof. -apply/seteqP; split => [_ -> k _|y xy]. - by rewrite -ball_normE/= subrr normr0 invr_gt0 ltr0n. -apply/eqP; rewrite eq_sym -subr_eq0 -normr_eq0 eq_le normr_ge0 andbT. -apply/ler_addgt0Pl => e e0; rewrite addr0. -have := xy (truncn e^-1) I; rewrite -ball_normE/= => /ltW/le_trans; apply. -by rewrite invf_ple ?posrE ?ltr0n ?invr_gt0//; apply/ltW/truncnS_gt. -Qed. - -Lemma measurable1 (x : borel_type V) : measurable [set x]. -Proof. -rewrite singleton_bigcap; apply: bigcap_measurable => // k _. -by apply: sub_sigma_algebra; exact: ball_open. -Qed. - -End borel_normedModType. - -#[non_forgetful_inheritance] -HB.instance Definition _ (R : realType) (V : normedModType R) := - Measurable.copy V (borel_type V). - Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R). Proof. apply/forall2NP => A; apply/not_andP => -[oA ratrA]. diff --git a/theories/hoelder.v b/theories/hoelder.v index 44fce50f98..11c333ec1b 100644 --- a/theories/hoelder.v +++ b/theories/hoelder.v @@ -860,7 +860,7 @@ Reserved Notation "{ 'mfun_' mu , U >-> V }" Notation "{ 'mfun_' mu , aT >-> T }" := (@aeEqMfun _ _ aT T _ mu) : form_scope. -Import numFieldNormedType.Exports HBNNSimple. +Import numFieldNormedType.Exports. HB.mixin Record isFinLebesgue d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}) (p : \bar R) (p1 : (1 <= p)%E) diff --git a/theories/kernel.v b/theories/kernel.v index 1f418be452..c669004aa6 100644 --- a/theories/kernel.v +++ b/theories/kernel.v @@ -1062,7 +1062,6 @@ HB.export KCOMP_SFINITE_KERNEL. Section measurable_fun_preimage_integral. Context d d' (X : measurableType d) (Y : measurableType d') (R : realType). -Import HBNNSimple. Variables (k : Y -> \bar R) (k_ : ({nnsfun Y >-> R}) ^nat) (ndk_ : nondecreasing_seq (k_ : (Y -> R)^nat)) @@ -1109,7 +1108,6 @@ End measurable_fun_preimage_integral. Section measurable_fun_integral_kernel. -Import HBNNSimple. Lemma measurable_fun_integral_kernel d d' (X : measurableType d) (Y : measurableType d') (R : realType) @@ -1140,7 +1138,6 @@ rewrite integral_indic//= /kcomp. by apply: eq_integral => y _; rewrite integral_indic. Qed. -Import HBNNSimple. Let integral_kcomp_nnsfun x (f : {nnsfun Z >-> R}) : \int[kcomp l k x]_z (f z)%:E = \int[l x]_y (\int[k (x, y)]_z (f z)%:E). @@ -1322,7 +1319,6 @@ split => //. + by split => //; rewrite kfcompkindic. Qed. -Import HBNNSimple. (* [Lemma 14.20, Klenke 2014] *) Lemma measurable_kfcomp : measurable_fun [set: T1 * T2] f -> diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v index ad2b814d30..b01f3ddc75 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v @@ -84,7 +84,6 @@ rewrite sintegralE fsbig1// => r _; rewrite preimage_cst. by case: ifPn => [/[!inE] <-|]; rewrite ?mul0e// measure0 mule0. Qed. -Import HBNNSimple. Lemma sintegral_ge0 (f : {nnsfun T >-> R}) : 0 <= sintegral mu f. Proof. by rewrite sintegralE fsume_ge0// => r _; exact: nnsfun_mulemu_ge0. Qed. @@ -124,7 +123,10 @@ Context {d} {T : measurableType d} {R : realType}. Variables m1 m2 : {measure set T -> \bar R}. Hypothesis m12 : forall S, measurable S -> m1 S <= m2 S. +<<<<<<< HEAD Import HBNNSimple. +======= +>>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma le_measure_sintegral (f : {nnsfun T >-> R}) : @@ -140,7 +142,6 @@ Local Open Scope ereal_scope. Context d (T : sigmaRingType d) (R : realType). Variables (m : {measure set T -> \bar R}) (r : R) (f : {nnsfun T >-> R}). -Import HBNNSimple. Lemma sintegralrM : sintegral m (cst r \* f)%R = r%:E * sintegral m f. Proof. @@ -161,7 +162,10 @@ Context d (T : measurableType d) (R : realType). Variables (m : {measure set T -> \bar R}). Variables (D : set T) (mD : measurable D) (f g : {nnsfun T >-> R}). +<<<<<<< HEAD Import HBNNSimple. +======= +>>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma sintegralD : sintegral m (f \+ g)%R = sintegral m f + sintegral m g. @@ -197,7 +201,6 @@ Section le_sintegral. Context d (T : measurableType d) (R : realType) (m : {measure set T -> \bar R}). Variables f g : {nnsfun T >-> R}. -Import HBNNSimple. Hypothesis fg : forall x, f x <= g x. @@ -214,7 +217,6 @@ Qed. End le_sintegral. Section is_cvg_sintegral. -Import HBNNSimple. Lemma is_cvg_sintegral d (T : measurableType d) (R : realType) (m : {measure set T -> \bar R}) (f : {nnsfun T >-> R}^nat) : @@ -231,7 +233,6 @@ Context d (T : measurableType d) (R : realType). Variable mu : {measure set T -> \bar R}. Variables (g : {nnsfun T >-> R}^nat) (f : {nnsfun T >-> R}). -Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~ x). Hypothesis gf : forall x, cvgn (g^~ x) -> f x <= limn (g^~ x). @@ -351,7 +352,6 @@ Context d (T : measurableType d) (R : realType). Variable mu : {measure set T -> \bar R}. Variables (g : {nnsfun T >-> R}^nat) (f : {nnsfun T >-> R}). -Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~ x). Hypothesis gf : forall x, g ^~ x @ \oo --> f x. @@ -378,7 +378,6 @@ Local Open Scope ereal_scope. Context d (T : measurableType d) (R : realType). Implicit Types (f g : T -> \bar R) (D : set T). -Import HBNNSimple. Let nnintegral mu f := ereal_sup [set sintegral mu h | h in [set h : {nnsfun T >-> R} | forall x, (h x)%:E <= f x]]. @@ -477,7 +476,6 @@ Context {d} {T : measurableType d} {R : realType}. Variables m1 m2 : {measure set T -> \bar R}. Hypothesis m12 : forall S, measurable S -> m1 S <= m2 S. -Import HBNNSimple. Lemma ge0_le_measure_integral (f : T -> \bar R) S : measurable S -> (forall x, 0 <= f x) -> measurable_fun [set: T] f -> @@ -496,7 +494,6 @@ Context d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}) (D : set T) (mD : measurable D). Implicit Type A : set T. -Import HBNNSimple. Lemma integral_indic A : measurable A -> \int[mu]_(x in D) (\1_A x)%:E = mu (A `&` D). @@ -515,7 +512,6 @@ Context {d} {T : measurableType d} {R : realType} Lemma integral_mkcond D f : \int[mu]_(x in D) f x = \int[mu]_x (f \_ D) x. Proof. by rewrite /integral patch_setT. Qed. -Import HBNNSimple. Lemma integralT_nnsfun (h : {nnsfun T >-> R}) : \int[mu]_x (h x)%:E = sintegral mu h. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v index ab9855cd3d..a9e574351b 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v @@ -81,7 +81,6 @@ Import MeasurableR. Let R : measurableType _ := (*measurableTypeR*) rT. Local Open Scope ereal_scope. -Import HBSimple. Lemma approximation_continuous_integrable (E : set _) (f : rT -> rT): measurable E -> mu E < +oo -> mu.-integrable E (EFin \o f) -> diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v index 2ede24962a..1eb4406df9 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v @@ -35,7 +35,6 @@ Variables (mu : {measure set T -> \bar R}) (f : T -> \bar R) Hypothesis f0 : forall x, 0 <= f x. Hypothesis mf : measurable_fun setT f. -Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~x). Hypothesis gf : forall x, EFin \o g^~ x @ \oo --> f x. @@ -90,7 +89,6 @@ Hypothesis f10 : forall x, D x -> 0 <= f1 x. Hypothesis mf1 : measurable_fun D f1. Hypothesis mf2 : measurable_fun D f2. -Import HBNNSimple. Lemma ge0_le_integral : (forall x, D x -> f1 x <= f2 x) -> \int[mu]_(x in D) f1 x <= \int[mu]_(x in D) f2 x. @@ -163,7 +161,6 @@ Local Definition max_g2' : (T -> R)^nat := Local Definition max_g2 : {nnsfun T >-> R}^nat := fun k => bigmax_nnsfun (g2^~ k) k. -Import HBNNSimple. Let is_cvg_g2 n t : cvgn (EFin \o (g2 n ^~ t)). Proof. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v index c142c7979c..fe4f21bbbe 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v @@ -85,7 +85,6 @@ Context d (T : measurableType d) (R : realType). Let sintegral_measure_zero (f : T -> R) : sintegral mzero f = 0. Proof. by rewrite sintegralE big1// => r _ /=; rewrite /mzero mule0. Qed. -Import HBNNSimple. Lemma integral_measure_zero (D : set T) (f : T -> \bar R) : \int[mzero]_(x in D) f x = 0. @@ -118,7 +117,6 @@ Context {d} {T : measurableType d} {R : realType} Hypothesis f0 : forall x, D x -> 0 <= f x. Hypothesis mf : measurable_fun D f. -Import HBNNSimple. Let ge0_integralZl_EFin_subproof k : (0 <= k)%R -> \int[mu]_(x in D) (k%:E * f x) = k%:E * \int[mu]_(x in D) f x. @@ -203,7 +201,6 @@ Hypothesis mf1 : measurable_fun D f1. Hypothesis f20 : forall x, D x -> 0 <= f2 x. Hypothesis mf2 : measurable_fun D f2. -Import HBNNSimple. Lemma ge0_integralD : \int[mu]_(x in D) (f1 x + f2 x) = \int[mu]_(x in D) f1 x + \int[mu]_(x in D) f2 x. @@ -318,7 +315,10 @@ under eq_integral do rewrite EFinM. by rewrite ge0_integralZl//; exact/measurable_EFinP. Qed. +<<<<<<< HEAD Import HBNNSimple. +======= +>>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma integralZl_indic_nnsfun (f : {nnsfun T >-> R}) (k : R) : @@ -343,7 +343,10 @@ Let integral_mscale_indic E : measurable E -> k%:num%:E * \int[m]_(x in D) (\1_E x)%:E. Proof. by move=> ?; rewrite !integral_indic. Qed. +<<<<<<< HEAD Import HBNNSimple. +======= +>>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Let integral_mscale_nnsfun (h : {nnsfun T >-> R}) : @@ -449,7 +452,6 @@ rewrite !fsbig_set1 mul0e add0e preimage_restrict//. by rewrite ifN ?set0U ?setIidl//= notin_setE => /esym; exact/eqP. Qed. -Import HBNNSimple. Local Lemma integral_cstr r : \int[mu]_(x in D) r%:E = r%:E * mu D. Proof. @@ -499,7 +501,10 @@ Context {d1 d2} {X : measurableType d1} {Y : measurableType d2} {R : realType} Let mphi_mixin := isMeasurableFun.Build _ _ _ _ _ mphi. Let mphi_pack : {mfun _ >-> _} := HB.pack phi mphi_mixin. +<<<<<<< HEAD Import HBNNSimple. +======= +>>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma ge0_integral_pushforward D (f : Y -> \bar R) : @@ -582,7 +587,10 @@ Local Open Scope ereal_scope. Context {d} {T : measurableType d} (a : T) {R : realType} (D : set T) (mD : measurable D). +<<<<<<< HEAD Import HBNNSimple. +======= +>>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Let ge0_integral_dirac (f : T -> \bar R) (mf : measurable_fun D f) @@ -654,7 +662,10 @@ rewrite integral_indic//= /msum/=; apply: eq_bigr => i _. by rewrite integral_indic// setIT. Qed. +<<<<<<< HEAD Import HBNNSimple. +======= +>>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Let integralT_measure_sum (f : {nnsfun T >-> R}) : @@ -691,7 +702,6 @@ Qed. End integral_measure_sum_nnsfun. Section integral_measure_add_nnsfun. -Import HBNNSimple. Lemma integral_measure_add_nnsfun d (T : measurableType d) (R : realType) (m1 m2 : {measure set T -> \bar R}) (D : set T) (mD : measurable D) @@ -710,7 +720,6 @@ Local Open Scope ereal_scope. Context {d} {T : measurableType d} {R : realType} (m_ : {measure set T -> \bar R}^nat). -Import HBNNSimple. Lemma ge0_integral_measure_sum (D : set T) (mD : measurable D) (f : T -> \bar R) : @@ -773,7 +782,10 @@ rewrite integral_indic// setIT /m/= /mseries; apply: eq_eseriesr => i _. by rewrite integral_indic// setIT. Qed. +<<<<<<< HEAD Import HBNNSimple. +======= +>>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma integral_measure_series_nnsfun (D : set T) (mD : measurable D) @@ -808,7 +820,6 @@ Context {d} {T : measurableType d} {R : realType} (m_ : {measure set T -> \bar R}^nat). Let m := mseries m_ O. -Import HBNNSimple. Lemma ge0_integral_measure_series (D : set T) (mD : measurable D) (f : T -> \bar R) : (forall t, D t -> 0 <= f t) -> @@ -1068,8 +1079,13 @@ End integral_patch. Section ge0_cvgn_integral. Local Open Scope ereal_scope. Import MeasurableR. +<<<<<<< HEAD Context {R : realType} (mu : {measure set ((*@measurableTypeR*) R) -> \bar R}) (f : R -> R). +======= +Context {R : realType} (mu : {measure set (@measurableTypeR R) -> \bar R}). +Variable f : R -> R. +>>>>>>> aedb2e9ad (merge with measurableTypeNormed) Hypothesis f0 : (forall x, 0 <= f x)%R. diff --git a/theories/lebesgue_integral_theory/measurable_fun_approximation.v b/theories/lebesgue_integral_theory/measurable_fun_approximation.v index 722264dcbf..b42a1cc396 100644 --- a/theories/lebesgue_integral_theory/measurable_fun_approximation.v +++ b/theories/lebesgue_integral_theory/measurable_fun_approximation.v @@ -351,7 +351,6 @@ Definition nnsfun_approx : {nnsfun T >-> R}^nat := fun n => locked (add_nnsfun else nnsfun0) (n * 2 ^ n)%N) (scale_nnsfun (indic_nnsfun _ (mB n)) (ler0n _ n))). -Import HBNNSimple. Lemma nnsfun_approxE n : nnsfun_approx n = approx n :> (T -> R). Proof. @@ -377,13 +376,11 @@ End approximation. Section approximation_sfun. Context d (T : measurableType d) (R : realType) (f : T -> \bar R). Variables (D : set T) (mD : measurable D) (mf : measurable_fun D f). - -Import HBSimple. +Import MeasurableR. (* NB: already instantiated in cardinality.v *) (*HB.instance Definition _ x : @FImFun T R (cst x) := FImFun.on (cst x).*) (* generates Warning: HB: no new instance is generated [HB.no-new-instance,HB,elpi,default] *) -Import HBNNSimple. (* NB: already instantiated in lebesgue_integral.v *) (*HB.instance Definition _ x : @NonNegFun T R (cst x%:num) := NonNegFun.on (cst x%:num).*) @@ -709,7 +706,6 @@ Let R : measurableType _ := rT(*measurableTypeR rT*). Hypothesis mA : measurable A. Hypothesis finA : mu A < +oo. -Import HBSimple. Let lusin_simple (f : {sfun R >-> rT}) (eps : rT) : (0 < eps)%R -> exists K, [/\ compact K, K `<=` A, mu (A `\` K) < eps%:E & diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index c6448bb1a2..b350043e24 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -28,9 +28,8 @@ From mathcomp Require Import real_measure numfun realfun. (* *) (* Detailed contents: *) (* ```` *) -(* {sfun aT >-> bT} == type of simple functions *) -(* They can form a ring or a module depending on *) -(* the structure of bT *) +(* {sfun T >-> R} == type of simple functions *) +(* They form a (potentially zero) ring. *) (* {nnsfun T >-> R} == type of non-negative simple functions *) (* indic_sfun mD := mindic _ mD *) (* cst_sfun r == constant simple function *) @@ -74,13 +73,12 @@ Module HBSimple. Import MeasurableR. HB.structure Definition SimpleFun d d' - (aT : sigmaRingType d) (bT : sigmaRingType d') := - {f of @isMeasurableFun d d' aT bT f & @FiniteImage aT bT f}. + (aT : sigmaRingType d) (rT : sigmaRingType d') := + {f of @isMeasurableFun d d' aT rT f & @FiniteImage aT rT f}. End HBSimple. -Notation "{ 'sfun' aT >-> T }" := - (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. +Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. Notation "[ 'sfun' 'of' f ]" := [the {sfun _ >-> _} of f] : form_scope. Module HBNNSimple. @@ -89,16 +87,16 @@ Import MeasurableR. HB.structure Definition NonNegSimpleFun d (aT : sigmaRingType d) (rT : realType) := - {f of @SimpleFun d _ _ _ f & @NonNegFun aT rT f}. + {f of @SimpleFun d _ aT rT f & @NonNegFun aT rT f}. End HBNNSimple. -Notation "{ 'nnsfun' aT >-> T }" := - (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. +Notation "{ 'nnsfun' aT >-> T }" := (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. Notation "[ 'nnsfun' 'of' f ]" := [the {nnsfun _ >-> _} of f] : form_scope. Section sfun_pred. Context {d} {aT : sigmaRingType d} {d'} {bT : sigmaRingType d'}. +Import MeasurableR. Definition sfun : {pred _ -> _} := [predI @mfun _ _ aT bT & fimfun]. Definition sfun_key : pred_key sfun. Proof. exact. Qed. Canonical sfun_keyed := KeyedPred sfun_key. @@ -109,7 +107,7 @@ End sfun_pred. Section sfun. Context {d} {aT : measurableType d} {d'} {bT : sigmaRingType d'}. Notation T := {sfun aT >-> bT}. -Notation sfun := (@sfun _ aT _ bT). +Notation sfun := (@sfun d aT d' bT). Section Sub. Context (f : aT -> bT) (fP : f \in sfun). Definition sfun_Sub1_subproof := @@ -141,7 +139,7 @@ Proof. by []. Qed. HB.instance Definition _ := isSub.Build _ _ T sfun_rect sfun_valP. Lemma sfuneqP (f g : {sfun aT >-> bT}) : f = g <-> f =1 g. -Proof. by split=> [->//|fg]; apply/val_inj/funext. Qed. +Proof. by split=> [->//|fg]; exact/val_inj/funext. Qed. HB.instance Definition _ := [Choice of {sfun aT >-> bT} by <:]. @@ -187,16 +185,7 @@ Import HBSimple. Lemma sfun0 : (0 : {sfun aT >-> rT}) =1 cst 0. Proof. by []. Qed. Lemma sfun1 : (1 : {sfun aT >-> rT}) =1 cst 1. Proof. by []. Qed. -Lemma sfunN f : - f =1 \- f. Proof. by []. Qed. -Lemma sfunD f g : f + g =1 f \+ g. Proof. by []. Qed. -Lemma sfunB f g : f - g =1 f \- g. Proof. by []. Qed. Lemma sfunM f g : f * g =1 f \* g. Proof. by []. Qed. -Lemma sfun_sum I r (P : {pred I}) (f : I -> {sfun aT >-> rT}) (x : aT) : - (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. -Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. -Lemma sfun_prod I r (P : {pred I}) (f : I -> {sfun aT >-> rT}) (x : aT) : - (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. -Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. Lemma sfunX f n : f ^+ n =1 (fun x => f x ^+ n). Proof. by move=> x; elim: n => [|n IHn]//; rewrite !exprS sfunM/= IHn. Qed. @@ -207,8 +196,6 @@ HB.instance Definition _ f g := MeasurableFun.copy (\- f) (- f). HB.instance Definition _ f g := MeasurableFun.copy (f \- g) (f - g). HB.instance Definition _ f g := MeasurableFun.copy (f \* g) (f * g). -Import HBSimple. - (* TODO: mv to `measurable_realfun.v`? *) HB.instance Definition _ (D : set aT) (mD : measurable D) : @FImFun aT rT (mindic _ mD) := FImFun.on (mindic _ mD). @@ -222,12 +209,12 @@ End ring. Arguments indic_sfun {d aT rT} _. Section sfun_lmodType. -Context d (aT : measurableType d) (R : realType). -Import HBSimple. +Context d (aT : measurableType d) (R : realType) (N : normedModType R). HB.instance Definition _ (V : normedModType R) := GRing.Lmodule.on (borel_type V). Import MeasurableNormedModuleOpen. +Import HBSimple. Lemma sfun_op (U V W : normedModType R) (f : {sfun aT >-> U}) (g : {sfun aT >-> V}) @@ -240,7 +227,7 @@ rewrite inE; apply/andP; split; rewrite inE/=. \bigcup_(a in range f) (\bigcup_(b in range g) ((f @^-1` [set a] `&` g @^-1` [set b]) `&` [set _ | Y (h (a, b))]))). apply/seteqP; split=> [x/= Yfg|x [a _] [b _] [[/= <- <-]]//]. - by exists (f x); [exists x|exists (g x); [exists x|split]]. + by exists (f x); [exists x|exists (g x); [exists x|]]. apply: fin_bigcup_measurable; first exact: fimfunP. move=> a _; apply: fin_bigcup_measurable; first exact: fimfunP. move=> b _; apply: measurableI; last first. @@ -254,7 +241,7 @@ rewrite inE; apply/andP; split; rewrite inE/=. exact: (measurable_funPTI g (measurable_set1 b)). apply: (sub_finite_set (B := h @` (range f `*` range g))). by move=> _ [x _ <-]/=; exists (f x, g x) => //; split; exists x. -by apply: finite_image; apply: finite_setX; exact: fimfunP. +exact/finite_image/finite_setX/fimfunP. Qed. Lemma sfun_submod_closed (V : normedModType R) : @@ -270,11 +257,84 @@ HB.instance Definition _ (V : normedModType R) := HB.instance Definition _ (V : normedModType R) := [SubChoice_isSubLmodule of {sfun aT >-> V} by <:]. -Lemma sfun0r : (0 : {sfun aT >-> R}) =1 cst 0. -Lemma sfun0m {V : normedModType R} : (0 : {sfun aT >-> V}) =1 cst 0. +Implicit Types (f g : {sfun aT >-> N} : lmodType _). + +Lemma sfun0' : (0 : {sfun aT >-> N} : lmodType _) =1 cst 0. Proof. by []. Qed. +Lemma sfunN' f : - f =1 \- f. Proof. by []. Qed. +Lemma sfunD' f g : f + g =1 f \+ g. Proof. by []. Qed. +Lemma sfunB' f g : f - g =1 f \- g. Proof. by []. Qed. +Lemma sfunZ' k f : k *: f =1 k \*: f. Proof. by []. Qed. +Lemma sfun_sum' I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : + (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. +Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. +Lemma sfun_prod' I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : + (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. +Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. + +HB.instance Definition _ f g := MeasurableFun.copy (f \+ g) (f + g). +HB.instance Definition _ f g := MeasurableFun.copy (\- f) (- f). +HB.instance Definition _ f g := MeasurableFun.copy (f \- g) (f - g). +HB.instance Definition _ k f := MeasurableFun.copy (k \*: f) (k *: f). End sfun_lmodType. +(* This could be moved elsewhere *) +Section indic_lmod. +Context {T : Type} {K : pzRingType} {L : lmodType K}. + +Definition indic_lmod (A : set T) (z : L) := ( *:%R^~ z) \o \1_A. + +Lemma indic_lmodE A z : indic_lmod A z = (fun x => if x \in A then z else 0). +Proof. +by apply/funext=> x; rewrite/indic_lmod/= indicE; +case: ifPn=> _ /=; rewrite ?scale0r ?scale1r. +Qed. + +Lemma preimage_indic_mod A (B : set L) (z : L) : + (indic_lmod A z) @^-1` B = if z \in B then if 0 \in B then [set: T] else A + else if 0 \in B then ~` A else set0. +Proof. +rewrite comp_preimage preimage_indic. by do 4 (case: ifPn => [|]); + rewrite ?in_setE ?notin_setE //= ?scale0r ?scale1r. +Qed. + +Lemma indic_lmod_fimfun_subproof (A : set T) (z : L) : +@FiniteImage T L (indic_lmod A z). Proof. by []. Qed. + +HB.instance Definition _ A z := @indic_lmod_fimfun_subproof A z. + +End indic_lmod. + +Section mindic_lmod. +Context d {aT : measurableType d} {rT : realType} {nT : normedModType rT}. + +Definition mindic_lmod (A : set aT) (mA : measurable A) := + @indic_lmod aT rT nT A. + +Import MeasurableNormedModule. + +Lemma measurable_indic_lmod {D} (A : set aT) (mA : d.-measurable A) (z:nT) : +measurable_fun D (mindic_lmod mA z). +Proof. +move=> mD Y mY; rewrite preimage_indic_mod //. +do 2 (case: ifP => _); apply: measurableI=>//; exact: measurableC. +Qed. + +HB.instance Definition _ A mA z := @isMeasurableFun.Build _ _ aT nT + (mindic_lmod mA z) (@measurable_indic_lmod [set: aT] A mA z). + +HB.instance Definition _ (D : set aT) (mD : measurable D) (z : nT) : + @FImFun aT nT (mindic_lmod mD z) := FImFun.on (mindic_lmod mD z). + +Import HBSimple. + +(* +Definition mindic_lmod_sfun (D : set aT) (mD : measurable D) (z : nT) : + {sfun aT >-> nT} := mindic_lmod mD z. +*) + +End mindic_lmod. + Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : t < 0 -> f @^-1` [set t] = set0. Proof. @@ -290,12 +350,12 @@ by split=> [z/= <-|z/= ->]; rewrite [x * _]mulrC (mulfK, divfK). Qed. Section simple_bounded. -Context {d} {T : sigmaRingType d} {R : realType}. +Context d (T : sigmaRingType d) (R : realType) (N : normedModType R). Import HBSimple. Import MeasurableR. -Lemma simple_bounded (f : {sfun T >-> R}) : bounded_fun f. +Lemma simple_bounded (f : {sfun T >-> N}) : bounded_fun f. Proof. have /finite_seqP[r fr] := fimfunP f. exists (fine (\big[maxe/-oo%E]_(i <- r) `|i|%:E)). @@ -387,6 +447,8 @@ Definition proj_nnsfun d (T : measurableType d) (R : realType) mul_nnsfun f (indic_nnsfun R mA). Section mrestrict. + +Import HBSimple. Import HBNNSimple. Lemma mrestrict d (T : measurableType d) (R : realType) (f : {nnsfun T >-> R}) diff --git a/theories/probability_theory/independence.v b/theories/probability_theory/independence.v index 96b881e56c..1729d53850 100644 --- a/theories/probability_theory/independence.v +++ b/theories/probability_theory/independence.v @@ -603,7 +603,10 @@ Section expectationM. Context {R : realType} {d} {T : measurableType d} (P : probability T R). Local Open Scope ereal_scope. +<<<<<<< HEAD:theories/probability_theory/independence.v Import HBNNSimple. +======= +>>>>>>> aedb2e9ad (merge with measurableTypeNormed):theories/independence.v Import MeasurableR. #[local] Lemma expectationM_nnsfun (f g : {nnsfun T >-> R}) : diff --git a/theories/probability_theory/normal_distribution.v b/theories/probability_theory/normal_distribution.v index a2df3f5dc2..29ea4bde45 100644 --- a/theories/probability_theory/normal_distribution.v +++ b/theories/probability_theory/normal_distribution.v @@ -219,6 +219,8 @@ HB.instance Definition _ m s := Measure.on (normal_prob m s). End normal_prob_def. +End normal_prob_def. + Section normal_probability. Context {R : realType} (m sigma : R). Local Open Scope ring_scope. @@ -588,7 +590,6 @@ Section normal_prob_lemmas. Context {R : realType}. Local Notation mu := lebesgue_measure. Local Open Scope ereal_scope. - Import MeasurableR. Lemma integral_normal_prob (m s : R) f U : measurable U -> diff --git a/theories/probability_theory/uniform_distribution.v b/theories/probability_theory/uniform_distribution.v index db21ea3dde..4ea91d5f4d 100644 --- a/theories/probability_theory/uniform_distribution.v +++ b/theories/probability_theory/uniform_distribution.v @@ -149,7 +149,6 @@ case: ifPn => //. by rewrite inE/= in_itv/= => axb; rewrite indicE (negbTE xE) mule0. Qed. -Import HBNNSimple. Let integral_uniform_nnsfun (f : {nnsfun _ >-> R}) : (\int[uniform_prob ab]_x (f x)%:E = diff --git a/theories/real_measure/lebesgue_measure.v b/theories/real_measure/lebesgue_measure.v index 110626a7af..dab6306645 100644 --- a/theories/real_measure/lebesgue_measure.v +++ b/theories/real_measure/lebesgue_measure.v @@ -573,7 +573,8 @@ apply: (@measure_semi_sigma_additive _ _ _ (@lebesgue_measure R) move=> [X mX [X' mX']] XX'Fn. apply: measurable_image_fine. rewrite -XX'Fn. - apply: measurableU; first exact: measurable_image_EFin. + apply: measurableU. + exact: measurable_image_EFin. by case: mX' => //; exact: measurableU. - move=> i j _ _ [x [[a [Fia aoo ax] [b [Fjb boo] bx]]]]. move: tF => /(_ i j Logic.I Logic.I); apply. diff --git a/theories/real_measure/lebesgue_stieltjes_measure.v b/theories/real_measure/lebesgue_stieltjes_measure.v index 2baa90cfc8..b2195deb50 100644 --- a/theories/real_measure/lebesgue_stieltjes_measure.v +++ b/theories/real_measure/lebesgue_stieltjes_measure.v @@ -94,6 +94,9 @@ Local Open Scope ring_scope. Reserved Notation "R .-ocitv" (at level 1, format "R .-ocitv"). Reserved Notation "R .-ocitv.-measurable" (at level 2, format "R .-ocitv.-measurable"). +Reserved Notation "R .-open" (at level 1, format "R .-open"). +Reserved Notation "R .-open.-measurable" + (at level 2, format "R .-open.-measurable"). Notation right_continuous f := (forall x, f%function @ at_right x --> f%function x). diff --git a/theories/real_measure/measurable_realfun.v b/theories/real_measure/measurable_realfun.v index 6534efc8f7..29eab28fbb 100644 --- a/theories/real_measure/measurable_realfun.v +++ b/theories/real_measure/measurable_realfun.v @@ -338,6 +338,165 @@ Qed. End measurable_fun_measurable. +Module RGenOInfty. +Section rgenoinfty. +Variable R : realType. +Implicit Types x y z : R. + +Definition G := [set A | exists x, A = `]x, +oo[%classic]. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. +Proof. +case: b; last by apply: sub_sigma_algebra; eexists; reflexivity. +rewrite itvcyEbigcap; apply: bigcapT_measurable => k. +by apply: sub_sigma_algebra; eexists; reflexivity. +Qed. + +Lemma measurable_itv_bounded a b x : a != +oo%O -> + G.-sigma.-measurable [set` Interval a (BSide b x)]. +Proof. +case: a => [a r _|[_|//]]. + by rewrite set_itv_splitD; apply: measurableD => //; + exact: measurable_itv_bnd_infty. +by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +exact: MeasurableRocitv.ocitv_measurable_itv. +Qed. + +End rgenoinfty. +End RGenOInfty. + +Module RGenInftyO. +Section rgeninftyo. +Variable R : realType. +Implicit Types x y z : R. + +Definition G := [set A | exists x, A = `]-oo, x[%classic]. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. +Proof. +case: b; first by apply sub_sigma_algebra; eexists; reflexivity. +rewrite -setCitvr itvoyEbigcup; apply/measurableC/bigcupT_measurable => n. +rewrite -setCitvl; apply: measurableC. +by apply: sub_sigma_algebra; eexists; reflexivity. +Qed. + +Lemma measurable_itv_bounded a b x : a != -oo%O -> + G.-sigma.-measurable [set` Interval (BSide b x) a]. +Proof. +case: a => [a r _|[//|_]]. + by rewrite set_itv_splitD; apply/measurableD => //; + rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. +by rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +exact: MeasurableRocitv.ocitv_measurable_itv. +Qed. + +End rgeninftyo. +End RGenInftyO. + +Module RGenCInfty. +Section rgencinfty. +Variable R : realType. +Implicit Types x y z : R. + +Definition G : set_system R := [set A | exists x, A = `[x, +oo[%classic]. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. +Proof. +case: b; first by apply: sub_sigma_algebra; exists x; rewrite set_itvcy. +rewrite itvoyEbigcup; apply: bigcupT_measurable => k. +by apply: sub_sigma_algebra; eexists; reflexivity. +Qed. + +Lemma measurable_itv_bounded a b y : a != +oo%O -> + G.-sigma.-measurable [set` Interval a (BSide b y)]. +Proof. +case: a => [a r _|[_|//]]. + rewrite set_itv_splitD. + by apply: measurableD; exact: measurable_itv_bnd_infty. +by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +exact: MeasurableRocitv.ocitv_measurable_itv. +Qed. + +End rgencinfty. +End RGenCInfty. + +Module RGenOpens. +Section rgenopens. +Variable R : realType. +Implicit Types x y z : R. + +Definition G := [set A | exists x y, A = `]x, y[%classic]. + +Local Lemma measurable_itvoo x y : G.-sigma.-measurable `]x, y[%classic. +Proof. by apply sub_sigma_algebra; eexists; eexists; reflexivity. Qed. + +Local Lemma measurable_itv_o_infty x : G.-sigma.-measurable `]x, +oo[%classic. +Proof. +rewrite itvbndyEbigcup; apply: bigcupT_measurable => i. +exact: measurable_itvoo. +Qed. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. +Proof. +case: b; last exact: measurable_itv_o_infty. +rewrite itvcyEbigcap; apply: bigcapT_measurable => k. +exact: measurable_itv_o_infty. +Qed. + +Lemma measurable_itv_infty_bnd b x : + G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. +Proof. +by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurable_itv_bounded a x b y : + G.-sigma.-measurable [set` Interval (BSide a x) (BSide b y)]. +Proof. +move: a b => [] []; rewrite -[X in measurable X]setCK setCitv; + apply: measurableC; apply: measurableU; try solve[ + exact: measurable_itv_infty_bnd|exact: measurable_itv_bnd_infty]. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. +exact: MeasurableRocitv.ocitv_measurable_itv. +Qed. + +End rgenopens. +End RGenOpens. + Section erealwithrays. Context {R : realType}. Implicit Types (x y z : \bar R) (r s : R). @@ -1248,7 +1407,8 @@ rewrite [X in _ @^-1` X](punct_eitv_bndy _ x) preimage_setU setIUr. apply: measurableU; last first. by rewrite preimage_abse_pinfty; apply: measurableI => //; exact: measurableU. apply: measurableI => //; exists (normr @^-1` `]x, +oo[%classic). - by rewrite -[X in measurable X]setTI; exact: normr_measurable. + rewrite -[X in measurable X]setTI. + exact: normr_measurable. exists set0; first by constructor. rewrite setU0 predeqE => -[y| |]; split => /= => -[r]; rewrite ?/= /= ?in_itv /= ?andbT => xr//. From eb07cc96e58e11f8d15d7fb81386940c0dd95b63 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Thu, 9 Jul 2026 15:39:08 +0200 Subject: [PATCH 25/38] started adding bochner.v --- _CoqProject | 1 + theories/lebesgue_integral_theory/bochner.v | 961 ++++++++++++++++++ .../simple_functions.v | 11 +- 3 files changed, 971 insertions(+), 2 deletions(-) create mode 100644 theories/lebesgue_integral_theory/bochner.v diff --git a/_CoqProject b/_CoqProject index 20e376835e..42c3d46343 100644 --- a/_CoqProject +++ b/_CoqProject @@ -125,6 +125,7 @@ theories/real_measure/real_measure.v theories/borel_hierarchy.v theories/lebesgue_integral_theory/simple_functions.v +theories/lebesgue_integral_theory/bochner.v theories/lebesgue_integral_theory/lebesgue_integral_definition.v theories/lebesgue_integral_theory/measurable_fun_approximation.v theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v diff --git a/theories/lebesgue_integral_theory/bochner.v b/theories/lebesgue_integral_theory/bochner.v new file mode 100644 index 0000000000..e1e6101cf6 --- /dev/null +++ b/theories/lebesgue_integral_theory/bochner.v @@ -0,0 +1,961 @@ +From HB Require Import structures. +From mathcomp Require Import all_ssreflect_compat ssralg ssrnum ssrint interval. +From mathcomp Require Import interval_inference archimedean finmap. +From mathcomp Require Import mathcomp_extra boolp classical_sets functions. +From mathcomp Require Import cardinality reals fsbigop ereal topology tvs. +From mathcomp Require Import normedtype sequences real_interval esum measure. +From mathcomp Require Import lebesgue_measure numfun realfun measurable_realfun. +From mathcomp Require Import normed_module measurable_structure simple_functions. +From mathcomp Require Import hahn_banach_theorem. + +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) +Set Implicit Arguments. +Unset Strict Implicit. +Unset Printing Implicit Defensive. +Import Order.TTheory GRing.Theory Num.Def Num.Theory. +Import numFieldNormedType.Exports. + +Local Open Scope classical_set_scope. +Local Open Scope ring_scope. +Local Open Scope measure_display_scope. + +Lemma open_closed_measurable (t : topologicalType) : +(@open t).-sigma.-measurable = (@closed t).-sigma.-measurable. +Proof. +rewrite eqEsubset; split; rewrite{1}/measurable/=. + apply: sigma_algebra_subl=> U oU. + rewrite -(setCK U); apply: sigma_algebraC. + apply: sub_sigma_algebra=>//; exact: open_closedC. +apply: sigma_algebra_subl=> F cF; rewrite -(setCK F); apply:sigma_algebraC. +apply: sub_sigma_algebra=>//; exact: closed_openC. +Qed. + +(* Some should be moved in topology_structure.v, some in metric_structure.v*) +Section topology_lemmas. +Context {T : topologicalType}. + +Definition separable := +exists D: set T, countable D /\ dense D. + +Definition separable_set (A : set T) := +exists D, + [/\ countable D, D `<=` A & forall O, A`&`O !=set0 -> open O -> O`&`D !=set0]. + +Lemma separableTE : separable = separable_set [set:T]. +Proof. +apply: eq_exists=>A. rewrite [X in [/\ _, _ & X]] (_:_ = dense A)//. + by under eq_forall do rewrite setTI. +by rewrite propeqE; split=>[[cA dA]|[cA _ dA]]. +Qed. + +Lemma separable_set0 : separable_set set0. +Proof. by exists set0; split=>// U; rewrite set0I =>[[x]]. Qed. +#[local] Hint Resolve separable_set0 : core. + +Lemma bigcupT_separable [A : (set T)^nat] : (forall n, separable_set (A n)) -> +separable_set (\bigcup_n A n). +Proof. +move=>/choice [D_ /all_and3 [cDx DAx dDx]]. exists (\bigcup_n D_ n); split. + exact: bigcup_countable. exact: subset_bigcup. move=> O [x [[n _ Anx] Ox] oO]. +have /(dDx n O) /(_ oO) [y [Oy Dny]] : A n `&` O !=set0 by exists x. +by exists y; split=>//; exists n. +Qed. + +Lemma bigcup_separable [A : (set T)^nat] [P : set nat] : +(forall n, P n -> separable_set (A n)) +-> separable_set (\bigcup_(i in P) A i). +Proof. +rewrite bigcup_mkcond => nsPA. apply: bigcupT_separable=>n. +case: ifPn=>[|_]. rewrite in_setE. apply: (nsPA n). +by exists set0; split=>// U [x [F]]. +Qed. + +Lemma basisP {B : set_system T} : basis B <-> B `<=`open +/\ (forall U: set T, open U -> U = \bigcup_(V in [set W | B W /\ W `<=`U]) V). +Proof. +split=> [[oB bB]|[Bo dec]]. split=> //U oU. + rewrite eqEsubset /bigcup; split=>[x Ux/=|x [A/= [BA AU] /AU //]]. + have:= bB x. rewrite/cvg_to {2}/nbhs/filter_from/= => /(_ U)/=. + have nT: \near x, U x by apply: (open_in_nearW oU)=>[y|]; rewrite in_setE. + rewrite nbhs_nearE !exists2E/= => /(_ nT). + by under eq_exists=>x0 do rewrite -andA {1}(andC (x0 x) _) andA. +split=>// x. rewrite/cvg_to/=nbhsE/open_nbhs => P /= + [U [/(dec U)->] [A [BA AU] Ax] UP]. exists A=>// t At; apply: UP. by exists A. +Qed. + +Lemma countable_basis_to_seq {B : set_system T} : +countable B -> basis B -> [set:T] !=set0 -> exists f : nat -> _, range f = B /\ +forall U : set T, open U -> U = \bigcup_(n in [set m| f m `<=`U]) (f n). +Proof. +move=> /pfcard_geP /=. case=> [->/basisP[_ /(_ setT openT) /= d0] + /set0P/eqP T0|/surjfunPex [f ->]/basisP[Bo dec]]; first exfalso. + move: d0; rewrite (_ : [set _ | False /\ _] = set0) ?bigcup0//. + by apply: eq_set=> y; apply: notTE=>[[]]. +exists f; split=>//. move=> U /(dec U) ->; apply:eq_set=>x/=. +rewrite !exists2E propeqE; split=>//=[[A [[[n _ <- fnU] fnx]]]| [n [fni fnx]]]. + exists n; split=>//= y fny/=. exists (f n)=>//. split=>//. by exists n. +exists (f n); split=>//; split=>[|y /fni/= [V [_ VU /VU//]]]. by exists n. +Qed. + +Lemma second_countable_separable : +@second_countable T -> separable. +Proof. +move=> [B] /(sub_countable (card_le_setD B [set set0])). +rewrite/countable=> /pfcard_geP. case=> [|[f] /basisP [oB bB]]. +rewrite setD_eq0=> /subset_set1. case=> -> /basisP [oB bB]; + have:= (bB [set:T]) openT. rewrite [X in \bigcup_(_ in X) _] (_:_ = set0). + by apply: eq_set=>x/=; rewrite andB. + by rewrite bigcup0 // separableTE => ->. + rewrite [X in \bigcup_(_ in X) _] (_:_ = [set set0]). + by apply: eq_set=>A/=; rewrite (propT (subsetT A)) andB.1.2. + by rewrite bigcup_set1 separableTE=> ->. +have rfB0:= image_eq f. +have /choice [g BG]: forall n, exists x, B (f n) /\ f n x. move=>n; + have := imageT f n. by rewrite rfB0=>/= [[Bfn /eqP/set0P [x fnx]]]; exists x. +exists (range g); split=>[|A /[swap] /(bB A) -> /bigcup_nonempty + [V /= [BV VA] /set0P/eqP V0]]; first exact: card_image_le. +have : (B `\ set0) V by split. rewrite -rfB0 => [[n _ fnV]]. +exists (g n); split=>//; exists V=>//=. by rewrite -fnV; have [_] := (BG n). +Qed. + +Lemma salgebra_second_countable {B : set_system T} : +countable B -> basis B -> open.-sigma.-measurable = B.-sigma.-measurable. +Proof. +move=> cB bB; have [T0|/set0P/(countable_basis_to_seq cB bB) [f [rfb dec]]] := + eqVneq [set:T] set0. + have o0 : @open T = [set set0]. rewrite eqEsubset; split=> [U _| A ->] /=; + first by rewrite -subset0 -T0. exact: open0. + rewrite/measurable/= eqEsubset; split; first rewrite o0. + apply: sigma_algebra_subl=> x ->. exact: sigma_algebra0. + by have [/sigma_algebra_sub P _] := bB. +rewrite eqEsubset =>/=; split. apply: sigma_algebra_subl => U /(dec U)->. + rewrite bigcup_mkcond -rfb; apply: sigma_algebra_bigcup => i /=. + case: ifP=> _//. exact: sub_sigma_algebra. exact: sigma_algebra0. +by apply: sigma_algebra_sub; have [] := bB. +Qed. + +End topology_lemmas. + +Section uniform_lemmas. +Context {U : choiceType} {V : uniformType}. + +Lemma cvg_uniform_fin_bigcup [f : U -> V] [F : set_system (U -> V)] {I} + [D : set I] {A : I -> set U} : Filter F -> finite_set D -> +(forall i, D i -> {uniform A i, F --> f}) -> +{uniform \bigcup_(i in D) A i, F --> f}. +Proof. +move=> fF /finite_setP [n]. move:D. +elim:n=>/=[D|n Ih D /eq_cardSP [x Dx /Ih Dxn] UD]. + rewrite II0 card_eq0 => /eqP -> _; rewrite bigcup0 => //=; + exact: cvg_uniform_set0. rewrite -(setD1K Dx) bigcup_setU1. +apply: cvg_uniformU. exact: (UD x). by apply: Dxn=>i [/UD Di//]. +Qed. +End uniform_lemmas. + +(* TODO: move all of this to metric spaces *) +Section norm_lemmas. + +Definition norm_separable_set {K : numDomainType} + {M : pseudoMetricType K} (A : set M) := exists D, + [/\ countable D, D `<=` A & forall (x : M) (r : K), +0 A x -> D `&` ball x r !=set0]. + +Lemma norm_separableP {K : numDomainType} {M : pseudoMetricNormedZmodType K} + (A : set M) : norm_separable_set A <-> separable_set A. +Proof. +split=>[[D [cD DA dD]]|[D [cD DA DD]]]; exists D. split=>// U [x [Ax Ux] oU]. + have /nbhs_ballP/= : nbhs x U by apply/open_nbhs_nbhs. + rewrite /nbhs_ball/nbhs_ball_ => [[r /= /[dup] r0 /(dD x)/= /(_ Ax) + [d [Dd bdrx]] bxrA]]. exists d; split=>//=; exact: bxrA. +split=>//= x r r0 Ax. rewrite setIC; apply: (DD (ball x r)); + last exact: ball_open. +exists x; split=>//; exact: ballxx. +Qed. + +Definition totally_bounded {K : numDomainType} {M : pseudoMetricType K} + (A : set M) := forall eps, 0 exists F, [/\ finite_set F, + F `<=` A & A `<=` \bigcup_(x in F) ball x eps]. + +Lemma totally_bounded_invnP {K : realType} {M : pseudoMetricType K} + (A : set M) : totally_bounded A <-> forall n, exists F, [/\ finite_set F, + F `<=` A & A `<=` \bigcup_(x in F) ball x n.+1%:R^-1]. +Proof. +split=> [tA n| /choice [F /all_and3 [Ffset FA AbF]] eps e0]. + exact: (tA n.+1%:R^-1). set n := truncn (eps^-1). +exists (F n); split=>//. have leb : forall x, F n x -> + ball x n.+1%:R^-1 `<=` ball x eps. move=> x Fnx; apply: le_ball. + rewrite invf_ple ?posrE //; exact (ltW (truncnS_gt eps^-1)). +exact: (subset_trans (AbF n) (subset_bigcup leb)). +Qed. + +Lemma totally_bounded_separable {K : realType} {M : pseudoMetricNormedZmodType K} +(A : set M) : totally_bounded A -> separable_set A. +Proof. +move=> /totally_bounded_invnP/choice [F /all_and3 [fF FA AbF]]. +apply/norm_separableP. + exists (\bigcup_n F n); split=>[||x r r0 /(AbF (truncn r^-1)) [d Fd bd]]. + apply: bigcup_countable=> // i _; exact: finite_set_countable. + exact: bigcup_sub. exists d; split. by exists (truncn r^-1). +apply: ball_sym; apply: le_ball bd. rewrite invf_ple ?posrE //; +exact: (ltW (truncnS_gt r^-1)). +Qed. + +(* Should be generalized to metric spaces, +but normedModType doesn't inherit from metricType yet*) +Lemma closed_dist0 {R:realType} {N:normedModType R} {F : set N} +(cF : closed F) (x:N) : +F x = forall e:R, 0 < e -> exists f:N, F f /\ `|x - f| < e. +Proof. + rewrite propeqE; split=>[Fx e|Cx]. exists x; split=>//=. by rewrite subrr normr0. + have Q : forall n:nat, exists f:N, F f /\ `|x-f| < n.+1%:R^-1. + move=> n; apply: (Cx n.+1%:R^-1)=>//. + have [f Pf] := choice Q. apply: (@closed_cvg _ _ _ eventually_filter f _ cF). + by exists 0=>// n _; have [Ffn _] := Pf n. + apply/cvg_ballP=> e e0. rewrite pseudo_metric_ball_norm/=. + have Pfe := (Pf (truncn (e^-1))). near=>n. apply: (@lt_trans _ _ (n.+1%:R^-1)). + near:n. by apply: nearW=>n; have [_ d] := (Pf n). + rewrite invf_plt=>//. by rewrite posrE. apply: (@lt_trans _ _ n%:R). + near:n. exact: nbhs_infty_gtr. by rewrite ltr_nat. +Unshelve. all: end_near. Qed. + +Lemma supP {R : realType} (S : set R) (x : R) (supS: has_sup S) : +sup S <= x <-> forall y, S y -> y<=x. +Proof. +split=> [sSx y Sy|Sx]. apply: (le_trans _ sSx); exact: sup_upper_bound. +apply: ge_sup=>//. by apply/set0P/eqP=> S0; apply: (@has_sup0 _ R); rewrite -S0. +Qed. + +Lemma gt_sup {R : realType} (S : set R) (x : R) (supS : has_sup S): +sup S < x -> forall y, S y -> y sSx y Sy. apply: (le_lt_trans _ sSx); exact: sup_upper_bound. +Qed. + +Lemma uniform_to_norm {T : choiceType} {R : realType} {N : normedModType R} +{f_ : (T->N)^nat} {f : T -> N} (A : set T) (An0 : A !=set0) (eps:R) (e0 : 0 f} -> +\forall n \near \oo, forall t:T, A t -> `|f_ n t - f t| < eps. +rewrite -nbhs_entourageE uniform_entourage => [/filter_fromP/= Cuf]. +set C := [set gf: (T->N)*_ | forall t, A t -> ball (gf.1 t) eps (gf.2 t)]. +have: nbhs \oo (f_ @^-1` xsection C f). apply: Cuf. + apply: (@in_filter_from _ _ _ _ [set xy | ball xy.1 (PosNum e0)%:num xy.2]); + exact: entourage_ball. rewrite /xsection/=. under eq_set do rewrite in_setE. +rewrite/C/= => [[n0 _ Cvn]]; exists n0=>//n/Cvn. rewrite -ball_normE/= => +/[swap] t /[swap] At /(_ t At) fnte. by rewrite distrC. +Qed. + +Lemma uniform_cvg_sup0 {T : choiceType} {R : realType} {N : normedModType R} +{f_ : (T->N)^nat} {f : T -> N} (A : set T) (An0 : A !=set0): +{uniform A, f_ @ \oo --> f} <-> +(\forall n\near \oo, has_sup [set `|f_ n x - f x| | x in A]) /\ +sup [set `|f_ n x - f x| | x in A] @[n--> \oo] --> 0. +Proof. +split=>[/(uniform_to_norm An0) L |[[n1 _ has_sup_n1] /cvgr0Pnorm_lt s0]]. + split. have [n0 _ fNf1] := (L 1 ltr01). + exists n0=>// n /fNf1 fnf1; split. exact: image_nonempty. + exists 1=>a [t At <-]. exact: (ltW (fnf1 t At)). + apply/cvgr0Pnorm_le => e /(L e) [n0 _ fNfe]. exists n0=>// n /fNfe fnfe. + have /normr_idP -> : 0 <= sup [set `|f_ n x - f x| | x in A] by + apply: sup_ge0=>x /= [t At <-]; exact: normr_ge0. apply/supP=>[|y [t At <-]]. + split. exact: image_nonempty. exists e=> a [t At <-]. + 1,2: try (exact: (ltW (fnfe t At))). +rewrite -nbhs_entourageE uniform_entourage -entourage_from_ballE => +[F/= [G [H [e/=e0 beH] HG]]]. rewrite/xsection; under eq_set do rewrite in_setE. +have [n0 _ Nfe] := s0 e e0 => GF. exists (maxn n0 n1)=>// n. +under eq_set do rewrite geq_max. move=> /andP /[dup] [[n0n n1n]] [/Nfe]. +have /normr_idP -> : 0 <= sup [set `|f_ n x - f x| | x in A] by + apply: sup_ge0=>x /= [t At <-]; exact: normr_ge0. +move=> /[swap] /(has_sup_n1) hs /(gt_sup hs) fnfe/=. apply: GF; +apply: HG=>t At; apply: beH=>/=. rewrite -ball_normE/= distrC. apply: fnfe. +by exists t. +Qed. + +Lemma uniform_cvg_has_sup0 {T : choiceType} {R : realType} {N : normedModType R} +{f_ : (T->N)^nat} {f : T -> N} (A : set T) (An0 : A !=set0): +{uniform A, f_ @ \oo --> f} <-> +forall eps, 0 \forall n\near \oo, has_sup + [set `|f_ n x - f x| | x in A] /\ sup [set `|f_ n x - f x| | x in A] < eps. +Proof. +apply: (iff_trans (uniform_cvg_sup0 An0)); split=> [[hs /cvgr0_norm_lt s0 eps +/(s0 eps) se]|S0]. near=>n; split. by near:n. rewrite -[X in X < _](normr_idP _). + apply: sup_ge0=> x [y _ <-]//. by near:n. +split. have [n _ nP] := S0 1 ltr01; exists n=>// n0 /nP [//]. +apply/cvgr0Pnorm_lt=> eps /(S0 eps) [n0 _ ns]. exists n0=>// n /ns [_ se]. +by rewrite (normr_idP _)//; apply: sup_ge0=> x [y _ <-]//. +Unshelve. all: end_near. Qed. + +End norm_lemmas. + +(*Should be moved to measurable_fun.v*) +Section measurable_fun_lemmas. + +Lemma measurable_fun_open_closed {d} {aT : measurableType d} +{T : topologicalType} {D : set aT} (f : aT -> T) : +measurable_fun D (f : aT -> g_sigma_algebraType (@open T)) = +measurable_fun D (f : aT -> g_sigma_algebraType (@closed T)). +Proof. + rewrite propeqE; split=> mf mD Y; + [rewrite -open_closed_measurable| rewrite open_closed_measurable]; exact: mf. +Qed. + +Import MeasurableR. +(*Cannot be generalized yet as it is for a different display from normr_continuous*) +Lemma normr_measurable_gen {R : realType} {N : normedModType R} {A : set N} : +measurable_fun A normr. +Proof. +move=> /[dup] mA. +apply: (@measurability _ _ _ _ _ (@normr R N) _ + (eq_trans (esym (RGenOpenSets.measurableE R)) (RGenOInfty.measurableE R))). +move=> U [I [x] ->] <-. have [/(_ norm_continuous) nopen _] := + continuousP (normr: N-> R). apply: measurableI => //. +apply: sub_sigma_algebra; exact: nopen. +Qed. + +Lemma measurable_fun_dist {d} {A : measurableType d} {R : realType} +{N : normedModType R} {f g : A -> N} {D : set A}: separable_set (image D f) +-> measurable_fun D f -> measurable_fun D g -> measurable D -> +forall (r:R), 0 measurable (D `&` [set a | `|f a - g a| < r]). +Proof. +move=> /norm_separableP [Df [cDf _ DF]] mf mg mD r r0. +rewrite ( _ : (_ `&`_) = \bigcup_q \bigcup_(z in Df) +\bigcup_(k in [set k | rat.ratr q + k.+1%:R^-1 < r]) + (D `&` f@^-1`(ball z k.+1%:R^-1) `&` (D `&` g@^-1`(ball z (rat.ratr q))))). + rewrite eqEsubset /bigcup; split=>[x [Dx /= fgxr]|x [q _ /= [z Dfz] [k qkr] + [[Dx bzkf] [_ bzqg]]]]. + have /dense_rat/(_ (itv_open `|f x - g x| r)) /=[q] : + `]`|f x - g x|, r[%classic !=set0. exists ((`|f x - g x|+r)/2). + rewrite/=in_itv/=. apply/andP;split; by apply (midf_lt fgxr). + rewrite /=in_itv=>/= [[/andP[fgq qr]] [q1 _ q1q]]. + pose eps := minr (q - `|f x - g x|) (r-q). pose k := truncn eps^-1. + have eps0 : 0 < eps by rewrite lt_min !subr_gt0; apply/andP. + have [erq eqfg] : eps <= r-q /\ eps <= q - `|f x - g x| by + rewrite !ge_min; split; apply/orP; [right|left]. + exists q1=>//=. rewrite q1q/=. + have ke : k.+1%:R^-1 < eps by rewrite invf_plt ?posrE//; + exact: truncnS_gt. + have k0 : (0:R) < k.+1%:R^-1 by rewrite invr_gt0. + have [z [Dfz]] := DF (f x) _ k0 (imageP f Dx); rewrite -ball_normE/=distrC. + exists z=>//. exists k. rewrite -ltrBrDl. exact: (lt_le_trans ke erq). + split=>//; split=>//. apply: (le_lt_trans (ler_distD (f x) z (g x))). + rewrite -(addrNK `|f x - g x| q). + exact: (ltr_leD (lt_le_trans (lt_trans b ke) eqfg)). + split=>//; rewrite -ball_normE /= in bzkf, bzqg. + apply: (le_lt_trans (ler_distD z _ _) (lt_trans _ qkr)). + rewrite addrC (distrC (f x) z); exact: ltrD. +apply: bigcupT_measurable_rat=> q. apply: countable_bigcup_measurable=>// z Dfz. +apply: bigcup_measurable=>k /= qkr. + apply: measurableI; [apply: (mf mD)|apply: (mg mD)]; + apply: sub_sigma_algebra; exact: ball_open. +Qed. + +(* Lemma 4.29 Infinite Dimensional Analysis A Hitchhikers Guide, +Third Edition (Charalambos D. Aliprantis, Kim C. Border)*) +Lemma measurable_fun_cv {d} {T : measurableType d} {R : realType} +{X : normedModType R} [D : set T] [h : (T->X)^nat] [f : T -> X] : +(forall m:nat, measurable_fun D (h m)) -> +(forall x : T, D x -> h ^~ x @\oo --> f x) +-> measurable_fun D f. +Proof. +move=> mhn hf; rewrite measurable_fun_open_closed. +rewrite/measurable_fun=> /[dup] mD. apply: measurability=>// C. case=>F cF<-. +pose G n := [set y | exists c, F c /\ `|c-y| < (n.+1%:R)^-1]. +rewrite [D`&`f@^-1` F] (_:_ = \bigcap_m \bigcup_n \bigcap_(k>=n) + (D `&` (h k) @^-1` (G m))). + rewrite eqEsubset; split=>[x/= [Dx]|x b/=]. + rewrite closed_dist0// => Fx m _. + have : (0:R)<(m.+1%:R^-1)/2 by apply divr_gt0. + move=> /[dup] m20 /Fx [y [fy fxym]]. + have /(_ eventually_filter _ m20) [n0 _ fhn0] := cvgr_dist_lt _ _ (hf x Dx). + exists n0=>// n /fhn0 fhnm2. split=>//; exists y; split=>//. + rewrite [X in _//. + by rewrite distrC. + have Dx : D x by have [n _ /(_ n (le_refl n)) [Dx _]] := b 0 I. + split=>//; rewrite closed_dist0// => e e0. + have e20 : 0 < e/2 by apply: divr_gt0. have [n0 _] := b (truncn (e/2)^-1) I. + have/(_ eventually_filter _ e20) [n1 _ /(_ (maxn n0 n1) (leq_maxr n0 n1)) fhe] + := cvgr_dist_lt _ _ (hf x Dx). + move=> /(_ (maxn n0 n1) (leq_maxl n0 n1)) [_ [/=f0 [f0F yhe]]]. + exists f0; split=>//. rewrite (splitr e). + apply: (le_lt_trans (ler_distD (h (maxn n0 n1) x) _ _) (ltrD _ _))=>//. + rewrite distrC; apply: (lt_trans yhe). rewrite invf_plt ?posrE//. + exact: truncnS_gt. +apply: bigcap_measurable=>// m _. apply: bigcup_measurable=>// n _. +apply: bigcap_measurableType => k /= nk. apply: (mhn k)=>//. +apply: sub_sigma_algebra. +rewrite [X in open X] (_:_ = \bigcup_(c in F) [set y | `|c-y| < m.+1%:R^-1]). + by apply eq_set=> x/=; rewrite exists2E. +apply: bigcup_open=> f0 f0F. have df0c : continuous (normr \o(fun y=> f0-y)). + move=> x; apply: continuous_comp. apply: continuousB=>//. + exact: cst_continuous. exact: norm_continuous. +rewrite -preimage_itvNyo. exact: open_comp. +Qed. + +End measurable_fun_lemmas. + +Section measure_lemmas. +Context d {T : measurableType d} {R : realType} {mu : {measure set T -> \bar R}}. + +Lemma measure0P {A} : (forall eps, 0 (mu A < eps%:E)%E) -> mu A = 0. +Proof. +move=> mAe. apply/eqP; rewrite eq_le; apply/andP; split=>//. +apply/le_ltP=> z z0. have [/(_ (ltW z0)) [->|[r r0 rz]] _] := (gee0P z). + apply: (lt_trans (mAe 1 (ltr01))). exact: ltry. +by move: z0; rewrite rz lte_fin=> /mAe. +Qed. + +Lemma measure0P_invn {A} : (forall n, (mu A < n.+1%:R^-1%:E))%E -> mu A = 0. +Proof. +move=> mAn; apply/measure0P=>eps e0. apply: (lt_trans (mAn (truncn eps^-1))). +rewrite lte_fin invf_plt ?posrE //; exact: truncnS_gt. +Qed. + +End measure_lemmas. + +Section almost_uniform_cvg. +Context {d} {T : measurableType d} {R : realType} +{U : pseudoMetricType R} (mu : {measure set T -> \bar R}) +(f_ : (T->U)^nat) (f : T -> U). + +Definition almost_uniform_cvg (D : set T) := +forall eps:R, 0 exists E, [/\ measurable E, (mu E < eps%:E)%E & + {uniform D `\` E, f_ @ \oo --> f}]. + +Definition almost_uniform_cvgT := +forall eps:R, 0 exists E, [/\ measurable E, (mu E < eps%:E)%E & + {uniform ~`E, f_ @ \oo --> f}]. + +Lemma almost_uniform_cvgTP : almost_uniform_cvg [set:T] <-> almost_uniform_cvgT. +Proof. +by rewrite /almost_uniform_cvg/almost_uniform_cvgT; + under eq_forall do under eq_exists do rewrite setTD. +Qed. + +Lemma almost_uniform_cvg_nnincseqP (D : set T) (h : R^nat) +(ph : forall n, 0 < h n) (h0 : h @ \oo --> 0) : almost_uniform_cvg D <-> +exists E_ : (set T)^nat, {homo E_ : n m / (n<=m)%N >-> (m<=n)%O} /\ + forall n, [/\ measurable (E_ n), (mu (E_ n) < (h n)%:E)%E & + {uniform D`\`(E_ n), f_ @ \oo --> f}]. +Proof. +split=>[aucD|[E_ [nniE /all_and3 [mE0 mEn CuEn] eps e0]]]. + have /choice [E /all_and3 [mE0 mEn CuEn]] : forall n, exists E, + [/\ measurable E, (mu E < (h n)%:E)%E & {uniform D`\`E, f_ @ \oo --> f}] by + move=>n; apply: (aucD (h n)). + exists (fun n => \bigcap_(k < n.+1) (E k)); split. + apply/nonincreasing_seqP=>n/=. + rewrite subsetEset/bigcap => x /= bn2x i in1; + exact: (bn2x i (ltn_trans in1 (ltnSn n.+1))). + move=>n. split. apply: bigcap_measurableType=>//. + apply: (le_lt_trans _ (mEn n)). apply: le_measure; rewrite ?in_setE//. + apply: bigcap_measurableType=>//. apply: bigcap_inf=>/=; exact: ltnSn. + rewrite setD_bigcapr; exact: cvg_uniform_fin_bigcup. +have [n0 _ /=/(_ n0 (le_refl n0))]:= cvgr0_norm_lt h h0 eps e0. +rewrite (normr_idP (ltW (ph n0)))=> hne; exists (E_ n0); split=>//. +exact: lt_trans. +Qed. + +End almost_uniform_cvg. + +Section egorov. +Context d {R : realType} {N : normedModType R} + {T : measurableType d} {mu : {finite_measure set T -> \bar R}}. +Import MeasurableR. + +(* A more general version of Erogov's theorem *) +Lemma pointwise_almost_uniform_sep (f : (T -> N)^nat) (g : T -> N) + (D : set T) : (forall n, separable_set (image D (f n))) + -> (forall n, measurable_fun D (f n)) -> + measurable D -> (forall x, D x -> f ^~ x @ \oo --> g x) -> + almost_uniform_cvg mu f g D. +Proof. +move=> sf mf mD fg eps e0. pose A n k := D `&` + [set x | `|f n x - g x| >=k.+1%:R^-1]. have mg := measurable_fun_cv mf fg. +have mA : forall n k, measurable (A n k). + rewrite /A/==>n k. rewrite -setDD {2}/setD/= [X in _`\`X] (_:_ = + [set x| D x /\ `|f n x - g x| < k.+1%:R^-1]). + apply: eq_set=>x. rewrite propeqE; split=>/=[[Dx nle]|[Dx lt]]; split=>//. + apply: (contra_not_lt nle)=>//. + exact: (@contra_lt_not _ _ (k.+1%:R^-1 <= `|f n x - g x|) _ _ _ lt). + apply: measurableD=>//. exact: measurable_fun_dist. +pose B n k := \bigcup_(i>=n) A i k. have mB: forall n k, measurable (B n k) + by rewrite/B=> n k; apply: bigcup_measurable. +have capB_0 : forall k, \bigcap_n B n k = set0. + rewrite/bigcap/B/bigcup/A/==>k; rewrite -subset0 =>a/=. apply: contraPP=> _. + rewrite -existsNE. under eq_exists do rewrite not_implyE exists2E -forallNE. + have[ad|nad]:= pselect (D a). + have k0 : (0:R) < k.+1%:R^-1 by rewrite invr_gt0. + have /(_ eventually_filter) [n0 _ nfg] := cvgr_dist_lt _ _ (fg a ad) _ k0. + exists n0; split=>// n [n0n [_ kfg]]. + rewrite -falseE -(lt_irreflexive (k.+1%:R^-1: R)); apply: (le_lt_trans kfg). + rewrite distrC; exact: nfg. + by exists 0; split=>//n; rewrite not_andE not_andE; right; left. +have cvB0 : forall k, fine (mu (\bigcap_(i \oo] --> 0. + move=>k; rewrite (_: 0 = fine (mu (\bigcap_n B n k))). + by rewrite capB_0 measure0. + apply: fine_cvg; rewrite fineK ?fin_num_measure//. + exact: bigcapT_measurable. apply: (cvg_measure_bigcap (mB ^~ k)). + exact: fin_num_measure. +have /choice [p pBe] : forall k, exists n, true -> + (mu (\bigcap_(ik. + have ekp : 0 < eps / 2 / 2 ^ k.+1 by rewrite ltr_pdivlMr ?mul0r ?divr_gt0. + have /(_ eventually_filter) [n0 _ /(_ _ (le_refl n0)) /ltW Bn0e2k] := + cvgr0_norm_lt _ (cvB0 k) _ ekp. exists n0.+1 => _. + have mBn0 : measurable (\bigcap_(i < n0.+1) B i k) + by exact: bigcap_measurableType. + rewrite -[X in (X <= _)%E](fineK) ?fin_num_measure// lee_fin/= -?lee_fin + ?fineK ?fin_num_measure// -[X in (X <= _)%E]fineK ?fin_num_measure//. + rewrite lee_fin -[X in X <= _]ger0_norm. exact: fine_ge0. + by rewrite (_ : (_ ^ _)%:R = 2 ^ k.+1) ?natrX. +have e20 : 0 < eps/2 by rewrite divr_gt0. +have mBp : forall k, measurable (\bigcap_(i

k; exact: bigcap_measurableType. +pose C := (\bigcup_k \bigcap_(i<(p k)) (B i k)). exists C; split=>[||]. + exact: bigcupT_measurable. + apply: (le_lt_trans (generalized_Boole_inequality mu mBp _)). + exact: bigcup_measurable. + have e2e : ((eps / 2)%:E < eps%:E)%E by rewrite lte_fin ltr_pdivrMr // ltr_pMr + // {1}(_ : 1 = (1 : nat)%:R) ?ltr_nat //. + have nn_muB : forall i, (0 <= i)%N -> true -> + (0 <= mu (\bigcap_(i0 < p i) B i0 i))%E by move=> i _ _; exact:measure_ge0. + exact: (le_lt_trans (le_trans (lee_nneseries nn_muB pBe) + (epsilon_trick0 xpredT (ltW e20))) e2e). +apply/uniform_restrict_cvg=> U/=; rewrite uniform_nbhsT. +case/nbhs_ex => r /= ballU; apply: filterS; first by move=> ?; exact: ballU. +have [n0 _ /(_ n0)/(_ (leqnn _)) n0ir] := near_infty_natSinv_lt r. +exists (p n0)=>// n /=pn0n x; rewrite /patch. case: ifPn=>//. +rewrite setDE in_setE=> [[Dx]]; rewrite setC_bigcup /B/A => /(_ n0 I). +rewrite setC_bigcap; under eq_bigcupr do rewrite setC_bigcup. +move=> [i /= ipn0] /(_ n (ltnW (ltn_leq_trans ipn0 pn0n))). +rewrite setCI /=; case=>[/(_ Dx) //|]. +move=> /contra_not_lt; rewrite notB.2 => /(_ I) /lt_trans /(_ n0ir) //. +by rewrite -ball_normE distrC. +Qed. + +End egorov. + + +Section bochner_measurable_function. +Import MeasurableR. +Context {d} {T : measurableType d} {R : realType} + (mu : {finite_measure set T -> \bar R}) (X : normedModType R). + +(* TODO : remove the lmodType cast when bug fixed*) +Definition bochner_measurable (f: T -> X) := + exists f_ : ({sfun T >-> X} : lmodType _)^nat, +\forall x \ae mu, f_ n x @[n --> \oo]--> f x. + +Lemma bmeas_meas (f : T -> X) : bochner_measurable f -> measure_is_complete mu + -> measurable_fun [set:T] f. +Proof. +move=> [F [A [mA mA0 /subsetCl cv]]] cmu. rewrite -(setvU A). +apply/measurable_funU=>//. exact: measurableC. split=>[|_ Y mY]. + apply: measurable_fun_cv _ cv=>m. apply: measurable_funP. +apply: cmu. apply: (negligibleS (@subIsetl _ A (f@^-1`Y))). +by exists A; split. +Qed. + +Lemma bmeasD (f g : T -> X) : bochner_measurable f -> bochner_measurable g -> +bochner_measurable (f + g). +Proof. +move=> [F [A [mA mA0 /subsetCl FfxA]]] [G [B [mB mB0 /subsetCl GgxB]]]. +exists (F+G); exists (A`|`B); split. exact: measurableU. exact: null_set_setU. +apply: subsetCl; rewrite setCU => x [/FfxA Ffx /GgxB /= Ggx]; exact: cvgD. +Qed. + +Lemma bmeasZ (x : R) (f : T -> X) (mmf : bochner_measurable f) : +bochner_measurable (x *: f). +Proof. +case: mmf=> F [A [mA mA0 CnA]]. exists (x*:F); exists A; split=>//. +apply: (subset_trans _ CnA). apply: subsetC=>y /=. exact: cvgZl_tmp. +Qed. + +Lemma countim_bmeas (f : T -> X) (mf : forall z, measurable (f@^-1`[set z])): + countable (range f) -> bochner_measurable f. +Proof. +move=> /countable_bijP [B] /card_esym/card_set_bijP /= [h] /[dup] + /set_bij_inj ih /set_bij_surj; rewrite surjE=> rfh. +pose a n := mindic_lmod_sfun (mf (h n)) (h n): {sfun T>->X} : lmodType _. +pose f_ n := \sum_(i]) a i. +exists f_; exists set0; split=>//. apply:subsetCl. +rewrite setC0 -(preimage_range f). +apply: (subset_trans (preimage_subset rfh)). +rewrite -bigcup_imset1 preimage_bigcup => t [n0 /asboolP Bn0/=fthn]. +apply/cvgrPdist_lt=> /= eps e0. exists n0.+1 => // n /= n0n. +apply: (le_lt_trans _ e0); rewrite normrE subr_eq0 fthn /f_; apply/eqP. +rewrite sfun_sum /=; under eq_bigr do rewrite /mindic_lmod/indic_lmod /= indicE. +rewrite (bigD1_ord (Ordinal n0n)) //= mem_set //= scale1r. +have indeq0 : forall i, + `[] -> t \in (f @^-1` [set h (bump n0 i)]) = 0%N :> nat. + rewrite /preimage /= => i Bi. apply/eqP; + rewrite eqb0 notin_setE /= fthn => /ih. by rewrite !in_setE=> + /(_ (asboolW Bn0) (asboolW Bi)) /eqP /(negP (neq_bump n0 i)). +under eq_bigr do rewrite indeq0 // scale0r. by rewrite big_const_idem /= addr0. +Qed. + +Lemma sfun_norm_sep_val (f : {sfun T >-> X}) (D:set T) : +separable_set (image D f). +Proof. +apply/norm_separableP. +exists (image D f); split=>//[|y r r0 [x Dx <-]]. apply: finite_set_countable. + exact: (sub_finite_set (image_subset f (subsetT D))). +exists (f x); split=>//; exact: (ballxx (f x) r0). +Qed. + +Lemma bmeas_almost_uniformP (f : T -> X) : bochner_measurable f <-> +exists (f_ : {sfun T >-> X}^nat), almost_uniform_cvgT mu f_ f. +Proof. +split=> [[f_ [N [mN mN0 /subsetCl f_fN]]]|[f_] Cf]. exists f_=> eps eps0. + have nsf_ : forall n, separable_set [set f_ n x | x in ~` N] by move=>n; + apply: sfun_norm_sep_val. + have mf_ : forall n, measurable_fun (~`N) (f_ n) by move=>n; + exact: (measurable_funS measurableT). + have[E [mE0 mEe f_fnE]]:= @pointwise_almost_uniform_sep _ _ _ _ mu f_ f (~`N) + nsf_ mf_ (measurableC mN) f_fN eps eps0. + exists (E`|`N); split. exact: measurableU. by rewrite measureU0. + rewrite [~`(E `|` N)] (_:_ = ~`N `\` E); by rewrite // setDE setCU setIC. +have /choice [E_ /all_and3 [mE mEn Une]] : forall n, exists E, [/\ measurable E, + (mu E < n.+1%:R^-1%:E)%E & {uniform ~`E, (f_ : (T->X)^nat) @ \oo --> f}] + by move=>n; exact: (Cf n.+1%:R^-1). +exists f_. exists (\bigcap_n (E_ n)); split. exact: bigcap_measurable. + apply: measure0P_invn=>//n. + apply: (le_lt_trans (le_measure mu _ _ (bigcap_inf _)) (mEn n)); + rewrite ?in_setE //. exact: bigcap_measurableType. +apply: subsetCl. rewrite setC_bigcap=> z [i _ nEi]/=. +rewrite -in_setE -sub1set in nEi. +have: {uniform [set z], (f_ : (T->X)^nat) @ \oo --> f} + by apply: (uniform_subset_cvg _ nEi). +by rewrite uniform_set1. +Qed. + +Lemma bmeas_almost_uniformP_invn (f : T -> X) : bochner_measurable f <-> +exists (f_ : {sfun T>->X}^nat), forall n, exists E, [/\ measurable E, +(mu E < n.+1%:R^-1%:E)%E & {uniform (~`E), (f_ : (T->X)^nat) @ \oo --> f}]. +Proof. +split=>[/bmeas_almost_uniformP [f_ Uf]|[f_ Ufn]]. + exists f_=> n; exact: (Uf n.+1%:R^-1). +apply/bmeas_almost_uniformP; exists f_ => eps e0. +have [Ee [mEe mEee UEe]] := Ufn (truncn eps^-1); exists Ee; split=>//. +apply: (lt_trans mEee). rewrite lte_fin invf_plt ?posrE//; exact: truncnS_gt. +Qed. + +Lemma bmeas_cvg (f : (T -> X)^nat) (g : T -> X) +(mmf : forall n:nat, bochner_measurable (f n)) (fg : forall x, f ^~ x @\oo--> g x) : +bochner_measurable g. +Proof. +have /choice [f_ /choice [E0_ /all_and2 [decE0 mE0_]]] : forall n, + exists (fn_ : {sfun T>->X}^nat), exists En_ : (set T) ^nat, + {homo En_ : n m / (n <= m)%N >-> (m<=n)%O} /\ forall k : nat, + [/\ d.-measurable (En_ k), (mu (En_ k) < (k.+2%:R^-1 * 2^-n.+1)%:E)%E & + {uniform ~`En_ k, (fn_ : (T->X)^nat) @\oo --> f n}]. + move=>n; have /bmeas_almost_uniformP[fn_ /almost_uniform_cvgTP sfnf] := mmf n; + exists fn_. under eq_exists do under eq_forall do rewrite -setTD. + apply/almost_uniform_cvg_nnincseqP=>//. apply/cvgr0Pnorm_lt=> eps e0; near=>k. + rewrite (normr_idP _) ?invr_ge0//; apply: (@lt_trans _ _ k.+2%:R^-1). + rewrite ltr_pdivrMr // ltr_pMr // exprn_egt1 // [1] (_:_ = (1:nat)%:R) + ?ltr_nat //. apply: (@lt_trans _ _ k.+1%:R^-1). + rewrite invf_plt ?posrE// -[X in X^-1]div1r invf_div divr1 ltr_nat//. + near:k; apply: (near_infty_natSinv_lt (PosNum e0)). +pose E_ k := \bigcup_n E0_ n k. +have [dE /all_and3 [mE mEk UEk]] : {homo E_ : n m / (n<=m)%N >-> (m<=n)%O} /\ +forall k, [/\ measurable (E_ k), (mu (E_ k) < k.+1%:R^-1%:E)%E & ~`E_ k !=set0 +-> forall n, (\forall m \near \oo, + has_sup [set `|f_ n m x - f n x| | x in ~`E_ k]) /\ + sup [set `|f_ n m x - f n x| | x in ~`E_ k] @[m --> \oo] --> 0]. + split=>[n m nm |k]. by rewrite subsetEset; apply: subset_bigcup => i _; + rewrite -subsetEset; exact: (decE0 i). + have /all_and3 [mE0 mE0nk UE0]: forall n, [/\ forall k, measurable (E0_ n k), + forall k, (mu (E0_ n k) < (k.+2%:R^-1 / 2^+n.+1)%:E)%E & forall k, {uniform + ~`E0_ n k, (f_ n : (T->X)^nat) @\oo --> f n}]. move=>n; exact: all_and3. + split. exact: bigcupT_measurable. + have k20: (0:R) <= k.+2%:R^-1 by rewrite invr_ge0. + have leE0k: forall n, xpredT n -> + (mu (E0_ n k) <= (k.+2%:R^-1 / 2^+n.+1)%:E)%E + by move=> n _; exact: (ltW (mE0nk n k)). + apply: (le_lt_trans (le_mu_bigcup _ _ _))=>//. exact: bigcupT_measurable. + apply: (le_lt_trans (lee_nneseries _ leE0k))=> [i _ _|]. exact: measure_ge0. + under eq_eseriesr do rewrite -natrX. + apply (le_lt_trans (epsilon_trick0 xpredT k20)). + by rewrite lte_fin invf_plt ?posrE// invrK ltr_nat. + move=> nEk0 n. have EkE0 : ~` E_ k `<=` ~` E0_ n k by apply: subsetC; + exact: bigcup_sup. apply (uniform_cvg_sup0 nEk0). + apply: (uniform_subset_cvg _ EkE0). exact: (UE0 n k). +have /choice [M PM] : forall t, exists mt, forall x, + (~` E_ t.1) x -> `|f_ t.2 mt x - f t.2 x| < t.2.+1%:R^-1. move=> [k n]. + have [->| /set0P nEk0] := eqVneq (~`E_ k) set0. by exists 0. + have invn0 : (0:R) < n.+1%:R^-1 by rewrite invr_gt0. + have [[m1 _ hsup] /cvgr0Pnorm_lt/(_ _ invn0) + [m2 _ sup0]] := UEk k nEk0 n. exists (maxn m1 m2)=>x nEkx. + have hsupm := hsup _ (leq_maxl m1 m2); + have := sup0 _ (leq_maxr m1 m2). rewrite (normr_idP _). + apply: sup_ge0=> y /= [z _ <-]; exact: normr_ge0. + move=> /(gt_sup hsupm) supn. by apply: supn=>/=; exists x. +exists (fun n => f_ n (M (n, n))); exists (\bigcap_k (E_ k)). +split. exact: bigcap_measurableType. apply/measure0P_invn=>n. + apply: (le_lt_trans (le_measure mu _ _ (bigcap_inf _)) (mEk n)); + rewrite ?in_setE //. exact: bigcap_measurableType. +apply: subsetCl. rewrite setC_bigcap => x [i _ nEi] /=. +apply/cvgrPdistC_lt=> eps e0. have e20: 0 < eps/2 by rewrite ltr_pdivlMr ?mul0r. +have /=fnge2 := cvgr_distC_lt (f ^~ x) (g x) (fg x) _ e20. +have /=n2e2 := near_infty_natSinv_lt (PosNum e20). near=>n. +rewrite (splitr eps). apply: (le_lt_trans (ler_distD (f n x) _ _) (ltrD _ _)). + have /(dE i n) : (i<=n)%N by near:n; exact: nbhs_infty_ge. + rewrite subsetEset => /subsetC /(_ x nEi) dEin. + apply: (lt_trans (PM (n,n) x dEin))=>/=. by near:n. by near:n; apply: fnge2. +Unshelve. all: end_near. Qed. + +Lemma bmeas_cvg_ae (f : (T -> X)^nat) (g : T -> X) +(mmf : forall n, bochner_measurable (f n)) : + (\forall x \ae mu, f ^~ x @\oo--> g x) -> bochner_measurable g. +Proof. +move=> [A [mA mA0 /subsetCl nAcv]]. +pose f_ n := patch (f n) A g. +have : forall x, f_ ^~ x @\oo--> g x. +move=> x; case: (boolP (x \in A)); rewrite/f_/patch. + rewrite -{1}(eqb_id (x \in A))=>/eqP xA. under eq_cvg do rewrite xA. + exact: cvg_cst. + move=> xnA; rewrite [x \in A] (_:_ = false). exact: negbTE. + rewrite notin_setE in xnA. by move: xnA => /nAcv. +apply: bmeas_cvg => n. have [fn_ [B [mB mB0 /subsetCl nBcv]]] := mmf n. +exists fn_; exists (A`|`B); split. exact: measurableU. exact: null_set_setU. +apply: subsetCl; rewrite setCU /f_ => x [nAx nBx] /=. +rewrite [X in _ --> X] (_:_ = f n x). rewrite /patch ifF //. + by apply: negbTE; rewrite notin_setE. +exact: nBcv. +Qed. + +(* TODO : Move to norm_lemmas *) +Lemma hahn_banach_on_seq x : exists xs : {linear_continuous X -> R}, xs x = `|x| +/\ forall y, `|xs y| <= `|y|. +Proof. +About hahn_banach_extension_normed. +set P := fun z => `[]. +have := (@hahn_banach_extension_normed _ _ P _ _). +Admitted. + +Lemma ess_sep_lim_count (f : T -> X) : (exists A, [/\ measurable A, mu A = 0, + measurable_fun (~`A) f & separable_set (image (~`A) f)]) -> forall eps, + 0 exists g: T->X, [/\ measurable_fun [set:T] g, + countable (range g) & \forall t \ae mu, `|f t - g t| < eps]. +Proof. +move=> [A [mA mA0 mAf /[dup] nsfA /norm_separableP + [D [/pcard_surjP [x_ cx] ifx dfx]]]] eps e0. +have /choice [xs_ /all_and2 [xsx xsb]] : forall n, + exists xs : {linear_continuous X -> R}, xs (x_ n) = `|x_ n| + /\ forall y, `|xs y| <= `|y| by move=>n; exact:hahn_banach_on_seq. +pose g_ n t := `|f t - x_ n|. pose E_ n := (~`A) `&` [set t | g_ n t < eps]. +have mE : forall n, measurable (E_ n) by move=>n; + apply: measurable_fun_dist=>//; exact: measurableC. +exists (x_ \o (fun t => xget 0 [set n | seqDU E_ n t])); split. +rewrite -(setvU (\bigcup_n E_ n)). apply/measurable_funU. + apply: measurableC; exact: bigcupT_measurable. + exact: bigcupT_measurable. split. + apply: (eq_measurable_fun (cst (x_ 0)))=>// x. + rewrite in_setE setC_bigcup /bigcap=> /= nEx. + rewrite xgetPN /seqDU=>//= n; rewrite not_andE; left; exact: nEx. + rewrite seqDU_bigcup_eq; apply/measurable_fun_bigcup=>// [|i]. + exact: seqDU_measurable. apply: (eq_measurable_fun (cst (x_ i)))=>// x. + rewrite in_setE [X in X -> _] (_:_ = [set n | seqDU E_ n x] i) // => Eni /=; + rewrite (xget_unique 0 Eni) //= => m Enm. + have /trivIsetP/(_ m i I I) /= /contra_not trvE := (trivIset_seqDU E_). + by apply/eqP/negPn/negP; apply: trvE; apply/eqP/set0P; exists x. + rewrite -(image_comp _ x_). + apply: (sub_countable (subset_card_le (image_subset x_ (subsetT _)))); + exact: card_image_le. +exists (~`\bigcup_n E_ n); split. apply: measurableC; exact: bigcupT_measurable. + apply/eqP; rewrite eq_le; apply/andP; split=>//. rewrite -mA0. + apply: le_measure; rewrite ?in_setE //. + apply: measurableC; exact: bigcupT_measurable. + apply: subsetCl=> x nAx. rewrite surjE in cx. have [z [/cx [n _ <-]]]:= + dfx (f x) eps e0 (imageP f nAx). rewrite -ball_normE => fxnxe. + by exists n. +rewrite setCS seqDU_bigcup_eq => x [n _ ] /=. +rewrite [X in X -> _] (_:_ = [set n0 | seqDU E_ n0 x] n) // => Enx /=. +rewrite (xget_unique 0 Enx) //=. move=> m Emx. + have /trivIsetP/(_ m n I I) /= /contra_not trvE := (trivIset_seqDU E_). + by apply/eqP/negPn/negP; apply: trvE; apply/eqP/set0P; exists x. +by have [_ ] := subset_seqDU Enx. +Qed. + +Lemma lim_count_bmeas (f : T -> X) : (forall eps, 0 +exists g: T->X, [/\ measurable_fun [set:T] g, countable (range g) & +\forall t \ae mu, `|f t - g t| < eps]) -> bochner_measurable f. +Proof. +move=> CC. +have /choice [g_ /all_and3 [mG Crg /choice [E_ /all_and3 [mE mE0 gfE]]]] : +forall n, exists g : T -> X, [/\ measurable_fun [set:T] g, countable (range g) & + (\forall t \ae mu, `|f t - g t| < n.+1%:R^-1)]. by move=> n; apply: CC. +apply: (@bmeas_cvg_ae g_ f) => [n|]. + apply: countim_bmeas=>// z; rewrite -[X in measurable X](setTI). + apply: (mG n)=>//; exact : measurable1. +exists (\bigcup_n E_ n); split. exact: bigcupT_measurable. + apply/negligibleP. exact: bigcupT_measurable. apply: negligible_bigcup=>k. + apply/negligibleP=>//; exact: mE0. +apply:subsetCl; rewrite setC_bigcup/bigcap=> x /= nE. +apply/cvgrPdistC_lt => /= eps e0. exists (truncn eps^-1).+1=>// n /= en. +have /subsetCl /(_ x) /(_ (nE n I))/= fgn := gfE n. +rewrite distrC; apply (lt_trans fgn). +have ne : (n.+1%:R^-1 : R) < (truncn eps^-1).+1%:R^-1 by +rewrite invf_plt ?posrE // invrK ltr_nat. apply: (lt_trans ne). +rewrite invf_plt ?posrE //; exact: truncnS_gt. +Qed. + +(* Mix of lemma 11.37 in Infinite Dimensional Analysis : a Hitchhiker's guide + and thm2 (Petti's measurability theorem) in Vector Measures (math surveys)*) +Lemma bmeas_meas_ess_sepP (f : T -> X) : bochner_measurable f <-> exists A, + [/\ measurable A, mu A = 0, measurable_fun (~`A) f + & separable_set (image (~`A) f)]. +Proof. +split=>[/bmeas_almost_uniformP_invn [f_ /choice[E_ /all_and3 [mE mEn UEn]]]| + /ess_sep_lim_count/lim_count_bmeas //]. +exists (\bigcap_n E_ n); split. exact: bigcap_measurableType. + apply: measure0P_invn=>n. apply: (le_lt_trans + (le_measure mu _ _ (bigcap_inf _)) (mEn n)); rewrite ?in_setE //. + exact: bigcap_measurableType. + apply: (@measurable_fun_cv _ _ _ _ _ f_). move=> m. + exact: (measurable_funS measurableT). rewrite setC_bigcap=> x [i _ nEix]. + have nEin0 : ~`E_ i !=set0 by exists x. + apply/cvgrPdist_lt=> eps e0. + have /(uniform_cvg_has_sup0 nEin0) /(_ eps e0) [n0 _ nhs] := UEn i. + exists n0=>// n /nhs [hsn sne]. apply: (gt_sup hsn sne _). + by rewrite distrC; exists x. +rewrite setC_bigcap image_bigcup. apply: bigcup_separable=> n _. +apply: totally_bounded_separable => eps e0. +have [->|/set0P] := eqVneq (~` E_ n) set0. + by exists set0; rewrite image_set0; split. +have e20 : 0 < eps/2 by rewrite ltr_pdivlMr // mul0r. +have C := uniform_to_norm _ e20 (UEn n) => /C [n0 _ /(_ n0 (lexx n0)) f0fe]. +have /choice [G PG] : forall x:X, exists y, image (~` E_ n) (f_ n0) x -> + image (~` E_ n) f y /\ `|x - y| < eps/2. move=> x. + case: (boolP (x \in image (~` E_ n) (f_ n0))); rewrite ?in_setE ?notin_setE. + move=> [z Enz <-]. exists (f z)=> _; split=>//. exact: f0fe. + by move=> nrfn; exists 0 => /nrfn. +exists (image (image (~`E_ n) (f_ n0)) G); + split=>[|x [y /(PG y) [ifGy _ <-]] // | x [t Ent <-]]. apply: finite_image; + exact: (sub_finite_set (image_subset (f_ n0) (subsetT _))). +have [|] := (PG (f_ n0 t) _) => // ifG fn0G. exists (G (f_ n0 t)). + by exists (f_ n0 t). +rewrite -ball_normE /= distrC; apply: (le_lt_trans (ler_distD (f_ n0 t) _ _)). +rewrite {1}distrC (splitr eps); apply: ltrD=>//; exact: f0fe. +Qed. + +(* Corollary 3 of Vector Measures *) +Lemma bmeas_lim_countmeasP (f : T -> X) : bochner_measurable f <-> +forall eps, 0 exists g: T->X, [/\ measurable_fun [set:T] g, +countable (range g) & \forall t \ae mu, `|f t - g t| < eps]. +Proof. by split=>[/bmeas_meas_ess_sepP/ess_sep_lim_count|/lim_count_bmeas]. Qed. + +End bochner_measurable_function. + + +Reserved Notation "\int [ mu ]_ ( i 'in' D ) F" + (at level 36, F at level 36, i, D at level 60, + format "'[' \int [ mu ]_ ( i 'in' D ) '/ ' F ']'"). +Reserved Notation "\int [ mu ]_ i F" + (F at level 36, i at level 0, + right associativity, format "'[' \int [ mu ]_ i '/ ' F ']'"). + +(** Definition of simple integrals: *) +Section simple_fun_raw_integral. +Context d (T : sigmaRingType d) (R : realType) (X : normedModType R) + (mu : {finite_measure set T -> \bar R}) (f : T -> X). + +Definition sbintegral := \sum_(x \in [set: X]) fine (mu (f @^-1` [set x])) *: x. + +Lemma sbintegralET : + sbintegral = \sum_(x \in [set: X]) fine (mu (f @^-1` [set x])) *: x. +Proof. by []. Qed. + +End simple_fun_raw_integral. + +Section sbintegral_lemmas. +Context d (T : sigmaRingType d) (R : realType) (X : normedModType R). +Variable mu : {finite_measure set T -> \bar R}. +Import MeasurableR. + +Lemma sbintegralE (f : T -> X) : + sbintegral mu f = \sum_(x \in range f) fine (mu (f @^-1` [set x])) *: x. +Proof. +rewrite (fsbig_widen (range f) setT)//= => x [_ Nfx] /=. +by rewrite preimage10// measure0 scale0r. +Qed. + +Lemma sbintegral0 : sbintegral mu (cst 0%R) = (0:X). +Proof. +rewrite sbintegralE fsbig1// => r _; rewrite preimage_cst. +by case: ifPn => [/[!inE] <-|]; rewrite ?scaler0 // measure0 /= scale0r. +Qed. + +Lemma sbintegral_indic_lmod (A : set T) (z : X) : + sbintegral mu (indic_lmod A z) = fine (mu A) *: z. +Proof. +rewrite sbintegralE (fsbig_widen _ [set 0%R; z]) => //=. + - exact: image_indic_lmod_sub. + - by move=> t [[] -> /= /preimage10->]; rewrite measure0 scale0r. +have [->|/eqP] := eqVneq z 0; +rewrite fsbigU//=; first by move=> t [->]/=; rewrite scaler0. +rewrite !fsbig_set1 !scaler0 addr0//. +move=> x /= [-> _]; by rewrite scaler0. +rewrite !fsbig_set1 !preimage_indic_lmod /= => z0. +rewrite ifN ?notin_setE//= ifT ?in_setE //= scaler0 add0r + ifT ?in_setE //= ifN ?notin_setE //=. exact: nesym. +Qed. + +End sbintegral_lemmas. + +Lemma eq_sbintegral d (T : sigmaRingType d) (R : realType) (X : normedModType R) + (mu : {finite_measure set T -> \bar R}) (g f : T -> X) : + f =1 g -> sbintegral mu f = sbintegral mu g. +Proof. by move=> /funext->. Qed. +Arguments eq_sbintegral {d T R X mu} g. + +Section sbintegralrZ. +Context d (T : sigmaRingType d) (R : realType) (X : normedModType R). +Import MeasurableR. +Variables (m : {finite_measure set T -> \bar R}) (r : R) (f : {sfun T >-> X}). + +(* Proof is a lot more complicated than it should have been *) +Lemma sbintegralrZ : sbintegral m (r \*: f) = r *: sbintegral m f. +Proof. +have [->|r0] := eqVneq r 0. + by rewrite scale0r (eq_sbintegral (cst 0%R)) ?sbintegral0// => x /=; + rewrite scale0r. +have eqscaler : forall x y : X, (r *: x = r *: y) = (x=y). + move=> x y; rewrite propeqE; split=>[rxy|->//]. + by rewrite -[LHS]scale1r -[RHS]scale1r -(divff r0) mulrC -!scalerA rxy. +rewrite !sbintegralE scaler_sumr/= (reindex_fsbig ( *:%R r) (range f)) /=. +rewrite [X in set_bij _ X] (_:_ = image (range f) ( *:%R r)). + rewrite image_comp; exact: eq_set. + split=>// x y _ _ rxy. by rewrite -eqscaler. +have scale_preim : forall x, (r \*: f) @^-1` [set r *: x] = f @^-1` [set x]. + rewrite /preimage => x/=; apply: eq_set=> t; exact:eqscaler. +under eq_bigr do rewrite scale_preim scalerA mulrC -scalerA. congr (bigop.body). +case: finite_supportP => [/(sub_infinite_set (@subIsetl _ (range f) _)) infr // + | Y Yrf rfnY0 Yrn0]. apply/eqP/fset_eqP => x; rewrite in_finite_support. + exact: (sub_finite_set ((@subIsetl _ (range f) _))). +rewrite [X in _`&`X] (_:_ = (fun i : X => + fine (m ((r \*: f) @^-1` [set r *: i])) *: (r *: i)) @^-1` [set~ 0]). + rewrite/preimage; apply: eq_set=> z/=; rewrite scalerA mulrC -scalerA propeqE. + apply: not_iff_compat. rewrite -{2}(scaler0 X r) -propeqE + [[set t | r *: f t = r *: z]] (_:_ = [set t | f t = z]). + apply:eq_set=>t; exact: eqscaler. + apply: Logic.eq_sym; exact:eqscaler. +by rewrite -Yrn0 mem_setE. +Qed. + +End sbintegralrZ. + +Section sbintegralD. +Context d (T : measurableType d) (R : realType) (X : normedModType R). +Import MeasurableR. +Variables (m : {finite_measure set T -> \bar R}). +Variables (D : set T) (mD : measurable D) (f g : {sfun T >-> X}). +(* TODO *) +Lemma sbintegralD : sbintegral m (f \+ g)%R = sbintegral m f + sbintegral m g. +Proof. +rewrite !sbintegralE; set F := f @` _; set G := g @` _; set FG := _ @` _. +pose pf x := f @^-1` [set x]; pose pg y := g @^-1` [set y]. +rewrite !fsbig_finite //=. +About fsbig_finite. About fsbig_supp. About fsbig_seq. +Abort. + +End sbintegralD. \ No newline at end of file diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index b350043e24..0f28e4917b 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -290,7 +290,14 @@ by apply/funext=> x; rewrite/indic_lmod/= indicE; case: ifPn=> _ /=; rewrite ?scale0r ?scale1r. Qed. -Lemma preimage_indic_mod A (B : set L) (z : L) : +Lemma image_indic_lmod_sub A z D : (indic_lmod A z) @` D `<=` [set 0;z]. +Proof. +rewrite -image_comp; apply: (subset_trans (image_subset ( *:%R ^~ z) _)); + first exact: image_indic_sub. +move=> y /= [x [->|->]]; rewrite ?scale0r ?scale1r=> ->; first by left. by right. +Qed. + +Lemma preimage_indic_lmod A (B : set L) (z : L) : (indic_lmod A z) @^-1` B = if z \in B then if 0 \in B then [set: T] else A else if 0 \in B then ~` A else set0. Proof. @@ -316,7 +323,7 @@ Import MeasurableNormedModule. Lemma measurable_indic_lmod {D} (A : set aT) (mA : d.-measurable A) (z:nT) : measurable_fun D (mindic_lmod mA z). Proof. -move=> mD Y mY; rewrite preimage_indic_mod //. +move=> mD Y mY; rewrite preimage_indic_lmod //. do 2 (case: ifP => _); apply: measurableI=>//; exact: measurableC. Qed. From 34796079447a164bd86af817e8a15a58e4390940 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Wed, 12 Aug 2026 09:15:56 +0200 Subject: [PATCH 26/38] clean-up --- theories/kernel.v | 4 + theories/lebesgue_integral_theory/bochner.v | 242 +++++++++--------- .../lebesgue_integral_definition.v | 17 +- .../lebesgue_integral_differentiation.v | 1 + .../lebesgue_integral_monotone_convergence.v | 2 + .../lebesgue_integral_nonneg.v | 32 +-- .../measurable_fun_approximation.v | 5 +- .../simple_functions.v | 31 ++- theories/probability_theory/independence.v | 3 - .../probability_theory/normal_distribution.v | 2 - .../probability_theory/uniform_distribution.v | 1 + 11 files changed, 168 insertions(+), 172 deletions(-) diff --git a/theories/kernel.v b/theories/kernel.v index c669004aa6..1f418be452 100644 --- a/theories/kernel.v +++ b/theories/kernel.v @@ -1062,6 +1062,7 @@ HB.export KCOMP_SFINITE_KERNEL. Section measurable_fun_preimage_integral. Context d d' (X : measurableType d) (Y : measurableType d') (R : realType). +Import HBNNSimple. Variables (k : Y -> \bar R) (k_ : ({nnsfun Y >-> R}) ^nat) (ndk_ : nondecreasing_seq (k_ : (Y -> R)^nat)) @@ -1108,6 +1109,7 @@ End measurable_fun_preimage_integral. Section measurable_fun_integral_kernel. +Import HBNNSimple. Lemma measurable_fun_integral_kernel d d' (X : measurableType d) (Y : measurableType d') (R : realType) @@ -1138,6 +1140,7 @@ rewrite integral_indic//= /kcomp. by apply: eq_integral => y _; rewrite integral_indic. Qed. +Import HBNNSimple. Let integral_kcomp_nnsfun x (f : {nnsfun Z >-> R}) : \int[kcomp l k x]_z (f z)%:E = \int[l x]_y (\int[k (x, y)]_z (f z)%:E). @@ -1319,6 +1322,7 @@ split => //. + by split => //; rewrite kfcompkindic. Qed. +Import HBNNSimple. (* [Lemma 14.20, Klenke 2014] *) Lemma measurable_kfcomp : measurable_fun [set: T1 * T2] f -> diff --git a/theories/lebesgue_integral_theory/bochner.v b/theories/lebesgue_integral_theory/bochner.v index e1e6101cf6..5ec6ce827b 100644 --- a/theories/lebesgue_integral_theory/bochner.v +++ b/theories/lebesgue_integral_theory/bochner.v @@ -1,12 +1,12 @@ From HB Require Import structures. -From mathcomp Require Import all_ssreflect_compat ssralg ssrnum ssrint interval. +From mathcomp Require Import boot order ssralg ssrnum ssrint interval. From mathcomp Require Import interval_inference archimedean finmap. From mathcomp Require Import mathcomp_extra boolp classical_sets functions. From mathcomp Require Import cardinality reals fsbigop ereal topology tvs. From mathcomp Require Import normedtype sequences real_interval esum measure. From mathcomp Require Import lebesgue_measure numfun realfun measurable_realfun. From mathcomp Require Import normed_module measurable_structure simple_functions. -From mathcomp Require Import hahn_banach_theorem. +From mathcomp Require Import hahn_banach_theorem lebesgue_integral. Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. @@ -30,8 +30,8 @@ apply: sigma_algebra_subl=> F cF; rewrite -(setCK F); apply:sigma_algebraC. apply: sub_sigma_algebra=>//; exact: closed_openC. Qed. -(* Some should be moved in topology_structure.v, some in metric_structure.v*) -Section topology_lemmas. +(* Should be moved in topology_structure.v *) +Section separability. Context {T : topologicalType}. Definition separable := @@ -52,6 +52,9 @@ Lemma separable_set0 : separable_set set0. Proof. by exists set0; split=>// U; rewrite set0I =>[[x]]. Qed. #[local] Hint Resolve separable_set0 : core. +Lemma countable_separable (A : set T) (cA : countable A) : separable_set A. +Proof. by exists A; split=>// U H _; rewrite setIC. Qed. + Lemma bigcupT_separable [A : (set T)^nat] : (forall n, separable_set (A n)) -> separable_set (\bigcup_n A n). Proof. @@ -70,75 +73,10 @@ case: ifPn=>[|_]. rewrite in_setE. apply: (nsPA n). by exists set0; split=>// U [x [F]]. Qed. -Lemma basisP {B : set_system T} : basis B <-> B `<=`open -/\ (forall U: set T, open U -> U = \bigcup_(V in [set W | B W /\ W `<=`U]) V). -Proof. -split=> [[oB bB]|[Bo dec]]. split=> //U oU. - rewrite eqEsubset /bigcup; split=>[x Ux/=|x [A/= [BA AU] /AU //]]. - have:= bB x. rewrite/cvg_to {2}/nbhs/filter_from/= => /(_ U)/=. - have nT: \near x, U x by apply: (open_in_nearW oU)=>[y|]; rewrite in_setE. - rewrite nbhs_nearE !exists2E/= => /(_ nT). - by under eq_exists=>x0 do rewrite -andA {1}(andC (x0 x) _) andA. -split=>// x. rewrite/cvg_to/=nbhsE/open_nbhs => P /= - [U [/(dec U)->] [A [BA AU] Ax] UP]. exists A=>// t At; apply: UP. by exists A. -Qed. - -Lemma countable_basis_to_seq {B : set_system T} : -countable B -> basis B -> [set:T] !=set0 -> exists f : nat -> _, range f = B /\ -forall U : set T, open U -> U = \bigcup_(n in [set m| f m `<=`U]) (f n). -Proof. -move=> /pfcard_geP /=. case=> [->/basisP[_ /(_ setT openT) /= d0] - /set0P/eqP T0|/surjfunPex [f ->]/basisP[Bo dec]]; first exfalso. - move: d0; rewrite (_ : [set _ | False /\ _] = set0) ?bigcup0//. - by apply: eq_set=> y; apply: notTE=>[[]]. -exists f; split=>//. move=> U /(dec U) ->; apply:eq_set=>x/=. -rewrite !exists2E propeqE; split=>//=[[A [[[n _ <- fnU] fnx]]]| [n [fni fnx]]]. - exists n; split=>//= y fny/=. exists (f n)=>//. split=>//. by exists n. -exists (f n); split=>//; split=>[|y /fni/= [V [_ VU /VU//]]]. by exists n. -Qed. - -Lemma second_countable_separable : -@second_countable T -> separable. -Proof. -move=> [B] /(sub_countable (card_le_setD B [set set0])). -rewrite/countable=> /pfcard_geP. case=> [|[f] /basisP [oB bB]]. -rewrite setD_eq0=> /subset_set1. case=> -> /basisP [oB bB]; - have:= (bB [set:T]) openT. rewrite [X in \bigcup_(_ in X) _] (_:_ = set0). - by apply: eq_set=>x/=; rewrite andB. - by rewrite bigcup0 // separableTE => ->. - rewrite [X in \bigcup_(_ in X) _] (_:_ = [set set0]). - by apply: eq_set=>A/=; rewrite (propT (subsetT A)) andB.1.2. - by rewrite bigcup_set1 separableTE=> ->. -have rfB0:= image_eq f. -have /choice [g BG]: forall n, exists x, B (f n) /\ f n x. move=>n; - have := imageT f n. by rewrite rfB0=>/= [[Bfn /eqP/set0P [x fnx]]]; exists x. -exists (range g); split=>[|A /[swap] /(bB A) -> /bigcup_nonempty - [V /= [BV VA] /set0P/eqP V0]]; first exact: card_image_le. -have : (B `\ set0) V by split. rewrite -rfB0 => [[n _ fnV]]. -exists (g n); split=>//; exists V=>//=. by rewrite -fnV; have [_] := (BG n). -Qed. - -Lemma salgebra_second_countable {B : set_system T} : -countable B -> basis B -> open.-sigma.-measurable = B.-sigma.-measurable. -Proof. -move=> cB bB; have [T0|/set0P/(countable_basis_to_seq cB bB) [f [rfb dec]]] := - eqVneq [set:T] set0. - have o0 : @open T = [set set0]. rewrite eqEsubset; split=> [U _| A ->] /=; - first by rewrite -subset0 -T0. exact: open0. - rewrite/measurable/= eqEsubset; split; first rewrite o0. - apply: sigma_algebra_subl=> x ->. exact: sigma_algebra0. - by have [/sigma_algebra_sub P _] := bB. -rewrite eqEsubset =>/=; split. apply: sigma_algebra_subl => U /(dec U)->. - rewrite bigcup_mkcond -rfb; apply: sigma_algebra_bigcup => i /=. - case: ifP=> _//. exact: sub_sigma_algebra. exact: sigma_algebra0. -by apply: sigma_algebra_sub; have [] := bB. -Qed. - -End topology_lemmas. +End separability. Section uniform_lemmas. Context {U : choiceType} {V : uniformType}. - Lemma cvg_uniform_fin_bigcup [f : U -> V] [F : set_system (U -> V)] {I} [D : set I] {A : I -> set U} : Filter F -> finite_set D -> (forall i, D i -> {uniform A i, F --> f}) -> @@ -204,7 +142,7 @@ Qed. but normedModType doesn't inherit from metricType yet*) Lemma closed_dist0 {R:realType} {N:normedModType R} {F : set N} (cF : closed F) (x:N) : -F x = forall e:R, 0 < e -> exists f:N, F f /\ `|x - f| < e. +F x = forall eps:R, 0 exists f:N, F f /\ `|x - f| < eps. Proof. rewrite propeqE; split=>[Fx e|Cx]. exists x; split=>//=. by rewrite subrr normr0. have Q : forall n:nat, exists f:N, F f /\ `|x-f| < n.+1%:R^-1. @@ -244,7 +182,7 @@ rewrite/C/= => [[n0 _ Cvn]]; exists n0=>//n/Cvn. rewrite -ball_normE/= => /[swap] t /[swap] At /(_ t At) fnte. by rewrite distrC. Qed. -Lemma uniform_cvg_sup0 {T : choiceType} {R : realType} {N : normedModType R} +Lemma uniform_cvg_supto0P {T : choiceType} {R : realType} {N : normedModType R} {f_ : (T->N)^nat} {f : T -> N} (A : set T) (An0 : A !=set0): {uniform A, f_ @ \oo --> f} <-> (\forall n\near \oo, has_sup [set `|f_ n x - f x| | x in A]) /\ @@ -270,13 +208,13 @@ apply: HG=>t At; apply: beH=>/=. rewrite -ball_normE/= distrC. apply: fnfe. by exists t. Qed. -Lemma uniform_cvg_has_sup0 {T : choiceType} {R : realType} {N : normedModType R} +Lemma uniform_cvg_has_sup0P {T : choiceType} {R : realType} {N : normedModType R} {f_ : (T->N)^nat} {f : T -> N} (A : set T) (An0 : A !=set0): {uniform A, f_ @ \oo --> f} <-> forall eps, 0 \forall n\near \oo, has_sup [set `|f_ n x - f x| | x in A] /\ sup [set `|f_ n x - f x| | x in A] < eps. Proof. -apply: (iff_trans (uniform_cvg_sup0 An0)); split=> [[hs /cvgr0_norm_lt s0 eps +apply: (iff_trans (uniform_cvg_supto0P An0)); split=> [[hs /cvgr0_norm_lt s0 eps /(s0 eps) se]|S0]. near=>n; split. by near:n. rewrite -[X in X < _](normr_idP _). apply: sup_ge0=> x [y _ <-]//. by near:n. split. have [n _ nP] := S0 1 ltr01; exists n=>// n0 /nP [//]. @@ -299,17 +237,6 @@ Proof. Qed. Import MeasurableR. -(*Cannot be generalized yet as it is for a different display from normr_continuous*) -Lemma normr_measurable_gen {R : realType} {N : normedModType R} {A : set N} : -measurable_fun A normr. -Proof. -move=> /[dup] mA. -apply: (@measurability _ _ _ _ _ (@normr R N) _ - (eq_trans (esym (RGenOpenSets.measurableE R)) (RGenOInfty.measurableE R))). -move=> U [I [x] ->] <-. have [/(_ norm_continuous) nopen _] := - continuousP (normr: N-> R). apply: measurableI => //. -apply: sub_sigma_algebra; exact: nopen. -Qed. Lemma measurable_fun_dist {d} {A : measurableType d} {R : realType} {N : normedModType R} {f g : A -> N} {D : set A}: separable_set (image D f) @@ -371,12 +298,12 @@ rewrite [D`&`f@^-1` F] (_:_ = \bigcap_m \bigcup_n \bigcap_(k>=n) apply: (le_lt_trans (ler_distD (f x) _ _) (ltrD _ _))=>//. by rewrite distrC. have Dx : D x by have [n _ /(_ n (le_refl n)) [Dx _]] := b 0 I. - split=>//; rewrite closed_dist0// => e e0. - have e20 : 0 < e/2 by apply: divr_gt0. have [n0 _] := b (truncn (e/2)^-1) I. + split=>//; rewrite closed_dist0// => eps e0. + have e20 : 0 < eps/2 by apply: divr_gt0. have [n0 _] := b (truncn (eps/2)^-1) I. have/(_ eventually_filter _ e20) [n1 _ /(_ (maxn n0 n1) (leq_maxr n0 n1)) fhe] := cvgr_dist_lt _ _ (hf x Dx). move=> /(_ (maxn n0 n1) (leq_maxl n0 n1)) [_ [/=f0 [f0F yhe]]]. - exists f0; split=>//. rewrite (splitr e). + exists f0; split=>//. rewrite (splitr eps). apply: (le_lt_trans (ler_distD (h (maxn n0 n1) x) _ _) (ltrD _ _))=>//. rewrite distrC; apply: (lt_trans yhe). rewrite invf_plt ?posrE//. exact: truncnS_gt. @@ -410,6 +337,12 @@ move=> mAn; apply/measure0P=>eps e0. apply: (lt_trans (mAn (truncn eps^-1))). rewrite lte_fin invf_plt ?posrE //; exact: truncnS_gt. Qed. +Lemma measure_nonzero_nonempty {A} : mu A != 0 -> A !=set0. +Proof. +by move=> mn0A; apply/set0P/eqP => A0; move:mn0A; +rewrite A0 measure0=>/eqP. +Qed. + End measure_lemmas. Section almost_uniform_cvg. @@ -462,6 +395,9 @@ Context d {R : realType} {N : normedModType R} Import MeasurableR. (* A more general version of Erogov's theorem *) +(* TODO : instead of separable_set (f_n (D)), only need +f_n(D) \subseteq $some separable set$ (should be the same for +measurable_fun_dist and the rest, but needs verification)*) Lemma pointwise_almost_uniform_sep (f : (T -> N)^nat) (g : T -> N) (D : set T) : (forall n, separable_set (image D (f n))) -> (forall n, measurable_fun D (f n)) -> @@ -493,8 +429,10 @@ have cvB0 : forall k, fine (mu (\bigcap_(i \oo] --> 0. move=>k; rewrite (_: 0 = fine (mu (\bigcap_n B n k))). by rewrite capB_0 measure0. apply: fine_cvg; rewrite fineK ?fin_num_measure//. - exact: bigcapT_measurable. apply: (cvg_measure_bigcap (mB ^~ k)). - exact: fin_num_measure. + exact: bigcapT_measurable. + rewrite (@cvg_shiftS _ (fun x => mu (\bigcap_(i < x) B i k)))/=. + apply: (cvg_measure_bigcap (mB ^~ k)). + by rewrite -ge0_fin_numE// fin_num_measure. have /choice [p pBe] : forall k, exists n, true -> (mu (\bigcap_(ik. have ekp : 0 < eps / 2 / 2 ^ k.+1 by rewrite ltr_pdivlMr ?mul0r ?divr_gt0. @@ -533,27 +471,18 @@ Qed. End egorov. - Section bochner_measurable_function. Import MeasurableR. Context {d} {T : measurableType d} {R : realType} (mu : {finite_measure set T -> \bar R}) (X : normedModType R). +Import HBSimple. + (* TODO : remove the lmodType cast when bug fixed*) Definition bochner_measurable (f: T -> X) := exists f_ : ({sfun T >-> X} : lmodType _)^nat, \forall x \ae mu, f_ n x @[n --> \oo]--> f x. -Lemma bmeas_meas (f : T -> X) : bochner_measurable f -> measure_is_complete mu - -> measurable_fun [set:T] f. -Proof. -move=> [F [A [mA mA0 /subsetCl cv]]] cmu. rewrite -(setvU A). -apply/measurable_funU=>//. exact: measurableC. split=>[|_ Y mY]. - apply: measurable_fun_cv _ cv=>m. apply: measurable_funP. -apply: cmu. apply: (negligibleS (@subIsetl _ A (f@^-1`Y))). -by exists A; split. -Qed. - Lemma bmeasD (f g : T -> X) : bochner_measurable f -> bochner_measurable g -> bochner_measurable (f + g). Proof. @@ -585,20 +514,23 @@ apply: (le_lt_trans _ e0); rewrite normrE subr_eq0 fthn /f_; apply/eqP. rewrite sfun_sum /=; under eq_bigr do rewrite /mindic_lmod/indic_lmod /= indicE. rewrite (bigD1_ord (Ordinal n0n)) //= mem_set //= scale1r. have indeq0 : forall i, - `[] -> t \in (f @^-1` [set h (bump n0 i)]) = 0%N :> nat. + `[] -> (t \in (f @^-1` [set h (bump n0 i)])) = 0%N :> nat. rewrite /preimage /= => i Bi. apply/eqP; rewrite eqb0 notin_setE /= fthn => /ih. by rewrite !in_setE=> /(_ (asboolW Bn0) (asboolW Bi)) /eqP /(negP (neq_bump n0 i)). under eq_bigr do rewrite indeq0 // scale0r. by rewrite big_const_idem /= addr0. Qed. +Lemma sfun_bmeas (f : {sfun T>->X}) : bochner_measurable f. +Proof. +exists (cst f); exists set0; split=>//; apply: subsetCl => t _; exact: cvg_cst. +Qed. + Lemma sfun_norm_sep_val (f : {sfun T >-> X}) (D:set T) : separable_set (image D f). Proof. -apply/norm_separableP. -exists (image D f); split=>//[|y r r0 [x Dx <-]]. apply: finite_set_countable. - exact: (sub_finite_set (image_subset f (subsetT D))). -exists (f x); split=>//; exact: (ballxx (f x) r0). +by apply: (countable_separable (finite_set_countable _)); +exact: (sub_finite_set (image_subset f (subsetT D)) _). Qed. Lemma bmeas_almost_uniformP (f : T -> X) : bochner_measurable f <-> @@ -608,7 +540,7 @@ split=> [[f_ [N [mN mN0 /subsetCl f_fN]]]|[f_] Cf]. exists f_=> eps eps0. have nsf_ : forall n, separable_set [set f_ n x | x in ~` N] by move=>n; apply: sfun_norm_sep_val. have mf_ : forall n, measurable_fun (~`N) (f_ n) by move=>n; - exact: (measurable_funS measurableT). + exact: measurable_funTS. have[E [mE0 mEe f_fnE]]:= @pointwise_almost_uniform_sep _ _ _ _ mu f_ f (~`N) nsf_ mf_ (measurableC mN) f_fN eps eps0. exists (E`|`N); split. exact: measurableU. by rewrite measureU0. @@ -677,7 +609,7 @@ forall k, [/\ measurable (E_ k), (mu (E_ k) < k.+1%:R^-1%:E)%E & ~`E_ k !=set0 apply (le_lt_trans (epsilon_trick0 xpredT k20)). by rewrite lte_fin invf_plt ?posrE// invrK ltr_nat. move=> nEk0 n. have EkE0 : ~` E_ k `<=` ~` E0_ n k by apply: subsetC; - exact: bigcup_sup. apply (uniform_cvg_sup0 nEk0). + exact: bigcup_sup. apply (uniform_cvg_supto0P nEk0). apply: (uniform_subset_cvg _ EkE0). exact: (UE0 n k). have /choice [M PM] : forall t, exists mt, forall x, (~` E_ t.1) x -> `|f_ t.2 mt x - f t.2 x| < t.2.+1%:R^-1. move=> [k n]. @@ -723,7 +655,7 @@ rewrite [X in _ --> X] (_:_ = f n x). rewrite /patch ifF //. exact: nBcv. Qed. -(* TODO : Move to norm_lemmas *) +(* TODO : Move to norm_lemmas, and complete the proof *) Lemma hahn_banach_on_seq x : exists xs : {linear_continuous X -> R}, xs x = `|x| /\ forall y, `|xs y| <= `|y|. Proof. @@ -761,7 +693,7 @@ rewrite -(setvU (\bigcup_n E_ n)). apply/measurable_funU. rewrite -(image_comp _ x_). apply: (sub_countable (subset_card_le (image_subset x_ (subsetT _)))); exact: card_image_le. -exists (~`\bigcup_n E_ n); split. apply: measurableC; exact: bigcupT_measurable. +exists (~` (\bigcup_n E_ n)); split. apply: measurableC; exact: bigcupT_measurable. apply/eqP; rewrite eq_le; apply/andP; split=>//. rewrite -mA0. apply: le_measure; rewrite ?in_setE //. apply: measurableC; exact: bigcupT_measurable. @@ -812,10 +744,10 @@ exists (\bigcap_n E_ n); split. exact: bigcap_measurableType. (le_measure mu _ _ (bigcap_inf _)) (mEn n)); rewrite ?in_setE //. exact: bigcap_measurableType. apply: (@measurable_fun_cv _ _ _ _ _ f_). move=> m. - exact: (measurable_funS measurableT). rewrite setC_bigcap=> x [i _ nEix]. + exact: measurable_funTS. rewrite setC_bigcap=> x [i _ nEix]. have nEin0 : ~`E_ i !=set0 by exists x. apply/cvgrPdist_lt=> eps e0. - have /(uniform_cvg_has_sup0 nEin0) /(_ eps e0) [n0 _ nhs] := UEn i. + have /(uniform_cvg_has_sup0P nEin0) /(_ eps e0) [n0 _ nhs] := UEn i. exists n0=>// n /nhs [hsn sne]. apply: (gt_sup hsn sne _). by rewrite distrC; exists x. rewrite setC_bigcap image_bigcup. apply: bigcup_separable=> n _. @@ -847,13 +779,6 @@ Proof. by split=>[/bmeas_meas_ess_sepP/ess_sep_lim_count|/lim_count_bmeas]. Qed. End bochner_measurable_function. -Reserved Notation "\int [ mu ]_ ( i 'in' D ) F" - (at level 36, F at level 36, i, D at level 60, - format "'[' \int [ mu ]_ ( i 'in' D ) '/ ' F ']'"). -Reserved Notation "\int [ mu ]_ i F" - (F at level 36, i at level 0, - right associativity, format "'[' \int [ mu ]_ i '/ ' F ']'"). - (** Definition of simple integrals: *) Section simple_fun_raw_integral. Context d (T : sigmaRingType d) (R : realType) (X : normedModType R) @@ -913,6 +838,8 @@ Context d (T : sigmaRingType d) (R : realType) (X : normedModType R). Import MeasurableR. Variables (m : {finite_measure set T -> \bar R}) (r : R) (f : {sfun T >-> X}). +Import HBSimple. + (* Proof is a lot more complicated than it should have been *) Lemma sbintegralrZ : sbintegral m (r \*: f) = r *: sbintegral m f. Proof. @@ -947,15 +874,78 @@ End sbintegralrZ. Section sbintegralD. Context d (T : measurableType d) (R : realType) (X : normedModType R). Import MeasurableR. -Variables (m : {finite_measure set T -> \bar R}). -Variables (D : set T) (mD : measurable D) (f g : {sfun T >-> X}). -(* TODO *) +Variables (m : {finite_measure set T -> \bar R}) (f g : {sfun T >-> X}). + +Import HBSimple. + Lemma sbintegralD : sbintegral m (f \+ g)%R = sbintegral m f + sbintegral m g. Proof. rewrite !sbintegralE; set F := f @` _; set G := g @` _; set FG := _ @` _. pose pf x := f @^-1` [set x]; pose pg y := g @^-1` [set y]. -rewrite !fsbig_finite //=. -About fsbig_finite. About fsbig_supp. About fsbig_seq. +transitivity (\sum_(x\in FG) \sum_(z\in F) + fine (m (f@^-1`[set z] `&` g@^-1`[set x-z])) *: x). + apply: eq_fsbigr=> x /set_mem [t _ /= fgtx]. + rewrite preimageD1 measure_fin_bigcup //; first + exact/trivIset_setIr/trivIset_preimage1. move=> z _; exact: measurableI. + rewrite !fsbig_finite//= -sum_fine; first by move => z _; + exact/fin_num_measure/measurableI. + by rewrite scaler_suml. +rewrite exchange_fsbig//=. transitivity (\sum_(j\in F) \sum_(i \in G) + fine (m ((f @^-1` [set j] `&` g @^-1` [set i]))) *: (i+j)). + apply: eq_fsbigr=> x /set_mem rfx. + rewrite fsbig_supp/= (fsbig_widen _ [set x+i | i in G]) => /= + [z [[t _ /= fgtz] /eqP]|z/=[[y Gy xyz]]|]. + rewrite scaler_eq0 negb_or fine_eq0; + first exact/fin_num_measure/measurableI. + move=>/andP[/measure_nonzero_nonempty [t1 /= [ft1x gt1zx] z0]]. + by exists (g t1); first exact:imageT; rewrite gt1zx addrC addrNK. + rewrite not_andE; case=>[FGz|]. apply/eqP; rewrite scaler_eq0 fine_eq0. + exact/fin_num_measure/measurableI. apply/orP; left. + apply/negbNE/negP => /measure_nonzero_nonempty [t/= [<-]] gftz. + by apply: FGz; exists t=>//=; rewrite gftz addrC addrNK. + by rewrite not_notE. + rewrite (reindex_fsbig (+%R x) G)/=. split=>// z1 z2 _ _ xz12. + by rewrite -[LHS](addrK x) [X in X-_]addrC xz12 [X in X-_]addrC addrK. + by apply: eq_fsbigr=> z _; rewrite (_: x+z-x = z) addrC // + addrA addrC [X in _ + X]addrC addrA addrK. +under eq_fsbigr do (under eq_fsbigr do rewrite scalerDr; rewrite fsbig_split//); +rewrite fsbig_split//= [RHS]addrC. +apply/f_equal2; first rewrite exchange_fsbig//; apply: eq_fsbigr => x _/=; + rewrite fsbig_finite // -scaler_suml sum_fine. + by move=>z _; exact/fin_num_measure/measurableI. + 2 : by move=>z _; exact/fin_num_measure/measurableI. + rewrite -fsbig_finite // -measure_fin_bigcup //; first exact/trivIset_setIr + /trivIset_preimage1; first by move=> i _; exact/measurableI. + by rewrite -setI_bigcupl -preimage_bigcup + (bigcup_imset1 _ id) image_id preimage_range setTI. +rewrite -fsbig_finite// -measure_fin_bigcup //; first exact/trivIset_setIl + /trivIset_preimage1; first by move=> i _; exact/measurableI. +by rewrite -setI_bigcupr -preimage_bigcup + (bigcup_imset1 _ id) image_id preimage_range setIT. +Qed. + +End sbintegralD. + +Section sbintegral_norm. +Context d (T : measurableType d) (R : realType) (X : normedModType R). +Import MeasurableR. +Variables (m : {finite_measure set T -> \bar R}) (f : {sfun T >-> X}). + +Import HBSimple. + +Lemma le_norm_sbintegral : `|sbintegral m f| <= \int[m]_x `|f x|. +Proof. +rewrite sbintegralE fsbig_finite//. apply: (le_trans (ler_norm_sum _ _ _) _). +under eq_bigr do rewrite normrZ (normr_idP (fine_ge0 _))//. +rewrite -lee_fin -sumEFin. +under eq_bigr do (rewrite mulrC EFinM fineK; first exact : fin_num_measure). +rewrite -[X in (_<=X%:E)%E](normr_idP _); first exact: Rintegral_ge0. +rewrite EFin_normr_Rintegral//. apply: measurable_bounded_integrable=>//. + exact/fin_num_fun_lty/fin_num_measure. + apply: measurableT_comp => //. +(* have /andP:= (mem_sfun_comp f normr). + by rewrite inE/= => [[mf _]].*) + admit. + have [M fM] := simple_bounded f. exists M. by under eq_forall do under eq_set do rewrite normr_id. Abort. - -End sbintegralD. \ No newline at end of file +End sbintegral_norm. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v index b01f3ddc75..e98c106a85 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v @@ -84,6 +84,7 @@ rewrite sintegralE fsbig1// => r _; rewrite preimage_cst. by case: ifPn => [/[!inE] <-|]; rewrite ?mul0e// measure0 mule0. Qed. +Import HBNNSimple. Lemma sintegral_ge0 (f : {nnsfun T >-> R}) : 0 <= sintegral mu f. Proof. by rewrite sintegralE fsume_ge0// => r _; exact: nnsfun_mulemu_ge0. Qed. @@ -123,10 +124,7 @@ Context {d} {T : measurableType d} {R : realType}. Variables m1 m2 : {measure set T -> \bar R}. Hypothesis m12 : forall S, measurable S -> m1 S <= m2 S. -<<<<<<< HEAD Import HBNNSimple. -======= ->>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma le_measure_sintegral (f : {nnsfun T >-> R}) : @@ -142,6 +140,7 @@ Local Open Scope ereal_scope. Context d (T : sigmaRingType d) (R : realType). Variables (m : {measure set T -> \bar R}) (r : R) (f : {nnsfun T >-> R}). +Import HBNNSimple. Lemma sintegralrM : sintegral m (cst r \* f)%R = r%:E * sintegral m f. Proof. @@ -162,10 +161,7 @@ Context d (T : measurableType d) (R : realType). Variables (m : {measure set T -> \bar R}). Variables (D : set T) (mD : measurable D) (f g : {nnsfun T >-> R}). -<<<<<<< HEAD Import HBNNSimple. -======= ->>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma sintegralD : sintegral m (f \+ g)%R = sintegral m f + sintegral m g. @@ -201,6 +197,7 @@ Section le_sintegral. Context d (T : measurableType d) (R : realType) (m : {measure set T -> \bar R}). Variables f g : {nnsfun T >-> R}. +Import HBNNSimple. Hypothesis fg : forall x, f x <= g x. @@ -218,6 +215,8 @@ End le_sintegral. Section is_cvg_sintegral. +Import HBNNSimple. + Lemma is_cvg_sintegral d (T : measurableType d) (R : realType) (m : {measure set T -> \bar R}) (f : {nnsfun T >-> R}^nat) : (forall x, nondecreasing_seq (f ^~ x)) -> cvgn (sintegral m \o f). @@ -233,6 +232,7 @@ Context d (T : measurableType d) (R : realType). Variable mu : {measure set T -> \bar R}. Variables (g : {nnsfun T >-> R}^nat) (f : {nnsfun T >-> R}). +Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~ x). Hypothesis gf : forall x, cvgn (g^~ x) -> f x <= limn (g^~ x). @@ -352,6 +352,7 @@ Context d (T : measurableType d) (R : realType). Variable mu : {measure set T -> \bar R}. Variables (g : {nnsfun T >-> R}^nat) (f : {nnsfun T >-> R}). +Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~ x). Hypothesis gf : forall x, g ^~ x @ \oo --> f x. @@ -378,6 +379,7 @@ Local Open Scope ereal_scope. Context d (T : measurableType d) (R : realType). Implicit Types (f g : T -> \bar R) (D : set T). +Import HBNNSimple. Let nnintegral mu f := ereal_sup [set sintegral mu h | h in [set h : {nnsfun T >-> R} | forall x, (h x)%:E <= f x]]. @@ -476,6 +478,7 @@ Context {d} {T : measurableType d} {R : realType}. Variables m1 m2 : {measure set T -> \bar R}. Hypothesis m12 : forall S, measurable S -> m1 S <= m2 S. +Import HBNNSimple. Lemma ge0_le_measure_integral (f : T -> \bar R) S : measurable S -> (forall x, 0 <= f x) -> measurable_fun [set: T] f -> @@ -494,6 +497,7 @@ Context d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}) (D : set T) (mD : measurable D). Implicit Type A : set T. +Import HBNNSimple. Lemma integral_indic A : measurable A -> \int[mu]_(x in D) (\1_A x)%:E = mu (A `&` D). @@ -512,6 +516,7 @@ Context {d} {T : measurableType d} {R : realType} Lemma integral_mkcond D f : \int[mu]_(x in D) f x = \int[mu]_x (f \_ D) x. Proof. by rewrite /integral patch_setT. Qed. +Import HBNNSimple. Lemma integralT_nnsfun (h : {nnsfun T >-> R}) : \int[mu]_x (h x)%:E = sintegral mu h. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v index a9e574351b..ab9855cd3d 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v @@ -81,6 +81,7 @@ Import MeasurableR. Let R : measurableType _ := (*measurableTypeR*) rT. Local Open Scope ereal_scope. +Import HBSimple. Lemma approximation_continuous_integrable (E : set _) (f : rT -> rT): measurable E -> mu E < +oo -> mu.-integrable E (EFin \o f) -> diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v index 1eb4406df9..e599a7ca51 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v @@ -35,6 +35,7 @@ Variables (mu : {measure set T -> \bar R}) (f : T -> \bar R) Hypothesis f0 : forall x, 0 <= f x. Hypothesis mf : measurable_fun setT f. +Import HBNNSimple. Hypothesis nd_g : forall x, nondecreasing_seq (g^~x). Hypothesis gf : forall x, EFin \o g^~ x @ \oo --> f x. @@ -161,6 +162,7 @@ Local Definition max_g2' : (T -> R)^nat := Local Definition max_g2 : {nnsfun T >-> R}^nat := fun k => bigmax_nnsfun (g2^~ k) k. +Import HBNNSimple. Let is_cvg_g2 n t : cvgn (EFin \o (g2 n ^~ t)). Proof. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v index fe4f21bbbe..04a7a3c898 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v @@ -85,6 +85,7 @@ Context d (T : measurableType d) (R : realType). Let sintegral_measure_zero (f : T -> R) : sintegral mzero f = 0. Proof. by rewrite sintegralE big1// => r _ /=; rewrite /mzero mule0. Qed. +Import HBNNSimple. Lemma integral_measure_zero (D : set T) (f : T -> \bar R) : \int[mzero]_(x in D) f x = 0. @@ -117,6 +118,7 @@ Context {d} {T : measurableType d} {R : realType} Hypothesis f0 : forall x, D x -> 0 <= f x. Hypothesis mf : measurable_fun D f. +Import HBNNSimple. Let ge0_integralZl_EFin_subproof k : (0 <= k)%R -> \int[mu]_(x in D) (k%:E * f x) = k%:E * \int[mu]_(x in D) f x. @@ -201,6 +203,7 @@ Hypothesis mf1 : measurable_fun D f1. Hypothesis f20 : forall x, D x -> 0 <= f2 x. Hypothesis mf2 : measurable_fun D f2. +Import HBNNSimple. Lemma ge0_integralD : \int[mu]_(x in D) (f1 x + f2 x) = \int[mu]_(x in D) f1 x + \int[mu]_(x in D) f2 x. @@ -315,10 +318,7 @@ under eq_integral do rewrite EFinM. by rewrite ge0_integralZl//; exact/measurable_EFinP. Qed. -<<<<<<< HEAD Import HBNNSimple. -======= ->>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma integralZl_indic_nnsfun (f : {nnsfun T >-> R}) (k : R) : @@ -343,10 +343,7 @@ Let integral_mscale_indic E : measurable E -> k%:num%:E * \int[m]_(x in D) (\1_E x)%:E. Proof. by move=> ?; rewrite !integral_indic. Qed. -<<<<<<< HEAD Import HBNNSimple. -======= ->>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Let integral_mscale_nnsfun (h : {nnsfun T >-> R}) : @@ -452,6 +449,7 @@ rewrite !fsbig_set1 mul0e add0e preimage_restrict//. by rewrite ifN ?set0U ?setIidl//= notin_setE => /esym; exact/eqP. Qed. +Import HBNNSimple. Local Lemma integral_cstr r : \int[mu]_(x in D) r%:E = r%:E * mu D. Proof. @@ -501,10 +499,7 @@ Context {d1 d2} {X : measurableType d1} {Y : measurableType d2} {R : realType} Let mphi_mixin := isMeasurableFun.Build _ _ _ _ _ mphi. Let mphi_pack : {mfun _ >-> _} := HB.pack phi mphi_mixin. -<<<<<<< HEAD Import HBNNSimple. -======= ->>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma ge0_integral_pushforward D (f : Y -> \bar R) : @@ -587,10 +582,7 @@ Local Open Scope ereal_scope. Context {d} {T : measurableType d} (a : T) {R : realType} (D : set T) (mD : measurable D). -<<<<<<< HEAD Import HBNNSimple. -======= ->>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Let ge0_integral_dirac (f : T -> \bar R) (mf : measurable_fun D f) @@ -662,10 +654,7 @@ rewrite integral_indic//= /msum/=; apply: eq_bigr => i _. by rewrite integral_indic// setIT. Qed. -<<<<<<< HEAD Import HBNNSimple. -======= ->>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Let integralT_measure_sum (f : {nnsfun T >-> R}) : @@ -703,6 +692,8 @@ End integral_measure_sum_nnsfun. Section integral_measure_add_nnsfun. +Import HBNNSimple. + Lemma integral_measure_add_nnsfun d (T : measurableType d) (R : realType) (m1 m2 : {measure set T -> \bar R}) (D : set T) (mD : measurable D) (f : {nnsfun T >-> R}) : @@ -720,6 +711,7 @@ Local Open Scope ereal_scope. Context {d} {T : measurableType d} {R : realType} (m_ : {measure set T -> \bar R}^nat). +Import HBNNSimple. Lemma ge0_integral_measure_sum (D : set T) (mD : measurable D) (f : T -> \bar R) : @@ -782,10 +774,7 @@ rewrite integral_indic// setIT /m/= /mseries; apply: eq_eseriesr => i _. by rewrite integral_indic// setIT. Qed. -<<<<<<< HEAD Import HBNNSimple. -======= ->>>>>>> aedb2e9ad (merge with measurableTypeNormed) Import MeasurableR. Lemma integral_measure_series_nnsfun (D : set T) (mD : measurable D) @@ -820,6 +809,7 @@ Context {d} {T : measurableType d} {R : realType} (m_ : {measure set T -> \bar R}^nat). Let m := mseries m_ O. +Import HBNNSimple. Lemma ge0_integral_measure_series (D : set T) (mD : measurable D) (f : T -> \bar R) : (forall t, D t -> 0 <= f t) -> @@ -1079,16 +1069,10 @@ End integral_patch. Section ge0_cvgn_integral. Local Open Scope ereal_scope. Import MeasurableR. -<<<<<<< HEAD Context {R : realType} (mu : {measure set ((*@measurableTypeR*) R) -> \bar R}) (f : R -> R). -======= -Context {R : realType} (mu : {measure set (@measurableTypeR R) -> \bar R}). -Variable f : R -> R. ->>>>>>> aedb2e9ad (merge with measurableTypeNormed) Hypothesis f0 : (forall x, 0 <= f x)%R. - Hypothesis mf : measurable_fun setT f. Lemma ge0_integral_ereal_sup : diff --git a/theories/lebesgue_integral_theory/measurable_fun_approximation.v b/theories/lebesgue_integral_theory/measurable_fun_approximation.v index b42a1cc396..141bd370b4 100644 --- a/theories/lebesgue_integral_theory/measurable_fun_approximation.v +++ b/theories/lebesgue_integral_theory/measurable_fun_approximation.v @@ -351,6 +351,7 @@ Definition nnsfun_approx : {nnsfun T >-> R}^nat := fun n => locked (add_nnsfun else nnsfun0) (n * 2 ^ n)%N) (scale_nnsfun (indic_nnsfun _ (mB n)) (ler0n _ n))). +Import HBNNSimple. Lemma nnsfun_approxE n : nnsfun_approx n = approx n :> (T -> R). Proof. @@ -386,7 +387,8 @@ Import MeasurableR. NonNegFun.on (cst x%:num).*) (* generates Warning: HB: no new instance is generated [HB.no-new-instance,HB,elpi,default] *) -Import MeasurableR. +Import HBSimple. +Import HBNNSimple. Lemma approximation_sfun : exists g : {sfun T >-> R}^nat, (forall x, D x -> EFin \o g ^~ x @ \oo --> f x). @@ -706,6 +708,7 @@ Let R : measurableType _ := rT(*measurableTypeR rT*). Hypothesis mA : measurable A. Hypothesis finA : mu A < +oo. +Import HBSimple. Let lusin_simple (f : {sfun R >-> rT}) (eps : rT) : (0 < eps)%R -> exists K, [/\ compact K, K `<=` A, mu (A `\` K) < eps%:E & diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 0f28e4917b..93c4daa029 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -260,14 +260,14 @@ HB.instance Definition _ (V : normedModType R) := Implicit Types (f g : {sfun aT >-> N} : lmodType _). Lemma sfun0' : (0 : {sfun aT >-> N} : lmodType _) =1 cst 0. Proof. by []. Qed. -Lemma sfunN' f : - f =1 \- f. Proof. by []. Qed. -Lemma sfunD' f g : f + g =1 f \+ g. Proof. by []. Qed. -Lemma sfunB' f g : f - g =1 f \- g. Proof. by []. Qed. -Lemma sfunZ' k f : k *: f =1 k \*: f. Proof. by []. Qed. -Lemma sfun_sum' I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : +Lemma sfunN f : - f =1 \- f. Proof. by []. Qed. +Lemma sfunD f g : f + g =1 f \+ g. Proof. by []. Qed. +Lemma sfunB f g : f - g =1 f \- g. Proof. by []. Qed. +Lemma sfunZ k f : k *: f =1 k \*: f. Proof. by []. Qed. +Lemma sfun_sum I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. -Lemma sfun_prod' I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : +Lemma sfun_prod I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. @@ -327,21 +327,32 @@ move=> mD Y mY; rewrite preimage_indic_lmod //. do 2 (case: ifP => _); apply: measurableI=>//; exact: measurableC. Qed. +Import HBSimple. + HB.instance Definition _ A mA z := @isMeasurableFun.Build _ _ aT nT (mindic_lmod mA z) (@measurable_indic_lmod [set: aT] A mA z). HB.instance Definition _ (D : set aT) (mD : measurable D) (z : nT) : @FImFun aT nT (mindic_lmod mD z) := FImFun.on (mindic_lmod mD z). -Import HBSimple. - -(* Definition mindic_lmod_sfun (D : set aT) (mD : measurable D) (z : nT) : {sfun aT >-> nT} := mindic_lmod mD z. -*) End mindic_lmod. +Section fimfunE_lmod. +Context {T : Type} {K : pzRingType} {L : lmodType K} (f : {fimfun T >-> L}). + +Lemma fimfunE_lmod (x : T) : + f x = \sum_(y \in range f) indic_lmod (f @^-1` [set y]) y x. +Proof. +rewrite (fsbigD1 (f x))// /= indic_lmodE mem_set// fsbig1 ?addr0//. +by move=> y [fy /= /nesym yfx]; rewrite indic_lmodE memNset ?mulr0. +Qed. + +End fimfunE_lmod. + + Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : t < 0 -> f @^-1` [set t] = set0. Proof. diff --git a/theories/probability_theory/independence.v b/theories/probability_theory/independence.v index 1729d53850..96b881e56c 100644 --- a/theories/probability_theory/independence.v +++ b/theories/probability_theory/independence.v @@ -603,10 +603,7 @@ Section expectationM. Context {R : realType} {d} {T : measurableType d} (P : probability T R). Local Open Scope ereal_scope. -<<<<<<< HEAD:theories/probability_theory/independence.v Import HBNNSimple. -======= ->>>>>>> aedb2e9ad (merge with measurableTypeNormed):theories/independence.v Import MeasurableR. #[local] Lemma expectationM_nnsfun (f g : {nnsfun T >-> R}) : diff --git a/theories/probability_theory/normal_distribution.v b/theories/probability_theory/normal_distribution.v index 29ea4bde45..62fae40ea1 100644 --- a/theories/probability_theory/normal_distribution.v +++ b/theories/probability_theory/normal_distribution.v @@ -219,8 +219,6 @@ HB.instance Definition _ m s := Measure.on (normal_prob m s). End normal_prob_def. -End normal_prob_def. - Section normal_probability. Context {R : realType} (m sigma : R). Local Open Scope ring_scope. diff --git a/theories/probability_theory/uniform_distribution.v b/theories/probability_theory/uniform_distribution.v index 4ea91d5f4d..db21ea3dde 100644 --- a/theories/probability_theory/uniform_distribution.v +++ b/theories/probability_theory/uniform_distribution.v @@ -149,6 +149,7 @@ case: ifPn => //. by rewrite inE/= in_itv/= => axb; rewrite indicE (negbTE xE) mule0. Qed. +Import HBNNSimple. Let integral_uniform_nnsfun (f : {nnsfun _ >-> R}) : (\int[uniform_prob ab]_x (f x)%:E = From 217e352cc2d08be977ebcfe8b8388bf66e6cc71c Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 12:25:28 +0200 Subject: [PATCH 27/38] generalize SimpleFun codomain from realType to sigmaRingType Co-authored-by: Arthur Djevahirdjian --- CHANGELOG_UNRELEASED.md | 2 ++ theories/lebesgue_integral_theory/simple_functions.v | 9 ++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index fa989e4e34..53185389c8 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -150,6 +150,8 @@ - in `esum.v`: + lemma `esum_set1` + + structure `SimpleFun` (and notation `{sfun aT >-> _}`): codomain + generalized from `realType` to `sigmaRingType d'`, adding a display parameter `d'`; ### Deprecated diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 93c4daa029..c0dc0d9517 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -72,13 +72,13 @@ Local Open Scope ring_scope. Module HBSimple. Import MeasurableR. -HB.structure Definition SimpleFun d d' - (aT : sigmaRingType d) (rT : sigmaRingType d') := +HB.structure Definition SimpleFun d (aT : sigmaRingType d) + d' (rT : sigmaRingType d') := {f of @isMeasurableFun d d' aT rT f & @FiniteImage aT rT f}. End HBSimple. -Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ _ aT T) : form_scope. +Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ aT _ T) : form_scope. Notation "[ 'sfun' 'of' f ]" := [the {sfun _ >-> _} of f] : form_scope. Module HBNNSimple. @@ -87,7 +87,7 @@ Import MeasurableR. HB.structure Definition NonNegSimpleFun d (aT : sigmaRingType d) (rT : realType) := - {f of @SimpleFun d _ aT rT f & @NonNegFun aT rT f}. + {f of @SimpleFun d aT _ rT f & @NonNegFun aT rT f}. End HBNNSimple. @@ -96,7 +96,6 @@ Notation "[ 'nnsfun' 'of' f ]" := [the {nnsfun _ >-> _} of f] : form_scope. Section sfun_pred. Context {d} {aT : sigmaRingType d} {d'} {bT : sigmaRingType d'}. -Import MeasurableR. Definition sfun : {pred _ -> _} := [predI @mfun _ _ aT bT & fimfun]. Definition sfun_key : pred_key sfun. Proof. exact. Qed. Canonical sfun_keyed := KeyedPred sfun_key. From 9c8a0cf897ad7e2ba9a5c9fc2ad840a1cd5f3290 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 18:57:20 +0000 Subject: [PATCH 28/38] 80 char limit --- theories/lebesgue_integral_theory/simple_functions.v | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index c0dc0d9517..4ae33c0ee6 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -91,7 +91,8 @@ HB.structure Definition NonNegSimpleFun End HBNNSimple. -Notation "{ 'nnsfun' aT >-> T }" := (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. +Notation "{ 'nnsfun' aT >-> T }" := + (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. Notation "[ 'nnsfun' 'of' f ]" := [the {nnsfun _ >-> _} of f] : form_scope. Section sfun_pred. From 061da847e137b3f1a87c7df988dda9f0cedaa844 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 19:58:48 +0000 Subject: [PATCH 29/38] add Borel sigma-algebra wrapper borel_type and measurable singletons Co-authored-by: Arthur Djevahirdjian --- theories/borel_hierarchy.v | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v index 4a033ed6a9..20cddccc9b 100644 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -20,7 +20,7 @@ Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. -Import Order.TTheory GRing.Theory Num.Theory. +Import Order.TTheory GRing.Theory Num.Def Num.Theory. Import numFieldNormedType.Exports. Local Open Scope classical_set_scope. @@ -82,6 +82,31 @@ Qed. End irrational_Gdelta. +Definition borel_type (T : topologicalType) := g_sigma_algebraType (@open T). + +Section borel_normedModType. +Local Open Scope ring_scope. +Context {R : realType} {V : normedModType R}. + +Lemma singleton_bigcap (x : V) : + [set x] = \bigcap_(k : nat) ball x (k.+1%:R)^-1. +Proof. +apply/seteqP; split => [_ -> k _|y xy]. + by rewrite -ball_normE/= subrr normr0 invr_gt0 ltr0n. +apply/eqP; rewrite eq_sym -subr_eq0 -normr_eq0 eq_le normr_ge0 andbT. +apply/ler_addgt0Pl => e e0; rewrite addr0. +have := xy (truncn e^-1) I; rewrite -ball_normE/= => /ltW/le_trans; apply. +by rewrite invf_ple ?posrE ?ltr0n ?invr_gt0//; apply/ltW/truncnS_gt. +Qed. + +Lemma measurable1 (x : borel_type V) : measurable [set x]. +Proof. +rewrite singleton_bigcap; apply: bigcap_measurable => // k _. +by apply: sub_sigma_algebra; exact: ball_open. +Qed. + +End borel_normedModType. + Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R). Proof. apply/forall2NP => A; apply/not_andP => -[oA ratrA]. From 40b514b3b4389a48d3cdc7652453680c2e4c10c9 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Sat, 6 Jun 2026 20:27:20 +0000 Subject: [PATCH 30/38] lmodType structure on simple functions valued in a normed module Co-authored-by: Arthur Djevahirdjian --- CHANGELOG_UNRELEASED.md | 2 ++ theories/lebesgue_integral_theory/simple_functions.v | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index 53185389c8..8c7befc55d 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -28,6 +28,8 @@ + `{sfun aT >-> V}` is an `lmodType` when `V` is a `normedModType` + definitions `indic_lmod` `mindic_lmod` `mindic_lmod_sfun` + lemmas `indic_lmodE` `preimage_indic_mod` `measurable_indic_lmod` + + lemmas `sfun_op`, `sfun_submod_closed` + + `{sfun aT >-> borel_type V}` is an `lmodType` when `V` is a `normedModType` - in `set_interval.v`: + lemmas `setU_itvob1`, `setU_1itvob` diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 4ae33c0ee6..5d59cc1d69 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -6,6 +6,7 @@ From mathcomp Require Import boolp classical_sets functions cardinality fsbigop. From mathcomp Require Import reals real_interval topology ereal. From mathcomp Require Import normedtype sequences esum measure. From mathcomp Require Import real_measure numfun realfun. +From mathcomp Require Import borel_hierarchy. (**md**************************************************************************) (* # Simple functions *) @@ -352,7 +353,6 @@ Qed. End fimfunE_lmod. - Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : t < 0 -> f @^-1` [set t] = set0. Proof. From 19a98f9761a714bab894bb63ff882fddcb4e0b0f Mon Sep 17 00:00:00 2001 From: adjevahi Date: Mon, 8 Jun 2026 10:59:31 +0200 Subject: [PATCH 31/38] added doc --- theories/lebesgue_integral_theory/simple_functions.v | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 5d59cc1d69..9a382dcc31 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -29,8 +29,9 @@ From mathcomp Require Import borel_hierarchy. (* *) (* Detailed contents: *) (* ```` *) -(* {sfun T >-> R} == type of simple functions *) -(* They form a (potentially zero) ring. *) +(* {sfun aT >-> bT} == type of simple functions *) +(* They can form a ring or a module depending on *) +(* the structure of bT *) (* {nnsfun T >-> R} == type of non-negative simple functions *) (* indic_sfun mD := mindic _ mD *) (* cst_sfun r == constant simple function *) From fa5c81f9184a7690c04680eb8f58cc41dbe6abb4 Mon Sep 17 00:00:00 2001 From: Alessandro Bruni Date: Tue, 16 Jun 2026 13:54:34 +0000 Subject: [PATCH 32/38] copy on borel_type --- theories/borel_hierarchy.v | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v index 20cddccc9b..ed43c9c00a 100644 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -107,6 +107,10 @@ Qed. End borel_normedModType. +#[non_forgetful_inheritance] +HB.instance Definition _ (R : realType) (V : normedModType R) := + Measurable.copy V (borel_type V). + Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R). Proof. apply/forall2NP => A; apply/not_andP => -[oA ratrA]. From cb4559ba5c8d4507d16182eb9e64e62f173261d4 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Mon, 22 Jun 2026 10:50:01 +0200 Subject: [PATCH 33/38] started work on top of pr 1988 --- theories/lebesgue_integral_theory/simple_functions.v | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 9a382dcc31..36d9e95d99 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -278,6 +278,12 @@ HB.instance Definition _ f g := MeasurableFun.copy (\- f) (- f). HB.instance Definition _ f g := MeasurableFun.copy (f \- g) (f - g). HB.instance Definition _ k f := MeasurableFun.copy (k \*: f) (k *: f). +Import MeasurableR. +Lemma sfun0r : (0 : {sfun aT >-> R}) =1 cst 0. Proof. by []. Qed. +(* +Lemma sfun0m {V : normedModType R} : (0 : {sfun aT >-> V}) =1 cst 0. +*) + End sfun_lmodType. (* This could be moved elsewhere *) From b4cb7c1edde66a022bd28369fe4964eb1cc6805c Mon Sep 17 00:00:00 2001 From: adjevahi Date: Wed, 8 Jul 2026 15:10:55 +0200 Subject: [PATCH 34/38] merge with measurableTypeNormed --- CHANGELOG_UNRELEASED.md | 410 +++++++++++++++++- theories/borel_hierarchy.v | 31 +- theories/kernel.v | 2 + .../lebesgue_integral_dominated_convergence.v | 1 + .../simple_functions.v | 45 +- 5 files changed, 432 insertions(+), 57 deletions(-) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index 8c7befc55d..21d0ccc312 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -49,6 +49,162 @@ * lemma `measurable_set1` * lemma `measurable_ball_norm` * lemma ` measurable_funP1` + + lemma `derivable_sqrt` +- in `classical_sets.v`: + + definition `rectangle` + + lemmas `rectangle_setX`, `setI_closed_rectangle` + + definitions `cross`, `cross12` + + lemmas `smallest_sub_sub`, `bigcap_closed_smallest`, `smallest_sub_iff` + + lemma `preimage_set_systemS` + + lemma `setD_bigcapr` + +- in `measurable_structure.v`: + + lemmas `g_sigma_algebra_cross`, `g_sigma_algebra_rectangle` + + lemma `sigma_algebra_sub` + +- in `measurable_function.v`: + + lemma `preimage_measurability` + +- in `pseudometric_normed_Zmodule.v`: + + lemma `itv_center_shift` + +- in `normed_module.v`: + + lemmas `closure_itvoo` +- in `unstable.v`: + + structures `SemiNorm`, `Norm` + + lemmas `normMn`, `normN`, `ler_norm_sum` + +- in `normed_module.v`: + + structure `NormedVector` + + notation `normedVectType` + + definition `max_space` + + lemmas `sup_closed_ball_compact`, `equivalence_norms`, + `linear_findim_continuous` + +- in `tvs.v`: + + lemmas `cvg_sum`, `sum_continuous` + +- in `classical_sets.v`: + + lemmas `setI_closed_setT`, `setI_closed_set0` + +- in `measurable_function.v`: + + lemma `g_sigma_algebra_preimage_comp` + +- in `measure_function.v`: + + lemma `g_sigma_algebra_finite_measure_unique` + +- new file `independence.v`: + + definition `independent_events` + + definition `mutual_independence` + + lemma `eq_mutual_independence` + + definition `independence2`, `independence2P` + + lemma `mutual_independence_fset` + + lemma `mutual_independence_finiteS` + + theorem `mutual_independence_finite_g_sigma` + + lemma `mutual_dependence_bigcup` + + definition `independent_RVs` + + lemma `independent_RVsD1` + + theorem `independent_generators` + + definition `independent_RVs2` + + lemmas `independent_RVs2_comp`, `independent_RVs2_funrposneg`, + `independent_RVs2_funrnegpos`, `independent_RVs2_funrnegneg`, + `independent_RVs2_funrpospos` + + definition `pairRV`, lemma `measurable_pairRV` + + lemmas `independent_RVs2_product_measure1` + + lemmas `independent_RVs2_setI_preimage`, + `independent_Lfun1_expectation_product_measure_lty` + + lemma `ge0_independent_expectationM` + + lemmas `independent_Lfun1_expectationM_lty`, `independent_Lfun1M`, + `independent_expectationM` + +- in `ereal.v`: + + lemma `ge0_addBefctE` + +- in `measure_extension.v`: + + definition `caratheodory_measure` +- in `measurable_structure.v`: + + structure `PMeasurable`, notation `pmeasurableType` + +- in `subspace_topology.v`: + + lemma `withinU_continuous_patch` +- in `matrix_normedtype.v`: + + lemma `continuous_mx` + +- in `derive.v`: + + instance `is_derive_mx` + + fact `dmx` + + lemma `diffmx` + + lemma `is_diff_mx` + + instance `is_diff_mx` +- in `realsum.v`: + + lemma `esum_psum` + + lemma `esum_sum` + +- in `constructive_ereal.v`: + + definition `esg` + + lemmas `numEesg`, `gte0_esg`, `lte0_esg`, `esg0` + +- in `esum.v`: + + lemmas `esum_eq0P`, `esumZ`, `exchange_esum` + + lemmas `le_esum`, `esumN` + + lemmas `summable_le_esum`, `summable_esum_funepos`, `summable_esumN`, + `summableZ`, `summable_esumZ` + + lemmas `esum_if_eq_op` + + lemmas `exchange_esum_ereal_sup` + +- in `ereal.v`: + + lemmas `exchange_ereal_sup`, `ge0_ereal_supZl`, `ge0_ereal_supZl_range` + +- in `sequences.v`: + + lemmas `ereal_supD`, `ereal_sup_sum` + +- in `reals.v`: + + lemmas `sup_ge0`, `has_sup_wpZl`, `gt0_has_supZl`, `has_sup_Mn`, `sup_Mn` +- in `mathcomp_extra.v`: + + lemmas `divDl_ge0`, `divDl_le1` + +- in `unstable.v`: + + lemmas `divD_onem` + +- in `filter.v`: + + mixin `isSubNbhs`, structure `SubNbhs`, notation `subNbhsType` + +- in `topology_structure.v`: + + structure `SubTopological`, notation `subTopologicalType` + +- in `tvs.v`: + + structure `SubConvexTvs`, notation `subConvexTvsType` + +- in `normed_module.v`: + + structure `SubNormedModule`, notation `subNormedModType` + + instance `ent_xsection_filter` + + light-weigth factory `subLmodule_isSubNormedmodule` + +- new file `hahn_banach_theorem.v`: + + module `LinearGraph` + * definitions `graph`, `linear_graph` + * lemmas `lingraph_00`, `lingraphZ`, `lingraphD` + + module `HahnBanachZorn` + * definitions `extend_graph`, `le_graph`, `functional_graph`, `le_extend_graph` + * record `zorn_type` + * definition `zphi` + * lemma `zorn_type_eq` + * definition `zornS` + * lemmas `zornS_ex`, `domain_extend`, `hahn_banach_witness` + + theorems `hahn_banach_extension`, `hahn_banach_extension_normed` +- in `normal_distribution.v`: + + lemma `normal_funN` + + lemma `normal_fun_sym` + + lemma `normal_fun0abs` + + lemma `normal_pdf_sym` + + lemma `normal_fun_center_new` + + lemma `normal_fun_shift` + + lemma `normal_pdf_uniq_ae` + + lemma `normal_prob_continuous` + + lemma `integral_normal_prob` + + lemma `measurable_normal_prob` + + lemma `emeasurable_bounded_integrable` + + lemmas `integrable_normal_probD1`, `normal_probD1`, `normal_probD2`, `normal_probD` - in `lebesgue_stieltjes_measure.v`: + module `MeasurableRocitv` @@ -71,7 +227,31 @@ - in `real_interval.v`: + lemma `set1_bigcap_oo` -### Changed +- in `realsum.v`: + + lemma `esum_summableP` + +- in `esum.v`: + + lemma `fsetsTE` +- in `ftc.v`: + + lemma `ge0_integration_by_substitution_shift_itvy`, + `ge0_integration_by_substitution_shift_itvNy` +- in `derive.v`: + + lemmas `derivable_row_mx`, `derive_row_mx` + + instance `is_derive_row_mx` + +- in `matrix_normedtype.v` + + lemmas `norm_row_mx`, `norm_row_mx0r`, `norm_row_mx0l`, `cvg_row_mx` + +- in `unstable.v`: + + lemma `sub_row_mx` + +- in `derive.v`: + + lemmas `eqo_row_mx`, `drow_mx`, `diff_row_mx`, + `differentiable_row_mx` + + instance `is_diff_row_mx` + +- in `functions.v`: + + lemmas `zerofctE`, `onefctE` - in `lebesgue_integral_nonneg.v`, generalized and deprecated: + lemma `ge0_integralZl_EFin` (no condition on `k`) @@ -79,6 +259,78 @@ - from `lebesgue_stieltjes_measure.v` to (new) `normedtyped_measurable.v`: + move definition `open_type` + move notations `.-open`, `.-open.-measurable` +- in `functions.v`: + + lemmas `linfunP`, `linfun_eqP` + + instances of `SubLmodule` and `pointedType` on `{linear _->_ | _ }` + +- in `tvs.v`: + + structure `LinearContinuous` + + factory `isLinearContinuous` + + instance of `ChoiceType` on `{linear_continuous _ -> _ }` + + instance of `LinearContinuous` with the composition of two functions of type `LinearContinuous` + + instance of `LinearContinuous` with the sum of two functions of type `LinearContinuous` + + instance of `LinearContinuous` with the scalar multiplication of a function of type + `LinearContinuous` + + instance of `Continuous` on \-f when f is of type `LinearContinuous` + + instance of `SubModClosed` on `{linear_continuous _ -> _}` + + instance of `SubLModule` on `{linear_continuous _ -> _ }` + + instance of `LinearContinuous` on the null function + + notations `{linear_continuous _ -> _ | _ }` and `{linear_continuous _ -> _ }` + + definitions `lcfun`, `lcfun_key`, `lcfunP` + + lemmas `lcfun_eqP`, `null_fun_continuous`, `fun_cvgD`, + `fun_cvgN`, `fun_cvgZ`, `fun_cvgZr` + + lemmas `lcfun_continuous` and `lcfun_linear` + +- new files `signed_measure.v` and `radon_nikodym.v` + + with the contents of `charge.v` (deprecated) + +- in `esum.v`: + + lemma `ge0_esum` + + lemma `esum_ge` + +- in `functions.v`: + + lemma `preimageD1` + +- in `measure_function.v`: + + lemmas `cvg_measure_bigcap`, `cvg_measure_bigcup` + +- in `classical_sets.v`: + + lemma `bigcup_bigsetU` + +- in `measurable_structure.v`: + + lemmas `countable_bigcap_measurable`, `countable_bigcup_measurable` + +- in `lebesgue_stieltjes_measure.v`: + + module `MeasurableRocitv` + + definition `open_type` + + notations `.-open`, `.-open.-measurable` + + module `MeasurableOpen` + * definition `measurableTypeO` + + definition `borel_display` + * definition `measurableO` + * definition `measurableTypeR` + + definition `lebesgue_display` + * definition `measurableR` + + lemmas `measurable_set1`, `measurable_itv` (also declared as hints) + + lemma `measurable_ball_norm` + + definition `ocitv_measure`, lemma `ocitv_measure_ext` + + module `MeasurableR` + + module `RGenOpenSets` + * lemma `measurableE` + +- in `real_interval.v`: + + lemma `set1_bigcap_oo` + +### Changed + +- in `realsum.v`: + + lemma `__admitted__psumB` proved and renamed to `psumB` + +- moved from `measurable_structure.v` to `classical_sets.v`: + + definition `preimage_set_system` + + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, + `preimage_set_system_id` + - moved from `measurable_structure.v` to `classical_sets.v`: + definition `preimage_set_system` + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, @@ -101,6 +353,81 @@ - moved inside module `MeasurableRocitv` (`lebesgue_stieltjes_measure.v`): + lemmas `measurable_set1`, `measurable_itv` +- moved from `charge.v` to `radon_nikodym.v`: + + definition `induced_charge` + + lemmas `semi_sigma_additive_nng_induced`, `dominates_induced`, + `integral_normr_continuous` + + definitions `approxRN`, `int_approxRN`, `sup_int_approxRN` + + lemmas `sup_int_approxRN_ge0`, `radon_nikodym_finite`, + `radon_nikodym_sigma_finite`, `change_of_variables`, `integrableM`, + `chain_rule` + + definition `Radon_Nikodym` + + lemmas `Radon_NikodymE`, `Radon_Nikodym_fin_num`, `Radon_Nikodym_integrable`, + `ae_eq_Radon_Nikodym_SigmaFinite`, `Radon_Nikodym_change_of_variables`, + `Radon_Nikodym_cscale`, `Radon_Nikodym_cadd`, `Radon_Nikodym_chain_rule` +- in `realsum.v`: + + the following now use `funrpos` and `funrneg`: + * definition `sum` + * lemmas `summable_funrpos`, `summable_funrneg` + + lemma `sum0` (now uses `cst`) + +- moved from `realsum` to `numfun.v`: + + now use `funrpos` and `funrneg`: + * lemmas `eq_funrpos`, `eq_funrneg` + * lemma `fpos0` (renamed to `funrpos_cst0`) + * lemma `fneg0` (renamed to `funrneg_cst0`) + * lemmas `funrposZ`, `funrnegZ` + * lemmas `funrpos_natrM`, `funrneg_natrM` + * lemmas `le_funrpos_norm` + +- moved from `numfun.v` to `unstable.v`: + + notations `nondecreasing_fun`, `nonincreasing_fun`, + `decreasing_fun`, `increasing_fun` + +- in `esum.v`: + + definition `esum` + + lemma `esum_fset` + + lemma `esum_ge` -> `PosEsum.pos_esum_ge` + + lemma `le_esum` -> `PosEsum.le_pos_esum` + +- moved from `normed_module.v` to `metric_structure.v` + + lemma `squeeze_cvgr` + +- moved from `pseudometric_normed_Zmodule.v` to `metric_structure.v` + + lemmas `real_cvgr_lt`, `real_cvgr_le`, `real_cvgr_le`, `real_cvgr_gt` + + lemmas `cvgr_lt`, `cvgr_gt`, `cvgr_ge`, `cvgr_le` +- in `normal_distribution.v: + + `normal_fun_center` -> `normal_fun_center0` + +- moved from `measurable_structure.v` to `measure_function.v`: + + definition `subset_sigma_subadditive` + +- moved from `measurable_structure.v` to `unstable.v`: + + notations `nondecreasing_seq`, `nonincreasing_seq` + +- moved from `measurable_structure.v` to `classical_sets.v`: + + notation `^nat` + + defintion `sequence` + + defintion `seqDU` + + lemmas `seqDU_bigcup_eq`, `trivIset_seqDU` + + definition `seqD` + + lemmas `eq_bigcup_seqD`, `trivIset_seqD`, `seqDU_seqD`, `bigcup_bigsetU_bigcup` + +- in `functions.v` + + lemma `fctE` (include `zerofctE` and `onefctE`) + +- in `classical_sets.v` + + lemma `bigcupDr` -> `setD_bigcupr` (deprecating `bigcupDr`) + +- moved from `measurable_realfun.v` to `lebesgue_stieltjes_measure.v` + + module `RGenOInfty` + + module `RGenInftyO` + + module `RGenCInfty` + + module `RGenOpens` + +- moved inside module `MeasurableRocitv` (`lebesgue_stieltjes_measure.v`): + + lemmas `measurable_set1`, `measurable_itv` + - in `lebesgue_stieltjes_measure.v`: + lemma `lebesgue_stieltjes_measure_unique` is now about the sigma-algebra generated by open sets @@ -112,6 +439,47 @@ + `MeasurableRocitv.measurable_itv` -> `MeasurableRocitv.ocitv_measurable_itv` - in `lebesgue_stieltjes_measure.v`: +- in `normed_module.v` + + mixin ` PseudoMetricNormedZmod_Tvs_isNormedModule` -> + ` PseudoMetricNormedZmod_ConvexTvs_isNormedModule` + +- in `measurable_structure.v`: + + `measurable_prod_measurableType` -> `prod_measurable_rectangle` + + `sub_sigma_algebra2` -> `sigma_algebra_sub` +- in `measurable_realfun.v`: + + `measurable_fun_itv_co` -> `measurable_fun_itvbb_itvco` + + `measurable_fun_itv_oc` -> `measurable_fun_itvbb_itvoc` + + `emeasurable_fun_itv_cc` -> `emeasurable_fun_itvbb_itvcc` + + `measurable_fun_itv_cc` -> `measurable_fun_itvbb_itvcc` + + `measurable_fun_itv_bndo_bndcP` -> `measurable_fun_itvbo_itvbcP` + + `emeasurable_fun_itv_bndo_bndcP` -> `emeasurable_fun_itvbo_itvbcP` + + `measurable_fun_itv_obnd_cbndP` -> `measurable_fun_itvob_itvcbP` + + `emeasurable_fun_itv_obnd_cbndP` -> `emeasurable_fun_itvob_itvcbP` + +- in `lebesgue_integral_nonneg.v`: + + `integral_itv_bndo_bndc` -> `integral_itvbo_itvbc` + + `integral_itv_obnd_cbnd` -> `integral_itvob_itvcb` + + `integral_itv_bndoo` -> `integral_itvbb_itvoo` + +- in `lebesgue_Rintegral.v`: + + `Rintegral_itv_bndo_bndc` -> `Rintegral_itvbo_itvbc` + + `Rintegral_itv_obnd_cbnd` -> `Rintegral_itvob_itvcb` + +- in `topology_structure.v`: + + `cts_fun` -> `continuous_fun` +- in `measure_function.v`: + + `isFinite` -> `isFinNumFun` + +- in `topology_structure.v`: + + `closure_setC` -> `closureC` +- in `esum.v`: + + `esum_sum` -> ` exchange_esum_sum` + +- in `realsum.v`: + + `psum` -> `PosSum.psum` + +- in `functions.v` + + lemma `scalrfctE` -> `scalerfctE` (deprecating `scalrfctE`) ### Generalized @@ -155,6 +523,12 @@ + structure `SimpleFun` (and notation `{sfun aT >-> _}`): codomain generalized from `realType` to `sigmaRingType d'`, adding a display parameter `d'`; +- in `ereal.v`: + + lemmas `ge0_mule_fsumr`, `ge0_mule_fsuml` + +- in `esum.v`: + + lemma `esum_set1` + ### Deprecated ### Removed @@ -162,6 +536,40 @@ - in `lebesgue_stieltjes_measure.v`: + definition `MeasurableRocitv.lebesgue_display` + definition `MeasurableRocitv.measurableR` +- file `signed.v` + +- in `measurable_structure.v`: + + lemmas `measurable_prod_g_measurableType`, `measurable_prod_g_measurableTypeR` + +- file `measurable_structure.v`: + + notations `preimage_class`, `image_class`, `sigma_algebra_preimage_class`, + `sigma_algebra_image_class`, `sigma_algebra_preimage_classE` (deprecated since 1.9.0) + +- in `ftc.v`: + + lemma `integrable_locally` + +- in `lebesgue_Rintegral.v`: + + notation `Rintegral_setU_EFin` (deprecated since 1.9.0) + +- in `topology_structure.v`: + + lemma `closureC_deprecated` (deprecated since 1.7.0) + +- in `num_normedtype.v`: + + notation `near_in_itv` (deprecated since 1.7.0) + +- in `measurable_fun_approximation.v`: + + lemma `approximation` (deprecated since 1.8.0) + + notations `emeasurable_fun_sum`, `emeasurable_fun_fsum`, + `ge0_emeasurable_fun_sum` (deprecated since 1.8.0) + +- in `random_variable.v`: + + notation `expectationM` (deprecated since 1.8.0) +- in `realsum.v`: + + definitions `fpos`, `fneg` (use `funrpos`, `funrneg` instead) + + lemmas `fnegN`, `fposN` + + lemmas `ge0_pos`, `ge0_neg` + + lemma `fposBfneg` + + lemma `funrpos_le` ### Infrastructure diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v index ed43c9c00a..4a033ed6a9 100644 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -20,7 +20,7 @@ Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. -Import Order.TTheory GRing.Theory Num.Def Num.Theory. +Import Order.TTheory GRing.Theory Num.Theory. Import numFieldNormedType.Exports. Local Open Scope classical_set_scope. @@ -82,35 +82,6 @@ Qed. End irrational_Gdelta. -Definition borel_type (T : topologicalType) := g_sigma_algebraType (@open T). - -Section borel_normedModType. -Local Open Scope ring_scope. -Context {R : realType} {V : normedModType R}. - -Lemma singleton_bigcap (x : V) : - [set x] = \bigcap_(k : nat) ball x (k.+1%:R)^-1. -Proof. -apply/seteqP; split => [_ -> k _|y xy]. - by rewrite -ball_normE/= subrr normr0 invr_gt0 ltr0n. -apply/eqP; rewrite eq_sym -subr_eq0 -normr_eq0 eq_le normr_ge0 andbT. -apply/ler_addgt0Pl => e e0; rewrite addr0. -have := xy (truncn e^-1) I; rewrite -ball_normE/= => /ltW/le_trans; apply. -by rewrite invf_ple ?posrE ?ltr0n ?invr_gt0//; apply/ltW/truncnS_gt. -Qed. - -Lemma measurable1 (x : borel_type V) : measurable [set x]. -Proof. -rewrite singleton_bigcap; apply: bigcap_measurable => // k _. -by apply: sub_sigma_algebra; exact: ball_open. -Qed. - -End borel_normedModType. - -#[non_forgetful_inheritance] -HB.instance Definition _ (R : realType) (V : normedModType R) := - Measurable.copy V (borel_type V). - Lemma not_rational_Gdelta (R : realType) : ~ Gdelta (@rational R). Proof. apply/forall2NP => A; apply/not_andP => -[oA ratrA]. diff --git a/theories/kernel.v b/theories/kernel.v index 1f418be452..34979f6b7b 100644 --- a/theories/kernel.v +++ b/theories/kernel.v @@ -1062,7 +1062,9 @@ HB.export KCOMP_SFINITE_KERNEL. Section measurable_fun_preimage_integral. Context d d' (X : measurableType d) (Y : measurableType d') (R : realType). + Import HBNNSimple. + Variables (k : Y -> \bar R) (k_ : ({nnsfun Y >-> R}) ^nat) (ndk_ : nondecreasing_seq (k_ : (Y -> R)^nat)) diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v index 8030fbefc2..98c3a7bc17 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v @@ -256,6 +256,7 @@ Local Open Scope ereal_scope. Import HBSimple. Import HBNNSimple. Import MeasurableR. +Import MeasurableNormedModule. Let sfun_dense_L1_pos (f : T -> \bar R) : mu.-integrable E f -> (forall x, E x -> 0 <= f x) -> diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index 36d9e95d99..03e60c5cbd 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -29,9 +29,8 @@ From mathcomp Require Import borel_hierarchy. (* *) (* Detailed contents: *) (* ```` *) -(* {sfun aT >-> bT} == type of simple functions *) -(* They can form a ring or a module depending on *) -(* the structure of bT *) +(* {sfun T >-> R} == type of simple functions *) +(* They form a (potentially zero) ring. *) (* {nnsfun T >-> R} == type of non-negative simple functions *) (* indic_sfun mD := mindic _ mD *) (* cst_sfun r == constant simple function *) @@ -93,8 +92,7 @@ HB.structure Definition NonNegSimpleFun End HBNNSimple. -Notation "{ 'nnsfun' aT >-> T }" := - (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. +Notation "{ 'nnsfun' aT >-> T }" := (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope. Notation "[ 'nnsfun' 'of' f ]" := [the {nnsfun _ >-> _} of f] : form_scope. Section sfun_pred. @@ -107,18 +105,17 @@ Lemma sub_sfun_fimfun : {subset sfun <= fimfun}. Proof. by move=> x /andP[]. Qed End sfun_pred. Section sfun. -Context {d} {aT : measurableType d} {d'} {bT : sigmaRingType d'}. -Notation T := {sfun aT >-> bT}. -Notation sfun := (@sfun d aT d' bT). +Context {d} {aT : measurableType d} {d'} {rT : sigmaRingType d'}. +Notation T := {sfun aT >-> rT}. +Notation sfun := (@sfun d aT d' rT). Section Sub. -Context (f : aT -> bT) (fP : f \in sfun). +Context (f : aT -> rT) (fP : f \in sfun). +Import HBSimple. Definition sfun_Sub1_subproof := - @isMeasurableFun.Build d d' aT bT f (set_mem (sub_sfun_mfun fP)). + @isMeasurableFun.Build d d' aT rT f (set_mem (sub_sfun_mfun fP)). #[local] HB.instance Definition _ := sfun_Sub1_subproof. Definition sfun_Sub2_subproof := - @FiniteImage.Build aT bT f (set_mem (sub_sfun_fimfun fP)). - -Import HBSimple. + @FiniteImage.Build aT rT f (set_mem (sub_sfun_fimfun fP)). #[local] HB.instance Definition _ := sfun_Sub2_subproof. Definition sfun_Sub := [sfun of f]. @@ -140,15 +137,15 @@ Proof. by []. Qed. HB.instance Definition _ := isSub.Build _ _ T sfun_rect sfun_valP. -Lemma sfuneqP (f g : {sfun aT >-> bT}) : f = g <-> f =1 g. +Lemma sfuneqP (f g : {sfun aT >-> rT}) : f = g <-> f =1 g. Proof. by split=> [->//|fg]; exact/val_inj/funext. Qed. -HB.instance Definition _ := [Choice of {sfun aT >-> bT} by <:]. +HB.instance Definition _ := [Choice of {sfun aT >-> rT} by <:]. (* NB: already in cardinality.v *) -HB.instance Definition _ x : @FImFun aT bT (cst x) := FImFun.on (cst x). +HB.instance Definition _ x : @FImFun aT rT (cst x) := FImFun.on (cst x). -Definition cst_sfun x : {sfun aT >-> bT} := cst x. +Definition cst_sfun x : {sfun aT >-> rT} := cst x. Lemma cst_sfunE x : @cst_sfun x =1 cst x. Proof. by []. Qed. @@ -185,7 +182,6 @@ Implicit Types (f g : {sfun aT >-> rT}). Import HBSimple. -Lemma sfun0 : (0 : {sfun aT >-> rT}) =1 cst 0. Proof. by []. Qed. Lemma sfun1 : (1 : {sfun aT >-> rT}) =1 cst 1. Proof. by []. Qed. Lemma sfunM f g : f * g =1 f \* g. Proof. by []. Qed. Lemma sfunX f n : f ^+ n =1 (fun x => f x ^+ n). @@ -204,10 +200,8 @@ HB.instance Definition _ (D : set aT) (mD : measurable D) : Definition indic_sfun (D : set aT) (mD : measurable D) : {sfun aT >-> rT} := mindic rT mD. -HB.instance Definition _ k f := MeasurableFun.copy (k \o* f) (f * cst_sfun k). -Definition scale_sfun k f : {sfun aT >-> rT} := k \o* f. - End ring. + Arguments indic_sfun {d aT rT} _. Section sfun_lmodType. @@ -218,10 +212,9 @@ HB.instance Definition _ (V : normedModType R) := GRing.Lmodule.on (borel_type V Import MeasurableNormedModuleOpen. Import HBSimple. -Lemma sfun_op (U V W : normedModType R) - (f : {sfun aT >-> U}) (g : {sfun aT >-> V}) - (h : U * V -> W) : - (fun x => h (f x, g x)) \in @sfun _ aT _ (borel_type W). +Lemma mem_sfun_comp_pair (U V W : normedModType R) (f : {sfun aT >-> U}) + (g : {sfun aT >-> V}) (h : U * V -> W) : + (fun x => h (f x, g x)) \in @sfun _ aT _ W. Proof. rewrite inE; apply/andP; split; rewrite inE/=. move=> _ Y mY; rewrite setTI. @@ -250,7 +243,7 @@ Lemma sfun_submod_closed (V : normedModType R) : submod_closed (@sfun _ aT _ (borel_type V)). Proof. split=> [|k f g sf sg]; first exact: (valP (cst_sfun (0 : V))). -exact: (sfun_op (sfun_Sub sf) (sfun_Sub sg) (fun t => k *: t.1 + t.2)). +exact: (mem_sfun_comp_pair (sfun_Sub sf) (sfun_Sub sg) (fun t => k *: t.1 + t.2)). Qed. HB.instance Definition _ (V : normedModType R) := From 1b46692c88a89774eafa26b25a14f289ae9c78fc Mon Sep 17 00:00:00 2001 From: adjevahi Date: Thu, 9 Jul 2026 15:39:08 +0200 Subject: [PATCH 35/38] started adding bochner.v --- theories/lebesgue_integral_theory/bochner.v | 86 +++++++++++++-------- 1 file changed, 53 insertions(+), 33 deletions(-) diff --git a/theories/lebesgue_integral_theory/bochner.v b/theories/lebesgue_integral_theory/bochner.v index 5ec6ce827b..47490ab759 100644 --- a/theories/lebesgue_integral_theory/bochner.v +++ b/theories/lebesgue_integral_theory/bochner.v @@ -32,51 +32,48 @@ Qed. (* Should be moved in topology_structure.v *) Section separability. -Context {T : topologicalType}. - -Definition separable := -exists D: set T, countable D /\ dense D. - -Definition separable_set (A : set T) := -exists D, - [/\ countable D, D `<=` A & forall O, A`&`O !=set0 -> open O -> O`&`D !=set0]. -Lemma separableTE : separable = separable_set [set:T]. -Proof. -apply: eq_exists=>A. rewrite [X in [/\ _, _ & X]] (_:_ = dense A)//. - by under eq_forall do rewrite setTI. -by rewrite propeqE; split=>[[cA dA]|[cA _ dA]]. -Qed. - -Lemma separable_set0 : separable_set set0. -Proof. by exists set0; split=>// U; rewrite set0I =>[[x]]. Qed. -#[local] Hint Resolve separable_set0 : core. +Section topology_lemmas. +Context {T : topologicalType}. Lemma countable_separable (A : set T) (cA : countable A) : separable_set A. Proof. by exists A; split=>// U H _; rewrite setIC. Qed. -Lemma bigcupT_separable [A : (set T)^nat] : (forall n, separable_set (A n)) -> -separable_set (\bigcup_n A n). +Lemma countable_basis_to_seq {B : set_system T} : +countable B -> basis B -> [set:T] !=set0 -> exists f : nat -> _, range f = B /\ +forall U : set T, open U -> U = \bigcup_(n in [set m| f m `<=`U]) (f n). Proof. -move=>/choice [D_ /all_and3 [cDx DAx dDx]]. exists (\bigcup_n D_ n); split. - exact: bigcup_countable. exact: subset_bigcup. move=> O [x [[n _ Anx] Ox] oO]. -have /(dDx n O) /(_ oO) [y [Oy Dny]] : A n `&` O !=set0 by exists x. -by exists y; split=>//; exists n. +move=> /pfcard_geP /=. case=> [->/basisP[_ /(_ setT openT) /= d0] + /set0P/eqP T0|/surjfunPex [f ->]/basisP[Bo dec]]; first exfalso. + move: d0; rewrite (_ : [set _ | False /\ _] = set0) ?bigcup0//. + by apply: eq_set=> y; apply: notTE=>[[]]. +exists f; split=>//. move=> U /(dec U) ->; apply:eq_set=>x/=. +rewrite !exists2E propeqE; split=>//=[[A [[[n _ <- fnU] fnx]]]| [n [fni fnx]]]. + exists n; split=>//= y fny/=. exists (f n)=>//. split=>//. by exists n. +exists (f n); split=>//; split=>[|y /fni/= [V [_ VU /VU//]]]. by exists n. Qed. -Lemma bigcup_separable [A : (set T)^nat] [P : set nat] : -(forall n, P n -> separable_set (A n)) --> separable_set (\bigcup_(i in P) A i). +Lemma salgebra_second_countable {B : set_system T} : +countable B -> basis B -> open.-sigma.-measurable = B.-sigma.-measurable. Proof. -rewrite bigcup_mkcond => nsPA. apply: bigcupT_separable=>n. -case: ifPn=>[|_]. rewrite in_setE. apply: (nsPA n). -by exists set0; split=>// U [x [F]]. +move=> cB bB; have [T0|/set0P/(countable_basis_to_seq cB bB) [f [rfb dec]]] := + eqVneq [set:T] set0. + have o0 : @open T = [set set0]. rewrite eqEsubset; split=> [U _| A ->] /=; + first by rewrite -subset0 -T0. exact: open0. + rewrite/measurable/= eqEsubset; split; first rewrite o0. + apply: sigma_algebra_subl=> x ->. exact: sigma_algebra0. + by have [/sigma_algebra_sub P _] := bB. +rewrite eqEsubset =>/=; split. apply: sigma_algebra_subl => U /(dec U)->. + rewrite bigcup_mkcond -rfb; apply: sigma_algebra_bigcup => i /=. + case: ifP=> _//. exact: sub_sigma_algebra. exact: sigma_algebra0. +by apply: sigma_algebra_sub; have [] := bB. Qed. -End separability. +End topology_lemmas. Section uniform_lemmas. Context {U : choiceType} {V : uniformType}. + Lemma cvg_uniform_fin_bigcup [f : U -> V] [F : set_system (U -> V)] {I} [D : set I] {A : I -> set U} : Filter F -> finite_set D -> (forall i, D i -> {uniform A i, F --> f}) -> @@ -90,6 +87,8 @@ apply: cvg_uniformU. exact: (UD x). by apply: Dxn=>i [/UD Di//]. Qed. End uniform_lemmas. +End separability. + (* TODO: move all of this to metric spaces *) Section norm_lemmas. @@ -142,7 +141,7 @@ Qed. but normedModType doesn't inherit from metricType yet*) Lemma closed_dist0 {R:realType} {N:normedModType R} {F : set N} (cF : closed F) (x:N) : -F x = forall eps:R, 0 exists f:N, F f /\ `|x - f| < eps. +F x = forall e:R, 0 < e -> exists f:N, F f /\ `|x - f| < e. Proof. rewrite propeqE; split=>[Fx e|Cx]. exists x; split=>//=. by rewrite subrr normr0. have Q : forall n:nat, exists f:N, F f /\ `|x-f| < n.+1%:R^-1. @@ -238,6 +237,18 @@ Qed. Import MeasurableR. +(*Cannot be generalized yet as it is for a different display from normr_continuous*) +Lemma normr_measurable_gen {R : realType} {N : normedModType R} {A : set N} : +measurable_fun A normr. +Proof. +move=> /[dup] mA. +apply: (@measurability _ _ _ _ _ (@normr R N) _ + (eq_trans (esym (RGenOpenSets.measurableE R)) (RGenOInfty.measurableE R))). +move=> U [I [x] ->] <-. have [/(_ norm_continuous) nopen _] := + continuousP (normr: N-> R). apply: measurableI => //. +apply: sub_sigma_algebra; exact: nopen. +Qed. + Lemma measurable_fun_dist {d} {A : measurableType d} {R : realType} {N : normedModType R} {f g : A -> N} {D : set A}: separable_set (image D f) -> measurable_fun D f -> measurable_fun D g -> measurable D -> @@ -483,6 +494,16 @@ Definition bochner_measurable (f: T -> X) := exists f_ : ({sfun T >-> X} : lmodType _)^nat, \forall x \ae mu, f_ n x @[n --> \oo]--> f x. +Lemma bmeas_meas (f : T -> X) : bochner_measurable f -> measure_is_complete mu + -> measurable_fun [set:T] f. +Proof. +move=> [F [A [mA mA0 /subsetCl cv]]] cmu. rewrite -(setvU A). +apply/measurable_funU=>//. exact: measurableC. split=>[|_ Y mY]. + apply: measurable_fun_cv _ cv=>m. apply: measurable_funP. +apply: cmu. apply: (negligibleS (@subIsetl _ A (f@^-1`Y))). +by exists A; split. +Qed. + Lemma bmeasD (f g : T -> X) : bochner_measurable f -> bochner_measurable g -> bochner_measurable (f + g). Proof. @@ -778,7 +799,6 @@ Proof. by split=>[/bmeas_meas_ess_sepP/ess_sep_lim_count|/lim_count_bmeas]. Qed. End bochner_measurable_function. - (** Definition of simple integrals: *) Section simple_fun_raw_integral. Context d (T : sigmaRingType d) (R : realType) (X : normedModType R) From 1c9f229f6131e38648b9c4ded87ae0440644d127 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Wed, 12 Aug 2026 09:15:56 +0200 Subject: [PATCH 36/38] clean-up --- theories/lebesgue_integral_theory/bochner.v | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/theories/lebesgue_integral_theory/bochner.v b/theories/lebesgue_integral_theory/bochner.v index 47490ab759..b83af53022 100644 --- a/theories/lebesgue_integral_theory/bochner.v +++ b/theories/lebesgue_integral_theory/bochner.v @@ -73,7 +73,6 @@ End topology_lemmas. Section uniform_lemmas. Context {U : choiceType} {V : uniformType}. - Lemma cvg_uniform_fin_bigcup [f : U -> V] [F : set_system (U -> V)] {I} [D : set I] {A : I -> set U} : Filter F -> finite_set D -> (forall i, D i -> {uniform A i, F --> f}) -> @@ -141,7 +140,7 @@ Qed. but normedModType doesn't inherit from metricType yet*) Lemma closed_dist0 {R:realType} {N:normedModType R} {F : set N} (cF : closed F) (x:N) : -F x = forall e:R, 0 < e -> exists f:N, F f /\ `|x - f| < e. +F x = forall eps:R, 0 exists f:N, F f /\ `|x - f| < eps. Proof. rewrite propeqE; split=>[Fx e|Cx]. exists x; split=>//=. by rewrite subrr normr0. have Q : forall n:nat, exists f:N, F f /\ `|x-f| < n.+1%:R^-1. @@ -494,16 +493,6 @@ Definition bochner_measurable (f: T -> X) := exists f_ : ({sfun T >-> X} : lmodType _)^nat, \forall x \ae mu, f_ n x @[n --> \oo]--> f x. -Lemma bmeas_meas (f : T -> X) : bochner_measurable f -> measure_is_complete mu - -> measurable_fun [set:T] f. -Proof. -move=> [F [A [mA mA0 /subsetCl cv]]] cmu. rewrite -(setvU A). -apply/measurable_funU=>//. exact: measurableC. split=>[|_ Y mY]. - apply: measurable_fun_cv _ cv=>m. apply: measurable_funP. -apply: cmu. apply: (negligibleS (@subIsetl _ A (f@^-1`Y))). -by exists A; split. -Qed. - Lemma bmeasD (f g : T -> X) : bochner_measurable f -> bochner_measurable g -> bochner_measurable (f + g). Proof. From 97513a6f37d2552103d7562f0a3680a225bdfa5a Mon Sep 17 00:00:00 2001 From: brixfoly Date: Wed, 16 Sep 2026 10:53:10 +0200 Subject: [PATCH 37/38] junk --- .dir-locals.el | 0 .gitattributes | 0 .github/pull_request_template.md | 0 .github/workflows/deploy-docs-gh-pages.yml | 0 .github/workflows/generate_docs.yml | 0 .github/workflows/nix-action-9.1.yml | 0 .github/workflows/nix-action-9.2.yml | 0 .github/workflows/nix-action-master.yml | 0 .gitignore | 0 .nix/config.nix | 0 .nix/coq-nix-toolbox.nix | 0 .nix/rocq-overlays/mathcomp-analysis-single/default.nix | 0 AUTHORS.md | 0 CHANGELOG.md | 0 CHANGELOG_UNRELEASED.md | 0 CONTRIBUTING.md | 0 INSTALL.md | 0 LICENCE | 0 MANIFEST | 0 Makefile | 0 Makefile.common | 0 ORIGINAL_FILES.md | 0 README.md | 0 _CoqProject | 0 analysis_stdlib/Make | 0 analysis_stdlib/Makefile | 0 analysis_stdlib/Rstruct_topology.v | 0 analysis_stdlib/showcase/uniform_bigO.v | 0 classical/Make | 0 classical/Makefile | 0 classical/all_classical.v | 0 classical/boolp.v | 0 classical/cardinality.v | 0 classical/classical_orders.v | 0 classical/classical_sets.v | 0 classical/contra.v | 0 classical/filter.v | 0 classical/fsbigop.v | 0 classical/functions.v | 0 classical/internal_Eqdep_dec.v | 0 classical/mathcomp_extra.v | 0 classical/set_interval.v | 0 classical/unstable.v | 0 classical/wochoice.v | 0 coq-mathcomp-analysis-stdlib.opam | 0 coq-mathcomp-analysis.opam | 0 coq-mathcomp-classical.opam | 0 coq-mathcomp-experimental-reals.opam | 0 coq-mathcomp-reals-stdlib.opam | 0 coq-mathcomp-reals.opam | 0 default.nix | 0 etc/builddoc_dependency_dot.pl | 0 etc/pr193.sed | 0 etc/rocqnavi_index-blacklist | 0 experimental_reals/LICENSE | 0 experimental_reals/Make | 0 experimental_reals/Makefile | 0 experimental_reals/dedekind.v | 0 experimental_reals/discrete.v | 0 experimental_reals/distr.v | 0 experimental_reals/realseq.v | 0 experimental_reals/realsum.v | 0 experimental_reals/xfinmap.v | 0 reals/Make | 0 reals/Makefile | 0 reals/all_reals.v | 0 reals/constructive_ereal.v | 0 reals/prodnormedzmodule.v | 0 reals/real_interval.v | 0 reals/reals.v | 0 reals_stdlib/Make | 0 reals_stdlib/Makefile | 0 reals_stdlib/Rstruct.v | 0 reals_stdlib/nsatz_realtype.v | 0 rocq-mathcomp-analysis-stdlib.opam | 0 rocq-mathcomp-analysis.opam | 0 rocq-mathcomp-classical.opam | 0 rocq-mathcomp-experimental-reals.opam | 0 rocq-mathcomp-reals-stdlib.opam | 0 rocq-mathcomp-reals.opam | 0 theories/Make | 0 theories/Makefile | 0 theories/all_analysis.v | 0 theories/borel_hierarchy.v | 0 theories/cantor.v | 0 theories/charge.v | 0 theories/convex.v | 0 theories/derive.v | 0 theories/elementary_functions/trigonometry_functions.v | 0 theories/ereal.v | 0 theories/ess_sup_inf.v | 0 theories/esum.v | 0 theories/exp.v | 0 theories/ftc.v | 0 theories/functional_analysis/hahn_banach_theorem.v | 0 theories/gauss_integral.v | 0 theories/hoelder.v | 0 theories/homotopy_theory/continuous_path.v | 0 theories/homotopy_theory/homotopy.v | 0 theories/homotopy_theory/wedge_sigT.v | 0 theories/kernel.v | 0 theories/landau.v | 0 theories/lebesgue_integral_theory/bochner.v | 0 theories/lebesgue_integral_theory/giry.v | 0 theories/lebesgue_integral_theory/lebesgue_Rintegral.v | 0 theories/lebesgue_integral_theory/lebesgue_integrable.v | 0 theories/lebesgue_integral_theory/lebesgue_integral.v | 0 theories/lebesgue_integral_theory/lebesgue_integral_definition.v | 0 .../lebesgue_integral_theory/lebesgue_integral_differentiation.v | 0 .../lebesgue_integral_dominated_convergence.v | 0 theories/lebesgue_integral_theory/lebesgue_integral_fubini.v | 0 .../lebesgue_integral_monotone_convergence.v | 0 theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v | 0 theories/lebesgue_integral_theory/lebesgue_integral_under.v | 0 theories/lebesgue_integral_theory/measurable_fun_approximation.v | 0 theories/lebesgue_integral_theory/radon_nikodym.v | 0 theories/lebesgue_integral_theory/simple_functions.v | 0 theories/measure_theory/counting_measure.v | 0 theories/measure_theory/dirac_measure.v | 0 theories/measure_theory/measurable_function.v | 0 theories/measure_theory/measurable_structure.v | 0 theories/measure_theory/measure.v | 0 theories/measure_theory/measure_extension.v | 0 theories/measure_theory/measure_function.v | 0 theories/measure_theory/measure_negligible.v | 0 theories/measure_theory/probability_measure.v | 0 theories/measure_theory/signed_measure.v | 0 theories/normedtype_theory/complete_normed_module.v | 0 theories/normedtype_theory/ereal_normedtype.v | 0 theories/normedtype_theory/matrix_normedtype.v | 0 theories/normedtype_theory/normed_module.v | 0 theories/normedtype_theory/normedtype.v | 0 theories/normedtype_theory/num_normedtype.v | 0 theories/normedtype_theory/pseudometric_normed_Zmodule.v | 0 theories/normedtype_theory/tvs.v | 0 theories/normedtype_theory/urysohn.v | 0 theories/normedtype_theory/vitali_lemma.v | 0 theories/numfun.v | 0 theories/pi_irrational.v | 0 theories/probability_theory/bernoulli_distribution.v | 0 theories/probability_theory/beta_distribution.v | 0 theories/probability_theory/binomial_distribution.v | 0 theories/probability_theory/exponential_distribution.v | 0 theories/probability_theory/independence.v | 0 theories/probability_theory/normal_distribution.v | 0 theories/probability_theory/poisson_distribution.v | 0 theories/probability_theory/probability.v | 0 theories/probability_theory/random_variable.v | 0 theories/probability_theory/uniform_distribution.v | 0 theories/real_measure/lebesgue_measure.v | 0 theories/real_measure/lebesgue_stieltjes_measure.v | 0 theories/real_measure/measurable_realfun.v | 0 theories/realfun.v | 0 theories/sequences.v | 0 theories/showcase/pnt.v | 0 theories/showcase/summability.v | 0 theories/topology_theory/bool_topology.v | 0 theories/topology_theory/compact.v | 0 theories/topology_theory/connected.v | 0 theories/topology_theory/discrete_topology.v | 0 theories/topology_theory/function_spaces.v | 0 theories/topology_theory/initial_topology.v | 0 theories/topology_theory/matrix_topology.v | 0 theories/topology_theory/metric_structure.v | 0 theories/topology_theory/nat_topology.v | 0 theories/topology_theory/num_topology.v | 0 theories/topology_theory/one_point_compactification.v | 0 theories/topology_theory/order_topology.v | 0 theories/topology_theory/product_topology.v | 0 theories/topology_theory/pseudometric_structure.v | 0 theories/topology_theory/quotient_topology.v | 0 theories/topology_theory/separation_axioms.v | 0 theories/topology_theory/sigT_topology.v | 0 theories/topology_theory/subspace_topology.v | 0 theories/topology_theory/subtype_topology.v | 0 theories/topology_theory/supremum_topology.v | 0 theories/topology_theory/topology.v | 0 theories/topology_theory/topology_structure.v | 0 theories/topology_theory/uniform_structure.v | 0 theories/topology_theory/weak_topology.v | 0 180 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 .dir-locals.el mode change 100644 => 100755 .gitattributes mode change 100644 => 100755 .github/pull_request_template.md mode change 100644 => 100755 .github/workflows/deploy-docs-gh-pages.yml mode change 100644 => 100755 .github/workflows/generate_docs.yml mode change 100644 => 100755 .github/workflows/nix-action-9.1.yml mode change 100644 => 100755 .github/workflows/nix-action-9.2.yml mode change 100644 => 100755 .github/workflows/nix-action-master.yml mode change 100644 => 100755 .gitignore mode change 100644 => 100755 .nix/config.nix mode change 100644 => 100755 .nix/coq-nix-toolbox.nix mode change 100644 => 100755 .nix/rocq-overlays/mathcomp-analysis-single/default.nix mode change 100644 => 100755 AUTHORS.md mode change 100644 => 100755 CHANGELOG.md mode change 100644 => 100755 CHANGELOG_UNRELEASED.md mode change 100644 => 100755 CONTRIBUTING.md mode change 100644 => 100755 INSTALL.md mode change 100644 => 100755 LICENCE mode change 100644 => 100755 MANIFEST mode change 100644 => 100755 Makefile mode change 100644 => 100755 Makefile.common mode change 100644 => 100755 ORIGINAL_FILES.md mode change 100644 => 100755 README.md mode change 100644 => 100755 _CoqProject mode change 100644 => 100755 analysis_stdlib/Make mode change 100644 => 100755 analysis_stdlib/Makefile mode change 100644 => 100755 analysis_stdlib/Rstruct_topology.v mode change 100644 => 100755 analysis_stdlib/showcase/uniform_bigO.v mode change 100644 => 100755 classical/Make mode change 100644 => 100755 classical/Makefile mode change 100644 => 100755 classical/all_classical.v mode change 100644 => 100755 classical/boolp.v mode change 100644 => 100755 classical/cardinality.v mode change 100644 => 100755 classical/classical_orders.v mode change 100644 => 100755 classical/classical_sets.v mode change 100644 => 100755 classical/contra.v mode change 100644 => 100755 classical/filter.v mode change 100644 => 100755 classical/fsbigop.v mode change 100644 => 100755 classical/functions.v mode change 100644 => 100755 classical/internal_Eqdep_dec.v mode change 100644 => 100755 classical/mathcomp_extra.v mode change 100644 => 100755 classical/set_interval.v mode change 100644 => 100755 classical/unstable.v mode change 100644 => 100755 classical/wochoice.v mode change 100644 => 100755 coq-mathcomp-analysis-stdlib.opam mode change 100644 => 100755 coq-mathcomp-analysis.opam mode change 100644 => 100755 coq-mathcomp-classical.opam mode change 100644 => 100755 coq-mathcomp-experimental-reals.opam mode change 100644 => 100755 coq-mathcomp-reals-stdlib.opam mode change 100644 => 100755 coq-mathcomp-reals.opam mode change 100644 => 100755 default.nix mode change 100644 => 100755 etc/builddoc_dependency_dot.pl mode change 100644 => 100755 etc/pr193.sed mode change 100644 => 100755 etc/rocqnavi_index-blacklist mode change 100644 => 100755 experimental_reals/LICENSE mode change 100644 => 100755 experimental_reals/Make mode change 100644 => 100755 experimental_reals/Makefile mode change 100644 => 100755 experimental_reals/dedekind.v mode change 100644 => 100755 experimental_reals/discrete.v mode change 100644 => 100755 experimental_reals/distr.v mode change 100644 => 100755 experimental_reals/realseq.v mode change 100644 => 100755 experimental_reals/realsum.v mode change 100644 => 100755 experimental_reals/xfinmap.v mode change 100644 => 100755 reals/Make mode change 100644 => 100755 reals/Makefile mode change 100644 => 100755 reals/all_reals.v mode change 100644 => 100755 reals/constructive_ereal.v mode change 100644 => 100755 reals/prodnormedzmodule.v mode change 100644 => 100755 reals/real_interval.v mode change 100644 => 100755 reals/reals.v mode change 100644 => 100755 reals_stdlib/Make mode change 100644 => 100755 reals_stdlib/Makefile mode change 100644 => 100755 reals_stdlib/Rstruct.v mode change 100644 => 100755 reals_stdlib/nsatz_realtype.v mode change 100644 => 100755 rocq-mathcomp-analysis-stdlib.opam mode change 100644 => 100755 rocq-mathcomp-analysis.opam mode change 100644 => 100755 rocq-mathcomp-classical.opam mode change 100644 => 100755 rocq-mathcomp-experimental-reals.opam mode change 100644 => 100755 rocq-mathcomp-reals-stdlib.opam mode change 100644 => 100755 rocq-mathcomp-reals.opam mode change 100644 => 100755 theories/Make mode change 100644 => 100755 theories/Makefile mode change 100644 => 100755 theories/all_analysis.v mode change 100644 => 100755 theories/borel_hierarchy.v mode change 100644 => 100755 theories/cantor.v mode change 100644 => 100755 theories/charge.v mode change 100644 => 100755 theories/convex.v mode change 100644 => 100755 theories/derive.v mode change 100644 => 100755 theories/elementary_functions/trigonometry_functions.v mode change 100644 => 100755 theories/ereal.v mode change 100644 => 100755 theories/ess_sup_inf.v mode change 100644 => 100755 theories/esum.v mode change 100644 => 100755 theories/exp.v mode change 100644 => 100755 theories/ftc.v mode change 100644 => 100755 theories/functional_analysis/hahn_banach_theorem.v mode change 100644 => 100755 theories/gauss_integral.v mode change 100644 => 100755 theories/hoelder.v mode change 100644 => 100755 theories/homotopy_theory/continuous_path.v mode change 100644 => 100755 theories/homotopy_theory/homotopy.v mode change 100644 => 100755 theories/homotopy_theory/wedge_sigT.v mode change 100644 => 100755 theories/kernel.v mode change 100644 => 100755 theories/landau.v mode change 100644 => 100755 theories/lebesgue_integral_theory/bochner.v mode change 100644 => 100755 theories/lebesgue_integral_theory/giry.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_Rintegral.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_integrable.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_integral.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_integral_definition.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_integral_fubini.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v mode change 100644 => 100755 theories/lebesgue_integral_theory/lebesgue_integral_under.v mode change 100644 => 100755 theories/lebesgue_integral_theory/measurable_fun_approximation.v mode change 100644 => 100755 theories/lebesgue_integral_theory/radon_nikodym.v mode change 100644 => 100755 theories/lebesgue_integral_theory/simple_functions.v mode change 100644 => 100755 theories/measure_theory/counting_measure.v mode change 100644 => 100755 theories/measure_theory/dirac_measure.v mode change 100644 => 100755 theories/measure_theory/measurable_function.v mode change 100644 => 100755 theories/measure_theory/measurable_structure.v mode change 100644 => 100755 theories/measure_theory/measure.v mode change 100644 => 100755 theories/measure_theory/measure_extension.v mode change 100644 => 100755 theories/measure_theory/measure_function.v mode change 100644 => 100755 theories/measure_theory/measure_negligible.v mode change 100644 => 100755 theories/measure_theory/probability_measure.v mode change 100644 => 100755 theories/measure_theory/signed_measure.v mode change 100644 => 100755 theories/normedtype_theory/complete_normed_module.v mode change 100644 => 100755 theories/normedtype_theory/ereal_normedtype.v mode change 100644 => 100755 theories/normedtype_theory/matrix_normedtype.v mode change 100644 => 100755 theories/normedtype_theory/normed_module.v mode change 100644 => 100755 theories/normedtype_theory/normedtype.v mode change 100644 => 100755 theories/normedtype_theory/num_normedtype.v mode change 100644 => 100755 theories/normedtype_theory/pseudometric_normed_Zmodule.v mode change 100644 => 100755 theories/normedtype_theory/tvs.v mode change 100644 => 100755 theories/normedtype_theory/urysohn.v mode change 100644 => 100755 theories/normedtype_theory/vitali_lemma.v mode change 100644 => 100755 theories/numfun.v mode change 100644 => 100755 theories/pi_irrational.v mode change 100644 => 100755 theories/probability_theory/bernoulli_distribution.v mode change 100644 => 100755 theories/probability_theory/beta_distribution.v mode change 100644 => 100755 theories/probability_theory/binomial_distribution.v mode change 100644 => 100755 theories/probability_theory/exponential_distribution.v mode change 100644 => 100755 theories/probability_theory/independence.v mode change 100644 => 100755 theories/probability_theory/normal_distribution.v mode change 100644 => 100755 theories/probability_theory/poisson_distribution.v mode change 100644 => 100755 theories/probability_theory/probability.v mode change 100644 => 100755 theories/probability_theory/random_variable.v mode change 100644 => 100755 theories/probability_theory/uniform_distribution.v mode change 100644 => 100755 theories/real_measure/lebesgue_measure.v mode change 100644 => 100755 theories/real_measure/lebesgue_stieltjes_measure.v mode change 100644 => 100755 theories/real_measure/measurable_realfun.v mode change 100644 => 100755 theories/realfun.v mode change 100644 => 100755 theories/sequences.v mode change 100644 => 100755 theories/showcase/pnt.v mode change 100644 => 100755 theories/showcase/summability.v mode change 100644 => 100755 theories/topology_theory/bool_topology.v mode change 100644 => 100755 theories/topology_theory/compact.v mode change 100644 => 100755 theories/topology_theory/connected.v mode change 100644 => 100755 theories/topology_theory/discrete_topology.v mode change 100644 => 100755 theories/topology_theory/function_spaces.v mode change 100644 => 100755 theories/topology_theory/initial_topology.v mode change 100644 => 100755 theories/topology_theory/matrix_topology.v mode change 100644 => 100755 theories/topology_theory/metric_structure.v mode change 100644 => 100755 theories/topology_theory/nat_topology.v mode change 100644 => 100755 theories/topology_theory/num_topology.v mode change 100644 => 100755 theories/topology_theory/one_point_compactification.v mode change 100644 => 100755 theories/topology_theory/order_topology.v mode change 100644 => 100755 theories/topology_theory/product_topology.v mode change 100644 => 100755 theories/topology_theory/pseudometric_structure.v mode change 100644 => 100755 theories/topology_theory/quotient_topology.v mode change 100644 => 100755 theories/topology_theory/separation_axioms.v mode change 100644 => 100755 theories/topology_theory/sigT_topology.v mode change 100644 => 100755 theories/topology_theory/subspace_topology.v mode change 100644 => 100755 theories/topology_theory/subtype_topology.v mode change 100644 => 100755 theories/topology_theory/supremum_topology.v mode change 100644 => 100755 theories/topology_theory/topology.v mode change 100644 => 100755 theories/topology_theory/topology_structure.v mode change 100644 => 100755 theories/topology_theory/uniform_structure.v mode change 100644 => 100755 theories/topology_theory/weak_topology.v diff --git a/.dir-locals.el b/.dir-locals.el old mode 100644 new mode 100755 diff --git a/.gitattributes b/.gitattributes old mode 100644 new mode 100755 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md old mode 100644 new mode 100755 diff --git a/.github/workflows/deploy-docs-gh-pages.yml b/.github/workflows/deploy-docs-gh-pages.yml old mode 100644 new mode 100755 diff --git a/.github/workflows/generate_docs.yml b/.github/workflows/generate_docs.yml old mode 100644 new mode 100755 diff --git a/.github/workflows/nix-action-9.1.yml b/.github/workflows/nix-action-9.1.yml old mode 100644 new mode 100755 diff --git a/.github/workflows/nix-action-9.2.yml b/.github/workflows/nix-action-9.2.yml old mode 100644 new mode 100755 diff --git a/.github/workflows/nix-action-master.yml b/.github/workflows/nix-action-master.yml old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.nix/config.nix b/.nix/config.nix old mode 100644 new mode 100755 diff --git a/.nix/coq-nix-toolbox.nix b/.nix/coq-nix-toolbox.nix old mode 100644 new mode 100755 diff --git a/.nix/rocq-overlays/mathcomp-analysis-single/default.nix b/.nix/rocq-overlays/mathcomp-analysis-single/default.nix old mode 100644 new mode 100755 diff --git a/AUTHORS.md b/AUTHORS.md old mode 100644 new mode 100755 diff --git a/CHANGELOG.md b/CHANGELOG.md old mode 100644 new mode 100755 diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md old mode 100644 new mode 100755 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md old mode 100644 new mode 100755 diff --git a/INSTALL.md b/INSTALL.md old mode 100644 new mode 100755 diff --git a/LICENCE b/LICENCE old mode 100644 new mode 100755 diff --git a/MANIFEST b/MANIFEST old mode 100644 new mode 100755 diff --git a/Makefile b/Makefile old mode 100644 new mode 100755 diff --git a/Makefile.common b/Makefile.common old mode 100644 new mode 100755 diff --git a/ORIGINAL_FILES.md b/ORIGINAL_FILES.md old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/_CoqProject b/_CoqProject old mode 100644 new mode 100755 diff --git a/analysis_stdlib/Make b/analysis_stdlib/Make old mode 100644 new mode 100755 diff --git a/analysis_stdlib/Makefile b/analysis_stdlib/Makefile old mode 100644 new mode 100755 diff --git a/analysis_stdlib/Rstruct_topology.v b/analysis_stdlib/Rstruct_topology.v old mode 100644 new mode 100755 diff --git a/analysis_stdlib/showcase/uniform_bigO.v b/analysis_stdlib/showcase/uniform_bigO.v old mode 100644 new mode 100755 diff --git a/classical/Make b/classical/Make old mode 100644 new mode 100755 diff --git a/classical/Makefile b/classical/Makefile old mode 100644 new mode 100755 diff --git a/classical/all_classical.v b/classical/all_classical.v old mode 100644 new mode 100755 diff --git a/classical/boolp.v b/classical/boolp.v old mode 100644 new mode 100755 diff --git a/classical/cardinality.v b/classical/cardinality.v old mode 100644 new mode 100755 diff --git a/classical/classical_orders.v b/classical/classical_orders.v old mode 100644 new mode 100755 diff --git a/classical/classical_sets.v b/classical/classical_sets.v old mode 100644 new mode 100755 diff --git a/classical/contra.v b/classical/contra.v old mode 100644 new mode 100755 diff --git a/classical/filter.v b/classical/filter.v old mode 100644 new mode 100755 diff --git a/classical/fsbigop.v b/classical/fsbigop.v old mode 100644 new mode 100755 diff --git a/classical/functions.v b/classical/functions.v old mode 100644 new mode 100755 diff --git a/classical/internal_Eqdep_dec.v b/classical/internal_Eqdep_dec.v old mode 100644 new mode 100755 diff --git a/classical/mathcomp_extra.v b/classical/mathcomp_extra.v old mode 100644 new mode 100755 diff --git a/classical/set_interval.v b/classical/set_interval.v old mode 100644 new mode 100755 diff --git a/classical/unstable.v b/classical/unstable.v old mode 100644 new mode 100755 diff --git a/classical/wochoice.v b/classical/wochoice.v old mode 100644 new mode 100755 diff --git a/coq-mathcomp-analysis-stdlib.opam b/coq-mathcomp-analysis-stdlib.opam old mode 100644 new mode 100755 diff --git a/coq-mathcomp-analysis.opam b/coq-mathcomp-analysis.opam old mode 100644 new mode 100755 diff --git a/coq-mathcomp-classical.opam b/coq-mathcomp-classical.opam old mode 100644 new mode 100755 diff --git a/coq-mathcomp-experimental-reals.opam b/coq-mathcomp-experimental-reals.opam old mode 100644 new mode 100755 diff --git a/coq-mathcomp-reals-stdlib.opam b/coq-mathcomp-reals-stdlib.opam old mode 100644 new mode 100755 diff --git a/coq-mathcomp-reals.opam b/coq-mathcomp-reals.opam old mode 100644 new mode 100755 diff --git a/default.nix b/default.nix old mode 100644 new mode 100755 diff --git a/etc/builddoc_dependency_dot.pl b/etc/builddoc_dependency_dot.pl old mode 100644 new mode 100755 diff --git a/etc/pr193.sed b/etc/pr193.sed old mode 100644 new mode 100755 diff --git a/etc/rocqnavi_index-blacklist b/etc/rocqnavi_index-blacklist old mode 100644 new mode 100755 diff --git a/experimental_reals/LICENSE b/experimental_reals/LICENSE old mode 100644 new mode 100755 diff --git a/experimental_reals/Make b/experimental_reals/Make old mode 100644 new mode 100755 diff --git a/experimental_reals/Makefile b/experimental_reals/Makefile old mode 100644 new mode 100755 diff --git a/experimental_reals/dedekind.v b/experimental_reals/dedekind.v old mode 100644 new mode 100755 diff --git a/experimental_reals/discrete.v b/experimental_reals/discrete.v old mode 100644 new mode 100755 diff --git a/experimental_reals/distr.v b/experimental_reals/distr.v old mode 100644 new mode 100755 diff --git a/experimental_reals/realseq.v b/experimental_reals/realseq.v old mode 100644 new mode 100755 diff --git a/experimental_reals/realsum.v b/experimental_reals/realsum.v old mode 100644 new mode 100755 diff --git a/experimental_reals/xfinmap.v b/experimental_reals/xfinmap.v old mode 100644 new mode 100755 diff --git a/reals/Make b/reals/Make old mode 100644 new mode 100755 diff --git a/reals/Makefile b/reals/Makefile old mode 100644 new mode 100755 diff --git a/reals/all_reals.v b/reals/all_reals.v old mode 100644 new mode 100755 diff --git a/reals/constructive_ereal.v b/reals/constructive_ereal.v old mode 100644 new mode 100755 diff --git a/reals/prodnormedzmodule.v b/reals/prodnormedzmodule.v old mode 100644 new mode 100755 diff --git a/reals/real_interval.v b/reals/real_interval.v old mode 100644 new mode 100755 diff --git a/reals/reals.v b/reals/reals.v old mode 100644 new mode 100755 diff --git a/reals_stdlib/Make b/reals_stdlib/Make old mode 100644 new mode 100755 diff --git a/reals_stdlib/Makefile b/reals_stdlib/Makefile old mode 100644 new mode 100755 diff --git a/reals_stdlib/Rstruct.v b/reals_stdlib/Rstruct.v old mode 100644 new mode 100755 diff --git a/reals_stdlib/nsatz_realtype.v b/reals_stdlib/nsatz_realtype.v old mode 100644 new mode 100755 diff --git a/rocq-mathcomp-analysis-stdlib.opam b/rocq-mathcomp-analysis-stdlib.opam old mode 100644 new mode 100755 diff --git a/rocq-mathcomp-analysis.opam b/rocq-mathcomp-analysis.opam old mode 100644 new mode 100755 diff --git a/rocq-mathcomp-classical.opam b/rocq-mathcomp-classical.opam old mode 100644 new mode 100755 diff --git a/rocq-mathcomp-experimental-reals.opam b/rocq-mathcomp-experimental-reals.opam old mode 100644 new mode 100755 diff --git a/rocq-mathcomp-reals-stdlib.opam b/rocq-mathcomp-reals-stdlib.opam old mode 100644 new mode 100755 diff --git a/rocq-mathcomp-reals.opam b/rocq-mathcomp-reals.opam old mode 100644 new mode 100755 diff --git a/theories/Make b/theories/Make old mode 100644 new mode 100755 diff --git a/theories/Makefile b/theories/Makefile old mode 100644 new mode 100755 diff --git a/theories/all_analysis.v b/theories/all_analysis.v old mode 100644 new mode 100755 diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v old mode 100644 new mode 100755 diff --git a/theories/cantor.v b/theories/cantor.v old mode 100644 new mode 100755 diff --git a/theories/charge.v b/theories/charge.v old mode 100644 new mode 100755 diff --git a/theories/convex.v b/theories/convex.v old mode 100644 new mode 100755 diff --git a/theories/derive.v b/theories/derive.v old mode 100644 new mode 100755 diff --git a/theories/elementary_functions/trigonometry_functions.v b/theories/elementary_functions/trigonometry_functions.v old mode 100644 new mode 100755 diff --git a/theories/ereal.v b/theories/ereal.v old mode 100644 new mode 100755 diff --git a/theories/ess_sup_inf.v b/theories/ess_sup_inf.v old mode 100644 new mode 100755 diff --git a/theories/esum.v b/theories/esum.v old mode 100644 new mode 100755 diff --git a/theories/exp.v b/theories/exp.v old mode 100644 new mode 100755 diff --git a/theories/ftc.v b/theories/ftc.v old mode 100644 new mode 100755 diff --git a/theories/functional_analysis/hahn_banach_theorem.v b/theories/functional_analysis/hahn_banach_theorem.v old mode 100644 new mode 100755 diff --git a/theories/gauss_integral.v b/theories/gauss_integral.v old mode 100644 new mode 100755 diff --git a/theories/hoelder.v b/theories/hoelder.v old mode 100644 new mode 100755 diff --git a/theories/homotopy_theory/continuous_path.v b/theories/homotopy_theory/continuous_path.v old mode 100644 new mode 100755 diff --git a/theories/homotopy_theory/homotopy.v b/theories/homotopy_theory/homotopy.v old mode 100644 new mode 100755 diff --git a/theories/homotopy_theory/wedge_sigT.v b/theories/homotopy_theory/wedge_sigT.v old mode 100644 new mode 100755 diff --git a/theories/kernel.v b/theories/kernel.v old mode 100644 new mode 100755 diff --git a/theories/landau.v b/theories/landau.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/bochner.v b/theories/lebesgue_integral_theory/bochner.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/giry.v b/theories/lebesgue_integral_theory/giry.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_Rintegral.v b/theories/lebesgue_integral_theory/lebesgue_Rintegral.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_integrable.v b/theories/lebesgue_integral_theory/lebesgue_integrable.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral.v b/theories/lebesgue_integral_theory/lebesgue_integral.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_fubini.v b/theories/lebesgue_integral_theory/lebesgue_integral_fubini.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_under.v b/theories/lebesgue_integral_theory/lebesgue_integral_under.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/measurable_fun_approximation.v b/theories/lebesgue_integral_theory/measurable_fun_approximation.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/radon_nikodym.v b/theories/lebesgue_integral_theory/radon_nikodym.v old mode 100644 new mode 100755 diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/counting_measure.v b/theories/measure_theory/counting_measure.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/dirac_measure.v b/theories/measure_theory/dirac_measure.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/measurable_function.v b/theories/measure_theory/measurable_function.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/measurable_structure.v b/theories/measure_theory/measurable_structure.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/measure.v b/theories/measure_theory/measure.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/measure_extension.v b/theories/measure_theory/measure_extension.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/measure_function.v b/theories/measure_theory/measure_function.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/measure_negligible.v b/theories/measure_theory/measure_negligible.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/probability_measure.v b/theories/measure_theory/probability_measure.v old mode 100644 new mode 100755 diff --git a/theories/measure_theory/signed_measure.v b/theories/measure_theory/signed_measure.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/complete_normed_module.v b/theories/normedtype_theory/complete_normed_module.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/ereal_normedtype.v b/theories/normedtype_theory/ereal_normedtype.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/matrix_normedtype.v b/theories/normedtype_theory/matrix_normedtype.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/normed_module.v b/theories/normedtype_theory/normed_module.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/normedtype.v b/theories/normedtype_theory/normedtype.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/num_normedtype.v b/theories/normedtype_theory/num_normedtype.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/pseudometric_normed_Zmodule.v b/theories/normedtype_theory/pseudometric_normed_Zmodule.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/tvs.v b/theories/normedtype_theory/tvs.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/urysohn.v b/theories/normedtype_theory/urysohn.v old mode 100644 new mode 100755 diff --git a/theories/normedtype_theory/vitali_lemma.v b/theories/normedtype_theory/vitali_lemma.v old mode 100644 new mode 100755 diff --git a/theories/numfun.v b/theories/numfun.v old mode 100644 new mode 100755 diff --git a/theories/pi_irrational.v b/theories/pi_irrational.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/bernoulli_distribution.v b/theories/probability_theory/bernoulli_distribution.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/beta_distribution.v b/theories/probability_theory/beta_distribution.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/binomial_distribution.v b/theories/probability_theory/binomial_distribution.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/exponential_distribution.v b/theories/probability_theory/exponential_distribution.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/independence.v b/theories/probability_theory/independence.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/normal_distribution.v b/theories/probability_theory/normal_distribution.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/poisson_distribution.v b/theories/probability_theory/poisson_distribution.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/probability.v b/theories/probability_theory/probability.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/random_variable.v b/theories/probability_theory/random_variable.v old mode 100644 new mode 100755 diff --git a/theories/probability_theory/uniform_distribution.v b/theories/probability_theory/uniform_distribution.v old mode 100644 new mode 100755 diff --git a/theories/real_measure/lebesgue_measure.v b/theories/real_measure/lebesgue_measure.v old mode 100644 new mode 100755 diff --git a/theories/real_measure/lebesgue_stieltjes_measure.v b/theories/real_measure/lebesgue_stieltjes_measure.v old mode 100644 new mode 100755 diff --git a/theories/real_measure/measurable_realfun.v b/theories/real_measure/measurable_realfun.v old mode 100644 new mode 100755 diff --git a/theories/realfun.v b/theories/realfun.v old mode 100644 new mode 100755 diff --git a/theories/sequences.v b/theories/sequences.v old mode 100644 new mode 100755 diff --git a/theories/showcase/pnt.v b/theories/showcase/pnt.v old mode 100644 new mode 100755 diff --git a/theories/showcase/summability.v b/theories/showcase/summability.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/bool_topology.v b/theories/topology_theory/bool_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/compact.v b/theories/topology_theory/compact.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/connected.v b/theories/topology_theory/connected.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/discrete_topology.v b/theories/topology_theory/discrete_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/function_spaces.v b/theories/topology_theory/function_spaces.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/initial_topology.v b/theories/topology_theory/initial_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/matrix_topology.v b/theories/topology_theory/matrix_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/metric_structure.v b/theories/topology_theory/metric_structure.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/nat_topology.v b/theories/topology_theory/nat_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/num_topology.v b/theories/topology_theory/num_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/one_point_compactification.v b/theories/topology_theory/one_point_compactification.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/order_topology.v b/theories/topology_theory/order_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/product_topology.v b/theories/topology_theory/product_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/pseudometric_structure.v b/theories/topology_theory/pseudometric_structure.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/quotient_topology.v b/theories/topology_theory/quotient_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/separation_axioms.v b/theories/topology_theory/separation_axioms.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/sigT_topology.v b/theories/topology_theory/sigT_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/subspace_topology.v b/theories/topology_theory/subspace_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/subtype_topology.v b/theories/topology_theory/subtype_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/supremum_topology.v b/theories/topology_theory/supremum_topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/topology.v b/theories/topology_theory/topology.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/topology_structure.v b/theories/topology_theory/topology_structure.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/uniform_structure.v b/theories/topology_theory/uniform_structure.v old mode 100644 new mode 100755 diff --git a/theories/topology_theory/weak_topology.v b/theories/topology_theory/weak_topology.v old mode 100644 new mode 100755 From 39d145577b246a2fde68208c55481cd99f6dd7a6 Mon Sep 17 00:00:00 2001 From: Reynald Affeldt Date: Fri, 13 Nov 2026 10:08:28 +0900 Subject: [PATCH 38/38] file mode --- .dir-locals.el | 0 .gitattributes | 0 .github/pull_request_template.md | 0 .github/workflows/deploy-docs-gh-pages.yml | 0 .github/workflows/generate_docs.yml | 0 .github/workflows/nix-action-9.1.yml | 0 .github/workflows/nix-action-9.2.yml | 0 .github/workflows/nix-action-master.yml | 0 .gitignore | 0 .nix/config.nix | 0 .nix/coq-nix-toolbox.nix | 0 .../mathcomp-analysis-single/default.nix | 0 AUTHORS.md | 0 CHANGELOG.md | 0 CHANGELOG_UNRELEASED.md | 552 +----------------- CONTRIBUTING.md | 0 INSTALL.md | 0 LICENCE | 0 MANIFEST | 0 Makefile | 0 Makefile.common | 0 ORIGINAL_FILES.md | 0 README.md | 0 _CoqProject | 2 - analysis_stdlib/Make | 0 analysis_stdlib/Makefile | 0 analysis_stdlib/Rstruct_topology.v | 0 analysis_stdlib/showcase/uniform_bigO.v | 0 classical/Make | 0 classical/Makefile | 0 classical/all_classical.v | 0 classical/boolp.v | 0 classical/cardinality.v | 0 classical/classical_orders.v | 0 classical/classical_sets.v | 0 classical/contra.v | 0 classical/filter.v | 0 classical/fsbigop.v | 0 classical/functions.v | 0 classical/internal_Eqdep_dec.v | 0 classical/mathcomp_extra.v | 0 classical/set_interval.v | 0 classical/unstable.v | 0 classical/wochoice.v | 0 coq-mathcomp-analysis-stdlib.opam | 0 coq-mathcomp-analysis.opam | 0 coq-mathcomp-classical.opam | 0 coq-mathcomp-experimental-reals.opam | 0 coq-mathcomp-reals-stdlib.opam | 0 coq-mathcomp-reals.opam | 0 default.nix | 0 etc/builddoc_dependency_dot.pl | 0 etc/pr193.sed | 0 etc/rocqnavi_index-blacklist | 0 experimental_reals/LICENSE | 0 experimental_reals/Make | 0 experimental_reals/Makefile | 0 experimental_reals/dedekind.v | 0 experimental_reals/discrete.v | 0 experimental_reals/distr.v | 0 experimental_reals/realseq.v | 0 experimental_reals/realsum.v | 0 experimental_reals/xfinmap.v | 0 reals/Make | 0 reals/Makefile | 0 reals/all_reals.v | 0 reals/constructive_ereal.v | 0 reals/prodnormedzmodule.v | 0 reals/real_interval.v | 0 reals/reals.v | 0 reals_stdlib/Make | 0 reals_stdlib/Makefile | 0 reals_stdlib/Rstruct.v | 0 reals_stdlib/nsatz_realtype.v | 0 rocq-mathcomp-analysis-stdlib.opam | 0 rocq-mathcomp-analysis.opam | 0 rocq-mathcomp-classical.opam | 0 rocq-mathcomp-experimental-reals.opam | 0 rocq-mathcomp-reals-stdlib.opam | 0 rocq-mathcomp-reals.opam | 0 theories/Make | 1 - theories/Makefile | 0 theories/all_analysis.v | 0 theories/borel_hierarchy.v | 1 - theories/cantor.v | 0 theories/charge.v | 0 theories/convex.v | 0 theories/derive.v | 0 .../trigonometry_functions.v | 0 theories/ereal.v | 0 theories/ess_sup_inf.v | 0 theories/esum.v | 0 theories/exp.v | 0 theories/ftc.v | 0 .../functional_analysis/hahn_banach_theorem.v | 0 theories/gauss_integral.v | 0 theories/hoelder.v | 2 +- theories/homotopy_theory/continuous_path.v | 0 theories/homotopy_theory/homotopy.v | 0 theories/homotopy_theory/wedge_sigT.v | 0 theories/kernel.v | 2 - theories/landau.v | 0 theories/lebesgue_integral_theory/giry.v | 0 .../lebesgue_Rintegral.v | 0 .../lebesgue_integrable.v | 0 .../lebesgue_integral.v | 0 .../lebesgue_integral_definition.v | 1 - .../lebesgue_integral_differentiation.v | 6 +- .../lebesgue_integral_dominated_convergence.v | 1 - .../lebesgue_integral_fubini.v | 0 .../lebesgue_integral_monotone_convergence.v | 1 + .../lebesgue_integral_nonneg.v | 8 +- .../lebesgue_integral_under.v | 0 .../measurable_fun_approximation.v | 9 +- .../lebesgue_integral_theory/radon_nikodym.v | 0 .../simple_functions.v | 212 ++----- theories/measure_theory/counting_measure.v | 0 theories/measure_theory/dirac_measure.v | 0 theories/measure_theory/measurable_function.v | 0 .../measure_theory/measurable_structure.v | 0 theories/measure_theory/measure.v | 0 theories/measure_theory/measure_extension.v | 0 theories/measure_theory/measure_function.v | 0 theories/measure_theory/measure_negligible.v | 0 theories/measure_theory/probability_measure.v | 0 theories/measure_theory/signed_measure.v | 0 .../complete_normed_module.v | 0 theories/normedtype_theory/ereal_normedtype.v | 0 .../normedtype_theory/matrix_normedtype.v | 0 theories/normedtype_theory/normed_module.v | 0 theories/normedtype_theory/normedtype.v | 0 theories/normedtype_theory/num_normedtype.v | 0 .../pseudometric_normed_Zmodule.v | 0 theories/normedtype_theory/tvs.v | 0 theories/normedtype_theory/urysohn.v | 0 theories/normedtype_theory/vitali_lemma.v | 0 theories/numfun.v | 0 theories/pi_irrational.v | 0 .../bernoulli_distribution.v | 0 .../probability_theory/beta_distribution.v | 0 .../binomial_distribution.v | 0 .../exponential_distribution.v | 0 theories/probability_theory/independence.v | 0 .../probability_theory/normal_distribution.v | 1 + .../probability_theory/poisson_distribution.v | 0 theories/probability_theory/probability.v | 0 theories/probability_theory/random_variable.v | 8 +- .../probability_theory/uniform_distribution.v | 0 theories/real_measure/lebesgue_measure.v | 17 +- .../real_measure/lebesgue_stieltjes_measure.v | 175 ++++-- theories/real_measure/measurable_realfun.v | 202 +------ theories/realfun.v | 0 theories/sequences.v | 0 theories/showcase/pnt.v | 0 theories/showcase/summability.v | 0 theories/topology_theory/bool_topology.v | 0 theories/topology_theory/compact.v | 0 theories/topology_theory/connected.v | 0 theories/topology_theory/discrete_topology.v | 0 theories/topology_theory/function_spaces.v | 0 theories/topology_theory/initial_topology.v | 0 theories/topology_theory/matrix_topology.v | 0 theories/topology_theory/metric_structure.v | 14 - theories/topology_theory/nat_topology.v | 0 theories/topology_theory/num_topology.v | 0 .../one_point_compactification.v | 0 theories/topology_theory/order_topology.v | 0 theories/topology_theory/product_topology.v | 0 .../topology_theory/pseudometric_structure.v | 0 theories/topology_theory/quotient_topology.v | 0 theories/topology_theory/separation_axioms.v | 0 theories/topology_theory/sigT_topology.v | 0 theories/topology_theory/subspace_topology.v | 0 theories/topology_theory/subtype_topology.v | 0 theories/topology_theory/supremum_topology.v | 0 theories/topology_theory/topology.v | 0 theories/topology_theory/topology_structure.v | 0 theories/topology_theory/uniform_structure.v | 0 theories/topology_theory/weak_topology.v | 0 179 files changed, 217 insertions(+), 998 deletions(-) mode change 100755 => 100644 .dir-locals.el mode change 100755 => 100644 .gitattributes mode change 100755 => 100644 .github/pull_request_template.md mode change 100755 => 100644 .github/workflows/deploy-docs-gh-pages.yml mode change 100755 => 100644 .github/workflows/generate_docs.yml mode change 100755 => 100644 .github/workflows/nix-action-9.1.yml mode change 100755 => 100644 .github/workflows/nix-action-9.2.yml mode change 100755 => 100644 .github/workflows/nix-action-master.yml mode change 100755 => 100644 .gitignore mode change 100755 => 100644 .nix/config.nix mode change 100755 => 100644 .nix/coq-nix-toolbox.nix mode change 100755 => 100644 .nix/rocq-overlays/mathcomp-analysis-single/default.nix mode change 100755 => 100644 AUTHORS.md mode change 100755 => 100644 CHANGELOG.md mode change 100755 => 100644 CHANGELOG_UNRELEASED.md mode change 100755 => 100644 CONTRIBUTING.md mode change 100755 => 100644 INSTALL.md mode change 100755 => 100644 LICENCE mode change 100755 => 100644 MANIFEST mode change 100755 => 100644 Makefile mode change 100755 => 100644 Makefile.common mode change 100755 => 100644 ORIGINAL_FILES.md mode change 100755 => 100644 README.md mode change 100755 => 100644 _CoqProject mode change 100755 => 100644 analysis_stdlib/Make mode change 100755 => 100644 analysis_stdlib/Makefile mode change 100755 => 100644 analysis_stdlib/Rstruct_topology.v mode change 100755 => 100644 analysis_stdlib/showcase/uniform_bigO.v mode change 100755 => 100644 classical/Make mode change 100755 => 100644 classical/Makefile mode change 100755 => 100644 classical/all_classical.v mode change 100755 => 100644 classical/boolp.v mode change 100755 => 100644 classical/cardinality.v mode change 100755 => 100644 classical/classical_orders.v mode change 100755 => 100644 classical/classical_sets.v mode change 100755 => 100644 classical/contra.v mode change 100755 => 100644 classical/filter.v mode change 100755 => 100644 classical/fsbigop.v mode change 100755 => 100644 classical/functions.v mode change 100755 => 100644 classical/internal_Eqdep_dec.v mode change 100755 => 100644 classical/mathcomp_extra.v mode change 100755 => 100644 classical/set_interval.v mode change 100755 => 100644 classical/unstable.v mode change 100755 => 100644 classical/wochoice.v mode change 100755 => 100644 coq-mathcomp-analysis-stdlib.opam mode change 100755 => 100644 coq-mathcomp-analysis.opam mode change 100755 => 100644 coq-mathcomp-classical.opam mode change 100755 => 100644 coq-mathcomp-experimental-reals.opam mode change 100755 => 100644 coq-mathcomp-reals-stdlib.opam mode change 100755 => 100644 coq-mathcomp-reals.opam mode change 100755 => 100644 default.nix mode change 100755 => 100644 etc/builddoc_dependency_dot.pl mode change 100755 => 100644 etc/pr193.sed mode change 100755 => 100644 etc/rocqnavi_index-blacklist mode change 100755 => 100644 experimental_reals/LICENSE mode change 100755 => 100644 experimental_reals/Make mode change 100755 => 100644 experimental_reals/Makefile mode change 100755 => 100644 experimental_reals/dedekind.v mode change 100755 => 100644 experimental_reals/discrete.v mode change 100755 => 100644 experimental_reals/distr.v mode change 100755 => 100644 experimental_reals/realseq.v mode change 100755 => 100644 experimental_reals/realsum.v mode change 100755 => 100644 experimental_reals/xfinmap.v mode change 100755 => 100644 reals/Make mode change 100755 => 100644 reals/Makefile mode change 100755 => 100644 reals/all_reals.v mode change 100755 => 100644 reals/constructive_ereal.v mode change 100755 => 100644 reals/prodnormedzmodule.v mode change 100755 => 100644 reals/real_interval.v mode change 100755 => 100644 reals/reals.v mode change 100755 => 100644 reals_stdlib/Make mode change 100755 => 100644 reals_stdlib/Makefile mode change 100755 => 100644 reals_stdlib/Rstruct.v mode change 100755 => 100644 reals_stdlib/nsatz_realtype.v mode change 100755 => 100644 rocq-mathcomp-analysis-stdlib.opam mode change 100755 => 100644 rocq-mathcomp-analysis.opam mode change 100755 => 100644 rocq-mathcomp-classical.opam mode change 100755 => 100644 rocq-mathcomp-experimental-reals.opam mode change 100755 => 100644 rocq-mathcomp-reals-stdlib.opam mode change 100755 => 100644 rocq-mathcomp-reals.opam mode change 100755 => 100644 theories/Make mode change 100755 => 100644 theories/Makefile mode change 100755 => 100644 theories/all_analysis.v mode change 100755 => 100644 theories/borel_hierarchy.v mode change 100755 => 100644 theories/cantor.v mode change 100755 => 100644 theories/charge.v mode change 100755 => 100644 theories/convex.v mode change 100755 => 100644 theories/derive.v mode change 100755 => 100644 theories/elementary_functions/trigonometry_functions.v mode change 100755 => 100644 theories/ereal.v mode change 100755 => 100644 theories/ess_sup_inf.v mode change 100755 => 100644 theories/esum.v mode change 100755 => 100644 theories/exp.v mode change 100755 => 100644 theories/ftc.v mode change 100755 => 100644 theories/functional_analysis/hahn_banach_theorem.v mode change 100755 => 100644 theories/gauss_integral.v mode change 100755 => 100644 theories/hoelder.v mode change 100755 => 100644 theories/homotopy_theory/continuous_path.v mode change 100755 => 100644 theories/homotopy_theory/homotopy.v mode change 100755 => 100644 theories/homotopy_theory/wedge_sigT.v mode change 100755 => 100644 theories/kernel.v mode change 100755 => 100644 theories/landau.v mode change 100755 => 100644 theories/lebesgue_integral_theory/giry.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_Rintegral.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_integrable.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_integral.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_integral_definition.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_integral_fubini.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v mode change 100755 => 100644 theories/lebesgue_integral_theory/lebesgue_integral_under.v mode change 100755 => 100644 theories/lebesgue_integral_theory/measurable_fun_approximation.v mode change 100755 => 100644 theories/lebesgue_integral_theory/radon_nikodym.v mode change 100755 => 100644 theories/lebesgue_integral_theory/simple_functions.v mode change 100755 => 100644 theories/measure_theory/counting_measure.v mode change 100755 => 100644 theories/measure_theory/dirac_measure.v mode change 100755 => 100644 theories/measure_theory/measurable_function.v mode change 100755 => 100644 theories/measure_theory/measurable_structure.v mode change 100755 => 100644 theories/measure_theory/measure.v mode change 100755 => 100644 theories/measure_theory/measure_extension.v mode change 100755 => 100644 theories/measure_theory/measure_function.v mode change 100755 => 100644 theories/measure_theory/measure_negligible.v mode change 100755 => 100644 theories/measure_theory/probability_measure.v mode change 100755 => 100644 theories/measure_theory/signed_measure.v mode change 100755 => 100644 theories/normedtype_theory/complete_normed_module.v mode change 100755 => 100644 theories/normedtype_theory/ereal_normedtype.v mode change 100755 => 100644 theories/normedtype_theory/matrix_normedtype.v mode change 100755 => 100644 theories/normedtype_theory/normed_module.v mode change 100755 => 100644 theories/normedtype_theory/normedtype.v mode change 100755 => 100644 theories/normedtype_theory/num_normedtype.v mode change 100755 => 100644 theories/normedtype_theory/pseudometric_normed_Zmodule.v mode change 100755 => 100644 theories/normedtype_theory/tvs.v mode change 100755 => 100644 theories/normedtype_theory/urysohn.v mode change 100755 => 100644 theories/normedtype_theory/vitali_lemma.v mode change 100755 => 100644 theories/numfun.v mode change 100755 => 100644 theories/pi_irrational.v mode change 100755 => 100644 theories/probability_theory/bernoulli_distribution.v mode change 100755 => 100644 theories/probability_theory/beta_distribution.v mode change 100755 => 100644 theories/probability_theory/binomial_distribution.v mode change 100755 => 100644 theories/probability_theory/exponential_distribution.v mode change 100755 => 100644 theories/probability_theory/independence.v mode change 100755 => 100644 theories/probability_theory/normal_distribution.v mode change 100755 => 100644 theories/probability_theory/poisson_distribution.v mode change 100755 => 100644 theories/probability_theory/probability.v mode change 100755 => 100644 theories/probability_theory/random_variable.v mode change 100755 => 100644 theories/probability_theory/uniform_distribution.v mode change 100755 => 100644 theories/real_measure/lebesgue_measure.v mode change 100755 => 100644 theories/real_measure/lebesgue_stieltjes_measure.v mode change 100755 => 100644 theories/real_measure/measurable_realfun.v mode change 100755 => 100644 theories/realfun.v mode change 100755 => 100644 theories/sequences.v mode change 100755 => 100644 theories/showcase/pnt.v mode change 100755 => 100644 theories/showcase/summability.v mode change 100755 => 100644 theories/topology_theory/bool_topology.v mode change 100755 => 100644 theories/topology_theory/compact.v mode change 100755 => 100644 theories/topology_theory/connected.v mode change 100755 => 100644 theories/topology_theory/discrete_topology.v mode change 100755 => 100644 theories/topology_theory/function_spaces.v mode change 100755 => 100644 theories/topology_theory/initial_topology.v mode change 100755 => 100644 theories/topology_theory/matrix_topology.v mode change 100755 => 100644 theories/topology_theory/metric_structure.v mode change 100755 => 100644 theories/topology_theory/nat_topology.v mode change 100755 => 100644 theories/topology_theory/num_topology.v mode change 100755 => 100644 theories/topology_theory/one_point_compactification.v mode change 100755 => 100644 theories/topology_theory/order_topology.v mode change 100755 => 100644 theories/topology_theory/product_topology.v mode change 100755 => 100644 theories/topology_theory/pseudometric_structure.v mode change 100755 => 100644 theories/topology_theory/quotient_topology.v mode change 100755 => 100644 theories/topology_theory/separation_axioms.v mode change 100755 => 100644 theories/topology_theory/sigT_topology.v mode change 100755 => 100644 theories/topology_theory/subspace_topology.v mode change 100755 => 100644 theories/topology_theory/subtype_topology.v mode change 100755 => 100644 theories/topology_theory/supremum_topology.v mode change 100755 => 100644 theories/topology_theory/topology.v mode change 100755 => 100644 theories/topology_theory/topology_structure.v mode change 100755 => 100644 theories/topology_theory/uniform_structure.v mode change 100755 => 100644 theories/topology_theory/weak_topology.v diff --git a/.dir-locals.el b/.dir-locals.el old mode 100755 new mode 100644 diff --git a/.gitattributes b/.gitattributes old mode 100755 new mode 100644 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md old mode 100755 new mode 100644 diff --git a/.github/workflows/deploy-docs-gh-pages.yml b/.github/workflows/deploy-docs-gh-pages.yml old mode 100755 new mode 100644 diff --git a/.github/workflows/generate_docs.yml b/.github/workflows/generate_docs.yml old mode 100755 new mode 100644 diff --git a/.github/workflows/nix-action-9.1.yml b/.github/workflows/nix-action-9.1.yml old mode 100755 new mode 100644 diff --git a/.github/workflows/nix-action-9.2.yml b/.github/workflows/nix-action-9.2.yml old mode 100755 new mode 100644 diff --git a/.github/workflows/nix-action-master.yml b/.github/workflows/nix-action-master.yml old mode 100755 new mode 100644 diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 diff --git a/.nix/config.nix b/.nix/config.nix old mode 100755 new mode 100644 diff --git a/.nix/coq-nix-toolbox.nix b/.nix/coq-nix-toolbox.nix old mode 100755 new mode 100644 diff --git a/.nix/rocq-overlays/mathcomp-analysis-single/default.nix b/.nix/rocq-overlays/mathcomp-analysis-single/default.nix old mode 100755 new mode 100644 diff --git a/AUTHORS.md b/AUTHORS.md old mode 100755 new mode 100644 diff --git a/CHANGELOG.md b/CHANGELOG.md old mode 100755 new mode 100644 diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md old mode 100755 new mode 100644 index 21d0ccc312..d7f0405803 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -10,567 +10,35 @@ `pownMexpr_cvgn0` + instance `is_derive1_powRl` -- in `function_spaces.v`: - + lemma `within_continuous_big` - -- in `nat_topology.v`: - + lemma `near_infty_after` - -- in `num_topology.v`: - + lemmas `at_rightD`, `at_leftD`, `near_at_rightD`, `near_at_leftD`, - `at_left_shift`, `at_right_shift` -- in `borel_hierarchy.v`: - + definition `borel_type` - + lemmas `singleton_bigcap`, `measurable1` - -- in `simple_functions.v`: - + lemmas `mem_sfun_comp_pair`, `sfun_submod_closed` - + `{sfun aT >-> V}` is an `lmodType` when `V` is a `normedModType` - + definitions `indic_lmod` `mindic_lmod` `mindic_lmod_sfun` - + lemmas `indic_lmodE` `preimage_indic_mod` `measurable_indic_lmod` - + lemmas `sfun_op`, `sfun_submod_closed` - + `{sfun aT >-> borel_type V}` is an `lmodType` when `V` is a `normedModType` - -- in `set_interval.v`: - + lemmas `setU_itvob1`, `setU_1itvob` +### Changed +- in `lebesgue_integral_nonneg.v`, generalized and deprecated: + + lemma `ge0_integralZl_EFin` (no condition on `k`) +- in file `function_spaces.v`, + + new lemma `within_continuous_big`. +- in file `nat_topology.v`, + + new lemma `near_infty_after`. +- in file `num_topology.v`, + + new lemmas `at_rightD`, `at_leftD`, `near_at_rightD`, `near_at_leftD`, + `at_left_shift`, and `at_right_shift`. - in `realfun.v`: + lemmas `derivable_oo_LRcontinuousZ`, `derivable_oo_LRcontinuousD`, `derivable_oo_LRcontinuousN`, `derivable_oo_LRcontinuous_shift`, `derivable_oo_LRcontinuousS` -- in `metric_structure.v`: - + lemma `set1_bigcap_ball` - -- file `normedtype_measurable.v` - + definition `borel_type` - + definition `borel_display` - + module `MeasurableNormedModuleOpen` - * lemma `measurable_set1` - * lemma `measurable_ball_norm` - * lemma ` measurable_funP1` - + lemma `derivable_sqrt` -- in `classical_sets.v`: - + definition `rectangle` - + lemmas `rectangle_setX`, `setI_closed_rectangle` - + definitions `cross`, `cross12` - + lemmas `smallest_sub_sub`, `bigcap_closed_smallest`, `smallest_sub_iff` - + lemma `preimage_set_systemS` - + lemma `setD_bigcapr` - -- in `measurable_structure.v`: - + lemmas `g_sigma_algebra_cross`, `g_sigma_algebra_rectangle` - + lemma `sigma_algebra_sub` - -- in `measurable_function.v`: - + lemma `preimage_measurability` - -- in `pseudometric_normed_Zmodule.v`: - + lemma `itv_center_shift` - -- in `normed_module.v`: - + lemmas `closure_itvoo` -- in `unstable.v`: - + structures `SemiNorm`, `Norm` - + lemmas `normMn`, `normN`, `ler_norm_sum` - -- in `normed_module.v`: - + structure `NormedVector` - + notation `normedVectType` - + definition `max_space` - + lemmas `sup_closed_ball_compact`, `equivalence_norms`, - `linear_findim_continuous` - -- in `tvs.v`: - + lemmas `cvg_sum`, `sum_continuous` - -- in `classical_sets.v`: - + lemmas `setI_closed_setT`, `setI_closed_set0` - -- in `measurable_function.v`: - + lemma `g_sigma_algebra_preimage_comp` - -- in `measure_function.v`: - + lemma `g_sigma_algebra_finite_measure_unique` - -- new file `independence.v`: - + definition `independent_events` - + definition `mutual_independence` - + lemma `eq_mutual_independence` - + definition `independence2`, `independence2P` - + lemma `mutual_independence_fset` - + lemma `mutual_independence_finiteS` - + theorem `mutual_independence_finite_g_sigma` - + lemma `mutual_dependence_bigcup` - + definition `independent_RVs` - + lemma `independent_RVsD1` - + theorem `independent_generators` - + definition `independent_RVs2` - + lemmas `independent_RVs2_comp`, `independent_RVs2_funrposneg`, - `independent_RVs2_funrnegpos`, `independent_RVs2_funrnegneg`, - `independent_RVs2_funrpospos` - + definition `pairRV`, lemma `measurable_pairRV` - + lemmas `independent_RVs2_product_measure1` - + lemmas `independent_RVs2_setI_preimage`, - `independent_Lfun1_expectation_product_measure_lty` - + lemma `ge0_independent_expectationM` - + lemmas `independent_Lfun1_expectationM_lty`, `independent_Lfun1M`, - `independent_expectationM` - -- in `ereal.v`: - + lemma `ge0_addBefctE` - -- in `measure_extension.v`: - + definition `caratheodory_measure` -- in `measurable_structure.v`: - + structure `PMeasurable`, notation `pmeasurableType` - -- in `subspace_topology.v`: - + lemma `withinU_continuous_patch` -- in `matrix_normedtype.v`: - + lemma `continuous_mx` - -- in `derive.v`: - + instance `is_derive_mx` - + fact `dmx` - + lemma `diffmx` - + lemma `is_diff_mx` - + instance `is_diff_mx` -- in `realsum.v`: - + lemma `esum_psum` - + lemma `esum_sum` - -- in `constructive_ereal.v`: - + definition `esg` - + lemmas `numEesg`, `gte0_esg`, `lte0_esg`, `esg0` - -- in `esum.v`: - + lemmas `esum_eq0P`, `esumZ`, `exchange_esum` - + lemmas `le_esum`, `esumN` - + lemmas `summable_le_esum`, `summable_esum_funepos`, `summable_esumN`, - `summableZ`, `summable_esumZ` - + lemmas `esum_if_eq_op` - + lemmas `exchange_esum_ereal_sup` - -- in `ereal.v`: - + lemmas `exchange_ereal_sup`, `ge0_ereal_supZl`, `ge0_ereal_supZl_range` - -- in `sequences.v`: - + lemmas `ereal_supD`, `ereal_sup_sum` - -- in `reals.v`: - + lemmas `sup_ge0`, `has_sup_wpZl`, `gt0_has_supZl`, `has_sup_Mn`, `sup_Mn` -- in `mathcomp_extra.v`: - + lemmas `divDl_ge0`, `divDl_le1` - -- in `unstable.v`: - + lemmas `divD_onem` - -- in `filter.v`: - + mixin `isSubNbhs`, structure `SubNbhs`, notation `subNbhsType` - -- in `topology_structure.v`: - + structure `SubTopological`, notation `subTopologicalType` - -- in `tvs.v`: - + structure `SubConvexTvs`, notation `subConvexTvsType` - -- in `normed_module.v`: - + structure `SubNormedModule`, notation `subNormedModType` - + instance `ent_xsection_filter` - + light-weigth factory `subLmodule_isSubNormedmodule` - -- new file `hahn_banach_theorem.v`: - + module `LinearGraph` - * definitions `graph`, `linear_graph` - * lemmas `lingraph_00`, `lingraphZ`, `lingraphD` - + module `HahnBanachZorn` - * definitions `extend_graph`, `le_graph`, `functional_graph`, `le_extend_graph` - * record `zorn_type` - * definition `zphi` - * lemma `zorn_type_eq` - * definition `zornS` - * lemmas `zornS_ex`, `domain_extend`, `hahn_banach_witness` - + theorems `hahn_banach_extension`, `hahn_banach_extension_normed` -- in `normal_distribution.v`: - + lemma `normal_funN` - + lemma `normal_fun_sym` - + lemma `normal_fun0abs` - + lemma `normal_pdf_sym` - + lemma `normal_fun_center_new` - + lemma `normal_fun_shift` - + lemma `normal_pdf_uniq_ae` - + lemma `normal_prob_continuous` - + lemma `integral_normal_prob` - + lemma `measurable_normal_prob` - + lemma `emeasurable_bounded_integrable` - + lemmas `integrable_normal_probD1`, `normal_probD1`, `normal_probD2`, `normal_probD` - -- in `lebesgue_stieltjes_measure.v`: - + module `MeasurableRocitv` - + definition `open_type` - + notations `.-open`, `.-open.-measurable` - + module `MeasurableOpen` - * definition `measurableTypeO` - + definition `borel_display` - * definition `measurableO` - * definition `measurableTypeR` - + definition `lebesgue_display` - * definition `measurableR` - + lemmas `measurable_set1`, `measurable_itv` (also declared as hints) - + lemma `measurable_ball_norm` - + definition `ocitv_measure`, lemma `ocitv_measure_ext` - + module `MeasurableR` - + module `RGenOpenSets` - * lemma `measurableE` - -- in `real_interval.v`: - + lemma `set1_bigcap_oo` - -- in `realsum.v`: - + lemma `esum_summableP` - -- in `esum.v`: - + lemma `fsetsTE` -- in `ftc.v`: - + lemma `ge0_integration_by_substitution_shift_itvy`, - `ge0_integration_by_substitution_shift_itvNy` -- in `derive.v`: - + lemmas `derivable_row_mx`, `derive_row_mx` - + instance `is_derive_row_mx` - -- in `matrix_normedtype.v` - + lemmas `norm_row_mx`, `norm_row_mx0r`, `norm_row_mx0l`, `cvg_row_mx` - -- in `unstable.v`: - + lemma `sub_row_mx` - -- in `derive.v`: - + lemmas `eqo_row_mx`, `drow_mx`, `diff_row_mx`, - `differentiable_row_mx` - + instance `is_diff_row_mx` - -- in `functions.v`: - + lemmas `zerofctE`, `onefctE` - -- in `lebesgue_integral_nonneg.v`, generalized and deprecated: - + lemma `ge0_integralZl_EFin` (no condition on `k`) - -- from `lebesgue_stieltjes_measure.v` to (new) `normedtyped_measurable.v`: - + move definition `open_type` - + move notations `.-open`, `.-open.-measurable` -- in `functions.v`: - + lemmas `linfunP`, `linfun_eqP` - + instances of `SubLmodule` and `pointedType` on `{linear _->_ | _ }` - -- in `tvs.v`: - + structure `LinearContinuous` - + factory `isLinearContinuous` - + instance of `ChoiceType` on `{linear_continuous _ -> _ }` - + instance of `LinearContinuous` with the composition of two functions of type `LinearContinuous` - + instance of `LinearContinuous` with the sum of two functions of type `LinearContinuous` - + instance of `LinearContinuous` with the scalar multiplication of a function of type - `LinearContinuous` - + instance of `Continuous` on \-f when f is of type `LinearContinuous` - + instance of `SubModClosed` on `{linear_continuous _ -> _}` - + instance of `SubLModule` on `{linear_continuous _ -> _ }` - + instance of `LinearContinuous` on the null function - + notations `{linear_continuous _ -> _ | _ }` and `{linear_continuous _ -> _ }` - + definitions `lcfun`, `lcfun_key`, `lcfunP` - + lemmas `lcfun_eqP`, `null_fun_continuous`, `fun_cvgD`, - `fun_cvgN`, `fun_cvgZ`, `fun_cvgZr` - + lemmas `lcfun_continuous` and `lcfun_linear` - -- new files `signed_measure.v` and `radon_nikodym.v` - + with the contents of `charge.v` (deprecated) - -- in `esum.v`: - + lemma `ge0_esum` - + lemma `esum_ge` - -- in `functions.v`: - + lemma `preimageD1` - -- in `measure_function.v`: - + lemmas `cvg_measure_bigcap`, `cvg_measure_bigcup` - -- in `classical_sets.v`: - + lemma `bigcup_bigsetU` - -- in `measurable_structure.v`: - + lemmas `countable_bigcap_measurable`, `countable_bigcup_measurable` - -- in `lebesgue_stieltjes_measure.v`: - + module `MeasurableRocitv` - + definition `open_type` - + notations `.-open`, `.-open.-measurable` - + module `MeasurableOpen` - * definition `measurableTypeO` - + definition `borel_display` - * definition `measurableO` - * definition `measurableTypeR` - + definition `lebesgue_display` - * definition `measurableR` - + lemmas `measurable_set1`, `measurable_itv` (also declared as hints) - + lemma `measurable_ball_norm` - + definition `ocitv_measure`, lemma `ocitv_measure_ext` - + module `MeasurableR` - + module `RGenOpenSets` - * lemma `measurableE` - -- in `real_interval.v`: - + lemma `set1_bigcap_oo` - ### Changed -- in `realsum.v`: - + lemma `__admitted__psumB` proved and renamed to `psumB` - -- moved from `measurable_structure.v` to `classical_sets.v`: - + definition `preimage_set_system` - + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, - `preimage_set_system_id` - -- moved from `measurable_structure.v` to `classical_sets.v`: - + definition `preimage_set_system` - + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, - `preimage_set_system_id` - -- moved from `measurable_structure.v` to `classical_sets.v`: - + definition `preimage_set_system` - + lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`, - `preimage_set_system_id` - -- in `lebesgue_stieltjes_measure.v`: - + sigma-algebra for `\bar R` now uses open sets instead of octiv - -- moved from `measurable_realfun.v` to `lebesgue_stieltjes_measure.v` - + module `RGenOInfty` - + module `RGenInftyO` - + module `RGenCInfty` - + module `RGenOpens` - -- moved inside module `MeasurableRocitv` (`lebesgue_stieltjes_measure.v`): - + lemmas `measurable_set1`, `measurable_itv` - -- moved from `charge.v` to `radon_nikodym.v`: - + definition `induced_charge` - + lemmas `semi_sigma_additive_nng_induced`, `dominates_induced`, - `integral_normr_continuous` - + definitions `approxRN`, `int_approxRN`, `sup_int_approxRN` - + lemmas `sup_int_approxRN_ge0`, `radon_nikodym_finite`, - `radon_nikodym_sigma_finite`, `change_of_variables`, `integrableM`, - `chain_rule` - + definition `Radon_Nikodym` - + lemmas `Radon_NikodymE`, `Radon_Nikodym_fin_num`, `Radon_Nikodym_integrable`, - `ae_eq_Radon_Nikodym_SigmaFinite`, `Radon_Nikodym_change_of_variables`, - `Radon_Nikodym_cscale`, `Radon_Nikodym_cadd`, `Radon_Nikodym_chain_rule` -- in `realsum.v`: - + the following now use `funrpos` and `funrneg`: - * definition `sum` - * lemmas `summable_funrpos`, `summable_funrneg` - + lemma `sum0` (now uses `cst`) - -- moved from `realsum` to `numfun.v`: - + now use `funrpos` and `funrneg`: - * lemmas `eq_funrpos`, `eq_funrneg` - * lemma `fpos0` (renamed to `funrpos_cst0`) - * lemma `fneg0` (renamed to `funrneg_cst0`) - * lemmas `funrposZ`, `funrnegZ` - * lemmas `funrpos_natrM`, `funrneg_natrM` - * lemmas `le_funrpos_norm` - -- moved from `numfun.v` to `unstable.v`: - + notations `nondecreasing_fun`, `nonincreasing_fun`, - `decreasing_fun`, `increasing_fun` - -- in `esum.v`: - + definition `esum` - + lemma `esum_fset` - + lemma `esum_ge` -> `PosEsum.pos_esum_ge` - + lemma `le_esum` -> `PosEsum.le_pos_esum` - -- moved from `normed_module.v` to `metric_structure.v` - + lemma `squeeze_cvgr` - -- moved from `pseudometric_normed_Zmodule.v` to `metric_structure.v` - + lemmas `real_cvgr_lt`, `real_cvgr_le`, `real_cvgr_le`, `real_cvgr_gt` - + lemmas `cvgr_lt`, `cvgr_gt`, `cvgr_ge`, `cvgr_le` -- in `normal_distribution.v: - + `normal_fun_center` -> `normal_fun_center0` - -- moved from `measurable_structure.v` to `measure_function.v`: - + definition `subset_sigma_subadditive` - -- moved from `measurable_structure.v` to `unstable.v`: - + notations `nondecreasing_seq`, `nonincreasing_seq` - -- moved from `measurable_structure.v` to `classical_sets.v`: - + notation `^nat` - + defintion `sequence` - + defintion `seqDU` - + lemmas `seqDU_bigcup_eq`, `trivIset_seqDU` - + definition `seqD` - + lemmas `eq_bigcup_seqD`, `trivIset_seqD`, `seqDU_seqD`, `bigcup_bigsetU_bigcup` - -- in `functions.v` - + lemma `fctE` (include `zerofctE` and `onefctE`) - -- in `classical_sets.v` - + lemma `bigcupDr` -> `setD_bigcupr` (deprecating `bigcupDr`) - -- moved from `measurable_realfun.v` to `lebesgue_stieltjes_measure.v` - + module `RGenOInfty` - + module `RGenInftyO` - + module `RGenCInfty` - + module `RGenOpens` - -- moved inside module `MeasurableRocitv` (`lebesgue_stieltjes_measure.v`): - + lemmas `measurable_set1`, `measurable_itv` - -- in `lebesgue_stieltjes_measure.v`: - + lemma `lebesgue_stieltjes_measure_unique` is now about the sigma-algebra generated by open sets - ### Renamed -- in `lebesgue_stieltjes_measure.v`: - + `RGenOpens` -> `RGenItvoo` - + `MeasurableRocitv.measurable_set1` -> `MeasurableRocitv.ocitv_measurable_set1` - + `MeasurableRocitv.measurable_itv` -> `MeasurableRocitv.ocitv_measurable_itv` - -- in `lebesgue_stieltjes_measure.v`: -- in `normed_module.v` - + mixin ` PseudoMetricNormedZmod_Tvs_isNormedModule` -> - ` PseudoMetricNormedZmod_ConvexTvs_isNormedModule` - -- in `measurable_structure.v`: - + `measurable_prod_measurableType` -> `prod_measurable_rectangle` - + `sub_sigma_algebra2` -> `sigma_algebra_sub` -- in `measurable_realfun.v`: - + `measurable_fun_itv_co` -> `measurable_fun_itvbb_itvco` - + `measurable_fun_itv_oc` -> `measurable_fun_itvbb_itvoc` - + `emeasurable_fun_itv_cc` -> `emeasurable_fun_itvbb_itvcc` - + `measurable_fun_itv_cc` -> `measurable_fun_itvbb_itvcc` - + `measurable_fun_itv_bndo_bndcP` -> `measurable_fun_itvbo_itvbcP` - + `emeasurable_fun_itv_bndo_bndcP` -> `emeasurable_fun_itvbo_itvbcP` - + `measurable_fun_itv_obnd_cbndP` -> `measurable_fun_itvob_itvcbP` - + `emeasurable_fun_itv_obnd_cbndP` -> `emeasurable_fun_itvob_itvcbP` - -- in `lebesgue_integral_nonneg.v`: - + `integral_itv_bndo_bndc` -> `integral_itvbo_itvbc` - + `integral_itv_obnd_cbnd` -> `integral_itvob_itvcb` - + `integral_itv_bndoo` -> `integral_itvbb_itvoo` - -- in `lebesgue_Rintegral.v`: - + `Rintegral_itv_bndo_bndc` -> `Rintegral_itvbo_itvbc` - + `Rintegral_itv_obnd_cbnd` -> `Rintegral_itvob_itvcb` - -- in `topology_structure.v`: - + `cts_fun` -> `continuous_fun` -- in `measure_function.v`: - + `isFinite` -> `isFinNumFun` - -- in `topology_structure.v`: - + `closure_setC` -> `closureC` -- in `esum.v`: - + `esum_sum` -> ` exchange_esum_sum` - -- in `realsum.v`: - + `psum` -> `PosSum.psum` - -- in `functions.v` - + lemma `scalrfctE` -> `scalerfctE` (deprecating `scalrfctE`) - ### Generalized - in `lebesgue_integral_nonneg.v`: + lemmas `ge0_integralZl`, `ge0_integralZr` -- in `measurable_structure.v`: - + lemma `sigma_algebra_measurable` (not specialized to `setT` anymore) - -- in `measurable_function.v`: - + lemma `preimage_set_system_measurable_fun` - -- in `measurable_structure.v` - + structure `SemiRingOfSets`, mixin `isSigmaRing`, factories `isRingOfSets`, - `isRingOfSets_setY`, `isAlgebraOfSets`, `isAlgebraOfSets_setD`, `isMeasurable` - are not required to be pointed anymore - + lemmas `measurable_g_measurableTypeE`, `g_sigma_algebra_preimageType`, - `g_sigma_algebra_preimage`, `g_sigma_preimageE`, `g_sigma_preimageE`, - `g_sigma_algebra_rectangle` are generalized from `pointedType` to `choiceType` - (the list might not be exhaustive) - -- in `ereal.v`: - + lemma `funID` generalized from `pointedType` to `Type` - -- in `numfun.v`: - + lemma `indic_restrict` generalized from `pointedType` to `Type` - + factory `FiniteDecomp` generalized from `pointedType`/`nzRingType` to - `Type/pzRingType` - -- in `simple_functions.v`: - + lemmas `fctD`, `fctN`, `fctM`, `fctZ` - + lemmas `sfun0`, `sfunN`, `sfunD`, `sfunB`, `sfunZ`, `sfun_sum`, `sfunprod` - + lemma `simple_bounded` - + structure `SimpleFun` (and notation `{sfun aT >-> _}`): codomain - generalized from `realType` to `sigmaRingType d'`, adding a display parameter `d'`; - -- in `ereal.v`: - + lemmas `ge0_mule_fsumr`, `ge0_mule_fsuml` - -- in `esum.v`: - + lemma `esum_set1` - + structure `SimpleFun` (and notation `{sfun aT >-> _}`): codomain - generalized from `realType` to `sigmaRingType d'`, adding a display parameter `d'`; - -- in `ereal.v`: - + lemmas `ge0_mule_fsumr`, `ge0_mule_fsuml` - -- in `esum.v`: - + lemma `esum_set1` ### Deprecated ### Removed -- in `lebesgue_stieltjes_measure.v`: - + definition `MeasurableRocitv.lebesgue_display` - + definition `MeasurableRocitv.measurableR` -- file `signed.v` - -- in `measurable_structure.v`: - + lemmas `measurable_prod_g_measurableType`, `measurable_prod_g_measurableTypeR` - -- file `measurable_structure.v`: - + notations `preimage_class`, `image_class`, `sigma_algebra_preimage_class`, - `sigma_algebra_image_class`, `sigma_algebra_preimage_classE` (deprecated since 1.9.0) - -- in `ftc.v`: - + lemma `integrable_locally` - -- in `lebesgue_Rintegral.v`: - + notation `Rintegral_setU_EFin` (deprecated since 1.9.0) - -- in `topology_structure.v`: - + lemma `closureC_deprecated` (deprecated since 1.7.0) - -- in `num_normedtype.v`: - + notation `near_in_itv` (deprecated since 1.7.0) - -- in `measurable_fun_approximation.v`: - + lemma `approximation` (deprecated since 1.8.0) - + notations `emeasurable_fun_sum`, `emeasurable_fun_fsum`, - `ge0_emeasurable_fun_sum` (deprecated since 1.8.0) - -- in `random_variable.v`: - + notation `expectationM` (deprecated since 1.8.0) -- in `realsum.v`: - + definitions `fpos`, `fneg` (use `funrpos`, `funrneg` instead) - + lemmas `fnegN`, `fposN` - + lemmas `ge0_pos`, `ge0_neg` - + lemma `fposBfneg` - + lemma `funrpos_le` - ### Infrastructure ### Misc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md old mode 100755 new mode 100644 diff --git a/INSTALL.md b/INSTALL.md old mode 100755 new mode 100644 diff --git a/LICENCE b/LICENCE old mode 100755 new mode 100644 diff --git a/MANIFEST b/MANIFEST old mode 100755 new mode 100644 diff --git a/Makefile b/Makefile old mode 100755 new mode 100644 diff --git a/Makefile.common b/Makefile.common old mode 100755 new mode 100644 diff --git a/ORIGINAL_FILES.md b/ORIGINAL_FILES.md old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/_CoqProject b/_CoqProject old mode 100755 new mode 100644 index 42c3d46343..0dcbd12ffa --- a/_CoqProject +++ b/_CoqProject @@ -116,7 +116,6 @@ theories/measure_theory/measurable_function.v theories/measure_theory/signed_measure.v theories/measure_theory/measure.v -theories/real_measure/normedtype_measurable.v theories/real_measure/lebesgue_stieltjes_measure.v theories/real_measure/lebesgue_measure.v theories/real_measure/measurable_realfun.v @@ -125,7 +124,6 @@ theories/real_measure/real_measure.v theories/borel_hierarchy.v theories/lebesgue_integral_theory/simple_functions.v -theories/lebesgue_integral_theory/bochner.v theories/lebesgue_integral_theory/lebesgue_integral_definition.v theories/lebesgue_integral_theory/measurable_fun_approximation.v theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v diff --git a/analysis_stdlib/Make b/analysis_stdlib/Make old mode 100755 new mode 100644 diff --git a/analysis_stdlib/Makefile b/analysis_stdlib/Makefile old mode 100755 new mode 100644 diff --git a/analysis_stdlib/Rstruct_topology.v b/analysis_stdlib/Rstruct_topology.v old mode 100755 new mode 100644 diff --git a/analysis_stdlib/showcase/uniform_bigO.v b/analysis_stdlib/showcase/uniform_bigO.v old mode 100755 new mode 100644 diff --git a/classical/Make b/classical/Make old mode 100755 new mode 100644 diff --git a/classical/Makefile b/classical/Makefile old mode 100755 new mode 100644 diff --git a/classical/all_classical.v b/classical/all_classical.v old mode 100755 new mode 100644 diff --git a/classical/boolp.v b/classical/boolp.v old mode 100755 new mode 100644 diff --git a/classical/cardinality.v b/classical/cardinality.v old mode 100755 new mode 100644 diff --git a/classical/classical_orders.v b/classical/classical_orders.v old mode 100755 new mode 100644 diff --git a/classical/classical_sets.v b/classical/classical_sets.v old mode 100755 new mode 100644 diff --git a/classical/contra.v b/classical/contra.v old mode 100755 new mode 100644 diff --git a/classical/filter.v b/classical/filter.v old mode 100755 new mode 100644 diff --git a/classical/fsbigop.v b/classical/fsbigop.v old mode 100755 new mode 100644 diff --git a/classical/functions.v b/classical/functions.v old mode 100755 new mode 100644 diff --git a/classical/internal_Eqdep_dec.v b/classical/internal_Eqdep_dec.v old mode 100755 new mode 100644 diff --git a/classical/mathcomp_extra.v b/classical/mathcomp_extra.v old mode 100755 new mode 100644 diff --git a/classical/set_interval.v b/classical/set_interval.v old mode 100755 new mode 100644 diff --git a/classical/unstable.v b/classical/unstable.v old mode 100755 new mode 100644 diff --git a/classical/wochoice.v b/classical/wochoice.v old mode 100755 new mode 100644 diff --git a/coq-mathcomp-analysis-stdlib.opam b/coq-mathcomp-analysis-stdlib.opam old mode 100755 new mode 100644 diff --git a/coq-mathcomp-analysis.opam b/coq-mathcomp-analysis.opam old mode 100755 new mode 100644 diff --git a/coq-mathcomp-classical.opam b/coq-mathcomp-classical.opam old mode 100755 new mode 100644 diff --git a/coq-mathcomp-experimental-reals.opam b/coq-mathcomp-experimental-reals.opam old mode 100755 new mode 100644 diff --git a/coq-mathcomp-reals-stdlib.opam b/coq-mathcomp-reals-stdlib.opam old mode 100755 new mode 100644 diff --git a/coq-mathcomp-reals.opam b/coq-mathcomp-reals.opam old mode 100755 new mode 100644 diff --git a/default.nix b/default.nix old mode 100755 new mode 100644 diff --git a/etc/builddoc_dependency_dot.pl b/etc/builddoc_dependency_dot.pl old mode 100755 new mode 100644 diff --git a/etc/pr193.sed b/etc/pr193.sed old mode 100755 new mode 100644 diff --git a/etc/rocqnavi_index-blacklist b/etc/rocqnavi_index-blacklist old mode 100755 new mode 100644 diff --git a/experimental_reals/LICENSE b/experimental_reals/LICENSE old mode 100755 new mode 100644 diff --git a/experimental_reals/Make b/experimental_reals/Make old mode 100755 new mode 100644 diff --git a/experimental_reals/Makefile b/experimental_reals/Makefile old mode 100755 new mode 100644 diff --git a/experimental_reals/dedekind.v b/experimental_reals/dedekind.v old mode 100755 new mode 100644 diff --git a/experimental_reals/discrete.v b/experimental_reals/discrete.v old mode 100755 new mode 100644 diff --git a/experimental_reals/distr.v b/experimental_reals/distr.v old mode 100755 new mode 100644 diff --git a/experimental_reals/realseq.v b/experimental_reals/realseq.v old mode 100755 new mode 100644 diff --git a/experimental_reals/realsum.v b/experimental_reals/realsum.v old mode 100755 new mode 100644 diff --git a/experimental_reals/xfinmap.v b/experimental_reals/xfinmap.v old mode 100755 new mode 100644 diff --git a/reals/Make b/reals/Make old mode 100755 new mode 100644 diff --git a/reals/Makefile b/reals/Makefile old mode 100755 new mode 100644 diff --git a/reals/all_reals.v b/reals/all_reals.v old mode 100755 new mode 100644 diff --git a/reals/constructive_ereal.v b/reals/constructive_ereal.v old mode 100755 new mode 100644 diff --git a/reals/prodnormedzmodule.v b/reals/prodnormedzmodule.v old mode 100755 new mode 100644 diff --git a/reals/real_interval.v b/reals/real_interval.v old mode 100755 new mode 100644 diff --git a/reals/reals.v b/reals/reals.v old mode 100755 new mode 100644 diff --git a/reals_stdlib/Make b/reals_stdlib/Make old mode 100755 new mode 100644 diff --git a/reals_stdlib/Makefile b/reals_stdlib/Makefile old mode 100755 new mode 100644 diff --git a/reals_stdlib/Rstruct.v b/reals_stdlib/Rstruct.v old mode 100755 new mode 100644 diff --git a/reals_stdlib/nsatz_realtype.v b/reals_stdlib/nsatz_realtype.v old mode 100755 new mode 100644 diff --git a/rocq-mathcomp-analysis-stdlib.opam b/rocq-mathcomp-analysis-stdlib.opam old mode 100755 new mode 100644 diff --git a/rocq-mathcomp-analysis.opam b/rocq-mathcomp-analysis.opam old mode 100755 new mode 100644 diff --git a/rocq-mathcomp-classical.opam b/rocq-mathcomp-classical.opam old mode 100755 new mode 100644 diff --git a/rocq-mathcomp-experimental-reals.opam b/rocq-mathcomp-experimental-reals.opam old mode 100755 new mode 100644 diff --git a/rocq-mathcomp-reals-stdlib.opam b/rocq-mathcomp-reals-stdlib.opam old mode 100755 new mode 100644 diff --git a/rocq-mathcomp-reals.opam b/rocq-mathcomp-reals.opam old mode 100755 new mode 100644 diff --git a/theories/Make b/theories/Make old mode 100755 new mode 100644 index b228cf3b83..15781fc7db --- a/theories/Make +++ b/theories/Make @@ -83,7 +83,6 @@ measure_theory/measurable_function.v measure_theory/signed_measure.v measure_theory/measure.v -real_measure/normedtype_measurable.v real_measure/lebesgue_stieltjes_measure.v real_measure/lebesgue_measure.v real_measure/measurable_realfun.v diff --git a/theories/Makefile b/theories/Makefile old mode 100755 new mode 100644 diff --git a/theories/all_analysis.v b/theories/all_analysis.v old mode 100755 new mode 100644 diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v old mode 100755 new mode 100644 index 4a033ed6a9..880301fbe7 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -1,5 +1,4 @@ (* mathcomp analysis (c) 2026 Inria and AIST. License: CeCILL-C. *) -From HB Require Import structures. From mathcomp Require Import boot order algebra. From mathcomp Require Import boolp classical_sets functions cardinality. From mathcomp Require Import reals topology normedtype sequences. diff --git a/theories/cantor.v b/theories/cantor.v old mode 100755 new mode 100644 diff --git a/theories/charge.v b/theories/charge.v old mode 100755 new mode 100644 diff --git a/theories/convex.v b/theories/convex.v old mode 100755 new mode 100644 diff --git a/theories/derive.v b/theories/derive.v old mode 100755 new mode 100644 diff --git a/theories/elementary_functions/trigonometry_functions.v b/theories/elementary_functions/trigonometry_functions.v old mode 100755 new mode 100644 diff --git a/theories/ereal.v b/theories/ereal.v old mode 100755 new mode 100644 diff --git a/theories/ess_sup_inf.v b/theories/ess_sup_inf.v old mode 100755 new mode 100644 diff --git a/theories/esum.v b/theories/esum.v old mode 100755 new mode 100644 diff --git a/theories/exp.v b/theories/exp.v old mode 100755 new mode 100644 diff --git a/theories/ftc.v b/theories/ftc.v old mode 100755 new mode 100644 diff --git a/theories/functional_analysis/hahn_banach_theorem.v b/theories/functional_analysis/hahn_banach_theorem.v old mode 100755 new mode 100644 diff --git a/theories/gauss_integral.v b/theories/gauss_integral.v old mode 100755 new mode 100644 diff --git a/theories/hoelder.v b/theories/hoelder.v old mode 100755 new mode 100644 index 11c333ec1b..44fce50f98 --- a/theories/hoelder.v +++ b/theories/hoelder.v @@ -860,7 +860,7 @@ Reserved Notation "{ 'mfun_' mu , U >-> V }" Notation "{ 'mfun_' mu , aT >-> T }" := (@aeEqMfun _ _ aT T _ mu) : form_scope. -Import numFieldNormedType.Exports. +Import numFieldNormedType.Exports HBNNSimple. HB.mixin Record isFinLebesgue d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}) (p : \bar R) (p1 : (1 <= p)%E) diff --git a/theories/homotopy_theory/continuous_path.v b/theories/homotopy_theory/continuous_path.v old mode 100755 new mode 100644 diff --git a/theories/homotopy_theory/homotopy.v b/theories/homotopy_theory/homotopy.v old mode 100755 new mode 100644 diff --git a/theories/homotopy_theory/wedge_sigT.v b/theories/homotopy_theory/wedge_sigT.v old mode 100755 new mode 100644 diff --git a/theories/kernel.v b/theories/kernel.v old mode 100755 new mode 100644 index 34979f6b7b..1f418be452 --- a/theories/kernel.v +++ b/theories/kernel.v @@ -1062,9 +1062,7 @@ HB.export KCOMP_SFINITE_KERNEL. Section measurable_fun_preimage_integral. Context d d' (X : measurableType d) (Y : measurableType d') (R : realType). - Import HBNNSimple. - Variables (k : Y -> \bar R) (k_ : ({nnsfun Y >-> R}) ^nat) (ndk_ : nondecreasing_seq (k_ : (Y -> R)^nat)) diff --git a/theories/landau.v b/theories/landau.v old mode 100755 new mode 100644 diff --git a/theories/lebesgue_integral_theory/giry.v b/theories/lebesgue_integral_theory/giry.v old mode 100755 new mode 100644 diff --git a/theories/lebesgue_integral_theory/lebesgue_Rintegral.v b/theories/lebesgue_integral_theory/lebesgue_Rintegral.v old mode 100755 new mode 100644 diff --git a/theories/lebesgue_integral_theory/lebesgue_integrable.v b/theories/lebesgue_integral_theory/lebesgue_integrable.v old mode 100755 new mode 100644 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral.v b/theories/lebesgue_integral_theory/lebesgue_integral.v old mode 100755 new mode 100644 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v old mode 100755 new mode 100644 index e98c106a85..ad2b814d30 --- a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v @@ -214,7 +214,6 @@ Qed. End le_sintegral. Section is_cvg_sintegral. - Import HBNNSimple. Lemma is_cvg_sintegral d (T : measurableType d) (R : realType) diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v old mode 100755 new mode 100644 index ab9855cd3d..41a86b07f3 --- a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v @@ -58,7 +58,7 @@ Section continuous_compact_integrable. Context {rT : realType}. Let mu : measure _ _ := @lebesgue_measure rT. Import MeasurableR. -Let R : measurableType _ := (*measurableTypeR*) rT. +Let R : measurableType _ := measurableTypeR rT. Local Open Scope ereal_scope. Lemma continuous_compact_integrable (f : R -> R^o) (A : set R^o) : @@ -78,7 +78,7 @@ Section continuous_density_L1. Context (rT : realType). Let mu : measure _ _ := @lebesgue_measure rT. Import MeasurableR. -Let R : measurableType _ := (*measurableTypeR*) rT. +Let R : measurableType _ := measurableTypeR rT. Local Open Scope ereal_scope. Import HBSimple. @@ -180,7 +180,7 @@ Section lebesgue_differentiation_continuous. Context {rT : realType}. Let mu : measure _ _ := @lebesgue_measure rT. Import MeasurableR. -Let R : measurableType _ := (*measurableTypeR*) rT. +Let R : measurableType _ := measurableTypeR rT. Let ballE (x : R) (r : {posnum rT}) : ball x r%:num = `](x - r%:num), (x + r%:num)[%classic :> set rT. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v old mode 100755 new mode 100644 index 98c3a7bc17..8030fbefc2 --- a/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v @@ -256,7 +256,6 @@ Local Open Scope ereal_scope. Import HBSimple. Import HBNNSimple. Import MeasurableR. -Import MeasurableNormedModule. Let sfun_dense_L1_pos (f : T -> \bar R) : mu.-integrable E f -> (forall x, E x -> 0 <= f x) -> diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_fubini.v b/theories/lebesgue_integral_theory/lebesgue_integral_fubini.v old mode 100755 new mode 100644 diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v old mode 100755 new mode 100644 index e599a7ca51..2ede24962a --- a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v @@ -90,6 +90,7 @@ Hypothesis f10 : forall x, D x -> 0 <= f1 x. Hypothesis mf1 : measurable_fun D f1. Hypothesis mf2 : measurable_fun D f2. +Import HBNNSimple. Lemma ge0_le_integral : (forall x, D x -> f1 x <= f2 x) -> \int[mu]_(x in D) f1 x <= \int[mu]_(x in D) f2 x. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v old mode 100755 new mode 100644 index 04a7a3c898..a4af3f425b --- a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v @@ -557,7 +557,7 @@ Local Notation mu := lebesgue_measure. Import MeasurableR. Lemma lebesgue_measureN (A : set R) : measurable A -> - pushforward mu (-%R : _ -> (*measurableTypeR*) R) A = mu A. + pushforward mu (-%R : _ -> measurableTypeR R) A = mu A. Proof. move=> mA; apply/esym/lebesgue_measure_unique => //= _ [[a b]] _ <-. rewrite /pushforward opp_preimage_itvbndbnd/= !lebesgue_measure_itv/=. @@ -569,7 +569,7 @@ Lemma ge0_integration_by_substitution0 (f : R -> \bar R) : \int[mu]_(r in `[0%R, +oo[) f r = \int[mu]_(r in `]-oo, 0%R]) f (- r)%R. Proof. move=> mf f0; rewrite (_ : `]-oo, 0%R]%classic = - (-%R : _ -> (*measurableTypeR*) R) @^-1` `[0%R, +oo[). + (-%R : _ -> measurableTypeR R) @^-1` `[0%R, +oo[). by rewrite opp_preimage_itvbndy oppr0. rewrite -ge0_integral_pushforward//=; first exact: measurable_funS mf. by apply: eq_measure_integral => //= A mA AS; exact/esym/lebesgue_measureN. @@ -691,7 +691,6 @@ Qed. End integral_measure_sum_nnsfun. Section integral_measure_add_nnsfun. - Import HBNNSimple. Lemma integral_measure_add_nnsfun d (T : measurableType d) (R : realType) @@ -1069,10 +1068,11 @@ End integral_patch. Section ge0_cvgn_integral. Local Open Scope ereal_scope. Import MeasurableR. -Context {R : realType} (mu : {measure set ((*@measurableTypeR*) R) -> \bar R}) +Context {R : realType} (mu : {measure set (@measurableTypeR R) -> \bar R}) (f : R -> R). Hypothesis f0 : (forall x, 0 <= f x)%R. + Hypothesis mf : measurable_fun setT f. Lemma ge0_integral_ereal_sup : diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_under.v b/theories/lebesgue_integral_theory/lebesgue_integral_under.v old mode 100755 new mode 100644 diff --git a/theories/lebesgue_integral_theory/measurable_fun_approximation.v b/theories/lebesgue_integral_theory/measurable_fun_approximation.v old mode 100755 new mode 100644 index 141bd370b4..cc5f2ab413 --- a/theories/lebesgue_integral_theory/measurable_fun_approximation.v +++ b/theories/lebesgue_integral_theory/measurable_fun_approximation.v @@ -377,19 +377,18 @@ End approximation. Section approximation_sfun. Context d (T : measurableType d) (R : realType) (f : T -> \bar R). Variables (D : set T) (mD : measurable D) (mf : measurable_fun D f). -Import MeasurableR. + +Import HBSimple. (* NB: already instantiated in cardinality.v *) (*HB.instance Definition _ x : @FImFun T R (cst x) := FImFun.on (cst x).*) (* generates Warning: HB: no new instance is generated [HB.no-new-instance,HB,elpi,default] *) +Import HBNNSimple. (* NB: already instantiated in lebesgue_integral.v *) (*HB.instance Definition _ x : @NonNegFun T R (cst x%:num) := NonNegFun.on (cst x%:num).*) (* generates Warning: HB: no new instance is generated [HB.no-new-instance,HB,elpi,default] *) -Import HBSimple. -Import HBNNSimple. - Lemma approximation_sfun : exists g : {sfun T >-> R}^nat, (forall x, D x -> EFin \o g ^~ x @ \oo --> f x). Proof. @@ -704,7 +703,7 @@ Hint Extern 0 (hausdorff_space _) => (exact: Rhausdorff) : core. Local Open Scope ereal_scope. Context (rT : realType) (A : set rT). Let mu : measure _ _ := @lebesgue_measure rT. -Let R : measurableType _ := rT(*measurableTypeR rT*). +Let R : measurableType _ := measurableTypeR rT. Hypothesis mA : measurable A. Hypothesis finA : mu A < +oo. diff --git a/theories/lebesgue_integral_theory/radon_nikodym.v b/theories/lebesgue_integral_theory/radon_nikodym.v old mode 100755 new mode 100644 diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v old mode 100755 new mode 100644 index 03e60c5cbd..71977785e5 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -6,7 +6,6 @@ From mathcomp Require Import boolp classical_sets functions cardinality fsbigop. From mathcomp Require Import reals real_interval topology ereal. From mathcomp Require Import normedtype sequences esum measure. From mathcomp Require Import real_measure numfun realfun. -From mathcomp Require Import borel_hierarchy. (**md**************************************************************************) (* # Simple functions *) @@ -61,6 +60,7 @@ Reserved Notation "{ 'sfun' aT >-> T }" Reserved Notation "[ 'sfun' 'of' f ]" (at level 0, format "[ 'sfun' 'of' f ]"). +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -73,22 +73,20 @@ Local Open Scope ring_scope. Module HBSimple. Import MeasurableR. -HB.structure Definition SimpleFun d (aT : sigmaRingType d) - d' (rT : sigmaRingType d') := - {f of @isMeasurableFun d d' aT rT f & @FiniteImage aT rT f}. +HB.structure Definition SimpleFun d (aT : sigmaRingType d) (rT : realType) := + {f of @isMeasurableFun d _ aT rT f & @FiniteImage aT rT f}. End HBSimple. -Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ aT _ T) : form_scope. +Notation "{ 'sfun' aT >-> T }" := (@HBSimple.SimpleFun.type _ aT T) : form_scope. Notation "[ 'sfun' 'of' f ]" := [the {sfun _ >-> _} of f] : form_scope. Module HBNNSimple. Import HBSimple. -Import MeasurableR. HB.structure Definition NonNegSimpleFun d (aT : sigmaRingType d) (rT : realType) := - {f of @SimpleFun d aT _ rT f & @NonNegFun aT rT f}. + {f of @SimpleFun d _ _ f & @NonNegFun aT rT f}. End HBNNSimple. @@ -96,8 +94,9 @@ Notation "{ 'nnsfun' aT >-> T }" := (@HBNNSimple.NonNegSimpleFun.type _ aT%type Notation "[ 'nnsfun' 'of' f ]" := [the {nnsfun _ >-> _} of f] : form_scope. Section sfun_pred. -Context {d} {aT : sigmaRingType d} {d'} {bT : sigmaRingType d'}. -Definition sfun : {pred _ -> _} := [predI @mfun _ _ aT bT & fimfun]. +Context {d} {aT : sigmaRingType d} {rT : realType}. +Import MeasurableR. +Definition sfun : {pred _ -> _} := [predI @mfun _ _ aT rT & fimfun]. Definition sfun_key : pred_key sfun. Proof. exact. Qed. Canonical sfun_keyed := KeyedPred sfun_key. Lemma sub_sfun_mfun : {subset sfun <= mfun}. Proof. by move=> x /andP[]. Qed. @@ -105,18 +104,20 @@ Lemma sub_sfun_fimfun : {subset sfun <= fimfun}. Proof. by move=> x /andP[]. Qed End sfun_pred. Section sfun. -Context {d} {aT : measurableType d} {d'} {rT : sigmaRingType d'}. +Context {d} {aT : measurableType d} {rT : realType}. Notation T := {sfun aT >-> rT}. -Notation sfun := (@sfun d aT d' rT). +Notation sfun := (@sfun _ aT rT). Section Sub. Context (f : aT -> rT) (fP : f \in sfun). -Import HBSimple. +Import MeasurableR. Definition sfun_Sub1_subproof := - @isMeasurableFun.Build d d' aT rT f (set_mem (sub_sfun_mfun fP)). + @isMeasurableFun.Build d _ aT rT f (set_mem (sub_sfun_mfun fP)). #[local] HB.instance Definition _ := sfun_Sub1_subproof. Definition sfun_Sub2_subproof := @FiniteImage.Build aT rT f (set_mem (sub_sfun_fimfun fP)). +Import HBSimple. + #[local] HB.instance Definition _ := sfun_Sub2_subproof. Definition sfun_Sub := [sfun of f]. End Sub. @@ -138,10 +139,12 @@ Proof. by []. Qed. HB.instance Definition _ := isSub.Build _ _ T sfun_rect sfun_valP. Lemma sfuneqP (f g : {sfun aT >-> rT}) : f = g <-> f =1 g. -Proof. by split=> [->//|fg]; exact/val_inj/funext. Qed. +Proof. by split=> [->//|fg]; apply/val_inj/funext. Qed. HB.instance Definition _ := [Choice of {sfun aT >-> rT} by <:]. +Import MeasurableR. + (* NB: already in cardinality.v *) HB.instance Definition _ x : @FImFun aT rT (cst x) := FImFun.on (cst x). @@ -152,9 +155,9 @@ Lemma cst_sfunE x : @cst_sfun x =1 cst x. Proof. by []. Qed. End sfun. (* a better way to refactor function stuffs *) -Lemma fctD (T : Type) (N : nmodType) (f g : T -> N) : f + g = f \+ g. +Lemma fctD (T : Type) (K : pzRingType) (f g : T -> K) : f + g = f \+ g. Proof. by []. Qed. -Lemma fctN (T : Type) (N : zmodType) (f : T -> N) : - f = \- f. +Lemma fctN (T : Type) (K : pzRingType) (f : T -> K) : - f = \- f. Proof. by []. Qed. Lemma fctM (T : Type) (K : pzRingType) (f g : T -> K) : f * g = f \* g. Proof. by []. Qed. @@ -166,15 +169,14 @@ Definition fctWE := (fctD, fctN, fctM, fctZ). Section ring. Context d (aT : measurableType d) (rT : realType). -Import MeasurableR. -Lemma sfun_subring_closed : subring_closed (@sfun d aT _ rT). +Lemma sfun_subring_closed : subring_closed (@sfun d aT rT). Proof. by split=> [|f g|f g]; rewrite ?inE/= ?rpred1//; move=> /andP[/= mf ff] /andP[/= mg fg]; rewrite !(rpredB, rpredM). Qed. -HB.instance Definition _ := GRing.isSubringClosed.Build _ (@sfun d aT _ rT) +HB.instance Definition _ := GRing.isSubringClosed.Build _ sfun sfun_subring_closed. HB.instance Definition _ := [SubChoice_isSubComPzRing of {sfun aT >-> rT} by <:]. @@ -182,8 +184,18 @@ Implicit Types (f g : {sfun aT >-> rT}). Import HBSimple. +Lemma sfun0 : (0 : {sfun aT >-> rT}) =1 cst 0. Proof. by []. Qed. Lemma sfun1 : (1 : {sfun aT >-> rT}) =1 cst 1. Proof. by []. Qed. +Lemma sfunN f : - f =1 \- f. Proof. by []. Qed. +Lemma sfunD f g : f + g =1 f \+ g. Proof. by []. Qed. +Lemma sfunB f g : f - g =1 f \- g. Proof. by []. Qed. Lemma sfunM f g : f * g =1 f \* g. Proof. by []. Qed. +Lemma sfun_sum I r (P : {pred I}) (f : I -> {sfun aT >-> rT}) (x : aT) : + (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. +Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. +Lemma sfun_prod I r (P : {pred I}) (f : I -> {sfun aT >-> rT}) (x : aT) : + (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. +Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. Lemma sfunX f n : f ^+ n =1 (fun x => f x ^+ n). Proof. by move=> x; elim: n => [|n IHn]//; rewrite !exprS sfunM/= IHn. Qed. @@ -194,165 +206,20 @@ HB.instance Definition _ f g := MeasurableFun.copy (\- f) (- f). HB.instance Definition _ f g := MeasurableFun.copy (f \- g) (f - g). HB.instance Definition _ f g := MeasurableFun.copy (f \* g) (f * g). +Import HBSimple. + (* TODO: mv to `measurable_realfun.v`? *) HB.instance Definition _ (D : set aT) (mD : measurable D) : @FImFun aT rT (mindic _ mD) := FImFun.on (mindic _ mD). Definition indic_sfun (D : set aT) (mD : measurable D) : {sfun aT >-> rT} := mindic rT mD. -End ring. +HB.instance Definition _ k f := MeasurableFun.copy (k \o* f) (f * cst_sfun k). +Definition scale_sfun k f : {sfun aT >-> rT} := k \o* f. +End ring. Arguments indic_sfun {d aT rT} _. -Section sfun_lmodType. -Context d (aT : measurableType d) (R : realType) (N : normedModType R). - -HB.instance Definition _ (V : normedModType R) := GRing.Lmodule.on (borel_type V). - -Import MeasurableNormedModuleOpen. -Import HBSimple. - -Lemma mem_sfun_comp_pair (U V W : normedModType R) (f : {sfun aT >-> U}) - (g : {sfun aT >-> V}) (h : U * V -> W) : - (fun x => h (f x, g x)) \in @sfun _ aT _ W. -Proof. -rewrite inE; apply/andP; split; rewrite inE/=. - move=> _ Y mY; rewrite setTI. - rewrite (_ : _ @^-1` Y = - \bigcup_(a in range f) (\bigcup_(b in range g) - ((f @^-1` [set a] `&` g @^-1` [set b]) `&` [set _ | Y (h (a, b))]))). - apply/seteqP; split=> [x/= Yfg|x [a _] [b _] [[/= <- <-]]//]. - by exists (f x); [exists x|exists (g x); [exists x|]]. - apply: fin_bigcup_measurable; first exact: fimfunP. - move=> a _; apply: fin_bigcup_measurable; first exact: fimfunP. - move=> b _; apply: measurableI; last first. - have [Yhab|Yhab] := pselect (Y (h (a, b))). - by rewrite (_ : [set _ | _] = setT); - [apply/seteqP; split|exact: measurableT]. - rewrite (_ : [set _ | _] = set0); last exact: measurable0. - by apply/seteqP; split. - apply: measurableI. - exact: (measurable_funPTI f (measurable_set1 a)). - exact: (measurable_funPTI g (measurable_set1 b)). -apply: (sub_finite_set (B := h @` (range f `*` range g))). - by move=> _ [x _ <-]/=; exists (f x, g x) => //; split; exists x. -exact/finite_image/finite_setX/fimfunP. -Qed. - -Lemma sfun_submod_closed (V : normedModType R) : - submod_closed (@sfun _ aT _ (borel_type V)). -Proof. -split=> [|k f g sf sg]; first exact: (valP (cst_sfun (0 : V))). -exact: (mem_sfun_comp_pair (sfun_Sub sf) (sfun_Sub sg) (fun t => k *: t.1 + t.2)). -Qed. - -HB.instance Definition _ (V : normedModType R) := - GRing.isSubmodClosed.Build _ _ (@sfun _ aT _ (borel_type V)) - (sfun_submod_closed V). -HB.instance Definition _ (V : normedModType R) := - [SubChoice_isSubLmodule of {sfun aT >-> V} by <:]. - -Implicit Types (f g : {sfun aT >-> N} : lmodType _). - -Lemma sfun0' : (0 : {sfun aT >-> N} : lmodType _) =1 cst 0. Proof. by []. Qed. -Lemma sfunN f : - f =1 \- f. Proof. by []. Qed. -Lemma sfunD f g : f + g =1 f \+ g. Proof. by []. Qed. -Lemma sfunB f g : f - g =1 f \- g. Proof. by []. Qed. -Lemma sfunZ k f : k *: f =1 k \*: f. Proof. by []. Qed. -Lemma sfun_sum I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : - (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. -Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. -Lemma sfun_prod I r (P : {pred I}) (f : I -> {sfun aT >-> N} : lmodType _) (x : aT) : - (\sum_(i <- r | P i) f i) x = \sum_(i <- r | P i) f i x. -Proof. by elim/big_rec2: _ => //= i y ? Pi <-. Qed. - -HB.instance Definition _ f g := MeasurableFun.copy (f \+ g) (f + g). -HB.instance Definition _ f g := MeasurableFun.copy (\- f) (- f). -HB.instance Definition _ f g := MeasurableFun.copy (f \- g) (f - g). -HB.instance Definition _ k f := MeasurableFun.copy (k \*: f) (k *: f). - -Import MeasurableR. -Lemma sfun0r : (0 : {sfun aT >-> R}) =1 cst 0. Proof. by []. Qed. -(* -Lemma sfun0m {V : normedModType R} : (0 : {sfun aT >-> V}) =1 cst 0. -*) - -End sfun_lmodType. - -(* This could be moved elsewhere *) -Section indic_lmod. -Context {T : Type} {K : pzRingType} {L : lmodType K}. - -Definition indic_lmod (A : set T) (z : L) := ( *:%R^~ z) \o \1_A. - -Lemma indic_lmodE A z : indic_lmod A z = (fun x => if x \in A then z else 0). -Proof. -by apply/funext=> x; rewrite/indic_lmod/= indicE; -case: ifPn=> _ /=; rewrite ?scale0r ?scale1r. -Qed. - -Lemma image_indic_lmod_sub A z D : (indic_lmod A z) @` D `<=` [set 0;z]. -Proof. -rewrite -image_comp; apply: (subset_trans (image_subset ( *:%R ^~ z) _)); - first exact: image_indic_sub. -move=> y /= [x [->|->]]; rewrite ?scale0r ?scale1r=> ->; first by left. by right. -Qed. - -Lemma preimage_indic_lmod A (B : set L) (z : L) : - (indic_lmod A z) @^-1` B = if z \in B then if 0 \in B then [set: T] else A - else if 0 \in B then ~` A else set0. -Proof. -rewrite comp_preimage preimage_indic. by do 4 (case: ifPn => [|]); - rewrite ?in_setE ?notin_setE //= ?scale0r ?scale1r. -Qed. - -Lemma indic_lmod_fimfun_subproof (A : set T) (z : L) : -@FiniteImage T L (indic_lmod A z). Proof. by []. Qed. - -HB.instance Definition _ A z := @indic_lmod_fimfun_subproof A z. - -End indic_lmod. - -Section mindic_lmod. -Context d {aT : measurableType d} {rT : realType} {nT : normedModType rT}. - -Definition mindic_lmod (A : set aT) (mA : measurable A) := - @indic_lmod aT rT nT A. - -Import MeasurableNormedModule. - -Lemma measurable_indic_lmod {D} (A : set aT) (mA : d.-measurable A) (z:nT) : -measurable_fun D (mindic_lmod mA z). -Proof. -move=> mD Y mY; rewrite preimage_indic_lmod //. -do 2 (case: ifP => _); apply: measurableI=>//; exact: measurableC. -Qed. - -Import HBSimple. - -HB.instance Definition _ A mA z := @isMeasurableFun.Build _ _ aT nT - (mindic_lmod mA z) (@measurable_indic_lmod [set: aT] A mA z). - -HB.instance Definition _ (D : set aT) (mD : measurable D) (z : nT) : - @FImFun aT nT (mindic_lmod mD z) := FImFun.on (mindic_lmod mD z). - -Definition mindic_lmod_sfun (D : set aT) (mD : measurable D) (z : nT) : - {sfun aT >-> nT} := mindic_lmod mD z. - -End mindic_lmod. - -Section fimfunE_lmod. -Context {T : Type} {K : pzRingType} {L : lmodType K} (f : {fimfun T >-> L}). - -Lemma fimfunE_lmod (x : T) : - f x = \sum_(y \in range f) indic_lmod (f @^-1` [set y]) y x. -Proof. -rewrite (fsbigD1 (f x))// /= indic_lmodE mem_set// fsbig1 ?addr0//. -by move=> y [fy /= /nesym yfx]; rewrite indic_lmodE memNset ?mulr0. -Qed. - -End fimfunE_lmod. - Lemma preimage_nnfun0 T (R : realDomainType) (f : {nnfun T >-> R}) t : t < 0 -> f @^-1` [set t] = set0. Proof. @@ -368,12 +235,11 @@ by split=> [z/= <-|z/= ->]; rewrite [x * _]mulrC (mulfK, divfK). Qed. Section simple_bounded. -Context d (T : sigmaRingType d) (R : realType) (N : normedModType R). +Context {d} {T : sigmaRingType d} {R : realType}. Import HBSimple. -Import MeasurableR. -Lemma simple_bounded (f : {sfun T >-> N}) : bounded_fun f. +Lemma simple_bounded (f : {sfun T >-> R}) : bounded_fun f. Proof. have /finite_seqP[r fr] := fimfunP f. exists (fine (\big[maxe/-oo%E]_(i <- r) `|i|%:E)). @@ -465,8 +331,6 @@ Definition proj_nnsfun d (T : measurableType d) (R : realType) mul_nnsfun f (indic_nnsfun R mA). Section mrestrict. - -Import HBSimple. Import HBNNSimple. Lemma mrestrict d (T : measurableType d) (R : realType) (f : {nnsfun T >-> R}) diff --git a/theories/measure_theory/counting_measure.v b/theories/measure_theory/counting_measure.v old mode 100755 new mode 100644 diff --git a/theories/measure_theory/dirac_measure.v b/theories/measure_theory/dirac_measure.v old mode 100755 new mode 100644 diff --git a/theories/measure_theory/measurable_function.v b/theories/measure_theory/measurable_function.v old mode 100755 new mode 100644 diff --git a/theories/measure_theory/measurable_structure.v b/theories/measure_theory/measurable_structure.v old mode 100755 new mode 100644 diff --git a/theories/measure_theory/measure.v b/theories/measure_theory/measure.v old mode 100755 new mode 100644 diff --git a/theories/measure_theory/measure_extension.v b/theories/measure_theory/measure_extension.v old mode 100755 new mode 100644 diff --git a/theories/measure_theory/measure_function.v b/theories/measure_theory/measure_function.v old mode 100755 new mode 100644 diff --git a/theories/measure_theory/measure_negligible.v b/theories/measure_theory/measure_negligible.v old mode 100755 new mode 100644 diff --git a/theories/measure_theory/probability_measure.v b/theories/measure_theory/probability_measure.v old mode 100755 new mode 100644 diff --git a/theories/measure_theory/signed_measure.v b/theories/measure_theory/signed_measure.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/complete_normed_module.v b/theories/normedtype_theory/complete_normed_module.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/ereal_normedtype.v b/theories/normedtype_theory/ereal_normedtype.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/matrix_normedtype.v b/theories/normedtype_theory/matrix_normedtype.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/normed_module.v b/theories/normedtype_theory/normed_module.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/normedtype.v b/theories/normedtype_theory/normedtype.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/num_normedtype.v b/theories/normedtype_theory/num_normedtype.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/pseudometric_normed_Zmodule.v b/theories/normedtype_theory/pseudometric_normed_Zmodule.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/tvs.v b/theories/normedtype_theory/tvs.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/urysohn.v b/theories/normedtype_theory/urysohn.v old mode 100755 new mode 100644 diff --git a/theories/normedtype_theory/vitali_lemma.v b/theories/normedtype_theory/vitali_lemma.v old mode 100755 new mode 100644 diff --git a/theories/numfun.v b/theories/numfun.v old mode 100755 new mode 100644 diff --git a/theories/pi_irrational.v b/theories/pi_irrational.v old mode 100755 new mode 100644 diff --git a/theories/probability_theory/bernoulli_distribution.v b/theories/probability_theory/bernoulli_distribution.v old mode 100755 new mode 100644 diff --git a/theories/probability_theory/beta_distribution.v b/theories/probability_theory/beta_distribution.v old mode 100755 new mode 100644 diff --git a/theories/probability_theory/binomial_distribution.v b/theories/probability_theory/binomial_distribution.v old mode 100755 new mode 100644 diff --git a/theories/probability_theory/exponential_distribution.v b/theories/probability_theory/exponential_distribution.v old mode 100755 new mode 100644 diff --git a/theories/probability_theory/independence.v b/theories/probability_theory/independence.v old mode 100755 new mode 100644 diff --git a/theories/probability_theory/normal_distribution.v b/theories/probability_theory/normal_distribution.v old mode 100755 new mode 100644 index 62fae40ea1..a2df3f5dc2 --- a/theories/probability_theory/normal_distribution.v +++ b/theories/probability_theory/normal_distribution.v @@ -588,6 +588,7 @@ Section normal_prob_lemmas. Context {R : realType}. Local Notation mu := lebesgue_measure. Local Open Scope ereal_scope. + Import MeasurableR. Lemma integral_normal_prob (m s : R) f U : measurable U -> diff --git a/theories/probability_theory/poisson_distribution.v b/theories/probability_theory/poisson_distribution.v old mode 100755 new mode 100644 diff --git a/theories/probability_theory/probability.v b/theories/probability_theory/probability.v old mode 100755 new mode 100644 diff --git a/theories/probability_theory/random_variable.v b/theories/probability_theory/random_variable.v old mode 100755 new mode 100644 index bcd8f48fef..efebbbfa82 --- a/theories/probability_theory/random_variable.v +++ b/theories/probability_theory/random_variable.v @@ -381,7 +381,7 @@ Context {R : realType} (f : cumulativeBounded (0:R) (1:R)). Local Open Scope measure_display_scope. Import MeasurableR. -Let idTR : (*measurableTypeR*) R -> R := idfun. +Let idTR : measurableTypeR R -> R := idfun. #[local] HB.instance Definition _ := @isMeasurableFun.Build _ _ _ _ idTR (@measurable_id _ _ setT). @@ -410,10 +410,10 @@ End cdf_of_lebesgue_stieltjes_measure. Section lebesgue_stieltjes_measure_of_cdf. Import MeasurableR. -Context {R : realType} (P : probability ((*measurableTypeR*) R) R). +Context {R : realType} (P : probability (measurableTypeR R) R). Local Open Scope measure_display_scope. -Let idTR : (*measurableTypeR*) R -> R := idfun. +Let idTR : measurableTypeR R -> R := idfun. #[local] HB.instance Definition _ := @isMeasurableFun.Build _ _ _ _ idTR (@measurable_id _ _ setT). @@ -626,7 +626,7 @@ Let mu : {measure set _ -> \bar R} := @lebesgue_measure R. Lemma ge0_expectation_ccdf (X : {RV P >-> R}) : (forall x, 0 <= X x)%R -> 'E_P[X] = \int[mu]_(r in `[0%R, +oo[) ccdf X r. Proof. -pose GR := (*measurableTypeR*) R. +pose GR := measurableTypeR R. pose distrX := distribution P X. pose D : set R := `[0%R, +oo[%classic. move=> X_ge0. diff --git a/theories/probability_theory/uniform_distribution.v b/theories/probability_theory/uniform_distribution.v old mode 100755 new mode 100644 diff --git a/theories/real_measure/lebesgue_measure.v b/theories/real_measure/lebesgue_measure.v old mode 100755 new mode 100644 index dab6306645..246eff542f --- a/theories/real_measure/lebesgue_measure.v +++ b/theories/real_measure/lebesgue_measure.v @@ -8,8 +8,7 @@ From mathcomp Require Import boolp classical_sets functions cardinality fsbigop reals. From mathcomp Require Import topology ereal numfun normedtype sequences esum measure. -From mathcomp Require Export normedtype_measurable lebesgue_stieltjes_measure - measurable_realfun. +From mathcomp Require Export lebesgue_stieltjes_measure measurable_realfun. (**md**************************************************************************) (* # Lebesgue Measure *) @@ -574,7 +573,8 @@ apply: (@measure_semi_sigma_additive _ _ _ (@lebesgue_measure R) apply: measurable_image_fine. rewrite -XX'Fn. apply: measurableU. - exact: measurable_image_EFin. + apply: measurable_image_EFin. + by rewrite RGenOpenSets.measurableE/= in mX. by case: mX' => //; exact: measurableU. - move=> i j _ _ [x [[a [Fia aoo ax] [b [Fjb boo] bx]]]]. move: tF => /(_ i j Logic.I Logic.I); apply. @@ -591,16 +591,17 @@ apply: (@measure_semi_sigma_additive _ _ _ (@lebesgue_measure R) + by rewrite not_orP => -[]/(_ erefl). + by rewrite not_orP => -[]/(_ erefl). - move: mUF. - rewrite {1}/measurable /emeasurable /= => -[X mX [Y []]] {Y}. + rewrite {1}/measurable /emeasurable /= => -[X mX [Y []]] {Y}; + have moX : measurable X by rewrite -RGenOpenSets.measurableE. + rewrite setU0 => h. - rewrite [X in measurable X](_ : _ = X)// predeqE => r; split => [|Xr]. + rewrite [X in measurable X](_ : _ = X) // predeqE => r; split => [|Xr]. move=> -[n _ [x [Fnx xoo <-{r}]]]. have : (\bigcup_n F n) x by exists n. by rewrite -h => -[x' Xx' <-]. have [n _ Fnr] : (\bigcup_n F n) r%:E by rewrite -h; exists r. by exists n => //; exists r%:E => //; split => // -[]. + move=> h. - rewrite [X in measurable X](_ : _ = X)// predeqE => r; split => [|Xr]. + rewrite [X in measurable X](_ : _ = X) // predeqE => r; split => [|Xr]. move=> -[n _ [x [Fnx xoo <-]]]. have : (\bigcup_n F n) x by exists n. by rewrite -h => -[[x' Xx' <-//]|xoo']; move/not_orP : xoo => -[]. @@ -608,14 +609,14 @@ apply: (@measure_semi_sigma_additive _ _ _ (@lebesgue_measure R) by exists n => //; exists r%:E => //; split => // -[]. + (* NB: almost the same as the previous one, factorize?*) move=> h. - rewrite [X in measurable X](_ : _ = X)// predeqE => r; split => [|Xr]. + rewrite [X in measurable X](_ : _ = X) // predeqE => r; split => [|Xr]. move=> -[n _ [x [Fnx xoo <-]]]. have : (\bigcup_n F n) x by exists n. by rewrite -h => -[[x' Xx' <-//]|xoo']; move/not_orP : xoo => -[]. have [n _ Fnr] : (\bigcup_n F n) r%:E by rewrite -h; left; exists r. by exists n => //; exists r%:E => //; split => // -[]. + move=> h. - rewrite [X in measurable X](_ : _ = X)// predeqE => r; split => [|Xr]. + rewrite [X in measurable X](_ : _ = X) // predeqE => r; split => [|Xr]. move=> -[n _ [x [Fnx xoo <-]]]. have : (\bigcup_n F n) x by exists n. by rewrite -h => -[[x' Xx' <-//]|]. diff --git a/theories/real_measure/lebesgue_stieltjes_measure.v b/theories/real_measure/lebesgue_stieltjes_measure.v old mode 100755 new mode 100644 index b2195deb50..0ddbb8bffd --- a/theories/real_measure/lebesgue_stieltjes_measure.v +++ b/theories/real_measure/lebesgue_stieltjes_measure.v @@ -1,12 +1,12 @@ (* mathcomp analysis (c) 2026 Inria and AIST. License: CeCILL-C. *) From HB Require Import structures. -From mathcomp Require Import boot order finmap ssralg ssrnum ssrint algebra interval. +From mathcomp Require Import boot order finmap ssralg ssrnum ssrint interval. From mathcomp Require Import interval_inference archimedean. #[warning="-warn-library-file-internal-analysis"] From mathcomp Require Import unstable. From mathcomp Require Import boolp classical_sets fsbigop cardinality. From mathcomp Require Import reals ereal topology normedtype sequences esum - measure realfun normedtype_measurable. + measure realfun. (**md**************************************************************************) (* # Lebesgue Stieltjes Measure *) @@ -30,7 +30,7 @@ From mathcomp Require Import reals ereal topology normedtype sequences esum (* The HB class is CumulativeBounded. *) (* ``` *) (* *) -(* The modules RGenOInfty, RGenInftyO, RGenCInfty, RGenItvoo, ROpenSets *) +(* The modules RGenOInfty, RGenInftyO, RGenCInfty, RGenOpens, ROpenSets *) (* provide proofs of equivalence between the sigma-algebra generated by *) (* open-closed intervals and the sigma-algebras generated by open rays, *) (* closed rays, open intervals, and open sets. *) @@ -43,6 +43,7 @@ From mathcomp Require Import reals ereal topology normedtype sequences esum (* x and y are real numbers *) (* R.-ocitv == display for ocitv_type R *) (* R.-ocitv.-measurable == semiring of sets of open-closed intervals *) +(* open_type R == alias for R : realType *) (* R.-open := sigma_display (@open R) *) (* R.-open.-measurable == sigma-algebra generated by open sets *) (* ``` *) @@ -53,7 +54,9 @@ From mathcomp Require Import reals ereal topology normedtype sequences esum (* measurableTypeR R == measurableType generated by *) (* R.-ocitv or R.-open *) (* @lebesgue_display R == (measure_)display for the sigma-algebra *) -(* generated by R.-open *) +(* generated by R.-ocitv or R.-open *) +(* @measurableR R == measurable sets generated by *) +(* R.-ocitv or R.-open *) (* ``` *) (* The module `MeasurableR` contains the default sigma-algebra, which is *) (* `MeasurableRopen`. The latter contains in addition: *) @@ -164,11 +167,11 @@ Definition ocitv := [set `]x.1, x.2]%classic | x in [set: R * R]]. Lemma is_ocitv a b : ocitv `]a, b]%classic. Proof. by exists (a, b); split => //=; rewrite in_itv/= andbT. Qed. -#[local] Hint Extern 0 (ocitv _) => solve [apply: is_ocitv] : core. +Hint Extern 0 (ocitv _) => solve [apply: is_ocitv] : core. Lemma ocitv0 : ocitv set0. Proof. by exists (1, 0); rewrite //= set_itv_ge ?bnd_simp//= ltr10. Qed. -#[local] Hint Resolve ocitv0 : core. +Hint Resolve ocitv0 : core. Lemma ocitvP X : ocitv X <-> X = set0 \/ exists2 x, x.1 < x.2 & X = `]x.1, x.2]%classic. Proof. @@ -231,40 +234,41 @@ Context {R : realType}. Definition measurableTypeR := g_sigma_algebraType (@ocitv R). -Let ocitv_lebesgue_display : measure_display := (@ocitv R).-sigma. +Definition lebesgue_display : measure_display := (@ocitv R).-sigma. -Let measurableR : set_system R := (@ocitv R).-sigma.-measurable. +Definition measurableR : set_system R := (@ocitv R).-sigma.-measurable. -HB.instance Definition _ : Measurable ocitv_lebesgue_display measurableTypeR := +HB.instance Definition _ : Measurable lebesgue_display measurableTypeR := Measurable.on measurableTypeR. (* Presumably it is safe to use NFI here because morally R is unique and nothing else can be used here *) #[non_forgetful_inheritance] HB.instance Definition _ := Measurable.copy R measurableTypeR. -Lemma ocitv_measurable_set1 (r : R) : measurable [set r]. +Lemma measurable_set1 (r : R) : measurable [set r]. Proof. rewrite set1_bigcap_oc; apply: bigcap_measurable => // k _. by apply: sub_sigma_algebra; exact/is_ocitv. Qed. -#[local] Hint Resolve ocitv_measurable_set1 : core. +#[local] Hint Resolve measurable_set1 : core. -Lemma ocitv_measurable_itv (i : interval R) : measurable [set` i]. +Lemma measurable_itv (i : interval R) : measurable [set` i]. Proof. have moc (a b : R) : measurable `]a, b]. - by apply: sub_sigma_algebra; exact: is_ocitv. + by apply: sub_sigma_algebra; apply: is_ocitv. have mopoo (x : R) : measurable `]x, +oo[. by rewrite itv_bndy_bigcup_BRight; exact: bigcup_measurable. have mnooc (x : R) : measurable `]-oo, x]. by rewrite -setCitvr; exact/measurableC. -have ooE (a b : R) : `]a, b[%classic = `]a, b] `\ b by rewrite setDitv1r. +have ooE (a b : R) : `]a, b[%classic = `]a, b] `\ b. + by rewrite setDitv1r. have moo (a b : R) : measurable `]a, b[ by rewrite ooE; exact: measurableD. have mcc (a b : R) : measurable `[a, b]. case: (boolP (a <= b)) => ab; last by rewrite set_itv_ge. - by rewrite -setU_1itvob//; exact/measurableU. + by rewrite -setU_1itvob//; apply/measurableU. have mco (a b : R) : measurable `[a, b[. case: (boolP (a < b)) => ab; last by rewrite set_itv_ge. - by rewrite -setU_1itvob//; exact/measurableU. + by rewrite -setU_1itvob//; apply/measurableU. have oooE (b : R) : `]-oo, b[%classic = `]-oo, b] `\ b. by rewrite setDitv1r. case: i => [[[] a|[]] [[] b|[]]] => //; do ?by rewrite set_itv_ge. @@ -275,6 +279,13 @@ Qed. End measurableRocitv. Arguments measurableTypeR : clear implicits. +#[global] +Hint Extern 0 (measurable (_ @^-1` [set _])) => + solve [apply: measurable_funPTI; exact: measurable_set1] : core. +#[global] +Hint Extern 0 (measurable [set _]) => solve [apply: measurable_set1] : core. +#[global] +Hint Extern 0 (measurable [set` _] ) => exact: measurable_itv : core. End MeasurableRocitv. Module RGenOInfty. @@ -306,8 +317,7 @@ Proof. rewrite eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. by move=> I [x _ <-]; exact: measurable_itv_bounded. -apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -exact: MeasurableRocitv.ocitv_measurable_itv. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. Qed. End rgenoinfty. @@ -343,8 +353,7 @@ Proof. rewrite eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. by move=> I [x _ <-]; exact: measurable_itv_bounded. -apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -exact: MeasurableRocitv.ocitv_measurable_itv. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. Qed. End rgeninftyo. @@ -379,14 +388,13 @@ Proof. rewrite eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. by move=> I [x _ <-]; exact: measurable_itv_bounded. -apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -exact: MeasurableRocitv.ocitv_measurable_itv. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. Qed. End rgencinfty. End RGenCInfty. -Module RGenItvoo. +Module RGenOpens. Section rgenopens. Context (R : realType). Implicit Types x y z : R. @@ -429,12 +437,11 @@ Proof. rewrite eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. by move=> I [x _ <-]; exact: measurable_itv_bounded. -apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. -exact: MeasurableRocitv.ocitv_measurable_itv. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. Qed. End rgenopens. -End RGenItvoo. +End RGenOpens. Module RGenOpenSets. Section rgenopensets. @@ -444,49 +451,98 @@ Import MeasurableRocitv. Lemma measurableE : (@ocitv R).-sigma.-measurable = open.-sigma.-measurable. Proof. -rewrite eqEsubset; split; [rewrite RGenItvoo.measurableE|]; +rewrite eqEsubset; split; [rewrite RGenOpens.measurableE|]; apply: sigma_algebra_subl=> U. -- by rewrite /RGenItvoo.G/= => -[a [b ->]]; exact: sub_sigma_algebra. +- by rewrite /RGenOpens.G/= => -[a [b ->]]; exact: sub_sigma_algebra. - move=> oU; rewrite (open_disjoint_itv_bigcup oU). apply: sigma_algebra_bigcup => k. have /is_intervalP -> := @open_disjoint_itv_is_interval _ U oU k. - exact: ocitv_measurable_itv. + exact: measurable_itv. Qed. End rgenopensets. End RGenOpenSets. -Module MeasurableROpen. -Section measurableReal. +Section open. Context {R : realType}. -Import numFieldNormedType.Exports. -Import MeasurableNormedModule. +Definition open_type : Type := R. + +HB.instance Definition _ := Pointed.on open_type. + +Let measurable : set_system R := @measurable _ (g_sigma_algebraType (@open R)). + +Let measurable0 : measurable set0. Proof. exact: measurable0. Qed. + +Let measurableC A : measurable A -> measurable (~` A). +Proof. by move=> /measurableC. Qed. + +Let measurable_bigcup (F : (set R)^nat) : (forall i, measurable (F i)) -> + measurable (\bigcup_i (F i)). +Proof. move=> mF; exact: bigcupT_measurable. Qed. + +HB.instance Definition _ := + @isMeasurable.Build (sigma_display (@open R)) + open_type measurable measurable0 measurableC measurable_bigcup. -Definition lebesgue_display : measure_display := @borel_display R R. +End open. +Notation "R .-open" := (sigma_display (@open R)) : measure_display_scope. +Notation "R .-open.-measurable" := (measurable : set_system (@open_type R)) : + classical_set_scope. + +Module MeasurableRopen. +Section measurableRopen. +Context {R : realType}. + +Definition measurableTypeR := g_sigma_algebraType (@open R). + +Definition lebesgue_display : measure_display := R.-open. + +Definition measurableR : set_system R := R.-open.-measurable. + +HB.instance Definition _ : Measurable lebesgue_display measurableTypeR := + Measurable.on measurableTypeR. +(* Presumably it is safe to use NFI here because morally R is unique + and nothing else can be used here *) #[non_forgetful_inheritance] -HB.instance Definition _ := Measurable.copy R (g_sigma_algebraType (@open R)). +HB.instance Definition _ := Measurable.copy R measurableTypeR. -Lemma measurable_itv (i : interval R) : measurable [set` i]. +Lemma measurable_set1 (r : R) : measurable [set r]. Proof. -by rewrite -RGenOpenSets.measurableE; exact: MeasurableRocitv.ocitv_measurable_itv. +rewrite set1_bigcap_oo; apply: bigcap_measurable => // k _. +exact: sub_sigma_algebra. Qed. +#[local] Hint Resolve measurable_set1 : core. -End measurableReal. -#[global] Hint Extern 0 (measurable [set` _]) => exact: measurable_itv : core. - -End MeasurableROpen. +Lemma measurable_itv (i : interval R) : measurable [set` i]. +Proof. +have := MeasurableRocitv.measurable_itv i. +rewrite /MeasurableRocitv.lebesgue_display. +by rewrite RGenOpenSets.measurableE. +Qed. -Module MeasurableR. -Export numFieldNormedType.Exports. -Export MeasurableNormedModule. -Export MeasurableROpen. -End MeasurableR. +End measurableRopen. +Arguments measurableTypeR : clear implicits. +#[global] +Hint Extern 0 (measurable (_ @^-1` [set _])) => + solve [apply: measurable_funPTI; exact: measurable_set1] : core. +#[global] +Hint Extern 0 (measurable [set _]) => solve [apply: measurable_set1] : core. +#[global] +Hint Extern 0 (measurable [set` _] ) => exact: measurable_itv : core. + +Lemma measurable_funP1 {d} {aT : measurableType d} {rT : realType} + (f : {mfun aT >-> rT}) D (y : rT) : + measurable D -> measurable (D `&` f @^-1` [set y]). +Proof. by move=> /(measurable_funP f); exact. Qed. +#[deprecated(since="mathcomp-analysis 1.13.0", use=measurable_funP1)] +Notation measurable_sfun_inP := measurable_funP1 (only parsing). +#[global] Hint Extern 0 (measurable (_ `&` _ @^-1` [set _])) => + solve [apply: measurable_funP1; assumption] : core. Section ocitv_measure. -Import MeasurableR. -Context {R : realType} (mu : {measure set R -> \bar R}). +Context {R : realType} (mu : measure (measurableTypeR R) R). Definition ocitv_measure : set (MeasurableRocitv.measurableTypeR R) -> \bar R := mu. @@ -512,6 +568,12 @@ Lemma ocitv_measure_ext A : ocitv_measure A = mu A. Proof. by []. Qed. End ocitv_measure. +End MeasurableRopen. + +Module MeasurableR. +Export MeasurableRopen. +End MeasurableR. + (** The construction of the Lebesgue-Stieltjes measure actually starts here. *) Section wlength. @@ -722,6 +784,8 @@ HB.instance Definition _ (f : cumulative R R) := (wlength_ge0 f) (wlength_semi_additive f). +Hint Extern 0 (measurable _) => solve [apply: is_ocitv] : core. + Lemma cumulative_content_sub_fsum (f : cumulative R R) (D : {fset nat}) a0 b0 (a b : nat -> R) : (forall i, i \in D -> a i <= b i) -> `]a0, b0] `<=` \big[setU/set0]_(i <- D) `]a i, b i]%classic -> @@ -732,8 +796,7 @@ move=> Dab h; have [ab|ab] := leP a0 b0; last first. by rewrite subr_le0 cumulative_is_nondecreasing// ltW. rewrite big_seq sumr_ge0// => i iD. by rewrite subr_ge0 cumulative_is_nondecreasing// Dab. -have mab k : [set` D] k -> R.-ocitv.-measurable `]a k, b k]%classic. - by move=> ?; exact: is_ocitv. +have mab k : [set` D] k -> R.-ocitv.-measurable `]a k, b k]%classic by []. move: h; rewrite -bigcup_fset. move/(content_sub_fsum (wlength f) (finite_fset D) mab (is_ocitv a0 b0)) => /=. rewrite wlength_itv_bnd// -lee_fin => /le_trans; apply. @@ -821,8 +884,8 @@ Proof. exists (fun k => `](- k%:R), k%:R]%classic). apply/esym; rewrite -subTset => /= x _ /=. by exists (Num.bound x); rewrite //= in_itv/= ltrNl ltrNbound ltW// ltr_bound. -move=> k; split; first exact: is_ocitv. -by rewrite wlength_itv /= -EFinB; case: ifP; rewrite ltey. +move=> k; split => //; rewrite wlength_itv /= -EFinB. +by case: ifP; rewrite ltey. Qed. Definition ocitv_lebesgue_stieltjes_measure (f : cumulative R R) := @@ -887,13 +950,13 @@ Let ocitv_lebesgue_stieltjes_measure_unique Proof. move=> muE A mA. apply: measure_extension_unique => //=. - exact: wlength_sigma_finite. -by move=> X mX; rewrite -muE// -measurable_mu_extE. -by rewrite RGenOpenSets.measurableE. +- exact: wlength_sigma_finite. +- by move=> X mX; rewrite -muE// -measurable_mu_extE. +- by rewrite RGenOpenSets.measurableE. Qed. Lemma lebesgue_stieltjes_measure_unique - (mu : {measure set R -> \bar R}) : + (mu : {measure set (MeasurableRopen.measurableTypeR R) -> \bar R}) : (forall X, ocitv X -> lebesgue_stieltjes_measure f X = mu X) -> forall A : set R, measurable A -> lebesgue_stieltjes_measure f A = mu A. Proof. diff --git a/theories/real_measure/measurable_realfun.v b/theories/real_measure/measurable_realfun.v old mode 100755 new mode 100644 index 29eab28fbb..90857b09cf --- a/theories/real_measure/measurable_realfun.v +++ b/theories/real_measure/measurable_realfun.v @@ -7,7 +7,7 @@ From mathcomp Require Import unstable. From mathcomp Require Import boolp classical_sets functions. From mathcomp Require Import reals ereal topology numfun normedtype sequences measure realfun exp. -From mathcomp Require Import lebesgue_stieltjes_measure normedtype_measurable. +From mathcomp Require Import lebesgue_stieltjes_measure. (**md**************************************************************************) (* # Measurable Functions over $\mathbb{R}$ and $\overline{\mathbb{R}}$ *) @@ -45,6 +45,7 @@ From mathcomp Require Import lebesgue_stieltjes_measure normedtype_measurable. (* ``` *) (******************************************************************************) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -185,7 +186,7 @@ End puncture_ereal_itv. Section salgebra_R_ssets. Context {R : realType}. -HB.instance Definition _ := ereal_isMeasurable (@open R). +HB.instance Definition _ := (ereal_isMeasurable (R.-ocitv.-measurable)). (* NB: Until we dropped support for Coq 8.12, we were using HB.instance (\bar (Real.sort R)) (ereal_isMeasurable (@measurable (@itvs_semiRingOfSets R))). @@ -204,7 +205,7 @@ Import MeasurableR. Lemma measurable_image_EFin (A : set R) : measurable A -> measurable (EFin @` A). Proof. -move=> mA; exists A => //. +move=> mA; exists A; first by rewrite RGenOpenSets.measurableE. by exists set0; [constructor|rewrite setU0]. Qed. @@ -223,7 +224,7 @@ Let emeasurable_itv_bndy b (y : \bar R) : measurable [set` Interval (BSide b y) +oo%O]. Proof. move: y => [y| |]. -- exists [set` Interval (BSide b y) +oo%O] => //. +- exists [set` Interval (BSide b y) +oo%O]; first by []. by exists [set +oo%E]; [constructor|rewrite -punct_eitv_bndy]. - by case: b; rewrite ?itv_oyy ?itv_cyy. - case: b; first by rewrite itv_cNyy. @@ -248,24 +249,24 @@ Lemma measurable_image_fine (X : set \bar R) : measurable X -> Proof. case => Y mY [X' [ | <-{X} | <-{X} | <-{X} ]]. - rewrite setU0 => <-{X}. - rewrite [X in measurable X](_ : _ = Y)// predeqE => r; split. + rewrite [X in measurable X](_ : _ = Y) -?RGenOpenSets.measurableE// predeqE => r; split. by move=> [x [[x' Yx' <-{x}/= _ <-//]]]. by move=> Yr; exists r%:E; split => [|[]//]; exists r. -- rewrite [X in measurable X](_ : _ = Y)// predeqE => r; split. +- rewrite [X in measurable X](_ : _ = Y) -?RGenOpenSets.measurableE// predeqE => r; split. move=> [x [[[x' Yx' <- _ <-//]|]]]. by move=> <-; rewrite not_orP => -[]/(_ erefl). by move=> Yr; exists r%:E => //; split => [|[]//]; left; exists r. -- rewrite [X in measurable X](_ : _ = Y)// predeqE => r; split. +- rewrite [X in measurable X](_ : _ = Y) -?RGenOpenSets.measurableE// predeqE => r; split. move=> [x [[[x' Yx' <-{x} _ <-//]|]]]. by move=> ->; rewrite not_orP => -[_]/(_ erefl). by move=> Yr; exists r%:E => //; split => [|[]//]; left; exists r. -- rewrite [X in measurable X](_ : _ = Y)// predeqE => r; split. +- rewrite [X in measurable X](_ : _ = Y) -?RGenOpenSets.measurableE// predeqE => r; split. by rewrite setDUl setDv setU0 => -[_ [[x' Yx' <-]] _ <-]. by move=> Yr; exists r%:E => //; split => [|[]//]; left; exists r. Qed. Lemma measurable_ball (x : R) e : measurable (ball x e). -Proof. by rewrite ball_itv. Qed. +Proof. by rewrite ball_itv -?RGenOpenSets.measurableE//. Qed. Lemma measurable_closed_ball (x : R) r : measurable (closed_ball x r). Proof. @@ -338,165 +339,6 @@ Qed. End measurable_fun_measurable. -Module RGenOInfty. -Section rgenoinfty. -Variable R : realType. -Implicit Types x y z : R. - -Definition G := [set A | exists x, A = `]x, +oo[%classic]. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. -Proof. -case: b; last by apply: sub_sigma_algebra; eexists; reflexivity. -rewrite itvcyEbigcap; apply: bigcapT_measurable => k. -by apply: sub_sigma_algebra; eexists; reflexivity. -Qed. - -Lemma measurable_itv_bounded a b x : a != +oo%O -> - G.-sigma.-measurable [set` Interval a (BSide b x)]. -Proof. -case: a => [a r _|[_|//]]. - by rewrite set_itv_splitD; apply: measurableD => //; - exact: measurable_itv_bnd_infty. -by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -exact: MeasurableRocitv.ocitv_measurable_itv. -Qed. - -End rgenoinfty. -End RGenOInfty. - -Module RGenInftyO. -Section rgeninftyo. -Variable R : realType. -Implicit Types x y z : R. - -Definition G := [set A | exists x, A = `]-oo, x[%classic]. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. -Proof. -case: b; first by apply sub_sigma_algebra; eexists; reflexivity. -rewrite -setCitvr itvoyEbigcup; apply/measurableC/bigcupT_measurable => n. -rewrite -setCitvl; apply: measurableC. -by apply: sub_sigma_algebra; eexists; reflexivity. -Qed. - -Lemma measurable_itv_bounded a b x : a != -oo%O -> - G.-sigma.-measurable [set` Interval (BSide b x) a]. -Proof. -case: a => [a r _|[//|_]]. - by rewrite set_itv_splitD; apply/measurableD => //; - rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. -by rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -exact: MeasurableRocitv.ocitv_measurable_itv. -Qed. - -End rgeninftyo. -End RGenInftyO. - -Module RGenCInfty. -Section rgencinfty. -Variable R : realType. -Implicit Types x y z : R. - -Definition G : set_system R := [set A | exists x, A = `[x, +oo[%classic]. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. -Proof. -case: b; first by apply: sub_sigma_algebra; exists x; rewrite set_itvcy. -rewrite itvoyEbigcup; apply: bigcupT_measurable => k. -by apply: sub_sigma_algebra; eexists; reflexivity. -Qed. - -Lemma measurable_itv_bounded a b y : a != +oo%O -> - G.-sigma.-measurable [set` Interval a (BSide b y)]. -Proof. -case: a => [a r _|[_|//]]. - rewrite set_itv_splitD. - by apply: measurableD; exact: measurable_itv_bnd_infty. -by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -exact: MeasurableRocitv.ocitv_measurable_itv. -Qed. - -End rgencinfty. -End RGenCInfty. - -Module RGenOpens. -Section rgenopens. -Variable R : realType. -Implicit Types x y z : R. - -Definition G := [set A | exists x y, A = `]x, y[%classic]. - -Local Lemma measurable_itvoo x y : G.-sigma.-measurable `]x, y[%classic. -Proof. by apply sub_sigma_algebra; eexists; eexists; reflexivity. Qed. - -Local Lemma measurable_itv_o_infty x : G.-sigma.-measurable `]x, +oo[%classic. -Proof. -rewrite itvbndyEbigcup; apply: bigcupT_measurable => i. -exact: measurable_itvoo. -Qed. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. -Proof. -case: b; last exact: measurable_itv_o_infty. -rewrite itvcyEbigcap; apply: bigcapT_measurable => k. -exact: measurable_itv_o_infty. -Qed. - -Lemma measurable_itv_infty_bnd b x : - G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. -Proof. -by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurable_itv_bounded a x b y : - G.-sigma.-measurable [set` Interval (BSide a x) (BSide b y)]. -Proof. -move: a b => [] []; rewrite -[X in measurable X]setCK setCitv; - apply: measurableC; apply: measurableU; try solve[ - exact: measurable_itv_infty_bnd|exact: measurable_itv_bnd_infty]. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. -exact: MeasurableRocitv.ocitv_measurable_itv. -Qed. - -End rgenopens. -End RGenOpens. - Section erealwithrays. Context {R : realType}. Implicit Types (x y z : \bar R) (r s : R). @@ -602,9 +444,9 @@ rewrite eset1y; apply: bigcapT_measurable => i. by apply: sub_sigma_algebra; exists i%:R. Qed. -Lemma measurableE : emeasurable (@open R) = G.-sigma.-measurable. +Lemma measurableE : emeasurable (@ocitv R) = G.-sigma.-measurable. Proof. -rewrite /emeasurable -RGenOpenSets.measurableE; apply/seteqP; split; last first. +apply/seteqP; split; last first. apply: smallest_sub. split; first exact: emeasurable0. by move=> *; rewrite setTD; exact: emeasurableC. @@ -655,9 +497,9 @@ apply: bigcap_measurable => // j _; rewrite -setCitvr; apply: measurableC. by apply: sub_sigma_algebra; exists (i%:R + j.+1%:R^-1)%R. Qed. -Lemma measurableE : emeasurable (@open R) = G.-sigma.-measurable. +Lemma measurableE : emeasurable (@ocitv R) = G.-sigma.-measurable. Proof. -rewrite /emeasurable -RGenOpenSets.measurableE; apply/seteqP; split; last first. +apply/seteqP; split; last first. apply: smallest_sub. split; first exact: emeasurable0. by move=> *; rewrite setTD; exact: emeasurableC. @@ -691,7 +533,7 @@ Context (R : realType). Definition G := [set A : set \bar R | exists r, A = `]-oo, r%:E[%classic]. -Lemma measurableE : emeasurable (@open R) = G.-sigma.-measurable. +Lemma measurableE : emeasurable (@ocitv R) = G.-sigma.-measurable. Proof. rewrite ErealGenCInfty.measurableE eqEsubset; split => A. apply: smallest_sub; first exact: smallest_sigma_algebra. @@ -709,7 +551,7 @@ End ErealGenInftyO. Lemma is_interval_measurable (R : realType) (I : set R) : is_interval I -> measurable I. -Proof. by move/is_intervalP => ->. Qed. +Proof. by move/is_intervalP => ->; rewrite -?RGenOpenSets.measurableE//. Qed. Section coutinuous_measurable. Context {R : realType}. @@ -740,8 +582,8 @@ Lemma subspace_continuous_measurable_fun (D : set R) (f : subspace D -> R) : measurable D -> continuous f -> measurable_fun D f. Proof. move=> mD /continuousP cf. -rewrite /measurable_fun -!RGenOpenSets.measurableE. -apply: (measurability _ (RGenItvoo.measurableE R)). +rewrite /measurable_fun -?RGenOpenSets.measurableE. +apply: (measurability _ (RGenOpens.measurableE R)). move=> _ [_ [a [b ->] <-]]. rewrite RGenOpenSets.measurableE. apply: open_measurable_subspace => //. @@ -793,7 +635,7 @@ have [x0|x0] := leP 0 x; last first. rewrite [X in measurable X](_ : _ = setT)// predeqE => r. by split => // _; rewrite /= in_itv /= andbT (lt_le_trans x0). rewrite [X in measurable X](_ : _ = `]-oo, (- x)[ `|` `]x, +oo[); last first. - by apply: measurableU => //; exact: MeasurableRocitv.ocitv_measurable_itv. + exact: measurableU. rewrite predeqE => r; split => [|[|]]; rewrite preimage_itv ?in_itv ?andbT/=. - (have [r0|r0] := leP 0 r; [rewrite ger0_norm|rewrite ltr0_norm]) => // xr; rewrite 2!in_itv/=. @@ -1396,7 +1238,7 @@ Lemma EFin_measurable (D : set R) : measurable_fun D EFin. Proof. move=> mD; apply: (measurability _ (ErealGenOInfty.measurableE R)) => //. move=> /= _ [_ [x ->]] <-; apply: measurableI => //. -by rewrite preimage_itvoy EFin_itv. +by rewrite -RGenOpenSets.measurableE preimage_itvoy EFin_itv. Qed. Lemma abse_measurable (D : set (\bar R)) : measurable_fun D abse. @@ -1408,12 +1250,13 @@ apply: measurableU; last first. by rewrite preimage_abse_pinfty; apply: measurableI => //; exact: measurableU. apply: measurableI => //; exists (normr @^-1` `]x, +oo[%classic). rewrite -[X in measurable X]setTI. + rewrite RGenOpenSets.measurableE. exact: normr_measurable. exists set0; first by constructor. rewrite setU0 predeqE => -[y| |]; split => /= => -[r]; rewrite ?/= /= ?in_itv /= ?andbT => xr//. + by move=> [ry]; exists `|y| => //=; rewrite in_itv/= andbT -ry. - + by move=> [ry]; exists y => //=; rewrite in_itv/= andbT -ry. + + by move=> [ry]; exists y => //=; rewrite /= in_itv/= andbT -ry. Qed. Lemma oppe_measurable (D : set (\bar R)) : @@ -1441,6 +1284,7 @@ Proof. split=> [mf mD A mA|]; last by move=> mg; exact: measurableT_comp. rewrite [X in measurable X](_ : _ = D `&` (EFin \o g) @^-1` (EFin @` A)); last first. apply: mf => //; exists A => //. + by rewrite RGenOpenSets.measurableE//. by exists set0; [constructor|rewrite setU0]. congr (_ `&` _);rewrite eqEsubset; split=> [|? []/= _ /[swap] -[->//]]. by move=> ? ?; exact: preimage_image. diff --git a/theories/realfun.v b/theories/realfun.v old mode 100755 new mode 100644 diff --git a/theories/sequences.v b/theories/sequences.v old mode 100755 new mode 100644 diff --git a/theories/showcase/pnt.v b/theories/showcase/pnt.v old mode 100755 new mode 100644 diff --git a/theories/showcase/summability.v b/theories/showcase/summability.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/bool_topology.v b/theories/topology_theory/bool_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/compact.v b/theories/topology_theory/compact.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/connected.v b/theories/topology_theory/connected.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/discrete_topology.v b/theories/topology_theory/discrete_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/function_spaces.v b/theories/topology_theory/function_spaces.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/initial_topology.v b/theories/topology_theory/initial_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/matrix_topology.v b/theories/topology_theory/matrix_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/metric_structure.v b/theories/topology_theory/metric_structure.v old mode 100755 new mode 100644 index 4abf633194..06f4b1a94e --- a/theories/topology_theory/metric_structure.v +++ b/theories/topology_theory/metric_structure.v @@ -109,20 +109,6 @@ Qed. End metric_numFieldType. -Section metric_archiRealFieldType. -Context {R : archiRealFieldType} {N : metricType R}. - -Lemma set1_bigcap_ball (x : N) : [set x] = \bigcap_n ball x n.+1%:R^-1. -Proof. -rewrite eqEsubset; split=> [y -> n _ | y /= bn]/=; first exact: ballxx. -apply: close_eq _ => //; first exact: metric_hausdorff. -rewrite ball_close => e0. -apply/ball_sym/(le_ball _ (bn (truncn e0%:num^-1) Logic.I)). -by rewrite invf_ple ?posrE//; exact: (ltW (truncnS_gt _)). -Qed. - -End metric_archiRealFieldType. - Section prod_metric. Context {K : numDomainType} (T U : metricType K). diff --git a/theories/topology_theory/nat_topology.v b/theories/topology_theory/nat_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/num_topology.v b/theories/topology_theory/num_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/one_point_compactification.v b/theories/topology_theory/one_point_compactification.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/order_topology.v b/theories/topology_theory/order_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/product_topology.v b/theories/topology_theory/product_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/pseudometric_structure.v b/theories/topology_theory/pseudometric_structure.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/quotient_topology.v b/theories/topology_theory/quotient_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/separation_axioms.v b/theories/topology_theory/separation_axioms.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/sigT_topology.v b/theories/topology_theory/sigT_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/subspace_topology.v b/theories/topology_theory/subspace_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/subtype_topology.v b/theories/topology_theory/subtype_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/supremum_topology.v b/theories/topology_theory/supremum_topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/topology.v b/theories/topology_theory/topology.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/topology_structure.v b/theories/topology_theory/topology_structure.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/uniform_structure.v b/theories/topology_theory/uniform_structure.v old mode 100755 new mode 100644 diff --git a/theories/topology_theory/weak_topology.v b/theories/topology_theory/weak_topology.v old mode 100755 new mode 100644