Module mathcomp.analysis.topology_theory.uniform_structure
From HB Require Import structures.From mathcomp Require Import boot order algebra all_classical.
From mathcomp Require Import topology_structure.
# Uniform Spaces
This file provides uniform spaces, and their theory. It also includes
complete spaces, which extends uniform in the hierarchy.
## Mathematical structures
### Uniform
```
nbhs_ ent == neighborhoods defined using entourages
uniformType == interface type for uniform spaces: a
type equipped with entourages
The HB class is Uniform.
puniformType == a pointed and uniform space
entourage == set of entourages in a uniform space
split_ent E == when E is an entourage, split_ent E is
an entourage E' such that E' \o E' is
included in E when seen as a relation
countable_uniformity T == T's entourage has a countable base
This is equivalent to `T` being
metrizable.
unif_continuous f == f is uniformly continuous
entourage_ ball == entourages defined using balls
```
## Factories
```
Nbhs_isUniform == factory to build a topological space
from a mixin for a uniform space
```
### Complete uniform spaces
```
cauchy F <-> the set of sets F is a cauchy filter
(entourage definition)
completeType == interface type for a complete uniform
space structure
The HB class is Complete.
```
Unset SsrOldRewriteGoalsOrder.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Local Open Scope classical_set_scope.
Local Open Scope ring_scope.
Definition
nbhs_
Source code
{ } (Source code
ent
Source code
: set_system (T * T')) ( : T) :=Source code
filter_from ent (fun => xsection A x).
Lemma
nbhs_E
Source code
{ } (Source code
ent
Source code
: set_system (T * T')) :Source code
nbhs_ ent x = filter_from ent (fun => xsection A x).
Proof.
by []. Qed.
Local Open Scope relation_scope.
.
mixin
Source code
Source code
Record
Source code
Source code
Nbhs_isUniform_mixin
Source code
Source code
Nbhs
Source code
M := {Source code
entourage : set_system (M * M);
entourage_filter : Filter entourage;
entourage_diagonal_subproof :
forall , entourage A -> diagonal `<=` A;
entourage_inv_subproof : forall , entourage A -> entourage A^-1;
entourage_split_ex_subproof :
forall , entourage A -> exists2 , entourage B & B \; B `<=` A;
nbhsE_subproof : nbhs = nbhs_ entourage;
}.
#[short
Source code
(Source code
type=
Source code
Source code
"uniformType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
Uniform
Source code
Source code
{ of Topological T & Nbhs_isUniform_mixin T}.
#[short
Source code
(Source code
type=
Source code
Source code
"puniformType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
PointedUniform
Source code
Source code
{ of PointedTopological T & Nbhs_isUniform_mixin T}.
.
factory
Source code
Source code
Record
Source code
Source code
Nbhs_isUniform
Source code
Source code
Nbhs
Source code
M := {Source code
entourage : set_system (M * M);
entourage_filter : Filter entourage;
entourage_diagonal : forall , entourage A -> diagonal `<=` A;
entourage_inv : forall , entourage A -> entourage A^-1;
entourage_split_ex :
forall , entourage A -> exists2 , entourage B & B \; B `<=` A;
nbhsE : nbhs = nbhs_ entourage;
}.
Local Close Scope relation_scope.
.
builders
Source code
Source code
Context
Source code
Source code
Nbhs_isUniform
Source code
M.Source code
Let
nbhs_filter
Source code
( : M) : ProperFilter (nbhs p).Source code
Proof.
rewrite nbhsE nbhs_E; apply: filter_from_proper; last first.
by move=> A entA; exists p; apply/mem_set; apply: entourage_diagonal entA _ _.
apply: filter_from_filter.
by exists setT; exact: @filterT entourage_filter.
move=> A B entA entB; exists (A `&` B); last by rewrite xsectionI.
exact: (@filterI _ _ entourage_filter).
Qed.
by move=> A entA; exists p; apply/mem_set; apply: entourage_diagonal entA _ _.
apply: filter_from_filter.
by exists setT; exact: @filterT entourage_filter.
move=> A B entA entB; exists (A `&` B); last by rewrite xsectionI.
exact: (@filterI _ _ entourage_filter).
Qed.
Let
nbhs_singleton
Source code
( : M) : nbhs p A -> A p.Source code
Proof.
rewrite nbhsE nbhs_E => - [B entB sBpA].
by apply/sBpA/mem_set; exact: entourage_diagonal entB _ _.
Qed.
by apply/sBpA/mem_set; exact: entourage_diagonal entB _ _.
Qed.
Let
nbhs_nbhs
Source code
( : M) : nbhs p A -> nbhs p (nbhs^~ A).Source code
Proof.
.
instance
Source code
Source code
Definition
Source code
Source code
Nbhs_isNbhsTopological
Source code
.Build MSource code
nbhs_filter nbhs_singleton nbhs_nbhs.
.
instance
Source code
Source code
Definition
Source code
Source code
Nbhs_isUniform_mixin
Source code
.Build MSource code
entourage_filter entourage_diagonal entourage_inv entourage_split_ex nbhsE.
.
end
Source code
.Source code
Local Open Scope relation_scope.
.
factory
Source code
Source code
Record
Source code
Source code
isUniform
Source code
Source code
Choice
Source code
M := {Source code
entourage : set_system (M * M);
entourage_filter : Filter entourage;
entourage_diagonal : forall , entourage A -> diagonal `<=` A;
entourage_inv : forall , entourage A -> entourage A^-1;
entourage_split_ex :
forall , entourage A -> exists2 , entourage B & B \; B `<=` A;
}.
Local Close Scope relation_scope.
.
builders
Source code
Source code
Context
Source code
Source code
isUniform
Source code
M.Source code
.
instance
Source code
Source code
Definition
Source code
Source code
@hasNbhs
Source code
.Build M (nbhs_ entourage).Source code
.
instance
Source code
Source code
Definition
Source code
Source code
@Nbhs_isUniform
Source code
.Build M entourageSource code
entourage_filter entourage_diagonal entourage_inv entourage_split_ex erefl.
.
end
Source code
.Source code
Lemma
nbhs_entourageE
Source code
{ : uniformType} : nbhs_ (@entourage M) = nbhs.Source code
Proof.
Lemma
entourage_sym
Source code
{ : Type} ( : X) ( : Y) :Source code
E (x, y) <-> (E ^-1)%relation (y, x).
Proof.
by []. Qed.
Lemma
filter_from_entourageE
Source code
{ : uniformType} :Source code
filter_from (@entourage M) (fun => xsection A x) = nbhs x.
Proof.
Module Export
NbhsEntourage
Source code
.Source code
Definition
nbhs_simpl
Source code
:=Source code
(nbhs_simpl,@filter_from_entourageE,@nbhs_entourageE).
End NbhsEntourage.
Lemma
nbhsP
Source code
{ : uniformType} ( : M) : nbhs x P <-> nbhs_ entourage x P.Source code
Proof.
Lemma
filter_inv
Source code
{ : Type} ( : set_system (T * T)) :Source code
Filter F -> Filter [set V^-1 | in F]%relation.
Proof.
move=> FF; split => /=.
- by exists [set: T * T] => //; exact: filterT.
- by move=> P Q [R FR <-] [S FS <-]; exists (R `&` S) => //; exact: filterI.
- move=> P Q PQ [R FR RP]; exists Q^-1%relation => //; first last.
by rewrite eqEsubset; split; case.
by apply: filterS FR; case=> ? ? /= ?; apply: PQ; rewrite -RP.
Qed.
- by exists [set: T * T] => //; exact: filterT.
- by move=> P Q [R FR <-] [S FS <-]; exists (R `&` S) => //; exact: filterI.
- move=> P Q PQ [R FR RP]; exists Q^-1%relation => //; first last.
by rewrite eqEsubset; split; case.
by apply: filterS FR; case=> ? ? /= ?; apply: PQ; rewrite -RP.
Qed.
Section uniformType1.
Local Open Scope relation_scope.
Context { : uniformType}.
Lemma
entourage_refl
Source code
( : set (M * M)) : entourage A -> A (x, x).Source code
Proof.
Global Instance
entourage_filter'
Source code
: Filter (@entourage M).Source code
Proof.
Lemma
entourageT
Source code
: entourage [set: M * M].Source code
Proof.
Lemma
entourage_inv
Source code
( : set (M * M)) : entourage A -> entourage A^-1.Source code
Proof.
Lemma
entourage_split_ex
Source code
( : set (M * M)) :Source code
entourage A -> exists2 , entourage B & B \; B `<=` A.
Proof.
Definition
split_ent
Source code
( : set (M * M)) :=Source code
get (entourage `&` [set | B \; B `<=` A]).
Lemma
split_entP
Source code
( : set (M * M)) : entourage A ->Source code
entourage (split_ent A) /\ split_ent A \; split_ent A `<=` A.
Proof.
Lemma
entourage_split_ent
Source code
( : set (M * M)) : entourage A ->Source code
entourage (split_ent A).
Proof.
Lemma
subset_split_ent
Source code
( : set (M * M)) : entourage A ->Source code
split_ent A \; split_ent A `<=` A.
Proof.
Lemma
entourage_split
Source code
( : M) : entourage A ->Source code
split_ent A (x, z) -> split_ent A (z, y) -> A (x, y).
Proof.
Lemma
nbhs_entourage
Source code
( : M) : entourage A -> nbhs x (xsection A x).Source code
Proof.
Lemma
cvg_entourageP
Source code
( : Filter F) ( : M) :Source code
F --> p <-> forall , entourage A -> \forall \near F, A (p, q).
Proof.
rewrite -filter_fromP [X in filter_from _ X](_ : _ = @xsection M M ^~ p)//.
by apply/funext => E; apply/seteqP; split => [|] ? /xsectionP.
by rewrite filter_from_entourageE.
Qed.
by apply/funext => E; apply/seteqP; split => [|] ? /xsectionP.
by rewrite filter_from_entourageE.
Qed.
Lemma
cvg_entourage
Source code
{} { : Filter F} ( : M) :Source code
F --> x -> forall , entourage A -> \forall \near F, A (x, y).
Proof.
Lemma
cvg_app_entourageP
Source code
( : T -> M) ( : Filter F) :Source code
f @ F --> p <-> forall , entourage A -> \forall \near F, A (p, f t).
Proof.
Lemma
entourage_invI
Source code
( : set (M * M)) : entourage E -> entourage (E `&` E^-1).Source code
Proof.
Lemma
split_ent_subset
Source code
( : set (M * M)) : entourage E -> split_ent E `<=` E.Source code
Proof.
move=> entE; case=> x y splitxy; apply: subset_split_ent => //; exists y => //.
by apply: entourage_refl; exact: entourage_split_ent.
Qed.
by apply: entourage_refl; exact: entourage_split_ent.
Qed.
End uniformType1.
Global Instance
entourage_pfilter
Source code
{ : puniformType} :Source code
ProperFilter (@entourage M).
Proof.
apply Build_ProperFilter_ex; last exact: entourage_filter.
by move=> A entA; exists (point, point); apply: entourage_refl.
Qed.
by move=> A entA; exists (point, point); apply: entourage_refl.
Qed.
#[global]
Hint Extern 0 (entourage (split_ent _)) => exact: entourage_split_ent : core.
#[global]
Hint Extern 0 (entourage (get _)) => exact: entourage_split_ent : core.
#[global]
Hint Extern 0 (entourage (_^-1)%relation) => exact: entourage_inv : core.
Arguments entourage_split {M} z {x y A}.
#[global]
Hint Extern 0 (nbhs _ (xsection _ _)) => exact: nbhs_entourage : core.
Lemma
ent_closure
Source code
{ : uniformType} ( : M) : entourage E ->Source code
closure (xsection (split_ent E) x) `<=` xsection E x.
Proof.
Lemma
continuous_withinNx
Source code
{ : uniformType} ( : U -> V) :Source code
{for x, continuous f} <-> f @ x^' --> f x.
Proof.
split=> - cfx P /= fxP.
by rewrite !near_simpl; apply: cvg_within; apply: cfx.
rewrite !nbhs_nearE !near_map !near_nbhs in fxP *; have /= := cfx P fxP.
rewrite !near_simpl near_withinE near_simpl => Pf; near=> y.
by have [->|] := eqVneq y x; [by apply: nbhs_singleton|near: y].
Unshelve. all: by end_near. Qed.
by rewrite !near_simpl; apply: cvg_within; apply: cfx.
rewrite !nbhs_nearE !near_map !near_nbhs in fxP *; have /= := cfx P fxP.
rewrite !near_simpl near_withinE near_simpl => Pf; near=> y.
by have [->|] := eqVneq y x; [by apply: nbhs_singleton|near: y].
Unshelve. all: by end_near. Qed.
Lemma
continuous_injective_withinNx
Source code
Source code
( : topologicalType) ( : T -> U) ( : T) :
{for x, continuous f} ->
(forall , f y = f x -> y = x) -> f @ x^' --> (f x)^'.
Proof.
Definition
countable_uniformity
Source code
( : uniformType) :=Source code
exists : set_system (T * T), [/\
countable R,
R `<=` entourage &
forall , entourage P -> exists2 , R Q & Q `<=` P].
Lemma
countable_uniformityP
Source code
{ : uniformType} :Source code
countable_uniformity T <-> exists2 : nat -> set (T * T),
(forall , entourage A -> exists , f N `<=` A) &
(forall , entourage (f n)).
Proof.
split=> [[M []]|[f fsubE entf]].
move=> /pfcard_geP[-> _ /(_ _ (@entourageT _))[]//|/unsquash f eM Msub].
exists f; last by move=> n; apply: eM; exact: funS.
by move=> ? /Msub [Q + ?] => /(@surj _ _ _ _ f)[n _ fQ]; exists n; rewrite fQ.
exists (range f); split; first exact: card_image_le.
by move=> E [n _] <-; exact: entf.
by move=> E /fsubE [n fnA]; exists (f n) => //; exists n.
Qed.
move=> /pfcard_geP[-> _ /(_ _ (@entourageT _))[]//|/unsquash f eM Msub].
exists f; last by move=> n; apply: eM; exact: funS.
by move=> ? /Msub [Q + ?] => /(@surj _ _ _ _ f)[n _ fQ]; exists n; rewrite fQ.
exists (range f); split; first exact: card_image_le.
by move=> E [n _] <-; exact: entf.
by move=> E /fsubE [n fnA]; exists (f n) => //; exists n.
Qed.
Lemma
open_nbhs_entourage
Source code
( : uniformType) ( : U) ( : set (U * U)) :Source code
entourage A -> open_nbhs x (xsection A x)°.
Proof.
move=> entA; split; first exact: open_interior.
by apply: nbhs_singleton; apply: nbhs_interior; exact: nbhs_entourage.
Qed.
by apply: nbhs_singleton; apply: nbhs_interior; exact: nbhs_entourage.
Qed.
Definition
unif_continuous
Source code
( : uniformType) ( : U -> V) :=order_topology : Type -> Type order_topology is not universe polymorphic Arguments order_topology T%_type_scope order_topology is transparent Expands to: Constant mathcomp.analysis.topology_theory.order_topology.order_topology Declared in library mathcomp.analysis.topology_theory.order_topology, line 198, characters 11-25
Source code
(fun => (f xy.1, f xy.2)) @ entourage --> entourage.
Definition
entourage_set
Source code
( : uniformType) ( : set ((set U) * (set U))) :=Source code
exists2 , entourage B & forall , A PQ -> forall ,
PQ.1 p -> PQ.2 q -> B (p,q).
Complete uniform spaces
Definition
cauchy
Source code
{ : uniformType} ( : set_system T) := (F, F) --> entourage.Source code
Lemma
cvg_cauchy
Source code
{ : puniformType} ( : set_system T) : Filter F ->Source code
[cvg F in T] -> cauchy F.
Proof.
move=> FF cvF A entA; have /entourage_split_ex [B entB sB2A] := entA.
exists (xsection (B^-1%relation) (lim F), xsection B (lim F)).
split=> /=; apply: cvF; rewrite /= -nbhs_entourageE; last by exists B.
by exists B^-1%relation => //; exact: entourage_inv.
move=> ab [/= /xsectionP Balima /xsectionP Blimb]; apply: sB2A.
by exists (lim F).
Qed.
exists (xsection (B^-1%relation) (lim F), xsection B (lim F)).
split=> /=; apply: cvF; rewrite /= -nbhs_entourageE; last by exists B.
by exists B^-1%relation => //; exact: entourage_inv.
move=> ab [/= /xsectionP Balima /xsectionP Blimb]; apply: sB2A.
by exists (lim F).
Qed.
.
mixin
Source code
Source code
Record
Source code
Source code
Uniform_isComplete
Source code
Source code
PointedUniform
Source code
T := {Source code
cauchy_cvg :
forall ( : set_system T), ProperFilter F -> cauchy F -> cvg F
}.
#[short
Source code
(Source code
type=
Source code
Source code
"completeType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
Complete
Source code
Source code
{ of Uniform T & Uniform_isComplete T & isPointed T}.
#[deprecated(since="mathcomp-analysis 2.0", note="use cauchy_cvg instead")]
Notation
complete_ax
Source code
:= cauchy_cvg (only parsing).Source code
Section completeType1.
Context { : completeType}.
Lemma
cauchy_cvgP
Source code
( : set_system T) ( : ProperFilter F) : cauchy F <-> cvg F.Source code
Proof.
End completeType1.
Arguments cauchy_cvg {T} F {FF} _ : rename.
Arguments cauchy_cvgP {T} F {FF}.