@@ -341,3 +341,106 @@ rewrite neq_lt => /orP[tp|pt].
341341Unshelve. all: by end_near. Qed .
342342
343343End cvg_at_right_left_dnbhs.
344+
345+ Section at_left_rightR.
346+ Variable (R : numFieldType).
347+
348+ (**md `cvgrPdistC_lt` is also defined in `pseudometric_normed_Zmodule.v` where it only needs `numDomainType` *)
349+ Let cvgrPdistC_lt {T} {F : set_system T} {FF : Filter F} (f : T -> R^o) (y : R) :
350+ f @ F --> y <-> forall eps, 0 < eps -> \forall t \near F, mdist (f t) y < eps.
351+ Proof .
352+ rewrite metricType_numDomainType.cvgrPdist_lt.
353+ by under eq_forall do under eq_near do rewrite /mdist/= (@distrC _ R^o).
354+ Qed .
355+
356+ (**md `cvgr_distC_lt` is also defined in `pseudometric_normed_Zmodule.v` where it only needs `numDomainType` *)
357+ Let cvgr_distC_lt {T} {F : set_system T} {FF : Filter F} (f : T -> R^o) (y : R) :
358+ f @ F --> y -> forall eps, eps > 0 -> \forall t \near F, mdist (f t) y < eps.
359+ Proof . by move=> /cvgrPdistC_lt. Qed .
360+
361+ Lemma real_cvgr_lt {T} {F : set_system T} {FF : Filter F} (f : T -> R) (y : R) :
362+ y \is Num.real -> f @ F --> y ->
363+ forall z, z > y -> \forall t \near F, f t \is Num.real -> f t < z.
364+ Proof .
365+ move=> yr Fy z zy; near=> x => fxr.
366+ rewrite -(ltrD2r (- y)) real_ltr_normlW// ?rpredB// distrC.
367+ by near: x; apply: cvgr_distC_lt => //; rewrite subr_gt0.
368+ Unshelve. all: by end_near. Qed .
369+
370+ Lemma real_cvgr_le {T} {F : set_system T} {FF : Filter F} (f : T -> R) (y : R) :
371+ y \is Num.real -> f @ F --> y ->
372+ forall z, z > y -> \forall t \near F, f t \is Num.real -> f t <= z.
373+ Proof .
374+ move=> /real_cvgr_lt/[apply] + ? z0 => /(_ _ z0).
375+ by apply: filterS => ? /[apply]/ltW.
376+ Qed .
377+
378+ Lemma real_cvgr_gt {T} {F : set_system T} {FF : Filter F} (f : T -> R) (y : R) :
379+ y \is Num.real -> f @ F --> y ->
380+ forall z, y > z -> \forall t \near F, f t \is Num.real -> f t > z.
381+ Proof .
382+ move=> yr Fy z zy; near=> x => fxr.
383+ rewrite -ltrN2 -(ltrD2l y) real_ltr_normlW// ?rpredB// distrC.
384+ by near: x; apply: (@metricType_numDomainType.cvgr_dist_lt _ R^o) => //; rewrite subr_gt0.
385+ Unshelve. all: by end_near. Qed .
386+
387+ Lemma real_cvgr_ge {T} {F : set_system T} {FF : Filter F} (f : T -> R) (y : R) :
388+ y \is Num.real -> f @ F --> y ->
389+ forall z, z < y -> \forall t \near F, f t \is Num.real -> f t >= z.
390+ Proof .
391+ move=> /real_cvgr_gt/[apply] + ? z0 => /(_ _ z0).
392+ by apply: filterS => ? /[apply]/ltW.
393+ Qed .
394+
395+ End at_left_rightR.
396+ Arguments real_cvgr_le {R T F FF f}.
397+ Arguments real_cvgr_lt {R T F FF f}.
398+ Arguments real_cvgr_ge {R T F FF f}.
399+ Arguments real_cvgr_gt {R T F FF f}.
400+
401+ Section squeeze_cvgr.
402+ Context {T : Type} {F : set_system T} {FF : Filter F} {R : realFieldType}.
403+ Implicit Types f g h : T -> R.
404+
405+ Lemma cvgr_lt f (y : R) :
406+ f @ F --> y -> forall z, z > y -> \forall t \near F, f t < z.
407+ Proof .
408+ move=> Fy z zy; near=> x; rewrite -(ltrD2r (- y)) ltr_normlW//.
409+ by near: x; apply: (@metricType_numDomainType.cvgr_dist_lt _ R^o) => //; rewrite subr_gt0.
410+ Unshelve. all: by end_near. Qed .
411+
412+ Lemma cvgr_gt f (y : R) :
413+ f @ F --> y -> forall z, y > z -> \forall t \near F, f t > z.
414+ Proof .
415+ move=> Fy z zy; near=> x; rewrite -ltrN2 -(ltrD2l y) ltr_normlW// distrC.
416+ by near: x; apply: (@metricType_numDomainType.cvgr_dist_lt _ R^o) => //; rewrite subr_gt0.
417+ Unshelve. all: by end_near. Qed .
418+
419+ Lemma cvgr_le f (y : R) :
420+ f @ F --> y -> forall z, z > y -> \forall t \near F, f t <= z.
421+ Proof .
422+ by move=> /cvgr_lt + ? z0 => /(_ _ z0); apply: filterS => ?; apply/ltW.
423+ Qed .
424+
425+ Lemma cvgr_ge f (y : R) :
426+ f @ F --> y -> forall z, z < y -> \forall t \near F, f t >= z.
427+ Proof .
428+ by move=> /cvgr_gt + ? z0 => /(_ _ z0); apply: filterS => ?; apply/ltW.
429+ Qed .
430+
431+ Lemma squeeze_cvgr f h g : (\near F, f F <= g F <= h F) ->
432+ forall (l : R), f @ F --> l -> h @ F --> l -> g @ F --> l.
433+ Proof .
434+ move=> fgh l lfa lga.
435+ apply/(@metricType_numDomainType.cvgrPdist_lt R R^o) => e e_gt0.
436+ near=> x; have /(_ _)/andP[//|fg gh] := near fgh x.
437+ rewrite ltr_distl (lt_le_trans _ fg) ?(le_lt_trans gh)//=.
438+ by near: x; apply: (cvgr_gt lfa); rewrite // gtrDl oppr_lt0.
439+ by near: x; apply: (cvgr_lt lga); rewrite // ltrDl.
440+ Unshelve. all: end_near. Qed .
441+
442+ End squeeze_cvgr.
443+ Arguments cvgr_lt {T F FF R f}.
444+ Arguments cvgr_gt {T F FF R f}.
445+ Arguments cvgr_le {T F FF R f}.
446+ Arguments cvgr_ge {T F FF R f}.
0 commit comments