End net_tail_filter.
Arguments net_tail {X} {J}.
Arguments tail_filter {X} {J}.
Section filter_to_net.
Variable X:TopologicalSpace.
Variable F:Filter (point_set X).
Record filter_to_net_DS_set : Type := {
ftn_S : Ensemble (point_set X);
ftn_x : point_set X;
ftn_S_in_F : In (filter_family F) ftn_S;
ftn_x_in_S : In ftn_S ftn_x
}.
Definition filter_to_net_DS : DirectedSet.
refine (Build_DirectedSet filter_to_net_DS_set
(fun x1 x2:filter_to_net_DS_set =>
Included (ftn_S x2) (ftn_S x1)) _ _).
constructor.
red; intros.
auto with sets.
red; intros.
auto with sets.
intros.
destruct i.
destruct j.
assert (In (filter_family F) (Intersection ftn_S0 ftn_S1)).
apply filter_intersection; trivial.
assert (Inhabited (Intersection ftn_S0 ftn_S1)).
apply NNPP; red; intro.
assert (Intersection ftn_S0 ftn_S1 = Empty_set).
apply Extensionality_Ensembles; split; red; intros.
contradiction H0.
exists x; trivial.
destruct H1.
rewrite H1 in H.
contradiction (filter_empty _ F).
destruct H0 as [ftn_x'].
exists (Build_filter_to_net_DS_set
(Intersection ftn_S0 ftn_S1) ftn_x' H H0).
simpl.
split; auto with sets.
Defined.
Definition filter_to_net : Net filter_to_net_DS X :=
ftn_x.

(* Specifications: *)
Lemma filter_limit_impl_filter_to_net_limit: forall x0:point_set X,
filter_limit F x0 -> net_limit filter_to_net x0.
Lemma filter_to_net_limit_impl_filter_limit: forall x0:point_set X,
net_limit filter_to_net x0 -> filter_limit F x0.
Lemma filter_cluster_point_impl_filter_to_net_cluster_point:
forall x0:point_set X,
filter_cluster_point F x0 -> net_cluster_point filter_to_net x0.
Lemma filter_to_net_cluster_point_impl_filter_cluster_point:
forall x0:point_set X,
net_cluster_point filter_to_net x0 -> filter_cluster_point F x0.