Skip to content

Commit 9bb50cb

Browse files
author
mkerjean
committed
lint by reynald, tentative near
1 parent df72d4f commit 9bb50cb

File tree

1 file changed

+138
-112
lines changed

1 file changed

+138
-112
lines changed

Diff for: theories/normedtype.v

+138-112
Original file line numberDiff line numberDiff line change
@@ -4153,47 +4153,105 @@ rewrite !near_simpl near_withinE near_simpl => Pf; near=> y.
41534153
by have [->|] := eqVneq y x; [by apply: nbhs_singleton|near: y].
41544154
Grab Existential Variables. all: end_near. Qed.
41554155

4156+
(* NB: technical lemma that comes in handy in Banach-Steinhaus' PR *)
4157+
Lemma normrZV (R : numFieldType) (V : normedModType R) (x : V) :
4158+
x != 0 -> `| `| x|^-1 *: x | = 1.
4159+
Proof.
4160+
move=> x0; rewrite normmZ normrV ?unitfE ?normr_eq0 //=.
4161+
by rewrite normr_id mulVr // unitfE normr_eq0.
4162+
Qed.
4163+
41564164
Section LinearContinuousBounded.
41574165

4158-
Variables (R: numFieldType) (V W: normedModType R).
4166+
Variables (R : numFieldType) (V W : normedModType R).
4167+
4168+
4169+
(*drafts for another PR *)
4170+
Definition absorbed (A B : set V) :=
4171+
exists (r : R), A `<=` [ set x : V | exists y : V, B y /\ x = r *: y ].
4172+
4173+
Definition strong_bornology :=
4174+
[ set A | (forall (B : set V), (nbhs (0:V) B -> absorbed A B))].
4175+
4176+
Lemma normed_bornological (A : set V) : bounded_set A <->
4177+
(forall (B : set V), (nbhs (0:V) B -> absorbed A B)).
4178+
Proof.
4179+
Admitted.
4180+
(*To be generalized to any topological space, with a theory of bounded*)
4181+
4182+
4183+
Definition bounded_fun_on (f : V -> W) (B : set (set V)):=
4184+
forall A, (B A -> (exists M : R, \forall x \near (0 :V), (`|f x| <= M))).
4185+
4186+
4187+
Lemma linear_bounded (f : {linear V -> W} ):
4188+
( bounded_on f (nbhs (0 : V))) <->
4189+
(*exists r : R, 0 <= r /\ (forall x : V, `|f x| <= r * `|x|).*)
4190+
\forall r \near +oo, (forall x : V, `|f x| <= r * `|x|).
4191+
Proof.
4192+
split; last first.
4193+
move=> /pinfty_ex_gt0 [r [r0 Bf]]; rewrite /bounded_on; near=> M; rewrite -nearE.
4194+
near=> x; apply: le_trans; first by apply: Bf.
4195+
apply: (le_trans (y :=r)).
4196+
apply: ler_pimulr; apply: ltW; first by [].
4197+
near: x; rewrite nearE.
4198+
suff <-: ball_ normr 0 1 = (fun x : V => `|x| < 1) by apply: nbhs_ball_norm.
4199+
by apply: funext => x /=; rewrite sub0r normrN.
4200+
near: M; rewrite nearE /=; exists r; split; first by apply: gtr0_real.
4201+
by move => x; apply: ltW. (* much longer *)
4202+
rewrite /bounded_on => Bf; near=> r => x.
4203+
have [->|x0] := eqVneq x 0; first by rewrite linear0 !normr0 mulr0.
4204+
rewrite -ler_pdivr_mulr ; last by rewrite normr_gt0.
4205+
rewrite -(normr_id x) mulrC.
4206+
rewrite -normrV ?unitfE ?normr_eq0 // -normmZ -linearZ.
4207+
move:x x0; near: r.
4208+
(* hell on earth *)
4209+
(* how to use hypothesis with near *)
4210+
(* split => [[M /nbhs_ballP[a a0 Ba0]]|[r [r0 fr]]]; last first. *)
4211+
(* exists r; apply/nbhs_ballP; exists 1 => // x. *)
4212+
(* rewrite -ball_normE //= sub0r normrN => x1; apply: (le_trans (fr _)). *)
4213+
(* by rewrite ler_pimulr // ltW. *)
4214+
(* exists (M * 2 * a^-1); split. *)
4215+
(* - rewrite !mulr_ge0 //= ?invr_ge0 ; last by apply: ltW. *)
4216+
(* by move: (Ba0 0 (ballxx 0 a0)); rewrite linear0 normr0. *)
4217+
(* - move=> x; rewrite mulrAC ler_pdivl_mulr //=. *)
4218+
(* have [/eqP ->|x0] := boolP (x == 0). *)
4219+
(* + by rewrite linear0 !(normr0,mulr0,mul0r). *)
4220+
(* + rewrite mulrAC -lter_pdivr_mulr // -lter_pdivr_mulr ?normr_gt0 //. *)
4221+
(* rewrite [X in X <= _](_ : _ = `|f (a / 2 / `|x| *: x)|); last first. *)
4222+
(* rewrite linearZ normmZ 2!normrM (gtr0_norm a0) gtr0_norm //. *)
4223+
(* by rewrite normrV ?unitfE ?normr_eq0 // normr_id -2!mulrA mulrC mulrA. *)
4224+
(* apply: Ba0; rewrite -ball_normE /= sub0r normrN. *)
4225+
(* rewrite normmZ normrM (@normrV _ `|x|) ?unitfE ?normr_eq0 // normr_id. *)
4226+
(* rewrite -mulrA mulVr ?mulr1 ?unitfE ?normr_eq0 //. *)
4227+
(* by rewrite normrM 2?gtr0_norm// gtr_pmulr // invf_lt1 // ltr1n. *)
4228+
(* Qed. *)
4229+
Admitted.
4230+
41594231

4160-
Lemma linear_boundedP (f: {linear V -> W}) : bounded_on f (nbhs (0:V)) <->
4161-
(exists r, 0 <= r /\ (forall x : V, `|f x| <= `|x| * r )).
4232+
Lemma linear_boundedP (f : {linear V -> W}) :
4233+
(bounded_on f (nbhs (0 : V))) <->
4234+
exists r : R, 0 <= r /\ (forall x : V, `|f x| <= r * `|x|).
41624235
Proof.
4163-
split.
4164-
- move => /ex_bound [M /nbhs_ballP [a a0 Ba0]] //=.
4165-
exists (M * 2 *a^-1).
4166-
split.
4167-
- rewrite !mulr_ge0 //= ?invr_ge0 ; last by apply: ltW.
4168-
move : (Ba0 0 (ballxx 0 a0 )); rewrite linear0 normr0 //=.
4169-
- move => x. rewrite mulrA ler_pdivl_mulr //=.
4170-
case: (boolp.EM (x=0)).
4171-
- by move => ->; rewrite linear0 !normr0 !mul0r.
4172-
- move => /eqP x0 ; rewrite -lter_pdivr_mull ?normr_gt0 //=.
4173-
rewrite [X in ( _ <= X)]mulrC -lter_pdivr_mull //=.
4174-
have ->: 2^-1 *(`|x|^-1 * (`|f x| * a))=`|f ((2^-1 * `|x|^-1 * a)*:x)|.
4175-
rewrite linearZ normmZ !normrM !ger0_norm ?invr_ge0 //= ?ltW //=.
4176-
by rewrite mulrA mulrA mulrAC.
4177-
apply: Ba0 ;rewrite -ball_normE /= sub0r normrN ?normr_gt0 //=.
4178-
rewrite normmZ !normrM !normrV ?unitfE ?normrE // !ger0_norm ?ltW //=.
4179-
rewrite mulrAC -mulrA -mulrA [_ * (_ * a)]mulrA.
4180-
rewrite mulVr ?unitf_gt0 //= ?normr_gt0 //= mul1r.
4181-
rewrite mulrC gtr_pmulr ?invr_lte1 //= ?unitfE ?ltr_spaddr //=.
4182-
- move => [r [r0 fr]]; apply/ex_bound; exists r.
4183-
rewrite nbhs_ballP; exists 1; first by [].
4184-
move=> x; rewrite -ball_normE //= sub0r normrN => x1; apply: le_trans.
4185-
apply: fr.
4186-
rewrite -[X in _ <= X]mul1r; apply: ler_pmul; rewrite ?normr_ge0 //=.
4187-
by apply: ltW.
4188-
Qed.
4236+
split => [/linear_bounded | B].
4237+
by move=> /pinfty_ex_gt0 [M [M0 B]]; exists M; split; first by apply: ltW.
4238+
apply/linear_bounded; near_simpl. Admitted.
41894239

41904240
Lemma linear_continuous0 (f : {linear V -> W}) :
4191-
{for 0, continuous f} -> bounded_on f (nbhs (0:V)).
4192-
Proof.
4193-
move=> /cvg_ballP /(_ _ ltr01) .
4241+
{for 0, continuous f} -> bounded_on f (nbhs (0 : V)).
4242+
Proof.
4243+
(* move=> /cvg_distP; rewrite linear0 /= => Bf. *)
4244+
(* apply/linear_boundedP; near=> r => x. *)
4245+
(* have [->|x0] := eqVneq x 0; first by rewrite linear0 !normr0 mulr0. *)
4246+
(* rewrite -ler_pdivr_mulr; last by rewrite normr_gt0. *)
4247+
(* rewrite -(normr_id x) mulrC. *)
4248+
(* rewrite -normrV ?unitfE ?normr_eq0 // -normmZ -linearZ. *)
4249+
(* apply: ltW. move: (Bf r) x x0; near: r. apply/near_pinfty_div2. *)
4250+
move=> /cvg_ballP /(_ _ ltr01).
41944251
rewrite linear0 /= nearE => /nbhs_ex[tp ball_f]; apply/linear_boundedP.
4195-
pose t := tp%:num; exists (2 * t^-1); split => // x.
4196-
have [->|x0] := eqVneq x 0; first by rewrite linear0 !normr0 mul0r.
4252+
pose t := tp%:num; exists (2 * t^-1); split => [|x].
4253+
by apply: divr_ge0.
4254+
have [->|x0] := eqVneq x 0; first by rewrite linear0 !normr0 mulr0.
41974255
have /ball_f : ball 0 t ((`|x|^-1 * t /2) *: x).
41984256
apply: ball_sym; rewrite -ball_normE /ball_ subr0 normmZ mulrC 2!normrM.
41994257
rewrite 2!mulrA normrV ?unitfE ?normr_eq0 // normr_id.
@@ -4202,110 +4260,78 @@ have /ball_f : ball 0 t ((`|x|^-1 * t /2) *: x).
42024260
rewrite -ball_normE //= sub0r normrN linearZ /= normmZ -mulrA normrM.
42034261
rewrite normrV ?unitfE ?normr_eq0 // normr_id -mulrA.
42044262
rewrite ltr_pdivr_mull ?mulr1 ?normr_gt0 // -ltr_pdivl_mull ?normr_gt0 //.
4205-
by rewrite gtr0_norm // invf_div mulrC => /ltW.
4263+
rewrite gtr0_norm // invf_div => /ltW H. apply: le_trans; first by exact: H.
4264+
by apply: ler_pmul.
42064265
Qed.
42074266

42084267
Lemma linear_bounded0 (f : {linear V -> W}) :
4209-
bounded_on f (nbhs (0:V)) -> {for 0, continuous f} .
4268+
bounded_on f (nbhs (0 : V)) -> {for 0, continuous f} .
42104269
Proof.
42114270
move=> /linear_boundedP [r]; rewrite le0r=> [[/orP r0]]; case: r0.
42124271
- move/eqP => -> fr; apply: near_cst_continuous; near=> y.
4213-
by move: (fr y); rewrite mulr0 normr_le0; apply/eqP.
4272+
by move: (fr y); rewrite mul0r normr_le0; apply/eqP.
42144273
- move => r0 fr; apply/cvg_ballP => e e0.
42154274
rewrite nearE linear0 /= nbhs_ballP.
42164275
exists (e / 2 / r); first by rewrite !divr_gt0.
42174276
move=> x; rewrite -2!ball_normE /= 2!sub0r 2!normrN => xr.
42184277
have /le_lt_trans -> // : `|f x| <= e / 2.
4219-
by rewrite (le_trans (fr x)) // -ler_pdivl_mulr // ltW.
4278+
by rewrite (le_trans (fr x)) // mulrC -ler_pdivl_mulr // ltW.
42204279
by rewrite gtr_pmulr // invr_lt1 // ?unitfE // ltr1n.
4221-
Grab Existential Variables. by end_near.
4222-
Qed.
4280+
Grab Existential Variables. by end_near. Qed.
42234281

42244282
Lemma continuousfor0_continuous (f : {linear V -> W}) :
42254283
{for 0, continuous f} -> continuous f.
42264284
Proof.
4227-
move=> /(linear_continuous0) /linear_boundedP [r].
4228-
rewrite le0r=> [[/orP r0]]; case: r0 => /eqP.
4229-
- move => ->; move : f => [f linf] f0 //=. (* Linear linf = f ?? *)
4230-
suff: f = fun x => 0 by move => ->; apply: cst_continuous.
4231-
by apply: funext => x; move: (f0 x); rewrite mulr0 normr_le0; apply/eqP .
4232-
- move/eqP => //= r0 fr x.
4233-
rewrite cvg_to_locally => e e0; rewrite nearE /= nbhs_ballP.
4234-
exists (e / r).
4235-
- by rewrite mulr_gt0 //= invr_gt0.
4236-
- move=> y; rewrite -!ball_normE //= => xy; rewrite -linearB.
4237-
by rewrite (le_lt_trans (fr (x - y))) // -ltr_pdivl_mulr.
4285+
move=> /linear_continuous0 /linear_boundedP [r []].
4286+
rewrite le_eqVlt => /orP[/eqP <- f0|r0 fr x].
4287+
- suff : f = (fun _ => 0) :> (_ -> _) by move=> ->; exact: cst_continuous.
4288+
by rewrite funeqE => x; move: (f0 x); rewrite mul0r normr_le0 => /eqP.
4289+
- rewrite cvg_to_locally => e e0; rewrite nearE /= nbhs_ballP.
4290+
exists (e / r); first by rewrite divr_gt0.
4291+
move=> y; rewrite -!ball_normE //= => xy; rewrite -linearB.
4292+
by rewrite (le_lt_trans (fr (x - y))) // mulrC -ltr_pdivl_mulr.
42384293
Qed.
42394294

42404295
Lemma linear_bounded_continuous (f : {linear V -> W}) :
42414296
bounded_on f (nbhs (0 : V)) <-> continuous f.
42424297
Proof.
4243-
split; first by move=> /linear_bounded0; apply continuousfor0_continuous.
4244-
by move => /(_ 0) /linear_continuous0 /=.
4298+
split=> [/linear_bounded0|/(_ 0)/linear_continuous0//].
4299+
exact: continuousfor0_continuous.
42454300
Qed.
42464301

4247-
Definition bounded_fun_norm (f: V -> W) := forall r, exists M,
4248-
forall x, (`|x| <= r) -> (`|(f x)| <= M).
4302+
Definition bounded_fun_norm (f : V -> W) :=
4303+
forall r, exists M, forall x, `|x| <= r -> `|f x| <= M.
4304+
(*bounded_fun_on bounded_sets is harder to use*)
42494305

4250-
Definition pointwise_bounded (F: (V -> W) -> Prop) := forall x, exists M,
4251-
forall f , F f -> (`|f x| <= M)%O.
4306+
(* Definition pointwise_bounded (F : set (V -> W)) := *)
4307+
(* forall x, exists M, forall f, F f -> `|f x| <= M. *)
42524308

4253-
Definition uniform_bounded (F: (V -> W) -> Prop) := forall r, exists M,
4254-
forall f, F f -> forall x, (`|x| <= r) -> (`|f x| <= M)%O.
4309+
(* Definition uniform_bounded (F : set (V -> W)) := *)
4310+
(* forall r, exists M, forall f, F f -> forall x, `|x| <= r -> `|f x| <= M. *)
42554311

42564312
Lemma bounded_funP (f : {linear V -> W}):
4257-
bounded_fun_norm f <-> bounded_on f (nbhs (0:V)).
4258-
Proof.
4259-
split.
4260-
- move => /(_ 1) [M Bf]; apply /linear_boundedP.
4261-
have M0: (0 <= M) by move: (Bf 0); rewrite linear0 !normr0//= => /(_ ler01).
4262-
exists M; split; first by [].
4263-
move: M0; rewrite le0r => /orP; case.
4264-
- move=> /eqP M0; move: M0 Bf => -> Bf x; rewrite mulr0 normr_le0.
4265-
case: (EM (`|x| = 0)); move=>/eqP; rewrite normr_eq0=> /eqP x0.
4266-
- by rewrite x0 linear0.
4267-
- have x00: x != 0 by apply/eqP.
4268-
have : `| `|x|^-1 *: x | <= 1.
4269-
rewrite normmZ normrV ?unitf_gt0 ?normrE //=.
4270-
by rewrite mulrC mulrV ?unitf_gt0 ?normrE //=.
4271-
move=> /Bf; rewrite linearZ normr_le0 scaler_eq0 invr_eq0 => /orP.
4272-
by case ; rewrite ?normr_eq0 //=; move => /eqP ->; rewrite linear0.
4273-
- move => M0 x.
4274-
case: (EM ( x = 0)).
4275-
- by move=> ->;rewrite normr0 mul0r normr_le0 linear0.
4276-
- move => /eqP x0; rewrite mulrC -ler_pdivr_mulr ?normr_gt0 //= mulrC.
4277-
have <- : `| (`|x|^-1) | = `|x|^-1.
4278-
by apply/eqP; rewrite eqr_norm_id invr_ge0 normr_ge0.
4279-
rewrite -normmZ -linearZ; apply: (Bf (`|x|^-1 *: x)).
4280-
rewrite normmZ normrV ?unitf_gt0 ?normrE //=.
4281-
rewrite mulrC mulrV ?unitf_gt0 ?normrE //=.
4282-
- move => /linear_boundedP [r [r0 Bf]]; rewrite /bounded_fun_norm => e.
4283-
exists (e * r) => x xe; apply: le_trans; first by apply: Bf.
4284-
by apply: ler_pmul; rewrite ?normr_ge0 //=.
4285-
Qed.
4286-
4287-
4288-
4289-
(* Lemma bounded_landau (f :{linear V->W}) : *)
4290-
(* bounded_fun_norm f <-> ((f : V -> W) =O_ (0:V) cst (1 : K^o)). *)
4291-
(* Proof. *)
4292-
(* split. *)
4293-
(* - rewrite eqOP => bf. *)
4294-
(* move: (bf 1) => [M bm]. *)
4295-
(* rewrite !nearE /=; exists M; split. by apply : num_real. *)
4296-
(* move => x Mx; rewrite nearE nbhs_normP /=. *)
4297-
(* exists 1; first by []. *)
4298-
(* move => y /=. rewrite -ball_normE /ball_ sub0r normrN /cst normr1 mulr1 => y1. *)
4299-
(* apply: (@le_trans _ _ M _ _). *)
4300-
(* apply: (bm y); by apply: ltW. *)
4301-
(* by apply: ltW. *)
4302-
(* - rewrite eqOP /= ; move => Bf; apply/bounded_funP; rewrite /bounded_on. *)
4303-
(* near=>M. *)
4304-
(* set P := (X in (nbhs _ X)). *)
4305-
(* have -> : P = (fun x : V => (`|f x| <= M * `|cst 1%R x|)%O). *)
4306-
(* by apply: funext => x; rewrite /cst normr1 mulr1. *)
4307-
(* by near: M. *)
4308-
(* Grab Existential Variables. all: end_near. Qed. *)
4309-
4313+
bounded_fun_norm f <-> bounded_on f (nbhs (0 : V)).
4314+
Proof.
4315+
split => [/(_ 1) [M Bf]|/linear_boundedP [r [r0 Bf]] e]; last first.
4316+
by exists (e * r) => x xe; rewrite (le_trans (Bf _)) // mulrC ler_pmul.
4317+
apply/linear_boundedP.
4318+
have M0 : 0 <= M by move: (Bf 0); rewrite linear0 !normr0 => /(_ ler01).
4319+
exists M; split => //.
4320+
move: M0; rewrite le0r => /orP[/eqP|] M0 x.
4321+
- rewrite M0 mul0r normr_le0.
4322+
have [/eqP ->|x0] := boolP (x == 0); first by rewrite linear0.
4323+
have /Bf : `| `|x|^-1 *: x | <= 1.
4324+
rewrite normmZ normrV ?unitf_gt0 ?normrE //=.
4325+
by rewrite mulrC mulrV ?unitf_gt0 ?normrE.
4326+
rewrite linearZ M0 normr_le0 scaler_eq0 invr_eq0 => /orP[|//].
4327+
by rewrite normr_eq0 => /eqP ->; rewrite linear0.
4328+
- have [/eqP ->|x0] := boolP (x == 0).
4329+
+ by rewrite normr0 mulr0 normr_le0 linear0.
4330+
+ rewrite -ler_pdivr_mulr ?normr_gt0 //= mulrC.
4331+
have xx1 : `| `|x|^-1 | = `|x|^-1.
4332+
by rewrite normrV ?unitfE ?normr_eq0 // normr_id.
4333+
rewrite -xx1 -normmZ -linearZ; apply: (Bf (`|x|^-1 *: x)).
4334+
by rewrite normmZ xx1 mulVr // unitfE normr_eq0.
4335+
Qed.
43104336

43114337
End LinearContinuousBounded.

0 commit comments

Comments
 (0)