Require Export Ensembles.
From ZornsLemma Require Export Families.
From ZornsLemma Require Export IndexedFamilies.
From ZornsLemma Require Export FiniteTypes.
Record TopologicalSpace : Type := {
point_set : Type;
open : Ensemble point_set -> Prop;
open_family_union : forall F : Family point_set,
(forall S : Ensemble point_set, In F S -> open S) ->
open (FamilyUnion F);
open_intersection2: forall U V:Ensemble point_set,
open U -> open V -> open (Intersection U V);
open_full : open Full_set
}.
Arguments open {t}.
Arguments open_family_union {t}.
Arguments open_intersection2 {t}.

(* Specifications: *)
Lemma open_empty: forall X:TopologicalSpace,
open (@Empty_set (point_set X)).
Lemma open_union2: forall {X:TopologicalSpace}
(U V:Ensemble (point_set X)), open U -> open V -> open (Union U V).
Lemma open_indexed_union: forall {X:TopologicalSpace} {A:Type}
(F:IndexedFamily A (point_set X)),
(forall a:A, open (F a)) -> open (IndexedUnion F).
Lemma open_finite_indexed_intersection:
forall {X:TopologicalSpace} {A:Type}
(F:IndexedFamily A (point_set X)),
FiniteT A -> (forall a:A, open (F a)) ->
open (IndexedIntersection F).