Definition product_space_point_set : Type :=
  forall a:A, point_set (X a).Definition product_space_proj (a:A) : product_space_point_set ->
                                      point_set (X a) :=
  fun (x:product_space_point_set) => x a.Definition ProductTopology : TopologicalSpace :=
  WeakTopology product_space_proj.

(* Specifications: *)
Lemma product_space_proj_continuous: forall a:A, continuous (product_space_proj a) (X:=ProductTopology).
Lemma product_net_limit: forall (I:DirectedSet) (x:Net I ProductTopology) (x0:point_set ProductTopology), inhabited (DS_set I) -> (forall a:A, net_limit (fun i:DS_set I => x i a) (x0 a)) -> net_limit x x0.
Lemma product_filter_limit: forall (F:Filter (point_set ProductTopology)) (x0:point_set ProductTopology), (forall a:A, filter_limit (filter_direct_image (product_space_proj a) F) (x0 a)) -> filter_limit F x0.
Theorem TychonoffProductTheorem: (forall a:A, compact (X a)) -> compact ProductTopology.
Lemma product_map_continuous: forall {A:Type} (X:TopologicalSpace) (Y:A->TopologicalSpace) (f:forall a:A, point_set X -> point_set (Y a)) (x:point_set X), (forall a:A, continuous_at (f a) x) -> continuous_at (fun x:point_set X => (fun a:A => f a x)) x (Y:=ProductTopology Y).