Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 9f39489

Browse files
affeldt-aistmkerjean
authored and
mkerjean
committedJan 14, 2021
LinearContinuousBounded
Co-authored-by: Théo Vignon <>
1 parent ab12ecd commit 9f39489

File tree

2 files changed

+202
-0
lines changed

2 files changed

+202
-0
lines changed
 

‎CHANGELOG_UNRELEASED.md

+8
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@
1212
+ definition `mule` and its notation `*` (scope `ereal_scope`)
1313
+ definition `abse` and its notation `` `| | `` (scope `ereal_scope`)
1414

15+
+ lemmas `setIIl`, `setIIr`, `setCS`, `setSD`, `setDS`, `setDSS`, `setCI`,
16+
`setDUr`, `setDUl`, `setIDA`, `setDD`
17+
- in `normedtype.v`:
18+
+ lemma `closed_ereal_le_ereal`
19+
+ lemma `closed_ereal_ge_ereal`
20+
+ section "LinearContinuousBounded"
21+
+ section "Closed_ball"
22+
1523
### Changed
1624

1725
### Renamed

‎theories/normedtype.v

+194
Original file line numberDiff line numberDiff line change
@@ -2663,6 +2663,19 @@ rewrite [in X in _ <= X]/normr /= mx_normrE.
26632663
by apply/BigmaxBigminr.bigmaxr_gerP; right => /=; exists j.
26642664
Qed.
26652665

2666+
Lemma ereal_nbhs'_le (R : numFieldType) (x : {ereal R}) :
2667+
ereal_nbhs' x --> ereal_nbhs x.
2668+
Proof.
2669+
move: x => [x P [_/posnumP[e] HP] |x P|x P] //=.
2670+
by exists e%:num => // ???; apply: HP.
2671+
Qed.
2672+
2673+
Lemma ereal_nbhs'_le_finite (R : numFieldType) (x : R) :
2674+
ereal_nbhs' x%:E --> nbhs x%:E.
2675+
Proof.
2676+
by move=> P [_/posnumP[e] HP] //=; exists e%:num => // ???; apply: HP.
2677+
Qed.
2678+
26662679
Section open_closed_sets_ereal.
26672680
Variable R : realFieldType (* TODO: generalize to numFieldType? *).
26682681
Implicit Types x y : {ereal R}.
@@ -2844,3 +2857,184 @@ rewrite !nbhs_nearE !near_map !near_nbhs in fxP *; have /= := cfx P fxP.
28442857
rewrite !near_simpl near_withinE near_simpl => Pf; near=> y.
28452858
by have [->|] := eqVneq y x; [by apply: nbhs_singleton|near: y].
28462859
Grab Existential Variables. all: end_near. Qed.
2860+
2861+
(* NB: technical lemma that comes in handy in Banach-Steinhaus' PR *)
2862+
Lemma normrZV (R : numFieldType) (V : normedModType R) (x : V) :
2863+
x != 0 -> `| `| x|^-1 *: x | = 1.
2864+
Proof.
2865+
move=> x0; rewrite normmZ normrV ?unitfE ?normr_eq0 //=.
2866+
by rewrite normr_id mulVr // unitfE normr_eq0.
2867+
Qed.
2868+
2869+
Section LinearContinuousBounded.
2870+
2871+
Variables (R : numFieldType) (V W : normedModType R).
2872+
(* TODO : rename bounded_on by bounded_near *)
2873+
2874+
(*drafts for another PR *)
2875+
Definition absorbed (A B : set V) :=
2876+
exists (r : R), A `<=` [ set x : V | exists y : V, B y /\ x = r *: y ].
2877+
2878+
Definition strong_bornology :=
2879+
[ set A | (forall (B : set V), (nbhs (0:V) B -> absorbed A B))].
2880+
2881+
Lemma normed_bornological (A : set V) : bounded_set A <->
2882+
(forall (B : set V), (nbhs (0:V) B -> absorbed A B)).
2883+
Proof.
2884+
Admitted.
2885+
(*To be generalized to any topological space, with a theory of bounded*)
2886+
2887+
(*TBA topology.v. present in closed_ball*)
2888+
2889+
Lemma nbhs0_lt e :
2890+
0 < e -> \forall x \near (nbhs (0 : V)), `|x| < e.
2891+
Proof.
2892+
move=> e_gt0; apply/nbhs_ballP; exists e => // x.
2893+
by rewrite -ball_normE /= sub0r normrN.
2894+
Qed.
2895+
2896+
Lemma nbhs'0_lt e :
2897+
0 < e -> \forall x \near (nbhs' (0 : V)), `|x| < e.
2898+
Proof.
2899+
move=> e_gt0; apply/nbhs_ballP; exists e => // x.
2900+
by rewrite -ball_normE /= sub0r normrN.
2901+
Qed.
2902+
2903+
Definition bounded_fun_on (f : V -> W) (B : set (set V)):=
2904+
forall A, (B A -> (exists M : R, \forall x \near (0 :V), (`|f x| <= M))).
2905+
2906+
Lemma linear_bounded (f : {linear V -> W} ):
2907+
( bounded_on f (nbhs (0 : V))) <->
2908+
\forall r \near +oo, (forall x : V, `|f x| <= r * `|x|).
2909+
Proof.
2910+
split; last first.
2911+
move => /pinfty_ex_gt0 [r [r0 Bf]]; rewrite /bounded_on nearE /=.
2912+
exists r; split; first by apply:gtr0_real.
2913+
move => x rx. rewrite nbhs_ballP; exists 1 => // z.
2914+
rewrite -ball_normE //= sub0r normrN => x1; apply: (le_trans (Bf _)).
2915+
have lem: r * `|z| < r by rewrite gtr_pmulr.
2916+
apply: le_trans; first by apply: ltW; exact: lem.
2917+
by apply: ltW.
2918+
rewrite /bounded_on => /pinfty_ex_gt0 [M M0 /nbhs_ballP [_/posnumP[a Ba]]].
2919+
near (nbhs' (0 : R^o) : set (set R^o)) => e.
2920+
near=> r => x.
2921+
have [->|x0] := eqVneq x 0; first by rewrite linear0 !normr0 mulr0.
2922+
rewrite -ler_pdivr_mulr ?normr_gt0// -[ `|x|]normr_id mulrC.
2923+
have ne_gt0: 0 < `|e| by rewrite normr_gt0; near:e; exists 1.
2924+
rewrite -(ler_pmul2l ne_gt0) -!normfV -!normmZ scalerA -linearZ.
2925+
rewrite (le_trans (Ba _ _)) //.
2926+
rewrite -ball_normE /= sub0r normrN -scalerA normmZ normrZV //.
2927+
rewrite mulr1; near: e; apply/nbhs_ballP; exists ((a)%:num) => // z.
2928+
by rewrite -ball_normE /= sub0r normrN //.
2929+
rewrite -ler_pdivr_mull //.
2930+
near: r; apply: nbhs_pinfty_ge_real.
2931+
by rewrite rpredM// ?ger0_real ?invr_ge0// ltW.
2932+
Grab Existential Variables. by end_near. by end_near. Qed.
2933+
2934+
2935+
Lemma linear_boundedP (f : {linear V -> W}) :
2936+
(bounded_on f (nbhs (0 : V))) <->
2937+
exists r : R, 0 <= r /\ (forall x : V, `|f x| <= r * `|x|).
2938+
Proof.
2939+
split => [/linear_bounded | B].
2940+
by move=> /pinfty_ex_gt0 [M [M0 B]]; exists M; split; first by apply: ltW.
2941+
apply/linear_bounded; near_simpl. Admitted.
2942+
2943+
Lemma linear_continuous0 (f : {linear V -> W}) :
2944+
{for 0, continuous f} -> bounded_on f (nbhs (0 : V)).
2945+
Proof.
2946+
(* move=> /cvg_distP; rewrite linear0 /= => Bf. *)
2947+
(* apply/linear_boundedP; near=> r => x. *)
2948+
(* have [->|x0] := eqVneq x 0; first by rewrite linear0 !normr0 mulr0. *)
2949+
(* rewrite -ler_pdivr_mulr; last by rewrite normr_gt0. *)
2950+
(* rewrite -(normr_id x) mulrC. *)
2951+
(* rewrite -normrV ?unitfE ?normr_eq0 // -normmZ -linearZ. *)
2952+
(* apply: ltW. move: (Bf r) x x0; near: r. apply/near_pinfty_div2. *)
2953+
move=> /cvg_ballP /(_ _ ltr01).
2954+
rewrite linear0 /= nearE => /nbhs_ex[tp ball_f]; apply/linear_boundedP.
2955+
pose t := tp%:num; exists (2 * t^-1); split => [|x].
2956+
by apply: divr_ge0.
2957+
have [->|x0] := eqVneq x 0; first by rewrite linear0 !normr0 mulr0.
2958+
have /ball_f : ball 0 t ((`|x|^-1 * t /2) *: x).
2959+
apply: ball_sym; rewrite -ball_normE /ball_ subr0 normmZ mulrC 2!normrM.
2960+
rewrite 2!mulrA normrV ?unitfE ?normr_eq0 // normr_id.
2961+
rewrite divrr ?mul1r ?unitfE ?normr_eq0 // gtr0_norm // gtr_pmulr //.
2962+
by rewrite gtr0_norm // invr_lt1 // ?unitfE // ltr1n.
2963+
rewrite -ball_normE //= sub0r normrN linearZ /= normmZ -mulrA normrM.
2964+
rewrite normrV ?unitfE ?normr_eq0 // normr_id -mulrA.
2965+
rewrite ltr_pdivr_mull ?mulr1 ?normr_gt0 // -ltr_pdivl_mull ?normr_gt0 //.
2966+
rewrite gtr0_norm // invf_div => /ltW H. apply: le_trans; first by exact: H.
2967+
by apply: ler_pmul.
2968+
Qed.
2969+
2970+
Lemma linear_bounded0 (f : {linear V -> W}) :
2971+
bounded_on f (nbhs (0 : V)) -> {for 0, continuous f} .
2972+
Proof.
2973+
move=> /linear_boundedP [r]; rewrite le0r=> [[/orP r0]]; case: r0.
2974+
- move/eqP => -> fr; apply: near_cst_continuous; near=> y.
2975+
by move: (fr y); rewrite mul0r normr_le0; apply/eqP.
2976+
- move => r0 fr; apply/cvg_ballP => e e0.
2977+
rewrite nearE linear0 /= nbhs_ballP.
2978+
exists (e / 2 / r); first by rewrite !divr_gt0.
2979+
move=> x; rewrite -2!ball_normE /= 2!sub0r 2!normrN => xr.
2980+
have /le_lt_trans -> // : `|f x| <= e / 2.
2981+
by rewrite (le_trans (fr x)) // mulrC -ler_pdivl_mulr // ltW.
2982+
by rewrite gtr_pmulr // invr_lt1 // ?unitfE // ltr1n.
2983+
Grab Existential Variables. by end_near. Qed.
2984+
2985+
Lemma continuousfor0_continuous (f : {linear V -> W}) :
2986+
{for 0, continuous f} -> continuous f.
2987+
Proof.
2988+
move=> /linear_continuous0 /linear_boundedP [r []].
2989+
rewrite le_eqVlt => /orP[/eqP <- f0|r0 fr x].
2990+
- suff : f = (fun _ => 0) :> (_ -> _) by move=> ->; exact: cst_continuous.
2991+
by rewrite funeqE => x; move: (f0 x); rewrite mul0r normr_le0 => /eqP.
2992+
- rewrite cvg_to_locally => e e0; rewrite nearE /= nbhs_ballP.
2993+
exists (e / r); first by rewrite divr_gt0.
2994+
move=> y; rewrite -!ball_normE //= => xy; rewrite -linearB.
2995+
by rewrite (le_lt_trans (fr (x - y))) // mulrC -ltr_pdivl_mulr.
2996+
Qed.
2997+
2998+
Lemma linear_bounded_continuous (f : {linear V -> W}) :
2999+
bounded_on f (nbhs (0 : V)) <-> continuous f.
3000+
Proof.
3001+
split=> [/linear_bounded0|/(_ 0)/linear_continuous0//].
3002+
exact: continuousfor0_continuous.
3003+
Qed.
3004+
3005+
Definition bounded_fun_norm (f : V -> W) :=
3006+
forall r, exists M, forall x, `|x| <= r -> `|f x| <= M.
3007+
(*bounded_fun_on bounded_sets is harder to use*)
3008+
3009+
(* Definition pointwise_bounded (F : set (V -> W)) := *)
3010+
(* forall x, exists M, forall f, F f -> `|f x| <= M. *)
3011+
3012+
(* Definition uniform_bounded (F : set (V -> W)) := *)
3013+
(* forall r, exists M, forall f, F f -> forall x, `|x| <= r -> `|f x| <= M. *)
3014+
3015+
Lemma bounded_funP (f : {linear V -> W}):
3016+
bounded_fun_norm f <-> bounded_on f (nbhs (0 : V)).
3017+
Proof.
3018+
split => [/(_ 1) [M Bf]|/linear_boundedP [r [r0 Bf]] e]; last first.
3019+
by exists (e * r) => x xe; rewrite (le_trans (Bf _)) // mulrC ler_pmul.
3020+
apply/linear_boundedP.
3021+
have M0 : 0 <= M by move: (Bf 0); rewrite linear0 !normr0 => /(_ ler01).
3022+
exists M; split => //.
3023+
move: M0; rewrite le0r => /orP[/eqP|] M0 x.
3024+
- rewrite M0 mul0r normr_le0.
3025+
have [/eqP ->|x0] := boolP (x == 0); first by rewrite linear0.
3026+
have /Bf : `| `|x|^-1 *: x | <= 1.
3027+
rewrite normmZ normrV ?unitf_gt0 ?normrE //=.
3028+
by rewrite mulrC mulrV ?unitf_gt0 ?normrE.
3029+
rewrite linearZ M0 normr_le0 scaler_eq0 invr_eq0 => /orP[|//].
3030+
by rewrite normr_eq0 => /eqP ->; rewrite linear0.
3031+
- have [/eqP ->|x0] := boolP (x == 0).
3032+
+ by rewrite normr0 mulr0 normr_le0 linear0.
3033+
+ rewrite -ler_pdivr_mulr ?normr_gt0 //= mulrC.
3034+
have xx1 : `| `|x|^-1 | = `|x|^-1.
3035+
by rewrite normrV ?unitfE ?normr_eq0 // normr_id.
3036+
rewrite -xx1 -normmZ -linearZ; apply: (Bf (`|x|^-1 *: x)).
3037+
by rewrite normmZ xx1 mulVr // unitfE normr_eq0.
3038+
Qed.
3039+
3040+
End LinearContinuousBounded.

0 commit comments

Comments
 (0)
Please sign in to comment.