Require Export TopologicalSpaces.
Require Export OpenBases.
From ZornsLemma Require Export FiniteTypes.
From ZornsLemma Require Export EnsemblesSpec.
Section Subbasis.
Variable X:TopologicalSpace.
Variable SB:Family (point_set X).
Record subbasis : Prop := {
subbasis_elements: forall U:Ensemble (point_set X),
In SB U -> open U;
subbasis_cover: forall (U:Ensemble (point_set X)) (x:point_set X),
In U x -> open U ->
exists A:Type, FiniteT A /\
exists V:A->Ensemble (point_set X),
(forall a:A, In SB (V a)) /\
In (IndexedIntersection V) x /\
Included (IndexedIntersection V) U
}.

(* Specifications: *)
Lemma open_basis_is_subbasis: open_basis SB -> subbasis.
Lemma finite_intersections_of_subbasis_form_open_basis:
subbasis ->
open_basis [ U:Ensemble (point_set X) |
exists A:Type, FiniteT A /\
exists V:A->Ensemble (point_set X),
(forall a:A, In SB (V a)) /\
U = IndexedIntersection V ].