@@ -365,23 +365,22 @@ by ext x; rw [set.mem_preimage_eq, ← closure_induced he.1, he.2]
365
365
366
366
end embedding
367
367
368
- section quotient_map
369
-
370
368
/-- A function between topological spaces is a quotient map if it is surjective,
371
369
and for all `s : set β`, `s` is open iff its preimage is an open set. -/
372
370
def quotient_map [tα : topological_space α] [tβ : topological_space β] (f : α → β) : Prop :=
373
371
function.surjective f ∧ tβ = tα.coinduced f
374
372
373
+ namespace quotient_map
375
374
variables [topological_space α] [topological_space β] [topological_space γ] [topological_space δ]
376
375
377
- lemma quotient_map_id : quotient_map (@id α) :=
376
+ protected lemma id : quotient_map (@id α) :=
378
377
⟨assume a, ⟨a, rfl⟩, coinduced_id.symm⟩
379
378
380
- lemma quotient_map_compose {f : α → β} {g : β → γ} (hf : quotient_map f) (hg : quotient_map g) :
379
+ protected lemma comp {f : α → β} {g : β → γ} (hf : quotient_map f) (hg : quotient_map g) :
381
380
quotient_map (g ∘ f) :=
382
381
⟨function.surjective_comp hg.left hf.left, by rw [hg.right, hf.right, coinduced_compose]⟩
383
382
384
- lemma quotient_map_of_quotient_map_compose {f : α → β} {g : β → γ}
383
+ protected lemma of_quotient_map_compose {f : α → β} {g : β → γ}
385
384
(hf : continuous f) (hg : continuous g)
386
385
(hgf : quotient_map (g ∘ f)) : quotient_map g :=
387
386
⟨assume b, let ⟨a, h⟩ := hgf.left b in ⟨f a, h⟩,
@@ -390,15 +389,68 @@ lemma quotient_map_of_quotient_map_compose {f : α → β} {g : β → γ}
390
389
(by rw [hgf.right, ← continuous_iff_le_coinduced];
391
390
apply hf.comp continuous_coinduced_rng)⟩
392
391
393
- lemma quotient_map. continuous_iff {f : α → β} {g : β → γ} (hf : quotient_map f) :
392
+ protected lemma continuous_iff {f : α → β} {g : β → γ} (hf : quotient_map f) :
394
393
continuous g ↔ continuous (g ∘ f) :=
395
394
by rw [continuous_iff_le_coinduced, continuous_iff_le_coinduced, hf.right, coinduced_compose]
396
395
397
- lemma quotient_map. continuous {f : α → β} (hf : quotient_map f) : continuous f :=
396
+ protected lemma continuous {f : α → β} (hf : quotient_map f) : continuous f :=
398
397
hf.continuous_iff.mp continuous_id
399
398
400
399
end quotient_map
401
400
401
+ section is_open_map
402
+ variables [topological_space α] [topological_space β]
403
+
404
+ def is_open_map (f : α → β) := ∀ U : set α, is_open U → is_open (f '' U)
405
+
406
+ lemma is_open_map_iff_nhds_le (f : α → β) : is_open_map f ↔ ∀(a:α), nhds (f a) ≤ (nhds a).map f :=
407
+ begin
408
+ split,
409
+ { assume h a s hs,
410
+ rcases mem_nhds_sets_iff.1 hs with ⟨t, hts, ht, hat⟩,
411
+ exact filter.mem_sets_of_superset
412
+ (mem_nhds_sets (h t ht) (mem_image_of_mem _ hat))
413
+ (image_subset_iff.2 hts) },
414
+ { refine assume h s hs, is_open_iff_mem_nhds.2 _,
415
+ rintros b ⟨a, ha, rfl⟩,
416
+ exact h _ (filter.image_mem_map $ mem_nhds_sets hs ha) }
417
+ end
418
+
419
+ end is_open_map
420
+
421
+ namespace is_open_map
422
+ variables [topological_space α] [topological_space β] [topological_space γ]
423
+ open function
424
+
425
+ protected lemma id : is_open_map (@id α) := assume s hs, by rwa [image_id]
426
+
427
+ protected lemma comp
428
+ {f : α → β} {g : β → γ} (hf : is_open_map f) (hg : is_open_map g) : is_open_map (g ∘ f) :=
429
+ by intros s hs; rw [image_comp]; exact hg _ (hf _ hs)
430
+
431
+ lemma of_inverse {f : α → β} {f' : β → α}
432
+ (h : continuous f') (l_inv : left_inverse f f') (r_inv : right_inverse f f') :
433
+ is_open_map f :=
434
+ assume s hs,
435
+ have f' ⁻¹' s = f '' s, by ext x; simp [mem_image_iff_of_inverse r_inv l_inv],
436
+ this ▸ h s hs
437
+
438
+ lemma to_quotient_map {f : α → β}
439
+ (open_map : is_open_map f) (cont : continuous f) (surj : function.surjective f) :
440
+ quotient_map f :=
441
+ ⟨ surj,
442
+ begin
443
+ ext s,
444
+ show is_open s ↔ is_open (f ⁻¹' s),
445
+ split,
446
+ { exact cont s },
447
+ { assume h,
448
+ rw ← @image_preimage_eq _ _ _ s surj,
449
+ exact open_map _ h }
450
+ end ⟩
451
+
452
+ end is_open_map
453
+
402
454
section sierpinski
403
455
variables [topological_space α]
404
456
@@ -526,6 +578,17 @@ lemma is_closed_prod [topological_space α] [topological_space β] {s₁ : set
526
578
(h₁ : is_closed s₁) (h₂ : is_closed s₂) : is_closed (set.prod s₁ s₂) :=
527
579
closure_eq_iff_is_closed.mp $ by simp [h₁, h₂, closure_prod_eq, closure_eq_of_is_closed]
528
580
581
+ protected lemma is_open_map.prod
582
+ [topological_space α] [topological_space β] [topological_space γ] [topological_space δ]
583
+ {f : α → β} {g : γ → δ}
584
+ (hf : is_open_map f) (hg : is_open_map g) : is_open_map (λ p : α × γ, (f p.1 , g p.2 )) :=
585
+ begin
586
+ rw [is_open_map_iff_nhds_le],
587
+ rintros ⟨a, b⟩,
588
+ rw [nhds_prod_eq, nhds_prod_eq, ← filter.prod_map_map_eq],
589
+ exact filter.prod_mono ((is_open_map_iff_nhds_le f).1 hf a) ((is_open_map_iff_nhds_le g).1 hg b)
590
+ end
591
+
529
592
section tube_lemma
530
593
531
594
def nhds_contain_boxes (s : set α) (t : set β) : Prop :=
0 commit comments