End Net.
Arguments net_limit {I} {X}.
Arguments net_cluster_point {I} {X}.
Arguments net_limit_is_cluster_point {I} {X}.
Arguments net_limit_in_closure {I} {X}.
Arguments net_cluster_point_in_closure {I} {X}.
Section neighborhood_net.
Variable X:TopologicalSpace.
Variable x:point_set X.
Inductive neighborhood_net_DS_set : Type :=
| intro_neighborhood_net_DS :
forall (U:Ensemble (point_set X)) (y:point_set X),
open U -> In U x -> In U y -> neighborhood_net_DS_set.
Definition neighborhood_net_DS_ord
(Uy Vz:neighborhood_net_DS_set) : Prop :=
match Uy, Vz with
| intro_neighborhood_net_DS U _ _ _ _,
intro_neighborhood_net_DS V _ _ _ _ =>
Included V U
end.
Definition neighborhood_net_DS : DirectedSet.
refine (Build_DirectedSet neighborhood_net_DS_set
neighborhood_net_DS_ord _ _).
constructor.
red; intros.
destruct x0.
simpl; auto with sets.
red; intros.
destruct x0; destruct y; destruct z.
simpl in H; simpl in H0; simpl.
auto with sets.
intros.
destruct i; destruct j.
assert (open (Intersection U U0)).
apply open_intersection2; trivial.
assert (In (Intersection U U0) x); auto with sets.
exists (intro_neighborhood_net_DS (Intersection U U0) x
H H0 H0).
simpl; auto with sets.
Defined.
Definition neighborhood_net : Net neighborhood_net_DS X :=
fun (x:neighborhood_net_DS_set) => match x with
| intro_neighborhood_net_DS _ y _ _ _ => y
end.

Lemma net_limits_determine_topology:
forall {X:TopologicalSpace} (S:Ensemble (point_set X))
(x0:point_set X), In (closure S) x0 ->
exists I:DirectedSet, exists x:Net I X,
(forall i:DS_set I, In S (x i)) /\ net_limit x x0.