Require Export Ensembles.
Require Export Families.
Require Export FiniteTypes.
Require Export IndexedFamilies.
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_indexed_intersection_is_finite_intersection:
forall {X:Type} (S:Family X) (J:Type) (V:J->Ensemble X),
FiniteT J -> (forall j:J, In S (V j)) ->
In (finite_intersections S) (IndexedIntersection V).