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.

.
Discrete_ofNbhsSource code
T := {
  nbhs_principalE : (@nbhs T _) = principal_filter;
}.

(
"discreteNbhsType"Source code
)
.
structureSource code
DefinitionSource code
DiscreteNbhsSource code
of Nbhs T & Discrete_ofNbhs T}.

Definition
discrete_ent
Source code
{} : set_system (T * T) :=
  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
.
Discrete_ofUniformSource code
UniformSource code
T := {
  uniform_discrete : @entourage T = discrete_ent
}.

Definition
discrete_ball
Source code
{ : numDomainType} {} ( : T) ( : R) : Prop :=
  x = y.

.
Discrete_ofPseudometricSource code
numDomainType}Source code
T &
    PseudoMetric R T := {
  metric_discrete : @ball R T = @discrete_ball R T
}.

(
"discreteTopologicalType"Source code
)
.
structureSource code
DefinitionSource code
DiscreteTopologySource code

  { of DiscreteNbhs T & Topological T}.

(
"discreteOrderTopologicalType"Source code
)
.
structureSource code
DefinitionSource code
DiscreteOrderTopologySource code

  { of Discrete_ofNbhs T & OrderTopological d T}.

(
"pdiscreteTopologicalType"Source code
)
.
structureSource code
DefinitionSource code
PointedDiscreteTopologySource code

  { of DiscreteTopology T & Pointed T}.

(
"pdiscreteOrderTopologicalType"Source code
)
.
structureSource code
DefinitionSource code
PointedDiscreteOrderTopologySource code

  { of Discrete_ofNbhs T & OrderTopological d T & Pointed T}.

(
"discreteUniformType"Source code
)
.
structureSource code
DefinitionSource code
DiscreteUniformSource code

  { of Discrete_ofUniform T & Uniform T & Discrete_ofNbhs T}.

(
"discretePseudoMetricType"Source code
)
.
structureSource code
DefinitionSource code
DiscretePseudoMetricSource code
numDomainType}Source code
:=
  { of Discrete_ofPseudometric R T & PseudoMetric R T & DiscreteUniform T}.

.
buildersSource code
ContextSource code
Discrete_ofNbhsSource code
T.

Local Lemma
principal_nbhs_filterSource code
 ( : T) : ProperFilter (nbhs p).
Proof.

Local Lemma
principal_nbhs_singletonSource code
 ( : T) ( : set T) : nbhs p A -> A p.
Proof.
by rewrite nbhs_principalE => /principal_filterP. Qed.

Local Lemma
principal_nbhs_nbhsSource code
 ( : T) ( : set T) :
  nbhs p A -> nbhs p (nbhs^~ A).
Proof.
by move=> ?; rewrite {1}nbhs_principalE; apply/principal_filterP. Qed.

.
instanceSource code
DefinitionSource code
@Nbhs_isNbhsTopologicalSource code
.Build T
  principal_nbhs_filter principal_nbhs_singleton principal_nbhs_nbhs.

..

.
DiscreteUniform_ofNbhsSource code
Discrete_ofNbhsSource code
T & Nbhs T := {}.
.
buildersSource code
ContextSource code
DiscreteUniform_ofNbhsSource code
T.

Local Open Scope relation_scope.

Local Notation := (@discrete_ent T).

Local Lemma
discrete_entourage_filterSource code
: Filter d.
Proof.
exact: globally_filter. Qed.

Local Lemma
discrete_entourage_diagonalSource code
: forall , d A -> diagonal `<=` A.
Proof.
by move=> ? + x x12; apply; exists x.1; rewrite // {2}x12 -surjective_pairing.
Qed.

Local Lemma
discrete_entourage_invSource code
: forall , d A -> d A^-1.
Proof.
by move=> ? dA x [i _ <-]; apply: dA; exists i. Qed.

Local Lemma
discrete_entourage_split_exSource 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.

Local Lemma
discrete_entourage_nbhsESource code
: (@nbhs T _) = nbhs_ d.
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.

.
instanceSource code
DefinitionSource code
@Nbhs_isUniformSource code
.Build T
  discrete_ent
  discrete_entourage_filter
  discrete_entourage_diagonal
  discrete_entourage_inv
  discrete_entourage_split_ex
  discrete_entourage_nbhsE.

.
instanceSource code
DefinitionSource code
@Discrete_ofUniformSource code
.Build T erefl.

..

.
DiscretePseudoMetric_ofUniformSource code
 (
numDomainTypeSource code
) T &
  DiscreteUniform T := {}.

.
buildersSource code
ContextSource code
DiscretePseudoMetric_ofUniformSource code
R T.

Local Lemma
discrete_ball_centerSource code
 ( : R) : 0 < eps ->
  @discrete_ball R T x eps x.
Proof.
by []. Qed.

Local Lemma
discrete_ball_symSource code
 ( : T) ( : R) :
  discrete_ball x e y -> discrete_ball y e x.
Proof.
by move=>->. Qed.
Local Lemma
discrete_ball_triangleSource code
 ( :T) ( : R) :
  discrete_ball x e1 y -> discrete_ball y e2 z -> discrete_ball x (e1 + e2) z.
Proof.
by move=> -> ->. Qed.

Local Lemma
discrete_entourageESource code
: entourage = entourage_ (@discrete_ball R T).
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.

.
instanceSource code
DefinitionSource code

  
@Uniform_isPseudoMetricSource code
.Build R T (@discrete_ball R T)
    discrete_ball_center discrete_ball_sym discrete_ball_triangle
    discrete_entourageE.

Local Lemma
discrete_ballESource code
: @ball R T = @discrete_ball R T.
Proof.
by rewrite funeq2E => ? ?. Qed.

.
instanceSource code
DefinitionSource code
@Discrete_ofPseudometricSource code
.Build R T discrete_ballE.

..

Definition
discrete_topology
Used by
  • mathcomp.analysis.cantor

Source code
 ( : Type) : Type := T.

.
instanceSource code
DefinitionSource code
 (
choiceTypeSource code
) :=
  Choice.copy (discrete_topology T) T.
.
instanceSource code
DefinitionSource code
 (
pointedTypeSource code
) :=
  Pointed.on (discrete_topology T).
.
instanceSource code
DefinitionSource code
 (
choiceTypeSource code
) :=
  hasNbhs.Build (discrete_topology T) principal_filter.
.
instanceSource code
DefinitionSource code
 (
choiceTypeSource code
) :=
  Discrete_ofNbhs.Build (discrete_topology T) erefl.
.
saturateSource code
discrete_topologySource code
.
.
instanceSource code
DefinitionSource code
 (
choiceTypeSource code
) :=
  DiscreteUniform_ofNbhs.Build (discrete_topology T).
.
instanceSource code
DefinitionSource code
numDomainType}Source code
 (T : choiceType) :=
  @DiscretePseudoMetric_ofUniform.Build R (discrete_topology T).

Section discrete_topology.

Context { : discreteTopologicalType}.

Lemma
discrete_openUsed by
  • mathcomp.analysis.cantor
  • mathcomp.analysis.topology_theory.separation_axioms

Source code
 ( : set X) : open A.
Proof.
rewrite openE => ? ?; rewrite /interior nbhs_principalE.
exact/principal_filterP.
Qed.

Lemma
discrete_set1Used by
  • mathcomp.analysis.topology_theory.separation_axioms

Source code
 ( : X) : nbhs x [set x].
Proof.
by apply: open_nbhs_nbhs; split => //; exact: discrete_open. Qed.

Lemma
discrete_closedUsed by
  • mathcomp.analysis.topology_theory.separation_axioms

Source code
 ( : set X) : closed A.
Proof.
by rewrite -[A]setCK closedC; exact: discrete_open. Qed.

Lemma
discrete_cvgSource code
 ( : set_system X) ( : X) :
  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.

End discrete_topology.