geometry.manifold.bump_function
⟷
Mathlib.Geometry.Manifold.BumpFunction
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,8 +3,8 @@ Copyright (c) 2021 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
-import Analysis.Calculus.BumpFunctionFindim
-import Geometry.Manifold.ContMdiff
+import Analysis.Calculus.BumpFunction.FiniteDimension
+import Geometry.Manifold.ContMDiff.Defs
#align_import geometry.manifold.bump_function from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -246,7 +246,7 @@ theorem nonempty_support : (support f).Nonempty :=
#print SmoothBumpFunction.isCompact_symm_image_closedBall /-
theorem isCompact_symm_image_closedBall :
IsCompact ((extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I)) :=
- ((isCompact_closedBall _ _).inter_right I.closed_range).image_of_continuousOn <|
+ ((isCompact_closedBall _ _).inter_right I.isClosed_range).image_of_continuousOn <|
(continuousOn_extChartAt_symm _ _).mono f.closedBall_subset
#align smooth_bump_function.is_compact_symm_image_closed_ball SmoothBumpFunction.isCompact_symm_image_closedBall
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -163,7 +163,7 @@ theorem image_eq_inter_preimage_of_subset_support {s : Set M} (hs : s ⊆ suppor
extChartAt I c '' s =
closedBall (extChartAt I c c) f.rOut ∩ range I ∩ (extChartAt I c).symm ⁻¹' s :=
by
- rw [support_eq_inter_preimage, subset_inter_iff, ← extChartAt_source I, ← image_subset_iff] at hs
+ rw [support_eq_inter_preimage, subset_inter_iff, ← extChartAt_source I, ← image_subset_iff] at hs
cases' hs with hse hsf
apply subset.antisymm
· refine' subset_inter (subset_inter (subset.trans hsf ball_subset_closed_ball) _) _
@@ -294,7 +294,7 @@ theorem exists_r_pos_lt_subset_ball {s : Set M} (hsc : IsClosed s) (hs : s ⊆ s
by
set e := extChartAt I c
have : IsClosed (e '' s) := f.is_closed_image_of_is_closed hsc hs
- rw [support_eq_inter_preimage, subset_inter_iff, ← image_subset_iff] at hs
+ rw [support_eq_inter_preimage, subset_inter_iff, ← image_subset_iff] at hs
rcases exists_pos_lt_subset_ball f.R_pos this hs.2 with ⟨r, hrR, hr⟩
exact ⟨r, hrR, subset_inter hs.1 (image_subset_iff.1 hr)⟩
#align smooth_bump_function.exists_r_pos_lt_subset_ball SmoothBumpFunction.exists_r_pos_lt_subset_ball
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -415,7 +415,7 @@ variable [SmoothManifoldWithCorners I M] {I}
/-- A smooth bump function is infinitely smooth. -/
protected theorem smooth : Smooth I 𝓘(ℝ) f :=
by
- refine' contMDiff_of_support fun x hx => _
+ refine' contMDiff_of_tsupport fun x hx => _
have : x ∈ (chart_at H c).source := f.tsupport_subset_chart_at_source hx
refine'
ContMDiffAt.congr_of_eventuallyEq _
@@ -442,7 +442,7 @@ on the source of the chart at `c`, then `f • g` is smooth on the whole manifol
theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
(hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source) : Smooth I 𝓘(ℝ, G) fun x => f x • g x :=
by
- apply contMDiff_of_support fun x hx => _
+ apply contMDiff_of_tsupport fun x hx => _
have : x ∈ (chart_at H c).source
calc
x ∈ tsupport fun x => f x • g x := hx
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -278,7 +278,7 @@ theorem isClosed_image_of_isClosed {s : Set M} (hsc : IsClosed s) (hs : s ⊆ su
by
rw [f.image_eq_inter_preimage_of_subset_support hs]
refine'
- ContinuousOn.preimage_closed_of_closed
+ ContinuousOn.preimage_isClosed_of_isClosed
((continuousOn_extChartAt_symm _ _).mono f.closed_ball_subset) _ hsc
exact IsClosed.inter is_closed_ball I.closed_range
#align smooth_bump_function.is_closed_image_of_is_closed SmoothBumpFunction.isClosed_image_of_isClosed
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2021 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
-import Mathbin.Analysis.Calculus.BumpFunctionFindim
-import Mathbin.Geometry.Manifold.ContMdiff
+import Analysis.Calculus.BumpFunctionFindim
+import Geometry.Manifold.ContMdiff
#align_import geometry.manifold.bump_function from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
@@ -369,7 +369,7 @@ theorem tsupport_subset_chartAt_source : tsupport f ⊆ (chartAt H c).source :=
#print SmoothBumpFunction.hasCompactSupport /-
protected theorem hasCompactSupport : HasCompactSupport f :=
- isCompact_of_isClosed_subset f.isCompact_symm_image_closedBall isClosed_closure
+ IsCompact.of_isClosed_subset f.isCompact_symm_image_closedBall isClosed_closure
f.tsupport_subset_symm_image_closedBall
#align smooth_bump_function.has_compact_support SmoothBumpFunction.hasCompactSupport
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/001ffdc42920050657fd45bd2b8bfbec8eaaeb29
@@ -261,7 +261,7 @@ theorem nhdsWithin_range_basis :
by
refine'
((nhdsWithin_hasBasis nhds_basis_closed_ball _).restrict_subset
- (extChartAt_target_mem_nhdsWithin _ _)).to_has_basis'
+ (extChartAt_target_mem_nhdsWithin _ _)).to_hasBasis'
_ _
· rintro R ⟨hR0, hsub⟩
exact ⟨⟨⟨R / 2, R, half_pos hR0, half_lt_self hR0⟩, hsub⟩, trivial, subset.rfl⟩
@@ -404,7 +404,7 @@ neighborhood of `c` and each neighborhood of `c` includes `support f` for some `
smooth_bump_function I c` such that `tsupport f ⊆ s`. -/
theorem nhds_basis_support {s : Set M} (hs : s ∈ 𝓝 c) :
(𝓝 c).HasBasis (fun f : SmoothBumpFunction I c => tsupport f ⊆ s) fun f => support f :=
- ((nhds_basis_tsupport I c).restrict_subset hs).to_has_basis'
+ ((nhds_basis_tsupport I c).restrict_subset hs).to_hasBasis'
(fun f hf => ⟨f, hf.2, subset_closure⟩) fun f hf => f.support_mem_nhds
#align smooth_bump_function.nhds_basis_support SmoothBumpFunction.nhds_basis_support
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2021 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module geometry.manifold.bump_function
-! leanprover-community/mathlib commit 30faa0c3618ce1472bf6305ae0e3fa56affa3f95
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Calculus.BumpFunctionFindim
import Mathbin.Geometry.Manifold.ContMdiff
+#align_import geometry.manifold.bump_function from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
+
/-!
# Smooth bump functions on a smooth manifold
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
! This file was ported from Lean 3 source module geometry.manifold.bump_function
-! leanprover-community/mathlib commit b018406ad2f2a73223a3a9e198ccae61e6f05318
+! leanprover-community/mathlib commit 30faa0c3618ce1472bf6305ae0e3fa56affa3f95
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Geometry.Manifold.ContMdiff
/-!
# Smooth bump functions on a smooth manifold
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we define `smooth_bump_function I c` to be a bundled smooth "bump" function centered at
`c`. It is a structure that consists of two real numbers `0 < r < R` with small enough `R`. We
define a coercion to function for this type, and for `f : smooth_bump_function I c`, the function
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -51,6 +51,7 @@ In this section we define a structure for a bundled smooth bump function and pro
-/
+#print SmoothBumpFunction /-
/-- Given a smooth manifold modelled on a finite dimensional space `E`,
`f : smooth_bump_function I M` is a smooth function on `M` such that in the extended chart `e` at
`f.c`:
@@ -66,6 +67,7 @@ namespace. -/
structure SmoothBumpFunction (c : M) extends ContDiffBump (extChartAt I c c) where
closedBall_subset : closedBall (extChartAt I c c) R ∩ range I ⊆ (extChartAt I c).target
#align smooth_bump_function SmoothBumpFunction
+-/
variable {M}
@@ -73,52 +75,71 @@ namespace SmoothBumpFunction
variable {c : M} (f : SmoothBumpFunction I c) {x : M} {I}
+#print SmoothBumpFunction.toFun /-
/-- The function defined by `f : smooth_bump_function c`. Use automatic coercion to function
instead. -/
def toFun : M → ℝ :=
indicator (chartAt H c).source (f.toContDiffBump ∘ extChartAt I c)
#align smooth_bump_function.to_fun SmoothBumpFunction.toFun
+-/
instance : CoeFun (SmoothBumpFunction I c) fun _ => M → ℝ :=
⟨toFun⟩
+#print SmoothBumpFunction.coe_def /-
theorem coe_def : ⇑f = indicator (chartAt H c).source (f.toContDiffBump ∘ extChartAt I c) :=
rfl
#align smooth_bump_function.coe_def SmoothBumpFunction.coe_def
+-/
+#print SmoothBumpFunction.rOut_pos /-
theorem rOut_pos : 0 < f.rOut :=
f.toContDiffBump.rOut_pos
#align smooth_bump_function.R_pos SmoothBumpFunction.rOut_pos
+-/
+#print SmoothBumpFunction.ball_subset /-
theorem ball_subset : ball (extChartAt I c c) f.rOut ∩ range I ⊆ (extChartAt I c).target :=
Subset.trans (inter_subset_inter_left _ ball_subset_closedBall) f.closedBall_subset
#align smooth_bump_function.ball_subset SmoothBumpFunction.ball_subset
+-/
+#print SmoothBumpFunction.eqOn_source /-
theorem eqOn_source : EqOn f (f.toContDiffBump ∘ extChartAt I c) (chartAt H c).source :=
eqOn_indicator
#align smooth_bump_function.eq_on_source SmoothBumpFunction.eqOn_source
+-/
+#print SmoothBumpFunction.eventuallyEq_of_mem_source /-
theorem eventuallyEq_of_mem_source (hx : x ∈ (chartAt H c).source) :
f =ᶠ[𝓝 x] f.toContDiffBump ∘ extChartAt I c :=
f.EqOnSource.eventuallyEq_of_mem <| IsOpen.mem_nhds (chartAt H c).open_source hx
#align smooth_bump_function.eventually_eq_of_mem_source SmoothBumpFunction.eventuallyEq_of_mem_source
+-/
+#print SmoothBumpFunction.one_of_dist_le /-
theorem one_of_dist_le (hs : x ∈ (chartAt H c).source)
(hd : dist (extChartAt I c x) (extChartAt I c c) ≤ f.R) : f x = 1 := by
simp only [f.eq_on_source hs, (· ∘ ·), f.to_cont_diff_bump.one_of_mem_closed_ball hd]
#align smooth_bump_function.one_of_dist_le SmoothBumpFunction.one_of_dist_le
+-/
+#print SmoothBumpFunction.support_eq_inter_preimage /-
theorem support_eq_inter_preimage :
support f = (chartAt H c).source ∩ extChartAt I c ⁻¹' ball (extChartAt I c c) f.rOut := by
rw [coe_def, support_indicator, (· ∘ ·), support_comp_eq_preimage, ← extChartAt_source I, ←
(extChartAt I c).symm_image_target_inter_eq', ← (extChartAt I c).symm_image_target_inter_eq',
f.to_cont_diff_bump.support_eq]
#align smooth_bump_function.support_eq_inter_preimage SmoothBumpFunction.support_eq_inter_preimage
+-/
+#print SmoothBumpFunction.isOpen_support /-
theorem isOpen_support : IsOpen (support f) := by rw [support_eq_inter_preimage];
exact isOpen_extChartAt_preimage I c is_open_ball
#align smooth_bump_function.is_open_support SmoothBumpFunction.isOpen_support
+-/
+#print SmoothBumpFunction.support_eq_symm_image /-
theorem support_eq_symm_image :
support f = (extChartAt I c).symm '' (ball (extChartAt I c c) f.rOut ∩ range I) :=
by
@@ -129,11 +150,15 @@ theorem support_eq_symm_image :
and_congr_right_iff.2 fun hy =>
⟨fun h => extChartAt_target_subset_range _ _ h, fun h => f.ball_subset ⟨hy, h⟩⟩
#align smooth_bump_function.support_eq_symm_image SmoothBumpFunction.support_eq_symm_image
+-/
+#print SmoothBumpFunction.support_subset_source /-
theorem support_subset_source : support f ⊆ (chartAt H c).source := by
rw [f.support_eq_inter_preimage, ← extChartAt_source I]; exact inter_subset_left _ _
#align smooth_bump_function.support_subset_source SmoothBumpFunction.support_subset_source
+-/
+#print SmoothBumpFunction.image_eq_inter_preimage_of_subset_support /-
theorem image_eq_inter_preimage_of_subset_support {s : Set M} (hs : s ⊆ support f) :
extChartAt I c '' s =
closedBall (extChartAt I c c) f.rOut ∩ range I ∩ (extChartAt I c).symm ⁻¹' s :=
@@ -148,22 +173,30 @@ theorem image_eq_inter_preimage_of_subset_support {s : Set M} (hs : s ⊆ suppor
· refine' subset.trans (inter_subset_inter_left _ f.closed_ball_subset) _
rw [(extChartAt I c).image_eq_target_inter_inv_preimage hse]
#align smooth_bump_function.image_eq_inter_preimage_of_subset_support SmoothBumpFunction.image_eq_inter_preimage_of_subset_support
+-/
+#print SmoothBumpFunction.mem_Icc /-
theorem mem_Icc : f x ∈ Icc (0 : ℝ) 1 :=
by
have : f x = 0 ∨ f x = _ := indicator_eq_zero_or_self _ _ _
cases this <;> rw [this]
exacts [left_mem_Icc.2 zero_le_one, ⟨f.to_cont_diff_bump.nonneg, f.to_cont_diff_bump.le_one⟩]
#align smooth_bump_function.mem_Icc SmoothBumpFunction.mem_Icc
+-/
+#print SmoothBumpFunction.nonneg /-
theorem nonneg : 0 ≤ f x :=
f.mem_Icc.1
#align smooth_bump_function.nonneg SmoothBumpFunction.nonneg
+-/
+#print SmoothBumpFunction.le_one /-
theorem le_one : f x ≤ 1 :=
f.mem_Icc.2
#align smooth_bump_function.le_one SmoothBumpFunction.le_one
+-/
+#print SmoothBumpFunction.eventuallyEq_one_of_dist_lt /-
theorem eventuallyEq_one_of_dist_lt (hs : x ∈ (chartAt H c).source)
(hd : dist (extChartAt I c x) (extChartAt I c c) < f.R) : f =ᶠ[𝓝 x] 1 :=
by
@@ -171,38 +204,54 @@ theorem eventuallyEq_one_of_dist_lt (hs : x ∈ (chartAt H c).source)
rintro z ⟨hzs, hzd : _ < _⟩
exact f.one_of_dist_le hzs hzd.le
#align smooth_bump_function.eventually_eq_one_of_dist_lt SmoothBumpFunction.eventuallyEq_one_of_dist_lt
+-/
+#print SmoothBumpFunction.eventuallyEq_one /-
theorem eventuallyEq_one : f =ᶠ[𝓝 c] 1 :=
f.eventuallyEq_one_of_dist_lt (mem_chart_source _ _) <| by rw [dist_self]; exact f.r_pos
#align smooth_bump_function.eventually_eq_one SmoothBumpFunction.eventuallyEq_one
+-/
+#print SmoothBumpFunction.eq_one /-
@[simp]
theorem eq_one : f c = 1 :=
f.eventuallyEq_one.eq_of_nhds
#align smooth_bump_function.eq_one SmoothBumpFunction.eq_one
+-/
+#print SmoothBumpFunction.support_mem_nhds /-
theorem support_mem_nhds : support f ∈ 𝓝 c :=
f.eventuallyEq_one.mono fun x hx => by rw [hx]; exact one_ne_zero
#align smooth_bump_function.support_mem_nhds SmoothBumpFunction.support_mem_nhds
+-/
+#print SmoothBumpFunction.tsupport_mem_nhds /-
theorem tsupport_mem_nhds : tsupport f ∈ 𝓝 c :=
mem_of_superset f.support_mem_nhds subset_closure
#align smooth_bump_function.tsupport_mem_nhds SmoothBumpFunction.tsupport_mem_nhds
+-/
+#print SmoothBumpFunction.c_mem_support /-
theorem c_mem_support : c ∈ support f :=
mem_of_mem_nhds f.support_mem_nhds
#align smooth_bump_function.c_mem_support SmoothBumpFunction.c_mem_support
+-/
+#print SmoothBumpFunction.nonempty_support /-
theorem nonempty_support : (support f).Nonempty :=
⟨c, f.c_mem_support⟩
#align smooth_bump_function.nonempty_support SmoothBumpFunction.nonempty_support
+-/
+#print SmoothBumpFunction.isCompact_symm_image_closedBall /-
theorem isCompact_symm_image_closedBall :
IsCompact ((extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I)) :=
((isCompact_closedBall _ _).inter_right I.closed_range).image_of_continuousOn <|
(continuousOn_extChartAt_symm _ _).mono f.closedBall_subset
#align smooth_bump_function.is_compact_symm_image_closed_ball SmoothBumpFunction.isCompact_symm_image_closedBall
+-/
+#print SmoothBumpFunction.nhdsWithin_range_basis /-
/-- Given a smooth bump function `f : smooth_bump_function I c`, the closed ball of radius `f.R` is
known to include the support of `f`. These closed balls (in the model normed space `E`) intersected
with `set.range I` form a basis of `𝓝[range I] (ext_chart_at I c c)`. -/
@@ -221,7 +270,9 @@ theorem nhdsWithin_range_basis :
inter_mem (mem_nhdsWithin_of_mem_nhds <| closed_ball_mem_nhds _ f.rOut_pos)
self_mem_nhdsWithin
#align smooth_bump_function.nhds_within_range_basis SmoothBumpFunction.nhdsWithin_range_basis
+-/
+#print SmoothBumpFunction.isClosed_image_of_isClosed /-
theorem isClosed_image_of_isClosed {s : Set M} (hsc : IsClosed s) (hs : s ⊆ support f) :
IsClosed (extChartAt I c '' s) :=
by
@@ -231,7 +282,9 @@ theorem isClosed_image_of_isClosed {s : Set M} (hsc : IsClosed s) (hs : s ⊆ su
((continuousOn_extChartAt_symm _ _).mono f.closed_ball_subset) _ hsc
exact IsClosed.inter is_closed_ball I.closed_range
#align smooth_bump_function.is_closed_image_of_is_closed SmoothBumpFunction.isClosed_image_of_isClosed
+-/
+#print SmoothBumpFunction.exists_r_pos_lt_subset_ball /-
/-- If `f` is a smooth bump function and `s` closed subset of the support of `f` (i.e., of the open
ball of radius `f.R`), then there exists `0 < r < f.R` such that `s` is a subset of the open ball of
radius `r`. Formally, `s ⊆ e.source ∩ e ⁻¹' (ball (e c) r)`, where `e = ext_chart_at I c`. -/
@@ -245,37 +298,49 @@ theorem exists_r_pos_lt_subset_ball {s : Set M} (hsc : IsClosed s) (hs : s ⊆ s
rcases exists_pos_lt_subset_ball f.R_pos this hs.2 with ⟨r, hrR, hr⟩
exact ⟨r, hrR, subset_inter hs.1 (image_subset_iff.1 hr)⟩
#align smooth_bump_function.exists_r_pos_lt_subset_ball SmoothBumpFunction.exists_r_pos_lt_subset_ball
+-/
+#print SmoothBumpFunction.updateRIn /-
/-- Replace `r` with another value in the interval `(0, f.R)`. -/
-def updateR (r : ℝ) (hr : r ∈ Ioo 0 f.rOut) : SmoothBumpFunction I c :=
+def updateRIn (r : ℝ) (hr : r ∈ Ioo 0 f.rOut) : SmoothBumpFunction I c :=
⟨⟨r, f.rOut, hr.1, hr.2⟩, f.closedBall_subset⟩
-#align smooth_bump_function.update_r SmoothBumpFunction.updateR
+#align smooth_bump_function.update_r SmoothBumpFunction.updateRIn
+-/
+#print SmoothBumpFunction.updateRIn_rOut /-
@[simp]
-theorem updateR_rOut {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) : (f.updateR r hr).rOut = f.rOut :=
+theorem updateRIn_rOut {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) : (f.updateRIn r hr).rOut = f.rOut :=
rfl
-#align smooth_bump_function.update_r_R SmoothBumpFunction.updateR_rOut
+#align smooth_bump_function.update_r_R SmoothBumpFunction.updateRIn_rOut
+-/
+#print SmoothBumpFunction.updateRIn_rIn /-
@[simp]
-theorem updateR_rIn {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) : (f.updateR r hr).R = r :=
+theorem updateRIn_rIn {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) : (f.updateRIn r hr).R = r :=
rfl
-#align smooth_bump_function.update_r_r SmoothBumpFunction.updateR_rIn
+#align smooth_bump_function.update_r_r SmoothBumpFunction.updateRIn_rIn
+-/
+#print SmoothBumpFunction.support_updateRIn /-
@[simp]
-theorem support_updateR {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) : support (f.updateR r hr) = support f := by
- simp only [support_eq_inter_preimage, update_r_R]
-#align smooth_bump_function.support_update_r SmoothBumpFunction.support_updateR
+theorem support_updateRIn {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) :
+ support (f.updateRIn r hr) = support f := by simp only [support_eq_inter_preimage, update_r_R]
+#align smooth_bump_function.support_update_r SmoothBumpFunction.support_updateRIn
+-/
instance : Inhabited (SmoothBumpFunction I c) :=
Classical.inhabited_of_nonempty nhdsWithin_range_basis.Nonempty
variable [T2Space M]
+#print SmoothBumpFunction.isClosed_symm_image_closedBall /-
theorem isClosed_symm_image_closedBall :
IsClosed ((extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I)) :=
f.isCompact_symm_image_closedBall.IsClosed
#align smooth_bump_function.is_closed_symm_image_closed_ball SmoothBumpFunction.isClosed_symm_image_closedBall
+-/
+#print SmoothBumpFunction.tsupport_subset_symm_image_closedBall /-
theorem tsupport_subset_symm_image_closedBall :
tsupport f ⊆ (extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I) :=
by
@@ -284,7 +349,9 @@ theorem tsupport_subset_symm_image_closedBall :
closure_minimal (image_subset _ <| inter_subset_inter_left _ ball_subset_closed_ball)
f.is_closed_symm_image_closed_ball
#align smooth_bump_function.tsupport_subset_symm_image_closed_ball SmoothBumpFunction.tsupport_subset_symm_image_closedBall
+-/
+#print SmoothBumpFunction.tsupport_subset_extChartAt_source /-
theorem tsupport_subset_extChartAt_source : tsupport f ⊆ (extChartAt I c).source :=
calc
tsupport f ⊆ (extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I) :=
@@ -292,18 +359,24 @@ theorem tsupport_subset_extChartAt_source : tsupport f ⊆ (extChartAt I c).sour
_ ⊆ (extChartAt I c).symm '' (extChartAt I c).target := (image_subset _ f.closedBall_subset)
_ = (extChartAt I c).source := (extChartAt I c).symm_image_target_eq_source
#align smooth_bump_function.tsupport_subset_ext_chart_at_source SmoothBumpFunction.tsupport_subset_extChartAt_source
+-/
+#print SmoothBumpFunction.tsupport_subset_chartAt_source /-
theorem tsupport_subset_chartAt_source : tsupport f ⊆ (chartAt H c).source := by
simpa only [extChartAt_source] using f.tsupport_subset_ext_chart_at_source
#align smooth_bump_function.tsupport_subset_chart_at_source SmoothBumpFunction.tsupport_subset_chartAt_source
+-/
+#print SmoothBumpFunction.hasCompactSupport /-
protected theorem hasCompactSupport : HasCompactSupport f :=
isCompact_of_isClosed_subset f.isCompact_symm_image_closedBall isClosed_closure
f.tsupport_subset_symm_image_closedBall
#align smooth_bump_function.has_compact_support SmoothBumpFunction.hasCompactSupport
+-/
variable (I c)
+#print SmoothBumpFunction.nhds_basis_tsupport /-
/-- The closures of supports of smooth bump functions centered at `c` form a basis of `𝓝 c`.
In other words, each of these closures is a neighborhood of `c` and each neighborhood of `c`
includes `tsupport f` for some `f : smooth_bump_function I c`. -/
@@ -320,9 +393,11 @@ theorem nhds_basis_tsupport :
this.to_has_basis' (fun f hf => ⟨f, trivial, f.tsupport_subset_symm_image_closedBall⟩)
fun f _ => f.tsupport_mem_nhds
#align smooth_bump_function.nhds_basis_tsupport SmoothBumpFunction.nhds_basis_tsupport
+-/
variable {c}
+#print SmoothBumpFunction.nhds_basis_support /-
/-- Given `s ∈ 𝓝 c`, the supports of smooth bump functions `f : smooth_bump_function I c` such that
`tsupport f ⊆ s` form a basis of `𝓝 c`. In other words, each of these supports is a
neighborhood of `c` and each neighborhood of `c` includes `support f` for some `f :
@@ -332,9 +407,11 @@ theorem nhds_basis_support {s : Set M} (hs : s ∈ 𝓝 c) :
((nhds_basis_tsupport I c).restrict_subset hs).to_has_basis'
(fun f hf => ⟨f, hf.2, subset_closure⟩) fun f hf => f.support_mem_nhds
#align smooth_bump_function.nhds_basis_support SmoothBumpFunction.nhds_basis_support
+-/
variable [SmoothManifoldWithCorners I M] {I}
+#print SmoothBumpFunction.smooth /-
/-- A smooth bump function is infinitely smooth. -/
protected theorem smooth : Smooth I 𝓘(ℝ) f :=
by
@@ -345,15 +422,21 @@ protected theorem smooth : Smooth I 𝓘(ℝ) f :=
(f.eq_on_source.eventually_eq_of_mem <| IsOpen.mem_nhds (chart_at _ _).open_source this)
exact f.to_cont_diff_bump.cont_diff_at.cont_mdiff_at.comp _ (contMDiffAt_extChartAt' this)
#align smooth_bump_function.smooth SmoothBumpFunction.smooth
+-/
+#print SmoothBumpFunction.smoothAt /-
protected theorem smoothAt {x} : SmoothAt I 𝓘(ℝ) f x :=
f.smooth.SmoothAt
#align smooth_bump_function.smooth_at SmoothBumpFunction.smoothAt
+-/
+#print SmoothBumpFunction.continuous /-
protected theorem continuous : Continuous f :=
f.smooth.Continuous
#align smooth_bump_function.continuous SmoothBumpFunction.continuous
+-/
+#print SmoothBumpFunction.smooth_smul /-
/-- If `f : smooth_bump_function I c` is a smooth bump function and `g : M → G` is a function smooth
on the source of the chart at `c`, then `f • g` is smooth on the whole manifold. -/
theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
@@ -368,6 +451,7 @@ theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
exact
f.smooth_at.smul ((hg _ this).ContMDiffAt <| IsOpen.mem_nhds (chart_at _ _).open_source this)
#align smooth_bump_function.smooth_smul SmoothBumpFunction.smooth_smul
+-/
end SmoothBumpFunction
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -338,12 +338,12 @@ variable [SmoothManifoldWithCorners I M] {I}
/-- A smooth bump function is infinitely smooth. -/
protected theorem smooth : Smooth I 𝓘(ℝ) f :=
by
- refine' contMdiff_of_support fun x hx => _
+ refine' contMDiff_of_support fun x hx => _
have : x ∈ (chart_at H c).source := f.tsupport_subset_chart_at_source hx
refine'
- ContMdiffAt.congr_of_eventuallyEq _
+ ContMDiffAt.congr_of_eventuallyEq _
(f.eq_on_source.eventually_eq_of_mem <| IsOpen.mem_nhds (chart_at _ _).open_source this)
- exact f.to_cont_diff_bump.cont_diff_at.cont_mdiff_at.comp _ (contMdiffAt_ext_chart_at' this)
+ exact f.to_cont_diff_bump.cont_diff_at.cont_mdiff_at.comp _ (contMDiffAt_extChartAt' this)
#align smooth_bump_function.smooth SmoothBumpFunction.smooth
protected theorem smoothAt {x} : SmoothAt I 𝓘(ℝ) f x :=
@@ -359,14 +359,14 @@ on the source of the chart at `c`, then `f • g` is smooth on the whole manifol
theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
(hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source) : Smooth I 𝓘(ℝ, G) fun x => f x • g x :=
by
- apply contMdiff_of_support fun x hx => _
+ apply contMDiff_of_support fun x hx => _
have : x ∈ (chart_at H c).source
calc
x ∈ tsupport fun x => f x • g x := hx
_ ⊆ tsupport f := (tsupport_smul_subset_left _ _)
_ ⊆ (chart_at _ c).source := f.tsupport_subset_chart_at_source
exact
- f.smooth_at.smul ((hg _ this).ContMdiffAt <| IsOpen.mem_nhds (chart_at _ _).open_source this)
+ f.smooth_at.smul ((hg _ this).ContMDiffAt <| IsOpen.mem_nhds (chart_at _ _).open_source this)
#align smooth_bump_function.smooth_smul SmoothBumpFunction.smooth_smul
end SmoothBumpFunction
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -291,7 +291,6 @@ theorem tsupport_subset_extChartAt_source : tsupport f ⊆ (extChartAt I c).sour
f.tsupport_subset_symm_image_closedBall
_ ⊆ (extChartAt I c).symm '' (extChartAt I c).target := (image_subset _ f.closedBall_subset)
_ = (extChartAt I c).source := (extChartAt I c).symm_image_target_eq_source
-
#align smooth_bump_function.tsupport_subset_ext_chart_at_source SmoothBumpFunction.tsupport_subset_extChartAt_source
theorem tsupport_subset_chartAt_source : tsupport f ⊆ (chartAt H c).source := by
@@ -366,7 +365,6 @@ theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
x ∈ tsupport fun x => f x • g x := hx
_ ⊆ tsupport f := (tsupport_smul_subset_left _ _)
_ ⊆ (chart_at _ c).source := f.tsupport_subset_chart_at_source
-
exact
f.smooth_at.smul ((hg _ this).ContMdiffAt <| IsOpen.mem_nhds (chart_at _ _).open_source this)
#align smooth_bump_function.smooth_smul SmoothBumpFunction.smooth_smul
mathlib commit https://github.com/leanprover-community/mathlib/commit/58a272265b5e05f258161260dd2c5d247213cbd3
@@ -86,11 +86,11 @@ theorem coe_def : ⇑f = indicator (chartAt H c).source (f.toContDiffBump ∘ ex
rfl
#align smooth_bump_function.coe_def SmoothBumpFunction.coe_def
-theorem r_pos : 0 < f.r :=
- f.toContDiffBump.r_pos
-#align smooth_bump_function.R_pos SmoothBumpFunction.r_pos
+theorem rOut_pos : 0 < f.rOut :=
+ f.toContDiffBump.rOut_pos
+#align smooth_bump_function.R_pos SmoothBumpFunction.rOut_pos
-theorem ball_subset : ball (extChartAt I c c) f.r ∩ range I ⊆ (extChartAt I c).target :=
+theorem ball_subset : ball (extChartAt I c c) f.rOut ∩ range I ⊆ (extChartAt I c).target :=
Subset.trans (inter_subset_inter_left _ ball_subset_closedBall) f.closedBall_subset
#align smooth_bump_function.ball_subset SmoothBumpFunction.ball_subset
@@ -109,7 +109,7 @@ theorem one_of_dist_le (hs : x ∈ (chartAt H c).source)
#align smooth_bump_function.one_of_dist_le SmoothBumpFunction.one_of_dist_le
theorem support_eq_inter_preimage :
- support f = (chartAt H c).source ∩ extChartAt I c ⁻¹' ball (extChartAt I c c) f.r := by
+ support f = (chartAt H c).source ∩ extChartAt I c ⁻¹' ball (extChartAt I c c) f.rOut := by
rw [coe_def, support_indicator, (· ∘ ·), support_comp_eq_preimage, ← extChartAt_source I, ←
(extChartAt I c).symm_image_target_inter_eq', ← (extChartAt I c).symm_image_target_inter_eq',
f.to_cont_diff_bump.support_eq]
@@ -120,7 +120,7 @@ theorem isOpen_support : IsOpen (support f) := by rw [support_eq_inter_preimage]
#align smooth_bump_function.is_open_support SmoothBumpFunction.isOpen_support
theorem support_eq_symm_image :
- support f = (extChartAt I c).symm '' (ball (extChartAt I c c) f.r ∩ range I) :=
+ support f = (extChartAt I c).symm '' (ball (extChartAt I c c) f.rOut ∩ range I) :=
by
rw [f.support_eq_inter_preimage, ← extChartAt_source I, ←
(extChartAt I c).symm_image_target_inter_eq', inter_comm]
@@ -136,7 +136,7 @@ theorem support_subset_source : support f ⊆ (chartAt H c).source := by
theorem image_eq_inter_preimage_of_subset_support {s : Set M} (hs : s ⊆ support f) :
extChartAt I c '' s =
- closedBall (extChartAt I c c) f.r ∩ range I ∩ (extChartAt I c).symm ⁻¹' s :=
+ closedBall (extChartAt I c c) f.rOut ∩ range I ∩ (extChartAt I c).symm ⁻¹' s :=
by
rw [support_eq_inter_preimage, subset_inter_iff, ← extChartAt_source I, ← image_subset_iff] at hs
cases' hs with hse hsf
@@ -198,7 +198,7 @@ theorem nonempty_support : (support f).Nonempty :=
#align smooth_bump_function.nonempty_support SmoothBumpFunction.nonempty_support
theorem isCompact_symm_image_closedBall :
- IsCompact ((extChartAt I c).symm '' (closedBall (extChartAt I c c) f.r ∩ range I)) :=
+ IsCompact ((extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I)) :=
((isCompact_closedBall _ _).inter_right I.closed_range).image_of_continuousOn <|
(continuousOn_extChartAt_symm _ _).mono f.closedBall_subset
#align smooth_bump_function.is_compact_symm_image_closed_ball SmoothBumpFunction.isCompact_symm_image_closedBall
@@ -208,7 +208,7 @@ known to include the support of `f`. These closed balls (in the model normed spa
with `set.range I` form a basis of `𝓝[range I] (ext_chart_at I c c)`. -/
theorem nhdsWithin_range_basis :
(𝓝[range I] extChartAt I c c).HasBasis (fun f : SmoothBumpFunction I c => True) fun f =>
- closedBall (extChartAt I c c) f.r ∩ range I :=
+ closedBall (extChartAt I c c) f.rOut ∩ range I :=
by
refine'
((nhdsWithin_hasBasis nhds_basis_closed_ball _).restrict_subset
@@ -218,7 +218,8 @@ theorem nhdsWithin_range_basis :
exact ⟨⟨⟨R / 2, R, half_pos hR0, half_lt_self hR0⟩, hsub⟩, trivial, subset.rfl⟩
·
exact fun f _ =>
- inter_mem (mem_nhdsWithin_of_mem_nhds <| closed_ball_mem_nhds _ f.r_pos) self_mem_nhdsWithin
+ inter_mem (mem_nhdsWithin_of_mem_nhds <| closed_ball_mem_nhds _ f.rOut_pos)
+ self_mem_nhdsWithin
#align smooth_bump_function.nhds_within_range_basis SmoothBumpFunction.nhdsWithin_range_basis
theorem isClosed_image_of_isClosed {s : Set M} (hsc : IsClosed s) (hs : s ⊆ support f) :
@@ -235,7 +236,7 @@ theorem isClosed_image_of_isClosed {s : Set M} (hsc : IsClosed s) (hs : s ⊆ su
ball of radius `f.R`), then there exists `0 < r < f.R` such that `s` is a subset of the open ball of
radius `r`. Formally, `s ⊆ e.source ∩ e ⁻¹' (ball (e c) r)`, where `e = ext_chart_at I c`. -/
theorem exists_r_pos_lt_subset_ball {s : Set M} (hsc : IsClosed s) (hs : s ⊆ support f) :
- ∃ (r : _) (hr : r ∈ Ioo 0 f.r),
+ ∃ (r : _) (hr : r ∈ Ioo 0 f.rOut),
s ⊆ (chartAt H c).source ∩ extChartAt I c ⁻¹' ball (extChartAt I c c) r :=
by
set e := extChartAt I c
@@ -246,24 +247,22 @@ theorem exists_r_pos_lt_subset_ball {s : Set M} (hsc : IsClosed s) (hs : s ⊆ s
#align smooth_bump_function.exists_r_pos_lt_subset_ball SmoothBumpFunction.exists_r_pos_lt_subset_ball
/-- Replace `r` with another value in the interval `(0, f.R)`. -/
-def updateR (r : ℝ) (hr : r ∈ Ioo 0 f.r) : SmoothBumpFunction I c :=
- ⟨⟨r, f.r, hr.1, hr.2⟩, f.closedBall_subset⟩
+def updateR (r : ℝ) (hr : r ∈ Ioo 0 f.rOut) : SmoothBumpFunction I c :=
+ ⟨⟨r, f.rOut, hr.1, hr.2⟩, f.closedBall_subset⟩
#align smooth_bump_function.update_r SmoothBumpFunction.updateR
@[simp]
-theorem updateR_r {r : ℝ} (hr : r ∈ Ioo 0 f.r) : (f.updateR r hr).r = f.r :=
+theorem updateR_rOut {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) : (f.updateR r hr).rOut = f.rOut :=
rfl
-#align smooth_bump_function.update_r_R SmoothBumpFunction.updateR_r
+#align smooth_bump_function.update_r_R SmoothBumpFunction.updateR_rOut
-/- warning: smooth_bump_function.update_r_r clashes with smooth_bump_function.update_r_R -> SmoothBumpFunction.updateR_r
-Case conversion may be inaccurate. Consider using '#align smooth_bump_function.update_r_r SmoothBumpFunction.updateR_rₓ'. -/
@[simp]
-theorem updateR_r {r : ℝ} (hr : r ∈ Ioo 0 f.r) : (f.updateR r hr).R = r :=
+theorem updateR_rIn {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) : (f.updateR r hr).R = r :=
rfl
-#align smooth_bump_function.update_r_r SmoothBumpFunction.updateR_r
+#align smooth_bump_function.update_r_r SmoothBumpFunction.updateR_rIn
@[simp]
-theorem support_updateR {r : ℝ} (hr : r ∈ Ioo 0 f.r) : support (f.updateR r hr) = support f := by
+theorem support_updateR {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) : support (f.updateR r hr) = support f := by
simp only [support_eq_inter_preimage, update_r_R]
#align smooth_bump_function.support_update_r SmoothBumpFunction.support_updateR
@@ -273,12 +272,12 @@ instance : Inhabited (SmoothBumpFunction I c) :=
variable [T2Space M]
theorem isClosed_symm_image_closedBall :
- IsClosed ((extChartAt I c).symm '' (closedBall (extChartAt I c c) f.r ∩ range I)) :=
+ IsClosed ((extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I)) :=
f.isCompact_symm_image_closedBall.IsClosed
#align smooth_bump_function.is_closed_symm_image_closed_ball SmoothBumpFunction.isClosed_symm_image_closedBall
theorem tsupport_subset_symm_image_closedBall :
- tsupport f ⊆ (extChartAt I c).symm '' (closedBall (extChartAt I c c) f.r ∩ range I) :=
+ tsupport f ⊆ (extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I) :=
by
rw [tsupport, support_eq_symm_image]
exact
@@ -288,7 +287,7 @@ theorem tsupport_subset_symm_image_closedBall :
theorem tsupport_subset_extChartAt_source : tsupport f ⊆ (extChartAt I c).source :=
calc
- tsupport f ⊆ (extChartAt I c).symm '' (closedBall (extChartAt I c c) f.r ∩ range I) :=
+ tsupport f ⊆ (extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I) :=
f.tsupport_subset_symm_image_closedBall
_ ⊆ (extChartAt I c).symm '' (extChartAt I c).target := (image_subset _ f.closedBall_subset)
_ = (extChartAt I c).source := (extChartAt I c).symm_image_target_eq_source
@@ -314,7 +313,7 @@ theorem nhds_basis_tsupport :
by
have :
(𝓝 c).HasBasis (fun f : SmoothBumpFunction I c => True) fun f =>
- (extChartAt I c).symm '' (closed_ball (extChartAt I c c) f.r ∩ range I) :=
+ (extChartAt I c).symm '' (closed_ball (extChartAt I c c) f.rOut ∩ range I) :=
by
rw [← map_extChartAt_symm_nhdsWithin_range I c]
exact nhds_within_range_basis.map _
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -138,7 +138,7 @@ theorem image_eq_inter_preimage_of_subset_support {s : Set M} (hs : s ⊆ suppor
extChartAt I c '' s =
closedBall (extChartAt I c c) f.r ∩ range I ∩ (extChartAt I c).symm ⁻¹' s :=
by
- rw [support_eq_inter_preimage, subset_inter_iff, ← extChartAt_source I, ← image_subset_iff] at hs
+ rw [support_eq_inter_preimage, subset_inter_iff, ← extChartAt_source I, ← image_subset_iff] at hs
cases' hs with hse hsf
apply subset.antisymm
· refine' subset_inter (subset_inter (subset.trans hsf ball_subset_closed_ball) _) _
@@ -153,7 +153,7 @@ theorem mem_Icc : f x ∈ Icc (0 : ℝ) 1 :=
by
have : f x = 0 ∨ f x = _ := indicator_eq_zero_or_self _ _ _
cases this <;> rw [this]
- exacts[left_mem_Icc.2 zero_le_one, ⟨f.to_cont_diff_bump.nonneg, f.to_cont_diff_bump.le_one⟩]
+ exacts [left_mem_Icc.2 zero_le_one, ⟨f.to_cont_diff_bump.nonneg, f.to_cont_diff_bump.le_one⟩]
#align smooth_bump_function.mem_Icc SmoothBumpFunction.mem_Icc
theorem nonneg : 0 ≤ f x :=
@@ -235,12 +235,12 @@ theorem isClosed_image_of_isClosed {s : Set M} (hsc : IsClosed s) (hs : s ⊆ su
ball of radius `f.R`), then there exists `0 < r < f.R` such that `s` is a subset of the open ball of
radius `r`. Formally, `s ⊆ e.source ∩ e ⁻¹' (ball (e c) r)`, where `e = ext_chart_at I c`. -/
theorem exists_r_pos_lt_subset_ball {s : Set M} (hsc : IsClosed s) (hs : s ⊆ support f) :
- ∃ (r : _)(hr : r ∈ Ioo 0 f.r),
+ ∃ (r : _) (hr : r ∈ Ioo 0 f.r),
s ⊆ (chartAt H c).source ∩ extChartAt I c ⁻¹' ball (extChartAt I c c) r :=
by
set e := extChartAt I c
have : IsClosed (e '' s) := f.is_closed_image_of_is_closed hsc hs
- rw [support_eq_inter_preimage, subset_inter_iff, ← image_subset_iff] at hs
+ rw [support_eq_inter_preimage, subset_inter_iff, ← image_subset_iff] at hs
rcases exists_pos_lt_subset_ball f.R_pos this hs.2 with ⟨r, hrR, hr⟩
exact ⟨r, hrR, subset_inter hs.1 (image_subset_iff.1 hr)⟩
#align smooth_bump_function.exists_r_pos_lt_subset_ball SmoothBumpFunction.exists_r_pos_lt_subset_ball
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -40,7 +40,7 @@ variable {E : Type uE} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensi
open Function Filter FiniteDimensional Set Metric
-open Topology Manifold Classical Filter BigOperators
+open scoped Topology Manifold Classical Filter BigOperators
noncomputable section
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -256,8 +256,6 @@ theorem updateR_r {r : ℝ} (hr : r ∈ Ioo 0 f.r) : (f.updateR r hr).r = f.r :=
#align smooth_bump_function.update_r_R SmoothBumpFunction.updateR_r
/- warning: smooth_bump_function.update_r_r clashes with smooth_bump_function.update_r_R -> SmoothBumpFunction.updateR_r
-warning: smooth_bump_function.update_r_r -> SmoothBumpFunction.updateR_r is a dubious translation:
-<too large>
Case conversion may be inaccurate. Consider using '#align smooth_bump_function.update_r_r SmoothBumpFunction.updateR_rₓ'. -/
@[simp]
theorem updateR_r {r : ℝ} (hr : r ∈ Ioo 0 f.r) : (f.updateR r hr).R = r :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -115,9 +115,7 @@ theorem support_eq_inter_preimage :
f.to_cont_diff_bump.support_eq]
#align smooth_bump_function.support_eq_inter_preimage SmoothBumpFunction.support_eq_inter_preimage
-theorem isOpen_support : IsOpen (support f) :=
- by
- rw [support_eq_inter_preimage]
+theorem isOpen_support : IsOpen (support f) := by rw [support_eq_inter_preimage];
exact isOpen_extChartAt_preimage I c is_open_ball
#align smooth_bump_function.is_open_support SmoothBumpFunction.isOpen_support
@@ -132,10 +130,8 @@ theorem support_eq_symm_image :
⟨fun h => extChartAt_target_subset_range _ _ h, fun h => f.ball_subset ⟨hy, h⟩⟩
#align smooth_bump_function.support_eq_symm_image SmoothBumpFunction.support_eq_symm_image
-theorem support_subset_source : support f ⊆ (chartAt H c).source :=
- by
- rw [f.support_eq_inter_preimage, ← extChartAt_source I]
- exact inter_subset_left _ _
+theorem support_subset_source : support f ⊆ (chartAt H c).source := by
+ rw [f.support_eq_inter_preimage, ← extChartAt_source I]; exact inter_subset_left _ _
#align smooth_bump_function.support_subset_source SmoothBumpFunction.support_subset_source
theorem image_eq_inter_preimage_of_subset_support {s : Set M} (hs : s ⊆ support f) :
@@ -146,8 +142,7 @@ theorem image_eq_inter_preimage_of_subset_support {s : Set M} (hs : s ⊆ suppor
cases' hs with hse hsf
apply subset.antisymm
· refine' subset_inter (subset_inter (subset.trans hsf ball_subset_closed_ball) _) _
- · rintro _ ⟨x, -, rfl⟩
- exact mem_range_self _
+ · rintro _ ⟨x, -, rfl⟩; exact mem_range_self _
· rw [(extChartAt I c).image_eq_target_inter_inv_preimage hse]
exact inter_subset_right _ _
· refine' subset.trans (inter_subset_inter_left _ f.closed_ball_subset) _
@@ -178,10 +173,7 @@ theorem eventuallyEq_one_of_dist_lt (hs : x ∈ (chartAt H c).source)
#align smooth_bump_function.eventually_eq_one_of_dist_lt SmoothBumpFunction.eventuallyEq_one_of_dist_lt
theorem eventuallyEq_one : f =ᶠ[𝓝 c] 1 :=
- f.eventuallyEq_one_of_dist_lt (mem_chart_source _ _) <|
- by
- rw [dist_self]
- exact f.r_pos
+ f.eventuallyEq_one_of_dist_lt (mem_chart_source _ _) <| by rw [dist_self]; exact f.r_pos
#align smooth_bump_function.eventually_eq_one SmoothBumpFunction.eventuallyEq_one
@[simp]
@@ -190,9 +182,7 @@ theorem eq_one : f c = 1 :=
#align smooth_bump_function.eq_one SmoothBumpFunction.eq_one
theorem support_mem_nhds : support f ∈ 𝓝 c :=
- f.eventuallyEq_one.mono fun x hx => by
- rw [hx]
- exact one_ne_zero
+ f.eventuallyEq_one.mono fun x hx => by rw [hx]; exact one_ne_zero
#align smooth_bump_function.support_mem_nhds SmoothBumpFunction.support_mem_nhds
theorem tsupport_mem_nhds : tsupport f ∈ 𝓝 c :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -267,10 +267,7 @@ theorem updateR_r {r : ℝ} (hr : r ∈ Ioo 0 f.r) : (f.updateR r hr).r = f.r :=
/- warning: smooth_bump_function.update_r_r clashes with smooth_bump_function.update_r_R -> SmoothBumpFunction.updateR_r
warning: smooth_bump_function.update_r_r -> SmoothBumpFunction.updateR_r is a dubious translation:
-lean 3 declaration is
- forall {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : NormedSpace.{0, u1} Real E Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)] [_inst_3 : FiniteDimensional.{0, u1} Real E Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1) (NormedSpace.toModule.{0, u1} Real E Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1) _inst_2)] {H : Type.{u2}} [_inst_4 : TopologicalSpace.{u2} H] {I : ModelWithCorners.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) E _inst_1 _inst_2 H _inst_4} {M : Type.{u3}} [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : ChartedSpace.{u2, u3} H _inst_4 M _inst_5] [_inst_7 : SmoothManifoldWithCorners.{0, u1, u2, u3} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) E _inst_1 _inst_2 H _inst_4 I M _inst_5 _inst_6] {c : M} (f : SmoothBumpFunction.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c) {r : Real} (hr : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) r (Set.Ioo.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f)))), Eq.{1} Real (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c (SmoothBumpFunction.updateR.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f r hr))) r
-but is expected to have type
- forall {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : NormedSpace.{0, u1} Real E Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)] [_inst_3 : FiniteDimensional.{0, u1} Real E Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1) (NormedSpace.toModule.{0, u1} Real E Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1) _inst_2)] {H : Type.{u2}} [_inst_4 : TopologicalSpace.{u2} H] {I : ModelWithCorners.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) E _inst_1 _inst_2 H _inst_4} {M : Type.{u3}} [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : ChartedSpace.{u2, u3} H _inst_4 M _inst_5] [_inst_7 : SmoothManifoldWithCorners.{0, u1, u2, u3} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) E _inst_1 _inst_2 H _inst_4 I M _inst_5 _inst_6] {c : M} (f : SmoothBumpFunction.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c) {r : Real} (hr : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) r (Set.Ioo.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f)))), Eq.{1} Real (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c (SmoothBumpFunction.updateR.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f r hr))) (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f))
+<too large>
Case conversion may be inaccurate. Consider using '#align smooth_bump_function.update_r_r SmoothBumpFunction.updateR_rₓ'. -/
@[simp]
theorem updateR_r {r : ℝ} (hr : r ∈ Ioo 0 f.r) : (f.updateR r hr).R = r :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/2af0836443b4cfb5feda0df0051acdb398304931
@@ -266,13 +266,16 @@ theorem updateR_r {r : ℝ} (hr : r ∈ Ioo 0 f.r) : (f.updateR r hr).r = f.r :=
#align smooth_bump_function.update_r_R SmoothBumpFunction.updateR_r
/- warning: smooth_bump_function.update_r_r clashes with smooth_bump_function.update_r_R -> SmoothBumpFunction.updateR_r
+warning: smooth_bump_function.update_r_r -> SmoothBumpFunction.updateR_r is a dubious translation:
+lean 3 declaration is
+ forall {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : NormedSpace.{0, u1} Real E Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)] [_inst_3 : FiniteDimensional.{0, u1} Real E Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1) (NormedSpace.toModule.{0, u1} Real E Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1) _inst_2)] {H : Type.{u2}} [_inst_4 : TopologicalSpace.{u2} H] {I : ModelWithCorners.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) E _inst_1 _inst_2 H _inst_4} {M : Type.{u3}} [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : ChartedSpace.{u2, u3} H _inst_4 M _inst_5] [_inst_7 : SmoothManifoldWithCorners.{0, u1, u2, u3} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) E _inst_1 _inst_2 H _inst_4 I M _inst_5 _inst_6] {c : M} (f : SmoothBumpFunction.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c) {r : Real} (hr : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) r (Set.Ioo.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f)))), Eq.{1} Real (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c (SmoothBumpFunction.updateR.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f r hr))) r
+but is expected to have type
+ forall {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : NormedSpace.{0, u1} Real E Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)] [_inst_3 : FiniteDimensional.{0, u1} Real E Real.divisionRing (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1) (NormedSpace.toModule.{0, u1} Real E Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1) _inst_2)] {H : Type.{u2}} [_inst_4 : TopologicalSpace.{u2} H] {I : ModelWithCorners.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) E _inst_1 _inst_2 H _inst_4} {M : Type.{u3}} [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : ChartedSpace.{u2, u3} H _inst_4 M _inst_5] [_inst_7 : SmoothManifoldWithCorners.{0, u1, u2, u3} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) E _inst_1 _inst_2 H _inst_4 I M _inst_5 _inst_6] {c : M} (f : SmoothBumpFunction.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c) {r : Real} (hr : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) r (Set.Ioo.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f)))), Eq.{1} Real (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c (SmoothBumpFunction.updateR.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f r hr))) (ContDiffBump.r.{u1} E (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalEquiv.{u3, u1} M E) (fun (_x : LocalEquiv.{u3, u1} M E) => M -> E) (LocalEquiv.hasCoeToFun.{u3, u1} M E) (extChartAt.{0, u1, u3, u2} Real E M H (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) _inst_1 _inst_2 _inst_4 _inst_5 I _inst_6 c) c) (SmoothBumpFunction.toContDiffBump.{u1, u2, u3} E _inst_1 _inst_2 _inst_3 H _inst_4 I M _inst_5 _inst_6 _inst_7 c f))
Case conversion may be inaccurate. Consider using '#align smooth_bump_function.update_r_r SmoothBumpFunction.updateR_rₓ'. -/
-#print SmoothBumpFunction.updateR_r /-
@[simp]
theorem updateR_r {r : ℝ} (hr : r ∈ Ioo 0 f.r) : (f.updateR r hr).R = r :=
rfl
#align smooth_bump_function.update_r_r SmoothBumpFunction.updateR_r
--/
@[simp]
theorem support_updateR {r : ℝ} (hr : r ∈ Ioo 0 f.r) : support (f.updateR r hr) = support f := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -302,7 +302,7 @@ theorem tsupport_subset_extChartAt_source : tsupport f ⊆ (extChartAt I c).sour
calc
tsupport f ⊆ (extChartAt I c).symm '' (closedBall (extChartAt I c c) f.r ∩ range I) :=
f.tsupport_subset_symm_image_closedBall
- _ ⊆ (extChartAt I c).symm '' (extChartAt I c).target := image_subset _ f.closedBall_subset
+ _ ⊆ (extChartAt I c).symm '' (extChartAt I c).target := (image_subset _ f.closedBall_subset)
_ = (extChartAt I c).source := (extChartAt I c).symm_image_target_eq_source
#align smooth_bump_function.tsupport_subset_ext_chart_at_source SmoothBumpFunction.tsupport_subset_extChartAt_source
@@ -377,7 +377,7 @@ theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
have : x ∈ (chart_at H c).source
calc
x ∈ tsupport fun x => f x • g x := hx
- _ ⊆ tsupport f := tsupport_smul_subset_left _ _
+ _ ⊆ tsupport f := (tsupport_smul_subset_left _ _)
_ ⊆ (chart_at _ c).source := f.tsupport_subset_chart_at_source
exact
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -269,7 +269,7 @@ theorem tsupport_subset_extChartAt_source : tsupport f ⊆ (extChartAt I c).sour
calc
tsupport f ⊆ (extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I) :=
f.tsupport_subset_symm_image_closedBall
- _ ⊆ (extChartAt I c).symm '' (extChartAt I c).target := (image_subset _ f.closedBall_subset)
+ _ ⊆ (extChartAt I c).symm '' (extChartAt I c).target := image_subset _ f.closedBall_subset
_ = (extChartAt I c).source := (extChartAt I c).symm_image_target_eq_source
#align smooth_bump_function.tsupport_subset_ext_chart_at_source SmoothBumpFunction.tsupport_subset_extChartAt_source
@@ -338,7 +338,7 @@ theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
-- Porting note: was a more readable `calc`
-- calc
-- x ∈ tsupport fun x => f x • g x := hx
- -- _ ⊆ tsupport f := (tsupport_smul_subset_left _ _)
+ -- _ ⊆ tsupport f := tsupport_smul_subset_left _ _
-- _ ⊆ (chart_at _ c).source := f.tsupport_subset_chartAt_source
f.tsupport_subset_chartAt_source <| tsupport_smul_subset_left _ _ hx
exact f.smoothAt.smul ((hg _ this).contMDiffAt <| (chartAt _ _).open_source.mem_nhds this)
All these lemmas refer to the range of some function being open/range (i.e. isOpen
or isClosed
).
@@ -194,7 +194,7 @@ theorem nonempty_support : (support f).Nonempty :=
theorem isCompact_symm_image_closedBall :
IsCompact ((extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I)) :=
- ((isCompact_closedBall _ _).inter_right I.closed_range).image_of_continuousOn <|
+ ((isCompact_closedBall _ _).inter_right I.isClosed_range).image_of_continuousOn <|
(continuousOn_extChartAt_symm _ _).mono f.closedBall_subset
#align smooth_bump_function.is_compact_symm_image_closed_ball SmoothBumpFunction.isCompact_symm_image_closedBall
@@ -217,7 +217,7 @@ theorem isClosed_image_of_isClosed {s : Set M} (hsc : IsClosed s) (hs : s ⊆ su
rw [f.image_eq_inter_preimage_of_subset_support hs]
refine' ContinuousOn.preimage_isClosed_of_isClosed
((continuousOn_extChartAt_symm _ _).mono f.closedBall_subset) _ hsc
- exact IsClosed.inter isClosed_ball I.closed_range
+ exact IsClosed.inter isClosed_ball I.isClosed_range
#align smooth_bump_function.is_closed_image_of_is_closed SmoothBumpFunction.isClosed_image_of_isClosed
/-- If `f` is a smooth bump function and `s` closed subset of the support of `f` (i.e., of the open
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -248,7 +248,7 @@ theorem support_updateRIn {r : ℝ} (hr : r ∈ Ioo 0 f.rOut) :
simp only [support_eq_inter_preimage, updateRIn_rOut]
#align smooth_bump_function.support_update_r SmoothBumpFunction.support_updateRIn
--- porting note: was an `Inhabited` instance
+-- Porting note: was an `Inhabited` instance
instance : Nonempty (SmoothBumpFunction I c) := nhdsWithin_range_basis.nonempty
variable [T2Space M]
@@ -335,7 +335,7 @@ theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
(hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source) : Smooth I 𝓘(ℝ, G) fun x => f x • g x := by
refine contMDiff_of_tsupport fun x hx => ?_
have : x ∈ (chartAt H c).source :=
- -- porting note: was a more readable `calc`
+ -- Porting note: was a more readable `calc`
-- calc
-- x ∈ tsupport fun x => f x • g x := hx
-- _ ⊆ tsupport f := (tsupport_smul_subset_left _ _)
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -334,13 +334,13 @@ on the source of the chart at `c`, then `f • g` is smooth on the whole manifol
theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
(hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source) : Smooth I 𝓘(ℝ, G) fun x => f x • g x := by
refine contMDiff_of_tsupport fun x hx => ?_
- have : x ∈ (chartAt H c).source
+ have : x ∈ (chartAt H c).source :=
-- porting note: was a more readable `calc`
-- calc
-- x ∈ tsupport fun x => f x • g x := hx
-- _ ⊆ tsupport f := (tsupport_smul_subset_left _ _)
-- _ ⊆ (chart_at _ c).source := f.tsupport_subset_chartAt_source
- · exact f.tsupport_subset_chartAt_source <| tsupport_smul_subset_left _ _ hx
+ f.tsupport_subset_chartAt_source <| tsupport_smul_subset_left _ _ hx
exact f.smoothAt.smul ((hg _ this).contMDiffAt <| (chartAt _ _).open_source.mem_nhds this)
#align smooth_bump_function.smooth_smul SmoothBumpFunction.smooth_smul
contMDiff_of_support
, contMDiffWithinAt_of_not_mem
and contMDiffAt_of_not_mem
and use to_additiveextend_one
with the multiplicative versionopen
seventuallyEq_zero_nhds
in favor of not_mem_tsupport_iff_eventuallyEq
Addresses the post-merge review comments in #9669.
Co-authored-by: ADedecker <anatolededecker@gmail.com> Co-authored-by: grunweg <grunweg@posteo.de>
@@ -314,7 +314,7 @@ variable [SmoothManifoldWithCorners I M] {I}
/-- A smooth bump function is infinitely smooth. -/
protected theorem smooth : Smooth I 𝓘(ℝ) f := by
- refine' contMDiff_of_support fun x hx => _
+ refine contMDiff_of_tsupport fun x hx => ?_
have : x ∈ (chartAt H c).source := f.tsupport_subset_chartAt_source hx
refine ContMDiffAt.congr_of_eventuallyEq ?_ <| f.eqOn_source.eventuallyEq_of_mem <|
(chartAt H c).open_source.mem_nhds this
@@ -333,7 +333,7 @@ protected theorem continuous : Continuous f :=
on the source of the chart at `c`, then `f • g` is smooth on the whole manifold. -/
theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
(hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).source) : Smooth I 𝓘(ℝ, G) fun x => f x • g x := by
- refine contMDiff_of_support fun x hx => ?_
+ refine contMDiff_of_tsupport fun x hx => ?_
have : x ∈ (chartAt H c).source
-- porting note: was a more readable `calc`
-- calc
While at it, switch from refine' to refine (easy cases only) in the lines I'm touching anyway.
@@ -101,7 +101,7 @@ theorem eqOn_source : EqOn f (f.toContDiffBump ∘ extChartAt I c) (chartAt H c)
theorem eventuallyEq_of_mem_source (hx : x ∈ (chartAt H c).source) :
f =ᶠ[𝓝 x] f.toContDiffBump ∘ extChartAt I c :=
- f.eqOn_source.eventuallyEq_of_mem <| IsOpen.mem_nhds (chartAt H c).open_source hx
+ f.eqOn_source.eventuallyEq_of_mem <| (chartAt H c).open_source.mem_nhds hx
#align smooth_bump_function.eventually_eq_of_mem_source SmoothBumpFunction.eventuallyEq_of_mem_source
theorem one_of_dist_le (hs : x ∈ (chartAt H c).source)
@@ -316,8 +316,8 @@ variable [SmoothManifoldWithCorners I M] {I}
protected theorem smooth : Smooth I 𝓘(ℝ) f := by
refine' contMDiff_of_support fun x hx => _
have : x ∈ (chartAt H c).source := f.tsupport_subset_chartAt_source hx
- refine' ContMDiffAt.congr_of_eventuallyEq _ <| f.eqOn_source.eventuallyEq_of_mem <|
- IsOpen.mem_nhds (chartAt H c).open_source this
+ refine ContMDiffAt.congr_of_eventuallyEq ?_ <| f.eqOn_source.eventuallyEq_of_mem <|
+ (chartAt H c).open_source.mem_nhds this
exact f.contDiffAt.contMDiffAt.comp _ (contMDiffAt_extChartAt' this)
#align smooth_bump_function.smooth SmoothBumpFunction.smooth
@@ -341,7 +341,7 @@ theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
-- _ ⊆ tsupport f := (tsupport_smul_subset_left _ _)
-- _ ⊆ (chart_at _ c).source := f.tsupport_subset_chartAt_source
· exact f.tsupport_subset_chartAt_source <| tsupport_smul_subset_left _ _ hx
- exact f.smoothAt.smul ((hg _ this).contMDiffAt <| IsOpen.mem_nhds (chartAt _ _).open_source this)
+ exact f.smoothAt.smul ((hg _ this).contMDiffAt <| (chartAt _ _).open_source.mem_nhds this)
#align smooth_bump_function.smooth_smul SmoothBumpFunction.smooth_smul
end SmoothBumpFunction
At about 2200 lines, this is currently the longest file in the Geometry/Manifolds.
(It also moves the slowly compiling proof of ContMDiffWithinAt.cle_arrowCongr
out of a common recompilation path.)
@@ -4,7 +4,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
import Mathlib.Analysis.Calculus.BumpFunction.FiniteDimension
-import Mathlib.Geometry.Manifold.ContMDiff
+import Mathlib.Geometry.Manifold.ContMDiff.Atlas
+import Mathlib.Geometry.Manifold.ContMDiff.NormedSpace
#align_import geometry.manifold.bump_function from "leanprover-community/mathlib"@"b018406ad2f2a73223a3a9e198ccae61e6f05318"
This PR renames the field Clopens.clopen' -> Clopens.isClopen', and the lemmas
as well as: ClopenUpperSet.clopen -> ClopenUpperSet.isClopen connectedComponent_eq_iInter_clopen -> connectedComponent_eq_iInter_isClopen connectedComponent_subset_iInter_clopen -> connectedComponent_subset_iInter_isClopen continuous_boolIndicator_iff_clopen -> continuous_boolIndicator_iff_isClopen continuousOn_boolIndicator_iff_clopen -> continuousOn_boolIndicator_iff_isClopen DiscreteQuotient.ofClopen -> DiscreteQuotient.ofIsClopen disjoint_or_subset_of_clopen -> disjoint_or_subset_of_isClopen exists_clopen_{lower,upper}of_not_le -> exists_isClopen{lower,upper}_of_not_le exists_clopen_of_cofiltered -> exists_isClopen_of_cofiltered exists_clopen_of_totally_separated -> exists_isClopen_of_totally_separated exists_clopen_upper_or_lower_of_ne -> exists_isClopen_upper_or_lower_of_ne IsPreconnected.subset_clopen -> IsPreconnected.subset_isClopen isTotallyDisconnected_of_clopen_set -> isTotallyDisconnected_of_isClopen_set LocallyConstant.ofClopen_fiber_one -> LocallyConstant.ofIsClopen_fiber_one LocallyConstant.ofClopen_fiber_zero -> LocallyConstant.ofIsClopen_fiber_zero LocallyConstant.ofClopen -> LocallyConstant.ofIsClopen preimage_clopen_of_clopen -> preimage_isClopen_of_isClopen TopologicalSpace.Clopens.clopen -> TopologicalSpace.Clopens.isClopen
@@ -214,7 +214,7 @@ theorem nhdsWithin_range_basis :
theorem isClosed_image_of_isClosed {s : Set M} (hsc : IsClosed s) (hs : s ⊆ support f) :
IsClosed (extChartAt I c '' s) := by
rw [f.image_eq_inter_preimage_of_subset_support hs]
- refine' ContinuousOn.preimage_closed_of_closed
+ refine' ContinuousOn.preimage_isClosed_of_isClosed
((continuousOn_extChartAt_symm _ _).mono f.closedBall_subset) _ hsc
exact IsClosed.inter isClosed_ball I.closed_range
#align smooth_bump_function.is_closed_image_of_is_closed SmoothBumpFunction.isClosed_image_of_isClosed
@@ -277,7 +277,7 @@ theorem tsupport_subset_chartAt_source : tsupport f ⊆ (chartAt H c).source :=
#align smooth_bump_function.tsupport_subset_chart_at_source SmoothBumpFunction.tsupport_subset_chartAt_source
protected theorem hasCompactSupport : HasCompactSupport f :=
- isCompact_of_isClosed_subset f.isCompact_symm_image_closedBall isClosed_closure
+ f.isCompact_symm_image_closedBall.of_isClosed_subset isClosed_closure
f.tsupport_subset_symm_image_closedBall
#align smooth_bump_function.has_compact_support SmoothBumpFunction.hasCompactSupport
@@ -204,7 +204,7 @@ theorem nhdsWithin_range_basis :
(𝓝[range I] extChartAt I c c).HasBasis (fun _ : SmoothBumpFunction I c => True) fun f =>
closedBall (extChartAt I c c) f.rOut ∩ range I := by
refine' ((nhdsWithin_hasBasis nhds_basis_closedBall _).restrict_subset
- (extChartAt_target_mem_nhdsWithin _ _)).to_has_basis' _ _
+ (extChartAt_target_mem_nhdsWithin _ _)).to_hasBasis' _ _
· rintro R ⟨hR0, hsub⟩
exact ⟨⟨⟨R / 2, R, half_pos hR0, half_lt_self hR0⟩, hsub⟩, trivial, Subset.rfl⟩
· exact fun f _ => inter_mem (mem_nhdsWithin_of_mem_nhds <| closedBall_mem_nhds _ f.rOut_pos)
@@ -293,7 +293,7 @@ theorem nhds_basis_tsupport :
(extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I) := by
rw [← map_extChartAt_symm_nhdsWithin_range I c]
exact nhdsWithin_range_basis.map _
- refine' this.to_has_basis' (fun f _ => ⟨f, trivial, f.tsupport_subset_symm_image_closedBall⟩)
+ refine' this.to_hasBasis' (fun f _ => ⟨f, trivial, f.tsupport_subset_symm_image_closedBall⟩)
fun f _ => f.tsupport_mem_nhds
#align smooth_bump_function.nhds_basis_tsupport SmoothBumpFunction.nhds_basis_tsupport
@@ -305,7 +305,7 @@ neighborhood of `c` and each neighborhood of `c` includes `support f` for some
`f : SmoothBumpFunction I c` such that `tsupport f ⊆ s`. -/
theorem nhds_basis_support {s : Set M} (hs : s ∈ 𝓝 c) :
(𝓝 c).HasBasis (fun f : SmoothBumpFunction I c => tsupport f ⊆ s) fun f => support f :=
- ((nhds_basis_tsupport I c).restrict_subset hs).to_has_basis'
+ ((nhds_basis_tsupport I c).restrict_subset hs).to_hasBasis'
(fun f hf => ⟨f, hf.2, subset_closure⟩) fun f _ => f.support_mem_nhds
#align smooth_bump_function.nhds_basis_support SmoothBumpFunction.nhds_basis_support
@@ -2,15 +2,12 @@
Copyright (c) 2021 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module geometry.manifold.bump_function
-! leanprover-community/mathlib commit b018406ad2f2a73223a3a9e198ccae61e6f05318
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Calculus.BumpFunction.FiniteDimension
import Mathlib.Geometry.Manifold.ContMDiff
+#align_import geometry.manifold.bump_function from "leanprover-community/mathlib"@"b018406ad2f2a73223a3a9e198ccae61e6f05318"
+
/-!
# Smooth bump functions on a smooth manifold
@@ -8,7 +8,7 @@ Authors: Yury Kudryashov
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
-import Mathlib.Analysis.Calculus.BumpFunctionFindim
+import Mathlib.Analysis.Calculus.BumpFunction.FiniteDimension
import Mathlib.Geometry.Manifold.ContMDiff
/-!
@@ -15,12 +15,12 @@ import Mathlib.Geometry.Manifold.ContMDiff
# Smooth bump functions on a smooth manifold
In this file we define `SmoothBumpFunction I c` to be a bundled smooth "bump" function centered at
-`c`. It is a structure that consists of two real numbers `0 < r < R` with small enough `R`. We
-define a coercion to function for this type, and for `f : SmoothBumpFunction I c`, the function
+`c`. It is a structure that consists of two real numbers `0 < rIn < rOut` with small enough `rOut`.
+We define a coercion to function for this type, and for `f : SmoothBumpFunction I c`, the function
`⇑f` written in the extended chart at `c` has the following properties:
-* `f x = 1` in the closed ball of radius `f.r` centered at `c`;
-* `f x = 0` outside of the ball of radius `f.R` centered at `c`;
+* `f x = 1` in the closed ball of radius `f.rIn` centered at `c`;
+* `f x = 0` outside of the ball of radius `f.rOut` centered at `c`;
* `0 ≤ f x ≤ 1` for all `x`.
The actual statements involve (pre)images under `extChartAt I f` and are given as lemmas in the
@@ -53,8 +53,8 @@ In this section we define a structure for a bundled smooth bump function and pro
`f : SmoothBumpFunction I M` is a smooth function on `M` such that in the extended chart `e` at
`f.c`:
-* `f x = 1` in the closed ball of radius `f.r` centered at `f.c`;
-* `f x = 0` outside of the ball of radius `f.R` centered at `f.c`;
+* `f x = 1` in the closed ball of radius `f.rIn` centered at `f.c`;
+* `f x = 0` outside of the ball of radius `f.rOut` centered at `f.c`;
* `0 ≤ f x ≤ 1` for all `x`.
The structure contains data required to construct a function with these properties. The function is
@@ -137,7 +137,7 @@ theorem support_subset_source : support f ⊆ (chartAt H c).source := by
theorem image_eq_inter_preimage_of_subset_support {s : Set M} (hs : s ⊆ support f) :
extChartAt I c '' s =
closedBall (extChartAt I c c) f.rOut ∩ range I ∩ (extChartAt I c).symm ⁻¹' s := by
- rw [support_eq_inter_preimage, subset_inter_iff, ← extChartAt_source I, ← image_subset_iff] at hs
+ rw [support_eq_inter_preimage, subset_inter_iff, ← extChartAt_source I, ← image_subset_iff] at hs
cases' hs with hse hsf
apply Subset.antisymm
· refine' subset_inter (subset_inter (hsf.trans ball_subset_closedBall) _) _
@@ -223,14 +223,14 @@ theorem isClosed_image_of_isClosed {s : Set M} (hsc : IsClosed s) (hs : s ⊆ su
#align smooth_bump_function.is_closed_image_of_is_closed SmoothBumpFunction.isClosed_image_of_isClosed
/-- If `f` is a smooth bump function and `s` closed subset of the support of `f` (i.e., of the open
-ball of radius `f.R`), then there exists `0 < r < f.R` such that `s` is a subset of the open ball of
-radius `r`. Formally, `s ⊆ e.source ∩ e ⁻¹' (ball (e c) r)`, where `e = extChartAt I c`. -/
+ball of radius `f.rOut`), then there exists `0 < r < f.rOut` such that `s` is a subset of the open
+ball of radius `r`. Formally, `s ⊆ e.source ∩ e ⁻¹' (ball (e c) r)`, where `e = extChartAt I c`. -/
theorem exists_r_pos_lt_subset_ball {s : Set M} (hsc : IsClosed s) (hs : s ⊆ support f) :
∃ r ∈ Ioo 0 f.rOut,
s ⊆ (chartAt H c).source ∩ extChartAt I c ⁻¹' ball (extChartAt I c c) r := by
set e := extChartAt I c
have : IsClosed (e '' s) := f.isClosed_image_of_isClosed hsc hs
- rw [support_eq_inter_preimage, subset_inter_iff, ← image_subset_iff] at hs
+ rw [support_eq_inter_preimage, subset_inter_iff, ← image_subset_iff] at hs
rcases exists_pos_lt_subset_ball f.rOut_pos this hs.2 with ⟨r, hrR, hr⟩
exact ⟨r, hrR, subset_inter hs.1 (image_subset_iff.1 hr)⟩
#align smooth_bump_function.exists_r_pos_lt_subset_ball SmoothBumpFunction.exists_r_pos_lt_subset_ball
@@ -304,8 +304,8 @@ variable {c}
/-- Given `s ∈ 𝓝 c`, the supports of smooth bump functions `f : SmoothBumpFunction I c` such that
`tsupport f ⊆ s` form a basis of `𝓝 c`. In other words, each of these supports is a
-neighborhood of `c` and each neighborhood of `c` includes `support f` for some `f :
-SmoothBumpFunction I c` such that `tsupport f ⊆ s`. -/
+neighborhood of `c` and each neighborhood of `c` includes `support f` for some
+`f : SmoothBumpFunction I c` such that `tsupport f ⊆ s`. -/
theorem nhds_basis_support {s : Set M} (hs : s ∈ 𝓝 c) :
(𝓝 c).HasBasis (fun f : SmoothBumpFunction I c => tsupport f ⊆ s) fun f => support f :=
((nhds_basis_tsupport I c).restrict_subset hs).to_has_basis'
@@ -347,4 +347,3 @@ theorem smooth_smul {G} [NormedAddCommGroup G] [NormedSpace ℝ G] {g : M → G}
#align smooth_bump_function.smooth_smul SmoothBumpFunction.smooth_smul
end SmoothBumpFunction
-
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file