From Coq Require Export Ensembles.
From ZornsLemma Require Export Families.
From ZornsLemma Require Export FiniteTypes.
From ZornsLemma Require Export IndexedFamilies.
From ZornsLemma Require Export CountableTypes.
From ZornsLemma Require Export Powerset_facts.
Inductive finite_intersections {X:Type} (S:Family X) : Family X :=
| intro_full: In (finite_intersections S) Full_set
| intro_S: forall U:Ensemble X, In S U -> In (finite_intersections S) U
| intro_intersection: forall U V:Ensemble X,
In (finite_intersections S) U -> In (finite_intersections S) V ->
In (finite_intersections S) (Intersection U V).

Lemma finite_intersection_is_finite_indexed_intersection:
forall {X:Type} (S:Family X) (U:Ensemble X),
In (finite_intersections S) U -> exists J:Type, FiniteT J /\
exists V:J->Ensemble X,
(forall j:J, In S (V j)) /\ U = IndexedIntersection V.