Skip to content

Commit 61b7572

Browse files
add continuous_within_itvcyP/ycP (#1376)
* add continuous_within_itvcNyP/ycP --------- Co-authored-by: Reynald Affeldt <[email protected]>
1 parent a8aac90 commit 61b7572

File tree

3 files changed

+106
-21
lines changed

3 files changed

+106
-21
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44

55
### Added
66

7+
- in `num_topology.v`:
8+
+ lemma `in_continuous_mksetP`
9+
10+
- in `normedtype.v`:
11+
+ lemmas `continuous_within_itvcyP`, `continuous_within_itvNycP`
12+
713
### Changed
814

915
### Renamed

theories/normedtype.v

Lines changed: 93 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ From mathcomp Require Import cardinality set_interval ereal reals.
88
From mathcomp Require Import signed topology prodnormedzmodule function_spaces.
99
From 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.
21582157
Qed.
21592158
Arguments 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].
21652205
Proof.
21662206
move=> 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.
21862212
case=> ctsoo ctsL ctsR; apply/subspace_continuousP => x /andP[].
21872213
rewrite !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].
22032229
Qed.
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+
22052277
Lemma 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}.
22072279
Proof.

theories/topology_theory/num_topology.v

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ End numFieldTopology.
9090

9191
Import numFieldTopology.Exports.
9292

93+
Lemma in_continuous_mksetP {T : realFieldType} {U : realFieldType}
94+
(i : interval T) (f : T -> U) :
95+
{in i, continuous f} <-> {in [set` i], continuous f}.
96+
Proof.
97+
by split => [fi x /set_mem/=|fi x xi]; [exact: fi|apply: fi; rewrite inE].
98+
Qed.
99+
93100
Lemma nbhs0_ltW (R : realFieldType) (x : R) : (0 < x)%R ->
94101
\forall r \near nbhs (0%R:R), (r <= x)%R.
95102
Proof.

0 commit comments

Comments
 (0)