@@ -34,10 +34,13 @@ variables [topological_space β] [topological_space γ] (f : α → β) (g : β
34
34
/-- `f : α → β` has dense range if its range (image) is a dense subset of β. -/
35
35
def dense_range := ∀ x, x ∈ closure (range f)
36
36
37
- lemma dense_range_iff_closure_eq : dense_range f ↔ closure (range f) = univ :=
37
+ variables {f}
38
+
39
+ lemma dense_range_iff_closure_range : dense_range f ↔ closure (range f) = univ :=
38
40
eq_univ_iff_forall.symm
39
41
40
- variables {f}
42
+ lemma dense_range.closure_range (h : dense_range f) : closure (range f) = univ :=
43
+ eq_univ_iff_forall.mpr h
41
44
42
45
lemma dense_range.comp (hg : dense_range g) (hf : dense_range f) (cg : continuous g) :
43
46
dense_range (g ∘ f) :=
49
52
intro c,
50
53
rw range_comp,
51
54
apply this ,
52
- rw [(dense_range_iff_closure_eq f). 1 hf , image_univ],
55
+ rw [hf.closure_range , image_univ],
53
56
exact hg c
54
57
end
55
58
@@ -64,7 +67,7 @@ def dense_range.inhabited (df : dense_range f) (b : β) : inhabited α :=
64
67
lemma dense_range.nonempty (hf : dense_range f) : nonempty α ↔ nonempty β :=
65
68
⟨nonempty.map f, λ ⟨b⟩, @nonempty_of_inhabited _ (hf.inhabited b)⟩
66
69
67
- lemma dense_range_prod {ι : Type *} {κ : Type *} {f : ι → β} {g : κ → γ}
70
+ lemma dense_range.prod {ι : Type *} {κ : Type *} {f : ι → β} {g : κ → γ}
68
71
(hf : dense_range f) (hg : dense_range g) : dense_range (λ p : ι × κ, (f p.1 , g p.2 )) :=
69
72
have closure (range $ λ p : ι×κ, (f p.1 , g p.2 )) = set.prod (closure $ range f) (closure $ range g),
70
73
by rw [←closure_prod_eq, prod_range_range_eq],
@@ -89,7 +92,7 @@ protected lemma continuous (di : dense_inducing i) : continuous i :=
89
92
di.to_inducing.continuous
90
93
91
94
lemma closure_range : closure (range i) = univ :=
92
- (dense_range_iff_closure_eq _).mp di.dense
95
+ di.dense.closure_range
93
96
94
97
lemma self_sub_closure_image_preimage_of_open {s : set β} (di : dense_inducing i) :
95
98
is_open s → s ⊆ closure (i '' (i ⁻¹' s)) :=
@@ -123,7 +126,7 @@ protected lemma prod [topological_space γ] [topological_space δ]
123
126
{e₁ : α → β} {e₂ : γ → δ} (de₁ : dense_inducing e₁) (de₂ : dense_inducing e₂) :
124
127
dense_inducing (λ(p : α × γ), (e₁ p.1 , e₂ p.2 )) :=
125
128
{ induced := (de₁.to_inducing.prod_mk de₂.to_inducing).induced,
126
- dense := dense_range_prod de₁.dense de₂.dense }
129
+ dense := de₁.dense.prod de₂.dense }
127
130
128
131
variables [topological_space δ] {f : γ → α} {g : γ → δ} {h : δ → β}
129
132
/--
@@ -263,6 +266,7 @@ protected lemma prod {e₁ : α → β} {e₂ : γ → δ} (de₁ : dense_embedd
263
266
by simp; exact assume h₁ h₂, ⟨de₁.inj h₁, de₂.inj h₂⟩,
264
267
..dense_inducing.prod de₁.to_dense_inducing de₂.to_dense_inducing }
265
268
269
+ /-- The dense embedding of a subtype inside its closure. -/
266
270
def subtype_emb {α : Type *} (p : α → Prop ) (e : α → β) (x : {x // p x}) :
267
271
{x // x ∈ closure (e '' {x | p x})} :=
268
272
⟨e x.1 , subset_closure $ mem_image_of_mem e x.2 ⟩
@@ -285,25 +289,39 @@ protected lemma subtype (p : α → Prop) : dense_embedding (subtype_emb p e) :=
285
289
end dense_embedding
286
290
287
291
lemma is_closed_property [topological_space β] {e : α → β} {p : β → Prop }
288
- (he : closure (range e) = univ ) (hp : is_closed {x | p x}) (h : ∀a, p (e a)) :
292
+ (he : dense_range e ) (hp : is_closed {x | p x}) (h : ∀a, p (e a)) :
289
293
∀b, p b :=
290
294
have univ ⊆ {b | p b},
291
- from calc univ = closure (range e) : he.symm
295
+ from calc univ = closure (range e) : he.closure_range. symm
292
296
... ⊆ closure {b | p b} : closure_mono $ range_subset_iff.mpr h
293
297
... = _ : closure_eq_of_is_closed hp,
294
298
assume b, this trivial
295
299
296
- lemma is_closed_property2 [topological_space α] [topological_space β] {e : α → β} {p : β → β → Prop }
297
- (he : dense_embedding e) (hp : is_closed {q:β×β | p q.1 q.2 }) (h : ∀a₁ a₂, p (e a₁) (e a₂)) :
300
+ lemma is_closed_property2 [topological_space β] {e : α → β} {p : β → β → Prop }
301
+ (he : dense_range e) (hp : is_closed {q:β×β | p q.1 q.2 }) (h : ∀a₁ a₂, p (e a₁) (e a₂)) :
298
302
∀b₁ b₂, p b₁ b₂ :=
299
303
have ∀q:β×β, p q.1 q.2 ,
300
- from is_closed_property (he.prod he).to_dense_inducing.closure_range hp $ assume a , h _ _,
304
+ from is_closed_property (he.prod he) hp $ λ _ , h _ _,
301
305
assume b₁ b₂, this ⟨b₁, b₂⟩
302
306
303
- lemma is_closed_property3 [topological_space α] [topological_space β] {e : α → β} {p : β → β → β → Prop }
304
- (he : dense_embedding e) (hp : is_closed {q:β×β×β | p q.1 q.2 .1 q.2 .2 }) (h : ∀a₁ a₂ a₃, p (e a₁) (e a₂) (e a₃)) :
307
+ lemma is_closed_property3 [topological_space β] {e : α → β} {p : β → β → β → Prop }
308
+ (he : dense_range e) (hp : is_closed {q:β×β×β | p q.1 q.2 .1 q.2 .2 }) (h : ∀a₁ a₂ a₃, p (e a₁) (e a₂) (e a₃)) :
305
309
∀b₁ b₂ b₃, p b₁ b₂ b₃ :=
306
310
have ∀q:β×β×β, p q.1 q.2 .1 q.2 .2 ,
307
- from is_closed_property (he.prod $ he.prod he).to_dense_inducing.closure_range hp $
308
- assume ⟨a₁, a₂, a₃⟩, h _ _ _,
311
+ from is_closed_property (he.prod $ he.prod he) hp $ λ _, h _ _ _,
309
312
assume b₁ b₂ b₃, this ⟨b₁, b₂, b₃⟩
313
+
314
+ @[elab_as_eliminator]
315
+ lemma dense_range.induction_on [topological_space β] {e : α → β} (he : dense_range e) {p : β → Prop }
316
+ (b₀ : β) (hp : is_closed {b | p b}) (ih : ∀a:α, p $ e a) : p b₀ :=
317
+ is_closed_property he hp ih b₀
318
+
319
+ @[elab_as_eliminator]
320
+ lemma dense_range.induction_on₂ [topological_space β] {e : α → β} {p : β → β → Prop }
321
+ (he : dense_range e) (hp : is_closed {q:β×β | p q.1 q.2 }) (h : ∀a₁ a₂, p (e a₁) (e a₂))
322
+ (b₁ b₂ : β) : p b₁ b₂ := is_closed_property2 he hp h _ _
323
+
324
+ @[elab_as_eliminator]
325
+ lemma dense_range.induction_on₃ [topological_space β] {e : α → β} {p : β → β → β → Prop }
326
+ (he : dense_range e) (hp : is_closed {q:β×β×β | p q.1 q.2 .1 q.2 .2 }) (h : ∀a₁ a₂ a₃, p (e a₁) (e a₂) (e a₃))
327
+ (b₁ b₂ b₃ : β) : p b₁ b₂ b₃ := is_closed_property3 he hp h _ _ _
0 commit comments