Skip to content

Commit 1b1c6be

Browse files
authored
Merge pull request #245 from math-comp/uniform_spaces
Generalise properties from pseudo metric to uniform spaces
2 parents d1c38a2 + c07d14a commit 1b1c6be

2 files changed

Lines changed: 81 additions & 35 deletions

File tree

CHANGELOG_UNRELEASED.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
`subset_split_ent`, `entourage_split`, `nbhs_entourage`, `cvg_entourageP`,
1919
`cvg_entourage`, `cvg_app_entourageP`, `cvg_mx_entourageP`,
2020
`cvg_fct_entourageP`, `entourage_E`, `entourage_ballE`,
21-
`entourage_from_ballE`, `entourage_ball`, `entourage_proper_filter`
21+
`entourage_from_ballE`, `entourage_ball`, `entourage_proper_filter`,
22+
`open_nbhs_entourage`, `entourage_close`
2223
+ `completePseudoMetricType` structure
2324
+ `completePseudoMetricType` structure on matrices and function spaces
2425
- in `classical_sets.v`:
@@ -62,6 +63,10 @@
6263
`R_uniformType`, `R_pseudoMetricType`
6364
+ lemmas `continuity_pt_nbhs`, `continuity_pt_cvg`, `continuity_ptE`,
6465
`continuity_pt_cvg'`, `continuity_pt_nbhs'`, `nbhs_pt_comp`
66+
+ lemmas `close_trans`, `close_cvgxx`, `cvg_closeP` and `close_cluster` are
67+
valid for a `uniformType`
68+
+ moved `continuous_withinNx` from `normedType.v` to `topology.v` and
69+
generalised it to `uniformType`
6570

6671
### Renamed
6772

theories/topology.v

Lines changed: 75 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2854,6 +2854,81 @@ Hint Extern 0 (entourage (get _)) => exact: entourage_split_ent : core.
28542854
Arguments entourage_split {M} z {x y A}.
28552855
Hint Extern 0 (nbhs _ (to_set _ _)) => exact: nbhs_entourage : core.
28562856

2857+
Lemma continuous_withinNx {U V : uniformType} (f : U -> V) x :
2858+
{for x, continuous f} <-> f @ nbhs' x --> f x.
2859+
Proof.
2860+
split=> - cfx P /= fxP.
2861+
rewrite /nbhs' !near_simpl near_withinE.
2862+
by rewrite /nbhs'; apply: cvg_within; apply/cfx.
2863+
(* :BUG: ssr apply: does not work,
2864+
because the type of the filter is not inferred *)
2865+
rewrite !nbhs_nearE !near_map !near_nbhs in fxP *; have /= := cfx P fxP.
2866+
rewrite !near_simpl near_withinE near_simpl => Pf; near=> y.
2867+
by have [->|] := eqVneq y x; [by apply: nbhs_singleton|near: y].
2868+
Grab Existential Variables. all: end_near. Qed.
2869+
2870+
Section uniform_closeness.
2871+
2872+
Variable (U : uniformType).
2873+
2874+
Lemma open_nbhs_entourage (x : U) (A : set (U * U)) :
2875+
entourage A -> open_nbhs x (to_set A x)^°.
2876+
Proof.
2877+
move=> entA; split; first exact: open_interior.
2878+
by apply: nbhs_singleton; apply: nbhs_interior; apply: nbhs_entourage.
2879+
Qed.
2880+
2881+
Lemma entourage_close (x y : U) :
2882+
close x y = forall A, entourage A -> A (x, y).
2883+
Proof.
2884+
rewrite propeqE; split=> [cxy A entA|cxy].
2885+
have /entourage_split_ent entsA := entA.
2886+
have [z [/interior_subset zx /interior_subset /= zy]] :=
2887+
cxy _ (open_nbhs_entourage _ (entourage_inv entsA))
2888+
_ (open_nbhs_entourage _ entsA).
2889+
exact: (entourage_split z).
2890+
move=> A /open_nbhs_nbhs/nbhsP[E1 entE1 sE1A].
2891+
move=> B /open_nbhs_nbhs/nbhsP[E2 entE2 sE2B].
2892+
by exists y; split; [apply/sE2B; apply: cxy|apply/sE1A; apply: entourage_refl].
2893+
Qed.
2894+
2895+
Lemma close_trans (y x z : U) : close x y -> close y z -> close x z.
2896+
Proof.
2897+
rewrite !entourage_close => cxy cyz A entA.
2898+
exact: entourage_split (cxy _ _) (cyz _ _).
2899+
Qed.
2900+
2901+
Lemma close_cvgxx (x y : U) : close x y -> x --> y.
2902+
Proof.
2903+
rewrite entourage_close => cxy P /= /nbhsP[A entA sAP].
2904+
apply/nbhsP; exists (split_ent A) => // z xz; apply: sAP.
2905+
apply: (entourage_split x) => //.
2906+
by have := cxy _ (entourage_inv (entourage_split_ent entA)).
2907+
Qed.
2908+
2909+
Lemma cvg_closeP (F : set (set U)) (l : U) : ProperFilter F ->
2910+
F --> l <-> ([cvg F in U] /\ close (lim F) l).
2911+
Proof.
2912+
move=> FF; split=> [Fl|[cvF]Cl].
2913+
by have /cvgP := Fl; split=> //; apply: (@cvg_close _ F).
2914+
by apply: cvg_trans (close_cvgxx Cl).
2915+
Qed.
2916+
2917+
Lemma close_cluster (x y : U) : close x y = cluster (nbhs x) y.
2918+
Proof.
2919+
rewrite propeqE; split => xy.
2920+
- move=> A B xA; rewrite -nbhs_entourageE => -[E entE sEB].
2921+
exists x; split; first exact: nbhs_singleton.
2922+
by apply/sEB; move/close_sym: xy; rewrite entourage_close; apply.
2923+
- rewrite entourage_close => A entA.
2924+
have /entourage_split_ent entsA := entA.
2925+
have [z [/= zx zy]] :=
2926+
xy _ _ (nbhs_entourage _ entsA) (nbhs_entourage _ (entourage_inv entsA)).
2927+
exact: (entourage_split z).
2928+
Qed.
2929+
2930+
End uniform_closeness.
2931+
28572932
Definition unif_continuous (U V : uniformType) (f : U -> V) :=
28582933
(fun xy => (f xy.1, f xy.2)) @ entourage --> entourage.
28592934

@@ -3393,26 +3468,6 @@ move=> A /open_nbhs_nbhs/nbhs_ballP[_/posnumP[e1 e1A]].
33933468
by exists y; split; [apply/e1A|apply/e2B/ballxx].
33943469
Qed.
33953470

3396-
Lemma close_trans (y x z : M) : close x y -> close y z -> close x z.
3397-
Proof.
3398-
by rewrite !ball_close => cxy cyz eps; apply: ball_split (cxy _) (cyz _).
3399-
Qed.
3400-
3401-
Lemma close_cvgxx (x y : M) : close x y -> x --> y.
3402-
Proof.
3403-
rewrite ball_close => cxy P /= /nbhs_ballP /= [_/posnumP [eps] epsP].
3404-
apply/nbhs_ballP; exists (eps%:num / 2) => // z bxz.
3405-
by apply: epsP; apply: ball_splitr (cxy _) bxz.
3406-
Qed.
3407-
3408-
Lemma cvg_closeP (F : set (set M)) (l : M) : ProperFilter F ->
3409-
F --> l <-> ([cvg F in M] /\ close (lim F) l).
3410-
Proof.
3411-
move=> FF; split=> [Fl|[cvF]Cl].
3412-
by have /cvgP := Fl; split=> //; apply: (@cvg_close _ F).
3413-
by apply: cvg_trans (close_cvgxx Cl).
3414-
Qed.
3415-
34163471
End pseudoMetricType_numFieldType.
34173472

34183473
Section ball_hausdorff.
@@ -3435,20 +3490,6 @@ by rewrite (subsetI_eq0 _ _ brs_eq0)//; apply: interior_subset.
34353490
Qed.
34363491
End ball_hausdorff.
34373492

3438-
Lemma close_cluster (R : numFieldType) (T : pseudoMetricType R) (x y : T) :
3439-
close x y = cluster (nbhs x) y.
3440-
Proof.
3441-
rewrite propeqE; split => xy.
3442-
- move=> A B xA; rewrite -nbhs_ballE => -[_/posnumP[e] yeB].
3443-
exists x; split; first exact: nbhs_singleton.
3444-
by apply/yeB/ball_sym; move: e {yeB}; rewrite -ball_close.
3445-
- rewrite ball_close => e.
3446-
have e20 : 0 < e%:num / 2 by apply: divr_gt0.
3447-
set e2 := PosNum e20.
3448-
case: (xy _ _ (nbhsx_ballx x e2) (nbhsx_ballx y e2)) => z [xz /ball_sym zy].
3449-
by rewrite (splitr e%:num); exact: (ball_triangle xz).
3450-
Qed.
3451-
34523493
Section entourages.
34533494
Variable R : numDomainType.
34543495
Lemma unif_continuousP (U V : pseudoMetricType R) (f : U -> V) :

0 commit comments

Comments
 (0)