Section build_from_open_neighborhood_bases.
Variable X:Type.
Variable NB : X -> Family X.
Hypothesis neighborhood_basis_cond :
forall (U V:Ensemble X) (x:X), In (NB x) U -> In (NB x) V ->
exists W:Ensemble X, In (NB x) W /\ Included W (Intersection U V).
Hypothesis neighborhood_basis_cond2 :
forall (U:Ensemble X) (x:X), In (NB x) U -> In U x.
Hypothesis neighborhood_basis_inhabited_cond :
forall x:X, Inhabited (NB x).
Hypothesis neighborhood_basis_system_cond :
forall (x y:X) (U:Ensemble X), In (NB x) U -> In U y ->
exists V:Ensemble X, In (NB y) V /\ Included V U.
Definition Build_TopologicalSpace_from_open_neighborhood_bases :
TopologicalSpace.
refine (Build_TopologicalSpace_from_open_basis (IndexedUnion NB)
_ _).
red; intros.
destruct H as [y U'].
destruct H0 as [z V'].
destruct H1.
destruct (neighborhood_basis_system_cond y x U' H H1) as
[U'' [? ?]].
destruct (neighborhood_basis_system_cond z x V' H0 H2) as
[V'' [? ?]].
destruct (neighborhood_basis_cond U'' V'' x H3 H5) as
[W [? ?]].
exists W.
repeat split.
exists x; trivial.
apply neighborhood_basis_cond2; trivial.
apply H4.
pose proof (H8 _ H9).
destruct H10; assumption.
apply H6.
pose proof (H8 _ H9).
destruct H10; assumption.
red; intros.
destruct (neighborhood_basis_inhabited_cond x) as [U].
exists U; split; auto.
exists x; trivial.
Defined.

Lemma Build_TopologicalSpace_from_open_neighborhood_bases_basis:
forall x:X,
open_neighborhood_basis (NB x) x
(X:=Build_TopologicalSpace_from_open_neighborhood_bases).