Section product_topology2.
(* we provide a version of the product topology on X and Y whose underlying set is point_set X * point_set Y, for more convenience as compared with the general definition *)
Variable X Y:TopologicalSpace.
Inductive twoT := | twoT_1 | twoT_2.
Let prod2_fun (i:twoT) := match i with
| twoT_1 => X | twoT_2 => Y end.
Let prod2 := ProductTopology prod2_fun.
Let prod2_conv1 (p:point_set prod2) : point_set X * point_set Y :=
(p twoT_1, p twoT_2).
Let prod2_conv2 (p : point_set X * point_set Y) : point_set prod2 :=
let (x,y):=p in fun i:twoT => match i with
| twoT_1 => x | twoT_2 => y
end.
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.

Lemma product2_map_continuous_at: 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).