(* Picks A_i for i\in I *)
 
(** - so, given an index set $I$ and an indexing function $f$ mapping 
 this set to the part_set (powerset) of X,  (ie. $f(i) = A_i\ (\in (part\_set A))$,) 
 then (indexed_intersection f) will be $\bigcap_{i\in I} A_i$. *)

Definition indexed_intersection : part_set A.

(* Specifications: *)
Lemma indexed_intersection_included_in_subsets : forall i : I, included indexed_intersection (f i).
Lemma in_indexed_intersection_then_in_subsets : forall a : A, in_part a indexed_intersection -> forall i : I, in_part a (f i).
Lemma in_subsets_then_in_indexed_intersection : forall a : A, (forall i : I, in_part a (f i)) -> in_part a indexed_intersection.
Lemma not_in_part_then_not_in_indexed_intersection : forall a : A, (exists i : I, ~ in_part a (f i)) -> ~ in_part a indexed_intersection.
Lemma not_in_indexed_intersection_then_not_in_part : forall a : A, ~ in_part a indexed_intersection -> exists i : I, ~ in_part a (f i).
Lemma subset_included_then_indexed_intersection_included : forall B : part_set A, (exists i : I, included (f i) B) -> included indexed_intersection B.
Lemma indexed_intersection_comp : forall f g : MAP I (part_set A), Equal f g -> Equal (indexed_intersection f) (indexed_intersection g).
Lemma indexed_intersection_indep_of_indexing : forall (f : MAP I (part_set A)) (g : MAP J (part_set A)), Equal (range f) (range g) -> Equal (indexed_intersection f) (indexed_intersection g).
Lemma empty_indexed_intersection_gives_full_set : forall (A : Setoid) (f : MAP (empty A) (part_set A)), Equal (indexed_intersection f) (full A).