Require Export TopologicalSpaces.
Require Export Nets.
Require Export FilterLimits.
Require Export Continuity.
Set Asymmetric Patterns.
Definition compact (X:TopologicalSpace) :=
forall C:Family (point_set X),
(forall U:Ensemble (point_set X), In C U -> open U) ->
FamilyUnion C = Full_set ->
exists C':Family (point_set X),
Finite _ C' /\ Included C' C /\
FamilyUnion C' = Full_set.

(* Specifications: *)
Lemma compactness_on_indexed_covers:
forall (X:TopologicalSpace) (A:Type) (C:IndexedFamily A (point_set X)),
compact X ->
(forall a:A, open (C a)) -> IndexedUnion C = Full_set ->
exists A':Ensemble A, Finite _ A' /\
IndexedUnion (fun a':{a':A | In A' a'} => C (proj1_sig a')) = Full_set.
Lemma compact_finite_nonempty_closed_intersection:
forall X:TopologicalSpace, compact X ->
forall F:Family (point_set X),
(forall G:Ensemble (point_set X), In F G -> closed G) ->
(forall F':Family (point_set X), Finite _ F' -> Included F' F ->
Inhabited (FamilyIntersection F')) ->
Inhabited (FamilyIntersection F).
Lemma finite_nonempty_closed_intersection_impl_compact:
forall X:TopologicalSpace,
(forall F:Family (point_set X),
(forall G:Ensemble (point_set X), In F G -> closed G) ->
(forall F':Family (point_set X), Finite _ F' -> Included F' F ->
Inhabited (FamilyIntersection F')) ->
Inhabited (FamilyIntersection F)) ->
compact X.
Lemma compact_impl_filter_cluster_point:
forall X:TopologicalSpace, compact X ->
forall F:Filter (point_set X), exists x0:point_set X,
filter_cluster_point F x0.
Lemma filter_cluster_point_impl_compact:
forall X:TopologicalSpace,
(forall F:Filter (point_set X), exists x0:point_set X,
filter_cluster_point F x0) -> compact X.
Lemma ultrafilter_limit_impl_compact:
forall X:TopologicalSpace,
(forall U:Filter (point_set X), ultrafilter U ->
exists x0:point_set X, filter_limit U x0) -> compact X.
Lemma compact_impl_net_cluster_point:
forall X:TopologicalSpace, compact X ->
forall (I:DirectedSet) (x:Net I X), inhabited (DS_set I) ->
exists x0:point_set X, net_cluster_point x x0.
Lemma net_cluster_point_impl_compact: forall X:TopologicalSpace,
(forall (I:DirectedSet) (x:Net I X), inhabited (DS_set I) ->
exists x0:point_set X, net_cluster_point x x0) ->
compact X.