Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lspace #1230

Open
wants to merge 28 commits into
base: master
Choose a base branch
from
Open

Lspace #1230

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions .nix/config.nix
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,16 @@ in
## will be created per bundle
bundles."8.19".coqPackages = common-bundle // {
coq.override.version = "8.19";
mathcomp.override.version = "2.2.0";
mathcomp.override.version = "CohenCyril:seminorm";
mathcomp-bigenough.override.version = "master";
mathcomp-finmap.override.version = "master";
};

bundles."8.20".coqPackages = common-bundle // {
coq.override.version = "8.20";
mathcomp.override.version = "2.2.0";
mathcomp.override.version = "CohenCyril:seminorm";
mathcomp-bigenough.override.version = "master";
mathcomp-finmap.override.version = "master";
ssprove.job = false;
};

Expand All @@ -65,7 +69,7 @@ in
coq-elpi.override.version = "master";
coq-elpi.override.elpi-version = "2.0.7";
hierarchy-builder.override.version = "master";
mathcomp.override.version = "master";
mathcomp.override.version = "CohenCyril:seminorm";
mathcomp-bigenough.override.version = "master";
mathcomp-finmap.override.version = "master";
ssprove.job = false;
Expand Down
1 change: 1 addition & 0 deletions _CoqProject
Original file line number Diff line number Diff line change
Expand Up @@ -94,3 +94,4 @@ theories/pi_irrational.v
theories/showcase/summability.v
analysis_stdlib/Rstruct_topology.v
analysis_stdlib/showcase/uniform_bigO.v
theories/lspace.v
6 changes: 5 additions & 1 deletion theories/charge.v
Original file line number Diff line number Diff line change
Expand Up @@ -1867,7 +1867,7 @@ have nuf A : d.-measurable A -> nu A = \int[mu]_(x in A) f x.
move=> A mA; rewrite nuf ?inE//; apply: ae_eq_integral => //.
- exact/measurable_funTS.
- exact/measurable_funTS.
- exact: ae_eq_subset ff'.
- exact: (@ae_eq_subset _ _ _ _ mu setT A f f' (@subsetT _ A)).
Qed.

End radon_nikodym_sigma_finite.
Expand Down Expand Up @@ -2093,6 +2093,10 @@ move=> mE; apply: integral_ae_eq => //.
by rewrite -Radon_Nikodym_SigmaFinite.f_integral.
Qed.

(* TODO: move back to measure.v, current version incompatible *)
Lemma ae_eq_mul2l (f g h : T -> \bar R) D : f = g %[ae mu in D] -> (h \* f) = (h \* g) %[ae mu in D].
Proof. by apply: filterS => x /= /[apply] ->. Qed.

Lemma Radon_Nikodym_change_of_variables f E : measurable E ->
nu.-integrable E f ->
\int[mu]_(x in E) (f x * ('d (charge_of_finite_measure nu) '/d mu) x) =
Expand Down
111 changes: 96 additions & 15 deletions theories/hoelder.v
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ From mathcomp Require Import numfun exp convex itv.
(**md**************************************************************************)
(* # Hoelder's Inequality *)
(* *)
(* This file provides Hoelder's inequality. *)
(* This file provides Hoelder's inequality and its consequences, most notably *)
(* Minkowski's inequality and the convexity of the power function. *)
(* ``` *)
(* 'N[mu]_p[f] := (\int[mu]_x (`|f x| `^ p)%:E) `^ p^-1 *)
(* The corresponding definition is Lnorm. *)
(* 'N[mu]_p[f] == the p-norm of f with measure mu *)
(* ``` *)
(* *)
(******************************************************************************)
Expand All @@ -40,7 +40,7 @@ HB.lock Definition Lnorm {d} {T : measurableType d} {R : realType}
(mu : {measure set T -> \bar R}) (p : \bar R) (f : T -> R) :=
match p with
| p%:E => (if p == 0%R then
mu (f @^-1` (setT `\ 0%R))
(mu (f @^-1` (setT `\ 0%R))) `^ p^-1
else
(\int[mu]_x (`|f x| `^ p)%:E) `^ p^-1)%E
| +oo%E => (if mu [set: T] > 0 then ess_sup mu (normr \o f) else 0)%E
Expand All @@ -57,6 +57,20 @@ Implicit Types (p : \bar R) (f g : T -> R) (r : R).

Local Notation "'N_ p [ f ]" := (Lnorm mu p f).

Lemma Lnorm0 p : 1 <= p -> 'N_p[cst 0%R] = 0.
Proof.
rewrite unlock /Lnorm.
case: p => [r||//].
- rewrite lee_fin => r1.
have r0: r != 0%R by rewrite gt_eqF// (lt_le_trans _ r1).
rewrite gt_eqF ?(lt_le_trans _ r1)//.
under eq_integral => x _ do rewrite /= normr0 powR0//.
by rewrite integral0 poweR0r// invr_neq0.
case: ifPn => //mu0 _.
rewrite (_ : normr \o _ = 0%R); last by apply: funext => x/=; rewrite normr0.
exact: ess_sup_cst.
Qed.

Lemma Lnorm1 f : 'N_1[f] = \int[mu]_x `|f x|%:E.
Proof.
rewrite unlock oner_eq0 invr1// poweRe1//.
Expand All @@ -74,16 +88,36 @@ Qed.
Lemma eq_Lnorm p f g : f =1 g -> 'N_p[f] = 'N_p[g].
Proof. by move=> fg; congr Lnorm; exact/funext. Qed.

Lemma Lnorm_eq0_eq0 r f : (0 < r)%R -> measurable_fun setT f ->
'N_r%:E[f] = 0 -> ae_eq mu [set: T] (fun t => (`|f t| `^ r)%:E) (cst 0).
Lemma Lnorm_eq0_eq0 (f : T -> R) p :
measurable_fun setT f -> (0 < p)%E -> 'N_p[f] = 0 -> f = 0%R %[ae mu].
Proof.
move=> r0 mf; rewrite unlock (gt_eqF r0) => /poweR_eq0_eq0 fp.
apply/ae_eq_integral_abs => //=.
apply: measurableT_comp => //.
apply: (@measurableT_comp _ _ _ _ _ _ (@powR R ^~ r)) => //.
exact: measurableT_comp.
under eq_integral => x _ do rewrite ger0_norm ?powR_ge0//.
by rewrite fp//; apply: integral_ge0 => t _; rewrite lee_fin powR_ge0.
rewrite unlock /Lnorm => mf.
case: p => [r r0||].
- case: ifPn => _.
rewrite preimage_setI preimage_setT setTI -preimage_setC.
move=> /poweR_eq0_eq0 /negligibleP.
move/(_ (measurableC _)); rewrite -[X in d.-measurable X]setTI.
move/(_ (mf _ _ _)).
by case=> // A [mA muA0 fA]; exists A; split => // x/= ?; exact: fA.
move=> /poweR_eq0_eq0.
move=> /(_ (integral_ge0 _ _)) h.
have: (\int[mu]_x (`|f x| `^ r)%:E)%E = 0 by apply: h => x _; rewrite lee_fin powR_ge0.
under eq_integral => x _ do rewrite -[_%:E]gee0_abs ?lee_fin ?powR_ge0//.
have mp: measurable_fun [set: T] (fun x : T => (`|f x| `^ r)%:E).
apply: measurableT_comp => //.
apply (measurableT_comp (measurable_powR _)) => //.
exact: measurableT_comp.
move/(ae_eq_integral_abs _ measurableT mp).
apply: filterS => x/= /[apply].
by case=> /powR_eq0_eq0 /eqP; rewrite normr_eq0 => /eqP.
- case: ifPn => [mu0 _|].
exact: ess_sup_eq0.
rewrite ltNge => /negbNE mu0 _ _.
suffices mueq0: mu setT = 0 by exact: ae_eq0.
move: mu0 (measure_ge0 mu setT) => mu0 mu1.
suffices: (mu setT <= 0 <= mu setT)%E by move/le_anti.
by rewrite mu0 mu1.
by [].
Qed.

Lemma powR_Lnorm f r : r != 0%R ->
Expand All @@ -93,9 +127,39 @@ move=> r0; rewrite unlock (negbTE r0) -poweRrM mulVf// poweRe1//.
by apply: integral_ge0 => x _; rewrite lee_fin// powR_ge0.
Qed.

Lemma oppr_Lnorm f p :
'N_p[\- f]%R = 'N_p[f].
Proof.
rewrite unlock /Lnorm.
case: p => /= [r||//].
case: eqP => _. congr ((mu _) `^ _).
rewrite !preimage_setI.
congr (_ `&` _).
rewrite -!preimage_setC.
congr (~` _).
rewrite /preimage.
apply: funext => x/=.
rewrite -{1}oppr0.
apply: propext. split; last by move=> ->.
by move/oppr_inj.
by under eq_integral => x _ do rewrite normrN.
rewrite compA (_ : normr \o -%R = normr)//.
apply: funext => x/=; exact: normrN.
Qed.

Lemma Lnorm_cst1 r : ('N_r%:E[cst 1%R] = (mu setT)`^(r^-1)).
Proof.
rewrite unlock /Lnorm.
case: ifPn => [_|].
by rewrite preimage_cst ifT// inE/=; split => //; apply/eqP; rewrite oner_neq0.
under eq_integral => x _ do rewrite normr1 powR1 (_ : 1 = cst 1 x)%R// -indicT.
by rewrite integral_indic// setTI.
Qed.

End Lnorm_properties.

#[global]

Hint Extern 0 (0 <= Lnorm _ _ _) => solve [apply: Lnorm_ge0] : core.

Notation "'N[ mu ]_ p [ f ]" := (Lnorm mu p f).
Expand Down Expand Up @@ -144,11 +208,12 @@ Let hoelder0 f g p q : measurable_fun setT f -> measurable_fun setT g ->
(0 < p)%R -> (0 < q)%R -> (p^-1 + q^-1 = 1)%R ->
'N_p%:E[f] = 0 -> 'N_1[(f \* g)%R] <= 'N_p%:E[f] * 'N_q%:E[g].
Proof.
rewrite -lte_fin.
move=> mf mg p0 q0 pq f0; rewrite f0 mul0e Lnorm1 [leLHS](_ : _ = 0)//.
rewrite (ae_eq_integral (cst 0)) => [|//||//|]; first by rewrite integral0.
- by do 2 apply: measurableT_comp => //; exact: measurable_funM.
- apply: filterS (Lnorm_eq0_eq0 p0 mf f0) => x /(_ I)[] /powR_eq0_eq0 + _.
by rewrite normrM => ->; rewrite mul0r.
- apply: filterS (Lnorm_eq0_eq0 mf p0 f0) => x /(_ I)[] + _.
by rewrite normrM => ->; rewrite normr0 mul0r.
Qed.

Let normalized p f x := `|f x| / fine 'N_p%:E[f].
Expand Down Expand Up @@ -502,4 +567,20 @@ congr (_ * _); rewrite poweRN.
- by rewrite -powR_Lnorm ?gt_eqF// fin_num_poweR// ge0_fin_numE ?Lnorm_ge0.
Qed.

Lemma minkowski' f g p :
measurable_fun setT f -> measurable_fun setT g -> (1 <= p)%R ->
'N_p%:E[f] <= 'N_p%:E[f \+ g] + 'N_p%:E[g].
Proof.
move=> mf mg p1.
rewrite (_ : f = ((f \+ g) \+ (-%R \o g))%R); last first.
by apply: funext => x /=; rewrite -addrA subrr addr0.
rewrite [X in _ <= 'N__[X] + _](_ : ((f \+ g \- g) \+ g)%R = (f \+ g)%R); last first.
by apply: funext => x /=; rewrite -addrA [X in _ + _ + X]addrC subrr addr0.
rewrite (_ : 'N__[g] = 'N_p%:E[-%R \o g]); last first.
by rewrite oppr_Lnorm.
apply: minkowski => //.
apply: measurable_funD => //.
apply: measurableT_comp => //.
Qed.

End minkowski.
16 changes: 9 additions & 7 deletions theories/lebesgue_integral.v
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,8 @@ Lemma mfunN f : - f = \- f :> (_ -> _). Proof. by []. Qed.
Lemma mfunD f g : f + g = f \+ g :> (_ -> _). Proof. by []. Qed.
Lemma mfunB f g : f - g = f \- g :> (_ -> _). Proof. by []. Qed.
Lemma mfunM f g : f * g = f \* g :> (_ -> _). Proof. by []. Qed.
Lemma mfunMn f n : (f *+ n) = (fun x => f x *+ n) :> (_ -> _).
Proof. by apply/funext=> x; elim: n => //= n; rewrite !mulrS !mfunD /= => ->. Qed.
Lemma mfun_sum I r (P : {pred I}) (f : I -> {mfun 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.
Expand All @@ -285,6 +287,7 @@ 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 _ f g := MeasurableFun.copy (f \* g) (f * g).
(* TODO: fix this: HB.instance Definition _ f (n : nat) := MeasurableFun.copy (fun x => f x *+ n) (f *+ n). *)

Definition mindic (D : set aT) of measurable D : aT -> rT := \1_D.

Expand Down Expand Up @@ -3726,11 +3729,9 @@ Local Open Scope ereal_scope.
Context d (T : measurableType d) (R : realType)
(mu : {measure set T -> \bar R}).

Local Notation ae_eq := (ae_eq mu).

Let ae_eq_integral_abs_bounded (D : set T) (mD : measurable D) (f : T -> \bar R)
M : measurable_fun D f -> (forall x, D x -> `|f x| <= M%:E) ->
ae_eq D f (cst 0) -> \int[mu]_(x in D) `|f x|%E = 0.
(\forall x \ae mu, D x -> f x = 0) -> \int[mu]_(x in D) `|f x|%E = 0.
Proof.
move=> mf fM [N [mA mN0 Df0N]].
pose Df_neq0 := D `&` [set x | f x != 0].
Expand Down Expand Up @@ -3759,7 +3760,8 @@ by rewrite mule0 -eq_le => /eqP.
Qed.

Lemma ae_eq_integral_abs (D : set T) (mD : measurable D) (f : T -> \bar R) :
measurable_fun D f -> \int[mu]_(x in D) `|f x| = 0 <-> ae_eq D f (cst 0).
measurable_fun D f ->
\int[mu]_(x in D) `|f x| = 0 <-> (\forall x \ae mu, D x -> f x = 0).
Proof.
move=> mf; split=> [iDf0|Df0].
exists (D `&` [set x | f x != 0]); split;
Expand Down Expand Up @@ -3813,7 +3815,7 @@ transitivity (limn (fun n => \int[mu]_(x in D) (f_ n x) )).
have [ftm|ftm] := leP `|f t|%E m%:R%:E.
by rewrite lexx /= (le_trans ftm)// lee_fin ler_nat.
by rewrite (ltW ftm) /= lee_fin ler_nat.
have ae_eq_f_ n : ae_eq D (f_ n) (cst 0).
have ae_eq_f_ n : (f_ n) = (cst 0) %[ae mu in D].
case: Df0 => N [mN muN0 DfN].
exists N; split => // t /= /not_implyP[Dt fnt0].
apply: DfN => /=; apply/not_implyP; split => //.
Expand Down Expand Up @@ -3922,7 +3924,7 @@ Qed.
Lemma ge0_ae_eq_integral (D : set T) (f g : T -> \bar R) :
measurable D -> measurable_fun D f -> measurable_fun D g ->
(forall x, D x -> 0 <= f x) -> (forall x, D x -> 0 <= g x) ->
ae_eq D f g -> \int[mu]_(x in D) (f x) = \int[mu]_(x in D) (g x).
f = g %[ae mu in D] -> \int[mu]_(x in D) (f x) = \int[mu]_(x in D) (g x).
Proof.
move=> mD mf mg f0 g0 [N [mN N0 subN]].
rewrite integralEpatch// [RHS]integralEpatch//.
Expand All @@ -3940,7 +3942,7 @@ Qed.

Lemma ae_eq_integral (D : set T) (g f : T -> \bar R) :
measurable D -> measurable_fun D f -> measurable_fun D g ->
ae_eq D f g -> integral mu D f = integral mu D g.
f = g %[ae mu in D] -> integral mu D f = integral mu D g.
Proof.
move=> mD mf mg /ae_eq_funeposneg[Dfgp Dfgn].
rewrite integralE// [in RHS]integralE//; congr (_ - _).
Expand Down
Loading