Inductive neighborhood_net_DS_set : Type :=
  | intro_neighborhood_net_DS :
    forall (U:Ensemble (point_set X)) (y:point_set X),
    open U -> In U x -> In U y -> neighborhood_net_DS_set.Inductive neighborhood_net_DS_set : Type :=
  | intro_neighborhood_net_DS :
    forall (U:Ensemble (point_set X)) (y:point_set X),
    open U -> In U x -> In U y -> neighborhood_net_DS_set.Definition neighborhood_net_DS_ord
  (Uy Vz:neighborhood_net_DS_set) : Prop :=
  match Uy, Vz with
  | intro_neighborhood_net_DS U _ _ _ _,
    intro_neighborhood_net_DS V _ _ _ _ =>
    Included V U
  end.Definition neighborhood_net_DS : DirectedSet.Definition neighborhood_net : Net neighborhood_net_DS X :=
  fun (x:neighborhood_net_DS_set) => match x with
  | intro_neighborhood_net_DS _ y _ _ _ => y
  end.

(* Specifications: *)
Lemma neighborhood_net_limit: net_limit neighborhood_net x.
Lemma net_limits_determine_topology: forall {X:TopologicalSpace} (S:Ensemble (point_set X)) (x0:point_set X), In (closure S) x0 -> exists I:DirectedSet, exists x:Net I X, (forall i:DS_set I, In S (x i)) /\ net_limit x x0.
Lemma continuous_func_preserves_net_limits: forall {I:DirectedSet} (x:Net I X) (x0:point_set X), net_limit x x0 -> continuous_at f x0 -> net_limit (fun i:DS_set I => f (x i)) (f x0).
Lemma func_preserving_net_limits_is_continuous: forall x0:point_set X, (forall (I:DirectedSet) (x:Net I X), net_limit x x0 -> net_limit (fun i:DS_set I => f (x i)) (f x0)) -> continuous_at f x0.