Module mathcomp.analysis.topology_theory.discrete_topology
From HB Require Import structures.From mathcomp Require Import boot order algebra all_classical all_reals.
From mathcomp Require Import topology_structure uniform_structure.
From mathcomp Require Import order_topology pseudometric_structure compact.
# Discrete Topology
```
discreteNbhsType == neighborhoods are principal filters
discrete_ent == entourages of the discrete uniformity
topology, equipped with the Uniform
structure
discrete_ball == singleton balls for the discrete metric,
equipped with the Uniform structure
discreteTopologicalType == types with a discrete topology
discreteOrderTopologicalType == an order type with the discrete topology
pdiscreteTopologicalType == pointed type with the discrete topology
pdiscreteOrderTopologicalType == pointed, ordered, and discrete
discreteUniformType == a uniform space where the diagonal is an
entourage
discretePseudoMetricType == a pseudometric space where the only balls
are singletons
discrete_topology T == alias attaching discrete structures for
topology, uniformity, and pseudometric
```
Unset SsrOldRewriteGoalsOrder.
Import Order.TTheory GRing.Theory Num.Def Num.Theory.
Local Open Scope classical_set_scope.
Local Open Scope ring_scope.
.
mixin
Source code
Source code
Record
Source code
Source code
Discrete_ofNbhs
Source code
Source code
Nbhs
Source code
T := {Source code
nbhs_principalE : (@nbhs T _) = principal_filter;
}.
#[short
Source code
(Source code
type=
Source code
Source code
"discreteNbhsType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
DiscreteNbhs
Source code
of Nbhs T & Discrete_ofNbhs T}.Source code
Definition
discrete_ent
Source code
{} : set_system (T * T) :=Source code
globally (range (fun => (x, x))).
Note: having the discrete topology does not guarantee the discrete
uniformity. Likewise for the discrete metric. Consider
.set 1/n | n in R mixin
Source code
Source code
Record
Source code
Source code
Discrete_ofUniform
Source code
Source code
Uniform
Source code
T := {Source code
uniform_discrete : @entourage T = discrete_ent
}.
Definition
discrete_ball
Source code
{ : numDomainType} {} ( : T) (Source code
eps
Source code
: R) : Prop :=Source code
x = y.
.
mixin
Source code
Source code
Record
Source code
Source code
Discrete_ofPseudometric
Source code
Source code
numDomainType}
Source code
T &Source code
PseudoMetric R T := {
metric_discrete : @ball R T = @discrete_ball R T
}.
#[short
Source code
(Source code
type=
Source code
Source code
"discreteTopologicalType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
DiscreteTopology
Source code
Source code
{ of DiscreteNbhs T & Topological T}.
#[short
Source code
(Source code
type=
Source code
Source code
"discreteOrderTopologicalType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
DiscreteOrderTopology
Source code
Source code
{ of Discrete_ofNbhs T & OrderTopological d T}.
#[short
Source code
(Source code
type=
Source code
Source code
"pdiscreteTopologicalType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
PointedDiscreteTopology
Source code
Source code
{ of DiscreteTopology T & Pointed T}.
#[short
Source code
(Source code
type=
Source code
Source code
"pdiscreteOrderTopologicalType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
PointedDiscreteOrderTopology
Source code
Source code
{ of Discrete_ofNbhs T & OrderTopological d T & Pointed T}.
#[short
Source code
(Source code
type=
Source code
Source code
"discreteUniformType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
DiscreteUniform
Source code
Source code
{ of Discrete_ofUniform T & Uniform T & Discrete_ofNbhs T}.
#[short
Source code
(Source code
type=
Source code
Source code
"discretePseudoMetricType"
Source code
)Source code
.
structure
Source code
Source code
Definition
Source code
Source code
DiscretePseudoMetric
Source code
Source code
numDomainType}
Source code
:=Source code
{ of Discrete_ofPseudometric R T & PseudoMetric R T & DiscreteUniform T}.
.
builders
Source code
Source code
Context
Source code
Source code
Discrete_ofNbhs
Source code
T.Source code
Local Lemma
principal_nbhs_filter
Source code
( : T) : ProperFilter (nbhs p).Source code
Proof.
Local Lemma
principal_nbhs_singleton
Source code
( : T) ( : set T) : nbhs p A -> A p.Source code
Proof.
Local Lemma
principal_nbhs_nbhs
Source code
( : T) ( : set T) :Source code
nbhs p A -> nbhs p (nbhs^~ A).
Proof.
.
instance
Source code
Source code
Definition
Source code
Source code
@Nbhs_isNbhsTopological
Source code
.Build TSource code
principal_nbhs_filter principal_nbhs_singleton principal_nbhs_nbhs.
.
end
Source code
.Source code
.
factory
Source code
Source code
Record
Source code
Source code
DiscreteUniform_ofNbhs
Source code
Source code
Discrete_ofNbhs
Source code
T & Nbhs T := {}.Source code
.
builders
Source code
Source code
Context
Source code
Source code
DiscreteUniform_ofNbhs
Source code
T.Source code
Local Open Scope relation_scope.
Local Notation := (@discrete_ent T).
Local Lemma
discrete_entourage_filter
Source code
: Filter d.Source code
Proof.
Local Lemma
discrete_entourage_diagonal
Source code
: forall , d A -> diagonal `<=` A.Source code
Proof.
Local Lemma
discrete_entourage_inv
Source code
: forall , d A -> d A^-1.Source code
Proof.
by move=> ? dA x [i _ <-]; apply: dA; exists i. Qed.
Local Lemma
discrete_entourage_split_ex
Source code
:Source code
forall , d A -> exists2 , d B & B \; B `<=` A.
Proof.
move=> ? dA; exists (range (fun => (x, x))) => //.
by rewrite set_compose_diag => x [i _ <-]; apply: dA; exists i.
Qed.
by rewrite set_compose_diag => x [i _ <-]; apply: dA; exists i.
Qed.
Local Lemma
discrete_entourage_nbhsE
Source code
: (@nbhs T _) = nbhs_ d.Source code
Proof.
rewrite funeqE => x; rewrite nbhs_principalE eqEsubset; split => U.
move/principal_filterP => ?; exists diagonal; first by move=> ? [w _ <-].
by move=> z /= /set_mem; rewrite /diagonal /= => <-.
case => w entW wU; apply/principal_filterP; apply: wU; apply/mem_set.
exact: entW.
Qed.
move/principal_filterP => ?; exists diagonal; first by move=> ? [w _ <-].
by move=> z /= /set_mem; rewrite /diagonal /= => <-.
case => w entW wU; apply/principal_filterP; apply: wU; apply/mem_set.
exact: entW.
Qed.
.
instance
Source code
Source code
Definition
Source code
Source code
@Nbhs_isUniform
Source code
.Build TSource code
discrete_ent
discrete_entourage_filter
discrete_entourage_diagonal
discrete_entourage_inv
discrete_entourage_split_ex
discrete_entourage_nbhsE.
.
instance
Source code
Source code
Definition
Source code
Source code
@Discrete_ofUniform
Source code
.Build T erefl.Source code
.
end
Source code
.Source code
.
factory
Source code
Source code
Record
Source code
Source code
DiscretePseudoMetric_ofUniform
Source code
(Source code
numDomainType
Source code
) T &Source code
DiscreteUniform T := {}.
.
builders
Source code
Source code
Context
Source code
Source code
DiscretePseudoMetric_ofUniform
Source code
R T.Source code
Local Lemma
discrete_ball_center
Source code
(Source code
eps
Source code
: R) : 0 < eps ->Source code
@discrete_ball R T x eps x.
Proof.
by []. Qed.
Local Lemma
discrete_ball_sym
Source code
( : T) ( : R) :Source code
discrete_ball x e y -> discrete_ball y e x.
Proof.
by move=>->. Qed.
discrete_ball_triangle
Source code
( :T) ( : R) :Source code
discrete_ball x e1 y -> discrete_ball y e2 z -> discrete_ball x (e1 + e2) z.
Proof.
by move=> -> ->. Qed.
Local Lemma
discrete_entourageE
Source code
: entourage = entourage_ (@discrete_ball R T).Source code
Proof.
rewrite predeqE => P; rewrite uniform_discrete; split; last first.
by move=> dbP ? [?] _ <-; move: dbP; case => /= ? ?; apply.
move=> entP; exists 1 => //= z z12; apply: entP; exists z.1 => //.
by rewrite {2}z12 -surjective_pairing.
Qed.
by move=> dbP ? [?] _ <-; move: dbP; case => /= ? ?; apply.
move=> entP; exists 1 => //= z z12; apply: entP; exists z.1 => //.
by rewrite {2}z12 -surjective_pairing.
Qed.
.
instance
Source code
Source code
Definition
Source code
Source code
@Uniform_isPseudoMetric
Source code
.Build R T (@discrete_ball R T)Source code
discrete_ball_center discrete_ball_sym discrete_ball_triangle
discrete_entourageE.
Local Lemma
discrete_ballE
Source code
: @ball R T = @discrete_ball R T.Source code
Proof.
.
instance
Source code
Source code
Definition
Source code
Source code
@Discrete_ofPseudometric
Source code
.Build R T discrete_ballE.Source code
.
end
Source code
.Source code
Definition
discrete_topology
Source code
( : Type) : Type := T.Source code
.
instance
Source code
Source code
Definition
Source code
(Source code
choiceType
Source code
) :=Source code
Choice.copy (discrete_topology T) T.
.
instance
Source code
Source code
Definition
Source code
(Source code
pointedType
Source code
) :=Source code
Pointed.on (discrete_topology T).
.
instance
Source code
Source code
Definition
Source code
(Source code
choiceType
Source code
) :=Source code
hasNbhs.Build (discrete_topology T) principal_filter.
.
instance
Source code
Source code
Definition
Source code
(Source code
choiceType
Source code
) :=Source code
Discrete_ofNbhs.Build (discrete_topology T) erefl.
.
saturate
Source code
Source code
discrete_topology
Source code
.Source code
.
instance
Source code
Source code
Definition
Source code
(Source code
choiceType
Source code
) :=Source code
DiscreteUniform_ofNbhs.Build (discrete_topology T).
.
instance
Source code
Source code
Definition
Source code
Source code
numDomainType}
Source code
(T : choiceType) :=Source code
@DiscretePseudoMetric_ofUniform.Build R (discrete_topology T).
Section discrete_topology.
Context { : discreteTopologicalType}.
Lemma
discrete_open
Source code
( : set X) : open A.Source code
Proof.
Lemma
discrete_set1
Source code
( : X) : nbhs x [set x].Source code
Proof.
Lemma
discrete_closed
Source code
( : set X) : closed A.Source code
Proof.
Lemma
discrete_cvg
Source code
( : set_system X) ( : X) :Source code
Filter F -> F --> x <-> F [set x].
Proof.
rewrite nbhs_principalE nbhs_simpl; split; first by exact.
by move=> Fx U /principal_filterP ?; apply: filterS Fx => ? ->.
Qed.
by move=> Fx U /principal_filterP ?; apply: filterS Fx => ? ->.
Qed.
End discrete_topology.