Definition T0_sep (X:TopologicalSpace) : Prop :=
  forall x y:point_set X, x <> y ->
  (exists U:Ensemble (point_set X), open U /\ In U x /\ ~ In U y) \/
  (exists U:Ensemble (point_set X), open U /\ ~ In U x /\ In U y).Definition T1_sep (X:TopologicalSpace) : Prop :=
  forall x:point_set X, closed (Singleton x).Definition Hausdorff (X:TopologicalSpace) : Prop :=
  forall x y:point_set X, x <> y ->
    exists U:Ensemble (point_set X),
    exists V:Ensemble (point_set X),
  open U /\ open V /\ In U x /\ In V y /\
  Intersection U V = Empty_set.Definition T2_sep := Hausdorff.Definition T3_sep (X:TopologicalSpace) : Prop :=
  T1_sep X /\
  forall (x:point_set X) (F:Ensemble (point_set X)),
  closed F -> ~ In F x -> exists U:Ensemble (point_set X),
                          exists V:Ensemble (point_set X),
        open U /\ open V /\ In U x /\ Included F V /\
        Intersection U V = Empty_set.Definition normal_sep (X:TopologicalSpace) : Prop :=
  T1_sep X /\
  forall (F G:Ensemble (point_set X)),
  closed F -> closed G -> Intersection F G = Empty_set ->
  exists U:Ensemble (point_set X), exists V:Ensemble (point_set X),
  open U /\ open V /\ Included F U /\ Included G V /\
  Intersection U V = Empty_set.Definition T4_sep := normal_sep.

(* Specifications: *)
Lemma T1_sep_impl_T0_sep: forall X:TopologicalSpace, T1_sep X -> T0_sep X.
Lemma Hausdorff_impl_T1_sep: forall X:TopologicalSpace, Hausdorff X -> T1_sep X.
Lemma T3_sep_impl_Hausdorff: forall X:TopologicalSpace, T3_sep X -> Hausdorff X.
Lemma normal_sep_impl_T3_sep: forall X:TopologicalSpace, normal_sep X -> T3_sep X.
Lemma Hausdorff_impl_net_limit_unique: forall {X:TopologicalSpace} {I:DirectedSet} (x:Net I X), Hausdorff X -> uniqueness (net_limit x).
Lemma Hausdorff_impl_net_limit_is_unique_cluster_point: forall {X:TopologicalSpace} {I:DirectedSet} (x:Net I X) (x0:point_set X), Hausdorff X -> net_limit x x0 -> forall y:point_set X, net_cluster_point x y -> y = x0.
Lemma net_limit_is_unique_cluster_point_impl_Hausdorff: forall (X:TopologicalSpace), (forall (I:DirectedSet) (x:Net I X) (x0 y:point_set X), net_limit x x0 -> net_cluster_point x y -> y = x0) -> Hausdorff X.
Lemma net_limit_uniqueness_impl_Hausdorff: forall X:TopologicalSpace, (forall (I:DirectedSet) (x:Net I X), uniqueness (net_limit x)) -> Hausdorff X.