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

Commit 375dd53

Browse files
committed
refactor(geometry/manifold): split bump_function into 3 files (#8313)
This is the a part of #8309. Both code and comments were moved with almost no modifications: added/removed `variables`/`section`s, slightly adjusted comments to glue them together.
1 parent 5bac21a commit 375dd53

File tree

3 files changed

+328
-279
lines changed

3 files changed

+328
-279
lines changed

src/geometry/manifold/bump_function.lean

Lines changed: 0 additions & 279 deletions
Original file line numberDiff line numberDiff line change
@@ -22,40 +22,6 @@ define a coercion to function for this type, and for `f : smooth_bump_function I
2222
The actual statements involve (pre)images under `ext_chart_at I f.c` and are given as lemmas in the
2323
`smooth_bump_function` namespace.
2424
25-
We also define `smooth_bump_covering` of a set `s : set M` to be a collection of
26-
`smooth_bump_function`s such that their supports is a locally finite family of sets, and for each
27-
point `x ∈ s` there exists a bump function `f i` in the collection such that `f i =ᶠ[𝓝 x] 1`. This
28-
structure is the main building block in the construction of a smooth partition of unity (see TODO),
29-
and can be used instead of a partition of unity in some proofs.
30-
31-
We say that `f : smooth_bump_covering I s` is *subordinate* to a map `U : M → set M` if for each
32-
index `i`, we have `closure (support (f i)) ⊆ U (f i).c`. This notion is a bit more general than
33-
being subordinate to an open covering of `M`, because we make no assumption about the way `U x`
34-
depends on `x`.
35-
36-
We prove that on a smooth finitely dimensional real manifold with `σ`-compact Hausdorff topology,
37-
for any `U : M → set M` such that `∀ x ∈ s, U x ∈ 𝓝 x` there exists a `smooth_bump_covering I s`
38-
subordinate to `U`. Then we use this fact to prove a version of the Whitney embedding theorem: any
39-
compact real manifold can be embedded into `ℝ^n` for large enough `n`.
40-
41-
## TODO
42-
43-
* Prove the weak Whitney embedding theorem: any `σ`-compact smooth `m`-dimensional manifold can be
44-
embedded into `ℝ^(2m+1)`. This requires a version of Sard's theorem: for a locally Lipschitz
45-
continuous map `f : ℝ^m → ℝ^n`, `m < n`, the range has Hausdorff dimension at most `m`, hence it
46-
has measure zero.
47-
48-
* Construct a smooth partition of unity. While we can do it now, the formulas will be much nicer if
49-
we wait for `finprod` and `finsum` coming in #6355.
50-
51-
* Deduce some corollaries from existence of a smooth partition of unity.
52-
53-
- Prove that for any disjoint closed sets `s`, `t` there exists a smooth function `f` suth that
54-
`f` equals zero on `s` and `f` equals one on `t`.
55-
56-
- Build a framework for to transfer local definitions to global using partition of unity and use
57-
it to define, e.g., the integral of a differential form over a manifold.
58-
5925
## Tags
6026
6127
manifold, smooth bump function, partition of unity, Whitney theorem
@@ -357,248 +323,3 @@ begin
357323
end
358324

359325
end smooth_bump_function
360-
361-
/-!
362-
### Covering by supports of smooth bump functions
363-
364-
In this section we define `smooth_bump_covering I s` to be a collection of `smooth_bump_function`s
365-
such that their supports is a locally finite family of sets and for each `x ∈ s` some function `f i`
366-
from the collection is equal to `1` in a neighborhood of `x`. A covering of this type is useful to
367-
construct a smooth partition of unity and can be used instead of a partition of unity in some
368-
proofs.
369-
370-
We prove that on a smooth finite dimensional real manifold with `σ`-compact Hausdorff topology,
371-
for any `U : M → set M` such that `∀ x ∈ s, U x ∈ 𝓝 x` there exists a `smooth_bump_covering I s`
372-
subordinate to `U`. Then we use this fact to prove a version of the Whitney embedding theorem: any
373-
compact real manifold can be embedded into `ℝ^n` for large enough `n`.
374-
-/
375-
376-
/-- We say that a collection of `smooth_bump_function`s is a `smooth_bump_covering` of a set `s` if
377-
378-
* `(f i).c ∈ s` for all `i`;
379-
* the family `λ i, support (f i)` is locally finite;
380-
* for each point `x ∈ s` there exists `i` such that `f i =ᶠ[𝓝 x] 1`;
381-
in other words, `x` belongs to the interior of `{y | f i y = 1}`;
382-
383-
If `M` is a finite dimensional real manifold which is a sigma-compact Hausdorff topological space,
384-
then a choice of `smooth_bump_covering` is available as `smooth_bump_covering.choice_set`, see also
385-
`smooth_bump_covering.choice` for the case `s = univ` and
386-
`smooth_bump_covering.exists_is_subordinate` for a lemma providing a covering subordinate to a given
387-
`U : M → set M`.
388-
389-
This covering can be used, e.g., to construct a partition of unity and to prove the weak
390-
Whitney embedding theorem. -/
391-
structure smooth_bump_covering (s : set M) :=
392-
(ι : Type uM)
393-
(c : ι → M)
394-
(to_fun : Π i, smooth_bump_function I (c i))
395-
(c_mem' : ∀ i, c i ∈ s)
396-
(locally_finite' : locally_finite (λ i, support (to_fun i)))
397-
(eventually_eq_one' : ∀ x ∈ s, ∃ i, to_fun i =ᶠ[𝓝 x] 1)
398-
399-
namespace smooth_bump_covering
400-
401-
variables {s : set M} {U : M → set M} (fs : smooth_bump_covering I s) {I}
402-
403-
instance : has_coe_to_fun (smooth_bump_covering I s) := ⟨_, to_fun⟩
404-
405-
@[simp] lemma coe_mk (ι : Type uM) (c : ι → M) (to_fun : Π i, smooth_bump_function I (c i))
406-
(h₁ h₂ h₃) : ⇑(mk ι c to_fun h₁ h₂ h₃ : smooth_bump_covering I s) = to_fun :=
407-
rfl
408-
409-
/--
410-
We say that `f : smooth_bump_covering I s` is *subordinate* to a map `U : M → set M` if for each
411-
index `i`, we have `closure (support (f i)) ⊆ U (f i).c`. This notion is a bit more general than
412-
being subordinate to an open covering of `M`, because we make no assumption about the way `U x`
413-
depends on `x`.
414-
-/
415-
def is_subordinate {s : set M} (f : smooth_bump_covering I s) (U : M → set M) :=
416-
∀ i, closure (support $ f i) ⊆ U (f.c i)
417-
418-
variable (I)
419-
420-
/-- Let `M` be a smooth manifold with corners modelled on a finite dimensional real vector space.
421-
Suppose also that `M` is a Hausdorff `σ`-compact topological space. Let `s` be a closed set
422-
in `M` and `U : M → set M` be a collection of sets such that `U x ∈ 𝓝 x` for every `x ∈ s`.
423-
Then there exists a smooth bump covering of `s` that is subordinate to `U`. -/
424-
lemma exists_is_subordinate [t2_space M] [sigma_compact_space M] (hs : is_closed s)
425-
(hU : ∀ x ∈ s, U x ∈ 𝓝 x) :
426-
∃ f : smooth_bump_covering I s, f.is_subordinate U :=
427-
begin
428-
-- First we deduce some missing instances
429-
haveI : locally_compact_space H := I.locally_compact,
430-
haveI : locally_compact_space M := charted_space.locally_compact H,
431-
haveI : normal_space M := normal_of_paracompact_t2,
432-
-- Next we choose a covering by supports of smooth bump functions
433-
have hB := λ x hx, smooth_bump_function.nhds_basis_support I (hU x hx),
434-
rcases refinement_of_locally_compact_sigma_compact_of_nhds_basis_set hs hB
435-
with ⟨ι, c, f, hf, hsub', hfin⟩, choose hcs hfU using hf,
436-
/- Then we use the shrinking lemma to get a covering by smaller open -/
437-
rcases exists_subset_Union_closed_subset hs (λ i, (f i).open_support)
438-
(λ x hx, hfin.point_finite x) hsub' with ⟨V, hsV, hVc, hVf⟩,
439-
choose r hrR hr using λ i, (f i).exists_r_pos_lt_subset_ball (hVc i) (hVf i),
440-
refine ⟨⟨ι, c, λ i, (f i).update_r (r i) (hrR i), hcs, _, λ x hx, _⟩, λ i, _⟩,
441-
{ simpa only [smooth_bump_function.support_update_r] },
442-
{ refine (mem_Union.1 $ hsV hx).imp (λ i hi, _),
443-
exact ((f i).update_r _ _).eventually_eq_one_of_dist_lt
444-
((f i).support_subset_source $ hVf _ hi) (hr i hi).2 },
445-
{ simpa only [coe_mk, smooth_bump_function.support_update_r] using hfU i }
446-
end
447-
448-
/-- Choice of a covering of a closed set `s` by supports of smooth bump functions. -/
449-
def choice_set [t2_space M] [sigma_compact_space M] (s : set M) (hs : is_closed s) :
450-
smooth_bump_covering I s :=
451-
(exists_is_subordinate I hs (λ x hx, univ_mem_sets)).some
452-
453-
instance [t2_space M] [sigma_compact_space M] {s : set M} [is_closed s] :
454-
inhabited (smooth_bump_covering I s) :=
455-
⟨choice_set I s ‹_›⟩
456-
457-
variable (M)
458-
459-
/-- Choice of a covering of a manifold by supports of smooth bump functions. -/
460-
def choice [t2_space M] [sigma_compact_space M] :
461-
smooth_bump_covering I (univ : set M) :=
462-
choice_set I univ is_closed_univ
463-
464-
variables {I M}
465-
466-
protected lemma locally_finite : locally_finite (λ i, support (fs i)) := fs.locally_finite'
467-
468-
protected lemma point_finite (x : M) : {i | fs i x ≠ 0}.finite :=
469-
fs.locally_finite.point_finite x
470-
471-
lemma mem_chart_at_source_of_eq_one {i : fs.ι} {x : M} (h : fs i x = 1) :
472-
x ∈ (chart_at H (fs.c i)).source :=
473-
(fs i).support_subset_source $ by simp [h]
474-
475-
lemma mem_ext_chart_at_source_of_eq_one {i : fs.ι} {x : M} (h : fs i x = 1) :
476-
x ∈ (ext_chart_at I (fs.c i)).source :=
477-
by { rw ext_chart_at_source, exact fs.mem_chart_at_source_of_eq_one h }
478-
479-
/-- Index of a bump function such that `fs i =ᶠ[𝓝 x] 1`. -/
480-
def ind (x : M) (hx : x ∈ s) : fs.ι := (fs.eventually_eq_one' x hx).some
481-
482-
lemma eventually_eq_one (x : M) (hx : x ∈ s) : fs (fs.ind x hx) =ᶠ[𝓝 x] 1 :=
483-
(fs.eventually_eq_one' x hx).some_spec
484-
485-
lemma apply_ind (x : M) (hx : x ∈ s) : fs (fs.ind x hx) x = 1 :=
486-
(fs.eventually_eq_one x hx).eq_of_nhds
487-
488-
lemma mem_support_ind (x : M) (hx : x ∈ s) : x ∈ support (fs $ fs.ind x hx) :=
489-
by simp [fs.apply_ind x hx]
490-
491-
lemma mem_chart_at_ind_source (x : M) (hx : x ∈ s) :
492-
x ∈ (chart_at H (fs.c (fs.ind x hx))).source :=
493-
fs.mem_chart_at_source_of_eq_one (fs.apply_ind x hx)
494-
495-
lemma mem_ext_chart_at_ind_source (x : M) (hx : x ∈ s) :
496-
x ∈ (ext_chart_at I (fs.c (fs.ind x hx))).source :=
497-
fs.mem_ext_chart_at_source_of_eq_one (fs.apply_ind x hx)
498-
499-
section embedding
500-
501-
/-!
502-
### Whitney embedding theorem
503-
504-
In this section we prove a version of the Whitney embedding theorem: for any compact real manifold
505-
`M`, for sufficiently large `n` there exists a smooth embedding `M → ℝ^n`.
506-
-/
507-
508-
instance fintype_ι_of_compact [compact_space M] : fintype fs.ι :=
509-
fs.locally_finite.fintype_of_compact $ λ i, (fs i).nonempty_support
510-
511-
variables [t2_space M] [fintype fs.ι] (f : smooth_bump_covering I (univ : set M))
512-
[fintype f.ι]
513-
514-
/-- Smooth embedding of `M` into `(E × ℝ) ^ f.ι`. -/
515-
def embedding_pi_tangent : C^∞⟮I, M; 𝓘(ℝ, fs.ι → (E × ℝ)), fs.ι → (E × ℝ)⟯ :=
516-
{ to_fun := λ x i, (fs i x • ext_chart_at I (fs.c i) x, fs i x),
517-
times_cont_mdiff_to_fun := times_cont_mdiff_pi_space.2 $ λ i,
518-
((fs i).smooth_smul times_cont_mdiff_on_ext_chart_at).prod_mk_space ((fs i).smooth) }
519-
520-
local attribute [simp] lemma embedding_pi_tangent_coe :
521-
⇑fs.embedding_pi_tangent = λ x i, (fs i x • ext_chart_at I (fs.c i) x, fs i x) :=
522-
rfl
523-
524-
lemma embedding_pi_tangent_inj_on : inj_on fs.embedding_pi_tangent s :=
525-
begin
526-
intros x hx y hy h,
527-
simp only [embedding_pi_tangent_coe, funext_iff] at h,
528-
obtain ⟨h₁, h₂⟩ := prod.mk.inj_iff.1 (h (fs.ind x hx)),
529-
rw [fs.apply_ind x hx] at h₂,
530-
rw [← h₂, fs.apply_ind x hx, one_smul, one_smul] at h₁,
531-
have := fs.mem_ext_chart_at_source_of_eq_one h₂.symm,
532-
exact (ext_chart_at I (fs.c _)).inj_on (fs.mem_ext_chart_at_ind_source x hx) this h₁
533-
end
534-
535-
lemma embedding_pi_tangent_injective :
536-
injective f.embedding_pi_tangent :=
537-
injective_iff_inj_on_univ.2 f.embedding_pi_tangent_inj_on
538-
539-
lemma comp_embedding_pi_tangent_mfderiv (x : M) (hx : x ∈ s) :
540-
((continuous_linear_map.fst ℝ E ℝ).comp
541-
(@continuous_linear_map.proj ℝ _ fs.ι (λ _, E × ℝ) _ _
542-
(λ _, infer_instance) (fs.ind x hx))).comp
543-
(mfderiv I 𝓘(ℝ, fs.ι → (E × ℝ)) fs.embedding_pi_tangent x) =
544-
mfderiv I I (chart_at H (fs.c (fs.ind x hx))) x :=
545-
begin
546-
set L := ((continuous_linear_map.fst ℝ E ℝ).comp
547-
(@continuous_linear_map.proj ℝ _ fs.ι (λ _, E × ℝ) _ _ (λ _, infer_instance) (fs.ind x hx))),
548-
have := (L.has_mfderiv_at.comp x (fs.embedding_pi_tangent.mdifferentiable_at.has_mfderiv_at)),
549-
convert has_mfderiv_at_unique this _,
550-
refine (has_mfderiv_at_ext_chart_at I (fs.mem_chart_at_ind_source x hx)).congr_of_eventually_eq _,
551-
refine (fs.eventually_eq_one x hx).mono (λ y hy, _),
552-
simp only [embedding_pi_tangent_coe, continuous_linear_map.coe_comp', (∘),
553-
continuous_linear_map.coe_fst', continuous_linear_map.proj_apply],
554-
rw [hy, pi.one_apply, one_smul]
555-
end
556-
557-
lemma embedding_pi_tangent_ker_mfderiv (x : M) (hx : x ∈ s) :
558-
(mfderiv I 𝓘(ℝ, fs.ι → (E × ℝ)) fs.embedding_pi_tangent x).ker = ⊥ :=
559-
begin
560-
apply bot_unique,
561-
rw [← (mdifferentiable_chart I (fs.c (fs.ind x hx))).ker_mfderiv_eq_bot
562-
(fs.mem_chart_at_ind_source x hx), ← comp_embedding_pi_tangent_mfderiv],
563-
exact linear_map.ker_le_ker_comp _ _
564-
end
565-
566-
lemma embedding_pi_tangent_injective_mfderiv (x : M) (hx : x ∈ s) :
567-
injective (mfderiv I 𝓘(ℝ, fs.ι → (E × ℝ)) fs.embedding_pi_tangent x) :=
568-
linear_map.ker_eq_bot.1 (fs.embedding_pi_tangent_ker_mfderiv x hx)
569-
570-
end embedding
571-
572-
/-- Baby version of the Whitney weak embedding theorem: if `M` admits a finite covering by
573-
supports of bump functions, then for some `n` it can be immersed into the `n`-dimensional
574-
Euclidean space. -/
575-
lemma exists_immersion_finrank [t2_space M] (f : smooth_bump_covering I (univ : set M))
576-
[fintype f.ι] :
577-
∃ (n : ℕ) (e : M → euclidean_space ℝ (fin n)), smooth I (𝓡 n) e ∧
578-
injective e ∧ ∀ x : M, injective (mfderiv I (𝓡 n) e x) :=
579-
begin
580-
set F := euclidean_space ℝ (fin $ finrank ℝ (f.ι → (E × ℝ))),
581-
letI : finite_dimensional ℝ (E × ℝ) := by apply_instance,
582-
set eEF : (f.ι → (E × ℝ)) ≃L[ℝ] F :=
583-
continuous_linear_equiv.of_finrank_eq finrank_euclidean_space_fin.symm,
584-
refine ⟨_, eEF ∘ f.embedding_pi_tangent,
585-
eEF.to_diffeomorph.smooth.comp f.embedding_pi_tangent.smooth,
586-
eEF.injective.comp f.embedding_pi_tangent_injective, λ x, _⟩,
587-
rw [mfderiv_comp _ eEF.differentiable_at.mdifferentiable_at
588-
f.embedding_pi_tangent.mdifferentiable_at, eEF.mfderiv_eq],
589-
exact eEF.injective.comp (f.embedding_pi_tangent_injective_mfderiv _ trivial)
590-
end
591-
592-
end smooth_bump_covering
593-
594-
/-- Baby version of the Whitney weak embedding theorem: if `M` admits a finite covering by
595-
supports of bump functions, then for some `n` it can be embedded into the `n`-dimensional
596-
Euclidean space. -/
597-
lemma exists_embedding_finrank_of_compact [t2_space M] [compact_space M] :
598-
∃ (n : ℕ) (e : M → euclidean_space ℝ (fin n)), smooth I (𝓡 n) e ∧
599-
closed_embedding e ∧ ∀ x : M, injective (mfderiv I (𝓡 n) e x) :=
600-
begin
601-
rcases (smooth_bump_covering.choice I M).exists_immersion_finrank
602-
with ⟨n, e, hsmooth, hinj, hinj_mfderiv⟩,
603-
exact ⟨n, e, hsmooth, hsmooth.continuous.closed_embedding hinj, hinj_mfderiv⟩
604-
end

0 commit comments

Comments
 (0)