Module mathcomp.analysis.measure_theory.measurable_function
From HB Require Import structures.From mathcomp Require Import boot order.
#[warning="-warn-library-file-internal-analysis"]
From mathcomp Require Import unstable.
From mathcomp Require Import boolp classical_sets functions.
From mathcomp Require Import measurable_structure.
Reserved Notation "{ 'mfun' aT >-> T }"
(at level 0, format "{ 'mfun' aT >-> T }").
Reserved Notation "[ 'mfun' 'of' f ]"
(at level 0, format "[ 'mfun' 'of' f ]").
Unset SsrOldRewriteGoalsOrder.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Import ProperNotations.
Local Open Scope classical_set_scope.
Local Open Scope ring_scope.
Definition
measurable_fun : forall [d d' : measure_display] [T : sigmaRingType d] [U : sigmaRingType d'], set T -> (T -> U) -> Prop measurable_fun is not universe polymorphic Arguments measurable_fun [d d']%_measure_display_scope [T U] D%_classical_set_scope f%_function_scope measurable_fun is transparent Expands to: Constant mathcomp.analysis.measure_theory.measurable_function.measurable_fun Declared in library mathcomp.analysis.measure_theory.measurable_function, line 35, characters 11-25
Source code
( : set T) ( : T -> U) :=
measurable D -> forall , measurable Y -> measurable (D `&` f @^-1` Y).
.
Source code
Source code
Source code
Source code
(f : aT -> rT) := {
measurable_funPT : measurable_fun [set: aT] f
}.
.
Source code
Source code
Source code
{ of @isMeasurableFun d d' aT rT f}.
Arguments measurable_funPT {d d' aT rT} s.
Notation
Source code
Notation
Source code
#[global] Hint Extern 0 (measurable_fun [set: _] _) =>
solve [apply: measurable_funPT] : core.
Lemma
Source code
{ : measurableType d} { : sigmaRingType d'}
( : set aT) ( : {mfun aT >-> rT}) : measurable_fun D s.
Proof.
by rewrite -(setTI (_ @^-1` _)); exact: measurable_funPT.
Qed.
Lemma
Source code
( : {mfun aT >-> rT}) ( : set rT) : measurable Y -> measurable (f @^-1` Y).
Proof.
#[deprecated(since="mathcomp-analysis 1.13.0", note="renamed to `measurable_funPTI`")]
Notation
Source code
Section mfun_pred.
Context { } { : sigmaRingType d} { : sigmaRingType d'}.
Definition
mfun : forall {d d' : measure_display} {aT : sigmaRingType d} {rT : sigmaRingType d'}, {pred aT -> rT} mfun is not universe polymorphic Arguments mfun {d d'}%_measure_display_scope {aT rT} _ mfun is transparent Expands to: Constant mathcomp.analysis.measure_theory.measurable_function.mfun Declared in library mathcomp.analysis.measure_theory.measurable_function, line 71, characters 11-15
Source code
Definition
mfun_key : forall {d d' : measure_display} {aT : sigmaRingType d} {rT : sigmaRingType d'}, pred_key (T:=aT -> rT) mfun mfun_key is not universe polymorphic Arguments mfun_key {d d'}%_measure_display_scope {aT rT} mfun_key is opaque Expands to: Constant mathcomp.analysis.measure_theory.measurable_function.mfun_key Declared in library mathcomp.analysis.measure_theory.measurable_function, line 72, characters 11-19
Source code
Proof.
mfun_keyed : forall {d d' : measure_display} {aT : sigmaRingType d} {rT : sigmaRingType d'}, keyed_pred mfun_key mfun_keyed is not universe polymorphic Arguments mfun_keyed {d d'}%_measure_display_scope {aT rT} mfun_keyed is transparent Expands to: Constant mathcomp.analysis.measure_theory.measurable_function.mfun_keyed Declared in library mathcomp.analysis.measure_theory.measurable_function, line 73, characters 10-20
Source code
End mfun_pred.
Section measurable_fun.
Context ( : sigmaRingType d1) ( : sigmaRingType d2)
( : sigmaRingType d3).
Implicit Type D E : set T1.
Lemma
Source code
Proof.
Lemma
Source code
measurable F -> g @` E `<=` F ->
measurable_fun F f -> measurable_fun E g -> measurable_fun E (f \o g).
Proof.
Lemma
Source code
{in D, f =1 g} -> measurable_fun D f -> measurable_fun D g.
Proof.
[exact/esym/eq_preimage|exact: mf].
Qed.
Lemma
Source code
{in D, f =1 g} -> measurable_fun D f <-> measurable_fun D g.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
(forall , measurable (E i)) ->
measurable_fun (\bigcup_ E i) f <-> (forall , measurable_fun (E i) f).
Proof.
by rewrite setI_bigcupl; apply: bigcup_measurable => i _; exact: mf.
move=> mf i _ A /mf => /(_ (bigcup_measurable (fun _ => mE k))).
move=> /(measurableI (E i))-/(_ (mE i)).
by rewrite setICA setIA (@setIidr _ _ (E i))//; exact: bigcup_sup.
Qed.
Lemma
Source code
measurable_fun (D `|` E) f <-> measurable_fun D f /\ measurable_fun E f.
Proof.
by move=> [//|[//|//=]].
split=> [mf|[Df Dg] [//|[//|/= _ _ Y mY]]]; last by rewrite set0I.
by split; [exact: (mf 0%N)|exact: (mf 1%N)].
Qed.
Lemma
Source code
measurable E -> D `<=` E -> measurable_fun E f ->
measurable_fun D f.
Proof.
move: (mD).
have := measurable_funU f mD mC.
suff -> : D `|` (E `\` D) = E by move=> [[]] //.
by rewrite setDUK.
Qed.
Lemma
Source code
( : T1 -> bool) ( : measurable_fun D f) :
measurable_fun (D `&` (f @^-1` [set true])) g ->
measurable_fun (D `&` (f @^-1` [set false])) h ->
measurable_fun D (fun => if f t then g t else h t).
Proof.
((f @^-1` [set true]) `&` (g @^-1` B)) `|`
((f @^-1` [set false]) `&` (h @^-1` B))).
apply/seteqP; split=> [t /=| t /= [] [] ->//].
by case: ifPn => ft; [left|right].
rewrite setIUr; apply: measurableU.
- by rewrite setIA; apply: mx => //; exact: mf.
- by rewrite setIA; apply: my => //; exact: mf.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
End measurable_fun.
#[global] Hint Extern 0 (measurable_fun _ (fun=> _)) =>
solve [apply: measurable_cst] : core.
#[global] Hint Extern 0 (measurable_fun _ (cst _)) =>
solve [apply: measurable_cst] : core.
#[global] Hint Extern 0 (measurable_fun _ id) =>
solve [apply: measurable_id] : core.
Arguments eq_measurable_fun {d1 d2 T1 T2 D} f {g}.
Arguments measurable_fun_eqP {d1 d2 T1 T2 D} f {g}.
Section mfun.
Context { } { : sigmaRingType d} { : sigmaRingType d'}.
Notation := {mfun aT >-> rT}.
Notation
Source code
Section Sub.
Context ( : aT -> rT) ( : f \in mfun).
Definition
mfun_Sub_subproof : forall {d d' : measure_display} {aT : sigmaRingType d} {rT : sigmaRingType d'} [f : aT -> rT], f \in mfun -> isMeasurableFun.axioms_ d d' aT rT f mfun_Sub_subproof is not universe polymorphic Arguments mfun_Sub_subproof {d d'}%_measure_display_scope {aT rT} [f]%_function_scope fP mfun_Sub_subproof is transparent Expands to: Constant mathcomp.analysis.measure_theory.measurable_function.mfun_Sub_subproof Declared in library mathcomp.analysis.measure_theory.measurable_function, line 184, characters 11-28
Source code
Source code
Source code
Source code
Source code
Definition
mfun_Sub : forall {d d' : measure_display} {aT : sigmaRingType d} {rT : sigmaRingType d'} [f : aT -> rT], f \in mfun -> {mfun aT >-> rT} mfun_Sub is not universe polymorphic Arguments mfun_Sub {d d'}%_measure_display_scope {aT rT} [f]%_function_scope fP mfun_Sub is transparent Expands to: Constant mathcomp.analysis.measure_theory.measurable_function.mfun_Sub Declared in library mathcomp.analysis.measure_theory.measurable_function, line 186, characters 11-19
Source code
End Sub.
Lemma
Source code
(forall ( : f \in mfun), K (mfun_Sub Pf)) -> forall : T, K u.
Proof.
Lemma
Source code
Proof.
.
Source code
Source code
Source code
Lemma
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
(@measurable_cst _ _ aT rT setT x).
End mfun.
Section measurable_fun_restrict.
Context ( : measurableType d1) ( : pmeasurableType d2)
( : measurableType d3).
Implicit Type D E : set T1.
Lemma
Source code
measurable_fun (E `&` D) f <-> measurable_fun E (f \_ D).
Proof.
- rewrite preimage_restrict; case: ifPn => ptX; last first.
by rewrite set0U setIA; apply: mf => //; exact: measurableI.
rewrite setIUr; apply: measurableU.
by apply: measurableI => //; exact: measurableC.
by rewrite setIA; apply: mf => //; exact: measurableI.
- have := mf mE _ mY; rewrite preimage_restrict; case: ifP => ptY; last first.
by rewrite set0U setIA.
rewrite setUIr setvU setTI setIUr => /(measurableI _ _ mD).
by rewrite setIUr setIA setIAC setICr set0I set0U setICA setIA.
Qed.
Lemma
Source code
measurable_fun D f <-> measurable_fun [set: T1] (f \_ D).
Proof.
End measurable_fun_restrict.
Section measurable_fun_measurableType.
Context ( : measurableType d1) ( : measurableType d2)
( : measurableType d3).
Implicit Type D E : set T1.
Lemma
Source code
measurable_fun [set: T2] f -> measurable_fun E g -> measurable_fun E (f \o g).
Proof.
Lemma
Source code
measurable_fun [set: T1] f -> measurable_fun D f.
Proof.
Lemma
Source code
( : measurable_fun [set: T1] f) :
measurable_fun [set: T1] g -> measurable_fun [set: T1] h ->
measurable_fun [set: T1] (fun => if f t then g t else h t).
Proof.
[exact: measurable_funS mx|exact: measurable_funS my].
Qed.
Section measurable_fun_bool.
Implicit Types f g : T1 -> bool.
Let
Source code
measurable (D `&` f @^-1` [set true]) ->
measurable (D `&` f @^-1` [set false]) ->
measurable_fun D f.
Proof.
have := @subsetT _ Y; rewrite setT_bool => YT.
move: mY; have [-> _|-> _|-> _ |-> _] := subset_set2 YT.
- by rewrite preimage0 ?setI0.
- exact: mT.
- exact: mF.
- by rewrite -setT_bool preimage_setT setIT.
Qed.
Lemma
Source code
measurable (D `&` f @^-1` [set b]) -> measurable_fun D f.
Proof.
rewrite (_ : [set ~~ b] = [set~ b]).
by apply/seteqP; split=> -[] /=; case: b {mb}.
by rewrite -preimage_setC; exact: measurableID.
by case: b => /= in mb mDb *; exact: measurable_fun_TF.
Qed.
Lemma
Source code
measurable_fun D (fun => f x && g x).
Proof.
Lemma
Source code
measurable_fun D f -> measurable_fun D (fun => ~~ f x).
Proof.
Lemma
Source code
measurable_fun D (fun => f x || g x).
Proof.
rewrite [X in measurable_fun _ X](_ : _ = (fun => ~~ (~~ f x && ~~ g x))).
by apply/funext=> x; rewrite -negb_or negbK.
by apply: measurable_neg; apply: measurable_and; exact: measurable_neg.
Qed.
End measurable_fun_bool.
End measurable_fun_measurableType.
#[global] Hint Extern 0 (measurable_fun _ (fun=> _)) =>
solve [apply: measurable_cst] : core.
#[global] Hint Extern 0 (measurable_fun _ (cst _)) =>
solve [apply: measurable_cst] : core.
#[global] Hint Extern 0 (measurable_fun _ id) =>
solve [apply: measurable_id] : core.
Arguments eq_measurable_fun {d1 d2 T1 T2 D} f {g}.
Arguments measurable_fun_bool {d1 T1 D f} b.
Section mfun_measurableType.
Context {} { : measurableType d1} {} { : measurableType d2}
{} { : measurableType d3}.
Variables ( : {mfun T2 >-> T3}) ( : {mfun T1 >-> T2}).
Let
Source code
Proof.
.
Source code
Source code
Source code
measurableT_comp_subproof.
End mfun_measurableType.
Lemma
Source code
( : measurableType d) ( : sigmaRingType d')
( : rT -> T) ( : aT -> rT) ( : set aT) :
measurable_fun setT g ->
preimage_set_system D (g \o f) measurable `<=`
preimage_set_system D f measurable.
Proof.
by rewrite -[X in measurable X]setTI; exact: mg.
Qed.
Section g_sigma_algebra_preimage_comp.
Context {} { : measurableType d} {} { : measurableType d1}
{} { : measurableType d2}.
Lemma
Source code
measurable_fun [set: T1] f ->
g_sigma_algebra_preimage (f \o X) `<=` g_sigma_algebra_preimage X.
Proof.
End g_sigma_algebra_preimage_comp.
Arguments g_sigma_algebra_preimage_comp {d T d1 T1 d2 T2 X} f.
Section measurability.
Lemma
Source code
( : measurableType d) ( : set aT) ( : aT -> rT) :
measurable_fun
(D : set (g_sigma_algebraType (preimage_set_system D f measurable))) f.
Proof.
Source code
( : measurableType d') ( : set aT) ( : aT -> rT) :
preimage_set_system D f (@measurable _ rT) `<=` @measurable _ aT ->
measurable_fun D f.
Proof.
Lemma
Source code
( : set aT) ( : aT -> rT) ( : set_system rT) :
@measurable _ rT = <<s G >> ->
preimage_set_system D f G `<=` @measurable _ aT ->
measurable_fun D f.
Proof.
rewrite sG_rT -g_sigma_preimageE smallest_sub_iff//.
exact: sigma_algebra_measurable.
Qed.
End measurability.
#[deprecated(since="mathcomp-analysis 1.9.0", note="renamed to `preimage_set_system_measurable_fun`")]
Notation
Source code
Arguments measurability {d d' aT rT D f} _.
Section prod_measurable_fun.
Context ( : measurableType d) ( : measurableType d1)
( : measurableType d2).
Lemma
Source code
measurable_fun setT (fst \o h) /\ measurable_fun setT (snd \o h).
Proof.
- rewrite g_sigma_preimageU_comp; split=> [mf A [C HC <-]|f12]; first exact: mf.
by move=> _ A mA; apply: f12; exists A.
- split => [h12|[mf1 mf2]].
split => _ A mA; apply: h12; apply: sub_sigma_algebra;
by [left; exists A|right; exists A].
apply: smallest_sub; first exact: sigma_algebra_measurable.
by rewrite subUset; split=> [|] A [C mC <-]; [exact: mf1|exact: mf2].
Qed.
Lemma
Source code
measurable_fun setT f -> measurable_fun setT g ->
measurable_fun setT (fun => (f x, g x)).
Proof.
End prod_measurable_fun.
#[deprecated(since="mathcomp-analysis 1.10.0", note="renamed `measurable_fun_pair`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.10.0", note="renamed `measurable_fun_pairP`")]
Notation
Source code
Section prod_measurable_proj.
Context ( : measurableType d1) ( : measurableType d2).
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
End prod_measurable_proj.
Arguments measurable_fst {d1 d2 T1 T2}.
Arguments measurable_snd {d1 d2 T1 T2}.
#[global] Hint Extern 0 (measurable_fun _ fst) =>
solve [apply: measurable_fst] : core.
#[global] Hint Extern 0 (measurable_fun _ snd) =>
solve [apply: measurable_snd] : core.
Lemma
Source code
measurable_fun [set: n.-tuple T] (@tnth _ T ^~ i).
Proof.
rewrite -bigcup_seq/=; exists i => /=; first by rewrite mem_index_enum.
by exists Y => //; rewrite setTI.
Qed.
Section measurable_cons.
Context ( : measurableType d1) ( : measurableType d2).
Lemma
Source code
measurable_fun [set: T1] f <->
forall , measurable_fun [set: T1] (@tnth n T2 ^~ i \o f).
Proof.
(fun => @tnth n T2 ^~ i \o f) `<=` measurable)).
rewrite g_sigma_preimage_comp; split=> [mf A [/= C preC <-]|prefS].
exact: mf.
by move=> _ A mA; apply: prefS; exists A.
split=> [tnthfS i|mf].
- move=> _ A mA.
apply: tnthfS; apply: sub_sigma_algebra.
case: n i => [[] []//|n i] in f *.
rewrite -bigcup_mkord_ord.
exists i; first exact: ltn_ord.
by exists A => //; rewrite inord_val.
- apply: smallest_sub; first exact: sigma_algebra_measurable.
case: n => [|n] in f mf *; first by rewrite big_ord0.
rewrite -bigcup_mkord_ord; apply: bigcup_sub => i Ii.
by move=> A [B mB <-]; exact: mf.
Qed.
Lemma
Source code
measurable_fun [set: T1] f -> measurable_fun [set: T1] g ->
measurable_fun [set: T1] (fun => [the n.+1.-tuple T2 of f x :: g x]).
Proof.
have [->//|i0] := eqVneq i ord0.
have i1n : (i.-1 < n)%N by rewrite prednK ?lt0n// -ltnS.
pose j := Ordinal i1n.
rewrite (_ : _ \o _ = fun => tnth (g x) j)//; last first.
apply: (@measurableT_comp _ _ _ _ _ _ (fun => tnth x j)) => //=.
exact: measurable_tnth.
apply/funext => x /=.
rewrite (_ : i = lift ord0 j) ?tnthS//.
by apply/val_inj => /=; rewrite /bump/= add1n prednK// lt0n.
Qed.
End measurable_cons.
Lemma
Source code
measurable_fun [set: n.+1.-tuple T] (fun => [tuple of behead x]).
Proof.
set f := fun : (n.+1).-tuple T => [tuple of behead x] : n.-tuple T.
move: mY; rewrite /measurable/= => + F [] sF.
pose F' := image_set_system setT f F.
move=> /(_ F') /=.
have -> : F' Y = F (f @^-1` Y) by rewrite /F' /image_set_system /= setTI.
move=> /[swap] bigF; apply; split; first exact: sigma_algebra_image.
move=> A; rewrite /= {}/F' /image_set_system /= setTI.
set bign := (X in X A -> _) => bignA.
apply: bigF; rewrite big_ord_recl /=; right.
set bign1 := (X in X (_ @^-1` _)).
have -> : bign1 = preimage_set_system [set: n.+1.-tuple T] f bign.
rewrite (big_morph _ (preimage_set_systemU _ _) (preimage_set_system0 _ _)).
apply: eq_bigr => i _; rewrite -preimage_set_system_comp.
congr preimage_set_system.
by apply: funext=> t/=; rewrite [in LHS](tuple_eta t) tnthS.
by exists A => //; rewrite setTI.
Qed.
Lemma
Source code
( : measurableType d') ( : X -> Y) :
measurable_fun setT x -> measurable_fun setT y ->
measurable_fun setT (fun => if tb.2 then x tb.1 else y tb.1).
Proof.
Section pair_measurable_fun.
Context ( : measurableType d) ( : measurableType d1)
( : measurableType d2).
Variable : T1 * T2 -> T.
Lemma
Source code
Proof.
have m2pairx : measurable_fun [set: T2] (snd \o pair x) by exact/measurable_id.
exact/measurable_fun_pairP.
Qed.
Lemma
Source code
Proof.
have m2pairy : measurable_fun [set: T1] (snd \o pair^~y) by exact/measurable_cst.
exact/measurable_fun_pairP.
Qed.
End pair_measurable_fun.
#[global] Hint Extern 0 (measurable_fun _ (pair _)) =>
solve [apply: pair1_measurable] : core.
#[global] Hint Extern 0 (measurable_fun _ (pair^~ _)) =>
solve [apply: pair2_measurable] : core.
#[deprecated(since="mathcomp-analysis 1.10.0", note="renamed `pair1_measurable`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.10.0", note="renamed `pair2_measurable`")]
Notation
Source code
Section measurable_section.
Context ( : measurableType d1) ( : measurableType d2)
( : measurableType d3).
Lemma
Source code
measurable A -> measurable (xsection A x).
Proof.
have mi : measurable_fun setT i by exact: pair1_measurable.
by rewrite xsectionE -[X in measurable X]setTI; exact: mi.
Qed.
Lemma
Source code
measurable A -> measurable (ysection A y).
Proof.
have mi : measurable_fun setT i by exact: pair2_measurable.
by rewrite ysectionE -[X in measurable X]setTI; exact: mi.
Qed.
Lemma
Source code
measurable_fun setT f -> measurable_fun setT (fun => f (x, y)).
Proof.
Lemma
Source code
measurable_fun setT f -> measurable_fun setT (fun => f (x, y)).
Proof.
End measurable_section.