Formalising Mathematics with Lean

3.3.Β Subspace topologyπŸ”—

Definition 3.8 (Subspace topology)πŸ”—

Let (X, \mathcal{T}) be a topological space and A \subseteq X a subset. Then the collection \mathcal{T}|_A = \{U \cap A | U \in \mathcal{T}\} is a topology on A, called the topology relative to X on A, or the subspace topology.

We will say that (A, \mathcal{T}|_A) is a topological subspace of (X, \mathcal{T}).

In Lean, in order to use this definition, we have to prove that this collection is, indeed, a topology.

Proof. Let (X, \mathcal{T}) be a topological space and A \subseteq X a subset, and define the collection \mathcal{T}|_A = \{U \cap A | U \in \mathcal{T}\}

Definition `TopoSubspace` of class type must be marked with `@[reducible]` or `@[implicit_reducible]`def TopoSubspace {X : Type} (T : TopologicalSpace X) (Y : Set X) : TopologicalSpace Y where IsOpen (V : Set Y) := βˆƒ U : Set X, T.IsOpen U ∧ V = U ∩ Y

(1) The universe is open. Indeed, since A = X \cap A and X is open in X.

Definition `TopoSubspace` of class type must be marked with `@[reducible]` or `@[implicit_reducible]`isOpen_univ := X:TypeT:TopologicalSpace XY:Set X⊒ βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' Set.univ = U ∩ Y X:TypeT:TopologicalSpace XY:Set X⊒ TopologicalSpace.IsOpen Set.univ ∧ Subtype.val '' Set.univ = Set.univ ∩ Y X:TypeT:TopologicalSpace XY:Set X⊒ TopologicalSpace.IsOpen Set.univX:TypeT:TopologicalSpace XY:Set X⊒ Subtype.val '' Set.univ = Set.univ ∩ Y X:TypeT:TopologicalSpace XY:Set X⊒ TopologicalSpace.IsOpen Set.univ All goals completed! πŸ™ X:TypeT:TopologicalSpace XY:Set X⊒ Subtype.val '' Set.univ = Set.univ ∩ Y All goals completed! πŸ™

(2) Let V_1 and V_2 be open in A. Then V_1 = U_1 \cap A and V_2 = U_2 \cap A with U_1, U_2 open in X. Hence V_1 \cap V_2 = (U_1 \cap A) \cap (U_2 \cap A) = (U_1 \cap U_2) \cap A, and U_1 \cap U_2 is open in X by the second property.

Definition `TopoSubspace` of class type must be marked with `@[reducible]` or `@[implicit_reducible]`isOpen_inter := X:TypeT:TopologicalSpace XY:Set X⊒ βˆ€ (s t : Set ↑Y), (βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' s = U ∩ Y) β†’ (βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' t = U ∩ Y) β†’ βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' (s ∩ t) = U ∩ Y intro V1 X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑Y⊒ (βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' V1 = U ∩ Y) β†’ (βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' V2 = U ∩ Y) β†’ βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' (V1 ∩ V2) = U ∩ Y X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑Yh1:βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' V1 = U ∩ Y⊒ (βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' V2 = U ∩ Y) β†’ βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' (V1 ∩ V2) = U ∩ Y X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑Yh1:βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' V1 = U ∩ Yh2:βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' V2 = U ∩ Y⊒ βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' (V1 ∩ V2) = U ∩ Y X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑Yh2:βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' V2 = U ∩ YU1:Set Xh1open:TopologicalSpace.IsOpen U1h1inter:Subtype.val '' V1 = U1 ∩ Y⊒ βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' (V1 ∩ V2) = U ∩ Y X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑YU1:Set Xh1open:TopologicalSpace.IsOpen U1h1inter:Subtype.val '' V1 = U1 ∩ YU2:Set Xh2open:TopologicalSpace.IsOpen U2h2inter:Subtype.val '' V2 = U2 ∩ Y⊒ βˆƒ U, TopologicalSpace.IsOpen U ∧ Subtype.val '' (V1 ∩ V2) = U ∩ Y X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑YU1:Set Xh1open:TopologicalSpace.IsOpen U1h1inter:Subtype.val '' V1 = U1 ∩ YU2:Set Xh2open:TopologicalSpace.IsOpen U2h2inter:Subtype.val '' V2 = U2 ∩ Y⊒ TopologicalSpace.IsOpen (U1 ∩ U2) ∧ Subtype.val '' (V1 ∩ V2) = U1 ∩ U2 ∩ Y X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑YU1:Set Xh1open:TopologicalSpace.IsOpen U1h1inter:Subtype.val '' V1 = U1 ∩ YU2:Set Xh2open:TopologicalSpace.IsOpen U2h2inter:Subtype.val '' V2 = U2 ∩ Y⊒ TopologicalSpace.IsOpen (U1 ∩ U2)X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑YU1:Set Xh1open:TopologicalSpace.IsOpen U1h1inter:Subtype.val '' V1 = U1 ∩ YU2:Set Xh2open:TopologicalSpace.IsOpen U2h2inter:Subtype.val '' V2 = U2 ∩ Y⊒ Subtype.val '' (V1 ∩ V2) = U1 ∩ U2 ∩ Y X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑YU1:Set Xh1open:TopologicalSpace.IsOpen U1h1inter:Subtype.val '' V1 = U1 ∩ YU2:Set Xh2open:TopologicalSpace.IsOpen U2h2inter:Subtype.val '' V2 = U2 ∩ Y⊒ TopologicalSpace.IsOpen (U1 ∩ U2) All goals completed! πŸ™ X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑YU1:Set Xh1open:TopologicalSpace.IsOpen U1h1inter:Subtype.val '' V1 = U1 ∩ YU2:Set Xh2open:TopologicalSpace.IsOpen U2h2inter:Subtype.val '' V2 = U2 ∩ Y⊒ Subtype.val '' (V1 ∩ V2) = U1 ∩ U2 ∩ Y X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑YU1:Set Xh1open:TopologicalSpace.IsOpen U1h1inter:Subtype.val '' V1 = U1 ∩ YU2:Set Xh2open:TopologicalSpace.IsOpen U2h2inter:Subtype.val '' V2 = U2 ∩ Y⊒ Subtype.val '' V1 ∩ Subtype.val '' V2 = U1 ∩ U2 ∩ Y X:TypeT:TopologicalSpace XY:Set XV1:Set ↑YV2:Set ↑YU1:Set Xh1open:TopologicalSpace.IsOpen U1h1inter:Subtype.val '' V1 = U1 ∩ YU2:Set Xh2open:TopologicalSpace.IsOpen U2h2inter:Subtype.val '' V2 = U2 ∩ Y⊒ U1 ∩ Y ∩ (U2 ∩ Y) = U1 ∩ U2 ∩ Y All goals completed! πŸ™

(3) Let S = \{V_i\}_i be a collection of open sets in A. Then, for each V_i there exists a U_i open in X such that V_i = U_i \cap A. Then \bigcup S = \bigcup_{i}V_i = \bigcup_{i}(U_i \cap A) = A \cap \bigcup_{i}U_i, and \bigcup_{i}U_i is open in X by the third property. The Lean proof is not included here due to its greater complexity. ∎

Example 3.12πŸ”—

Consider \mathbb{R} with the usual topology and the interval [0, 1] \subset \mathbb{R}. In the topology of [0, 1] induced by the usual topology, the intervals of the form [0, b) are open for every 0 < b \leq 1 (even though they are not open in \mathbb{R}). The intervals of the form (a, 1] are also open for each 0 \leq a < 1.

Proof. For each b > 0, it suffices to use, for example, the open interval (-1, b). We have already seen that open intervals are open in \mathbb{R}, and we have (-1, b) \cap [0, 1] = [0, b). Hence [0, b) is open in [0, 1].

lemma ico_open_in_Icc01 {Y : Set ℝ} {hY : Y = Set.Icc 0 1} {R : TopologicalSpace Y} {hR : R = TopoSubspace UsualTopology Y} (b : ℝ) (hb : 0 < b ∧ b < 1) : R.IsOpen ({y | (y : ℝ) ∈ Set.Ico 0 b} : Set Y) := Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1⊒ TopologicalSpace.IsOpen {y | ↑y ∈ Set.Ico 0 b} Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1⊒ TopologicalSpace.IsOpen {y | ↑y ∈ Set.Ico 0 b} -- usar la topo. del subesp. Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1⊒ TopologicalSpace.IsOpen {y | ↑y ∈ Set.Ico 0 b} -- usar la def. de T_u Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1⊒ TopologicalSpace.IsOpen (Set.Ioo (-1) b) ∧ Subtype.val '' {y | ↑y ∈ Set.Ico 0 b} = Set.Ioo (-1) b ∩ Y Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1⊒ TopologicalSpace.IsOpen (Set.Ioo (-1) b)Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1⊒ Subtype.val '' {y | ↑y ∈ Set.Ico 0 b} = Set.Ioo (-1) b ∩ Y Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1⊒ TopologicalSpace.IsOpen (Set.Ioo (-1) b) All goals completed! πŸ™ Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1⊒ Subtype.val '' {y | ↑y ∈ Set.Ico 0 b} = Set.Ioo (-1) b ∩ Y Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:β„βŠ’ x ∈ Subtype.val '' {y | ↑y ∈ Set.Ico 0 b} ↔ x ∈ Set.Ioo (-1) b ∩ Y; Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:β„βŠ’ x ∈ Subtype.val '' {y | ↑y ∈ Set.Ico 0 b} β†’ x ∈ Set.Ioo (-1) b ∩ YY:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:β„βŠ’ x ∈ Set.Ioo (-1) b ∩ Y β†’ x ∈ Subtype.val '' {y | ↑y ∈ Set.Ico 0 b} all_goals Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:ℝhx:x ∈ Set.Ioo (-1) b ∩ Y⊒ x ∈ Subtype.val '' {y | ↑y ∈ Set.Ico 0 b} Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:ℝhx:(-1 < x ∧ x < b) ∧ x ∈ Y⊒ (0 ≀ x ∧ x < b) ∧ x ∈ Y -- convertirlo todo a inecuaciones Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:ℝhx:(-1 < x ∧ x < b) ∧ x ∈ Y⊒ 0 ≀ x ∧ x < bY:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:ℝhx:(-1 < x ∧ x < b) ∧ x ∈ Y⊒ x ∈ Y Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:ℝhx:(-1 < x ∧ x < b) ∧ x ∈ Y⊒ 0 ≀ x ∧ x < b Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:ℝhx:(-1 < x ∧ x < b) ∧ 0 ≀ x ∧ x ≀ 1⊒ 0 ≀ x ∧ x < b Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:ℝhx:(-1 < x ∧ x < b) ∧ 0 ≀ x ∧ x ≀ 1⊒ 0 ≀ xY:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:ℝhx:(-1 < x ∧ x < b) ∧ 0 ≀ x ∧ x ≀ 1⊒ x < b all_goals All goals completed! πŸ™ Y:Set ℝhY:Y = Set.Icc 0 1R:TopologicalSpace ↑YhR:R = TopoSubspace UsualTopology Yb:ℝhb:0 < b ∧ b < 1x:ℝhx:(-1 < x ∧ x < b) ∧ x ∈ Y⊒ x ∈ Y All goals completed! πŸ™

∎