From ZornsLemma Require Export Families.
Record Filter (X:Type) : Type := {
filter_family: Family X;
filter_intersection: forall S1 S2:Ensemble X,
In filter_family S1 -> In filter_family S2 ->
In filter_family (Intersection S1 S2);
filter_upward_closed: forall S1 S2:Ensemble X,
In filter_family S1 -> Included S1 S2 ->
In filter_family S2;
filter_full: In filter_family Full_set;
filter_empty: ~ In filter_family Empty_set
}.
Arguments filter_family {X}.
Record filter_basis {X:Type} (F:Filter X) (B:Family X) : Prop := {
filter_basis_elements: Included B (filter_family F);
filter_basis_cond: forall S:Ensemble X,
In (filter_family F) S -> exists S':Ensemble X,
In B S' /\ Included S' S
}.
From ZornsLemma Require Export IndexedFamilies.
From ZornsLemma Require Export FiniteTypes.

Lemma filter_finite_indexed_intersection: forall {X:Type} (F:Filter X)
{A:Type} (S:IndexedFamily A X),
FiniteT A -> (forall a:A, In (filter_family F) (S a)) ->
In (filter_family F) (IndexedIntersection S).