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

Commit 474004f

Browse files
PatrickMassotmergify[bot]
authored andcommitted
fix(topology/dense_embeddings): tweaks (#1684)
* fix(topology/dense_embeddings): tweaks This fixes some small issues with last summer dense embedding refactors. This is preparation for helping with Bochner integration. Some of those fixes are backported from the perfectoid project. * chore(dense_embedding): remove is_closed_property' * Update src/topology/uniform_space/completion.lean * Update src/topology/dense_embedding.lean
1 parent 1805f16 commit 474004f

File tree

3 files changed

+48
-55
lines changed

3 files changed

+48
-55
lines changed

src/topology/dense_embedding.lean

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,13 @@ variables [topological_space β] [topological_space γ] (f : α → β) (g : β
3434
/-- `f : α → β` has dense range if its range (image) is a dense subset of β. -/
3535
def dense_range := ∀ x, x ∈ closure (range f)
3636

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 :=
3840
eq_univ_iff_forall.symm
3941

40-
variables {f}
42+
lemma dense_range.closure_range (h : dense_range f) : closure (range f) = univ :=
43+
eq_univ_iff_forall.mpr h
4144

4245
lemma dense_range.comp (hg : dense_range g) (hf : dense_range f) (cg : continuous g) :
4346
dense_range (g ∘ f) :=
@@ -49,7 +52,7 @@ begin
4952
intro c,
5053
rw range_comp,
5154
apply this,
52-
rw [(dense_range_iff_closure_eq f).1 hf, image_univ],
55+
rw [hf.closure_range, image_univ],
5356
exact hg c
5457
end
5558

@@ -64,7 +67,7 @@ def dense_range.inhabited (df : dense_range f) (b : β) : inhabited α :=
6467
lemma dense_range.nonempty (hf : dense_range f) : nonempty α ↔ nonempty β :=
6568
⟨nonempty.map f, λ ⟨b⟩, @nonempty_of_inhabited _ (hf.inhabited b)⟩
6669

67-
lemma dense_range_prod {ι : Type*} {κ : Type*} {f : ι → β} {g : κ → γ}
70+
lemma dense_range.prod {ι : Type*} {κ : Type*} {f : ι → β} {g : κ → γ}
6871
(hf : dense_range f) (hg : dense_range g) : dense_range (λ p : ι × κ, (f p.1, g p.2)) :=
6972
have closure (range $ λ p : ι×κ, (f p.1, g p.2)) = set.prod (closure $ range f) (closure $ range g),
7073
by rw [←closure_prod_eq, prod_range_range_eq],
@@ -89,7 +92,7 @@ protected lemma continuous (di : dense_inducing i) : continuous i :=
8992
di.to_inducing.continuous
9093

9194
lemma closure_range : closure (range i) = univ :=
92-
(dense_range_iff_closure_eq _).mp di.dense
95+
di.dense.closure_range
9396

9497
lemma self_sub_closure_image_preimage_of_open {s : set β} (di : dense_inducing i) :
9598
is_open s → s ⊆ closure (i '' (i ⁻¹' s)) :=
@@ -123,7 +126,7 @@ protected lemma prod [topological_space γ] [topological_space δ]
123126
{e₁ : α → β} {e₂ : γ → δ} (de₁ : dense_inducing e₁) (de₂ : dense_inducing e₂) :
124127
dense_inducing (λ(p : α × γ), (e₁ p.1, e₂ p.2)) :=
125128
{ 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 }
127130

128131
variables [topological_space δ] {f : γ → α} {g : γ → δ} {h : δ → β}
129132
/--
@@ -263,6 +266,7 @@ protected lemma prod {e₁ : α → β} {e₂ : γ → δ} (de₁ : dense_embedd
263266
by simp; exact assume h₁ h₂, ⟨de₁.inj h₁, de₂.inj h₂⟩,
264267
..dense_inducing.prod de₁.to_dense_inducing de₂.to_dense_inducing }
265268

269+
/-- The dense embedding of a subtype inside its closure. -/
266270
def subtype_emb {α : Type*} (p : α → Prop) (e : α → β) (x : {x // p x}) :
267271
{x // x ∈ closure (e '' {x | p x})} :=
268272
⟨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) :=
285289
end dense_embedding
286290

287291
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)) :
289293
∀b, p b :=
290294
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
292296
... ⊆ closure {b | p b} : closure_mono $ range_subset_iff.mpr h
293297
... = _ : closure_eq_of_is_closed hp,
294298
assume b, this trivial
295299

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₂)) :
298302
∀b₁ b₂, p b₁ b₂ :=
299303
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 _ _,
301305
assume b₁ b₂, this ⟨b₁, b₂⟩
302306

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₃)) :
305309
∀b₁ b₂ b₃, p b₁ b₂ b₃ :=
306310
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 _ _ _,
309312
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 _ _ _

src/topology/uniform_space/abstract_completion.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ local notation `hatα` := pkg.space
7070
local notation ` := pkg.coe
7171

7272
lemma dense' : closure (range ι) = univ :=
73-
(dense_range_iff_closure_eq _).1 pkg.dense
73+
pkg.dense.closure_range
7474

7575
lemma dense_inducing : dense_inducing ι :=
7676
⟨pkg.uniform_inducing.inducing, pkg.dense⟩
@@ -84,7 +84,7 @@ pkg.uniform_continuous_coe.continuous
8484
@[elab_as_eliminator]
8585
lemma induction_on {p : hatα → Prop}
8686
(a : hatα) (hp : is_closed {a | p a}) (ih : ∀ a, p (ι a)) : p a :=
87-
is_closed_property pkg.dense' hp ih a
87+
is_closed_property pkg.dense hp ih a
8888

8989
variables {β : Type*} [uniform_space β]
9090

@@ -247,7 +247,7 @@ protected def prod : abstract_completion (α × β) :=
247247
complete := by apply_instance,
248248
separation := by apply_instance,
249249
uniform_inducing := uniform_inducing.prod pkg.uniform_inducing pkg'.uniform_inducing,
250-
dense := dense_range_prod pkg.dense pkg'.dense }
250+
dense := pkg.dense.prod pkg'.dense }
251251
end prod
252252

253253

src/topology/uniform_space/completion.lean

Lines changed: 12 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -361,8 +361,11 @@ lemma uniform_inducing_coe : uniform_inducing (coe : α → completion α) :=
361361

362362
variables {α}
363363

364-
lemma dense : closure (range (coe : α → completion α)) = univ :=
365-
by rw [completion.coe_eq, range_comp]; exact quotient_dense_of_dense pure_cauchy_dense
364+
lemma dense : dense_range (coe : α → completion α) :=
365+
begin
366+
rw [dense_range_iff_closure_range, completion.coe_eq, range_comp],
367+
exact quotient_dense_of_dense pure_cauchy_dense
368+
end
366369

367370
variables (α)
368371

@@ -373,7 +376,7 @@ def cpkg {α : Type*} [uniform_space α] : abstract_completion α :=
373376
complete := by apply_instance,
374377
separation := by apply_instance,
375378
uniform_inducing := completion.uniform_inducing_coe α,
376-
dense := (dense_range_iff_closure_eq _).2 completion.dense }
379+
dense := completion.dense }
377380

378381
local attribute [instance]
379382
abstract_completion.uniform_struct abstract_completion.complete abstract_completion.separation
@@ -394,26 +397,19 @@ lemma uniform_embedding_coe [separated α] : uniform_embedding (coe : α → co
394397
variable {α}
395398

396399
lemma dense_inducing_coe : dense_inducing (coe : α → completion α) :=
397-
{ dense := (dense_range_iff_closure_eq _).2 dense,
400+
{ dense := dense,
398401
..(uniform_inducing_coe α).inducing }
399402

400403
lemma dense_embedding_coe [separated α]: dense_embedding (coe : α → completion α) :=
401404
{ inj := injective_separated_pure_cauchy,
402405
..dense_inducing_coe }
403406

404-
lemma dense₂ : closure (range (λx:α × β, ((x.1 : completion α), (x.2 : completion β)))) = univ :=
405-
by rw [← set.prod_range_range_eq, closure_prod_eq, dense, dense, univ_prod_univ]
407+
lemma dense₂ : dense_range (λx:α × β, ((x.1 : completion α), (x.2 : completion β))) :=
408+
dense.prod dense
406409

407410
lemma dense₃ :
408-
closure (range (λx:α × (β × γ), ((x.1 : completion α), ((x.2.1 : completion β), (x.2.2 : completion γ))))) = univ :=
409-
let a : α → completion α := coe, bc := λp:β × γ, ((p.1 : completion β), (p.2 : completion γ)) in
410-
show closure (range (λx:α × (β × γ), (a x.1, bc x.2))) = univ,
411-
begin
412-
rw [← set.prod_range_range_eq, @closure_prod_eq _ _ _ _ (range a) (range bc), ← univ_prod_univ],
413-
congr,
414-
exact dense,
415-
exact dense₂
416-
end
411+
dense_range (λx:α × (β × γ), ((x.1 : completion α), ((x.2.1 : completion β), (x.2.2 : completion γ)))) :=
412+
dense.prod dense₂
417413

418414
@[elab_as_eliminator]
419415
lemma induction_on {p : completion α → Prop}
@@ -438,27 +434,6 @@ have ∀x : completion α × completion β × completion γ, p x.1 x.2.1 x.2.2,
438434
is_closed_property dense₃ hp $ assume ⟨a, b, c⟩, ih a b c,
439435
this (a, b, c)
440436

441-
@[elab_as_eliminator]
442-
lemma induction_on₄ {δ : Type*} [uniform_space δ]
443-
{p : completion α → completion β → completion γ → completion δ → Prop}
444-
(a : completion α) (b : completion β) (c : completion γ) (d : completion δ)
445-
(hp : is_closed {x : (completion α × completion β) × (completion γ × completion δ) | p x.1.1 x.1.2 x.2.1 x.2.2})
446-
(ih : ∀(a:α) (b:β) (c:γ) (d : δ), p ↑a ↑b ↑c ↑d) : p a b c d :=
447-
let
448-
ab := λp:α × β, ((p.1 : completion α), (p.2 : completion β)),
449-
cd := λp:γ × δ, ((p.1 : completion γ), (p.2 : completion δ))
450-
in
451-
have dense₄ : closure (range (λx:(α × β) × (γ × δ), (ab x.1, cd x.2))) = univ,
452-
begin
453-
rw [← set.prod_range_range_eq, @closure_prod_eq _ _ _ _ (range ab) (range cd), ← univ_prod_univ],
454-
congr,
455-
exact dense₂,
456-
exact dense₂
457-
end,
458-
have ∀x:(completion α × completion β) × (completion γ × completion δ), p x.1.1 x.1.2 x.2.1 x.2.2, from
459-
is_closed_property dense₄ hp (assume p:(α×β)×(γ×δ), ih p.1.1 p.1.2 p.2.1 p.2.2),
460-
this ((a, b), (c, d))
461-
462437
lemma ext [t2_space β] {f g : completion α → β} (hf : continuous f) (hg : continuous g)
463438
(h : ∀a:α, f a = g a) : f = g :=
464439
cpkg.funext hf hg h
@@ -538,7 +513,7 @@ begin
538513
refine ⟨completion.extension (separation_quotient.lift (coe : α → completion α)),
539514
completion.map quotient.mk, _, _⟩,
540515
{ assume a,
541-
refine completion.induction_on a (is_closed_eq (continuous_map.comp continuous_extension) continuous_id) _,
516+
refine induction_on a (is_closed_eq (continuous_map.comp continuous_extension) continuous_id) _,
542517
rintros ⟨a⟩,
543518
show completion.map quotient.mk (completion.extension (separation_quotient.lift coe) ↑⟦a⟧) = ↑⟦a⟧,
544519
rw [extension_coe (separation_quotient.uniform_continuous_lift _),

0 commit comments

Comments
 (0)