Section Urysohns_Lemma_construction.
Variable X:TopologicalSpace.
Variable normal_sep_fun: forall F U:Ensemble (point_set X),
closed F -> open U -> Included F U ->
{ V:Ensemble (point_set X) | open V /\ Included F V /\
Included (closure V) U }.
Variable U0 U1:Ensemble (point_set X).
Hypothesis U0_open: open U0.
Hypothesis U1_open: open U1.
Hypothesis U0_in_U1: Included (closure U0) U1.
Definition Un (n:nat) : Ensemble (point_set X) :=
match n with
| O => U0
| S O => U1
| S (S _) => Full_set
end.
Definition expand_U_dyadic (f:nat->Ensemble (point_set X))
(Hopen: forall n:nat, open (f n))
(Hincr: forall n:nat, Included (closure (f n)) (f (S n)))
(n:nat) : Ensemble (point_set X) :=
if (even_odd_dec n) then f (div2 n) else
let m := div2 n in proj1_sig
(normal_sep_fun (closure (f m)) (f (S m))
(closure_closed _) (Hopen _) (Hincr _)).

Lemma expand_U_dyadic_open: forall f Hopen Hincr n,
open (expand_U_dyadic f Hopen Hincr n).