|
| 1 | +/- |
| 2 | +Copyright (c) 2022 Andrew Yang. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Andrew Yang |
| 5 | +
|
| 6 | +! This file was ported from Lean 3 source module topology.local_at_target |
| 7 | +! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982 |
| 8 | +! Please do not edit these lines, except to modify the commit id |
| 9 | +! if you have ported upstream changes. |
| 10 | +-/ |
| 11 | +import Mathlib.Topology.Sets.Opens |
| 12 | + |
| 13 | +/-! |
| 14 | +# Properties of maps that are local at the target. |
| 15 | +
|
| 16 | +We show that the following properties of continuous maps are local at the target : |
| 17 | +- `inducing` |
| 18 | +- `embedding` |
| 19 | +- `open_embedding` |
| 20 | +- `closed_embedding` |
| 21 | +
|
| 22 | +-/ |
| 23 | + |
| 24 | + |
| 25 | +open TopologicalSpace Set Filter |
| 26 | + |
| 27 | +open Topology Filter |
| 28 | + |
| 29 | +variable {α β : Type _} [TopologicalSpace α] [TopologicalSpace β] {f : α → β} |
| 30 | + |
| 31 | +variable {s : Set β} {ι : Type _} {U : ι → Opens β} (hU : supᵢ U = ⊤) |
| 32 | + |
| 33 | +theorem Set.restrictPreimage_inducing (s : Set β) (h : Inducing f) : |
| 34 | + Inducing (s.restrictPreimage f) := by |
| 35 | + simp_rw [inducing_subtype_val.inducing_iff, inducing_iff_nhds, restrictPreimage, |
| 36 | + MapsTo.coe_restrict, restrict_eq, ← @Filter.comap_comap _ _ _ _ _ f, Function.comp_apply] at h⊢ |
| 37 | + intro a |
| 38 | + rw [← h, ← inducing_subtype_val.nhds_eq_comap] |
| 39 | +#align set.restrict_preimage_inducing Set.restrictPreimage_inducing |
| 40 | + |
| 41 | +alias Set.restrictPreimage_inducing ← Inducing.restrictPreimage |
| 42 | +#align inducing.restrict_preimage Inducing.restrictPreimage |
| 43 | + |
| 44 | +theorem Set.restrictPreimage_embedding (s : Set β) (h : Embedding f) : |
| 45 | + Embedding (s.restrictPreimage f) := |
| 46 | + ⟨h.1.restrictPreimage s, h.2.restrictPreimage s⟩ |
| 47 | +#align set.restrict_preimage_embedding Set.restrictPreimage_embedding |
| 48 | + |
| 49 | +alias Set.restrictPreimage_embedding ← Embedding.restrictPreimage |
| 50 | +#align embedding.restrict_preimage Embedding.restrictPreimage |
| 51 | + |
| 52 | +theorem Set.restrictPreimage_openEmbedding (s : Set β) (h : OpenEmbedding f) : |
| 53 | + OpenEmbedding (s.restrictPreimage f) := |
| 54 | + ⟨h.1.restrictPreimage s, |
| 55 | + (s.range_restrictPreimage f).symm ▸ continuous_subtype_val.isOpen_preimage _ h.2⟩ |
| 56 | +#align set.restrict_preimage_open_embedding Set.restrictPreimage_openEmbedding |
| 57 | + |
| 58 | +alias Set.restrictPreimage_openEmbedding ← OpenEmbedding.restrictPreimage |
| 59 | +#align open_embedding.restrict_preimage OpenEmbedding.restrictPreimage |
| 60 | + |
| 61 | +theorem Set.restrictPreimage_closedEmbedding (s : Set β) (h : ClosedEmbedding f) : |
| 62 | + ClosedEmbedding (s.restrictPreimage f) := |
| 63 | + ⟨h.1.restrictPreimage s, |
| 64 | + (s.range_restrictPreimage f).symm ▸ inducing_subtype_val.isClosed_preimage _ h.2⟩ |
| 65 | +#align set.restrict_preimage_closed_embedding Set.restrictPreimage_closedEmbedding |
| 66 | + |
| 67 | +alias Set.restrictPreimage_closedEmbedding ← ClosedEmbedding.restrictPreimage |
| 68 | +#align closed_embedding.restrict_preimage ClosedEmbedding.restrictPreimage |
| 69 | + |
| 70 | +theorem Set.restrictPreimage_isClosedMap (s : Set β) (H : IsClosedMap f) : |
| 71 | + IsClosedMap (s.restrictPreimage f) := by |
| 72 | + rintro t ⟨u, hu, e⟩ |
| 73 | + refine' ⟨⟨_, (H _ (IsOpen.isClosed_compl hu)).1, _⟩⟩ |
| 74 | + rw [← (congr_arg HasCompl.compl e).trans (compl_compl t)] |
| 75 | + simp only [Set.preimage_compl, compl_inj_iff] |
| 76 | + ext ⟨x, hx⟩ |
| 77 | + suffices (∃ y, y ∉ u ∧ f y = x) ↔ ∃ y, y ∉ u ∧ f y ∈ s ∧ f y = x by |
| 78 | + simpa [Set.restrictPreimage, ← Subtype.coe_inj] |
| 79 | + exact ⟨fun ⟨a, b, c⟩ => ⟨a, b, c.symm ▸ hx, c⟩, fun ⟨a, b, _, c⟩ => ⟨a, b, c⟩⟩ |
| 80 | +#align set.restrict_preimage_is_closed_map Set.restrictPreimage_isClosedMap |
| 81 | + |
| 82 | +theorem isOpen_iff_inter_of_supᵢ_eq_top (s : Set β) : IsOpen s ↔ ∀ i, IsOpen (s ∩ U i) := by |
| 83 | + constructor |
| 84 | + · exact fun H i => H.inter (U i).2 |
| 85 | + · intro H |
| 86 | + have : (⋃ i, (U i : Set β)) = Set.univ := by |
| 87 | + convert congr_arg (SetLike.coe) hU |
| 88 | + simp |
| 89 | + rw [← s.inter_univ, ← this, Set.inter_unionᵢ] |
| 90 | + exact isOpen_unionᵢ H |
| 91 | +#align is_open_iff_inter_of_supr_eq_top isOpen_iff_inter_of_supᵢ_eq_top |
| 92 | + |
| 93 | +theorem isOpen_iff_coe_preimage_of_supᵢ_eq_top (s : Set β) : |
| 94 | + IsOpen s ↔ ∀ i, IsOpen ((↑) ⁻¹' s : Set (U i)) := by |
| 95 | + -- Porting note: rewrote to avoid ´simp´ issues |
| 96 | + rw [isOpen_iff_inter_of_supᵢ_eq_top hU s] |
| 97 | + refine forall_congr' fun i => ?_ |
| 98 | + rw [(U _).2.openEmbedding_subtype_val.open_iff_image_open] |
| 99 | + erw [Set.image_preimage_eq_inter_range] |
| 100 | + rw [Subtype.range_coe, Opens.carrier_eq_coe] |
| 101 | +#align is_open_iff_coe_preimage_of_supr_eq_top isOpen_iff_coe_preimage_of_supᵢ_eq_top |
| 102 | + |
| 103 | +theorem isClosed_iff_coe_preimage_of_supᵢ_eq_top (s : Set β) : |
| 104 | + IsClosed s ↔ ∀ i, IsClosed ((↑) ⁻¹' s : Set (U i)) := by |
| 105 | + simpa using isOpen_iff_coe_preimage_of_supᵢ_eq_top hU (sᶜ) |
| 106 | +#align is_closed_iff_coe_preimage_of_supr_eq_top isClosed_iff_coe_preimage_of_supᵢ_eq_top |
| 107 | + |
| 108 | +theorem isClosedMap_iff_isClosedMap_of_supᵢ_eq_top : |
| 109 | + IsClosedMap f ↔ ∀ i, IsClosedMap ((U i).1.restrictPreimage f) := by |
| 110 | + refine' ⟨fun h i => Set.restrictPreimage_isClosedMap _ h, _⟩ |
| 111 | + rintro H s hs |
| 112 | + rw [isClosed_iff_coe_preimage_of_supᵢ_eq_top hU] |
| 113 | + intro i |
| 114 | + convert H i _ ⟨⟨_, hs.1, eq_compl_comm.mpr rfl⟩⟩ |
| 115 | + ext ⟨x, hx⟩ |
| 116 | + suffices (∃ y, y ∈ s ∧ f y = x) ↔ ∃ y, y ∈ s ∧ f y ∈ U i ∧ f y = x by |
| 117 | + simpa [Set.restrictPreimage, ← Subtype.coe_inj] |
| 118 | + exact ⟨fun ⟨a, b, c⟩ => ⟨a, b, c.symm ▸ hx, c⟩, fun ⟨a, b, _, c⟩ => ⟨a, b, c⟩⟩ |
| 119 | +#align is_closed_map_iff_is_closed_map_of_supr_eq_top isClosedMap_iff_isClosedMap_of_supᵢ_eq_top |
| 120 | + |
| 121 | +theorem inducing_iff_inducing_of_supᵢ_eq_top (h : Continuous f) : |
| 122 | + Inducing f ↔ ∀ i, Inducing ((U i).1.restrictPreimage f) := by |
| 123 | + simp_rw [inducing_subtype_val.inducing_iff, inducing_iff_nhds, restrictPreimage, |
| 124 | + MapsTo.coe_restrict, restrict_eq, ← @Filter.comap_comap _ _ _ _ _ f] |
| 125 | + constructor |
| 126 | + · intro H i x |
| 127 | + rw [Function.comp_apply, ← H, ← inducing_subtype_val.nhds_eq_comap] |
| 128 | + · intro H x |
| 129 | + obtain ⟨i, hi⟩ := |
| 130 | + Opens.mem_supᵢ.mp |
| 131 | + (show f x ∈ supᵢ U by |
| 132 | + rw [hU] |
| 133 | + triv) |
| 134 | + erw [← OpenEmbedding.map_nhds_eq (h.1 _ (U i).2).openEmbedding_subtype_val ⟨x, hi⟩] |
| 135 | + rw [(H i) ⟨x, hi⟩, Filter.subtype_coe_map_comap, Function.comp_apply, Subtype.coe_mk, |
| 136 | + inf_eq_left, Filter.le_principal_iff] |
| 137 | + exact Filter.preimage_mem_comap ((U i).2.mem_nhds hi) |
| 138 | +#align inducing_iff_inducing_of_supr_eq_top inducing_iff_inducing_of_supᵢ_eq_top |
| 139 | + |
| 140 | +theorem embedding_iff_embedding_of_supᵢ_eq_top (h : Continuous f) : |
| 141 | + Embedding f ↔ ∀ i, Embedding ((U i).1.restrictPreimage f) := by |
| 142 | + simp_rw [embedding_iff] |
| 143 | + rw [forall_and] |
| 144 | + apply and_congr |
| 145 | + · apply inducing_iff_inducing_of_supᵢ_eq_top <;> assumption |
| 146 | + · apply Set.injective_iff_injective_of_unionᵢ_eq_univ |
| 147 | + convert congr_arg SetLike.coe hU |
| 148 | + simp |
| 149 | +#align embedding_iff_embedding_of_supr_eq_top embedding_iff_embedding_of_supᵢ_eq_top |
| 150 | + |
| 151 | +theorem openEmbedding_iff_openEmbedding_of_supᵢ_eq_top (h : Continuous f) : |
| 152 | + OpenEmbedding f ↔ ∀ i, OpenEmbedding ((U i).1.restrictPreimage f) := by |
| 153 | + simp_rw [openEmbedding_iff] |
| 154 | + rw [forall_and] |
| 155 | + apply and_congr |
| 156 | + · apply embedding_iff_embedding_of_supᵢ_eq_top <;> assumption |
| 157 | + · simp_rw [Set.range_restrictPreimage] |
| 158 | + apply isOpen_iff_coe_preimage_of_supᵢ_eq_top hU |
| 159 | +#align open_embedding_iff_open_embedding_of_supr_eq_top openEmbedding_iff_openEmbedding_of_supᵢ_eq_top |
| 160 | + |
| 161 | +theorem closedEmbedding_iff_closedEmbedding_of_supᵢ_eq_top (h : Continuous f) : |
| 162 | + ClosedEmbedding f ↔ ∀ i, ClosedEmbedding ((U i).1.restrictPreimage f) := by |
| 163 | + simp_rw [closedEmbedding_iff] |
| 164 | + rw [forall_and] |
| 165 | + apply and_congr |
| 166 | + · apply embedding_iff_embedding_of_supᵢ_eq_top <;> assumption |
| 167 | + · simp_rw [Set.range_restrictPreimage] |
| 168 | + apply isClosed_iff_coe_preimage_of_supᵢ_eq_top hU |
| 169 | +#align closed_embedding_iff_closed_embedding_of_supr_eq_top closedEmbedding_iff_closedEmbedding_of_supᵢ_eq_top |
0 commit comments