(* Baire Space *)
Definition B := nat -> nat.Definition Top := B -> Prop.Definition inclusion (X Y : Top) := forall z : B, X z -> Y z.Definition equal (X Y : Top) := inclusion X Y /\ inclusion Y X.Definition complement (X : Top) (z : B) := ~ X z.Definition union (X Y : Top) (z : B) := X z \/ Y z.Definition inter (X Y : Top) (z : B) := X z /\ Y z.Definition neighbour (f : B) (n : nat) (g : B) :=
  forall m : nat, m <= n -> f m = g m.Definition open (X : Top) :=
  forall f : B, X f -> exists n : nat, inclusion (neighbour f n) X.Definition closed (X : Top) := open (complement X).Definition dense (X : Top) :=
  forall (f : B) (n : nat), exists g : B, X g /\ neighbour f n g.Definition closure (X : Top) (f : B) :=
  forall n : nat, exists g : B, X g /\ neighbour f n g.

(* Specifications: *)
Lemma refl_neighbour : forall (n : nat) (x : B), neighbour x n x.
Lemma trans_neighbour : forall (n : nat) (f g h : B), neighbour f n g -> neighbour g n h -> neighbour f n h.
Lemma closedc_clX : forall X : Top, closed (closure X).
Lemma Xinc_clX : forall X : Top, inclusion X (closure X).
Lemma Lemma1 : forall X : Top, equal X (inter (closure X) (union X (complement (closure X)))).
Lemma density : forall X : Top, dense (union X (complement (closure X))).
Theorem Rem : forall X : Top, exists Y : Top, (exists Z : Top, closed Y /\ dense Z /\ equal X (inter Y Z)).