Let prod2_proj := fun i:twoT =>
match i return (point_set X * point_set Y ->
point_set (prod2_fun i)) with
| twoT_1 => @fst (point_set X) (point_set Y)
| twoT_2 => @snd (point_set X) (point_set Y)
end.
Definition ProductTopology2 : TopologicalSpace :=
WeakTopology prod2_proj.

(* Specifications: *)
Lemma prod2_conv1_cont: continuous prod2_conv1 (Y:=ProductTopology2).
Lemma prod2_conv2_cont: continuous prod2_conv2 (X:=ProductTopology2).
Lemma product2_fst_continuous:
continuous (@fst (point_set X) (point_set Y))
(X:=ProductTopology2).
Lemma product2_snd_continuous:
continuous (@snd (point_set X) (point_set Y))
(X:=ProductTopology2).
Lemma product2_map_continuous: forall (W:TopologicalSpace)
(f:point_set W -> point_set X) (g:point_set W -> point_set Y)
(w:point_set W),
continuous_at f w -> continuous_at g w ->
continuous_at (fun w:point_set W => (f w, g w)) w
(Y:=ProductTopology2).