Require Export TopologicalSpaces.
Require Export Filters.
Require Export Neighborhoods.
Definition neighborhood_filter {X:TopologicalSpace} (x0:point_set X) :
Filter (point_set X).
refine (Build_Filter _
[ N:Ensemble (point_set X) | neighborhood N x0 ]
_ _ _ _).
intros.
destruct H; destruct H0; constructor.
destruct H as [U []].
destruct H0 as [V []].
destruct H.
destruct H0.
exists (Intersection U V); split.
split.
apply open_intersection2; trivial.
constructor; trivial.
red; intros.
destruct H5; constructor; auto.
intros.
destruct H.
destruct H as [U [[]]].
constructor.
exists U; repeat split; trivial.
auto with sets.
constructor.
exists Full_set; repeat split; auto with sets topology.
red; intro.
destruct H.
destruct H as [U [[]]].
apply H1 in H0.
destruct H0.
Defined.
Definition filter_limit {X:TopologicalSpace} (F:Filter (point_set X))
(x0:point_set X) : Prop :=
Included (filter_family (neighborhood_filter x0))
(filter_family F).
Definition filter_cluster_point {X:TopologicalSpace}
(F:Filter (point_set X)) (x0:point_set X) : Prop :=
forall S:Ensemble (point_set X), In (filter_family F) S ->
In (closure S) x0.

(* Specifications: *)
Lemma filter_limit_is_cluster_point:
forall {X:TopologicalSpace} (F:Filter (point_set X)) (x0:point_set X),
filter_limit F x0 -> filter_cluster_point F x0.
Lemma ultrafilter_cluster_point_is_limit: forall {X:TopologicalSpace}
(F:Filter (point_set X)) (x0:point_set X),
filter_cluster_point F x0 -> ultrafilter F ->
filter_limit F x0.
Lemma closure_impl_filter_limit: forall {X:TopologicalSpace}
(S:Ensemble (point_set X)) (x0:point_set X),
In (closure S) x0 ->
exists F:Filter (point_set X),
In (filter_family F) S /\ filter_limit F x0.