Skip to content

Commit ff21e64

Browse files
committed
feat: fintsupport of (smooth) partitions of unity (#10015)
From sphere-eversion: the result is used there for smooth partitions of unity, but also holds in the continuous setting. In passing, - use `Type*` (not `Type _`) in `sum_finsupport_smul_eq_finsum`, - tag `SmoothPartitionOfUnity.toPartitionOfUnity` with @simps.
1 parent 8eaff3e commit ff21e64

File tree

2 files changed

+101
-2
lines changed

2 files changed

+101
-2
lines changed

Mathlib/Geometry/Manifold/PartitionOfUnity.lean

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ theorem sum_le_one (x : M) : ∑ᶠ i, f i x ≤ 1 :=
166166
#align smooth_partition_of_unity.sum_le_one SmoothPartitionOfUnity.sum_le_one
167167

168168
/-- Reinterpret a smooth partition of unity as a continuous partition of unity. -/
169+
@[simps]
169170
def toPartitionOfUnity : PartitionOfUnity ι M s :=
170171
{ f with toFun := fun i => f i }
171172
#align smooth_partition_of_unity.to_partition_of_unity SmoothPartitionOfUnity.toPartitionOfUnity
@@ -232,6 +233,64 @@ theorem finsum_smul_mem_convex {g : ι → M → F} {t : Set F} {x : M} (hx : x
232233
ht.finsum_mem (fun _ => f.nonneg _ _) (f.sum_eq_one hx) hg
233234
#align smooth_partition_of_unity.finsum_smul_mem_convex SmoothPartitionOfUnity.finsum_smul_mem_convex
234235

236+
section finsupport
237+
238+
variable {s : Set M} (ρ : SmoothPartitionOfUnity ι I M s) (x₀ : M)
239+
240+
/-- The support of a smooth partition of unity at a point `x₀` as a `Finset`.
241+
This is the set of `i : ι` such that `x₀ ∈ support f i`, i.e. `f i ≠ x₀`. -/
242+
def finsupport : Finset ι := ρ.toPartitionOfUnity.finsupport x₀
243+
244+
@[simp]
245+
theorem mem_finsupport {i : ι} : i ∈ ρ.finsupport x₀ ↔ i ∈ support fun i ↦ ρ i x₀ :=
246+
ρ.toPartitionOfUnity.mem_finsupport x₀
247+
248+
@[simp]
249+
theorem coe_finsupport : (ρ.finsupport x₀ : Set ι) = support fun i ↦ ρ i x₀ :=
250+
ρ.toPartitionOfUnity.coe_finsupport x₀
251+
252+
theorem sum_finsupport (hx₀ : x₀ ∈ s) : ∑ i in ρ.finsupport x₀, ρ i x₀ = 1 :=
253+
ρ.toPartitionOfUnity.sum_finsupport hx₀
254+
255+
theorem sum_finsupport' (hx₀ : x₀ ∈ s) {I : Finset ι} (hI : ρ.finsupport x₀ ⊆ I) :
256+
∑ i in I, ρ i x₀ = 1 :=
257+
ρ.toPartitionOfUnity.sum_finsupport' hx₀ hI
258+
259+
theorem sum_finsupport_smul_eq_finsum {A : Type*} [AddCommGroup A] [Module ℝ A] (φ : ι → M → A) :
260+
∑ i in ρ.finsupport x₀, ρ i x₀ • φ i x₀ = ∑ᶠ i, ρ i x₀ • φ i x₀ :=
261+
ρ.toPartitionOfUnity.sum_finsupport_smul_eq_finsum φ
262+
263+
end finsupport
264+
265+
section fintsupport -- smooth partitions of unity have locally finite `tsupport`
266+
variable {s : Set M} (ρ : SmoothPartitionOfUnity ι I M s) (x₀ : M)
267+
268+
/-- The `tsupport`s of a smooth partition of unity are locally finite. -/
269+
theorem finite_tsupport : {i | x₀ ∈ tsupport (ρ i)}.Finite :=
270+
ρ.toPartitionOfUnity.finite_tsupport _
271+
272+
/-- The tsupport of a partition of unity at a point `x₀` as a `Finset`.
273+
This is the set of `i : ι` such that `x₀ ∈ tsupport f i`. -/
274+
def fintsupport (x : M ): Finset ι :=
275+
(ρ.finite_tsupport x).toFinset
276+
277+
theorem mem_fintsupport_iff (i : ι) : i ∈ ρ.fintsupport x₀ ↔ x₀ ∈ tsupport (ρ i) :=
278+
Finite.mem_toFinset _
279+
280+
theorem eventually_fintsupport_subset :
281+
∀ᶠ y in 𝓝 x₀, ρ.fintsupport y ⊆ ρ.fintsupport x₀ :=
282+
ρ.toPartitionOfUnity.eventually_fintsupport_subset _
283+
284+
theorem finsupport_subset_fintsupport : ρ.finsupport x₀ ⊆ ρ.fintsupport x₀ :=
285+
ρ.toPartitionOfUnity.finsupport_subset_fintsupport x₀
286+
287+
theorem eventually_finsupport_subset : ∀ᶠ y in 𝓝 x₀, ρ.finsupport y ⊆ ρ.fintsupport x₀ :=
288+
ρ.toPartitionOfUnity.eventually_finsupport_subset x₀
289+
290+
end fintsupport
291+
292+
section IsSubordinate
293+
235294
/-- A smooth partition of unity `f i` is subordinate to a family of sets `U i` indexed by the same
236295
type if for each `i` the closure of the support of `f i` is a subset of `U i`. -/
237296
def IsSubordinate (f : SmoothPartitionOfUnity ι I M s) (U : ι → Set M) :=
@@ -267,6 +326,8 @@ theorem IsSubordinate.smooth_finsum_smul {g : ι → M → F} (hf : f.IsSubordin
267326
hf.contMDiff_finsum_smul ho hg
268327
#align smooth_partition_of_unity.is_subordinate.smooth_finsum_smul SmoothPartitionOfUnity.IsSubordinate.smooth_finsum_smul
269328

329+
end IsSubordinate
330+
270331
end SmoothPartitionOfUnity
271332

272333
namespace BumpCovering

Mathlib/Topology/PartitionOfUnity.lean

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ section finsupport
180180
variable {s : Set X} (ρ : PartitionOfUnity ι X s) (x₀ : X)
181181

182182
/-- The support of a partition of unity at a point `x₀` as a `Finset`.
183-
This is the set of `i : ι` such that `f i` doesn't vanish at `x₀`. -/
183+
This is the set of `i : ι` such that `x₀ ∈ support f i`, i.e. `f i ≠ x₀`. -/
184184
def finsupport : Finset ι := (ρ.locallyFinite.point_finite x₀).toFinset
185185

186186
@[simp]
@@ -210,7 +210,7 @@ theorem sum_finsupport' (hx₀ : x₀ ∈ s) {I : Finset ι} (hI : ρ.finsupport
210210
simp only [Finset.mem_sdiff, ρ.mem_finsupport, mem_support, Classical.not_not] at hx
211211
exact hx.2
212212

213-
theorem sum_finsupport_smul_eq_finsum {M : Type _} [AddCommGroup M] [Module ℝ M] (φ : ι → X → M) :
213+
theorem sum_finsupport_smul_eq_finsum {M : Type*} [AddCommGroup M] [Module ℝ M] (φ : ι → X → M) :
214214
∑ i in ρ.finsupport x₀, ρ i x₀ • φ i x₀ = ∑ᶠ i, ρ i x₀ • φ i x₀ := by
215215
apply (finsum_eq_sum_of_support_subset _ _).symm
216216
have : (fun i ↦ (ρ i) x₀ • φ i x₀) = (fun i ↦ (ρ i) x₀) • (fun i ↦ φ i x₀) :=
@@ -220,6 +220,44 @@ theorem sum_finsupport_smul_eq_finsum {M : Type _} [AddCommGroup M] [Module ℝ
220220

221221
end finsupport
222222

223+
section fintsupport -- partitions of unity have locally finite `tsupport`
224+
225+
variable {s : Set X} (ρ : PartitionOfUnity ι X s) (x₀ : X)
226+
227+
/-- The `tsupport`s of a partition of unity are locally finite. -/
228+
theorem finite_tsupport : {i | x₀ ∈ tsupport (ρ i)}.Finite := by
229+
rcases ρ.locallyFinite x₀ with ⟨t, t_in, ht⟩
230+
apply ht.subset
231+
rintro i hi
232+
simp only [inter_comm]
233+
exact mem_closure_iff_nhds.mp hi t t_in
234+
235+
/-- The tsupport of a partition of unity at a point `x₀` as a `Finset`.
236+
This is the set of `i : ι` such that `x₀ ∈ tsupport f i`. -/
237+
def fintsupport (x₀ : X) : Finset ι :=
238+
(ρ.finite_tsupport x₀).toFinset
239+
240+
theorem mem_fintsupport_iff (i : ι) : i ∈ ρ.fintsupport x₀ ↔ x₀ ∈ tsupport (ρ i) :=
241+
Finite.mem_toFinset _
242+
243+
theorem eventually_fintsupport_subset :
244+
∀ᶠ y in 𝓝 x₀, ρ.fintsupport y ⊆ ρ.fintsupport x₀ := by
245+
apply (ρ.locallyFinite.closure.eventually_subset (fun _ ↦ isClosed_closure) x₀).mono
246+
intro y hy z hz
247+
rw [PartitionOfUnity.mem_fintsupport_iff] at *
248+
exact hy hz
249+
250+
theorem finsupport_subset_fintsupport : ρ.finsupport x₀ ⊆ ρ.fintsupport x₀ := fun i hi ↦ by
251+
rw [ρ.mem_fintsupport_iff]
252+
apply subset_closure
253+
exact (ρ.mem_finsupport x₀).mp hi
254+
255+
theorem eventually_finsupport_subset : ∀ᶠ y in 𝓝 x₀, ρ.finsupport y ⊆ ρ.fintsupport x₀ :=
256+
(ρ.eventually_fintsupport_subset x₀).mono
257+
fun y hy ↦ (ρ.finsupport_subset_fintsupport y).trans hy
258+
259+
end fintsupport
260+
223261
/-- If `f` is a partition of unity on `s : Set X` and `g : X → E` is continuous at every point of
224262
the topological support of some `f i`, then `fun x ↦ f i x • g x` is continuous on the whole space.
225263
-/

0 commit comments

Comments
 (0)