@@ -33,6 +33,21 @@ lemma uniform_inducing.comp {g : β → γ} (hg : uniform_inducing g)
33
33
structure uniform_embedding (f : α → β) extends uniform_inducing f : Prop :=
34
34
(inj : function.injective f)
35
35
36
+ lemma uniform_embedding_subtype_val {p : α → Prop } :
37
+ uniform_embedding (subtype.val : subtype p → α) :=
38
+ { comap_uniformity := rfl,
39
+ inj := subtype.val_injective }
40
+
41
+ lemma uniform_embedding_subtype_coe {p : α → Prop } :
42
+ uniform_embedding (coe : subtype p → α) :=
43
+ uniform_embedding_subtype_val
44
+
45
+ lemma uniform_embedding_set_inclusion {s t : set α} (hst : s ⊆ t) :
46
+ uniform_embedding (inclusion hst) :=
47
+ { comap_uniformity :=
48
+ by { erw [uniformity_subtype, uniformity_subtype, comap_comap_comp], congr },
49
+ inj := inclusion_injective hst }
50
+
36
51
lemma uniform_embedding.comp {g : β → γ} (hg : uniform_embedding g)
37
52
{f : α → β} (hf : uniform_embedding f) : uniform_embedding (g ∘ f) :=
38
53
{ inj := function.injective_comp hg.inj hf.inj,
@@ -145,41 +160,66 @@ lemma uniform_embedding.prod {α' : Type*} {β' : Type*} [uniform_space α'] [un
145
160
{ inj := function.injective_prod h₁.inj h₂.inj,
146
161
..h₁.to_uniform_inducing.prod h₂.to_uniform_inducing }
147
162
163
+ lemma is_complete_of_complete_image {m : α → β} {s : set α} (hm : uniform_inducing m)
164
+ (hs : is_complete (m '' s)) : is_complete s :=
165
+ begin
166
+ intros f hf hfs,
167
+ rw le_principal_iff at hfs,
168
+ obtain ⟨_, ⟨x, hx, rfl⟩, hyf⟩ : ∃ y ∈ m '' s, map m f ≤ 𝓝 y,
169
+ from hs (f.map m) (cauchy_map hm.uniform_continuous hf)
170
+ (le_principal_iff.2 (image_mem_map hfs)),
171
+ rw [map_le_iff_le_comap, ← nhds_induced, ← hm.inducing.induced] at hyf,
172
+ exact ⟨x, hx, hyf⟩
173
+ end
174
+
148
175
/-- A set is complete iff its image under a uniform embedding is complete. -/
149
176
lemma is_complete_image_iff {m : α → β} {s : set α} (hm : uniform_embedding m) :
150
177
is_complete (m '' s) ↔ is_complete s :=
151
178
begin
152
- refine ⟨λ c f hf fs, _, λ c f hf fs, _⟩,
153
- { let f' := map m f,
154
- have cf' : cauchy f' := cauchy_map hm.to_uniform_inducing.uniform_continuous hf,
155
- have f's : f' ≤ principal (m '' s),
156
- { simp only [filter.le_principal_iff, set.mem_image, filter.mem_map],
157
- exact mem_sets_of_superset (filter.le_principal_iff.1 fs) (λx hx, ⟨x, hx, rfl⟩) },
158
- rcases c f' cf' f's with ⟨y, yms, hy⟩,
159
- rcases mem_image_iff_bex.1 yms with ⟨x, xs, rfl⟩,
160
- rw [map_le_iff_le_comap, ← nhds_induced, ← (uniform_embedding.embedding hm).induced] at hy,
161
- exact ⟨x, xs, hy⟩ },
162
- { rw filter.le_principal_iff at fs,
163
- let f' := comap m f,
164
- have cf' : cauchy f',
165
- { have : comap m f ≠ ⊥,
166
- { refine comap_ne_bot (λt ht, _),
167
- have A : t ∩ m '' s ∈ f := filter.inter_mem_sets ht fs,
168
- obtain ⟨x, ⟨xt, ⟨y, ys, rfl⟩⟩⟩ : (t ∩ m '' s).nonempty,
169
- from nonempty_of_mem_sets hf.1 A,
170
- exact ⟨y, xt⟩ },
171
- apply cauchy_comap _ hf this ,
172
- simp only [hm.comap_uniformity, le_refl] },
173
- have : f' ≤ principal s := by simp [f']; exact
174
- ⟨m '' s, by simpa using fs, by simp [preimage_image_eq s hm.inj]⟩,
175
- rcases c f' cf' this with ⟨x, xs, hx⟩,
176
- existsi [m x, mem_image_of_mem m xs],
177
- rw [(uniform_embedding.embedding hm).induced, nhds_induced] at hx,
178
- calc f = map m f' : (map_comap $ filter.mem_sets_of_superset fs $ image_subset_range _ _).symm
179
- ... ≤ map m (comap m (𝓝 (m x))) : map_mono hx
180
- ... ≤ 𝓝 (m x) : map_comap_le }
179
+ refine ⟨is_complete_of_complete_image hm.to_uniform_inducing, λ c f hf fs, _⟩,
180
+ rw filter.le_principal_iff at fs,
181
+ let f' := comap m f,
182
+ have cf' : cauchy f',
183
+ { have : comap m f ≠ ⊥,
184
+ { refine comap_ne_bot (λt ht, _),
185
+ have A : t ∩ m '' s ∈ f := filter.inter_mem_sets ht fs,
186
+ obtain ⟨x, ⟨xt, ⟨y, ys, rfl⟩⟩⟩ : (t ∩ m '' s).nonempty,
187
+ from nonempty_of_mem_sets hf.1 A,
188
+ exact ⟨y, xt⟩ },
189
+ apply cauchy_comap _ hf this ,
190
+ simp only [hm.comap_uniformity, le_refl] },
191
+ have : f' ≤ principal s := by simp [f']; exact
192
+ ⟨m '' s, by simpa using fs, by simp [preimage_image_eq s hm.inj]⟩,
193
+ rcases c f' cf' this with ⟨x, xs, hx⟩,
194
+ existsi [m x, mem_image_of_mem m xs],
195
+ rw [(uniform_embedding.embedding hm).induced, nhds_induced] at hx,
196
+ calc f = map m f' : (map_comap $ filter.mem_sets_of_superset fs $ image_subset_range _ _).symm
197
+ ... ≤ map m (comap m (𝓝 (m x))) : map_mono hx
198
+ ... ≤ 𝓝 (m x) : map_comap_le
181
199
end
182
200
201
+ lemma complete_space_iff_is_complete_range {f : α → β} (hf : uniform_embedding f) :
202
+ complete_space α ↔ is_complete (range f) :=
203
+ by rw [complete_space_iff_is_complete_univ, ← is_complete_image_iff hf, image_univ]
204
+
205
+ lemma complete_space_congr {e : α ≃ β} (he : uniform_embedding e) :
206
+ complete_space α ↔ complete_space β :=
207
+ by rw [complete_space_iff_is_complete_range he, e.range_eq_univ,
208
+ complete_space_iff_is_complete_univ]
209
+
210
+ lemma complete_space_coe_iff_is_complete {s : set α} :
211
+ complete_space s ↔ is_complete s :=
212
+ (complete_space_iff_is_complete_range uniform_embedding_subtype_coe).trans $
213
+ by rw [range_coe_subtype]
214
+
215
+ lemma is_complete.complete_space_coe {s : set α} (hs : is_complete s) :
216
+ complete_space s :=
217
+ complete_space_coe_iff_is_complete.2 hs
218
+
219
+ lemma is_closed.complete_space_coe [complete_space α] {s : set α} (hs : is_closed s) :
220
+ complete_space s :=
221
+ (is_complete_of_is_closed hs).complete_space_coe
222
+
183
223
lemma complete_space_extension {m : β → α} (hm : uniform_inducing m) (dense : dense_range m)
184
224
(h : ∀f:filter β, cauchy f → ∃x:α, map m f ≤ 𝓝 x) : complete_space α :=
185
225
⟨assume (f : filter α), assume hf : cauchy f,
0 commit comments