Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit c8ecae8

Browse files
committed
feature(analysis/topology/continuity): start homeomorphism
1 parent af434b5 commit c8ecae8

File tree

2 files changed

+112
-7
lines changed

2 files changed

+112
-7
lines changed

analysis/topology/continuity.lean

Lines changed: 107 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1212,7 +1212,6 @@ protected def subtype (p : α → Prop) {e : α → β} (de : dense_embedding e)
12121212

12131213
end dense_embedding
12141214

1215-
12161215
lemma is_closed_property [topological_space α] [topological_space β] {e : α → β} {p : β → Prop}
12171216
(he : closure (range e) = univ) (hp : is_closed {x | p x}) (h : ∀a, p (e a)) :
12181217
∀b, p b :=
@@ -1255,3 +1254,110 @@ have (a,b) ∈ closure (set.prod s t),
12551254
show f (a, b).1 (a, b).2 ∈ closure u,
12561255
from @mem_closure_of_continuous (α×β) _ _ _ (λp:α×β, f p.1 p.2) (a,b) _ u hf this $
12571256
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

data/equiv/basic.lean

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -227,15 +227,14 @@ calc (false → α) ≃ (empty → α) : arrow_congr false_equiv_empty (equiv.re
227227

228228
end
229229

230-
@[congr] def prod_congr {α₁ β₁ α₂ β₂ : Sort*} : α₁ ≃ α₂ → β₁ ≃ β₂ → (α₁ × β₁) ≃ (α₂ × β₂)
231-
| ⟨f₁, g₁, l₁, r₁⟩ ⟨f₂, g₂, l₂, r₂⟩ :=
232-
⟨λ ⟨a, b⟩, (f₁ a, f₂ b), λ ⟨a, b⟩, (g₁ a, g₂ b),
233-
λ ⟨a, b⟩, show (g₁ (f₁ a), g₂ (f₂ b)) = (a, b), by rw [l₁ a, l₂ b],
234-
λ ⟨a, b⟩, show (f₁ (g₁ a), f₂ (g₂ b)) = (a, b), by rw [r₁ a, r₂ b]⟩
230+
@[congr] def prod_congr {α₁ β₁ α₂ β₂ : Sort*} (e₁ : α₁ ≃ α₂) (e₂ :β₁ ≃ β₂) : (α₁ × β₁) ≃ (α₂ × β₂) :=
231+
⟨λp, (e₁ p.1, e₂ p.2), λp, (e₁.symm p.1, e₂.symm p.2),
232+
λ ⟨a, b⟩, show (e₁.symm (e₁ a), e₂.symm (e₂ b)) = (a, b), by rw [inverse_apply_apply, inverse_apply_apply],
233+
λ ⟨a, b⟩, show (e₁ (e₁.symm a), e₂ (e₂.symm b)) = (a, b), by rw [apply_inverse_apply, apply_inverse_apply]⟩
235234

236235
@[simp] theorem prod_congr_apply {α₁ β₁ α₂ β₂ : Sort*} (e₁ : α₁ ≃ α₂) (e₂ : β₁ ≃ β₂) (a : α₁) (b : β₁) :
237236
prod_congr e₁ e₂ (a, b) = (e₁ a, e₂ b) :=
238-
by cases e₁; cases e₂; refl
237+
rfl
239238

240239
@[simp] def prod_comm (α β : Sort*) : (α × β) ≃ (β × α) :=
241240
⟨λ p, (p.2, p.1), λ p, (p.2, p.1), λ⟨a, b⟩, rfl, λ⟨a, b⟩, rfl⟩

0 commit comments

Comments
 (0)