Continuous partition of unity #
In this file we define PartitionOfUnity (ι X : Type*) [TopologicalSpace X] (s : Set X := univ)
to be a continuous partition of unity on s
indexed by ι
. More precisely,
f : PartitionOfUnity ι X s
is a collection of continuous functions f i : C(X, ℝ)
, i : ι
,
such that
- the supports of
f i
form a locally finite family of sets; - each
f i
is nonnegative; ∑ᶠ i, f i x = 1
for allx ∈ s
;∑ᶠ i, f i x ≤ 1
for allx : X
.
In the case s = univ
the last assumption follows from the previous one but it is convenient to
have this assumption in the case s ≠ univ
.
We also define a bump function covering,
BumpCovering (ι X : Type*) [TopologicalSpace X] (s : Set X := univ)
, to be a collection of
functions f i : C(X, ℝ)
, i : ι
, such that
- the supports of
f i
form a locally finite family of sets; - each
f i
is nonnegative; - for each
x ∈ s
there existsi : ι
such thatf i y = 1
in a neighborhood ofx
.
The term is motivated by the smooth case.
If f
is a bump function covering indexed by a linearly ordered type, then
g i x = f i x * ∏ᶠ j < i, (1 - f j x)
is a partition of unity, see
BumpCovering.toPartitionOfUnity
. Note that only finitely many terms 1 - f j x
are not equal
to one, so this product is well-defined.
Note that g i x = ∏ᶠ j ≤ i, (1 - f j x) - ∏ᶠ j < i, (1 - f j x)
, so most terms in the sum
∑ᶠ i, g i x
cancel, and we get ∑ᶠ i, g i x = 1 - ∏ᶠ i, (1 - f i x)
, and the latter product
equals zero because one of f i x
is equal to one.
We say that a partition of unity or a bump function covering f
is subordinate to a family of
sets U i
, i : ι
, if the closure of the support of each f i
is included in U i
. We use
Urysohn's Lemma to prove that a locally finite open covering of a normal topological space admits a
subordinate bump function covering (hence, a subordinate partition of unity), see
BumpCovering.exists_isSubordinate_of_locallyFinite
. If X
is a paracompact space, then any
open covering admits a locally finite refinement, hence it admits a subordinate bump function
covering and a subordinate partition of unity, see BumpCovering.exists_isSubordinate
.
We also provide two slightly more general versions of these lemmas,
BumpCovering.exists_isSubordinate_of_locallyFinite_of_prop
and
BumpCovering.exists_isSubordinate_of_prop
, to be used later in the construction of a smooth
partition of unity.
Implementation notes #
Most (if not all) books only define a partition of unity of the whole space. However, quite a few
proofs only deal with f i
such that tsupport (f i)
meets a specific closed subset, and
it is easier to formalize these proofs if we don't have other functions right away.
We use WellOrderingRel j i
instead of j < i
in the definition of
BumpCovering.toPartitionOfUnity
to avoid a [LinearOrder ι]
assumption. While
WellOrderingRel j i
is a well order, not only a strict linear order, we never use this property.
Tags #
partition of unity, bump function, Urysohn's lemma, normal space, paracompact space
A continuous partition of unity on a set s : Set X
is a collection of continuous functions
f i
such that
- the supports of
f i
form a locally finite family of sets, i.e., for every pointx : X
there exists a neighborhoodU ∋ x
such that all but finitely many functionsf i
are zero onU
; - the functions
f i
are nonnegative; - the sum
∑ᶠ i, f i x
is equal to one for everyx ∈ s
and is less than or equal to one otherwise.
If X
is a normal paracompact space, then PartitionOfUnity.exists_isSubordinate
guarantees
that for every open covering U : Set (Set X)
of s
there exists a partition of unity that is
subordinate to U
.
- locallyFinite' : LocallyFinite fun (i : ι) => Function.support ⇑(self.toFun i)
- nonneg' : 0 ≤ self.toFun
Instances For
A BumpCovering ι X s
is an indexed family of functions f i
, i : ι
, such that
- the supports of
f i
form a locally finite family of sets, i.e., for every pointx : X
there exists a neighborhoodU ∋ x
such that all but finitely many functionsf i
are zero onU
; - for all
i
,x
we have0 ≤ f i x ≤ 1
; - each point
x ∈ s
belongs to the interior of{x | f i x = 1}
for somei
.
One of the main use cases for a BumpCovering
is to define a PartitionOfUnity
, see
BumpCovering.toPartitionOfUnity
, but some proofs can directly use a BumpCovering
instead of
a PartitionOfUnity
.
If X
is a normal paracompact space, then BumpCovering.exists_isSubordinate
guarantees that for
every open covering U : Set (Set X)
of s
there exists a BumpCovering
of s
that is
subordinate to U
.
- locallyFinite' : LocallyFinite fun (i : ι) => Function.support ⇑(self.toFun i)
- nonneg' : 0 ≤ self.toFun
- le_one' : self.toFun ≤ 1
Instances For
Equations
- One or more equations did not get rendered due to their size.
If f
is a partition of unity on s
, then for every x ∈ s
there exists an index i
such
that 0 < f i x
.
The support of a partition of unity at a point x₀
as a Finset
.
This is the set of i : ι
such that f i
doesn't vanish at x₀
.
Equations
- PartitionOfUnity.finsupport ρ x₀ = Set.Finite.toFinset (_ : Set.Finite {b : ι | x₀ ∈ Function.support ⇑(ρ b)})
Instances For
If f
is a partition of unity on s : Set X
and g : X → E
is continuous at every point of
the topological support of some f i
, then fun x ↦ f i x • g x
is continuous on the whole space.
If f
is a partition of unity on a set s : Set X
and g : ι → X → E
is a family of functions
such that each g i
is continuous at every point of the topological support of f i
, then the sum
fun x ↦ ∑ᶠ i, f i x • g i x
is continuous on the whole space.
A partition of unity f i
is subordinate to a family of sets U i
indexed by the same type if
for each i
the closure of the support of f i
is a subset of U i
.
Equations
- PartitionOfUnity.IsSubordinate f U = ∀ (i : ι), tsupport ⇑(f i) ⊆ U i
Instances For
If f
is a partition of unity that is subordinate to a family of open sets U i
and
g : ι → X → E
is a family of functions such that each g i
is continuous on U i
, then the sum
fun x ↦ ∑ᶠ i, f i x • g i x
is a continuous function.
Equations
- One or more equations did not get rendered due to their size.
A BumpCovering
that consists of a single function, uniformly equal to one, defined as an
example for Inhabited
instance.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- BumpCovering.instInhabitedBumpCovering = { default := BumpCovering.single default s }
A collection of bump functions f i
is subordinate to a family of sets U i
indexed by the
same type if for each i
the closure of the support of f i
is a subset of U i
.
Equations
- BumpCovering.IsSubordinate f U = ∀ (i : ι), tsupport ⇑(f i) ⊆ U i
Instances For
If X
is a normal topological space and U i
, i : ι
, is a locally finite open covering of a
closed set s
, then there exists a BumpCovering ι X s
that is subordinate to U
. If X
is a
paracompact space, then the assumption hf : LocallyFinite U
can be omitted, see
BumpCovering.exists_isSubordinate
. This version assumes that p : (X → ℝ) → Prop
is a predicate
that satisfies Urysohn's lemma, and provides a BumpCovering
such that each function of the
covering satisfies p
.
If X
is a normal topological space and U i
, i : ι
, is a locally finite open covering of a
closed set s
, then there exists a BumpCovering ι X s
that is subordinate to U
. If X
is a
paracompact space, then the assumption hf : LocallyFinite U
can be omitted, see
BumpCovering.exists_isSubordinate
.
If X
is a paracompact normal topological space and U
is an open covering of a closed set
s
, then there exists a BumpCovering ι X s
that is subordinate to U
. This version assumes that
p : (X → ℝ) → Prop
is a predicate that satisfies Urysohn's lemma, and provides a
BumpCovering
such that each function of the covering satisfies p
.
If X
is a paracompact normal topological space and U
is an open covering of a closed set
s
, then there exists a BumpCovering ι X s
that is subordinate to U
.
Index of a bump function such that fs i =ᶠ[𝓝 x] 1
.
Equations
- BumpCovering.ind f x hx = Exists.choose (_ : ∃ (i : ι), ⇑(f.toFun i) =ᶠ[nhds x] 1)
Instances For
Partition of unity defined by a BumpCovering
. We use this auxiliary definition to prove some
properties of the new family of functions before bundling it into a PartitionOfUnity
. Do not use
this definition, use BumpCovering.toPartitionOfUnity
instead.
The partition of unity is given by the formula g i x = f i x * ∏ᶠ j < i, (1 - f j x)
. In other
words, g i x = ∏ᶠ j < i, (1 - f j x) - ∏ᶠ j ≤ i, (1 - f j x)
, so
∑ᶠ i, g i x = 1 - ∏ᶠ j, (1 - f j x)
. If x ∈ s
, then one of f j x
equals one, hence the product
of 1 - f j x
vanishes, and ∑ᶠ i, g i x = 1
.
In order to avoid an assumption LinearOrder ι
, we use WellOrderingRel
instead of (<)
.
Equations
- BumpCovering.toPOUFun f i x = (f i) x * finprod fun (j : ι) => finprod fun (x_1 : WellOrderingRel j i) => 1 - (f j) x
Instances For
The partition of unity defined by a BumpCovering
.
The partition of unity is given by the formula g i x = f i x * ∏ᶠ j < i, (1 - f j x)
. In other
words, g i x = ∏ᶠ j < i, (1 - f j x) - ∏ᶠ j ≤ i, (1 - f j x)
, so
∑ᶠ i, g i x = 1 - ∏ᶠ j, (1 - f j x)
. If x ∈ s
, then one of f j x
equals one, hence the product
of 1 - f j x
vanishes, and ∑ᶠ i, g i x = 1
.
In order to avoid an assumption LinearOrder ι
, we use WellOrderingRel
instead of (<)
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- PartitionOfUnity.instInhabitedPartitionOfUnity = { default := BumpCovering.toPartitionOfUnity default }
If X
is a normal topological space and U
is a locally finite open covering of a closed set
s
, then there exists a PartitionOfUnity ι X s
that is subordinate to U
. If X
is a
paracompact space, then the assumption hf : LocallyFinite U
can be omitted, see
BumpCovering.exists_isSubordinate
.
If X
is a paracompact normal topological space and U
is an open covering of a closed set
s
, then there exists a PartitionOfUnity ι X s
that is subordinate to U
.