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.
Inductive ProductTopology2_basis :
Family (point_set ProductTopology2) :=
| intro_product2_basis_elt:
forall (U:Ensemble (point_set X))
(V:Ensemble (point_set Y)),
open U -> open V ->
In ProductTopology2_basis
[ p:point_set ProductTopology2 |
let (x,y):=p in (In U x /\ In V y) ].

Lemma ProductTopology2_basis_is_basis:
open_basis ProductTopology2_basis.