Require Export FilterLimits.
Require Export Nets.
Section net_tail_filter.
Variable X:TopologicalSpace.
Variable J:DirectedSet.
Variable x:Net J X.
Hypothesis J_nonempty: inhabited (DS_set J).
Definition net_tail (j:DS_set J) :=
Im [ i:DS_set J | DS_ord j i ] x.
Definition tail_filter_basis : Family (point_set X) :=
Im Full_set net_tail.
Definition tail_filter : Filter (point_set X).
refine (Build_Filter_from_basis tail_filter_basis _ _ _).
destruct J_nonempty as [j].
exists (net_tail j).
exists j; trivial.
constructor.
intro.
inversion H as [j].
assert (In Empty_set (x j)).
rewrite H1.
exists j; trivial.
constructor.
apply preord_refl; apply DS_ord_cond.
destruct H3.
intros.
destruct H.
destruct H0.
destruct (DS_join_cond x0 x1) as [k []].
exists (net_tail k); split.
exists k; trivial.
constructor.
red; intros.
constructor.
destruct H5 as [i0].
destruct H5.
rewrite H1.
exists i0; trivial.
constructor.
apply preord_trans with k; trivial.
apply DS_ord_cond.
destruct H5 as [i0].
destruct H5.
rewrite H2.
exists i0; trivial.
constructor.
apply preord_trans with k; trivial.
apply DS_ord_cond.
Defined.

(* Specifications: *)
Lemma net_limit_impl_tail_filter_limit: forall x0:point_set X,
net_limit x x0 -> filter_limit tail_filter x0.
Lemma tail_filter_limit_impl_net_limit: forall x0:point_set X,
filter_limit tail_filter x0 -> net_limit x x0.
Lemma net_cluster_point_impl_tail_filter_cluster_point:
forall x0:point_set X,
net_cluster_point x x0 -> filter_cluster_point tail_filter x0.
Lemma tail_filter_cluster_point_impl_net_cluster_point:
forall x0:point_set X,
filter_cluster_point tail_filter x0 -> net_cluster_point x x0.