@@ -1212,7 +1212,6 @@ protected def subtype (p : α → Prop) {e : α → β} (de : dense_embedding e)
1212
1212
1213
1213
end dense_embedding
1214
1214
1215
-
1216
1215
lemma is_closed_property [topological_space α] [topological_space β] {e : α → β} {p : β → Prop }
1217
1216
(he : closure (range e) = univ) (hp : is_closed {x | p x}) (h : ∀a, p (e a)) :
1218
1217
∀b, p b :=
@@ -1255,3 +1254,110 @@ have (a,b) ∈ closure (set.prod s t),
1255
1254
show f (a, b).1 (a, b).2 ∈ closure u,
1256
1255
from @mem_closure_of_continuous (α×β) _ _ _ (λp:α×β, f p.1 p.2 ) (a,b) _ u hf this $
1257
1256
assume ⟨p₁, p₂⟩ ⟨h₁, h₂⟩, h p₁ h₁ p₂ h₂
1257
+
1258
+ /-- α and β are homeomorph, also called topological isomoph -/
1259
+ structure homeomorph (α : Type *) (β : Type *) [topological_space α] [topological_space β]
1260
+ extends α ≃ β :=
1261
+ (continuous_to_fun : continuous to_fun)
1262
+ (continuous_inv_fun : continuous inv_fun)
1263
+
1264
+ infix ` ≃ₜ `:50 := homeomorph
1265
+
1266
+ namespace homeomorph
1267
+ variables [topological_space α] [topological_space β] [topological_space γ] [topological_space δ]
1268
+
1269
+ instance : has_coe_to_fun (α ≃ₜ β) := ⟨λ_, α → β, λe, e.to_equiv⟩
1270
+
1271
+ lemma coe_eq_to_equiv (h : α ≃ₜ β) (a : α) : h a = h.to_equiv a := rfl
1272
+
1273
+ protected def refl (α : Type *) [topological_space α] : α ≃ₜ α :=
1274
+ { continuous_to_fun := continuous_id, continuous_inv_fun := continuous_id, .. equiv.refl α }
1275
+
1276
+ protected def trans (h₁ : α ≃ₜ β) (h₂ : β ≃ₜ γ) : α ≃ₜ γ :=
1277
+ { continuous_to_fun := h₁.continuous_to_fun.comp h₂.continuous_to_fun,
1278
+ continuous_inv_fun := h₂.continuous_inv_fun.comp h₁.continuous_inv_fun,
1279
+ .. equiv.trans h₁.to_equiv h₂.to_equiv }
1280
+
1281
+ protected def symm (h : α ≃ₜ β) : β ≃ₜ α :=
1282
+ { continuous_to_fun := h.continuous_inv_fun,
1283
+ continuous_inv_fun := h.continuous_to_fun,
1284
+ .. h.to_equiv.symm }
1285
+
1286
+ protected def continuous (h : α ≃ₜ β) : continuous h := h.continuous_to_fun
1287
+
1288
+ lemma symm_comp_self (h : α ≃ₜ β) : ⇑h.symm ∘ ⇑h = id :=
1289
+ funext $ assume a, h.to_equiv.left_inv a
1290
+
1291
+ lemma self_comp_symm (h : α ≃ₜ β) : ⇑h ∘ ⇑h.symm = id :=
1292
+ funext $ assume a, h.to_equiv.right_inv a
1293
+
1294
+ lemma range_coe (h : α ≃ₜ β) : range h = univ :=
1295
+ eq_univ_of_forall $ assume b, ⟨h.symm b, congr_fun h.self_comp_symm b⟩
1296
+
1297
+ lemma image_symm (h : α ≃ₜ β) : image h.symm = preimage h :=
1298
+ image_eq_preimage_of_inverse h.symm.to_equiv.left_inv h.symm.to_equiv.right_inv
1299
+
1300
+ lemma preimage_symm (h : α ≃ₜ β) : preimage h.symm = image h :=
1301
+ (image_eq_preimage_of_inverse h.to_equiv.left_inv h.to_equiv.right_inv).symm
1302
+
1303
+ lemma induced_eq
1304
+ {α : Type *} {β : Type *} [tα : topological_space α] [tβ : topological_space β] (h : α ≃ₜ β) :
1305
+ tβ.induced h = tα :=
1306
+ le_antisymm
1307
+ (induced_le_iff_le_coinduced.2 h.continuous)
1308
+ (calc tα = (tα.induced h.symm).induced h : by rw [induced_compose, symm_comp_self, induced_id]
1309
+ ... ≤ tβ.induced h : induced_mono $ (induced_le_iff_le_coinduced.2 h.symm.continuous))
1310
+
1311
+ lemma coinduced_eq
1312
+ {α : Type *} {β : Type *} [tα : topological_space α] [tβ : topological_space β] (h : α ≃ₜ β) :
1313
+ tα.coinduced h = tβ :=
1314
+ le_antisymm
1315
+ (calc tα.coinduced h ≤ (tβ.coinduced h.symm).coinduced h : coinduced_mono h.symm.continuous
1316
+ ... = tβ : by rw [coinduced_compose, self_comp_symm, coinduced_id])
1317
+ h.continuous
1318
+
1319
+ protected lemma embedding (h : α ≃ₜ β) : embedding h :=
1320
+ ⟨h.to_equiv.bijective.1 , h.induced_eq.symm⟩
1321
+
1322
+ protected lemma dense_embedding (h : α ≃ₜ β) : dense_embedding h :=
1323
+ { dense := assume a, by rw [h.range_coe, closure_univ]; trivial,
1324
+ inj := h.to_equiv.bijective.1 ,
1325
+ induced := assume a, by rw [← nhds_induced_eq_comap, h.induced_eq] }
1326
+
1327
+ protected lemma is_open_map (h : α ≃ₜ β) : is_open_map h :=
1328
+ begin
1329
+ assume s,
1330
+ rw ← h.preimage_symm,
1331
+ exact h.symm.continuous s
1332
+ end
1333
+
1334
+ protected lemma quotient_map (h : α ≃ₜ β) : quotient_map h :=
1335
+ ⟨h.to_equiv.bijective.2 , h.coinduced_eq.symm⟩
1336
+
1337
+ def prod_congr (h₁ : α ≃ₜ β) (h₂ : γ ≃ₜ δ) : (α × γ) ≃ₜ (β × δ) :=
1338
+ { continuous_to_fun :=
1339
+ continuous.prod_mk (continuous_fst.comp h₁.continuous) (continuous_snd.comp h₂.continuous),
1340
+ continuous_inv_fun :=
1341
+ continuous.prod_mk (continuous_fst.comp h₁.symm.continuous) (continuous_snd.comp h₂.symm.continuous),
1342
+ .. h₁.to_equiv.prod_congr h₂.to_equiv }
1343
+
1344
+ section
1345
+ variables (α β γ)
1346
+
1347
+ def prod_comm : (α × β) ≃ₜ (β × α) :=
1348
+ { continuous_to_fun := continuous.prod_mk continuous_snd continuous_fst,
1349
+ continuous_inv_fun := continuous.prod_mk continuous_snd continuous_fst,
1350
+ .. equiv.prod_comm α β }
1351
+
1352
+ def prod_assoc : ((α × β) × γ) ≃ₜ (α × (β × γ)) :=
1353
+ { continuous_to_fun :=
1354
+ continuous.prod_mk (continuous_fst.comp continuous_fst)
1355
+ (continuous.prod_mk (continuous_fst.comp continuous_snd) continuous_snd),
1356
+ continuous_inv_fun := continuous.prod_mk
1357
+ (continuous.prod_mk continuous_fst (continuous_snd.comp continuous_fst))
1358
+ (continuous_snd.comp continuous_snd),
1359
+ .. equiv.prod_assoc α β γ }
1360
+
1361
+ end
1362
+
1363
+ end homeomorph
0 commit comments