Module mathcomp.analysis.lebesgue_integral_theory.simple_functions

From HB Require Import structures.
From mathcomp Require Import boot order ssralg ssrnum ssrint interval.
From mathcomp Require Import interval_inference archimedean finmap.
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.

# Simple functions This file contains a formalization of simple functions and with basic properties (addition, etc.). About the use of simple functions: Because of a limitation of HB <= 1.8.0, we need some care to be able to use simple functions. The structure SimpleFun (resp. NonNegSimpleFun) is located inside the module HBSimple (resp. HBNNSimple). As a consequence, we need to import HBSimple (resp. HBNNSimple) to use the coercion from simple functions (resp. non-negative simple functions) to Rocq functions. Also, assume that f (e.g., cst, indic) is equipped with the structure of MeasurableFun. For f to be equipped with the structure of SimpleFun (resp. NonNegSimpleFun), one need locally to import HBSimple (resp. HBNNSimple) and to instantiate FiniteImage (resp. NonNegFun) locally. Detailed contents: ```` {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 cst_nnsfun r == constant simple function nnsfun0 := cst_nnsfun 0 add_nnsfun f g := f \+ g mul_nnsfun f g := f \* g max_nnsfun f g := f \max g proj_nssfun f mA == projection of the function f to the set A mA is a proof that A is measurable scale_nnsfun k f == scales f by the non-negative real number k sum_nnsfun f n := \big[add_nnsfun/nnsfun0]_(i < n) f i bigmax_nnsfun f n := \big[max_nnsfun/nnsfun0]_(i < n) f i ````

Reserved Notation "{ 'nnfun' aT >-> T }"
  (at level 0, format "{ 'nnfun' aT >-> T }").
Reserved Notation "[ 'nnfun' 'of' f ]"
  (at level 0, format "[ 'nnfun' 'of' f ]").
Reserved Notation "{ 'nnsfun' aT >-> T }"
  (at level 0, format "{ 'nnsfun' aT >-> T }").
Reserved Notation "[ 'nnsfun' 'of' f ]"
  (at level 0, format "[ 'nnsfun' 'of' f ]").
Reserved Notation "{ 'sfun' aT >-> T }"
  (at level 0, format "{ 'sfun' aT >-> T }").
Reserved Notation "[ 'sfun' 'of' f ]"
  (at level 0, format "[ 'sfun' 'of' f ]").

Unset SsrOldRewriteGoalsOrder.  
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.

Module HBSimpleUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_dominated_convergence
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_differentiation
  • mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation

Source code
.
Import MeasurableR.

HBSource code.structureSource code DefinitionSource code SimpleFunSource code dSource code (aTSource code :Source code sigmaRingTypeSource code d) (rT : realType) :=
  {fSource code of @isMeasurableFun d _ aT rT f & @FiniteImage aT rT f}.

End HBSimple.

Notation "{ 'sfun' aT >-> T }"Source code := (@HBSimple.SimpleFun.type _ aT T) : form_scope.
Notation "[ 'sfun' 'of' f ]"Source code := [the {sfun _ >-> _} of f] : form_scope.

Module HBNNSimpleUsed by
  • mathcomp.analysis.probability_theory.independence
  • mathcomp.analysis.probability_theory.uniform_distribution
  • mathcomp.analysis.hoelder
  • mathcomp.analysis.kernel
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
  • mathcomp.analysis.lebesgue_integral_theory.giry
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_Rintegral
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_monotone_convergence
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_fubini
  • mathcomp.analysis.lebesgue_integral_theory.counting_lebesgue
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_dominated_convergence
  • mathcomp.analysis.lebesgue_integral_theory.radon_nikodym
  • mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation

Source code
.
Import HBSimple.

HBSource code.structureSource code DefinitionSource code NonNegSimpleFunSource code
    dSource code (aTSource code :Source code sigmaRingTypeSource code d) (rT : realType) :=
  {fSource code of @SimpleFun d _ _ f & @NonNegFun aT rT f}.

End HBNNSimple.

Notation "{ 'nnsfun' aT >-> T }"Source code := (@HBNNSimple.NonNegSimpleFun.type _ aT%type T) : form_scope.
Notation "[ 'nnsfun' 'of' f ]"Source code := [the {nnsfun _ >-> _} of f] : form_scope.

Section sfun_pred.
Context {dSource code} {aTSource code : sigmaRingType d} {rTSource code : realType}.
Import MeasurableR.
Definition sfun

sfun : forall {d : measure_display} {aT : sigmaRingType d} {rT : realType}, {pred aT -> rT} sfun is not universe polymorphic Arguments sfun {d}%_measure_display_scope {aT rT} _ sfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.sfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 99, characters 11-15


Source code
: {pred _ -> _} := [predI @mfun _ _ aT rT & fimfun].
Definition sfun_key

sfun_key : forall {d : measure_display} {aT : sigmaRingType d} {rT : realType}, pred_key (T:=aT -> rT) sfun sfun_key is not universe polymorphic Arguments sfun_key {d}%_measure_display_scope {aT rT} sfun_key is opaque Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.sfun_key Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 100, characters 11-19


Source code
: pred_key sfun
Proof.
exact. Qed.
Canonical sfun_keyed

sfun_keyed : forall {d : measure_display} {aT : sigmaRingType d} {rT : realType}, keyed_pred sfun_key sfun_keyed is not universe polymorphic Arguments sfun_keyed {d}%_measure_display_scope {aT rT} sfun_keyed is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.sfun_keyed Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 101, characters 10-20


Source code
:= KeyedPred sfun_key.
Lemma sub_sfun_mfunSource code : {subset sfun <= mfun}
Proof.
by move=> x /andP[]. Qed.
Lemma sub_sfun_fimfunSource code : {subset sfun <= fimfun}
Proof.
by move=> x /andP[]. Qed.
End sfun_pred.

Section sfun.
Context {dSource code} {aTSource code : measurableType d} {rTSource code : realType}.
Notation TSource code := {sfun aT >-> rT}.
Notation sfunSource code := (@sfun _ aT rT).
Section Sub.
Context (fSource code : aT -> rT) (fPSource code : f \in sfun).
Import MeasurableR.
Definition sfun_Sub1_subproof

sfun_Sub1_subproof : forall {d : measure_display} {aT : measurableType d} {rT : realType} [f : aT -> rT], f \in sfun -> isMeasurableFun.axioms_ d lebesgue_display aT rT f sfun_Sub1_subproof is not universe polymorphic Arguments sfun_Sub1_subproof {d}%_measure_display_scope {aT rT} [f]%_function_scope fP sfun_Sub1_subproof is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.sfun_Sub1_subproof Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 113, characters 11-29


Source code
:=
  @isMeasurableFun.Build d _ aT rT f (set_mem (sub_sfun_mfun fP)).
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code sfun_Sub1_subproofSource code.
Definition sfun_Sub2_subproof

sfun_Sub2_subproof : forall {d : measure_display} {aT : measurableType d} {rT : realType} [f : aT -> rT], f \in sfun -> FiniteImage.axioms_ aT rT f sfun_Sub2_subproof is not universe polymorphic Arguments sfun_Sub2_subproof {d}%_measure_display_scope {aT rT} [f]%_function_scope fP sfun_Sub2_subproof is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.sfun_Sub2_subproof Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 116, characters 11-29


Source code
:=
  @FiniteImage.Build aT rT f (set_mem (sub_sfun_fimfun fP)).

Import HBSimple.

#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code sfun_Sub2_subproofSource code.
Definition sfun_Sub

sfun_Sub : forall {d : measure_display} {aT : measurableType d} {rT : realType} [f : aT -> rT], f \in sfun -> {sfun aT >-> rT} sfun_Sub is not universe polymorphic Arguments sfun_Sub {d}%_measure_display_scope {aT rT} [f]%_function_scope fP sfun_Sub is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.sfun_Sub Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 122, characters 11-19


Source code
:= [sfun of f].
End Sub.

Lemma sfun_rectSource code (KSource code : T -> Type) :
  (forall fSource code (PfSource code : f \in sfun), K (sfun_Sub Pf)) -> forall uSource code : T, K u.
Proof.
move=> Ksub [f [[Pf1] [Pf2]]]; have Pf : f \in sfun by apply/andP; rewrite ?inE.
have -> : Pf1 = set_mem (sub_sfun_mfun Pf) by [].
have -> : Pf2 = set_mem (sub_sfun_fimfun Pf) by [].
exact: Ksub.
Qed.

Import HBSimple.

Lemma sfun_valPSource code fSource code (PfSource code : f \in sfun) : sfun_Sub Pf = f :> (_ -> _).
Proof.
by []. Qed.

HBSource code.instanceSource code DefinitionSource code _Source code :=Source code isSubSource code.Build _ _ T sfun_rect sfun_valP.

Lemma sfuneqPSource code (fSource code gSource code : {sfun aT >-> rT}) : f = g <-> f =1 g.
Proof.
by split=> [->//|fg]; apply/val_inj/funext. Qed.

HBSource code.instanceSource code DefinitionSource code _Source code :=Source code [ChoiceSource code of {sfun aT >-> rT} by <:].

Import MeasurableR.

HBSource code.instanceSource code DefinitionSource code _Source code xSource code :Source code @FImFunSource code aT rT (cst x) := FImFun.on (cst x).

Definition cst_sfun

cst_sfun : forall {d : measure_display} {aT : measurableType d} {rT : realType}, rT -> {sfun aT >-> rT} cst_sfun is not universe polymorphic Arguments cst_sfun {d}%_measure_display_scope {aT rT} x%_ring_scope cst_sfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.cst_sfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 151, characters 11-19


Source code
xSource code : {sfun aT >-> rT} := cst x.

Lemma cst_sfunESource code xSource code : @cst_sfun x =1 cst x
Proof.
by []. Qed.

End sfun.

Lemma fctDSource code (TSource code : Type) (KSource code : pzRingType) (fSource code gSource code : T -> K) : f + g = f \+ g.
Proof.
by []. Qed.
Lemma fctNSource code (TSource code : Type) (KSource code : pzRingType) (fSource code : T -> K) : - f = \- f.
Proof.
by []. Qed.
Lemma fctMUsed by
  • mathcomp.analysis.hoelder

Source code
 (TSource code : Type) (KSource code : pzRingType) (fSource code gSource code : T -> K) : f * g = f \* g.
Proof.
by []. Qed.
Lemma fctZSource code (TSource code : Type) (KSource code : pzRingType) (LSource code : lmodType K) kSource code (fSource code : T -> L) :
   k *: f = k \*: f.
Proof.
by []. Qed.
Arguments cst _ _ _ _ /.
Definition fctWE

fctWE : (forall (T : Type) (K : pzRingType) (f g : T -> K), (f + g)%R = (f \+ g)%R) * (forall (T : Type) (K : pzRingType) (f : T -> K), (- f)%R = (\- f)%R) * (forall (T : Type) (K : pzRingType) (f g : T -> K), (f * g)%R = (f \* g)%R) * (forall (T : Type) (K : pzRingType) (L : lmodType K) (k : K) (f : T -> L), (k *: f)%R = (k \*: f)%R) fctWE is not universe polymorphic fctWE is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.fctWE Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 168, characters 11-16


Source code
:= (fctD, fctN, fctM, fctZ).

Section ring.
Context dSource code (aTSource code : measurableType d) (rTSource code : realType).

Lemma sfun_subring_closedSource code : 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.

HBSource code.instanceSource code DefinitionSource code _Source code :=Source code GRingSource code.isSubringClosed.Build _ sfun
  sfun_subring_closed.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code [SubChoice_isSubComPzRingSource code of {sfun aT >-> rT} by <:].

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

Import HBSimple.

Lemma sfun0Source code : (0 : {sfun aT >-> rT}) =1 cst 0
Proof.
by []. Qed.
Lemma sfun1Source code : (1 : {sfun aT >-> rT}) =1 cst 1
Proof.
by []. Qed.
Lemma sfunNSource code fSource code : - f =1 \- f
Proof.
by []. Qed.
Lemma sfunDSource code fSource code gSource code : f + g =1 f \+ g
Proof.
by []. Qed.
Lemma sfunBUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_dominated_convergence

Source code
fSource code gSource code : f - g =1 f \- g
Proof.
by []. Qed.
Lemma sfunMSource code fSource code gSource code : f * g =1 f \* g
Proof.
by []. Qed.
Lemma sfun_sumSource code ISource code rSource code (PSource code : {pred I}) (fSource code : I -> {sfun aT >-> rT}) (xSource code : aT) :
  (\sum_(iSource code <- r | P i) f i) x = \sum_(iSource code <- r | P i) f i x.
Proof.
by elim/big_rec2: _ => //= i y ? Pi <-. Qed.
Lemma sfun_prodSource code ISource code rSource code (PSource code : {pred I}) (fSource code : I -> {sfun aT >-> rT}) (xSource code : aT) :
  (\sum_(iSource code <- r | P i) f i) x = \sum_(iSource code <- r | P i) f i x.
Proof.
by elim/big_rec2: _ => //= i y ? Pi <-. Qed.
Lemma sfunXSource code fSource code nSource code : f ^+ n =1 (fun xSource code => f x ^+ n).
Proof.
by move=> x; elim: n => [|n IHn]//; rewrite !exprS sfunM/= IHn. Qed.

Import MeasurableR.

HBSource code.instanceSource code DefinitionSource code _Source code fSource code gSource code :=Source code MeasurableFunSource code.copy (f \+ g) (f + g).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code gSource code :=Source code MeasurableFunSource code.copy (\- f) (- f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code gSource code :=Source code MeasurableFunSource code.copy (f \- g) (f - g).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code gSource code :=Source code MeasurableFunSource code.copy (f \* g) (f * g).

Import HBSimple.

HBSource code.instanceSource code DefinitionSource code _Source code (DSource code :Source code setSource code aT) (mD : measurable D) :
   @FImFun aT rT (mindic _ mD) := FImFun.on (mindic _ mD).
Definition indic_sfun

indic_sfun : forall {d : measure_display} {aT : measurableType d} {rT : realType} (D : set aT), d.-measurable%classic D -> {sfun aT >-> rT} indic_sfun is not universe polymorphic Arguments indic_sfun {d}%_measure_display_scope {aT rT} D%_classical_set_scope mD indic_sfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.indic_sfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 214, characters 11-21


Source code
 (DSource code : set aT) (mDSource code : measurable D) : {sfun aT >-> rT} :=
  mindic rT mD.

HBSource code.instanceSource code DefinitionSource code _Source code kSource code fSource code :=Source code MeasurableFunSource code.copy (k \o* f) (f * cst_sfun k).
Definition scale_sfun

scale_sfun : forall [d : measure_display] [aT : measurableType d] [rT : realType], rT -> {sfun aT >-> rT} -> {sfun aT >-> rT} scale_sfun is not universe polymorphic Arguments scale_sfun [d]%_measure_display_scope [aT rT] k%_ring_scope f scale_sfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.scale_sfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 218, characters 11-21


Source code
kSource code fSource code : {sfun aT >-> rT} := k \o* f.

End ring.
Arguments indic_sfun {d aT rT} _.

Lemma preimage_nnfun0Used by
  • mathcomp.analysis.kernel
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_Rintegral
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_fubini

Source code
TSource code (RSource code : realDomainType) (fSource code : {nnfun T >-> R}) tSource code :
  t < 0 -> f @^-1` [set t] = set0.
Proof.
move=> t0.
by apply/preimage10 => -[x _]; apply: contraPnot t0 => <-; rewrite le_gtF.
Qed.

Lemma preimage_cstMUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition

Source code
TSource code (RSource code : realFieldType) (xSource code ySource code : R) (fSource code : T -> R) :
  x != 0 -> (cst x \* f) @^-1` [set y] = f @^-1` [set y / x].
Proof.
move=> x0; apply/seteqP.
by split=> [z/= <-|z/= ->]; rewrite [x * _]mulrC (mulfK, divfK).
Qed.

Section simple_bounded.
Context {dSource code} {TSource code : sigmaRingType d} {RSource code : realType}.

Import HBSimple.

Lemma simple_boundedUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_differentiation

Source code
 (fSource code : {sfun T >-> R}) : bounded_fun f.
Proof.
have /finite_seqP[r fr] := fimfunP f.
exists (fine (\big[maxe/-oo%E]_(iSource code <- r) `|i|%:E)).
split; rewrite ?num_real// => x mx z _; apply/ltW/(le_lt_trans _ mx).
have ? : f z \in r by have := imageT f z; rewrite fr.
rewrite -[leLHS]/(fine `|f z|%:E) fine_le//.
  rewrite -(big_map (EFin \o normr) xpredT idfun)/= bigmaxe_fin_num//.
    rewrite -size_eq0 -lt0n -has_predT; apply/hasP.
    by exists `|f z|%:E => //=; apply/mapP; exists (f z).
  by move=> /= y /mapP[s sr/= ->]; rewrite leNye.
exact: (bigmax_sup_seq _ _ _ _ _ _ _ (lexx _)).
Qed.

End simple_bounded.

Section nnsfun_functions.
Context dSource code (TSource code : measurableType d) (RSource code : realType).

Import HBNNSimple.
Import MeasurableR.

Lemma cst_nnfun_subproofSource code (xSource code : {nonneg R}) : forall tSource code : T, 0 <= cst x%:num t.
Proof.
by move=> /=. Qed.
HBSource code.instanceSource code DefinitionSource code _Source code xSource code :=Source code @isNonNegFunSource code.Build T R (cst x%:num)
  (cst_nnfun_subproof x).

Definition cst_nnsfun

cst_nnsfun : forall [d : measure_display] (T : measurableType d) [R : realType], {nonneg R}%R -> {nnsfun T >-> R} cst_nnsfun is not universe polymorphic Arguments cst_nnsfun [d]%_measure_display_scope T [R] r cst_nnsfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.cst_nnsfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 269, characters 11-21


Used by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg

Source code
 (rSource code : {nonneg R}) : {nnsfun T >-> R} := cst r%:num.

Definition nnsfun0

nnsfun0 : forall {d : measure_display} {T : measurableType d} {R : realType}, {nnsfun T >-> R} nnsfun0 is not universe polymorphic Arguments nnsfun0 {d}%_measure_display_scope {T R} nnsfun0 is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.nnsfun0 Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 271, characters 11-18


Used by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
  • mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation

Source code
: {nnsfun T >-> R} := cst_nnsfun 0%:nng.

Lemma indic_nnfun_subproofSource code (DSource code : set T) : forall xSource code, 0 <= (\1_D) x :> R.
Proof.
by []. Qed.

HBSource code.instanceSource code DefinitionSource code _Source code DSource code :=Source code @isNonNegFunSource code.Build T R \1_D
  (indic_nnfun_subproof D).

HBSource code.instanceSource code DefinitionSource code _Source code DSource code (mDSource code :Source code measurableSource code D) :
   @NonNegFun T R (mindic R mD) := NonNegFun.on (mindic R mD).

End nnsfun_functions.
Arguments nnsfun0 {d T R}.

Section nnfun_bin.
Variables (TSource code : Type) (RSource code : numDomainType) (fSource code gSource code : {nnfun T >-> R}).

Lemma add_nnfun_subproofSource code : @isNonNegFun T R (f \+ g).
Proof.
by split => x; rewrite addr_ge0//; apply/fun_ge0. Qed.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code add_nnfun_subproofSource code.

Lemma mul_nnfun_subproofSource code : @isNonNegFun T R (f \* g).
Proof.
by split => x; rewrite mulr_ge0//; apply/fun_ge0. Qed.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code mul_nnfun_subproofSource code.

Lemma max_nnfun_subproofSource code : @isNonNegFun T R (f \max g).
Proof.
by split => x /=; rewrite /maxr; case: ifPn => _; apply: fun_ge0. Qed.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code max_nnfun_subproofSource code.

End nnfun_bin.

Section nnsfun_bin.
Context dSource code (TSource code : measurableType d) (RSource code : realType).
Variables fSource code gSource code : {nnsfun T >-> R}.

Import HBNNSimple.
Import MeasurableR.

HBSource code.instanceSource code DefinitionSource code _Source code :=Source code MeasurableFunSource code.on (f \+ g).
Definition add_nnsfun

add_nnsfun : forall {d : measure_display} {T : measurableType d} {R : realType}, {nnsfun T >-> R} -> {nnsfun T >-> R} -> {nnsfun T >-> R} add_nnsfun is not universe polymorphic Arguments add_nnsfun {d}%_measure_display_scope {T R} f g add_nnsfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.add_nnsfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 310, characters 11-21


Used by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
  • mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation

Source code
: {nnsfun T >-> R} := f \+ g.

HBSource code.instanceSource code DefinitionSource code _Source code :=Source code MeasurableFunSource code.on (f \* g).
Definition mul_nnsfun

mul_nnsfun : forall {d : measure_display} {T : measurableType d} {R : realType}, {nnsfun T >-> R} -> {nnsfun T >-> R} -> {nnsfun T >-> R} mul_nnsfun is not universe polymorphic Arguments mul_nnsfun {d}%_measure_display_scope {T R} f g mul_nnsfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.mul_nnsfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 313, characters 11-21


Source code
: {nnsfun T >-> R} := f \* g.

HBSource code.instanceSource code DefinitionSource code _Source code :=Source code MeasurableFunSource code.on (f \max g).
Definition max_nnsfun

max_nnsfun : forall {d : measure_display} {T : measurableType d} {R : realType}, {nnsfun T >-> R} -> {nnsfun T >-> R} -> {nnsfun T >-> R} max_nnsfun is not universe polymorphic Arguments max_nnsfun {d}%_measure_display_scope {T R} f g max_nnsfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.max_nnsfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 316, characters 11-21


Source code
: {nnsfun T >-> R} := f \max g.

Definition indic_nnsfun

indic_nnsfun : forall [d : measure_display] [T : measurableType d] (R : realType) [A : set T], d.-measurable%classic A -> {nnsfun T >-> R} indic_nnsfun is not universe polymorphic Arguments indic_nnsfun [d]%_measure_display_scope [T] R [A]%_classical_set_scope mA indic_nnsfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.indic_nnsfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 318, characters 11-23


Used by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
  • mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation

Source code
ASource code (mASource code : measurable A) : {nnsfun T >-> R} := mindic R mA.

End nnsfun_bin.
Arguments add_nnsfun {d T R} _ _.
Arguments mul_nnsfun {d T R} _ _.
Arguments max_nnsfun {d T R} _ _.

Definition scale_nnsfun

scale_nnsfun : forall [d : measure_display] [T : measurableType d] [R : realType], {nnsfun T >-> R} -> forall [k : R], (0 <= k)%R -> {nnsfun T >-> R} scale_nnsfun is not universe polymorphic Arguments scale_nnsfun [d]%_measure_display_scope [T R] f [k]%_ring_scope k0 scale_nnsfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.scale_nnsfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 325, characters 11-23


Used by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
  • mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation

Source code
dSource code (TSource code : measurableType d) (RSource code : realType)
    (fSource code : {nnsfun T >-> R}) (kSource code : R) (k0Source code : 0 <= k) :=
  mul_nnsfun (cst_nnsfun T (NngNum k0)) f.

Definition proj_nnsfun

proj_nnsfun : forall [d : measure_display] [T : measurableType d] [R : realType], {nnsfun T >-> R} -> forall [A : set T], d.-measurable%classic A -> {nnsfun T >-> R} proj_nnsfun is not universe polymorphic Arguments proj_nnsfun [d]%_measure_display_scope [T R] f [A]%_classical_set_scope mA proj_nnsfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.proj_nnsfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 329, characters 11-22


Used by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition

Source code
dSource code (TSource code : measurableType d) (RSource code : realType)
    (fSource code : {nnsfun T >-> R}) (ASource code : set T) (mASource code : measurable A) :=
  mul_nnsfun f (indic_nnsfun R mA).

Section mrestrict.
Import HBNNSimple.

Lemma mrestrictUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition

Source code
dSource code (TSource code : measurableType d) (RSource code : realType) (fSource code : {nnsfun T >-> R})
  ASource code (mASource code : measurable A) : f \_ A = proj_nnsfun f mA.
Proof.
apply/funext => x /=; rewrite /patch mindicE.
by case: ifP; rewrite (mulr0, mulr1).
Qed.

End mrestrict.

Section nnsfun_iter.
Context dSource code (TSource code : measurableType d) (RSource code : realType) (DSource code : set T).
Variable fSource code : {nnsfun T >-> R}^nat.

Definition sum_nnsfun

sum_nnsfun : forall [d : measure_display] [T : measurableType d] [R : realType], {nnsfun T >-> R} ^nat -> nat -> {nnsfun T >-> R} sum_nnsfun is not universe polymorphic Arguments sum_nnsfun [d]%_measure_display_scope [T R] f n%_nat_scope sum_nnsfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.sum_nnsfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 349, characters 11-21


Used by
  • mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation

Source code
nSource code := \big[add_nnsfun/nnsfun0]_(iSource code < n) f i.

Import HBNNSimple.

Lemma sum_nnsfunEUsed by
  • mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation

Source code
nSource code tSource code : sum_nnsfun n t = \sum_(iSource code < n) (f i t).
Proof.
by rewrite /sum_nnsfun; elim/big_ind2 : _ => [|x g y h <- <-|]. Qed.

Definition bigmax_nnsfun

bigmax_nnsfun : forall [d : measure_display] [T : measurableType d] [R : realType], {nnsfun T >-> R} ^nat -> nat -> {nnsfun T >-> R} bigmax_nnsfun is not universe polymorphic Arguments bigmax_nnsfun [d]%_measure_display_scope [T R] f n%_nat_scope bigmax_nnsfun is transparent Expands to: Constant mathcomp.analysis.lebesgue_integral_theory.simple_functions.bigmax_nnsfun Declared in library mathcomp.analysis.lebesgue_integral_theory.simple_functions, line 356, characters 11-24


Used by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_monotone_convergence

Source code
nSource code := \big[max_nnsfun/nnsfun0]_(iSource code < n) f i.

Lemma bigmax_nnsfunEUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_monotone_convergence

Source code
nSource code tSource code : bigmax_nnsfun n t = \big[maxr/0]_(iSource code < n) (f i t).
Proof.
by rewrite /bigmax_nnsfun; elim/big_ind2 : _ => [|x g y h <- <-|]. Qed.

End nnsfun_iter.

Section nnsfun_cover.
Local Open Scope ereal_scope.
Context dSource code (TSource code : measurableType d) (RSource code : realType).
Variable fSource code : {nnsfun T >-> R}.

Import HBNNSimple.

Lemma nnsfun_coverUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition

Source code
: \big[setU/set0]_(iSource code \in range f) (f @^-1` [set i]) = setT.
Proof.
by rewrite fsbig_setU//= -subTset => x _; exists (f x). Qed.

Lemma nnsfun_coverTSource code : \big[setU/set0]_(iSource code \in [set: R]) f @^-1` [set i] = setT.
Proof.
by rewrite -(fsbig_widen (range f)) ?nnsfun_cover//= => x [_ /preimage10].
Qed.

End nnsfun_cover.

Section measure_fsbig.
Local Open Scope ereal_scope.
Context dSource code (TSource code : measurableType d) (RSource code : realType).
Variable mSource code : {measure set T -> \bar R}.

Lemma measure_fsbigUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition

Source code
 (ISource code : choiceType) (ASource code : set I) (FSource code : I -> set T) :
  finite_set A ->
  (forall iSource code, A i -> measurable (F i)) -> trivIset A F ->
  m (\big[setU/set0]_(iSource code \in A) F i) = \sum_(iSource code \in A) m (F i).
Proof.
move=> Afin Fm Ft.
by rewrite fsbig_finite// -measure_fin_bigcup// -bigsetU_fset_set.
Qed.

Import HBNNSimple.
Import MeasurableR.

Lemma additive_nnsfunrUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition

Source code
 (gSource code fSource code : {nnsfun T >-> R}) xSource code :
  \sum_(iSource code \in range g) m (f @^-1` [set x] `&` (g @^-1` [set i])) =
  m (f @^-1` [set x] `&` \big[setU/set0]_(iSource code \in range g) (g @^-1` [set i])).
Proof.
rewrite -?measure_fsbig//.
- by move=> i Ai; apply: measurableI.
- exact/trivIset_setIl/trivIset_preimage1.
- by rewrite !fsbig_finite//= big_distrr.
Qed.

Lemma additive_nnsfunlUsed by
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition

Source code
 (gSource code fSource code : {nnsfun T >-> R}) xSource code :
  \sum_(iSource code \in range g) m (g @^-1` [set i] `&` (f @^-1` [set x])) =
  m (\big[setU/set0]_(iSource code \in range g) (g @^-1` [set i]) `&` f @^-1` [set x]).
Proof.
by under eq_fsbigr do rewrite setIC; rewrite setIC additive_nnsfunr. Qed.

End measure_fsbig.

Section mulem_ge0.
Local Open Scope ereal_scope.

Let mulef_ge0Source code (RSource code : realDomainType) xSource code (fSource code : R -> \bar R) :
  0 <= f x -> ((x < 0)%R -> f x = 0) -> 0 <= x%:E * f x.
Proof.
case: (ltP x 0%R) => [x_lt0 ? ->|x_ge0 fx_ge0 _] //; last exact: mule_ge0.
by rewrite mule0.
Qed.

Lemma nnfun_muleindic_ge0Used by
  • mathcomp.analysis.probability_theory.independence
  • mathcomp.analysis.probability_theory.uniform_distribution
  • mathcomp.analysis.kernel
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_fubini
  • mathcomp.analysis.lebesgue_integral_theory.radon_nikodym

Source code
dSource code (TSource code : sigmaRingType d) (RSource code : realDomainType)
  (fSource code : {nnfun T >-> R}) rSource code zSource code : 0 <= r%:E * (\1_(f @^-1` [set r]) z)%:E.
Proof.
apply: (@mulef_ge0 _ _ (fun rSource code => (\1_(f @^-1` [set r]) z)%:E)).
  by rewrite lee_fin// indicE.
by move=> r0; rewrite preimage_nnfun0// indic0.
Qed.

Lemma mulemu_ge0Used by
  • mathcomp.analysis.kernel
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition

Source code
dSource code (TSource code : sigmaRingType d) (RSource code : realType)
    (muSource code : {measure set T -> \bar R}) xSource code (ASource code : R -> set T) :
  ((x < 0)%R -> A x = set0) -> 0 <= x%:E * mu (A x).
Proof.
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_ge0Used by
  • mathcomp.analysis.lebesgue_integral_theory.giry
  • mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition

Source code
dSource code (TSource code : sigmaRingType d) (RSource code : realType)
    (muSource code : {measure set T -> \bar R}) (fSource code : {nnsfun T >-> R}) xSource code :
  0 <= x%:E * mu (f @^-1` [set x]).
Proof.
by apply: (mulemu_ge0 (fun xSource code => f @^-1` [set x])); exact: preimage_nnfun0.
Qed.

End mulem_ge0.