@@ -8,7 +8,6 @@ From mathcomp Require Import cardinality set_interval ereal reals.
88From mathcomp Require Import signed topology prodnormedzmodule function_spaces.
99From mathcomp Require Export real_interval separation_axioms tvs.
1010
11-
1211(**md************************************************************************* *)
1312(* # Norm-related Notions *)
1413(* *)
@@ -2158,31 +2157,58 @@ by apply: xe_A => //; rewrite eq_sym.
21582157Qed .
21592158Arguments cvg_at_leftE {R V} f x.
21602159
2161- Lemma continuous_within_itvP {R : realType } a b (f : R -> R) :
2162- a < b ->
2160+ Section continuous_within_itvP.
2161+ Context {R : realType}.
2162+ Implicit Type f : R -> R.
2163+
2164+ Let near_at_left (a : itv_bound R) b f eps : (a < BLeft b)%O -> 0 < eps ->
2165+ {within [set` Interval a (BRight b)], continuous f} ->
2166+ \forall t \near b^'-, normr (f b - f t) < eps.
2167+ Proof .
2168+ move=> ab eps_gt0 cf.
2169+ move/continuous_withinNx/cvgrPdist_lt/(_ _ eps_gt0) : (cf b).
2170+ rewrite /dnbhs/= near_withinE !near_simpl /prop_near1 /nbhs/=.
2171+ rewrite -nbhs_subspace_in//; last first.
2172+ rewrite /= in_itv/= lexx andbT.
2173+ by move: a ab {cf} => [[a|a]/=|[|]//]; rewrite bnd_simp// => /ltW.
2174+ rewrite /within/= near_simpl; apply: filter_app.
2175+ move: a ab {cf} => [a0 a/= /[!bnd_simp] ab|[_|//]].
2176+ - exists (b - a); rewrite /= ?subr_gt0// => c cba + ac.
2177+ apply=> //; rewrite ?lt_eqF// !in_itv/= (ltW ac)/= andbT; move: cba => /=.
2178+ rewrite gtr0_norm ?subr_gt0// ltrD2l ltrNr opprK => {}ac.
2179+ by case: a0 => //=; exact/ltW.
2180+ - by exists 1%R => //= c cb1 + bc; apply; rewrite ?lt_eqF ?in_itv/= ?ltW.
2181+ Qed .
2182+
2183+ Let near_at_right a (b : itv_bound R) f eps : (BRight a < b)%O -> 0 < eps ->
2184+ {within [set` Interval (BLeft a) b], continuous f} ->
2185+ \forall t \near a^'+, normr (f a - f t) < eps.
2186+ Proof .
2187+ move=> ab eps_gt0 cf.
2188+ move/continuous_withinNx/cvgrPdist_lt/(_ _ eps_gt0) : (cf a).
2189+ rewrite /dnbhs/= near_withinE !near_simpl// /prop_near1 /nbhs/=.
2190+ rewrite -nbhs_subspace_in//; last first.
2191+ rewrite /= in_itv/= lexx//=.
2192+ by move: b ab {cf} => [[b|b]/=|[|]//]; rewrite bnd_simp// => /ltW.
2193+ rewrite /within/= near_simpl; apply: filter_app.
2194+ move: b ab {cf} => [b0 b/= /[!bnd_simp] ab|[//|_]].
2195+ - exists (b - a); rewrite /= ?subr_gt0// => c cba + ac.
2196+ apply=> //; rewrite ?gt_eqF// !in_itv/= (ltW ac)/=; move: cba => /=.
2197+ rewrite ltr0_norm ?subr_lt0// opprB ltrD2r.
2198+ by case: b0 => //= /ltW.
2199+ - by exists 2%R => //= c ca1 + ac; apply; rewrite ?gt_eqF ?in_itv/= ?ltW.
2200+ Qed .
2201+
2202+ Lemma continuous_within_itvP a b f : a < b ->
21632203 {within `[a, b], continuous f} <->
21642204 [/\ {in `]a, b[, continuous f}, f @ a^'+ --> f a & f @b^'- --> f b].
21652205Proof .
21662206move=> ab; split=> [abf|].
2167- have [aab bab] : a \in `[a, b] /\ b \in `[a, b].
2168- by rewrite !in_itv/= !lexx (ltW ab).
2169- split; [|apply/cvgrPdist_lt => eps eps_gt0 /=..].
2170- - suff : {in `]a, b[%classic, continuous f}.
2171- by move=> P c W; apply: P; rewrite inE.
2172- rewrite -continuous_open_subspace; last exact: interval_open.
2207+ split; [apply/in_continuous_mksetP|apply/cvgrPdist_lt => eps eps_gt0 /=..].
2208+ - rewrite -continuous_open_subspace; last exact: interval_open.
21732209 by move: abf; exact/continuous_subspaceW/subset_itvW.
2174- - move/continuous_withinNx/cvgrPdist_lt/(_ _ eps_gt0) : (abf a).
2175- rewrite /dnbhs/= near_withinE !near_simpl// /prop_near1 /nbhs/=.
2176- rewrite -nbhs_subspace_in// /within/= near_simpl.
2177- apply: filter_app; exists (b - a); rewrite /= ?subr_gt0// => c cba + ac.
2178- apply=> //; rewrite ?gt_eqF// !in_itv/= (ltW ac)/=; move: cba => /=.
2179- by rewrite ltr0_norm ?subr_lt0// opprB ltrD2r => /ltW.
2180- - move/continuous_withinNx/cvgrPdist_lt/(_ _ eps_gt0) : (abf b).
2181- rewrite /dnbhs/= near_withinE !near_simpl /prop_near1 /nbhs/=.
2182- rewrite -nbhs_subspace_in// /within/= near_simpl.
2183- apply: filter_app; exists (b - a); rewrite /= ?subr_gt0// => c cba + ac.
2184- apply=> //; rewrite ?lt_eqF// !in_itv/= (ltW ac)/= andbT; move: cba => /=.
2185- by rewrite gtr0_norm ?subr_gt0// ltrD2l ltrNr opprK => /ltW.
2210+ - by apply: near_at_right => //; rewrite bnd_simp.
2211+ - by apply: near_at_left => //; rewrite bnd_simp.
21862212case=> ctsoo ctsL ctsR; apply/subspace_continuousP => x /andP[].
21872213rewrite !bnd_simp/= !le_eqVlt => /predU1P[<-{x}|ax] /predU1P[|].
21882214- by move/eqP; rewrite lt_eqF.
@@ -2202,6 +2228,52 @@ rewrite !bnd_simp/= !le_eqVlt => /predU1P[<-{x}|ax] /predU1P[|].
22022228 by rewrite -open_subsetE; [exact: subset_itvW| exact: interval_open].
22032229Qed .
22042230
2231+ Lemma continuous_within_itvcyP a (f : R -> R) :
2232+ {within `[a, +oo[, continuous f} <->
2233+ {in `]a, +oo[, continuous f} /\ f x @[x --> a^'+] --> f a.
2234+ Proof .
2235+ split=> [cf|].
2236+ split; [apply/in_continuous_mksetP|apply/cvgrPdist_lt => eps eps_gt0 /=].
2237+ - rewrite -continuous_open_subspace; last exact: interval_open.
2238+ by apply: continuous_subspaceW cf => ?; rewrite /= !in_itv !andbT/= => /ltW.
2239+ - by apply: near_at_right => //; rewrite bnd_simp.
2240+ move=> [cf fa]; apply/subspace_continuousP => x /andP[].
2241+ rewrite bnd_simp/= le_eqVlt => /predU1P[<-{x}|ax] _.
2242+ - apply/cvgrPdist_lt => eps eps_gt0/=; move/cvgrPdist_lt/(_ _ eps_gt0) : fa.
2243+ rewrite /at_right !near_withinE; apply: filter_app.
2244+ exists 1%R => //= c c1a /[swap]; rewrite in_itv/= andbT le_eqVlt.
2245+ by move=> /predU1P[->|/[swap]/[apply]//]; rewrite subrr normr0.
2246+ - have xaoo : x \in `]a, +oo[ by rewrite in_itv/= andbT.
2247+ rewrite within_interior; first exact: cf.
2248+ suff : `]a, +oo[ `<=` interior `[a, +oo[ by exact.
2249+ rewrite -open_subsetE; last exact: interval_open.
2250+ by move=> ?/=; rewrite !in_itv/= !andbT; exact: ltW.
2251+ Qed .
2252+
2253+ Lemma continuous_within_itvNycP b (f : R -> R) :
2254+ {within `]-oo, b], continuous f} <->
2255+ {in `]-oo, b[, continuous f} /\ f x @[x --> b^'-] --> f b.
2256+ Proof .
2257+ split=> [cf|].
2258+ split; [apply/in_continuous_mksetP|apply/cvgrPdist_lt => eps eps_gt0 /=].
2259+ - rewrite -continuous_open_subspace; last exact: interval_open.
2260+ by apply: continuous_subspaceW cf => ?/=; rewrite !in_itv/=; exact: ltW.
2261+ - by apply: near_at_left => //; rewrite bnd_simp.
2262+ move=> [cf fb]; apply/subspace_continuousP => x /andP[_].
2263+ rewrite bnd_simp/= le_eqVlt=> /predU1P[->{x}|xb].
2264+ - apply/cvgrPdist_lt => eps eps_gt0/=; move/cvgrPdist_lt/(_ _ eps_gt0) : fb.
2265+ rewrite /at_right !near_withinE; apply: filter_app.
2266+ exists 1%R => //= c c1b /[swap]; rewrite in_itv/= le_eqVlt.
2267+ by move=> /predU1P[->|/[swap]/[apply]//]; rewrite subrr normr0.
2268+ - have xb_i : x \in `]-oo, b[ by rewrite in_itv/=.
2269+ rewrite within_interior; first exact: cf.
2270+ suff : `]-oo, b[ `<=` interior `]-oo, b] by exact.
2271+ rewrite -open_subsetE; last exact: interval_open.
2272+ by move=> ?/=; rewrite !in_itv/=; exact: ltW.
2273+ Qed .
2274+
2275+ End continuous_within_itvP.
2276+
22052277Lemma within_continuous_continuous {R : realType} a b (f : R -> R) x : (a < b)%R ->
22062278 {within `[a, b], continuous f} -> x \in `]a, b[ -> {for x, continuous f}.
22072279Proof .
0 commit comments