Require Export TopologicalSpaces.
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.